diff -Nru soundtracker-0.6.8/ABOUT-NLS soundtracker-1.0.2~pre2/ABOUT-NLS --- soundtracker-0.6.8/ABOUT-NLS 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/ABOUT-NLS 2019-04-29 14:16:08.000000000 +0000 @@ -1,16 +1,16 @@ 1 Notes on the Free Translation Project *************************************** -Free software is going international! The Free Translation Project is -a way to get maintainers of free software, translators, and users all +Free software is going international! The Free Translation Project is a +way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. - If you found this `ABOUT-NLS' file inside a distribution, you may -assume that the distributed package does use GNU `gettext' internally, + If you found this 'ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU 'gettext' internally, itself available at your nearest GNU archive site. But you do _not_ -need to install GNU `gettext' prior to configuring, installing or using +need to install GNU 'gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also @@ -18,134 +18,91 @@ available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. - When reporting bugs in the `intl/' directory or bugs which may be -related to internationalization, you should tell about the version of -`gettext' which is used. The information can be found in the -`intl/VERSION' file, in internationalized packages. - -1.1 Quick configuration advice -============================== - -If you want to exploit the full power of internationalization, you -should configure it using - - ./configure --with-included-gettext - -to force usage of internationalizing routines provided within this -package, despite the existence of internationalizing capabilities in the -operating system where this package is being installed. So far, only -the `gettext' implementation in the GNU C library version 2 provides as -many features (such as locale alias, message inheritance, automatic -charset conversion or plural form handling) as the implementation here. -It is also not possible to offer this additional functionality on top -of a `catgets' implementation. Future versions of GNU `gettext' will -very likely convey even more functionality. So it might be a good idea -to change to GNU `gettext' as soon as possible. - - So you need _not_ provide this option if you are using GNU libc 2 or -you have installed a recent copy of the GNU gettext package with the -included `libintl'. - -1.2 INSTALL Matters +1.1 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such -packages use GNU `gettext'. Other packages have their own ways to -internationalization, predating GNU `gettext'. +packages use GNU 'gettext'. Other packages have their own ways to +internationalization, predating GNU 'gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already -provides the GNU `gettext' functions. If not, the included GNU -`gettext' library will be used. This library is wholly contained -within this package, usually in the `intl/' subdirectory, so prior -installation of the GNU `gettext' package is _not_ required. -Installers may use special options at configuration time for changing -the default behaviour. The commands: +provides the GNU 'gettext' functions. Installers may use special +options at configuration time for changing the default behaviour. The +command: - ./configure --with-included-gettext ./configure --disable-nls -will, respectively, bypass any pre-existing `gettext' to use the -internationalizing routines provided within this package, or else, -_totally_ disable translation of messages. - - When you already have GNU `gettext' installed on your system and run -configure without an option for your new package, `configure' will -probably detect the previously built and installed `libintl.a' file and -will decide to use this. This might not be desirable. You should use -the more recent version of the GNU `gettext' library. I.e. if the file -`intl/VERSION' shows that the library which comes with this package is -more recent, you should use - - ./configure --with-included-gettext - -to prevent auto-detection. - - The configuration process will not test for the `catgets' function -and therefore it will not be used. The reason is that even an -emulation of `gettext' on top of `catgets' could not provide all the -extensions of the GNU `gettext' library. +will _totally_ disable translation of messages. + + When you already have GNU 'gettext' installed on your system and run +configure without an option for your new package, 'configure' will +probably detect the previously built and installed 'libintl' library and +will decide to use it. If not, you may have to to use the +'--with-libintl-prefix' option to tell 'configure' where to look for it. - Internationalized packages usually have many `po/LL.po' files, where + Internationalized packages usually have many 'po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless -translations have been forbidden at `configure' time by using the -`--disable-nls' switch, all available translations are installed -together with the package. However, the environment variable `LINGUAS' +translations have been forbidden at 'configure' time by using the +'--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable 'LINGUAS' may be set, prior to configuration, to limit the installed set. -`LINGUAS' should then contain a space separated list of two-letter +'LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. -1.3 Using This Package +1.2 Using This Package ====================== As a user, if your language has been installed for this package, you -only have to set the `LANG' environment variable to the appropriate -`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, -and `CC' is an ISO 3166 two-letter country code. For example, let's -suppose that you speak German and live in Germany. At the shell -prompt, merely execute `setenv LANG de_DE' (in `csh'), -`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). -This can be done from your `.login' or `.profile' file, once and for -all. +only have to set the 'LANG' environment variable to the appropriate +'LL_CC' combination. If you happen to have the 'LC_ALL' or some other +'LC_xxx' environment variables set, you should unset them before setting +'LANG', otherwise the setting of 'LANG' will not have the desired +effect. Here 'LL' is an ISO 639 two-letter language code, and 'CC' is +an ISO 3166 two-letter country code. For example, let's suppose that +you speak German and live in Germany. At the shell prompt, merely +execute 'setenv LANG de_DE' (in 'csh'), 'export LANG; LANG=de_DE' (in +'sh') or 'export LANG=de_DE' (in 'bash'). This can be done from your +'.login' or '.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For -example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +example, 'de_AT' is used for Austria, and 'pt_BR' for Brazil. The country code serves to distinguish the dialects. - The locale naming convention of `LL_CC', with `LL' denoting the -language and `CC' denoting the country, is the one use on systems based -on GNU libc. On other systems, some variations of this scheme are -used, such as `LL' or `LL_CC.ENCODING'. You can get the list of -locales supported by your system for your country by running the command -`locale -a | grep '^LL''. + The locale naming convention of 'LL_CC', with 'LL' denoting the +language and 'CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are used, +such as 'LL' or 'LL_CC.ENCODING'. You can get the list of locales +supported by your system for your language by running the command +'locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called -`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' -for the purpose of message handling, but you still need to have `LANG' +'LANGUAGE'. GNU 'gettext' gives preference to 'LANGUAGE' over 'LANG' +for the purpose of message handling, but you still need to have 'LANG' set to the primary language; this is required by other parts of the -system libraries. For example, some Swedish users who would rather -read translations in German than English for when Swedish is not -available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. +system libraries. For example, some Swedish users who would rather read +translations in German than English for when Swedish is not available, +set 'LANGUAGE' to 'sv:de' while leaving 'LANG' to 'sv_SE'. Special advice for Norwegian users: The language code for Norwegian -bokma*l changed from `no' to `nb' recently (in 2003). During the +bokma*l changed from 'no' to 'nb' recently (in 2003). During the transition period, while some message catalogs for this language are -installed under `nb' and some older ones under `no', it's recommended -for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and +installed under 'nb' and some older ones under 'no', it's recommended +for Norwegian users to set 'LANGUAGE' to 'nb:no' so that both newer and older translations are used. - In the `LANGUAGE' environment variable, but not in the `LANG' -environment variable, `LL_CC' combinations can be abbreviated as `LL' -to denote the language's main dialect. For example, `de' is equivalent -to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' -(Portuguese as spoken in Portugal) in this context. + In the 'LANGUAGE' environment variable, but not in the 'LANG' +environment variable, 'LL_CC' combinations can be abbreviated as 'LL' to +denote the language's main dialect. For example, 'de' is equivalent to +'de_DE' (German as spoken in Germany), and 'pt' to 'pt_PT' (Portuguese +as spoken in Portugal) in this context. -1.4 Translating Teams +1.3 Translating Teams ===================== For the Free Translation Project to be a success, we need interested @@ -153,801 +110,1239 @@ able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, -`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" -area. +'http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has -`-request' appended. For example, speakers of Swedish can send a -message to `sv-request@li.org', having this message body: +'-request' appended. For example, speakers of Swedish can send a +message to 'sv-request@li.org', having this message body: subscribe - Keep in mind that team members are expected to participate -_actively_ in translations, or at solving translational difficulties, -rather than merely lurking around. If your team does not exist yet and -you want to start one, or if you are unsure about what to do or how to -get started, please write to `translation@iro.umontreal.ca' to reach the + Keep in mind that team members are expected to participate _actively_ +in translations, or at solving translational difficulties, rather than +merely lurking around. If your team does not exist yet and you want to +start one, or if you are unsure about what to do or how to get started, +please write to 'coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing -the terminology in use. Proven linguistic skill are praised more than -programming skill, here. +the terminology in use. Proven linguistic skills are praised more than +programming skills, here. -1.5 Available Packages +1.4 Available Packages ====================== Languages are not equally supported in all packages. The following -matrix shows the current state of internationalization, as of April -2005. The matrix shows, in regard of each package, for which languages -PO files have been submitted to translation coordination, with a +matrix shows the current state of internationalization, as of Jun 2014. +The matrix shows, in regard of each package, for which languages PO +files have been submitted to translation coordination, with a translation percentage of at least 50%. - Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB - +-------------------------------------------------+ - GNUnet | | - a2ps | [] [] [] [] [] | - aegis | () | - ant-phone | () | - anubis | [] | - ap-utils | | - aspell | [] [] [] [] | - bash | [] [] | - batchelor | [] | - bfd | | - bibshelf | [] | - binutils | [] | - bison | [] [] | - bluez-pin | [] [] [] [] | - clisp | [] [] | - console-tools | [] [] | - coreutils | [] [] [] [] | - cpio | | - cpplib | [] [] [] | - darkstat | [] () [] | - dialog | [] [] [] [] [] [] | - diffutils | [] [] [] [] [] | - doodle | [] | - e2fsprogs | [] [] | - enscript | [] [] [] [] | - error | [] [] [] [] | - fetchmail | [] () [] [] [] | - fileutils | [] [] | - findutils | [] [] [] | - flex | [] [] [] | - fslint | [] | - gas | | - gawk | [] [] [] | - gbiff | [] | - gcal | [] | - gcc | [] | - gettext-examples | [] [] [] [] | - gettext-runtime | [] [] [] [] | - gettext-tools | [] [] | - gimp-print | [] [] [] [] | - gip | | - gliv | [] | - glunarclock | | - gmult | [] [] | - gnubiff | () | - gnucash | [] () () [] | - gnucash-glossary | [] () | - gpe-aerial | [] [] | - gpe-beam | [] [] | - gpe-calendar | [] [] | - gpe-clock | [] [] | - gpe-conf | [] [] | - gpe-contacts | | - gpe-edit | [] | - gpe-go | [] | - gpe-login | [] [] | - gpe-ownerinfo | [] [] | - gpe-sketchbook | [] [] | - gpe-su | [] [] | - gpe-taskmanager | [] [] | - gpe-timesheet | [] | - gpe-today | [] [] | - gpe-todo | [] [] | - gphoto2 | [] [] [] [] | - gprof | [] [] | - gpsdrive | () () | - gramadoir | [] [] | - grep | [] [] [] [] [] [] | - gretl | | - gsasl | [] | - gss | | - gst-plugins | [] [] [] [] [] [] | - gstreamer | [] [] [] [] [] | - gtick | [] () | - gtkspell | [] [] [] | - hello | [] [] [] [] | - id-utils | [] [] | - impost | | - indent | [] [] | - iso_3166 | | - iso_3166_1 | [] [] [] [] [] | - iso_3166_2 | | - iso_3166_3 | [] | - iso_4217 | | - iso_639 | | - jpilot | [] | - jtag | | - jwhois | | - kbd | [] [] [] [] | - latrine | () | - ld | [] | - libc | [] [] [] [] [] | - libextractor | | - libgpewidget | [] [] [] | - libgsasl | | - libiconv | [] [] [] [] [] | - libidn | | - lifelines | [] () | - lilypond | [] | - lingoteach | | - lynx | [] [] [] [] | - m4 | [] [] [] [] | - mailutils | [] | - make | [] [] | - man-db | [] () [] [] | - minicom | [] [] | - mysecretdiary | [] [] | - nano | [] () [] | - nano_1_0 | [] () [] [] | - opcodes | [] | - parted | [] [] [] [] | - psmisc | | - ptx | [] [] [] | - pwdutils | | - python | | - radius | [] | - recode | [] [] [] [] [] | - rpm | [] [] | - screem | | - scrollkeeper | [] [] [] [] [] [] [] [] | - sed | [] [] | - sh-utils | [] [] | - shared-mime-info | [] [] | - sharutils | [] [] [] [] [] | - silky | | - skencil | [] () | - sketch | [] () | - solfege | [] | - soundtracker | [] [] | - sp | [] | - stardict | [] | - tar | | - texinfo | [] [] | - textutils | [] [] [] | - tin | () () | - tp-robot | [] | - tuxpaint | [] [] [] [] [] [] [] | - unicode-han-tra... | | - unicode-transla... | | - util-linux | [] [] [] [] | - vorbis-tools | [] [] [] [] | - wastesedge | () | - wdiff | [] [] [] [] | - wget | [] [] [] [] [] [] | - xchat | [] [] [] [] | - xkeyboard-config | | - xpad | | - +-------------------------------------------------+ - af am ar az be bg bs ca cs cy da de el en en_GB - 10 0 0 2 7 4 0 41 43 3 52 90 20 1 15 - - eo es et eu fa fi fr ga gl he hr hu id is it - +-----------------------------------------------+ - GNUnet | | - a2ps | [] [] [] () | - aegis | | - ant-phone | [] | - anubis | [] | - ap-utils | [] | - aspell | [] [] | - bash | [] [] [] [] | - batchelor | [] [] | - bfd | [] | - bibshelf | [] [] [] | - binutils | [] [] | - bison | [] [] [] [] [] [] | - bluez-pin | [] [] [] [] [] [] | - clisp | [] [] | - console-tools | | - coreutils | [] [] [] [] [] | - cpio | [] [] | - cpplib | [] [] | - darkstat | [] () [] [] [] | - dialog | [] [] [] [] [] [] [] [] | - diffutils | [] [] [] [] [] [] [] [] [] [] | - doodle | [] [] | - e2fsprogs | [] [] [] | - enscript | [] [] | - error | [] [] [] [] [] | - fetchmail | [] | - fileutils | [] [] [] [] [] [] | - findutils | [] [] [] [] [] | - flex | [] [] [] | - fslint | [] | - gas | [] [] | - gawk | [] [] [] [] | - gbiff | [] | - gcal | [] [] | - gcc | [] | - gettext-examples | [] [] [] [] | - gettext-runtime | [] [] [] [] [] [] | - gettext-tools | [] [] [] | - gimp-print | [] [] | - gip | [] [] [] | - gliv | () | - glunarclock | [] [] [] | - gmult | [] [] [] | - gnubiff | () () | - gnucash | [] () [] | - gnucash-glossary | [] [] | - gpe-aerial | [] [] | - gpe-beam | [] [] | - gpe-calendar | [] [] [] [] | - gpe-clock | [] [] [] | - gpe-conf | [] | - gpe-contacts | [] | - gpe-edit | [] [] | - gpe-go | [] [] | - gpe-login | [] [] [] | - gpe-ownerinfo | [] [] [] [] [] | - gpe-sketchbook | [] [] | - gpe-su | [] [] [] | - gpe-taskmanager | [] [] [] | - gpe-timesheet | [] [] [] [] | - gpe-today | [] [] [] [] | - gpe-todo | [] [] [] | - gphoto2 | [] [] [] [] [] | - gprof | [] [] [] | - gpsdrive | () () [] () | - gramadoir | [] [] | - grep | [] [] [] [] [] [] [] [] [] [] [] [] | - gretl | [] [] [] | - gsasl | [] [] [] | - gss | [] | - gst-plugins | [] [] [] | - gstreamer | [] | - gtick | [] [] [] [] [] | - gtkspell | [] [] [] [] [] [] | - hello | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | - id-utils | [] [] [] [] | - impost | [] [] | - indent | [] [] [] [] [] [] [] [] [] [] [] | - iso_3166 | [] [] [] | - iso_3166_1 | [] [] [] [] [] [] [] | - iso_3166_2 | [] | - iso_3166_3 | [] | - iso_4217 | [] [] [] | - iso_639 | [] [] [] [] | - jpilot | [] [] | - jtag | [] | - jwhois | [] [] [] [] [] | - kbd | [] [] | - latrine | [] [] [] | - ld | [] [] | - libc | [] [] [] [] [] | - libextractor | | - libgpewidget | [] [] [] [] [] | - libgsasl | [] [] | - libiconv | [] [] [] [] [] [] [] [] [] [] [] | - libidn | [] [] | - lifelines | () | - lilypond | [] | - lingoteach | [] [] [] | - lynx | [] [] [] | - m4 | [] [] [] [] | - mailutils | [] [] | - make | [] [] [] [] [] [] [] | - man-db | () | - minicom | [] [] [] [] | - mysecretdiary | [] [] [] | - nano | [] [] () [] [] | - nano_1_0 | [] [] [] [] [] | - opcodes | [] [] | - parted | [] [] [] [] | - psmisc | [] [] | - ptx | [] [] [] [] [] [] [] [] [] | - pwdutils | | - python | | - radius | [] [] | - recode | [] [] [] [] [] [] [] [] | - rpm | [] | - screem | | - scrollkeeper | [] [] [] | - sed | [] [] [] [] [] | - sh-utils | [] [] [] [] [] [] [] | - shared-mime-info | [] [] [] [] [] [] | - sharutils | [] [] [] [] [] [] [] | - silky | [] | - skencil | [] [] | - sketch | [] [] | - solfege | [] | - soundtracker | [] [] [] | - sp | [] | - stardict | [] | - tar | [] [] [] [] [] | - texinfo | [] [] [] | - textutils | [] [] [] [] [] | - tin | [] () | - tp-robot | [] [] | - tuxpaint | [] [] [] [] [] [] [] [] [] | - unicode-han-tra... | | - unicode-transla... | [] [] | - util-linux | [] [] [] [] [] [] | - vorbis-tools | [] [] | - wastesedge | () | - wdiff | [] [] [] [] [] [] [] [] | - wget | [] [] [] [] [] [] [] [] [] [] | - xchat | [] [] [] [] [] | - xkeyboard-config | | - xpad | [] [] [] | - +-----------------------------------------------+ - eo es et eu fa fi fr ga gl he hr hu id is it - 13 85 21 15 2 35 115 45 17 8 6 40 27 1 45 - - ja ko ku lg lt lv mk mn ms mt nb nl nn no nso - +-----------------------------------------------+ - GNUnet | | - a2ps | () [] [] () | - aegis | () | - ant-phone | [] | - anubis | [] [] [] | - ap-utils | | - aspell | [] [] | - bash | [] | - batchelor | [] | - bfd | | - bibshelf | | - binutils | | - bison | [] [] [] | - bluez-pin | [] | - clisp | [] | - console-tools | | - coreutils | [] [] | - cpio | | - cpplib | | - darkstat | [] [] | - dialog | [] | - diffutils | [] [] [] | - doodle | | - e2fsprogs | | - enscript | [] | - error | [] | - fetchmail | [] [] | - fileutils | [] [] | - findutils | [] | - flex | [] [] | - fslint | [] | - gas | | - gawk | [] [] | - gbiff | [] | - gcal | | - gcc | | - gettext-examples | [] [] | - gettext-runtime | [] [] [] | - gettext-tools | [] [] | - gimp-print | [] [] | - gip | [] | - gliv | [] | - glunarclock | [] [] | - gmult | [] | - gnubiff | | - gnucash | () () [] | - gnucash-glossary | [] | - gpe-aerial | [] | - gpe-beam | [] | - gpe-calendar | [] | - gpe-clock | [] | - gpe-conf | [] | - gpe-contacts | | - gpe-edit | [] | - gpe-go | [] | - gpe-login | [] | - gpe-ownerinfo | [] | - gpe-sketchbook | [] | - gpe-su | [] | - gpe-taskmanager | [] [] | - gpe-timesheet | [] | - gpe-today | [] | - gpe-todo | [] | - gphoto2 | [] [] | - gprof | | - gpsdrive | () () () | - gramadoir | () | - grep | [] [] [] | - gretl | | - gsasl | [] | - gss | | - gst-plugins | [] | - gstreamer | [] | - gtick | [] | - gtkspell | [] [] | - hello | [] [] [] [] [] [] [] [] | - id-utils | [] | - impost | | - indent | [] [] | - iso_3166 | [] | - iso_3166_1 | [] [] | - iso_3166_2 | [] | - iso_3166_3 | [] | - iso_4217 | [] [] [] | - iso_639 | [] [] [] | - jpilot | () () () | - jtag | | - jwhois | [] | - kbd | [] | - latrine | [] | - ld | | - libc | [] [] [] [] [] | - libextractor | | - libgpewidget | [] | - libgsasl | [] | - libiconv | [] | - libidn | | - lifelines | [] | - lilypond | [] | - lingoteach | [] | - lynx | [] [] | - m4 | [] [] | - mailutils | | - make | [] [] [] | - man-db | () | - minicom | [] | - mysecretdiary | [] | - nano | [] [] | - nano_1_0 | [] [] [] | - opcodes | [] | - parted | [] [] | - psmisc | [] [] | - ptx | [] [] [] | - pwdutils | | - python | | - radius | | - recode | [] | - rpm | [] [] | - screem | [] | - scrollkeeper | [] [] [] | - sed | [] [] | - sh-utils | [] [] | - shared-mime-info | [] [] [] [] | - sharutils | [] [] | - silky | [] | - skencil | | - sketch | | - solfege | [] [] | - soundtracker | | - sp | () | - stardict | [] [] | - tar | [] [] | - texinfo | [] [] [] | - textutils | [] [] [] | - tin | | - tp-robot | [] | - tuxpaint | [] [] [] [] [] [] | - unicode-han-tra... | | - unicode-transla... | | - util-linux | [] [] | - vorbis-tools | [] | - wastesedge | [] | - wdiff | [] [] | - wget | [] [] | - xchat | [] [] [] [] | - xkeyboard-config | [] | - xpad | [] | - +-----------------------------------------------+ - ja ko ku lg lt lv mk mn ms mt nb nl nn no nso - 33 11 1 1 1 2 2 3 11 0 15 96 7 5 0 + Ready PO files af am an ar as ast az be bg bn bn_IN bs ca crh cs + +---------------------------------------------------+ + a2ps | [] [] [] | + aegis | | + anubis | | + aspell | [] [] [] | + bash | [] [] [] | + bfd | | + binutils | [] | + bison | | + bison-runtime | [] | + buzztrax | [] | + ccd2cue | | + ccide | | + cflow | | + clisp | | + coreutils | [] [] | + cpio | | + cppi | | + cpplib | [] | + cryptsetup | [] | + datamash | | + denemo | [] [] | + dfarc | [] | + dialog | [] [] [] | + dico | | + diffutils | [] | + dink | [] | + direvent | | + doodle | [] | + dos2unix | | + dos2unix-man | | + e2fsprogs | [] [] | + enscript | [] | + exif | [] | + fetchmail | [] [] | + findutils | [] | + flex | [] | + freedink | [] [] | + fusionforge | | + gas | | + gawk | [] | + gcal | [] | + gcc | | + gdbm | | + gettext-examples | [] [] [] [] [] | + gettext-runtime | [] [] [] | + gettext-tools | [] [] | + gjay | | + glunarclock | [] [] [] | + gnubiff | [] | + gnubik | [] | + gnucash | () () [] | + gnuchess | | + gnulib | [] | + gnunet | | + gnunet-gtk | | + gold | | + gphoto2 | [] | + gprof | [] | + gramadoir | | + grep | [] [] [] | + grub | [] | + gsasl | | + gss | | + gst-plugins-bad | [] [] | + gst-plugins-base | [] [] [] | + gst-plugins-good | [] [] [] | + gst-plugins-ugly | [] [] [] | + gstreamer | [] [] [] [] | + gtick | [] | + gtkam | [] [] | + gtkspell | [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] | + hello | [] | + help2man | | + help2man-texi | | + hylafax | | + idutils | | + iso_15924 | [] | + iso_3166 | [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | | + iso_4217 | [] | + iso_639 | [] [] [] [] [] [] [] [] [] | + iso_639_3 | [] [] | + iso_639_5 | | + jwhois | | + kbd | [] | + klavaro | [] [] [] [] [] | + ld | [] | + leafpad | [] [] [] [] | + libc | [] [] [] | + libexif | () | + libextractor | | + libgnutls | [] | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | | + libiconv | [] [] | + libidn | [] | + liferea | [] [] [] [] | + lilypond | [] [] | + lordsawar | [] | + lprng | | + lynx | [] [] | + m4 | [] | + mailfromd | | + mailutils | | + make | [] | + man-db | [] [] | + man-db-manpages | | + midi-instruments | [] [] [] | + minicom | [] | + mkisofs | [] | + myserver | [] | + nano | [] [] [] | + opcodes | | + parted | [] | + pies | | + pnmixer | | + popt | [] | + procps-ng | | + procps-ng-man | | + psmisc | [] | + pspp | [] | + pushover | [] | + pwdutils | | + pyspread | | + radius | [] | + recode | [] [] [] | + recutils | | + rpm | | + rush | | + sarg | | + sed | [] [] [] [] | + sharutils | [] | + shishi | | + skribilo | | + solfege | [] [] | + solfege-manual | | + spotmachine | | + sudo | [] [] | + sudoers | [] [] | + sysstat | [] | + tar | [] [] [] | + texinfo | [] [] | + texinfo_document | [] [] | + tigervnc | [] | + tin | | + tin-man | | + tracgoogleappsa... | | + trader | | + util-linux | [] | + ve | | + vice | | + vmm | | + vorbis-tools | [] | + wastesedge | | + wcd | | + wcd-man | | + wdiff | [] [] | + wget | [] | + wyslij-po | | + xboard | | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + +---------------------------------------------------+ + af am an ar as ast az be bg bn bn_IN bs ca crh cs + 4 0 2 5 3 11 0 8 25 3 3 1 55 4 74 + + da de el en en_GB en_ZA eo es et eu fa fi fr + +--------------------------------------------------+ + a2ps | [] [] [] [] [] [] [] [] [] | + aegis | [] [] [] [] | + anubis | [] [] [] [] [] | + aspell | [] [] [] [] [] [] [] | + bash | [] [] [] | + bfd | [] [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] [] [] [] [] | + bison-runtime | [] [] [] [] [] [] [] [] | + buzztrax | [] [] [] [] | + ccd2cue | [] [] [] [] | + ccide | [] [] [] [] [] [] | + cflow | [] [] [] [] [] | + clisp | [] [] [] [] [] | + coreutils | [] [] [] [] [] | + cpio | [] [] [] [] [] | + cppi | [] [] [] [] [] | + cpplib | [] [] [] [] [] [] | + cryptsetup | [] [] [] [] [] | + datamash | [] [] [] [] | + denemo | [] | + dfarc | [] [] [] [] [] [] | + dialog | [] [] [] [] [] [] [] [] [] | + dico | [] [] [] [] | + diffutils | [] [] [] [] [] [] | + dink | [] [] [] [] [] [] | + direvent | [] [] [] [] | + doodle | [] [] [] [] | + dos2unix | [] [] [] [] [] | + dos2unix-man | [] [] [] | + e2fsprogs | [] [] [] [] [] | + enscript | [] [] [] [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] () [] [] [] [] [] | + findutils | [] [] [] [] [] [] [] [] | + flex | [] [] [] [] [] [] | + freedink | [] [] [] [] [] [] [] [] | + fusionforge | [] [] [] | + gas | [] [] [] | + gawk | [] [] [] [] [] | + gcal | [] [] [] [] | + gcc | [] | + gdbm | [] [] [] [] [] | + gettext-examples | [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] | + gjay | [] [] [] [] | + glunarclock | [] [] [] [] [] | + gnubiff | () [] [] () | + gnubik | [] [] [] [] [] | + gnucash | [] () () () () () () | + gnuchess | [] [] [] [] | + gnulib | [] [] [] [] [] [] [] | + gnunet | [] | + gnunet-gtk | [] | + gold | [] [] [] | + gphoto2 | [] () [] [] | + gprof | [] [] [] [] [] [] | + gramadoir | [] [] [] [] [] | + grep | [] [] [] [] [] [] [] | + grub | [] [] [] [] [] | + gsasl | [] [] [] [] [] | + gss | [] [] [] [] [] | + gst-plugins-bad | [] [] [] | + gst-plugins-base | [] [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] [] [] | + gtick | [] () [] [] [] | + gtkam | [] () [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] | + guix | [] [] | + guix-packages | | + gutenprint | [] [] [] [] | + hello | [] [] [] [] [] [] [] [] | + help2man | [] [] [] [] [] [] [] | + help2man-texi | [] [] [] | + hylafax | [] [] | + idutils | [] [] [] [] [] | + iso_15924 | [] () [] [] () [] () | + iso_3166 | [] () [] [] [] [] () [] () | + iso_3166_2 | [] () () () | + iso_4217 | [] () [] [] [] () [] () | + iso_639 | [] () [] [] () [] () | + iso_639_3 | () () () | + iso_639_5 | () () () | + jwhois | [] [] [] [] [] | + kbd | [] [] [] [] [] [] | + klavaro | [] [] [] [] [] [] [] | + ld | [] [] [] [] | + leafpad | [] [] [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] [] () [] [] | + libextractor | [] | + libgnutls | [] [] [] [] | + libgphoto2 | [] () [] | + libgphoto2_port | [] () [] [] [] [] | + libgsasl | [] [] [] [] [] | + libiconv | [] [] [] [] [] [] [] | + libidn | [] [] [] [] [] | + liferea | [] () [] [] [] [] [] | + lilypond | [] [] [] [] [] [] | + lordsawar | [] [] | + lprng | | + lynx | [] [] [] [] [] [] | + m4 | [] [] [] [] [] [] | + mailfromd | [] | + mailutils | [] [] [] [] | + make | [] [] [] [] [] | + man-db | [] [] [] [] | + man-db-manpages | [] [] | + midi-instruments | [] [] [] [] [] [] [] [] [] | + minicom | [] [] [] [] [] | + mkisofs | [] [] [] | + myserver | [] [] [] [] | + nano | [] [] [] [] [] [] [] | + opcodes | [] [] [] [] [] | + parted | [] [] [] | + pies | [] | + pnmixer | [] [] | + popt | [] [] [] [] [] [] | + procps-ng | [] [] | + procps-ng-man | [] [] | + psmisc | [] [] [] [] [] [] [] | + pspp | [] [] [] | + pushover | () [] [] [] | + pwdutils | [] [] [] | + pyspread | [] [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] | + recutils | [] [] [] [] | + rpm | [] [] [] [] [] | + rush | [] [] [] | + sarg | [] [] | + sed | [] [] [] [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] [] [] | + skribilo | [] [] [] | + solfege | [] [] [] [] [] [] [] [] | + solfege-manual | [] [] [] [] [] | + spotmachine | [] [] [] [] [] | + sudo | [] [] [] [] [] [] | + sudoers | [] [] [] [] [] [] | + sysstat | [] [] [] [] [] [] | + tar | [] [] [] [] [] [] [] | + texinfo | [] [] [] [] [] | + texinfo_document | [] [] [] [] | + tigervnc | [] [] [] [] [] [] | + tin | [] [] [] [] | + tin-man | [] | + tracgoogleappsa... | [] [] [] [] [] | + trader | [] [] [] [] [] [] | + util-linux | [] [] [] [] | + ve | [] [] [] [] [] | + vice | () () () | + vmm | [] [] | + vorbis-tools | [] [] [] [] | + wastesedge | [] | + wcd | [] [] [] [] | + wcd-man | [] | + wdiff | [] [] [] [] [] [] [] | + wget | [] [] [] [] [] [] | + wyslij-po | [] [] [] [] | + xboard | [] [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] [] [] [] | + +--------------------------------------------------+ + da de el en en_GB en_ZA eo es et eu fa fi fr + 119 131 32 1 6 0 94 95 22 13 4 102 139 - or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta + ga gd gl gu he hi hr hu hy ia id is it ja ka kk +-------------------------------------------------+ - GNUnet | | - a2ps | () [] [] [] [] [] [] | - aegis | () () | - ant-phone | [] | - anubis | [] [] [] | - ap-utils | () | - aspell | [] [] | - bash | [] [] [] | - batchelor | [] | - bfd | | - bibshelf | | - binutils | [] [] | - bison | [] [] [] [] [] | - bluez-pin | [] [] [] [] [] [] [] [] | - clisp | [] | - console-tools | [] | - coreutils | [] [] [] [] | - cpio | [] [] | - cpplib | | - darkstat | [] [] [] [] [] [] | - dialog | [] [] [] [] [] [] [] | - diffutils | [] [] [] [] [] [] | - doodle | [] | - e2fsprogs | [] [] | - enscript | [] [] [] [] | - error | [] [] [] | - fetchmail | [] () [] [] [] | - fileutils | [] [] [] [] [] | - findutils | [] [] [] [] [] [] | - flex | [] [] [] [] [] | - fslint | [] [] [] | - gas | | - gawk | [] [] [] [] | - gbiff | [] | - gcal | [] | + a2ps | [] [] [] [] | + aegis | [] | + anubis | [] [] [] [] | + aspell | [] [] [] [] [] | + bash | [] [] [] [] | + bfd | [] [] | + binutils | [] [] [] | + bison | [] | + bison-runtime | [] [] [] [] [] [] [] [] | + buzztrax | | + ccd2cue | [] | + ccide | [] [] | + cflow | [] [] [] | + clisp | | + coreutils | [] [] | + cpio | [] [] [] [] [] [] | + cppi | [] [] [] [] [] | + cpplib | [] [] | + cryptsetup | [] | + datamash | | + denemo | [] | + dfarc | [] [] [] | + dialog | [] [] [] [] [] [] [] [] [] [] | + dico | | + diffutils | [] [] [] [] | + dink | [] | + direvent | [] | + doodle | [] [] | + dos2unix | [] [] | + dos2unix-man | | + e2fsprogs | [] [] | + enscript | [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] [] [] | + findutils | [] [] [] [] [] [] [] | + flex | [] | + freedink | [] [] [] [] | + fusionforge | | + gas | [] | + gawk | [] () [] | + gcal | | gcc | | - gettext-examples | [] [] [] [] [] [] | - gettext-runtime | [] [] [] [] [] [] [] | - gettext-tools | [] [] [] [] [] [] [] | - gimp-print | [] [] | - gip | [] [] [] | - gliv | [] [] [] | - glunarclock | [] [] [] [] [] [] | - gmult | [] [] [] [] | - gnubiff | () [] | - gnucash | () [] [] [] [] | - gnucash-glossary | [] [] [] | - gpe-aerial | [] [] [] [] [] [] | - gpe-beam | [] [] [] [] [] [] | - gpe-calendar | [] [] [] [] [] [] [] | - gpe-clock | [] [] [] [] [] [] [] | - gpe-conf | [] [] [] [] [] [] | - gpe-contacts | [] [] [] | - gpe-edit | [] [] [] [] [] [] [] | - gpe-go | [] [] [] [] [] | - gpe-login | [] [] [] [] [] [] [] | - gpe-ownerinfo | [] [] [] [] [] [] [] | - gpe-sketchbook | [] [] [] [] [] [] [] | - gpe-su | [] [] [] [] [] [] [] | - gpe-taskmanager | [] [] [] [] [] [] [] | - gpe-timesheet | [] [] [] [] [] [] [] | - gpe-today | [] [] [] [] [] [] [] | - gpe-todo | [] [] [] [] [] [] [] | - gphoto2 | [] [] [] [] | - gprof | [] [] [] | - gpsdrive | [] | - gramadoir | [] | - grep | [] [] [] [] [] [] [] | - gretl | [] | - gsasl | [] [] [] [] [] | - gss | [] [] [] | - gst-plugins | [] [] [] [] | - gstreamer | [] [] [] [] | - gtick | [] [] [] | - gtkspell | [] [] [] [] [] [] | - hello | [] [] [] [] [] [] [] | - id-utils | [] [] [] [] | - impost | | - indent | [] [] [] [] [] [] | - iso_3166 | [] [] [] [] [] | - iso_3166_1 | [] [] [] [] | - iso_3166_2 | | - iso_3166_3 | [] [] [] | - iso_4217 | [] [] | - iso_639 | [] [] [] | - jpilot | | - jtag | [] | - jwhois | [] [] [] () () | - kbd | [] [] [] | - latrine | [] [] | - ld | [] | - libc | [] [] [] [] [] | - libextractor | [] | - libgpewidget | [] [] [] [] [] [] | - libgsasl | [] [] [] | - libiconv | [] [] [] [] [] [] [] [] [] [] | - libidn | [] () | - lifelines | [] [] | - lilypond | [] | - lingoteach | [] | - lynx | [] [] [] | - m4 | [] [] [] [] [] | - mailutils | [] [] [] | - make | [] [] [] [] | - man-db | [] [] | - minicom | [] [] [] [] | - mysecretdiary | [] [] [] [] | - nano | [] [] [] | - nano_1_0 | [] [] [] [] | - opcodes | [] [] | - parted | [] [] [] [] | - psmisc | [] [] | - ptx | [] [] [] [] [] [] | - pwdutils | [] | - python | | - radius | [] [] | - recode | [] [] [] [] [] [] | - rpm | [] [] [] [] | - screem | | - scrollkeeper | [] [] [] [] [] [] [] | - sed | [] [] [] [] [] [] [] [] | - sh-utils | [] [] [] | - shared-mime-info | [] [] [] [] [] | - sharutils | [] [] [] | - silky | [] | - skencil | [] [] [] | - sketch | [] [] [] | - solfege | | - soundtracker | [] [] | - sp | | - stardict | [] [] | - tar | [] [] [] [] | - texinfo | [] [] [] [] | - textutils | [] [] [] | + gdbm | | + gettext-examples | [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] | + gettext-tools | [] [] [] | + gjay | [] | + glunarclock | [] [] [] [] [] [] | + gnubiff | [] [] () | + gnubik | [] [] [] | + gnucash | () () () () () | + gnuchess | | + gnulib | [] [] [] [] [] | + gnunet | | + gnunet-gtk | | + gold | [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] [] | + gramadoir | [] [] [] | + grep | [] [] [] [] [] [] [] | + grub | [] [] [] | + gsasl | [] [] [] [] [] | + gss | [] [] [] [] [] | + gst-plugins-bad | [] [] [] | + gst-plugins-base | [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] [] [] [] [] | + gtkam | [] [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] [] [] | + hello | [] [] [] [] [] | + help2man | [] [] [] | + help2man-texi | | + hylafax | [] | + idutils | [] [] | + iso_15924 | [] [] [] [] [] [] | + iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | [] [] | + iso_4217 | [] [] [] [] [] [] | + iso_639 | [] [] [] [] [] [] [] [] [] | + iso_639_3 | [] [] | + iso_639_5 | | + jwhois | [] [] [] [] | + kbd | [] [] [] | + klavaro | [] [] [] [] [] | + ld | [] [] [] [] | + leafpad | [] [] [] [] [] [] [] () | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | | + libgnutls | [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] [] [] [] [] | + libidn | [] [] [] [] | + liferea | [] [] [] [] [] | + lilypond | [] | + lordsawar | | + lprng | [] | + lynx | [] [] [] [] | + m4 | [] [] [] [] [] | + mailfromd | | + mailutils | | + make | [] [] [] [] | + man-db | [] [] | + man-db-manpages | [] [] | + midi-instruments | [] [] [] [] [] [] [] [] [] | + minicom | [] [] [] | + mkisofs | [] [] | + myserver | [] | + nano | [] [] [] [] [] [] | + opcodes | [] [] [] | + parted | [] [] [] [] [] | + pies | | + pnmixer | [] [] | + popt | [] [] [] [] [] [] [] [] [] [] | + procps-ng | | + procps-ng-man | | + psmisc | [] [] [] [] | + pspp | [] [] | + pushover | [] | + pwdutils | [] | + pyspread | | + radius | [] | + recode | [] [] [] [] [] [] [] | + recutils | | + rpm | [] | + rush | [] | + sarg | | + sed | [] [] [] [] [] [] [] | + sharutils | | + shishi | | + skribilo | [] | + solfege | [] [] | + solfege-manual | | + spotmachine | | + sudo | [] [] [] [] | + sudoers | [] [] [] | + sysstat | [] [] [] [] | + tar | [] [] [] [] [] [] | + texinfo | [] [] [] | + texinfo_document | [] [] [] | + tigervnc | | tin | | - tp-robot | [] | - tuxpaint | [] [] [] [] [] [] [] [] | - unicode-han-tra... | | - unicode-transla... | | - util-linux | [] [] [] | - vorbis-tools | [] [] | - wastesedge | | - wdiff | [] [] [] [] [] [] | - wget | [] [] [] [] [] [] [] [] [] | - xchat | [] [] [] [] [] [] | - xkeyboard-config | | - xpad | | + tin-man | | + tracgoogleappsa... | [] [] [] [] | + trader | [] [] | + util-linux | [] | + ve | [] | + vice | () () | + vmm | | + vorbis-tools | [] [] | + wastesedge | [] | + wcd | | + wcd-man | | + wdiff | [] [] [] | + wget | [] [] [] [] | + wyslij-po | [] [] [] | + xboard | | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] [] [] | +-------------------------------------------------+ - or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta - 1 0 48 30 58 6 79 71 5 45 13 12 50 86 0 + ga gd gl gu he hi hr hu hy ia id is it ja ka kk + 35 2 47 4 8 2 60 71 2 6 81 11 87 57 0 3 - tg th tk tr uk ven vi wa xh zh_CN zh_TW zu - +--------------------------------------------+ - GNUnet | | 0 - a2ps | [] [] [] | 19 - aegis | | 0 - ant-phone | [] | 4 - anubis | [] | 9 - ap-utils | () | 1 - aspell | [] [] [] | 13 - bash | | 10 - batchelor | [] [] | 7 - bfd | | 1 - bibshelf | [] | 5 - binutils | [] | 6 - bison | [] | 17 - bluez-pin | [] [] [] [] [] | 24 - clisp | | 7 - console-tools | [] | 4 - coreutils | [] | 16 - cpio | [] [] | 6 - cpplib | [] [] | 7 - darkstat | [] () () | 15 - dialog | [] [] [] | 25 - diffutils | [] [] [] [] | 28 - doodle | [] | 5 - e2fsprogs | [] | 8 - enscript | [] | 12 - error | [] [] [] | 16 - fetchmail | [] | 12 - fileutils | [] [] [] | 18 - findutils | [] [] | 17 - flex | [] [] | 15 - fslint | [] | 7 - gas | [] | 3 - gawk | [] | 14 - gbiff | | 4 - gcal | [] | 5 - gcc | [] | 3 - gettext-examples | [] [] [] [] | 20 - gettext-runtime | [] [] [] [] [] | 25 - gettext-tools | [] [] [] | 17 - gimp-print | [] | 11 - gip | [] | 8 - gliv | [] | 6 - glunarclock | [] [] | 13 - gmult | [] [] [] | 13 - gnubiff | [] | 3 - gnucash | () [] | 10 - gnucash-glossary | [] | 8 - gpe-aerial | [] [] | 13 - gpe-beam | [] [] | 13 - gpe-calendar | [] [] [] [] | 18 - gpe-clock | [] [] [] [] | 17 - gpe-conf | [] [] | 12 - gpe-contacts | [] [] | 6 - gpe-edit | [] [] [] [] | 15 - gpe-go | [] [] | 11 - gpe-login | [] [] [] [] [] | 18 - gpe-ownerinfo | [] [] [] [] | 19 - gpe-sketchbook | [] [] | 14 - gpe-su | [] [] [] | 16 - gpe-taskmanager | [] [] [] | 17 - gpe-timesheet | [] [] [] [] | 17 - gpe-today | [] [] [] [] [] | 19 - gpe-todo | [] [] [] | 16 - gphoto2 | [] [] | 17 - gprof | [] [] | 10 - gpsdrive | | 2 - gramadoir | [] | 6 - grep | [] [] [] [] | 32 - gretl | | 4 - gsasl | [] [] | 12 - gss | [] | 5 - gst-plugins | [] [] | 16 - gstreamer | [] [] [] | 14 - gtick | [] | 11 - gtkspell | [] [] [] | 20 - hello | [] [] [] [] | 37 - id-utils | [] [] | 13 - impost | [] | 3 - indent | [] [] [] | 24 - iso_3166 | [] [] [] | 12 - iso_3166_1 | [] [] | 20 - iso_3166_2 | | 2 - iso_3166_3 | [] [] | 8 - iso_4217 | [] [] | 10 - iso_639 | [] [] | 12 - jpilot | [] [] [] | 6 - jtag | | 2 - jwhois | [] [] [] | 12 - kbd | [] [] | 12 - latrine | [] [] | 8 - ld | [] | 5 - libc | [] [] | 22 - libextractor | | 1 - libgpewidget | [] [] | 17 - libgsasl | [] | 7 - libiconv | [] [] [] [] [] | 32 - libidn | [] [] | 5 - lifelines | | 4 - lilypond | [] | 5 - lingoteach | | 5 - lynx | [] [] | 14 - m4 | [] [] | 17 - mailutils | [] | 7 - make | [] [] | 18 - man-db | | 5 - minicom | | 11 - mysecretdiary | [] [] | 12 - nano | | 11 - nano_1_0 | [] [] | 17 - opcodes | [] | 7 - parted | [] [] [] | 17 - psmisc | [] | 7 - ptx | [] [] | 23 - pwdutils | | 1 - python | | 0 - radius | [] | 6 - recode | [] [] | 22 - rpm | [] [] | 11 - screem | | 1 - scrollkeeper | [] [] | 23 - sed | [] [] | 19 - sh-utils | [] | 15 - shared-mime-info | [] [] | 19 - sharutils | [] [] [] | 20 - silky | | 3 - skencil | | 6 - sketch | | 6 - solfege | | 4 - soundtracker | [] | 8 - sp | [] | 3 - stardict | [] [] [] [] | 10 - tar | [] [] | 13 - texinfo | [] [] | 14 - textutils | [] [] [] | 17 - tin | | 1 - tp-robot | [] [] | 7 - tuxpaint | [] [] [] [] | 34 - unicode-han-tra... | | 0 - unicode-transla... | | 2 - util-linux | [] [] | 17 - vorbis-tools | [] | 10 - wastesedge | | 1 - wdiff | [] [] | 22 - wget | [] [] [] [] | 31 - xchat | [] [] [] | 22 - xkeyboard-config | | 1 - xpad | [] | 5 - +--------------------------------------------+ - 72 teams tg th tk tr uk ven vi wa xh zh_CN zh_TW zu - 147 domains 0 0 1 78 29 0 71 16 0 41 20 0 1711 + kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl + +--------------------------------------------------+ + a2ps | [] [] | + aegis | [] | + anubis | [] [] [] | + aspell | [] [] | + bash | [] [] | + bfd | | + binutils | | + bison | [] | + bison-runtime | [] [] [] [] [] [] | + buzztrax | | + ccd2cue | | + ccide | [] [] | + cflow | [] | + clisp | [] | + coreutils | [] [] | + cpio | [] | + cppi | | + cpplib | [] | + cryptsetup | [] | + datamash | [] [] | + denemo | | + dfarc | [] [] | + dialog | [] [] [] [] [] [] | + dico | | + diffutils | [] [] [] | + dink | [] | + direvent | [] | + doodle | [] | + dos2unix | [] [] | + dos2unix-man | [] | + e2fsprogs | [] | + enscript | [] | + exif | [] [] [] | + fetchmail | [] | + findutils | [] [] | + flex | [] | + freedink | [] [] | + fusionforge | | + gas | | + gawk | [] | + gcal | | + gcc | | + gdbm | | + gettext-examples | [] [] [] [] [] [] | + gettext-runtime | [] [] [] | + gettext-tools | [] | + gjay | | + glunarclock | [] [] | + gnubiff | [] | + gnubik | [] [] | + gnucash | () () () () () () () [] | + gnuchess | [] [] | + gnulib | [] | + gnunet | | + gnunet-gtk | | + gold | | + gphoto2 | [] | + gprof | [] [] | + gramadoir | [] | + grep | [] [] | + grub | [] [] [] | + gsasl | [] | + gss | | + gst-plugins-bad | [] [] [] | + gst-plugins-base | [] [] [] | + gst-plugins-good | [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] | + gstreamer | [] [] [] | + gtick | [] | + gtkam | [] [] | + gtkspell | [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] | + hello | [] [] [] | + help2man | [] | + help2man-texi | | + hylafax | [] | + idutils | [] | + iso_15924 | () [] [] | + iso_3166 | [] [] [] () [] [] [] [] [] [] | + iso_3166_2 | () [] | + iso_4217 | () [] [] [] | + iso_639 | [] [] () [] [] [] [] | + iso_639_3 | [] () [] | + iso_639_5 | () | + jwhois | [] [] | + kbd | [] | + klavaro | [] [] | + ld | | + leafpad | [] [] [] [] [] | + libc | [] [] | + libexif | [] | + libextractor | [] | + libgnutls | [] [] | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | [] | + libiconv | [] [] | + libidn | [] | + liferea | [] [] [] | + lilypond | [] | + lordsawar | | + lprng | | + lynx | [] | + m4 | [] | + mailfromd | | + mailutils | | + make | [] [] | + man-db | [] | + man-db-manpages | [] | + midi-instruments | [] [] [] [] [] [] [] | + minicom | [] | + mkisofs | [] | + myserver | | + nano | [] [] [] | + opcodes | [] | + parted | [] [] | + pies | | + pnmixer | [] | + popt | [] [] [] [] [] | + procps-ng | | + procps-ng-man | | + psmisc | [] | + pspp | [] [] | + pushover | | + pwdutils | [] | + pyspread | | + radius | [] | + recode | [] [] | + recutils | [] | + rpm | [] | + rush | [] | + sarg | | + sed | [] [] | + sharutils | [] | + shishi | | + skribilo | | + solfege | [] [] | + solfege-manual | [] | + spotmachine | [] | + sudo | [] [] [] | + sudoers | [] [] [] | + sysstat | [] [] | + tar | [] [] [] | + texinfo | [] | + texinfo_document | [] | + tigervnc | [] | + tin | | + tin-man | | + tracgoogleappsa... | [] [] [] | + trader | [] | + util-linux | [] | + ve | [] | + vice | [] | + vmm | [] | + vorbis-tools | [] | + wastesedge | [] | + wcd | [] | + wcd-man | [] | + wdiff | [] | + wget | [] [] | + wyslij-po | [] | + xboard | [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + +--------------------------------------------------+ + kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl + 5 15 4 6 0 13 23 3 3 3 4 11 2 42 1 125 + + nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr + +------------------------------------------------+ + a2ps | [] [] [] [] [] [] [] | + aegis | [] [] | + anubis | [] [] [] | + aspell | [] [] [] [] [] [] [] | + bash | [] [] [] [] [] [] | + bfd | [] [] | + binutils | [] [] | + bison | [] [] [] | + bison-runtime | [] [] [] [] [] [] [] [] | + buzztrax | [] | + ccd2cue | [] [] | + ccide | [] [] [] | + cflow | [] [] [] | + clisp | [] | + coreutils | [] [] [] [] | + cpio | [] [] [] | + cppi | [] [] [] | + cpplib | [] [] [] | + cryptsetup | [] [] [] | + datamash | [] [] | + denemo | | + dfarc | [] [] [] | + dialog | [] [] [] [] [] [] [] | + dico | [] | + diffutils | [] [] [] | + dink | | + direvent | [] [] [] | + doodle | [] [] | + dos2unix | [] [] [] [] | + dos2unix-man | [] [] | + e2fsprogs | [] | + enscript | [] [] [] [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] [] [] | + findutils | [] [] [] [] [] [] | + flex | [] [] [] [] [] | + freedink | [] [] [] [] [] | + fusionforge | | + gas | | + gawk | [] | + gcal | | + gcc | | + gdbm | [] [] [] | + gettext-examples | [] [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] [] [] | + gjay | [] | + glunarclock | [] [] [] [] [] [] | + gnubiff | [] | + gnubik | [] [] [] [] | + gnucash | () () () () () [] | + gnuchess | [] [] | + gnulib | [] [] [] [] [] | + gnunet | | + gnunet-gtk | | + gold | | + gphoto2 | [] [] [] [] [] | + gprof | [] [] [] [] | + gramadoir | [] [] | + grep | [] [] [] [] [] [] | + grub | [] [] [] [] [] | + gsasl | [] [] [] | + gss | [] [] [] [] | + gst-plugins-bad | [] [] [] [] [] | + gst-plugins-base | [] [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] [] [] | + gtick | [] [] [] [] [] | + gtkam | [] [] [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] [] | + hello | [] [] [] [] [] [] | + help2man | [] [] [] [] | + help2man-texi | [] | + hylafax | | + idutils | [] [] [] | + iso_15924 | [] () [] [] [] [] | + iso_3166 | [] [] [] [] () [] [] [] [] [] [] [] [] | + iso_3166_2 | [] () [] | + iso_4217 | [] [] () [] [] [] [] [] | + iso_639 | [] [] [] () [] [] [] [] [] [] | + iso_639_3 | [] () | + iso_639_5 | () [] | + jwhois | [] [] [] [] | + kbd | [] [] | + klavaro | [] [] [] [] [] | + ld | | + leafpad | [] [] [] [] [] [] [] [] | + libc | [] [] [] | + libexif | [] () [] | + libextractor | [] | + libgnutls | [] | + libgphoto2 | [] | + libgphoto2_port | [] [] [] [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] [] [] | + libidn | [] [] [] | + liferea | [] [] [] [] () [] [] | + lilypond | | + lordsawar | | + lprng | [] | + lynx | [] [] | + m4 | [] [] [] [] [] | + mailfromd | [] | + mailutils | [] | + make | [] [] [] | + man-db | [] [] [] | + man-db-manpages | [] [] [] | + midi-instruments | [] [] [] [] [] [] [] [] | + minicom | [] [] [] [] | + mkisofs | [] [] [] | + myserver | [] [] | + nano | [] [] [] [] [] [] | + opcodes | | + parted | [] [] [] [] [] [] | + pies | [] | + pnmixer | [] | + popt | [] [] [] [] [] [] | + procps-ng | [] | + procps-ng-man | [] | + psmisc | [] [] [] [] | + pspp | [] [] | + pushover | | + pwdutils | [] | + pyspread | [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] [] | + recutils | [] [] | + rpm | [] | + rush | [] [] [] | + sarg | [] [] | + sed | [] [] [] [] [] [] [] [] | + sharutils | [] [] [] | + shishi | [] [] | + skribilo | [] | + solfege | [] [] [] | + solfege-manual | [] [] | + spotmachine | [] [] | + sudo | [] [] [] [] [] [] | + sudoers | [] [] [] [] | + sysstat | [] [] [] [] [] | + tar | [] [] [] [] [] | + texinfo | [] [] [] | + texinfo_document | [] [] | + tigervnc | [] [] [] | + tin | [] | + tin-man | | + tracgoogleappsa... | [] [] [] [] | + trader | [] [] | + util-linux | [] [] | + ve | [] [] [] | + vice | | + vmm | | + vorbis-tools | [] [] [] | + wastesedge | | + wcd | | + wcd-man | | + wdiff | [] [] [] [] [] | + wget | [] [] [] [] [] | + wyslij-po | [] [] [] [] | + xboard | [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] | + +------------------------------------------------+ + nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr + 7 3 6 114 1 12 88 32 82 3 40 45 7 101 + + sv sw ta te tg th tr uk ur vi wa wo zh_CN + +----------------------------------------------+ + a2ps | [] [] [] [] [] | + aegis | [] | + anubis | [] [] [] [] | + aspell | [] [] [] [] [] | + bash | [] [] [] [] | + bfd | [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] | + bison-runtime | [] [] [] [] [] [] | + buzztrax | [] [] [] | + ccd2cue | [] [] [] | + ccide | [] [] [] [] | + cflow | [] [] [] [] | + clisp | | + coreutils | [] [] [] | + cpio | [] [] [] [] [] | + cppi | [] [] [] [] | + cpplib | [] [] [] [] [] | + cryptsetup | [] [] [] | + datamash | [] [] [] | + denemo | [] | + dfarc | [] [] | + dialog | [] [] [] [] [] [] | + dico | [] | + diffutils | [] [] [] [] [] | + dink | [] | + direvent | [] [] | + doodle | [] [] | + dos2unix | [] [] [] [] | + dos2unix-man | [] [] [] | + e2fsprogs | [] [] [] [] | + enscript | [] [] [] [] | + exif | [] [] [] [] [] | + fetchmail | [] [] [] [] | + findutils | [] [] [] [] [] | + flex | [] [] [] [] | + freedink | [] [] [] | + fusionforge | | + gas | [] | + gawk | [] [] [] | + gcal | [] [] [] | + gcc | [] | + gdbm | [] [] | + gettext-examples | [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] | + gettext-tools | [] [] [] [] [] | + gjay | [] [] [] | + glunarclock | [] [] [] [] | + gnubiff | [] [] | + gnubik | [] [] [] [] | + gnucash | () () () () [] | + gnuchess | [] [] [] | + gnulib | [] [] [] [] | + gnunet | | + gnunet-gtk | | + gold | [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] [] | + gramadoir | [] [] [] | + grep | [] [] [] [] [] | + grub | [] [] [] [] | + gsasl | [] [] [] [] | + gss | [] [] [] | + gst-plugins-bad | [] [] [] [] [] | + gst-plugins-base | [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] [] [] | + gtkam | [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] [] [] [] | + hello | [] [] [] [] [] [] | + help2man | [] [] [] | + help2man-texi | [] | + hylafax | [] | + idutils | [] [] [] | + iso_15924 | [] () [] [] () [] | + iso_3166 | [] [] () [] [] () [] [] | + iso_3166_2 | () [] [] () [] | + iso_4217 | [] () [] [] () [] | + iso_639 | [] [] [] () [] [] () [] [] | + iso_639_3 | [] () [] [] () | + iso_639_5 | () [] () | + jwhois | [] [] [] [] | + kbd | [] [] [] [] | + klavaro | [] [] [] [] [] [] | + ld | [] [] [] [] [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] [] () | + libextractor | [] [] | + libgnutls | [] [] [] [] | + libgphoto2 | [] [] [] | + libgphoto2_port | [] [] [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] [] [] | + libidn | () [] [] [] | + liferea | [] [] [] [] [] | + lilypond | [] | + lordsawar | | + lprng | [] | + lynx | [] [] [] [] | + m4 | [] [] [] | + mailfromd | [] [] | + mailutils | [] | + make | [] [] [] [] | + man-db | [] [] [] | + man-db-manpages | [] [] | + midi-instruments | [] [] [] [] [] [] | + minicom | [] [] | + mkisofs | [] [] [] | + myserver | [] | + nano | [] [] [] [] | + opcodes | [] [] [] | + parted | [] [] [] [] [] | + pies | [] [] | + pnmixer | [] [] [] | + popt | [] [] [] [] [] [] [] | + procps-ng | [] [] | + procps-ng-man | [] | + psmisc | [] [] [] [] | + pspp | [] [] [] | + pushover | [] | + pwdutils | [] [] | + pyspread | [] | + radius | [] [] | + recode | [] [] [] [] | + recutils | [] [] [] | + rpm | [] [] [] [] | + rush | [] [] | + sarg | | + sed | [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] [] | + skribilo | [] [] | + solfege | [] [] [] [] | + solfege-manual | [] | + spotmachine | [] [] [] | + sudo | [] [] [] [] [] | + sudoers | [] [] [] [] | + sysstat | [] [] [] [] [] | + tar | [] [] [] [] [] | + texinfo | [] [] [] | + texinfo_document | [] | + tigervnc | [] [] [] | + tin | [] | + tin-man | | + tracgoogleappsa... | [] [] [] [] [] | + trader | [] | + util-linux | [] [] [] [] | + ve | [] [] [] [] | + vice | () () | + vmm | | + vorbis-tools | [] [] | + wastesedge | | + wcd | [] [] [] | + wcd-man | [] | + wdiff | [] [] [] [] | + wget | [] [] [] | + wyslij-po | [] [] | + xboard | [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] | + +----------------------------------------------+ + sv sw ta te tg th tr uk ur vi wa wo zh_CN + 106 1 4 3 0 13 51 115 1 125 7 1 100 + + zh_HK zh_TW + +-------------+ + a2ps | | 30 + aegis | | 9 + anubis | | 19 + aspell | | 29 + bash | [] | 23 + bfd | | 11 + binutils | | 12 + bison | [] | 18 + bison-runtime | [] | 38 + buzztrax | | 9 + ccd2cue | | 10 + ccide | | 17 + cflow | | 16 + clisp | | 10 + coreutils | | 18 + cpio | | 20 + cppi | | 17 + cpplib | [] | 19 + cryptsetup | | 14 + datamash | | 11 + denemo | | 5 + dfarc | | 17 + dialog | [] | 42 + dico | | 6 + diffutils | | 22 + dink | | 10 + direvent | | 11 + doodle | | 12 + dos2unix | [] | 18 + dos2unix-man | | 9 + e2fsprogs | | 15 + enscript | | 21 + exif | | 27 + fetchmail | | 19 + findutils | | 29 + flex | [] | 19 + freedink | | 24 + fusionforge | | 3 + gas | | 5 + gawk | | 13 + gcal | | 8 + gcc | | 2 + gdbm | | 10 + gettext-examples | [] [] | 40 + gettext-runtime | [] [] | 35 + gettext-tools | [] | 24 + gjay | | 9 + glunarclock | [] | 27 + gnubiff | | 9 + gnubik | | 19 + gnucash | () | 6 + gnuchess | | 11 + gnulib | | 23 + gnunet | | 1 + gnunet-gtk | | 1 + gold | | 7 + gphoto2 | [] | 19 + gprof | | 21 + gramadoir | | 14 + grep | [] | 31 + grub | | 21 + gsasl | [] | 19 + gss | | 17 + gst-plugins-bad | | 21 + gst-plugins-base | | 27 + gst-plugins-good | | 32 + gst-plugins-ugly | | 34 + gstreamer | [] | 32 + gtick | | 19 + gtkam | | 24 + gtkspell | [] [] | 48 + guix | | 2 + guix-packages | | 0 + gutenprint | | 15 + hello | [] | 30 + help2man | | 18 + help2man-texi | | 5 + hylafax | | 5 + idutils | | 14 + iso_15924 | [] | 23 + iso_3166 | [] [] | 58 + iso_3166_2 | | 9 + iso_4217 | [] [] | 28 + iso_639 | [] [] | 46 + iso_639_3 | | 10 + iso_639_5 | | 2 + jwhois | [] | 20 + kbd | | 17 + klavaro | | 30 + ld | [] | 15 + leafpad | [] | 39 + libc | [] | 24 + libexif | | 10 + libextractor | | 5 + libgnutls | | 13 + libgphoto2 | | 10 + libgphoto2_port | [] | 19 + libgsasl | | 18 + libiconv | [] | 29 + libidn | | 17 + liferea | | 29 + lilypond | | 11 + lordsawar | | 3 + lprng | | 3 + lynx | | 19 + m4 | [] | 22 + mailfromd | | 4 + mailutils | | 6 + make | | 19 + man-db | | 15 + man-db-manpages | | 10 + midi-instruments | [] | 43 + minicom | [] | 17 + mkisofs | | 13 + myserver | | 9 + nano | [] | 30 + opcodes | | 12 + parted | [] | 23 + pies | | 4 + pnmixer | | 9 + popt | [] | 36 + procps-ng | | 5 + procps-ng-man | | 4 + psmisc | [] | 22 + pspp | | 13 + pushover | | 6 + pwdutils | | 8 + pyspread | | 6 + radius | | 9 + recode | | 31 + recutils | | 10 + rpm | [] | 13 + rush | | 10 + sarg | | 4 + sed | [] | 35 + sharutils | | 13 + shishi | | 7 + skribilo | | 7 + solfege | | 21 + solfege-manual | | 9 + spotmachine | | 11 + sudo | | 26 + sudoers | | 22 + sysstat | | 23 + tar | [] | 30 + texinfo | | 17 + texinfo_document | | 13 + tigervnc | | 14 + tin | [] | 7 + tin-man | | 1 + tracgoogleappsa... | [] | 22 + trader | | 12 + util-linux | | 13 + ve | | 14 + vice | | 1 + vmm | | 3 + vorbis-tools | | 13 + wastesedge | | 3 + wcd | | 8 + wcd-man | | 3 + wdiff | [] | 23 + wget | | 21 + wyslij-po | | 14 + xboard | | 10 + xdg-user-dirs | [] [] | 68 + xkeyboard-config | [] | 28 + +-------------+ + 89 teams zh_HK zh_TW + 166 domains 7 42 2809 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are @@ -955,32 +1350,30 @@ dialects. For a PO file in the matrix above to be effective, the package to -which it applies should also have been internationalized and -distributed as such by its maintainer. There might be an observable -lag between the mere existence a PO file and its wide availability in a -distribution. - - If April 2005 seems to be old, you may fetch a more recent copy of -this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date -matrix with full percentage details can be found at -`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. +which it applies should also have been internationalized and distributed +as such by its maintainer. There might be an observable lag between the +mere existence a PO file and its wide availability in a distribution. + + If Jun 2014 seems to be old, you may fetch a more recent copy of this +'ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix +with full percentage details can be found at +'http://translationproject.org/extra/matrix.html'. -1.6 Using `gettext' in new packages +1.5 Using 'gettext' in new packages =================================== If you are writing a freely available program and want to -internationalize it you are welcome to use GNU `gettext' in your -package. Of course you have to respect the GNU Library General Public -License which covers the use of the GNU `gettext' library. This means -in particular that even non-free programs can use `libintl' as a shared -library, whereas only free software can use `libintl' as a static -library or use modified versions of `libintl'. +internationalize it you are welcome to use GNU 'gettext' in your +package. Of course you have to respect the GNU Lesser General Public +License which covers the use of the GNU 'gettext' library. This means +in particular that even non-free programs can use 'libintl' as a shared +library, whereas only free software can use 'libintl' as a static +library or use modified versions of 'libintl'. Once the sources are changed appropriately and the setup can handle -the use of `gettext' the only thing missing are the translations. The +the use of 'gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact -`translation@iro.umontreal.ca' to make the `.pot' files available to -the translation teams. - +'coordinator@translationproject.org' to make the '.pot' files available +to the translation teams. diff -Nru soundtracker-0.6.8/aclocal.m4 soundtracker-1.0.2~pre2/aclocal.m4 --- soundtracker-0.6.8/aclocal.m4 2006-02-25 13:36:09.000000000 +0000 +++ soundtracker-1.0.2~pre2/aclocal.m4 2021-02-26 19:46:30.000000000 +0000 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.7.9 -*- Autoconf -*- +# generated automatically by aclocal 1.15 -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 -# Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -11,2304 +11,1229 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -# Do all the work for Automake. -*- Autoconf -*- - -# This macro actually does too much some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 -# Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +dnl Configure Paths for Alsa +dnl Some modifications by Richard Boulton +dnl Christopher Lansdown +dnl Jaroslav Kysela +dnl Last modification: $Id: alsa.m4,v 1.24 2004/09/15 18:48:07 tiwai Exp $ +dnl AM_PATH_ALSA([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for libasound, and define ALSA_CFLAGS and ALSA_LIBS as appropriate. +dnl enables arguments --with-alsa-prefix= +dnl --with-alsa-enc-prefix= +dnl --disable-alsatest +dnl +dnl For backwards compatibility, if ACTION_IF_NOT_FOUND is not specified, +dnl and the alsa libraries are not found, a fatal AC_MSG_ERROR() will result. +dnl +AC_DEFUN([AM_PATH_ALSA], +[dnl Save the original CFLAGS, LDFLAGS, and LIBS +alsa_save_CFLAGS="$CFLAGS" +alsa_save_LDFLAGS="$LDFLAGS" +alsa_save_LIBS="$LIBS" +alsa_found=yes -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. +dnl +dnl Get the cflags and libraries for alsa +dnl +AC_ARG_WITH(alsa-prefix, +[ --with-alsa-prefix=PFX Prefix where Alsa library is installed(optional)], +[alsa_prefix="$withval"], [alsa_prefix=""]) + +AC_ARG_WITH(alsa-inc-prefix, +[ --with-alsa-inc-prefix=PFX Prefix where include libraries are (optional)], +[alsa_inc_prefix="$withval"], [alsa_inc_prefix=""]) + +dnl FIXME: this is not yet implemented +AC_ARG_ENABLE(alsatest, +[ --disable-alsatest Do not try to compile and run a test Alsa program], +[enable_alsatest="$enableval"], +[enable_alsatest=yes]) + +dnl Add any special include directories +AC_MSG_CHECKING(for ALSA CFLAGS) +if test "$alsa_inc_prefix" != "" ; then + ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix" + CFLAGS="$CFLAGS -I$alsa_inc_prefix" +fi +AC_MSG_RESULT($ALSA_CFLAGS) -# serial 10 +dnl add any special lib dirs +AC_MSG_CHECKING(for ALSA LDFLAGS) +if test "$alsa_prefix" != "" ; then + ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix" + LDFLAGS="$LDFLAGS $ALSA_LIBS" +fi -AC_PREREQ([2.54]) +dnl add the alsa library +ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl -lpthread" +LIBS="$ALSA_LIBS $LIBS" +AC_MSG_RESULT($ALSA_LIBS) + +dnl Check for a working version of libasound that is of the right version. +if test "x$enable_alsatest" = "xyes"; then +min_alsa_version=ifelse([$1], ,0.1.1,$1) +AC_MSG_CHECKING(for libasound headers version >= $min_alsa_version) +no_alsa="" + alsa_min_major_version=`echo $min_alsa_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + alsa_min_minor_version=`echo $min_alsa_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + alsa_min_micro_version=`echo $min_alsa_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` -# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow -# the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_LANG_SAVE +AC_LANG_C +AC_TRY_COMPILE([ +#include +], [ +/* ensure backward compatibility */ +#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) +#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR +#endif +#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR) +#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR +#endif +#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR) +#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR +#endif -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl - AC_REQUIRE([AC_PROG_INSTALL])dnl -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +# if(SND_LIB_MAJOR > $alsa_min_major_version) + exit(0); +# else +# if(SND_LIB_MAJOR < $alsa_min_major_version) +# error not present +# endif + +# if(SND_LIB_MINOR > $alsa_min_minor_version) + exit(0); +# else +# if(SND_LIB_MINOR < $alsa_min_minor_version) +# error not present +# endif + +# if(SND_LIB_SUBMINOR < $alsa_min_micro_version) +# error not present +# endif +# endif +# endif +exit(0); +], + [AC_MSG_RESULT(found.)], + [AC_MSG_RESULT(not present.) + ifelse([$3], , [AC_MSG_ERROR(Sufficiently new version of libasound not found.)]) + alsa_found=no] +) +AC_LANG_RESTORE fi -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi +dnl Now that we know that we have the right version, let's see if we have the library and not just the headers. +if test "x$enable_alsatest" = "xyes"; then +AC_CHECK_LIB([asound], [snd_ctl_open],, + [ifelse([$3], , [AC_MSG_ERROR(No linkable libasound was found.)]) + alsa_found=no] +) fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_MISSING_PROG(AMTAR, tar) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl +if test "x$alsa_found" = "xyes" ; then + ifelse([$2], , :, [$2]) + LIBS=`echo $LIBS | sed 's/-lasound//g'` + LIBS=`echo $LIBS | sed 's/ //'` + LIBS="-lasound $LIBS" +fi +if test "x$alsa_found" = "xno" ; then + ifelse([$3], , :, [$3]) + CFLAGS="$alsa_save_CFLAGS" + LDFLAGS="$alsa_save_LDFLAGS" + LIBS="$alsa_save_LIBS" + ALSA_CFLAGS="" + ALSA_LIBS="" +fi -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +dnl That should be it. Now just export out symbols: +AC_SUBST(ALSA_CFLAGS) +AC_SUBST(ALSA_LIBS) ]) -]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $1 | $1:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) -# Copyright 2002 Free Software Foundation, Inc. +# gettext.m4 serial 68 (gettext-0.19.8) +dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2006, 2008-2010. -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl Macro to add for using GNU gettext. -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"]) +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The +dnl default (if it is not specified or empty) is 'no-libtool'. +dnl INTLSYMBOL should be 'external' for packages with no intl directory, +dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl If INTLSYMBOL is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. If NEEDSYMBOL is specified and is +dnl 'need-formatstring-macros', then GNU gettext implementations that don't +dnl support the ISO C 99 formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries. If empty, +dnl the value '$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ + dnl Argument checking. + ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , + [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])])]) + ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], + [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) + ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) + define([gt_included_intl], + ifelse([$1], [external], + ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), + [yes])) + define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) + gt_NEEDS_INIT + AM_GNU_GETTEXT_NEED([$2]) -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.7.9])]) + AC_REQUIRE([AM_PO_SUBDIRS])dnl + ifelse(gt_included_intl, yes, [ + AC_REQUIRE([AM_INTL_SUBDIR])dnl + ]) -# Helper functions for option handling. -*- Autoconf -*- + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) -# Copyright 2001, 2002 Free Software Foundation, Inc. + dnl Sometimes libintl requires libiconv, so first search for libiconv. + dnl Ideally we would do this search only after the + dnl if test "$USE_NLS" = "yes"; then + dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT + dnl the configure script would need to contain the same shell code + dnl again, outside any 'if'. There are two solutions: + dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. + dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. + dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not + dnl documented, we avoid it. + ifelse(gt_included_intl, yes, , [ + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + ]) -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. + dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. + gt_INTL_MACOSX -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. + dnl Set USE_NLS. + AC_REQUIRE([AM_NLS]) -# serial 2 + ifelse(gt_included_intl, yes, [ + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + ]) + LIBINTL= + LTLIBINTL= + POSUB= -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + dnl Add a version number to the cache macros. + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + ifelse(gt_included_intl, yes, [ + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH([included-gettext], + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + ]) + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi -# -# Check to make sure that the build environment is sane. -# + AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ]])], + [eval "$gt_func_gnugettext_libc=yes"], + [eval "$gt_func_gnugettext_libc=no"])]) -# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl Sometimes libintl requires libiconv, so first search for libiconv. + ifelse(gt_included_intl, yes, , [ + AM_ICONV_LINK + ]) + dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL + dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) + dnl because that would add "-liconv" to LIBINTL and LTLIBINTL + dnl even if libiconv doesn't exist. + AC_LIB_LINKFLAGS_BODY([intl]) + AC_CACHE_CHECK([for GNU gettext in libintl], + [$gt_func_gnugettext_libintl], + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + dnl Now see whether libintl exists and does not depend on libiconv. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ]])], + [eval "$gt_func_gnugettext_libintl=yes"], + [eval "$gt_func_gnugettext_libintl=no"]) + dnl Now see whether libintl exists and depends on libiconv. + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ]])], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + ]) + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + fi -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + dnl Reset the values set by searching for libintl. + LIBINTL= + LTLIBINTL= + INCINTL= + fi -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. + ifelse(gt_included_intl, yes, [ + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on included GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi -# serial 3 + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" + LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi + CATOBJEXT= + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions to use GNU gettext tools. + CATOBJEXT=.gmo + fi + ]) - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Some extra flags are needed during linking. + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi -# -*- Autoconf -*- + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_DEFINE([ENABLE_NLS], [1], + [Define to 1 if translation of program messages to the user's native language + is requested.]) + else + USE_NLS=no + fi + fi + AC_MSG_CHECKING([whether to use NLS]) + AC_MSG_RESULT([$USE_NLS]) + if test "$USE_NLS" = "yes"; then + AC_MSG_CHECKING([where the gettext function comes from]) + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + AC_MSG_RESULT([$gt_source]) + fi -# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. + if test "$USE_NLS" = "yes"; then -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + AC_MSG_CHECKING([how to link with libintl]) + AC_MSG_RESULT([$LIBINTL]) + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) + fi -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. + dnl For backward compatibility. Some packages may be using this. + AC_DEFINE([HAVE_GETTEXT], [1], + [Define if the GNU gettext() function is already present or preinstalled.]) + AC_DEFINE([HAVE_DCGETTEXT], [1], + [Define if the GNU dcgettext() function is already present or preinstalled.]) + fi -# serial 3 + dnl We need to process the po/ directory. + POSUB=po + fi -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) + ifelse(gt_included_intl, yes, [ + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then + BUILD_INCLUDED_LIBINTL=yes + fi + dnl Make all variables we use known to autoconf. + AC_SUBST([BUILD_INCLUDED_LIBINTL]) + AC_SUBST([USE_INCLUDED_LIBINTL]) + AC_SUBST([CATOBJEXT]) -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= -# AM_AUX_DIR_EXPAND + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST([DATADIRNAME]) -# Copyright 2001 Free Software Foundation, Inc. + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST([INSTOBJEXT]) -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST([GENCAT]) -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. + dnl For backward compatibility. Some Makefiles may be using this. + INTLOBJS= + if test "$USE_INCLUDED_LIBINTL" = yes; then + INTLOBJS="\$(GETTOBJS)" + fi + AC_SUBST([INTLOBJS]) -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix + AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) + ]) -# Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50]) + dnl For backward compatibility. Some Makefiles may be using this. + INTLLIBS="$LIBINTL" + AC_SUBST([INTLLIBS]) -AC_DEFUN([AM_AUX_DIR_EXPAND], [ -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` + dnl Make all documented variables known to autoconf. + AC_SUBST([LIBINTL]) + AC_SUBST([LTLIBINTL]) + AC_SUBST([POSUB]) ]) -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. - -# Copyright 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"$am_aux_dir/install-sh"} -AC_SUBST(install_sh)]) - -# AM_PROG_INSTALL_STRIP - -# Copyright 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# -*- Autoconf -*- -# Copyright (C) 2003 Free Software Foundation, Inc. +dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. +m4_define([gt_NEEDS_INIT], +[ + m4_divert_text([DEFAULTS], [gt_needs=]) + m4_define([gt_NEEDS_INIT], []) +]) -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. +dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) +AC_DEFUN([AM_GNU_GETTEXT_NEED], +[ + m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) +]) -# serial 1 -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) -# serial 5 -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], []) -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. +# iconv.m4 serial 19 (gettext-0.18.2) +dnl Copyright (C) 2000-2002, 2007-2014, 2016 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +dnl From Bruno Haible. -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([iconv]) +]) -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... +AC_DEFUN([AM_ICONV_LINK], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + dnl Add $INCICONV to CPPFLAGS before performing the following checks, + dnl because if the user has installed libiconv and not disabled its use + dnl via --without-libiconv-prefix, he wants to use it. The first + dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. + am_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - : > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # (even with -Werror). So we grep stderr for any message - # that says an option was ignored. - if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi + AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + ]], + [[iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);]])], + [am_cv_func_iconv=yes]) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + ]], + [[iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);]])], + [am_cv_lib_iconv=yes] + [am_cv_func_iconv=yes]) + LIBS="$am_save_LIBS" fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - + ]) + if test "$am_cv_func_iconv" = yes; then + AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ + dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, + dnl Solaris 10. + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + am_cv_func_iconv_works=no + for ac_iconv_const in '' 'const'; do + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +#ifndef ICONV_CONST +# define ICONV_CONST $ac_iconv_const +#endif + ]], + [[int result = 0; + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\263"; + char buf[10]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + ICONV_CONST char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + result |= 8; + iconv_close (cd_88591_to_utf8); + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + result |= 16; + return result; +]])], + [am_cv_func_iconv_works=yes], , + [case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac]) + test "$am_cv_func_iconv_works" = no || break + done + LIBS="$am_save_LIBS" + ]) + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + AC_DEFINE([HAVE_ICONV], [1], + [Define if you have the iconv() function and it works.]) + fi + if test "$am_cv_lib_iconv" = yes; then + AC_MSG_CHECKING([how to link with libiconv]) + AC_MSG_RESULT([$LIBICONV]) + else + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV + dnl either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + AC_SUBST([LIBICONV]) + AC_SUBST([LTLIBICONV]) ]) - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking Speeds up one-time builds - --enable-dependency-tracking Do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) +dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to +dnl avoid warnings like +dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". +dnl This is tricky because of the way 'aclocal' is implemented: +dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. +dnl Otherwise aclocal's initial scan pass would miss the macro definition. +dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. +dnl Otherwise aclocal would emit many "Use of uninitialized value $1" +dnl warnings. +m4_define([gl_iconv_AC_DEFUN], + m4_version_prereq([2.64], + [[AC_DEFUN_ONCE( + [$1], [$2])]], + [m4_ifdef([gl_00GNULIB], + [[AC_DEFUN_ONCE( + [$1], [$2])]], + [[AC_DEFUN( + [$1], [$2])]])])) +gl_iconv_AC_DEFUN([AM_ICONV], +[ + AM_ICONV_LINK + if test "$am_cv_func_iconv" = yes; then + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL([am_cv_proto_iconv], [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + ]], + [[]])], + [am_cv_proto_iconv_arg1=""], + [am_cv_proto_iconv_arg1="const"]) + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([ + $am_cv_proto_iconv]) + AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], + [Define as const if the declaration of iconv() needs const.]) + dnl Also substitute ICONV_CONST in the gnulib generated . + m4_ifdef([gl_ICONV_H_DEFAULTS], + [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + if test -n "$am_cv_proto_iconv_arg1"; then + ICONV_CONST="const" + fi + ]) + fi ]) -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -#serial 2 +# intlmacosx.m4 serial 5 (gettext-0.18.2) +dnl Copyright (C) 2004-2014, 2016 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue +dnl Checks for special options needed on Mac OS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ + dnl Check for API introduced in Mac OS X 10.2. + AC_CACHE_CHECK([for CFPreferencesCopyAppValue], + [gt_cv_func_CFPreferencesCopyAppValue], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[CFPreferencesCopyAppValue(NULL, NULL)]])], + [gt_cv_func_CFPreferencesCopyAppValue=yes], + [gt_cv_func_CFPreferencesCopyAppValue=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], + [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi - grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue - # Extract the definition of DEP_FILES from the Makefile without - # running `make'. - DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` - test -z "$DEPDIR" && continue - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n -e '/^U = / s///p' < "$mf"` - test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" - # We invoke sed twice because it is the simplest approach to - # changing $(DEPDIR) to its actual value in the expansion. - for file in `sed -n -e ' - /^DEP_FILES = .*\\\\$/ { - s/^DEP_FILES = // - :loop - s/\\\\$// - p - n - /\\\\$/ b loop - p - } - /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done -done -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) + dnl Check for API introduced in Mac OS X 10.3. + AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[CFLocaleCopyCurrent();]])], + [gt_cv_func_CFLocaleCopyCurrent=yes], + [gt_cv_func_CFLocaleCopyCurrent=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], + [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + AC_SUBST([INTL_MACOSX_LIBS]) ]) -# Check to see how 'make' treats includes. -*- Autoconf -*- +# lib-ld.m4 serial 6 +dnl Copyright (C) 1996-2003, 2009-2016 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. -# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. +dnl Subroutines of libtool.m4, +dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid +dnl collision with libtool.m4. -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. +dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], +[# I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 confinc << 'END' -am__doit: - @echo done -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } fi -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright 1997, 2000, 2001 Free Software Foundation, Inc. -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 5 - -AC_PREREQ(2.52) - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE]) -AC_SUBST([$1_FALSE]) -if $2; then - $1_TRUE= - $1_FALSE='#' +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` + while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) else - $1_TRUE='#' - $1_FALSE= + AC_MSG_CHECKING([for non-GNU ld]) fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]) -fi])]) - -# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*- - -# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -AC_PREREQ([2.52]) - -# serial 6 - -# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. -AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) - -# Figure out how to run the assembler. -*- Autoconf -*- - -# serial 2 - -# Copyright 2001 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# AM_PROG_AS -# ---------- -AC_DEFUN([AM_PROG_AS], -[# By default we simply use the C compiler to build assembly code. -AC_REQUIRE([AC_PROG_CC]) -: ${CCAS='$(CC)'} -# Set ASFLAGS if not already set. -: ${CCASFLAGS='$(CFLAGS)'} -AC_SUBST(CCAS) -AC_SUBST(CCASFLAGS)]) +AC_CACHE_VAL([acl_cv_path_LD], +[if test -z "$LD"; then + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$acl_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 , 1995-2000. -dnl Bruno Haible , 2000-2003. +dnl From Bruno Haible. -dnl Macro to add for using GNU gettext. +AC_PREREQ([2.54]) -dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). -dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The -dnl default (if it is not specified or empty) is 'no-libtool'. -dnl INTLSYMBOL should be 'external' for packages with no intl directory, -dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. -dnl If INTLSYMBOL is 'use-libtool', then a libtool library -dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, -dnl depending on --{enable,disable}-{shared,static} and on the presence of -dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library -dnl $(top_builddir)/intl/libintl.a will be created. -dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext -dnl implementations (in libc or libintl) without the ngettext() function -dnl will be ignored. If NEEDSYMBOL is specified and is -dnl 'need-formatstring-macros', then GNU gettext implementations that don't -dnl support the ISO C 99 formatstring macros will be ignored. -dnl INTLDIR is used to find the intl libraries. If empty, -dnl the value `$(top_builddir)/intl/' is used. -dnl -dnl The result of the configuration is one of three cases: -dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled -dnl and used. -dnl Catalog format: GNU --> install in $(datadir) -dnl Catalog extension: .mo after installation, .gmo in source tree -dnl 2) GNU gettext has been found in the system's C library. -dnl Catalog format: GNU --> install in $(datadir) -dnl Catalog extension: .mo after installation, .gmo in source tree -dnl 3) No internationalization, always use English msgid. -dnl Catalog format: none -dnl Catalog extension: none -dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. -dnl The use of .gmo is historical (it was needed to avoid overwriting the -dnl GNU format catalogs when building on a platform with an X/Open gettext), -dnl but we keep it in order not to force irrelevant filename changes on the -dnl maintainers. -dnl -AC_DEFUN([AM_GNU_GETTEXT], +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS], [ - dnl Argument checking. - ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , - [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT -])])])])]) - ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , - [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT -])])])]) - define([gt_included_intl], ifelse([$1], [external], [no], [yes])) - define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) - - AC_REQUIRE([AM_PO_SUBDIRS])dnl - ifelse(gt_included_intl, yes, [ - AC_REQUIRE([AM_INTL_SUBDIR])dnl + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + pushdef([Name],[m4_translit([$1],[./+-], [____])]) + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + AC_SUBST([LIB]NAME[_PREFIX]) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + popdef([NAME]) + popdef([Name]) +]) - dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. The missing-message +dnl defaults to 'no' and may contain additional hints for the user. +dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} +dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) + pushdef([Name],[m4_translit([$1],[./+-], [____])]) + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) - dnl Sometimes libintl requires libiconv, so first search for libiconv. - dnl Ideally we would do this search only after the - dnl if test "$USE_NLS" = "yes"; then - dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then - dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT - dnl the configure script would need to contain the same shell code - dnl again, outside any 'if'. There are two solutions: - dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. - dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. - dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not - dnl documented, we avoid it. - ifelse(gt_included_intl, yes, , [ - AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) - ]) + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) - dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. - gt_INTL_MACOSX + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) - dnl Set USE_NLS. - AM_NLS + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, + dnl because these -l options might require -L options that are present in + dnl LIBS. -l options benefit only from the -L options listed before it. + dnl Otherwise, add it to the front of LIBS, because it may be a static + dnl library that depends on another static library that is present in LIBS. + dnl Static libraries benefit only from the static libraries listed after + dnl it. + case " $LIB[]NAME" in + *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; + *) LIBS="$LIB[]NAME $LIBS" ;; + esac + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[$3]], [[$4]])], + [ac_cv_lib[]Name=yes], + [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + LIB[]NAME[]_PREFIX= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + AC_SUBST([LIB]NAME[_PREFIX]) + popdef([NAME]) + popdef([Name]) +]) - ifelse(gt_included_intl, yes, [ - BUILD_INCLUDED_LIBINTL=no - USE_INCLUDED_LIBINTL=no +dnl Determine the platform dependent parameters needed to use rpath: +dnl acl_libext, +dnl acl_shlibext, +dnl acl_libname_spec, +dnl acl_library_names_spec, +dnl acl_hardcode_libdir_flag_spec, +dnl acl_hardcode_libdir_separator, +dnl acl_hardcode_direct, +dnl acl_hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + dnl Tell automake >= 1.10 to complain if config.rpath is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done ]) - LIBINTL= - LTLIBINTL= - POSUB= + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE([rpath], + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) - dnl If we use NLS figure out what method - if test "$USE_NLS" = "yes"; then - gt_use_preinstalled_gnugettext=no - ifelse(gt_included_intl, yes, [ - AC_MSG_CHECKING([whether included gettext is requested]) - AC_ARG_WITH(included-gettext, - [ --with-included-gettext use the GNU gettext library included here], - nls_cv_force_use_gnu_gettext=$withval, - nls_cv_force_use_gnu_gettext=no) - AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) - - nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" - if test "$nls_cv_force_use_gnu_gettext" != "yes"; then - ]) - dnl User does not insist on using GNU NLS library. Figure out what - dnl to use. If GNU gettext is available we use this. Else we have - dnl to fall back to GNU NLS library. - - dnl Add a version number to the cache macros. - define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1))) - define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) - define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) - - AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, - [AC_TRY_LINK([#include -]ifelse([$2], [need-formatstring-macros], -[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION -#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) -#endif -changequote(,)dnl -typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; -changequote([,])dnl -], [])[extern int _nl_msg_cat_cntr; -extern int *_nl_domain_bindings;], - [bindtextdomain ("", ""); -return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], - gt_cv_func_gnugettext_libc=yes, - gt_cv_func_gnugettext_libc=no)]) - - if test "$gt_cv_func_gnugettext_libc" != "yes"; then - dnl Sometimes libintl requires libiconv, so first search for libiconv. - ifelse(gt_included_intl, yes, , [ - AM_ICONV_LINK - ]) - dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL - dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) - dnl because that would add "-liconv" to LIBINTL and LTLIBINTL - dnl even if libiconv doesn't exist. - AC_LIB_LINKFLAGS_BODY([intl]) - AC_CACHE_CHECK([for GNU gettext in libintl], - gt_cv_func_gnugettext_libintl, - [gt_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $INCINTL" - gt_save_LIBS="$LIBS" - LIBS="$LIBS $LIBINTL" - dnl Now see whether libintl exists and does not depend on libiconv. - AC_TRY_LINK([#include -]ifelse([$2], [need-formatstring-macros], -[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION -#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) -#endif -changequote(,)dnl -typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; -changequote([,])dnl -], [])[extern int _nl_msg_cat_cntr; -extern -#ifdef __cplusplus -"C" -#endif -const char *_nl_expand_alias (const char *);], - [bindtextdomain ("", ""); -return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")], - gt_cv_func_gnugettext_libintl=yes, - gt_cv_func_gnugettext_libintl=no) - dnl Now see whether libintl exists and depends on libiconv. - if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then - LIBS="$LIBS $LIBICONV" - AC_TRY_LINK([#include -]ifelse([$2], [need-formatstring-macros], -[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION -#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) -#endif -changequote(,)dnl -typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; -changequote([,])dnl -], [])[extern int _nl_msg_cat_cntr; -extern -#ifdef __cplusplus -"C" -#endif -const char *_nl_expand_alias (const char *);], - [bindtextdomain ("", ""); -return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")], - [LIBINTL="$LIBINTL $LIBICONV" - LTLIBINTL="$LTLIBINTL $LTLIBICONV" - gt_cv_func_gnugettext_libintl=yes - ]) - fi - CPPFLAGS="$gt_save_CPPFLAGS" - LIBS="$gt_save_LIBS"]) - fi - - dnl If an already present or preinstalled GNU gettext() is found, - dnl use it. But if this macro is used in GNU gettext, and GNU - dnl gettext is already preinstalled in libintl, we update this - dnl libintl. (Cf. the install rule in intl/Makefile.in.) - if test "$gt_cv_func_gnugettext_libc" = "yes" \ - || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ - && test "$PACKAGE" != gettext-runtime \ - && test "$PACKAGE" != gettext-tools; }; then - gt_use_preinstalled_gnugettext=yes - else - dnl Reset the values set by searching for libintl. - LIBINTL= - LTLIBINTL= - INCINTL= - fi - - ifelse(gt_included_intl, yes, [ - if test "$gt_use_preinstalled_gnugettext" != "yes"; then - dnl GNU gettext is not found in the C library. - dnl Fall back on included GNU gettext library. - nls_cv_use_gnu_gettext=yes - fi - fi - - if test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Mark actions used to generate GNU NLS library. - BUILD_INCLUDED_LIBINTL=yes - USE_INCLUDED_LIBINTL=yes - LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV" - LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" - LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` - fi - - CATOBJEXT= - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Mark actions to use GNU gettext tools. - CATOBJEXT=.gmo - fi - ]) - - if test -n "$INTL_MACOSX_LIBS"; then - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Some extra flags are needed during linking. - LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" - LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" - fi - fi - - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - AC_DEFINE(ENABLE_NLS, 1, - [Define to 1 if translation of program messages to the user's native language - is requested.]) - else - USE_NLS=no - fi - fi - - AC_MSG_CHECKING([whether to use NLS]) - AC_MSG_RESULT([$USE_NLS]) - if test "$USE_NLS" = "yes"; then - AC_MSG_CHECKING([where the gettext function comes from]) - if test "$gt_use_preinstalled_gnugettext" = "yes"; then - if test "$gt_cv_func_gnugettext_libintl" = "yes"; then - gt_source="external libintl" - else - gt_source="libc" - fi - else - gt_source="included intl directory" - fi - AC_MSG_RESULT([$gt_source]) - fi - - if test "$USE_NLS" = "yes"; then - - if test "$gt_use_preinstalled_gnugettext" = "yes"; then - if test "$gt_cv_func_gnugettext_libintl" = "yes"; then - AC_MSG_CHECKING([how to link with libintl]) - AC_MSG_RESULT([$LIBINTL]) - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) - fi - - dnl For backward compatibility. Some packages may be using this. - AC_DEFINE(HAVE_GETTEXT, 1, - [Define if the GNU gettext() function is already present or preinstalled.]) - AC_DEFINE(HAVE_DCGETTEXT, 1, - [Define if the GNU dcgettext() function is already present or preinstalled.]) - fi - - dnl We need to process the po/ directory. - POSUB=po - fi - - ifelse(gt_included_intl, yes, [ - dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL - dnl to 'yes' because some of the testsuite requires it. - if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then - BUILD_INCLUDED_LIBINTL=yes - fi - - dnl Make all variables we use known to autoconf. - AC_SUBST(BUILD_INCLUDED_LIBINTL) - AC_SUBST(USE_INCLUDED_LIBINTL) - AC_SUBST(CATOBJEXT) - - dnl For backward compatibility. Some configure.ins may be using this. - nls_cv_header_intl= - nls_cv_header_libgt= - - dnl For backward compatibility. Some Makefiles may be using this. - DATADIRNAME=share - AC_SUBST(DATADIRNAME) - - dnl For backward compatibility. Some Makefiles may be using this. - INSTOBJEXT=.mo - AC_SUBST(INSTOBJEXT) - - dnl For backward compatibility. Some Makefiles may be using this. - GENCAT=gencat - AC_SUBST(GENCAT) - - dnl For backward compatibility. Some Makefiles may be using this. - INTLOBJS= - if test "$USE_INCLUDED_LIBINTL" = yes; then - INTLOBJS="\$(GETTOBJS)" - fi - AC_SUBST(INTLOBJS) - - dnl Enable libtool support if the surrounding package wishes it. - INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix - AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) - ]) - - dnl For backward compatibility. Some Makefiles may be using this. - INTLLIBS="$LIBINTL" - AC_SUBST(INTLLIBS) - - dnl Make all documented variables known to autoconf. - AC_SUBST(LIBINTL) - AC_SUBST(LTLIBINTL) - AC_SUBST(POSUB) -]) - - -dnl Checks for all prerequisites of the intl subdirectory, -dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, -dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. -AC_DEFUN([AM_INTL_SUBDIR], -[ - AC_REQUIRE([AC_PROG_INSTALL])dnl - AC_REQUIRE([AM_MKINSTALLDIRS])dnl - AC_REQUIRE([AC_PROG_CC])dnl - AC_REQUIRE([AC_CANONICAL_HOST])dnl - AC_REQUIRE([gt_GLIBC2])dnl - AC_REQUIRE([AC_PROG_RANLIB])dnl - AC_REQUIRE([AC_ISC_POSIX])dnl - AC_REQUIRE([AC_HEADER_STDC])dnl - AC_REQUIRE([AC_C_CONST])dnl - AC_REQUIRE([bh_C_SIGNED])dnl - AC_REQUIRE([AC_C_INLINE])dnl - AC_REQUIRE([AC_TYPE_OFF_T])dnl - AC_REQUIRE([AC_TYPE_SIZE_T])dnl - AC_REQUIRE([gl_AC_TYPE_LONG_LONG])dnl - AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl - AC_REQUIRE([gt_TYPE_WCHAR_T])dnl - AC_REQUIRE([gt_TYPE_WINT_T])dnl - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - AC_REQUIRE([gt_TYPE_INTMAX_T]) - AC_REQUIRE([gt_PRINTF_POSIX]) - AC_REQUIRE([AC_FUNC_ALLOCA])dnl - AC_REQUIRE([AC_FUNC_MMAP])dnl - AC_REQUIRE([gl_GLIBC21])dnl - AC_REQUIRE([gt_INTDIV0])dnl - AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl - AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl - AC_REQUIRE([gt_INTTYPES_PRI])dnl - AC_REQUIRE([gl_XSIZE])dnl - AC_REQUIRE([gt_INTL_MACOSX])dnl - - AC_CHECK_TYPE([ptrdiff_t], , - [AC_DEFINE([ptrdiff_t], [long], - [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) - ]) - AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ -stdlib.h string.h unistd.h sys/param.h]) - AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \ -mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \ -strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \ -__fsetlocking]) - - dnl Use the _snprintf function only if it is declared (because on NetBSD it - dnl is defined as a weak alias of snprintf; we prefer to use the latter). - gt_CHECK_DECL(_snprintf, [#include ]) - gt_CHECK_DECL(_snwprintf, [#include ]) - - dnl Use the *_unlocked functions only if they are declared. - dnl (because some of them were defined without being declared in Solaris - dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built - dnl on Solaris 2.5.1 to run on Solaris 2.6). - dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. - gt_CHECK_DECL(feof_unlocked, [#include ]) - gt_CHECK_DECL(fgets_unlocked, [#include ]) - gt_CHECK_DECL(getc_unlocked, [#include ]) - - case $gt_cv_func_printf_posix in - *yes) HAVE_POSIX_PRINTF=1 ;; - *) HAVE_POSIX_PRINTF=0 ;; - esac - AC_SUBST([HAVE_POSIX_PRINTF]) - if test "$ac_cv_func_asprintf" = yes; then - HAVE_ASPRINTF=1 - else - HAVE_ASPRINTF=0 - fi - AC_SUBST([HAVE_ASPRINTF]) - if test "$ac_cv_func_snprintf" = yes; then - HAVE_SNPRINTF=1 - else - HAVE_SNPRINTF=0 - fi - AC_SUBST([HAVE_SNPRINTF]) - if test "$ac_cv_func_wprintf" = yes; then - HAVE_WPRINTF=1 - else - HAVE_WPRINTF=0 - fi - AC_SUBST([HAVE_WPRINTF]) - - AM_ICONV - AM_LANGINFO_CODESET - if test $ac_cv_header_locale_h = yes; then - gt_LC_MESSAGES - fi - - if test -n "$INTL_MACOSX_LIBS"; then - CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" - fi - - dnl intl/plural.c is generated from intl/plural.y. It requires bison, - dnl because plural.y uses bison specific features. It requires at least - dnl bison-1.26 because earlier versions generate a plural.c that doesn't - dnl compile. - dnl bison is only needed for the maintainer (who touches plural.y). But in - dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put - dnl the rule in general Makefile. Now, some people carelessly touch the - dnl files or have a broken "make" program, hence the plural.c rule will - dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not - dnl present or too old. - AC_CHECK_PROGS([INTLBISON], [bison]) - if test -z "$INTLBISON"; then - ac_verc_fail=yes - else - dnl Found it, now check the version. - AC_MSG_CHECKING([version of bison]) -changequote(<<,>>)dnl - ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` - case $ac_prog_version in - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) -changequote([,])dnl - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; - esac - AC_MSG_RESULT([$ac_prog_version]) - fi - if test $ac_verc_fail = yes; then - INTLBISON=: - fi -]) - - -dnl Checks for special options needed on MacOS X. -dnl Defines INTL_MACOSX_LIBS. -AC_DEFUN([gt_INTL_MACOSX], -[ - dnl Check for API introduced in MacOS X 10.2. - AC_CACHE_CHECK([for CFPreferencesCopyAppValue], - gt_cv_func_CFPreferencesCopyAppValue, - [gt_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" - gt_save_LIBS="$LIBS" - LIBS="$LIBS -framework CoreFoundation" - AC_TRY_LINK([#include ], - [CFPreferencesCopyAppValue(NULL, NULL)], - [gt_cv_func_CFPreferencesCopyAppValue=yes], - [gt_cv_func_CFPreferencesCopyAppValue=no]) - CPPFLAGS="$gt_save_CPPFLAGS" - LIBS="$gt_save_LIBS"]) - if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then - AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1, - [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) - fi - dnl Check for API introduced in MacOS X 10.3. - AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, - [gt_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" - gt_save_LIBS="$LIBS" - LIBS="$LIBS -framework CoreFoundation" - AC_TRY_LINK([#include ], [CFLocaleCopyCurrent();], - [gt_cv_func_CFLocaleCopyCurrent=yes], - [gt_cv_func_CFLocaleCopyCurrent=no]) - CPPFLAGS="$gt_save_CPPFLAGS" - LIBS="$gt_save_LIBS"]) - if test $gt_cv_func_CFLocaleCopyCurrent = yes; then - AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1, - [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) - fi - INTL_MACOSX_LIBS= - if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then - INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" - fi - AC_SUBST([INTL_MACOSX_LIBS]) -]) - - -dnl gt_CHECK_DECL(FUNC, INCLUDES) -dnl Check whether a function is declared. -AC_DEFUN([gt_CHECK_DECL], -[ - AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1, - [AC_TRY_COMPILE([$2], [ -#ifndef $1 - char *p = (char *) $1; -#endif -], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)]) - if test $ac_cv_have_decl_$1 = yes; then - gt_value=1 - else - gt_value=0 - fi - AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value], - [Define to 1 if you have the declaration of `$1', and to 0 if you don't.]) -]) - - -dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) -AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) - -# po.m4 serial 7 (gettext-0.14.3) -dnl Copyright (C) 1995-2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1995-2000. -dnl Bruno Haible , 2000-2003. - -AC_PREREQ(2.50) - -dnl Checks for all prerequisites of the po subdirectory. -AC_DEFUN([AM_PO_SUBDIRS], -[ - AC_REQUIRE([AC_PROG_MAKE_SET])dnl - AC_REQUIRE([AC_PROG_INSTALL])dnl - AC_REQUIRE([AM_MKINSTALLDIRS])dnl - AC_REQUIRE([AM_NLS])dnl - - dnl Perform the following tests also if --disable-nls has been given, - dnl because they are needed for "make dist" to work. - - dnl Search for GNU msgfmt in the PATH. - dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. - dnl The second test excludes FreeBSD msgfmt. - AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, - [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && - (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], - :) - AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) - - dnl Search for GNU xgettext 0.12 or newer in the PATH. - dnl The first test excludes Solaris xgettext and early GNU xgettext versions. - dnl The second test excludes FreeBSD xgettext. - AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, - [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && - (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], - :) - dnl Remove leftover from FreeBSD xgettext call. - rm -f messages.po - - dnl Search for GNU msgmerge 0.11 or newer in the PATH. - AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, - [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) - - dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. - dnl Test whether we really found GNU msgfmt. - if test "$GMSGFMT" != ":"; then - dnl If it is no GNU msgfmt we define it as : so that the - dnl Makefiles still can work. - if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && - (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then - : ; - else - GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` - AC_MSG_RESULT( - [found $GMSGFMT program is not GNU msgfmt; ignore it]) - GMSGFMT=":" - fi - fi - - dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. - dnl Test whether we really found GNU xgettext. - if test "$XGETTEXT" != ":"; then - dnl If it is no GNU xgettext we define it as : so that the - dnl Makefiles still can work. - if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && - (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then - : ; - else - AC_MSG_RESULT( - [found xgettext program is not GNU xgettext; ignore it]) - XGETTEXT=":" - fi - dnl Remove leftover from FreeBSD xgettext call. - rm -f messages.po - fi - - AC_OUTPUT_COMMANDS([ - for ac_file in $CONFIG_FILES; do - # Support "outfile[:infile[:infile...]]" - case "$ac_file" in - *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - esac - # PO directories have a Makefile.in generated from Makefile.in.in. - case "$ac_file" in */Makefile.in) - # Adjust a relative srcdir. - ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" - ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` - # In autoconf-2.13 it is called $ac_given_srcdir. - # In autoconf-2.50 it is called $srcdir. - test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" - case "$ac_given_srcdir" in - .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; - /*) top_srcdir="$ac_given_srcdir" ;; - *) top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - # Treat a directory as a PO directory if and only if it has a - # POTFILES.in file. This allows packages to have multiple PO - # directories under different names or in different locations. - if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then - rm -f "$ac_dir/POTFILES" - test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" - cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" - POMAKEFILEDEPS="POTFILES.in" - # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend - # on $ac_dir but don't depend on user-specified configuration - # parameters. - if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then - # The LINGUAS file contains the set of available languages. - if test -n "$OBSOLETE_ALL_LINGUAS"; then - test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" - fi - ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` - # Hide the ALL_LINGUAS assigment from automake. - eval 'ALL_LINGUAS''=$ALL_LINGUAS_' - POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" - else - # The set of available languages was given in configure.in. - eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' - fi - # Compute POFILES - # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) - # Compute UPDATEPOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) - # Compute DUMMYPOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) - # Compute GMOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) - case "$ac_given_srcdir" in - .) srcdirpre= ;; - *) srcdirpre='$(srcdir)/' ;; - esac - POFILES= - UPDATEPOFILES= - DUMMYPOFILES= - GMOFILES= - for lang in $ALL_LINGUAS; do - POFILES="$POFILES $srcdirpre$lang.po" - UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" - DUMMYPOFILES="$DUMMYPOFILES $lang.nop" - GMOFILES="$GMOFILES $srcdirpre$lang.gmo" - done - # CATALOGS depends on both $ac_dir and the user's LINGUAS - # environment variable. - INST_LINGUAS= - if test -n "$ALL_LINGUAS"; then - for presentlang in $ALL_LINGUAS; do - useit=no - if test "%UNSET%" != "$LINGUAS"; then - desiredlanguages="$LINGUAS" - else - desiredlanguages="$ALL_LINGUAS" - fi - for desiredlang in $desiredlanguages; do - # Use the presentlang catalog if desiredlang is - # a. equal to presentlang, or - # b. a variant of presentlang (because in this case, - # presentlang can be used as a fallback for messages - # which are not translated in the desiredlang catalog). - case "$desiredlang" in - "$presentlang"*) useit=yes;; - esac - done - if test $useit = yes; then - INST_LINGUAS="$INST_LINGUAS $presentlang" - fi - done - fi - CATALOGS= - if test -n "$INST_LINGUAS"; then - for lang in $INST_LINGUAS; do - CATALOGS="$CATALOGS $lang.gmo" - done - fi - test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" - sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" - for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do - if test -f "$f"; then - case "$f" in - *.orig | *.bak | *~) ;; - *) cat "$f" >> "$ac_dir/Makefile" ;; - esac - fi - done - fi - ;; - esac - done], - [# Capture the value of obsolete ALL_LINGUAS because we need it to compute - # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it - # from automake. - eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' - # Capture the value of LINGUAS because we need it to compute CATALOGS. - LINGUAS="${LINGUAS-%UNSET%}" - ]) -]) - -dnl Postprocesses a Makefile in a directory containing PO files. -AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], -[ - # When this code is run, in config.status, two variables have already been - # set: - # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, - # - LINGUAS is the value of the environment variable LINGUAS at configure - # time. - -changequote(,)dnl - # Adjust a relative srcdir. - ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" - ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` - # In autoconf-2.13 it is called $ac_given_srcdir. - # In autoconf-2.50 it is called $srcdir. - test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" - case "$ac_given_srcdir" in - .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; - /*) top_srcdir="$ac_given_srcdir" ;; - *) top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - # Find a way to echo strings without interpreting backslash. - if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then - gt_echo='echo' - else - if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then - gt_echo='printf %s\n' - else - echo_func () { - cat < "$ac_file.tmp" - if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then - # Add dependencies that cannot be formulated as a simple suffix rule. - for lang in $ALL_LINGUAS; do - frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` - cat >> "$ac_file.tmp" < /dev/null; then - # Add dependencies that cannot be formulated as a simple suffix rule. - for lang in $ALL_LINGUAS; do - frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` - cat >> "$ac_file.tmp" <> "$ac_file.tmp" <, 1995-2000. -dnl Bruno Haible , 2000-2003. - -AC_PREREQ(2.50) - -AC_DEFUN([AM_NLS], -[ - AC_MSG_CHECKING([whether NLS is requested]) - dnl Default is enabled NLS - AC_ARG_ENABLE(nls, - [ --disable-nls do not use Native Language Support], - USE_NLS=$enableval, USE_NLS=yes) - AC_MSG_RESULT($USE_NLS) - AC_SUBST(USE_NLS) -]) - -AC_DEFUN([AM_MKINSTALLDIRS], -[ - dnl Tell automake >= 1.10 to complain if mkinstalldirs is missing. - m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([mkinstalldirs])]) - dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly - dnl find the mkinstalldirs script in another subdir but $(top_srcdir). - dnl Try to locate it. - MKINSTALLDIRS= - if test -n "$ac_aux_dir"; then - case "$ac_aux_dir" in - /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; - *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; - esac - fi - if test -z "$MKINSTALLDIRS"; then - MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" - fi - AC_SUBST(MKINSTALLDIRS) -]) - -# progtest.m4 serial 4 (gettext-0.14.2) -dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1996. - -AC_PREREQ(2.50) - -# Search path for a program which passes the given test. - -dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, -dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) -AC_DEFUN([AM_PATH_PROG_WITH_TEST], -[ -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Find out how to test for executable files. Don't use a zero-byte file, -# as systems may use methods other than mode bits to determine executability. -cat >conf$$.file <<_ASEOF -#! /bin/sh -exit 0 -_ASEOF -chmod +x conf$$.file -if test -x conf$$.file >/dev/null 2>&1; then - ac_executable_p="test -x" -else - ac_executable_p="test -f" -fi -rm -f conf$$.file - -# Extract the first word of "$2", so it can be a program name with args. -set dummy $2; ac_word=[$]2 -AC_MSG_CHECKING([for $ac_word]) -AC_CACHE_VAL(ac_cv_path_$1, -[case "[$]$1" in - [[\\/]]* | ?:[[\\/]]*) - ac_cv_path_$1="[$]$1" # Let the user override the test with a path. - ;; - *) - ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in ifelse([$5], , $PATH, [$5]); do - IFS="$ac_save_IFS" - test -z "$ac_dir" && ac_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then - echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD - if [$3]; then - ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" - break 2 - fi - fi - done - done - IFS="$ac_save_IFS" -dnl If no 4th arg is given, leave the cache variable unset, -dnl so AC_PATH_PROGS will keep looking. -ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" -])dnl - ;; -esac])dnl -$1="$ac_cv_path_$1" -if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then - AC_MSG_RESULT([$]$1) -else - AC_MSG_RESULT(no) -fi -AC_SUBST($1)dnl -]) - -# lib-prefix.m4 serial 4 (gettext-0.14.2) -dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and -dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't -dnl require excessive bracketing. -ifdef([AC_HELP_STRING], -[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], -[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) - -dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed -dnl to access previously installed libraries. The basic assumption is that -dnl a user will want packages to use other packages he previously installed -dnl with the same --prefix option. -dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate -dnl libraries, but is otherwise very convenient. -AC_DEFUN([AC_LIB_PREFIX], -[ - AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - dnl By default, look in $includedir and $libdir. - use_additional=yes - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - AC_LIB_ARG_WITH([lib-prefix], -[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib - --without-lib-prefix don't search for libraries in includedir and libdir], -[ - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - else - additional_includedir="$withval/include" - additional_libdir="$withval/lib" - fi - fi -]) - if test $use_additional = yes; then - dnl Potentially add $additional_includedir to $CPPFLAGS. - dnl But don't add it - dnl 1. if it's the standard /usr/include, - dnl 2. if it's already present in $CPPFLAGS, - dnl 3. if it's /usr/local/include and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - for x in $CPPFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - dnl Really add $additional_includedir to $CPPFLAGS. - CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" - fi - fi - fi - fi - dnl Potentially add $additional_libdir to $LDFLAGS. - dnl But don't add it - dnl 1. if it's the standard /usr/lib, - dnl 2. if it's already present in $LDFLAGS, - dnl 3. if it's /usr/local/lib and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/lib"; then - haveit= - for x in $LDFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test "X$additional_libdir" = "X/usr/local/lib"; then - if test -n "$GCC"; then - case $host_os in - linux*) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LDFLAGS. - LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" - fi - fi - fi - fi - fi -]) - -dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, -dnl acl_final_exec_prefix, containing the values to which $prefix and -dnl $exec_prefix will expand at the end of the configure script. -AC_DEFUN([AC_LIB_PREPARE_PREFIX], -[ - dnl Unfortunately, prefix and exec_prefix get only finally determined - dnl at the end of configure. - if test "X$prefix" = "XNONE"; then - acl_final_prefix="$ac_default_prefix" - else - acl_final_prefix="$prefix" - fi - if test "X$exec_prefix" = "XNONE"; then - acl_final_exec_prefix='${prefix}' - else - acl_final_exec_prefix="$exec_prefix" - fi - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" - prefix="$acl_save_prefix" -]) - -dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the -dnl variables prefix and exec_prefix bound to the values they will have -dnl at the end of the configure script. -AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], -[ - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - $1 - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" -]) - -# lib-link.m4 serial 6 (gettext-0.14.3) -dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_PREREQ(2.50) - -dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and -dnl the libraries corresponding to explicit and implicit dependencies. -dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and -dnl augments the CPPFLAGS variable. -AC_DEFUN([AC_LIB_LINKFLAGS], -[ - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - define([Name],[translit([$1],[./-], [___])]) - define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ - AC_LIB_LINKFLAGS_BODY([$1], [$2]) - ac_cv_lib[]Name[]_libs="$LIB[]NAME" - ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" - ac_cv_lib[]Name[]_cppflags="$INC[]NAME" - ]) - LIB[]NAME="$ac_cv_lib[]Name[]_libs" - LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" - INC[]NAME="$ac_cv_lib[]Name[]_cppflags" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) - AC_SUBST([LIB]NAME) - AC_SUBST([LTLIB]NAME) - dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the - dnl results of this search when this library appears as a dependency. - HAVE_LIB[]NAME=yes - undefine([Name]) - undefine([NAME]) -]) - -dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) -dnl searches for libname and the libraries corresponding to explicit and -dnl implicit dependencies, together with the specified include files and -dnl the ability to compile and link the specified testcode. If found, it -dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and -dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and -dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs -dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. -AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], -[ - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - define([Name],[translit([$1],[./-], [___])]) - define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - - dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME - dnl accordingly. - AC_LIB_LINKFLAGS_BODY([$1], [$2]) - - dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, - dnl because if the user has installed lib[]Name and not disabled its use - dnl via --without-lib[]Name-prefix, he wants to use it. - ac_save_CPPFLAGS="$CPPFLAGS" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) - - AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ - ac_save_LIBS="$LIBS" - LIBS="$LIBS $LIB[]NAME" - AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) - LIBS="$ac_save_LIBS" - ]) - if test "$ac_cv_lib[]Name" = yes; then - HAVE_LIB[]NAME=yes - AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) - AC_MSG_CHECKING([how to link with lib[]$1]) - AC_MSG_RESULT([$LIB[]NAME]) - else - HAVE_LIB[]NAME=no - dnl If $LIB[]NAME didn't lead to a usable library, we don't need - dnl $INC[]NAME either. - CPPFLAGS="$ac_save_CPPFLAGS" - LIB[]NAME= - LTLIB[]NAME= - fi - AC_SUBST([HAVE_LIB]NAME) - AC_SUBST([LIB]NAME) - AC_SUBST([LTLIB]NAME) - undefine([Name]) - undefine([NAME]) -]) - -dnl Determine the platform dependent parameters needed to use rpath: -dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, -dnl hardcode_direct, hardcode_minus_L. -AC_DEFUN([AC_LIB_RPATH], +dnl AC_LIB_FROMPACKAGE(name, package) +dnl declares that libname comes from the given package. The configure file +dnl will then not have a --with-libname-prefix option but a +dnl --with-package-prefix option. Several libraries can come from the same +dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar +dnl macro call that searches for libname. +AC_DEFUN([AC_LIB_FROMPACKAGE], [ - dnl Tell automake >= 1.10 to complain if config.rpath is missing. - m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) - AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS - AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld - AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host - AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir - AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ - CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ - ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh - . ./conftest.sh - rm -f ./conftest.sh - acl_cv_rpath=done - ]) - wl="$acl_cv_wl" - libext="$acl_cv_libext" - shlibext="$acl_cv_shlibext" - hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" - hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" - hardcode_direct="$acl_cv_hardcode_direct" - hardcode_minus_L="$acl_cv_hardcode_minus_L" - dnl Determine whether the user wants rpath handling at all. - AC_ARG_ENABLE(rpath, - [ --disable-rpath do not hardcode runtime library paths], - :, enable_rpath=yes) + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + define([acl_frompackage_]NAME, [$2]) + popdef([NAME]) + pushdef([PACK],[$2]) + pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + define([acl_libsinpackage_]PACKUP, + m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) + popdef([PACKUP]) + popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found +dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ - define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) + pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) + dnl Autoconf >= 2.61 supports dots in --with options. + pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) - AC_LIB_ARG_WITH([lib$1-prefix], -[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib - --without-lib$1-prefix don't search for lib$1 in includedir and libdir], + AC_ARG_WITH(P_A_C_K[-prefix], +[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib + --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no @@ -2320,7 +1245,11 @@ ]) else additional_includedir="$withval/include" - additional_libdir="$withval/lib" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi fi fi ]) @@ -2329,6 +1258,10 @@ LIB[]NAME= LTLIB[]NAME= INC[]NAME= + LIB[]NAME[]_PREFIX= + dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been + dnl computed. So it has to be reset here. + HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= @@ -2348,7 +1281,7 @@ names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then @@ -2368,22 +1301,55 @@ found_la= found_so= found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then - found_dir="$additional_libdir" - found_so="$additional_libdir/lib$name.$shlibext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - else - if test -f "$additional_libdir/lib$name.$libext"; then - found_dir="$additional_libdir" - found_a="$additional_libdir/lib$name.$libext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" + dir="$additional_libdir" + dnl The same code as in the loop below: + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done fi fi fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do @@ -2391,21 +1357,46 @@ case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then - found_dir="$dir" - found_so="$dir/lib$name.$shlibext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - else - if test -f "$dir/lib$name.$libext"; then + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then found_dir="$dir" - found_a="$dir/lib$name.$libext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done fi fi fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi ;; esac if test "X$found_dir" != "X"; then @@ -2420,7 +1411,9 @@ dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. - if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else @@ -2439,12 +1432,12 @@ ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. - if test "$hardcode_direct" = yes; then + if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else - if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" @@ -2475,13 +1468,13 @@ if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi - if test "$hardcode_minus_L" != no; then + if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else - dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH + dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. @@ -2506,8 +1499,18 @@ dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in - */lib | */lib/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi additional_includedir="$basedir/include" ;; esac @@ -2568,9 +1571,11 @@ dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/lib"; then + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= - if test "X$additional_libdir" = "X/usr/local/lib"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; @@ -2669,18 +1674,18 @@ done done if test "X$rpathdirs" != "X"; then - if test -n "$hardcode_libdir_separator"; then + if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done - dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. + dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" - eval flag=\"$hardcode_libdir_flag_spec\" + eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else @@ -2688,7 +1693,7 @@ for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" - eval flag=\"$hardcode_libdir_flag_spec\" + eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done @@ -2701,6 +1706,11 @@ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi + popdef([P_A_C_K]) + popdef([PACKLIBS]) + popdef([PACKUP]) + popdef([PACK]) + popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, @@ -2724,1926 +1734,2506 @@ done ]) -# lib-ld.m4 serial 3 (gettext-0.13) -dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Subroutines of libtool.m4, -dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision -dnl with libtool.m4. - -dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. -AC_DEFUN([AC_LIB_PROG_LD_GNU], -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU ld's only accept -v. -case `$LD -v 2>&1 conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by GCC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]* | [A-Za-z]:[\\/]*)] - [re_direlt='/[^/][^/]*/\.\./'] - # Canonicalize the path of ld - ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ + AC_REQUIRE([AC_LIB_RPATH]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + $1= + if test "$enable_rpath" != no; then + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode directories into the resulting + dnl binary. + rpathdirs= + next= + for opt in $2; do + if test -n "$next"; then + dir="$next" + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= + else + case $opt in + -L) next=yes ;; + -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= ;; + *) next= ;; + esac + fi done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(acl_cv_path_LD, -[if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - acl_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break ;; - *) - test "$with_gnu_ld" != yes && break ;; - esac + if test "X$rpathdirs" != "X"; then + if test -n ""$3""; then + dnl libtool is used for linking. Use -R options. + for dir in $rpathdirs; do + $1="${$1}${$1:+ }-R$dir" + done + else + dnl The linker is used for linking directly. + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user + dnl must pass all path elements in one option. + alldirs= + for dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="$flag" + else + dnl The -rpath options are cumulative. + for dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="${$1}${$1:+ }$flag" + done + fi + fi + fi fi - done - IFS="$ac_save_ifs" -else - acl_cv_path_LD="$LD" # Let the user override the test with a path. -fi]) -LD="$acl_cv_path_LD" -if test -n "$LD"; then - AC_MSG_RESULT($LD) -else - AC_MSG_RESULT(no) -fi -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) -AC_LIB_PROG_LD_GNU + fi + AC_SUBST([$1]) ]) -# iconv.m4 serial AM4 (gettext-0.11.3) -dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. +# lib-prefix.m4 serial 7 (gettext-0.18) +dnl Copyright (C) 2001-2005, 2008-2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. -AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], [ - dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - - dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV - dnl accordingly. - AC_LIB_LINKFLAGS_BODY([iconv]) -]) - -AC_DEFUN([AM_ICONV_LINK], + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], [ - dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and - dnl those with the standalone portable GNU libiconv installed). - - dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV - dnl accordingly. - AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) - - dnl Add $INCICONV to CPPFLAGS before performing the following checks, - dnl because if the user has installed libiconv and not disabled its use - dnl via --without-libiconv-prefix, he wants to use it. The first - dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. - am_save_CPPFLAGS="$CPPFLAGS" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) - - AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ - am_cv_func_iconv="no, consider installing GNU libiconv" - am_cv_lib_iconv=no - AC_TRY_LINK([#include -#include ], - [iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd);], - am_cv_func_iconv=yes) - if test "$am_cv_func_iconv" != yes; then - am_save_LIBS="$LIBS" - LIBS="$LIBS $LIBICONV" - AC_TRY_LINK([#include -#include ], - [iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd);], - am_cv_lib_iconv=yes - am_cv_func_iconv=yes) - LIBS="$am_save_LIBS" + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi fi - ]) - if test "$am_cv_func_iconv" = yes; then - AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) - fi - if test "$am_cv_lib_iconv" = yes; then - AC_MSG_CHECKING([how to link with libiconv]) - AC_MSG_RESULT([$LIBICONV]) - else - dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV - dnl either. - CPPFLAGS="$am_save_CPPFLAGS" - LIBICONV= - LTLIBICONV= fi - AC_SUBST(LIBICONV) - AC_SUBST(LTLIBICONV) ]) -AC_DEFUN([AM_ICONV], +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ - AM_ICONV_LINK - if test "$am_cv_func_iconv" = yes; then - AC_MSG_CHECKING([for iconv declaration]) - AC_CACHE_VAL(am_cv_proto_iconv, [ - AC_TRY_COMPILE([ -#include -#include -extern -#ifdef __cplusplus -"C" -#endif -#if defined(__STDC__) || defined(__cplusplus) -size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); -#else -size_t iconv(); -#endif -], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") - am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) - am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` - AC_MSG_RESULT([$]{ac_t:- - }[$]am_cv_proto_iconv) - AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, - [Define as const if the declaration of iconv() needs const.]) + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" ]) -# glibc2.m4 serial 1 -dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Test for the GNU C Library, version 2.0 or newer. -# From Bruno Haible. +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) -AC_DEFUN([gt_GLIBC2], - [ - AC_CACHE_CHECK(whether we are using the GNU C Library 2 or newer, - ac_cv_gnu_library_2, - [AC_EGREP_CPP([Lucky GNU user], - [ -#include -#ifdef __GNU_LIBRARY__ - #if (__GLIBC__ >= 2) - Lucky GNU user - #endif +dnl AC_LIB_PREPARE_MULTILIB creates +dnl - a variable acl_libdirstem, containing the basename of the libdir, either +dnl "lib" or "lib64" or "lib/64", +dnl - a variable acl_libdirstem2, as a secondary possible value for +dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or +dnl "lib/amd64". +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ + dnl There is no formal standard regarding lib and lib64. + dnl On glibc systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine + dnl the compiler's default mode by looking at the compiler's library search + dnl path. If at least one of its elements ends in /lib64 or points to a + dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. + dnl Otherwise we use the default, namely "lib". + dnl On Solaris systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or + dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. + AC_REQUIRE([AC_CANONICAL_HOST]) + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment + dnl . + dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." + dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the + dnl symlink is missing, so we set acl_libdirstem2 too. + AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], + [AC_EGREP_CPP([sixtyfour bits], [ +#ifdef _LP64 +sixtyfour bits #endif - ], - ac_cv_gnu_library_2=yes, - ac_cv_gnu_library_2=no) - ] - ) - AC_SUBST(GLIBC2) - GLIBC2="$ac_cv_gnu_library_2" - ] -) + ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) + ]) + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" +]) -# isc-posix.m4 serial 2 (gettext-0.11.2) -dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. +# nls.m4 serial 5 (gettext-0.18) +dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software +dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. -# This file is not needed with autoconf-2.53 and newer. Remove it in 2005. - -# This test replaces the one in autoconf. -# Currently this macro should have the same name as the autoconf macro -# because gettext's gettext.m4 (distributed in the automake package) -# still uses it. Otherwise, the use in gettext.m4 makes autoheader -# give these diagnostics: -# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX -# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX - -undefine([AC_ISC_POSIX]) - -AC_DEFUN([AC_ISC_POSIX], - [ - dnl This test replaces the obsolescent AC_ISC_POSIX kludge. - AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) - ] -) - -# signed.m4 serial 1 (gettext-0.10.40) -dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. -dnl From Bruno Haible. +AC_PREREQ([2.50]) -AC_DEFUN([bh_C_SIGNED], +AC_DEFUN([AM_NLS], [ - AC_CACHE_CHECK([for signed], bh_cv_c_signed, - [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)]) - if test $bh_cv_c_signed = no; then - AC_DEFINE(signed, , - [Define to empty if the C compiler doesn't support this keyword.]) - fi + AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE([nls], + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT([$USE_NLS]) + AC_SUBST([USE_NLS]) ]) -# longlong.m4 serial 5 -dnl Copyright (C) 1999-2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. +dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +dnl serial 11 (pkg-config-0.29) +dnl +dnl Copyright © 2004 Scott James Remnant . +dnl Copyright © 2012-2015 Dan Nicholson +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) -# Define HAVE_LONG_LONG if 'long long' works. +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])dnl PKG_PROG_PKG_CONFIG -AC_DEFUN([gl_AC_TYPE_LONG_LONG], -[ - AC_CACHE_CHECK([for long long], ac_cv_type_long_long, - [AC_TRY_LINK([long long ll = 1LL; int i = 63;], - [long long llmax = (long long) -1; - return ll << i | ll >> i | llmax / ll | llmax % ll;], - ac_cv_type_long_long=yes, - ac_cv_type_long_long=no)]) - if test $ac_cv_type_long_long = yes; then - AC_DEFINE(HAVE_LONG_LONG, 1, - [Define if you have the 'long long' type.]) - fi -]) +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) -# longdouble.m4 serial 1 (gettext-0.12) -dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])dnl _PKG_CONFIG -dnl From Bruno Haible. -dnl Test whether the compiler supports the 'long double' type. -dnl Prerequisite: AC_PROG_CC +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])dnl _PKG_SHORT_ERRORS_SUPPORTED -AC_DEFUN([gt_TYPE_LONGDOUBLE], -[ - AC_CACHE_CHECK([for long double], gt_cv_c_long_double, - [if test "$GCC" = yes; then - gt_cv_c_long_double=yes - else - AC_TRY_COMPILE([ - /* The Stardent Vistra knows sizeof(long double), but does not support it. */ - long double foo = 0.0; - /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ - int array [2*(sizeof(long double) >= sizeof(double)) - 1]; - ], , - gt_cv_c_long_double=yes, gt_cv_c_long_double=no) - fi]) - if test $gt_cv_c_long_double = yes; then - AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.]) - fi -]) -# wchar_t.m4 serial 1 (gettext-0.12) -dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl -dnl From Bruno Haible. -dnl Test whether has the 'wchar_t' type. -dnl Prerequisite: AC_PROG_CC +pkg_failed=no +AC_MSG_CHECKING([for $1]) -AC_DEFUN([gt_TYPE_WCHAR_T], -[ - AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t, - [AC_TRY_COMPILE([#include - wchar_t foo = (wchar_t)'\0';], , - gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)]) - if test $gt_cv_c_wchar_t = yes; then - AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.]) - fi -]) +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) -# wint_t.m4 serial 1 (gettext-0.12) -dnl Copyright (C) 2003 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) -dnl From Bruno Haible. -dnl Test whether has the 'wint_t' type. -dnl Prerequisite: AC_PROG_CC +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD -AC_DEFUN([gt_TYPE_WINT_T], -[ - AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t, - [AC_TRY_COMPILE([#include - wint_t foo = (wchar_t)'\0';], , - gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)]) - if test $gt_cv_c_wint_t = yes; then - AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.]) - fi -]) + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: -# inttypes_h.m4 serial 6 -dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. +$$1_PKG_ERRORS -dnl From Paul Eggert. +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. -# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, -# doesn't clash with , and declares uintmax_t. +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. -AC_DEFUN([gl_AC_HEADER_INTTYPES_H], -[ - AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h, - [AC_TRY_COMPILE( - [#include -#include ], - [uintmax_t i = (uintmax_t) -1;], - gl_cv_header_inttypes_h=yes, - gl_cv_header_inttypes_h=no)]) - if test $gl_cv_header_inttypes_h = yes; then - AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, - [Define if exists, doesn't clash with , - and declares uintmax_t. ]) - fi -]) +_PKG_TEXT -# stdint_h.m4 serial 5 -dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])dnl PKG_CHECK_MODULES -dnl From Paul Eggert. -# Define HAVE_STDINT_H_WITH_UINTMAX if exists, -# doesn't clash with , and declares uintmax_t. +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC -AC_DEFUN([gl_AC_HEADER_STDINT_H], -[ - AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h, - [AC_TRY_COMPILE( - [#include -#include ], - [uintmax_t i = (uintmax_t) -1;], - gl_cv_header_stdint_h=yes, - gl_cv_header_stdint_h=no)]) - if test $gl_cv_header_stdint_h = yes; then - AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, - [Define if exists, doesn't clash with , - and declares uintmax_t. ]) - fi -]) -# intmax.m4 serial 2 (gettext-0.14.2) -dnl Copyright (C) 2002-2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_INSTALLDIR + + +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_NOARCH_INSTALLDIR + + +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl -dnl From Bruno Haible. -dnl Test whether the system has the 'intmax_t' type, but don't attempt to -dnl find a replacement if it is lacking. +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) -AC_DEFUN([gt_TYPE_INTMAX_T], -[ - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t, - [AC_TRY_COMPILE([ -#include -#include -#if HAVE_STDINT_H_WITH_UINTMAX -#include -#endif -#if HAVE_INTTYPES_H_WITH_UINTMAX -#include -#endif -], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)]) - if test $gt_cv_c_intmax_t = yes; then - AC_DEFINE(HAVE_INTMAX_T, 1, - [Define if you have the 'intmax_t' type in or .]) - fi -]) +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])dnl PKG_CHECK_VAR -# printf-posix.m4 serial 2 (gettext-0.13.1) -dnl Copyright (C) 2003 Free Software Foundation, Inc. +# po.m4 serial 24 (gettext-0.19) +dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. -dnl From Bruno Haible. -dnl Test whether the printf() function supports POSIX/XSI format strings with -dnl positions. - -AC_DEFUN([gt_PRINTF_POSIX], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings], - gt_cv_func_printf_posix, - [ - AC_TRY_RUN([ -#include -#include -/* The string "%2$d %1$d", with dollar characters protected from the shell's - dollar expansion (possibly an autoconf bug). */ -static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; -static char buf[100]; -int main () -{ - sprintf (buf, format, 33, 55); - return (strcmp (buf, "55 33") != 0); -}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no, - [ - AC_EGREP_CPP(notposix, [ -#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ - notposix -#endif - ], gt_cv_func_printf_posix="guessing no", - gt_cv_func_printf_posix="guessing yes") - ]) - ]) - case $gt_cv_func_printf_posix in - *yes) - AC_DEFINE(HAVE_POSIX_PRINTF, 1, - [Define if your printf() function supports format strings with positions.]) - ;; - esac -]) +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. -# glibc21.m4 serial 3 -dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. +AC_PREREQ([2.60]) -# Test for the GNU C Library, version 2.1 or newer. -# From Bruno Haible. +dnl Checks for all prerequisites of the po subdirectory. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AC_PROG_MKDIR_P])dnl + AC_REQUIRE([AC_PROG_SED])dnl + AC_REQUIRE([AM_NLS])dnl -AC_DEFUN([gl_GLIBC21], - [ - AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, - ac_cv_gnu_library_2_1, - [AC_EGREP_CPP([Lucky GNU user], - [ -#include -#ifdef __GNU_LIBRARY__ - #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) - Lucky GNU user - #endif -#endif - ], - ac_cv_gnu_library_2_1=yes, - ac_cv_gnu_library_2_1=no) - ] - ) - AC_SUBST(GLIBC21) - GLIBC21="$ac_cv_gnu_library_2_1" - ] -) + dnl Release version of the gettext macros. This is used to ensure that + dnl the gettext macros and po/Makefile.in.in are in sync. + AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) -# intdiv0.m4 serial 1 (gettext-0.11.3) -dnl Copyright (C) 2002 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. -dnl From Bruno Haible. + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) -AC_DEFUN([gt_INTDIV0], -[ - AC_REQUIRE([AC_PROG_CC])dnl - AC_REQUIRE([AC_CANONICAL_HOST])dnl + dnl Test whether it is GNU msgfmt >= 0.15. +changequote(,)dnl + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([MSGFMT_015]) +changequote(,)dnl + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([GMSGFMT_015]) - AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], - gt_cv_int_divbyzero_sigfpe, - [ - AC_TRY_RUN([ -#include -#include + dnl Search for GNU xgettext 0.12 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po -static void -#ifdef __cplusplus -sigfpe_handler (int sig) -#else -sigfpe_handler (sig) int sig; -#endif -{ - /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ - exit (sig != SIGFPE); -} + dnl Test whether it is GNU xgettext >= 0.15. +changequote(,)dnl + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac +changequote([,])dnl + AC_SUBST([XGETTEXT_015]) -int x = 1; -int y = 0; -int z; -int nan; + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) -int main () -{ - signal (SIGFPE, sigfpe_handler); -/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ -#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) - signal (SIGTRAP, sigfpe_handler); -#endif -/* Linux/SPARC yields signal SIGILL. */ -#if defined (__sparc__) && defined (__linux__) - signal (SIGILL, sigfpe_handler); -#endif + dnl Installation directories. + dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we + dnl have to define it here, so that it can be used in po/Makefile. + test -n "$localedir" || localedir='${datadir}/locale' + AC_SUBST([localedir]) + + dnl Support for AM_XGETTEXT_OPTION. + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) - z = x / y; - nan = y / y; - exit (1); -} -], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, - [ - # Guess based on the CPU. - case "$host_cpu" in - alpha* | i[34567]86 | m68k | s390*) - gt_cv_int_divbyzero_sigfpe="guessing yes";; - *) - gt_cv_int_divbyzero_sigfpe="guessing no";; + AC_CONFIG_COMMANDS([po-directories], [[ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; esac - ]) - ]) - case "$gt_cv_int_divbyzero_sigfpe" in - *yes) value=1;; - *) value=0;; - esac - AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, - [Define if integer division by zero raises signal SIGFPE.]) + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done]], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) ]) -# uintmax_t.m4 serial 9 -dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. +dnl Postprocesses a Makefile in a directory containing PO files. +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], +[ + # When this code is run, in config.status, two variables have already been + # set: + # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, + # - LINGUAS is the value of the environment variable LINGUAS at configure + # time. + +changequote(,)dnl + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac -dnl From Paul Eggert. + # Find a way to echo strings without interpreting backslash. + if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='echo' + else + if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='printf %s\n' + else + echo_func () { + cat < or . + # Set POTFILES to the value of the Makefile variable POTFILES. + sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'` + POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"` + # Compute POTFILES_DEPS as + # $(foreach file, $(POTFILES), $(top_srcdir)/$(file)) + POTFILES_DEPS= + for file in $POTFILES; do + POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file" + done + POMAKEFILEDEPS="" -AC_DEFUN([gl_AC_TYPE_UINTMAX_T], -[ - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then - AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG]) - test $ac_cv_type_unsigned_long_long = yes \ - && ac_type='unsigned long long' \ - || ac_type='unsigned long' - AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, - [Define to unsigned long or unsigned long long - if and don't define.]) + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else - AC_DEFINE(HAVE_UINTMAX_T, 1, - [Define if you have the 'uintmax_t' type in or .]) + # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS. + sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'` + ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"` + fi + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + # Compute PROPERTIESFILES + # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties) + # Compute CLASSFILES + # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class) + # Compute QMFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm) + # Compute MSGFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg) + # Compute RESOURCESDLLFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + PROPERTIESFILES= + CLASSFILES= + QMFILES= + MSGFILES= + RESOURCESDLLFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties" + CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class" + QMFILES="$QMFILES $srcdirpre$lang.qm" + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg" + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done fi -]) - -# ulonglong.m4 serial 4 -dnl Copyright (C) 1999-2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works. - -AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG], -[ - AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, - [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;], - [unsigned long long ullmax = (unsigned long long) -1; - return ull << i | ull >> i | ullmax / ull | ullmax % ull;], - ac_cv_type_unsigned_long_long=yes, - ac_cv_type_unsigned_long_long=no)]) - if test $ac_cv_type_unsigned_long_long = yes; then - AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, - [Define if you have the 'unsigned long long' type.]) + CATALOGS= + JAVACATALOGS= + QTCATALOGS= + TCLCATALOGS= + CSHARPCATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties" + QTCATALOGS="$QTCATALOGS $lang.qm" + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg" + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll" + done fi -]) - -# inttypes.m4 serial 1 (gettext-0.11.4) -dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. -# Define HAVE_INTTYPES_H if exists and doesn't clash with -# . - -AC_DEFUN([gt_HEADER_INTTYPES_H], -[ - AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, - [ - AC_TRY_COMPILE( - [#include -#include ], - [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) - ]) - if test $gt_cv_header_inttypes_h = yes; then - AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, - [Define if exists and doesn't clash with .]) + sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp" + tab=`printf '\t'` + if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + cat >> "$ac_file.tmp" < exists and defines the PRI* -# macros to non-string values. This is the case on AIX 4.3.3. - -AC_DEFUN([gt_INTTYPES_PRI], -[ - AC_REQUIRE([gt_HEADER_INTTYPES_H]) - if test $gt_cv_header_inttypes_h = yes; then - AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], - gt_cv_inttypes_pri_broken, - [ - AC_TRY_COMPILE([#include -#ifdef PRId32 -char *p = PRId32; -#endif -], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) - ]) + if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + cat >> "$ac_file.tmp" < exists and defines unusable PRI* macros.]) + if test -n "$POMAKEFILEDEPS"; then + cat >> "$ac_file.tmp" < -#if HAVE_STDINT_H -#include -#endif -#ifdef SIZE_MAX -Found it -#endif -], result=yes) - if test -z "$result"; then - dnl Define it ourselves. Here we assume that the type 'size_t' is not wider - dnl than the type 'unsigned long'. - dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr', - dnl which is guaranteed to work from LONG_MIN to LONG_MAX. - _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi, - [#include ], result=?) - _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo, - [#include ], result=?) - _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint, - [#include ], result=?) - if test "$fits_in_uint" = 1; then - dnl Even though SIZE_MAX fits in an unsigned int, it must be of type - dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. - AC_TRY_COMPILE([#include - extern size_t foo; - extern unsigned long foo; - ], [], fits_in_uint=0) - fi - if test -z "$result"; then - if test "$fits_in_uint" = 1; then - result="$res_hi$res_lo"U - else - result="$res_hi$res_lo"UL - fi - else - dnl Shouldn't happen, but who knows... - result='~(size_t)0' - fi - fi - AC_MSG_RESULT([$result]) - if test "$result" != yes; then - AC_DEFINE_UNQUOTED([SIZE_MAX], [$result], - [Define as the maximum value of type 'size_t', if the system doesn't define it.]) - fi + XGETTEXT_EXTRA_OPTIONS= ]) -# codeset.m4 serial AM1 (gettext-0.10.40) -dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_DEFUN([AM_LANGINFO_CODESET], +dnl Registers an option to be passed to xgettext in the po subdirectory. +AC_DEFUN([AM_XGETTEXT_OPTION], [ - AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, - [AC_TRY_LINK([#include ], - [char* cs = nl_langinfo(CODESET);], - am_cv_langinfo_codeset=yes, - am_cv_langinfo_codeset=no) - ]) - if test $am_cv_langinfo_codeset = yes; then - AC_DEFINE(HAVE_LANGINFO_CODESET, 1, - [Define if you have and nl_langinfo(CODESET).]) - fi + AC_REQUIRE([AM_XGETTEXT_OPTION_INIT]) + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1" ]) -# lcmessage.m4 serial 4 (gettext-0.14.2) -dnl Copyright (C) 1995-2002, 2004-2005 Free Software Foundation, Inc. +# progtest.m4 serial 7 (gettext-0.18.2) +dnl Copyright (C) 1996-2003, 2005, 2008-2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl -dnl This file can can be used in projects which are not available under +dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. +dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: -dnl Ulrich Drepper , 1995. +dnl Ulrich Drepper , 1996. + +AC_PREREQ([2.50]) -# Check whether LC_MESSAGES is available in . +# Search path for a program which passes the given test. -AC_DEFUN([gt_LC_MESSAGES], +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ - AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES, - [AC_TRY_LINK([#include ], [return LC_MESSAGES], - gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)]) - if test $gt_cv_val_LC_MESSAGES = yes; then - AC_DEFINE(HAVE_LC_MESSAGES, 1, - [Define if your file defines LC_MESSAGES.]) - fi +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL([ac_cv_path_$1], +[case "[$]$1" in + [[\\/]]* | ?:[[\\/]]*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in ifelse([$5], , $PATH, [$5]); do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$][$1]) +else + AC_MSG_RESULT([no]) +fi +AC_SUBST([$1])dnl ]) -# Configure paths for GTK+ -# Owen Taylor 97-11-3 +# Configure paths for SDL +# Sam Lantinga 9/21/99 +# stolen from Manish Singh +# stolen back from Frank Belew +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +# serial 1 -dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) -dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS +dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS dnl -AC_DEFUN(AM_PATH_GTK, +AC_DEFUN([AM_PATH_SDL], [dnl -dnl Get the cflags and libraries from the gtk-config script +dnl Get the cflags and libraries from the sdl-config script dnl -AC_ARG_WITH(gtk-prefix,[ --with-gtk-prefix=PFX Prefix where GTK is installed (optional)], - gtk_config_prefix="$withval", gtk_config_prefix="") -AC_ARG_WITH(gtk-exec-prefix,[ --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)], - gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="") -AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program], - , enable_gtktest=yes) - - for module in . $4 - do - case "$module" in - gthread) - gtk_config_args="$gtk_config_args gthread" - ;; - esac - done +AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], + sdl_prefix="$withval", sdl_prefix="") +AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], + sdl_exec_prefix="$withval", sdl_exec_prefix="") +AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], + , enable_sdltest=yes) - if test x$gtk_config_exec_prefix != x ; then - gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" - if test x${GTK_CONFIG+set} != xset ; then - GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config - fi + if test x$sdl_exec_prefix != x ; then + sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config + fi fi - if test x$gtk_config_prefix != x ; then - gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" - if test x${GTK_CONFIG+set} != xset ; then - GTK_CONFIG=$gtk_config_prefix/bin/gtk-config - fi + if test x$sdl_prefix != x ; then + sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_prefix/bin/sdl-config + fi fi - AC_PATH_PROG(GTK_CONFIG, gtk-config, no) - min_gtk_version=ifelse([$1], ,0.99.7,$1) - AC_MSG_CHECKING(for GTK - version >= $min_gtk_version) - no_gtk="" - if test "$GTK_CONFIG" = "no" ; then - no_gtk=yes + as_save_PATH="$PATH" + if test "x$prefix" != xNONE; then + PATH="$prefix/bin:$prefix/usr/bin:$PATH" + fi + AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH]) + PATH="$as_save_PATH" + min_sdl_version=ifelse([$1], ,0.11.0,$1) + AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) + no_sdl="" + if test "$SDL_CONFIG" = "no" ; then + no_sdl=yes else - GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` - GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` - gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ + SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags` + SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs` + + sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` - gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ + sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` - gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ + sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` - if test "x$enable_gtktest" = "xyes" ; then + if test "x$enable_sdltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" + ac_save_CXXFLAGS="$CXXFLAGS" ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $GTK_CFLAGS" - LIBS="$GTK_LIBS $LIBS" + CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" dnl -dnl Now check if the installed GTK is sufficiently new. (Also sanity -dnl checks the results of gtk-config to some extent +dnl Now check if the installed SDL is sufficiently new. (Also sanity +dnl checks the results of sdl-config to some extent dnl - rm -f conf.gtktest + rm -f conf.sdltest AC_TRY_RUN([ -#include #include #include +#include +#include "SDL.h" + +char* +my_strdup (char *str) +{ + char *new_str; + + if (str) + { + new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); + strcpy (new_str, str); + } + else + new_str = NULL; + + return new_str; +} -int -main () +int main (int argc, char *argv[]) { int major, minor, micro; char *tmp_version; - system ("touch conf.gtktest"); + /* This hangs on some systems (?) + system ("touch conf.sdltest"); + */ + { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = g_strdup("$min_gtk_version"); + tmp_version = my_strdup("$min_sdl_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { - printf("%s, bad version string\n", "$min_gtk_version"); + printf("%s, bad version string\n", "$min_sdl_version"); exit(1); } - if ((gtk_major_version != $gtk_config_major_version) || - (gtk_minor_version != $gtk_config_minor_version) || - (gtk_micro_version != $gtk_config_micro_version)) - { - printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", - $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, - gtk_major_version, gtk_minor_version, gtk_micro_version); - printf ("*** was found! If gtk-config was correct, then it is best\n"); - printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); - printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); - printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); - printf("*** required on your system.\n"); - printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); - printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); - printf("*** before re-running configure\n"); - } -#if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) - else if ((gtk_major_version != GTK_MAJOR_VERSION) || - (gtk_minor_version != GTK_MINOR_VERSION) || - (gtk_micro_version != GTK_MICRO_VERSION)) + if (($sdl_major_version > major) || + (($sdl_major_version == major) && ($sdl_minor_version > minor)) || + (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) { - printf("*** GTK+ header files (version %d.%d.%d) do not match\n", - GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); - printf("*** library (version %d.%d.%d)\n", - gtk_major_version, gtk_minor_version, gtk_micro_version); + return 0; } -#endif /* defined (GTK_MAJOR_VERSION) ... */ else { - if ((gtk_major_version > major) || - ((gtk_major_version == major) && (gtk_minor_version > minor)) || - ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) - { - return 0; - } - else - { - printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", - gtk_major_version, gtk_minor_version, gtk_micro_version); - printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", - major, minor, micro); - printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); - printf("***\n"); - printf("*** If you have already installed a sufficiently new version, this error\n"); - printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); - printf("*** being found. The easiest way to fix this is to remove the old version\n"); - printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); - printf("*** correct copy of gtk-config. (In this case, you will have to\n"); - printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); - printf("*** so that the correct libraries are found at run-time))\n"); - } + printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); + printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); + printf("*** to point to the correct copy of sdl-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; } - return 1; } -],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + +],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi - if test "x$no_gtk" = x ; then + if test "x$no_sdl" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) - if test "$GTK_CONFIG" = "no" ; then - echo "*** The gtk-config script installed by GTK could not be found" - echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" - echo "*** your path, or set the GTK_CONFIG environment variable to the" - echo "*** full path to gtk-config." + if test "$SDL_CONFIG" = "no" ; then + echo "*** The sdl-config script installed by SDL could not be found" + echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the SDL_CONFIG environment variable to the" + echo "*** full path to sdl-config." else - if test -f conf.gtktest ; then + if test -f conf.sdltest ; then : else - echo "*** Could not run GTK test program, checking why..." - CFLAGS="$CFLAGS $GTK_CFLAGS" - LIBS="$LIBS $GTK_LIBS" + echo "*** Could not run SDL test program, checking why..." + CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" AC_TRY_LINK([ -#include #include -], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], +#include "SDL.h" + +int main(int argc, char *argv[]) +{ return 0; } +#undef main +#define main K_and_R_C_main +], [ return 0; ], [ echo "*** The test program compiled, but did not run. This usually means" - echo "*** that the run-time linker is not finding GTK or finding the wrong" - echo "*** version of GTK. If it is not finding GTK, you'll need to set your" + echo "*** that the run-time linker is not finding SDL or finding the wrong" + echo "*** version of SDL. If it is not finding SDL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" - echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" - echo "***" - echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" - echo "*** came with the system with the command" - echo "***" - echo "*** rpm --erase --nodeps gtk gtk-devel" ], + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], [ echo "*** The test program failed to compile or link. See the file config.log for the" - echo "*** exact error that occured. This usually means GTK was incorrectly installed" - echo "*** or that you have moved GTK since it was installed. In the latter case, you" - echo "*** may want to edit the gtk-config script: $GTK_CONFIG" ]) + echo "*** exact error that occured. This usually means SDL was incorrectly installed" + echo "*** or that you have moved SDL since it was installed. In the latter case, you" + echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi - GTK_CFLAGS="" - GTK_LIBS="" + SDL_CFLAGS="" + SDL_LIBS="" ifelse([$3], , :, [$3]) fi - AC_SUBST(GTK_CFLAGS) - AC_SUBST(GTK_LIBS) - rm -f conf.gtktest + AC_SUBST(SDL_CFLAGS) + AC_SUBST(SDL_LIBS) + rm -f conf.sdltest ]) -# Configure paths for gdk-pixbuf -# Elliot Lee 2000-01-10 -# stolen from Raph Levien 98-11-18 -# stolen from Manish Singh 98-9-30 -# stolen back from Frank Belew -# stolen from Manish Singh -# Shamelessly stolen from Owen Taylor +# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. -dnl AM_PATH_GDK_PIXBUF([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) -dnl Test for GDK_PIXBUF, and define GDK_PIXBUF_CFLAGS and GDK_PIXBUF_LIBS -dnl -AC_DEFUN([AM_PATH_GDK_PIXBUF], -[dnl -dnl Get the cflags and libraries from the gdk-pixbuf-config script -dnl -AC_ARG_WITH(gdk-pixbuf-prefix,[ --with-gdk-pixbuf-prefix=PFX Prefix where GDK_PIXBUF is installed (optional)], - gdk_pixbuf_prefix="$withval", gdk_pixbuf_prefix="") -AC_ARG_WITH(gdk-pixbuf-exec-prefix,[ --with-gdk-pixbuf-exec-prefix=PFX Exec prefix where GDK_PIXBUF is installed (optional)], - gdk_pixbuf_exec_prefix="$withval", gdk_pixbuf_exec_prefix="") -AC_ARG_ENABLE(gdk_pixbuftest, [ --disable-gdk_pixbuftest Do not try to compile and run a test GDK_PIXBUF program], - , enable_gdk_pixbuftest=yes) - - if test x$gdk_pixbuf_exec_prefix != x ; then - gdk_pixbuf_args="$gdk_pixbuf_args --exec-prefix=$gdk_pixbuf_exec_prefix" - if test x${GDK_PIXBUF_CONFIG+set} = xset ; then - GDK_PIXBUF_CONFIG=$gdk_pixbuf_exec_prefix/gdk-pixbuf-config - fi - fi - if test x$gdk_pixbuf_prefix != x ; then - gdk_pixbuf_args="$gdk_pixbuf_args --prefix=$gdk_pixbuf_prefix" - if test x${GDK_PIXBUF_CONFIG+set} = xset ; then - GDK_PIXBUF_CONFIG=$gdk_pixbuf_prefix/bin/gdk-pixbuf-config - fi - fi +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.15' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.15], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) - AC_PATH_PROG(GDK_PIXBUF_CONFIG, gdk-pixbuf-config, no) - min_gdk_pixbuf_version=ifelse([$1], ,0.2.5,$1) - AC_MSG_CHECKING(for GDK_PIXBUF - version >= $min_gdk_pixbuf_version) - no_gdk_pixbuf="" - if test "$GDK_PIXBUF_CONFIG" = "no" ; then - no_gdk_pixbuf=yes - else - GDK_PIXBUF_CFLAGS=`$GDK_PIXBUF_CONFIG $gdk_pixbufconf_args --cflags` - GDK_PIXBUF_LIBS=`$GDK_PIXBUF_CONFIG $gdk_pixbufconf_args --libs` +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) - gdk_pixbuf_major_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_args --version | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` - gdk_pixbuf_minor_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_args --version | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` - gdk_pixbuf_micro_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_config_args --version | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` - if test "x$enable_gdk_pixbuftest" = "xyes" ; then - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS" - LIBS="$LIBS $GDK_PIXBUF_LIBS" -dnl -dnl Now check if the installed GDK_PIXBUF is sufficiently new. (Also sanity -dnl checks the results of gdk-pixbuf-config to some extent -dnl - rm -f conf.gdk_pixbuftest - AC_TRY_RUN([ -#include -#include -#include -#include +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.15])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) -char* -my_strdup (char *str) -{ - char *new_str; - - if (str) - { - new_str = malloc ((strlen (str) + 1) * sizeof(char)); - strcpy (new_str, str); - } - else - new_str = NULL; - - return new_str; -} +# AM_AUX_DIR_EXPAND -*- Autoconf -*- -int main () -{ - int major, minor, micro; - char *tmp_version; +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - system ("touch conf.gdk_pixbuftest"); + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done - /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = my_strdup("$min_gdk_pixbuf_version"); - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { - printf("%s, bad version string\n", "$min_gdk_pixbuf_version"); - exit(1); - } + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) - if (($gdk_pixbuf_major_version > major) || - (($gdk_pixbuf_major_version == major) && ($gdk_pixbuf_minor_version > minor)) || - (($gdk_pixbuf_major_version == major) && ($gdk_pixbuf_minor_version == minor) && ($gdk_pixbuf_micro_version >= micro))) - { - return 0; - } - else - { - printf("\n*** 'gdk-pixbuf-config --version' returned %d.%d.%d, but the minimum version\n", $gdk_pixbuf_major_version, $gdk_pixbuf_minor_version, $gdk_pixbuf_micro_version); - printf("*** of GDK_PIXBUF required is %d.%d.%d. If gdk-pixbuf-config is correct, then it is\n", major, minor, micro); - printf("*** best to upgrade to the required version.\n"); - printf("*** If gdk-pixbuf-config was wrong, set the environment variable GDK_PIXBUF_CONFIG\n"); - printf("*** to point to the correct copy of gdk-pixbuf-config, and remove the file\n"); - printf("*** config.cache before re-running configure\n"); - return 1; - } -} -],, no_gdk_pixbuf=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - if test "x$no_gdk_pixbuf" = x ; then - AC_MSG_RESULT(yes) - ifelse([$2], , :, [$2]) - else - AC_MSG_RESULT(no) - if test "$GDK_PIXBUF_CONFIG" = "no" ; then - echo "*** The gdk-pixbuf-config script installed by GDK_PIXBUF could not be found" - echo "*** If GDK_PIXBUF was installed in PREFIX, make sure PREFIX/bin is in" - echo "*** your path, or set the GDK_PIXBUF_CONFIG environment variable to the" - echo "*** full path to gdk-pixbuf-config." - else - if test -f conf.gdk_pixbuftest ; then - : - else - echo "*** Could not run GDK_PIXBUF test program, checking why..." - CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS" - LIBS="$LIBS $GDK_PIXBUF_LIBS" - AC_TRY_LINK([ -#include -#include -], [ return 0; ], - [ echo "*** The test program compiled, but did not run. This usually means" - echo "*** that the run-time linker is not finding GDK_PIXBUF or finding the wrong" - echo "*** version of GDK_PIXBUF. If it is not finding GDK_PIXBUF, you'll need to set your" - echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" - echo "*** to the installed location Also, make sure you have run ldconfig if that" - echo "*** is required on your system" - echo "***" - echo "*** If you have an old version installed, it is best to remove it, although" - echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], - [ echo "*** The test program failed to compile or link. See the file config.log for the" - echo "*** exact error that occured. This usually means GDK_PIXBUF was incorrectly installed" - echo "*** or that you have moved GDK_PIXBUF since it was installed. In the latter case, you" - echo "*** may want to edit the gdk-pixbuf-config script: $GDK_PIXBUF_CONFIG" ]) - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - GDK_PIXBUF_CFLAGS="" - GDK_PIXBUF_LIBS="" - ifelse([$3], , :, [$3]) - fi - AC_SUBST(GDK_PIXBUF_CFLAGS) - AC_SUBST(GDK_PIXBUF_LIBS) - rm -f conf.gdk_pixbuftest +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# -# Copyright © 2004 Scott James Remnant . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- -AC_DEFUN([PKG_PROG_PKG_CONFIG], -[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) -m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) -AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=m4_default([$1], [0.9.0]) - AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - PKG_CONFIG="" - fi - -fi[]dnl -])# PKG_PROG_PKG_CONFIG +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # -# Similar to PKG_CHECK_MODULES, make sure that the first instance of -# this or PKG_CHECK_MODULES is called, or make sure to call -# PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- -AC_DEFUN([PKG_CHECK_EXISTS], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -if test -n "$PKG_CONFIG" && \ - AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then - m4_ifval([$2], [$2], [:]) -m4_ifvaln([$3], [else - $3])dnl -fi]) +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- -m4_define([_PKG_CONFIG], -[if test -n "$PKG_CONFIG"; then - if test -n "$$1"; then - pkg_cv_[]$1="$$1" +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` else - PKG_CHECK_EXISTS([$3], - [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], - [pkg_failed=yes]) + continue fi -else - pkg_failed=untried -fi[]dnl -])# _PKG_CONFIG - -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- -AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. # -# -------------------------------------------------------------- -AC_DEFUN([PKG_CHECK_MODULES], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl -AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl - -pkg_failed=no -AC_MSG_CHECKING([for $1]) - -_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) -_PKG_CONFIG([$1][_LIBS], [libs], [$2]) - -m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS -and $1[]_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details.]) - -if test $pkg_failed = yes; then - _PKG_SHORT_ERRORS_SUPPORTED - if test $_pkg_short_errors_supported = yes; then - $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` - else - $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` - fi - # Put the nasty error message in config.log where it belongs - echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD - - ifelse([$4], , [AC_MSG_ERROR(dnl -[Package requirements ($2) were not met: - -$$1_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) -_PKG_TEXT -])], - [$4]) -elif test $pkg_failed = untried; then - ifelse([$4], , [AC_MSG_FAILURE(dnl -[The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. +# Do all the work for Automake. -*- Autoconf -*- -_PKG_TEXT +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. -To get pkg-config, see .])], - [$4]) -else - $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS - $1[]_LIBS=$pkg_cv_[]$1[]_LIBS - AC_MSG_RESULT([yes]) - ifelse([$3], , :, [$3]) -fi[]dnl -])# PKG_CHECK_MODULES +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. -# Configure paths for the Audio File Library -# Bertrand Guiheneuf 98-10-21 -# stolen from esd.m4 in esound : -# Manish Singh 98-9-30 -# stolen back from Frank Belew -# stolen from Manish Singh -# Shamelessly stolen from Owen Taylor +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) -dnl AM_PATH_AUDIOFILE([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) -dnl Test for Audio File Library, and define AUDIOFILE_CFLAGS and AUDIOFILE_LIBS. -dnl -AC_DEFUN(AM_PATH_AUDIOFILE, -[dnl -dnl Get compiler flags and libraries from the audiofile-config script. -dnl -AC_ARG_WITH(audiofile-prefix,[ --with-audiofile-prefix=PFX Prefix where Audio File Library is installed (optional)], - audiofile_prefix="$withval", audiofile_prefix="") -AC_ARG_WITH(audiofile-exec-prefix,[ --with-audiofile-exec-prefix=PFX Exec prefix where Audio File Library is installed (optional)], - audiofile_exec_prefix="$withval", audiofile_exec_prefix="") -AC_ARG_ENABLE(audiofiletest, [ --disable-audiofiletest Do not try to compile and run a test Audio File Library program], , enable_audiofiletest=yes) - - if test x$audiofile_exec_prefix != x ; then - audiofile_args="$audiofile_args --exec-prefix=$audiofile_exec_prefix" - if test x${AUDIOFILE_CONFIG+set} != xset ; then - AUDIOFILE_CONFIG=$audiofile_exec_prefix/bin/audiofile-config - fi - fi - if test x$audiofile_prefix != x ; then - audiofile_args="$audiofile_args --prefix=$audiofile_prefix" - if test x${AUDIOFILE_CONFIG+set} != xset ; then - AUDIOFILE_CONFIG=$audiofile_prefix/bin/audiofile-config - fi +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi +fi - AC_PATH_PROG(AUDIOFILE_CONFIG, audiofile-config, no) - min_audiofile_version=ifelse([$1], ,0.2.5,$1) - AC_MSG_CHECKING(for Audio File Library - version >= $min_audiofile_version) - no_audiofile="" - if test "$AUDIOFILE_CONFIG" = "no" ; then - no_audiofile=yes - else - AUDIOFILE_LIBS=`$AUDIOFILE_CONFIG $audiofileconf_args --libs` - AUDIOFILE_CFLAGS=`$AUDIOFILE_CONFIG $audiofileconf_args --cflags` - audiofile_major_version=`$AUDIOFILE_CONFIG $audiofile_args --version | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` - audiofile_minor_version=`$AUDIOFILE_CONFIG $audiofile_args --version | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` - audiofile_micro_version=`$AUDIOFILE_CONFIG $audiofile_config_args --version | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` - if test "x$enable_audiofiletest" = "xyes" ; then - AC_LANG_SAVE - AC_LANG_C - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $AUDIOFILE_CFLAGS" - LIBS="$LIBS $AUDIOFILE_LIBS" -dnl -dnl Now check if the installed Audio File Library is sufficiently new. -dnl (Also checks the sanity of the results of audiofile-config to some extent.) -dnl - rm -f conf.audiofiletest - AC_TRY_RUN([ -#include -#include -#include -#include - -char* -my_strdup (char *str) -{ - char *new_str; - - if (str) - { - new_str = malloc ((strlen (str) + 1) * sizeof(char)); - strcpy (new_str, str); - } +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' else - new_str = NULL; - - return new_str; -} + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) -int main () -{ - int major, minor, micro; - char *tmp_version; +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - system ("touch conf.audiofiletest"); +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl - /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = my_strdup("$min_audiofile_version"); - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { - printf("%s, bad version string\n", "$min_audiofile_version"); - exit(1); - } +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. - if (($audiofile_major_version > major) || - (($audiofile_major_version == major) && ($audiofile_minor_version > minor)) || - (($audiofile_major_version == major) && ($audiofile_minor_version == minor) && ($audiofile_micro_version >= micro))) - { - return 0; - } +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 else - { - printf("\n*** 'audiofile-config --version' returned %d.%d.%d, but the minimum version\n", $audiofile_major_version, $audiofile_minor_version, $audiofile_micro_version); - printf("*** of the Audio File Library required is %d.%d.%d. If audiofile-config is correct, then it is\n", major, minor, micro); - printf("*** best to upgrade to the required version.\n"); - printf("*** If audiofile-config was wrong, set the environment variable AUDIOFILE_CONFIG\n"); - printf("*** to point to the correct copy of audiofile-config, and remove the file\n"); - printf("*** config.cache before re-running configure\n"); - return 1; - } -} + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. -],, no_audiofile=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - AC_LANG_RESTORE - fi - fi - if test "x$no_audiofile" = x ; then - AC_MSG_RESULT(yes) - ifelse([$2], , :, [$2]) - else - AC_MSG_RESULT(no) - if test "$AUDIOFILE_CONFIG" = "no" ; then - cat < -#include -], [ return 0; ], - [ cat <= $min_esd_version) - no_esd="" - if test "$ESD_CONFIG" = "no" ; then - no_esd=yes - else - AC_LANG_SAVE - AC_LANG_C - ESD_CFLAGS=`$ESD_CONFIG $esdconf_args --cflags` - ESD_LIBS=`$ESD_CONFIG $esdconf_args --libs` +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - esd_major_version=`$ESD_CONFIG $esd_args --version | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` - esd_minor_version=`$ESD_CONFIG $esd_args --version | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` - esd_micro_version=`$ESD_CONFIG $esd_config_args --version | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` - if test "x$enable_esdtest" = "xyes" ; then - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $ESD_CFLAGS" - LIBS="$LIBS $ESD_LIBS" -dnl -dnl Now check if the installed ESD is sufficiently new. (Also sanity -dnl checks the results of esd-config to some extent -dnl - rm -f conf.esdtest - AC_TRY_RUN([ -#include -#include -#include -#include +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. -char* -my_strdup (char *str) -{ - char *new_str; - - if (str) - { - new_str = malloc ((strlen (str) + 1) * sizeof(char)); - strcpy (new_str, str); - } - else - new_str = NULL; - - return new_str; -} +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) -int main () -{ - int major, minor, micro; - char *tmp_version; +# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) - system ("touch conf.esdtest"); +# Check to see how 'make' treats includes. -*- Autoconf -*- - /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = my_strdup("$min_esd_version"); - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { - printf("%s, bad version string\n", "$min_esd_version"); - exit(1); - } +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. - if (($esd_major_version > major) || - (($esd_major_version == major) && ($esd_minor_version > minor)) || - (($esd_major_version == major) && ($esd_minor_version == minor) && ($esd_micro_version >= micro))) - { - return 0; - } - else - { - printf("\n*** 'esd-config --version' returned %d.%d.%d, but the minimum version\n", $esd_major_version, $esd_minor_version, $esd_micro_version); - printf("*** of ESD required is %d.%d.%d. If esd-config is correct, then it is\n", major, minor, micro); - printf("*** best to upgrade to the required version.\n"); - printf("*** If esd-config was wrong, set the environment variable ESD_CONFIG\n"); - printf("*** to point to the correct copy of esd-config, and remove the file\n"); - printf("*** config.cache before re-running configure\n"); - return 1; - } -} +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) -],, no_esd=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - AC_LANG_RESTORE - fi - fi - if test "x$no_esd" = x ; then - AC_MSG_RESULT(yes) - ifelse([$2], , :, [$2]) - else - AC_MSG_RESULT(no) - if test "$ESD_CONFIG" = "no" ; then - echo "*** The esd-config script installed by ESD could not be found" - echo "*** If ESD was installed in PREFIX, make sure PREFIX/bin is in" - echo "*** your path, or set the ESD_CONFIG environment variable to the" - echo "*** full path to esd-config." - else - if test -f conf.esdtest ; then - : - else - echo "*** Could not run ESD test program, checking why..." - CFLAGS="$CFLAGS $ESD_CFLAGS" - LIBS="$LIBS $ESD_LIBS" - AC_LANG_SAVE - AC_LANG_C - AC_TRY_LINK([ -#include -#include -], [ return 0; ], - [ echo "*** The test program compiled, but did not run. This usually means" - echo "*** that the run-time linker is not finding ESD or finding the wrong" - echo "*** version of ESD. If it is not finding ESD, you'll need to set your" - echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" - echo "*** to the installed location Also, make sure you have run ldconfig if that" - echo "*** is required on your system" - echo "***" - echo "*** If you have an old version installed, it is best to remove it, although" - echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], - [ echo "*** The test program failed to compile or link. See the file config.log for the" - echo "*** exact error that occured. This usually means ESD was incorrectly installed" - echo "*** or that you have moved ESD since it was installed. In the latter case, you" - echo "*** may want to edit the esd-config script: $ESD_CONFIG" ]) - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - AC_LANG_RESTORE - fi - fi - ESD_CFLAGS="" - ESD_LIBS="" - ifelse([$3], , :, [$3]) - fi - AC_SUBST(ESD_CFLAGS) - AC_SUBST(ESD_LIBS) - rm -f conf.esdtest +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi ]) -dnl AM_ESD_SUPPORTS_MULTIPLE_RECORD([ACTION-IF-SUPPORTS [, ACTION-IF-NOT-SUPPORTS]]) -dnl Test, whether esd supports multiple recording clients (version >=0.2.21) -dnl -AC_DEFUN([AM_ESD_SUPPORTS_MULTIPLE_RECORD], -[dnl - AC_MSG_NOTICE([whether installed esd version supports multiple recording clients]) - ac_save_ESD_CFLAGS="$ESD_CFLAGS" - ac_save_ESD_LIBS="$ESD_LIBS" - AM_PATH_ESD(0.2.21, - ifelse([$1], , [ - AM_CONDITIONAL(ESD_SUPPORTS_MULTIPLE_RECORD, true) - AC_DEFINE(ESD_SUPPORTS_MULTIPLE_RECORD, 1, - [Define if you have esound with support of multiple recording clients.])], - [$1]), - ifelse([$2], , [AM_CONDITIONAL(ESD_SUPPORTS_MULTIPLE_RECORD, false)], [$2]) - if test "x$ac_save_ESD_CFLAGS" != x ; then - ESD_CFLAGS="$ac_save_ESD_CFLAGS" - fi - if test "x$ac_save_ESD_LIBS" != x ; then - ESD_LIBS="$ac_save_ESD_LIBS" +# -*- Autoconf -*- +# Obsolete and "removed" macros, that must however still report explicit +# error messages when used, to smooth transition. +# +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +AC_DEFUN([AM_CONFIG_HEADER], +[AC_DIAGNOSE([obsolete], +['$0': this macro is obsolete. +You should use the 'AC][_CONFIG_HEADERS' macro instead.])dnl +AC_CONFIG_HEADERS($@)]) + +AC_DEFUN([AM_PROG_CC_STDC], +[AC_PROG_CC +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc +AC_DIAGNOSE([obsolete], +['$0': this macro is obsolete. +You should simply use the 'AC][_PROG_CC' macro instead. +Also, your code should no longer depend upon 'am_cv_prog_cc_stdc', +but upon 'ac_cv_prog_cc_stdc'.])]) + +AC_DEFUN([AM_C_PROTOTYPES], + [AC_FATAL([automatic de-ANSI-fication support has been removed])]) +AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break fi - ) -]) + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) -# Configure paths for SDL -# Sam Lantinga 9/21/99 -# stolen from Manish Singh -# stolen back from Frank Belew -# stolen from Manish Singh -# Shamelessly stolen from Owen Taylor +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) -dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS -dnl -AC_DEFUN([AM_PATH_SDL], -[dnl -dnl Get the cflags and libraries from the sdl-config script -dnl -AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], - sdl_prefix="$withval", sdl_prefix="") -AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], - sdl_exec_prefix="$withval", sdl_exec_prefix="") -AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], - , enable_sdltest=yes) +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. - if test x$sdl_exec_prefix != x ; then - sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" - if test x${SDL_CONFIG+set} != xset ; then - SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` fi - fi - if test x$sdl_prefix != x ; then - sdl_args="$sdl_args --prefix=$sdl_prefix" - if test x${SDL_CONFIG+set} != xset ; then - SDL_CONFIG=$sdl_prefix/bin/sdl-config + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) fi - fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) - AC_REQUIRE([AC_CANONICAL_TARGET]) - PATH="$prefix/bin:$prefix/usr/bin:$PATH" - AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH]) - min_sdl_version=ifelse([$1], ,0.11.0,$1) - AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) - no_sdl="" - if test "$SDL_CONFIG" = "no" ; then - no_sdl=yes - else - SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags` - SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs` +# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. - sdl_major_version=`$SDL_CONFIG $sdl_args --version | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` - sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` - sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ - sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` - if test "x$enable_sdltest" = "xyes" ; then - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $SDL_CFLAGS" - LIBS="$LIBS $SDL_LIBS" +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac dnl -dnl Now check if the installed SDL is sufficiently new. (Also sanity -dnl checks the results of sdl-config to some extent -dnl - rm -f conf.sdltest - AC_TRY_RUN([ -#include -#include -#include -#include "SDL.h" +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) -char* -my_strdup (char *str) -{ - char *new_str; - - if (str) - { - new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); - strcpy (new_str, str); - } - else - new_str = NULL; - - return new_str; -} +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. -int main (int argc, char *argv[]) -{ - int major, minor, micro; - char *tmp_version; +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) - /* This hangs on some systems (?) - system ("touch conf.sdltest"); - */ - { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } +# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. - /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = my_strdup("$min_sdl_version"); - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { - printf("%s, bad version string\n", "$min_sdl_version"); - exit(1); - } +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - if (($sdl_major_version > major) || - (($sdl_major_version == major) && ($sdl_minor_version > minor)) || - (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) - { - return 0; - } - else - { - printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); - printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); - printf("*** best to upgrade to the required version.\n"); - printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); - printf("*** to point to the correct copy of sdl-config, and remove the file\n"); - printf("*** config.cache before re-running configure\n"); - return 1; - } -} +# Check how to create a tarball. -*- Autoconf -*- -],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - if test "x$no_sdl" = x ; then - AC_MSG_RESULT(yes) - ifelse([$2], , :, [$2]) - else - AC_MSG_RESULT(no) - if test "$SDL_CONFIG" = "no" ; then - echo "*** The sdl-config script installed by SDL could not be found" - echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" - echo "*** your path, or set the SDL_CONFIG environment variable to the" - echo "*** full path to sdl-config." - else - if test -f conf.sdltest ; then - : - else - echo "*** Could not run SDL test program, checking why..." - CFLAGS="$CFLAGS $SDL_CFLAGS" - LIBS="$LIBS $SDL_LIBS" - AC_TRY_LINK([ -#include -#include "SDL.h" +# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. -int main(int argc, char *argv[]) -{ return 0; } -#undef main -#define main K_and_R_C_main -], [ return 0; ], - [ echo "*** The test program compiled, but did not run. This usually means" - echo "*** that the run-time linker is not finding SDL or finding the wrong" - echo "*** version of SDL. If it is not finding SDL, you'll need to set your" - echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" - echo "*** to the installed location Also, make sure you have run ldconfig if that" - echo "*** is required on your system" - echo "***" - echo "*** If you have an old version installed, it is best to remove it, although" - echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], - [ echo "*** The test program failed to compile or link. See the file config.log for the" - echo "*** exact error that occured. This usually means SDL was incorrectly installed" - echo "*** or that you have moved SDL since it was installed. In the latter case, you" - echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ]) - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - SDL_CFLAGS="" - SDL_LIBS="" - ifelse([$3], , :, [$3]) - fi - AC_SUBST(SDL_CFLAGS) - AC_SUBST(SDL_LIBS) - rm -f conf.sdltest -]) +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR diff -Nru soundtracker-0.6.8/app/audio.c soundtracker-1.0.2~pre2/app/audio.c --- soundtracker-0.6.8/app/audio.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/audio.c 2021-02-06 10:32:52.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Audio handling thread * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,48 +27,49 @@ #include #include -#include -#include #include -#include "poll.h" +#include +#include #ifdef _POSIX_PRIORITY_SCHEDULING #include #endif #include +#include -#include "i18n.h" #include "audio.h" -#include "mixer.h" -#include "driver-out.h" -#include "main.h" -#include "xm-player.h" +#include "audio-subs.h" +#include "driver.h" #include "endian-conv.h" -#include "scope-group.h" #include "errors.h" -#include "time-buffer.h" #include "event-waiter.h" #include "gui-settings.h" +#include "gui-subs.h" +#include "main.h" +#include "mixer.h" +#include "poll.h" +#include "scope-group.h" +#include "time-buffer.h" #include "tracer.h" +#include "xm-player.h" -st_mixer *mixer = NULL; -st_out_driver *playback_driver = NULL; -st_out_driver *editing_driver = NULL; -st_out_driver *current_driver = NULL; -void *playback_driver_object = NULL; -void *editing_driver_object = NULL; -void *current_driver_object = NULL; -void *file_driver_object = NULL; +st_mixer* mixer = NULL; +st_driver* playback_driver = NULL; +st_driver* editing_driver = NULL; +st_driver* current_driver = NULL; +void* playback_driver_object = NULL; +void* editing_driver_object = NULL; +void* current_driver_object = NULL; +void* file_driver_object = NULL; -int audio_ctlpipe, audio_backpipe; gint8 player_mute_channels[32]; /* Time buffers for Visual<->Audio synchronization */ -time_buffer *audio_playerpos_tb; -time_buffer *audio_clipping_indicator_tb; -time_buffer *audio_mixer_position_tb; +time_buffer* audio_playerpos_tb; +time_buffer* audio_clipping_indicator_tb; +time_buffer* audio_mixer_position_tb; static guint32 audio_visual_feedback_counter; static guint32 audio_visual_feedback_clipping; @@ -79,9 +80,9 @@ /* Event waiters */ -event_waiter *audio_songpos_ew; -event_waiter *audio_tempo_ew; -event_waiter *audio_bpm_ew; +event_waiter* audio_songpos_ew; +event_waiter* audio_tempo_ew; +event_waiter* audio_bpm_ew; static int set_songpos_wait_for = -1; static int confirm_tempo = 0, confirm_bpm = 0; @@ -89,7 +90,7 @@ /* Internal variables */ static int nice_value = 0; -static int ctlpipe, backpipe; +static int ctlpipe; static pthread_t threadid; static int playing = 0; @@ -104,148 +105,148 @@ static double pitchbend = +0.0, pitchbend_req; static double audio_next_tick_time_unbent, audio_next_tick_time_bent, audio_current_playback_time_bent; -static double audio_mixer_current_time; - -#define MIXFMT_16 1 -#define MIXFMT_STEREO 2 +static double audio_mixer_current_time, audio_prev_tick_time; +static gint audio_prev_tempo; -#define MIXFMT_CONV_TO_16 1 -#define MIXFMT_CONV_TO_8 2 -#define MIXFMT_CONV_TO_UNSIGNED 4 -#define MIXFMT_CONV_TO_STEREO 8 -#define MIXFMT_CONV_TO_MONO 16 -#define MIXFMT_CONV_BYTESWAP 32 - -typedef struct PollInput { - int fd; - GdkInputCondition condition; - GdkInputFunction function; - gpointer data; -} PollInput; +#define MIXFMT_16 1 +#define MIXFMT_STEREO 2 -static GList *inputs = NULL; +#define MIXFMT_CONV_TO_16 1 +#define MIXFMT_CONV_TO_8 2 +#define MIXFMT_CONV_TO_UNSIGNED 4 +#define MIXFMT_CONV_TO_STEREO 8 +#define MIXFMT_CONV_TO_MONO 16 +#define MIXFMT_CONV_BYTESWAP 32 /* Oscilloscope buffers */ -gint16 *scopebufs[32]; +gint16* scopebufs[32]; gint32 scopebuf_length; scopebuf_endpoint scopebuf_start, scopebuf_end; int scopebuf_freq; gboolean scopebuf_ready; -void audio_prepare_for_playing (void); +void audio_prepare_for_playing(void); static void -audio_raise_priority (void) +audio_raise_priority(void) { // The RT code tends to crash my kernel :-( #if defined(_POSIX_PRIORITY_SCHEDULING) && 0 struct sched_param sp; sp.sched_priority = 40; - if(sched_setscheduler(0, SCHED_FIFO, &sp) == 0) { - printf(">> running as realtime process now\n"); + if (sched_setscheduler(0, SCHED_FIFO, &sp) == 0) { + printf(">> running as realtime process now\n"); } else { - fprintf(stderr,"WARNING: Can't get realtime priority (try running as root)!\n"); + fprintf(stderr, "WARNING: Can't get realtime priority (try running as root)!\n"); } #else - if(nice_value == 0) { - if(!nice(-14)) { - nice_value = -14; - } + if (nice_value == 0) { + if (!nice(-14)) { + nice_value = -14; + } } #endif } static void -audio_restore_priority (void) +audio_ctlpipe_init_player(void) { - nice(- nice_value); - nice_value = 0; + g_assert(xm != NULL); + + xmplayer_init_module(); } -static void -audio_ctlpipe_init_player (void) +static gboolean +driver_open(st_driver* driver, void* obj) { - g_assert(xm != NULL); + if (driver->open(obj)) { + current_driver = driver; + current_driver_object = obj; + return TRUE; + } - xmplayer_init_module(); + current_driver = NULL; + return FALSE; } +#define DRIVER_OPEN(arg) driver_open(arg##_driver, arg##_driver_object) + static void -audio_ctlpipe_play_song (int songpos, - int patpos) +audio_ctlpipe_play_song(int songpos, + int patpos, + const gboolean looped) { - audio_backpipe_id a; - g_assert(playback_driver != NULL); g_assert(mixer != NULL); g_assert(xm != NULL); g_assert(!playing); - if(playback_driver->common.open(playback_driver_object)) { - current_driver_object = playback_driver_object; - current_driver = playback_driver; - audio_prepare_for_playing(); - - xmplayer_init_play_song(0, 0, TRUE); - - if(songpos > 0 || patpos > 0) { /* Tracing!!! */ - int i; - - tracer_setnumch(audio_numchannels); - tracer_trace(playback_driver->get_play_rate(playback_driver_object), songpos, patpos); - xmplayer_init_play_song(songpos, patpos, FALSE); - - for(i = 0; i < audio_numchannels; i++) - if(gui_settings.permanent_channels & (1 << i)) - mixer->loadchsettings(i); - } + audio_prepare_for_playing(); + playing_noloop = !looped; - a = AUDIO_BACKPIPE_PLAYING_STARTED; + if (gui_settings.permanent_channels) { /* Tracing only if really needed */ + xmplayer_init_play_song(0, 0, TRUE); + + if (songpos > 0 || patpos > 0) { /* Tracing! */ + int i; + + tracer_setnumch(audio_numchannels); + tracer_trace(playback_driver->get_play_rate(playback_driver_object), songpos, patpos); + xmplayer_init_play_song(songpos, patpos, FALSE); + + for (i = 0; i < audio_numchannels; i++) + if (gui_settings.permanent_channels & (1 << i)) + mixer->loadchsettings(i); + } } else { - a = AUDIO_BACKPIPE_DRIVER_OPEN_FAILED; + xmplayer_init_play_song(songpos, patpos, TRUE); } - write(backpipe, &a, sizeof(a)); + /* When driver is opened, xmplayer can already be called. So all initialzation + is to be performed before opening the driver to avoid possible concurrency. */ + if (DRIVER_OPEN(playback)) + audio_backpipe_write(AUDIO_BACKPIPE_PLAYING_STARTED); + else + audio_backpipe_write(AUDIO_BACKPIPE_DRIVER_OPEN_FAILED); } -static void -audio_ctlpipe_render_song_to_file (gchar *filename) +void +audio_prepare_for_rendering(audio_render_target target, + gint pattern, + gint patpos, + gint stoppos, + gint ch_start, + gint num_ch) { - audio_backpipe_id a = AUDIO_BACKPIPE_DRIVER_OPEN_FAILED; - extern st_out_driver driver_out_file; - - g_assert(playback_driver != NULL); g_assert(mixer != NULL); g_assert(xm != NULL); g_assert(!playing); -#if USE_SNDFILE || !defined (NO_AUDIOFILE) - if(file_driver_object != NULL) { - driver_out_file.common.destroy(file_driver_object); - } - file_driver_object = driver_out_file.common.new(); - *((gchar**)file_driver_object) = g_strdup(filename); - - if(driver_out_file.common.open(file_driver_object)) { - current_driver_object = file_driver_object; - current_driver = &driver_out_file; - audio_prepare_for_playing(); - playing_noloop = TRUE; - xmplayer_init_play_song(0, 0, TRUE); - a = AUDIO_BACKPIPE_PLAYING_STARTED; - audio_restore_priority(); - } -#endif + audio_prepare_for_playing(); + playing_noloop = TRUE; + if (target == AUDIO_RENDER_SONG) + xmplayer_init_play_song(0, 0, TRUE); + else + xmplayer_init_play_pattern(pattern, patpos, FALSE, stoppos, ch_start, num_ch); +} - write(backpipe, &a, sizeof(a)); +void +audio_cleanup_after_rendering(void) +{ + xmplayer_stop(); + playing = 0; } static void -audio_ctlpipe_play_pattern (int pattern, - int patpos, - int only1row) +audio_ctlpipe_play_pattern(int pattern, + int patpos, + int only1row, + gboolean looped, + int stoppos, + int ch_start, + int num_ch) { audio_backpipe_id a; @@ -254,161 +255,170 @@ g_assert(xm != NULL); g_assert(!playing); - if(only1row) { - if(editing_driver->common.open(editing_driver_object)) { - current_driver_object = editing_driver_object; - current_driver = editing_driver; - audio_prepare_for_playing(); - xmplayer_init_play_pattern(pattern, patpos, only1row); - a = AUDIO_BACKPIPE_PLAYING_NOTE_STARTED; - } else { - a = AUDIO_BACKPIPE_DRIVER_OPEN_FAILED; - } + if (only1row) { + if (DRIVER_OPEN(editing)) { + audio_prepare_for_playing(); + xmplayer_init_play_pattern(pattern, patpos, only1row, -1, -1, -1); + a = AUDIO_BACKPIPE_PLAYING_NOTE_STARTED; + } else { + a = AUDIO_BACKPIPE_DRIVER_OPEN_FAILED; + } } else { - if(playback_driver->common.open(playback_driver_object)) { - current_driver_object = playback_driver_object; - current_driver = playback_driver; - audio_prepare_for_playing(); - xmplayer_init_play_pattern(pattern, patpos, only1row); - a = AUDIO_BACKPIPE_PLAYING_PATTERN_STARTED; - } else { - a = AUDIO_BACKPIPE_DRIVER_OPEN_FAILED; - } + if (DRIVER_OPEN(playback)) { + audio_prepare_for_playing(); + playing_noloop = !looped; + xmplayer_init_play_pattern(pattern, patpos, only1row, stoppos, ch_start, num_ch); + a = AUDIO_BACKPIPE_PLAYING_PATTERN_STARTED; + } else { + a = AUDIO_BACKPIPE_DRIVER_OPEN_FAILED; + } } - write(backpipe, &a, sizeof(a)); + audio_backpipe_write(a); } static void -audio_ctlpipe_play_note (int channel, - int note, - int instrument) +audio_ctlpipe_play_note(int channel, + int note, + int instrument, + gboolean all) { audio_backpipe_id a = AUDIO_BACKPIPE_PLAYING_NOTE_STARTED; - if(!playing) { - if(editing_driver->common.open(editing_driver_object)) { - current_driver_object = editing_driver_object; - current_driver = editing_driver; - audio_prepare_for_playing(); - } else { - a = AUDIO_BACKPIPE_DRIVER_OPEN_FAILED; - } + if (!playing) { + if (DRIVER_OPEN(editing)) + audio_prepare_for_playing(); + else + a = AUDIO_BACKPIPE_DRIVER_OPEN_FAILED; } - write(backpipe, &a, sizeof(a)); + audio_backpipe_write(a); - if(!playing) - return; + if (!playing) + return; - xmplayer_play_note(channel, note, instrument); + xmplayer_play_note(channel, note, instrument, all); } static void -audio_ctlpipe_play_note_full (int channel, - int note, - STSample *sample, - guint32 offset, - guint32 count) +audio_ctlpipe_play_note_full(int channel, + int note, + STSample* sample, + guint32 offset, + guint32 count, + gboolean all) { audio_backpipe_id a = AUDIO_BACKPIPE_PLAYING_NOTE_STARTED; - if(!playing) { - if(editing_driver->common.open(editing_driver_object)) { - current_driver_object = editing_driver_object; - current_driver = editing_driver; - audio_prepare_for_playing(); - } else { - a = AUDIO_BACKPIPE_DRIVER_OPEN_FAILED; - } + if (!playing) { + if (DRIVER_OPEN(editing)) + audio_prepare_for_playing(); + else + a = AUDIO_BACKPIPE_DRIVER_OPEN_FAILED; } - write(backpipe, &a, sizeof(a)); + audio_backpipe_write(a); - if(!playing) - return; + if (!playing) + return; - xmplayer_play_note_full(channel, note, sample, offset, count); + xmplayer_play_note_full(channel, note, sample, offset, count, all); } static void -audio_ctlpipe_play_note_keyoff (int channel) +audio_ctlpipe_play_note_keyoff(int channel) { - if(!playing) - return; + if (!playing) + return; xmplayer_play_note_keyoff(channel); } static void -audio_ctlpipe_stop_playing (void) +audio_ctlpipe_stop_note(int channel) { - audio_backpipe_id a = AUDIO_BACKPIPE_PLAYING_STOPPED; + if (!playing) + return; - if(playing == 1) { - xmplayer_stop(); - current_driver->common.release(current_driver_object); - current_driver = NULL; - current_driver_object = NULL; - playing = 0; - } + xmplayer_stop_note(channel); +} - if(set_songpos_wait_for != -1) { - /* confirm pending request */ - event_waiter_confirm(audio_songpos_ew, 0.0); - set_songpos_wait_for = -1; +static void +audio_ctlpipe_stop_playing(void) +{ + if (playing == 1) { + if (current_driver) { + current_driver->release(current_driver_object); + current_driver = NULL; + } + xmplayer_stop(); + current_driver_object = NULL; + playing = 0; } - write(backpipe, &a, sizeof(a)); + if (set_songpos_wait_for != -1) { + /* confirm pending request */ + event_waiter_confirm(audio_songpos_ew, 0.0); + set_songpos_wait_for = -1; + } + audio_backpipe_write(AUDIO_BACKPIPE_PLAYING_STOPPED); audio_raise_priority(); } static void -audio_ctlpipe_set_songpos (int songpos) +audio_ctlpipe_mix(void* sndbuf, int fragsize, int mixfreq, int format) +{ + audio_mix(sndbuf, fragsize, mixfreq, format, TRUE, NULL); + if (current_driver && current_driver->commit) + current_driver->commit(current_driver_object); +} + +static void +audio_ctlpipe_set_songpos(int songpos) { g_assert(playing); xmplayer_set_songpos(songpos); - if(set_songpos_wait_for != -1) { - /* confirm previous request */ - event_waiter_confirm(audio_songpos_ew, 0.0); + if (set_songpos_wait_for != -1) { + /* confirm previous request */ + event_waiter_confirm(audio_songpos_ew, 0.0); } set_songpos_wait_for = songpos; } static void -audio_ctlpipe_set_tempo (int tempo) +audio_ctlpipe_set_tempo(int tempo) { xmplayer_set_tempo(tempo); - if(confirm_tempo != 0) { - /* confirm previous request */ - event_waiter_confirm(audio_tempo_ew, 0.0); + if (confirm_tempo != 0) { + /* confirm previous request */ + event_waiter_confirm(audio_tempo_ew, 0.0); } confirm_tempo = 1; } static void -audio_ctlpipe_set_bpm (int bpm) +audio_ctlpipe_set_bpm(int bpm) { xmplayer_set_bpm(bpm); - if(confirm_bpm != 0) { - /* confirm previous request */ - event_waiter_confirm(audio_bpm_ew, 0.0); + if (confirm_bpm != 0) { + /* confirm previous request */ + event_waiter_confirm(audio_bpm_ew, 0.0); } confirm_bpm = 1; } static void -audio_ctlpipe_set_pattern (int pattern) +audio_ctlpipe_set_pattern(int pattern) { g_assert(playing); xmplayer_set_pattern(pattern); } -static void -audio_ctlpipe_set_amplification (float af) +void +audio_set_amplification(float af) { g_assert(mixer != NULL); @@ -416,295 +426,253 @@ mixer->setampfactor(af); } +gint +audio_get_playback_rate() +{ + if (!playback_driver) + return -1; + return playback_driver->get_play_rate(playback_driver_object); +} + /* read()s on pipes are always non-blocking, so when we want to read 8 bytes, we might only get 4. this routine is a workaround. seems like i can't put a pipe into blocking mode. alternatively the other end of the pipe could send packets in one big chunk instead of using single write()s. */ -void -readpipe (int fd, void *p, int count) +void readpipe(int fd, void* p, int count) { - struct pollfd pfd = { fd, POLLIN, 0 }; + struct pollfd pfd = { fd, POLLIN, 0 }; int n; - while(count) { - n = read(fd, p, count); - count -= n; - p += n; - if(count != 0) { - pfd.revents = 0; - poll(&pfd, 1, -1); - } + while (count) { + n = read(fd, p, count); + count -= n; + p += n; + if (count != 0) { + pfd.revents = 0; + poll(&pfd, 1, -1); + } } } static void -audio_thread (void) +audio_thread(void) { - struct pollfd pfd[5] = { - { ctlpipe, POLLIN, 0 }, - }; - GList *pl; - PollInput *pi; + gboolean result = FALSE; + static gboolean skip = FALSE; audio_ctlpipe_id c; - int a[4], i, npl; - void *b; + int a[7]; + void* b; float af; - static char *msgbuf = NULL; - static int msgbuflen = 0; - audio_raise_priority(); - loop: - pfd[0].revents = 0; - - for(pl = inputs, npl = 1; pl; pl = pl->next, npl++) { - pi = pl->data; - if(pi->fd == -1) { - inputs = g_list_remove(inputs, pi); - goto loop; - } - pfd[npl].events = pfd[npl].revents = 0; - pfd[npl].fd = pi->fd; - if(pi->condition & GDK_INPUT_READ) - pfd[npl].events |= POLLIN; - if(pi->condition & GDK_INPUT_WRITE) - pfd[npl].events |= POLLOUT; - } - - if(poll(pfd, npl, -1) == -1) { - if(errno == EINTR) - goto loop; - perror("audio_thread:poll():"); - pthread_exit(NULL); - } - - if(pfd[0].revents & POLLIN) { - readpipe(ctlpipe, &c, sizeof(c)); - switch(c) { - case AUDIO_CTLPIPE_INIT_PLAYER: - audio_ctlpipe_init_player(); - break; - case AUDIO_CTLPIPE_PLAY_SONG: - readpipe(ctlpipe, a, 2 * sizeof(a[0])); - audio_ctlpipe_play_song(a[0], a[1]); - break; - case AUDIO_CTLPIPE_PLAY_PATTERN: - readpipe(ctlpipe, a, 3 * sizeof(a[0])); - audio_ctlpipe_play_pattern(a[0], a[1], a[2]); - break; - case AUDIO_CTLPIPE_PLAY_NOTE: - readpipe(ctlpipe, a, 3 * sizeof(a[0])); - audio_ctlpipe_play_note(a[0], a[1], a[2]); - break; - case AUDIO_CTLPIPE_PLAY_NOTE_FULL: - readpipe(ctlpipe, &a[0], 2 * sizeof(a[0])); - readpipe(ctlpipe, &b, 1 * sizeof(b)); - readpipe(ctlpipe, &a[2], 2 * sizeof(a[0])); - audio_ctlpipe_play_note_full(a[0], a[1], b, a[2], a[3]); - break; - case AUDIO_CTLPIPE_PLAY_NOTE_KEYOFF: - readpipe(ctlpipe, a, 1 * sizeof(a[0])); - audio_ctlpipe_play_note_keyoff(a[0]); - break; - case AUDIO_CTLPIPE_STOP_PLAYING: - audio_ctlpipe_stop_playing(); - break; - case AUDIO_CTLPIPE_RENDER_SONG_TO_FILE: - readpipe(ctlpipe, a, sizeof(a[0])); - if(msgbuflen < a[0] + 1) { - g_free(msgbuf); - msgbuf = g_new(char, a[0] + 1); - msgbuflen = a[0] + 1; - } - readpipe(ctlpipe, msgbuf, a[0] + 1); - audio_ctlpipe_render_song_to_file(msgbuf); - break; - case AUDIO_CTLPIPE_SET_SONGPOS: - read(ctlpipe, a, 1 * sizeof(a[0])); - audio_ctlpipe_set_songpos(a[0]); - break; - case AUDIO_CTLPIPE_SET_PATTERN: - read(ctlpipe, a, 1 * sizeof(a[0])); - audio_ctlpipe_set_pattern(a[0]); - break; - case AUDIO_CTLPIPE_SET_AMPLIFICATION: - read(ctlpipe, &af, sizeof(af)); - audio_ctlpipe_set_amplification(af); - break; - case AUDIO_CTLPIPE_SET_PITCHBEND: - read(ctlpipe, &af, sizeof(af)); - pitchbend_req = af; - break; - case AUDIO_CTLPIPE_SET_MIXER: - read(ctlpipe, &b, sizeof(b)); - mixer = b; - if(playing) { - mixer->reset(); - mixfmt_req = -666; - mixer->setnumch(audio_numchannels); - } - mixer->setampfactor(audio_ampfactor); - break; - case AUDIO_CTLPIPE_SET_TEMPO: - readpipe(ctlpipe, a, 1 * sizeof(a[0])); - audio_ctlpipe_set_tempo(a[0]); - break; - case AUDIO_CTLPIPE_SET_BPM: - readpipe(ctlpipe, a, 1 * sizeof(a[0])); - audio_ctlpipe_set_bpm(a[0]); - break; - default: - fprintf(stderr, "\n\n*** audio_thread: unknown ctlpipe id %d\n\n\n", c); - pthread_exit(NULL); - break; - } - } - - for(pl = inputs, i = 1; i < npl; pl = pl->next, i++) { - pi = pl->data; - if(pi->fd == -1) - continue; - if(pfd[i].revents & pfd[i].events) { - int x = 0; - if(pfd[i].revents & POLLIN) - x |= GDK_INPUT_READ; - if(pfd[i].revents & POLLOUT) - x |= GDK_INPUT_WRITE; - pi->function(pi->data, pi->fd, x); - - if(playing_noloop & player_looped) { - // "noloop" mode for file renderer -- need to flush output buffer - // and then stop playing - pi->function(pi->data, pi->fd, x); - audio_ctlpipe_stop_playing(); - } - } + while (1) { + readpipe(ctlpipe, &c, sizeof(c)); + switch (c) { + case AUDIO_CTLPIPE_INIT_PLAYER: + audio_ctlpipe_init_player(); + break; + case AUDIO_CTLPIPE_PLAY_SONG: + readpipe(ctlpipe, a, 3 * sizeof(a[0])); + skip = FALSE; + audio_ctlpipe_play_song(a[0], a[1], a[2]); + break; + case AUDIO_CTLPIPE_PLAY_PATTERN: + readpipe(ctlpipe, a, 7 * sizeof(a[0])); + skip = FALSE; + audio_ctlpipe_play_pattern(a[0], a[1], a[2], a[3], a[4], a[5], a[6]); + break; + case AUDIO_CTLPIPE_PLAY_NOTE: + readpipe(ctlpipe, a, 4 * sizeof(a[0])); + skip = FALSE; + audio_ctlpipe_play_note(a[0], a[1], a[2], a[3]); + break; + case AUDIO_CTLPIPE_PLAY_NOTE_FULL: + readpipe(ctlpipe, &a[0], 2 * sizeof(a[0])); + readpipe(ctlpipe, &b, 1 * sizeof(b)); + readpipe(ctlpipe, &a[2], 3 * sizeof(a[0])); + skip = FALSE; + audio_ctlpipe_play_note_full(a[0], a[1], b, a[2], a[3], a[4]); + break; + case AUDIO_CTLPIPE_PLAY_NOTE_KEYOFF: + readpipe(ctlpipe, a, 1 * sizeof(a[0])); + skip = FALSE; + audio_ctlpipe_play_note_keyoff(a[0]); + break; + case AUDIO_CTLPIPE_STOP_NOTE: + readpipe(ctlpipe, a, 1 * sizeof(a[0])); + skip = FALSE; + audio_ctlpipe_stop_note(a[0]); + break; + case AUDIO_CTLPIPE_STOP_PLAYING: + skip = TRUE; + audio_ctlpipe_stop_playing(); + break; + case AUDIO_CTLPIPE_SET_SONGPOS: + result = (read(ctlpipe, a, 1 * sizeof(a[0])) != 1 * sizeof(a[0])); + audio_ctlpipe_set_songpos(a[0]); + break; + case AUDIO_CTLPIPE_SET_PATTERN: + result = (read(ctlpipe, a, 1 * sizeof(a[0])) != 1 * sizeof(a[0])); + audio_ctlpipe_set_pattern(a[0]); + break; + case AUDIO_CTLPIPE_SET_AMPLIFICATION: + result = (read(ctlpipe, &af, sizeof(af)) != sizeof(af)); + audio_set_amplification(af); + break; + case AUDIO_CTLPIPE_SET_PITCHBEND: + result = (read(ctlpipe, &af, sizeof(af)) != sizeof(af)); + pitchbend_req = af; + break; + case AUDIO_CTLPIPE_SET_MIXER: + result = (read(ctlpipe, &b, sizeof(b)) != sizeof(b)); + mixer = b; + if (playing) { + mixer->reset(); + mixfmt_req = -666; + mixer->setnumch(audio_numchannels); + } + mixer->setampfactor(audio_ampfactor); + break; + case AUDIO_CTLPIPE_SET_TEMPO: + readpipe(ctlpipe, a, 1 * sizeof(a[0])); + audio_ctlpipe_set_tempo(a[0]); + break; + case AUDIO_CTLPIPE_SET_BPM: + readpipe(ctlpipe, a, 1 * sizeof(a[0])); + audio_ctlpipe_set_bpm(a[0]); + break; + case AUDIO_CTLPIPE_DATA_REQUESTED: + readpipe(ctlpipe, &b, sizeof(b)); + readpipe(ctlpipe, a, 3 * sizeof(a[0])); + if (!skip) + audio_ctlpipe_mix(b, a[0], a[1], a[2]); + break; + default: + fprintf(stderr, "\n\n*** audio_thread: unknown ctlpipe id %d\n\n\n", c); + pthread_exit(NULL); + break; + } + if (result) + fprintf(stderr, "\n\n*** audio_thread: read incomplete\n\n\n"); } - - goto loop; } gboolean -audio_init (int c, - int b) +audio_init(void) { int i; - ctlpipe = c; - backpipe = b; + if (!audio_communication_init(&ctlpipe)) + return FALSE; - for(i = 0; i < 32; i++) { - scopebufs[i] = NULL; + for (i = 0; i < 32; i++) { + scopebufs[i] = NULL; } scopebuf_ready = FALSE; scopebuf_length = -1; memset(player_mute_channels, 0, sizeof(player_mute_channels)); - if(!(audio_playerpos_tb = time_buffer_new(10.0))) - return FALSE; - if(!(audio_clipping_indicator_tb = time_buffer_new(10.0))) - return FALSE; - if(!(audio_mixer_position_tb = time_buffer_new(10.0))) - return FALSE; - if(!(audio_songpos_ew = event_waiter_new())) - return FALSE; - if(!(audio_tempo_ew = event_waiter_new())) - return FALSE; - if(!(audio_bpm_ew = event_waiter_new())) - return FALSE; + if (!(audio_playerpos_tb = time_buffer_new())) + return FALSE; + if (!(audio_clipping_indicator_tb = time_buffer_new())) + return FALSE; + if (!(audio_mixer_position_tb = time_buffer_new())) + return FALSE; + if (!(audio_songpos_ew = event_waiter_new())) + return FALSE; + if (!(audio_tempo_ew = event_waiter_new())) + return FALSE; + if (!(audio_bpm_ew = event_waiter_new())) + return FALSE; - if(0 == pthread_create(&threadid, NULL, (void*(*)(void*))audio_thread, NULL)) - return TRUE; + if (0 == pthread_create(&threadid, NULL, (void* (*)(void*))audio_thread, NULL)) + return TRUE; return FALSE; } -void -audio_set_mixer (st_mixer *newmixer) +void audio_set_mixer(st_mixer* newmixer) { - audio_ctlpipe_id i = AUDIO_CTLPIPE_SET_MIXER; - write(audio_ctlpipe, &i, sizeof(i)); - write(audio_ctlpipe, &newmixer, sizeof(newmixer)); + audio_ctlpipe_write(AUDIO_CTLPIPE_SET_MIXER, newmixer); } static void -mixer_mix_format (STMixerFormat m, int s) +mixer_mix_format(STMixerFormat m, int s) { g_assert(mixer != NULL); mixfmt_conv = 0; mixfmt = 0; - switch(m) { + switch (m) { case ST_MIXER_FORMAT_S16_BE: case ST_MIXER_FORMAT_S16_LE: case ST_MIXER_FORMAT_U16_BE: case ST_MIXER_FORMAT_U16_LE: - if(mixer->setmixformat(16)) { - mixfmt = MIXFMT_16; - } else if(mixer->setmixformat(8)) { - mixfmt_conv |= MIXFMT_CONV_TO_16; - } else { - g_error("Weird mixer. No 8 or 16 bits modes.\n"); - } - break; + if (mixer->setmixformat(16)) { + mixfmt = MIXFMT_16; + } else if (mixer->setmixformat(8)) { + mixfmt_conv |= MIXFMT_CONV_TO_16; + } else { + g_error("Weird mixer. No 8 or 16 bits modes.\n"); + } + break; case ST_MIXER_FORMAT_S8: case ST_MIXER_FORMAT_U8: - if(mixer->setmixformat(8)) { - } else if(mixer->setmixformat(16)) { - mixfmt = MIXFMT_16; - mixfmt_conv |= MIXFMT_CONV_TO_8; - } else { - g_error("Weird mixer. No 8 or 16 bits modes.\n"); - } - break; + if (mixer->setmixformat(8)) { + } else if (mixer->setmixformat(16)) { + mixfmt = MIXFMT_16; + mixfmt_conv |= MIXFMT_CONV_TO_8; + } else { + g_error("Weird mixer. No 8 or 16 bits modes.\n"); + } + break; default: - g_error("Unknown argument for STMixerFormat.\n"); - break; + g_error("Unknown argument for STMixerFormat.\n"); + break; } - if(mixfmt & MIXFMT_16) { - switch(m) { + if (mixfmt & MIXFMT_16) { + switch (m) { #ifdef WORDS_BIGENDIAN - case ST_MIXER_FORMAT_S16_LE: - case ST_MIXER_FORMAT_U16_LE: + case ST_MIXER_FORMAT_S16_LE: + case ST_MIXER_FORMAT_U16_LE: #else - case ST_MIXER_FORMAT_S16_BE: - case ST_MIXER_FORMAT_U16_BE: + case ST_MIXER_FORMAT_S16_BE: + case ST_MIXER_FORMAT_U16_BE: #endif - mixfmt_conv |= MIXFMT_CONV_BYTESWAP; - break; - default: - break; - } + mixfmt_conv |= MIXFMT_CONV_BYTESWAP; + break; + default: + break; + } } - switch(m) { + switch (m) { case ST_MIXER_FORMAT_U16_LE: case ST_MIXER_FORMAT_U16_BE: case ST_MIXER_FORMAT_U8: - mixfmt_conv |= MIXFMT_CONV_TO_UNSIGNED; - break; + mixfmt_conv |= MIXFMT_CONV_TO_UNSIGNED; + break; default: - break; + break; } mixfmt |= s ? MIXFMT_STEREO : 0; - if(!mixer->setstereo(s)) { - if(s) { - mixfmt &= ~MIXFMT_STEREO; - mixfmt_conv |= MIXFMT_CONV_TO_STEREO; - } else { - mixfmt_conv |= MIXFMT_CONV_TO_MONO; - } + if (!mixer->setstereo(s)) { + if (s) { + mixfmt &= ~MIXFMT_STEREO; + mixfmt_conv |= MIXFMT_CONV_TO_STEREO; + } else { + mixfmt_conv |= MIXFMT_CONV_TO_MONO; + } } } -void -audio_prepare_for_playing (void) +void audio_prepare_for_playing(void) { int i; @@ -718,9 +686,11 @@ playing_noloop = FALSE; audio_next_tick_time_bent = 0.0; + audio_prev_tick_time = -1.0; audio_next_tick_time_unbent = 0.0; audio_current_playback_time_bent = 0.0; audio_mixer_current_time = 0.0; + audio_prev_tempo = 0; time_buffer_clear(audio_playerpos_tb); time_buffer_clear(audio_clipping_indicator_tb); @@ -737,96 +707,101 @@ scopebuf_end.offset = 0; scopebuf_end.time = 0.0; scopebuf_ready = FALSE; - if(gui_settings.scopes_buffer_size / 32 > scopebuf_length) { - scopebuf_length = gui_settings.scopes_buffer_size / 32; - for(i = 0; i < 32; i++) { - g_free(scopebufs[i]); - scopebufs[i] = g_new(gint16, scopebuf_length); - if(!scopebufs[i]) - return; - } + if (gui_settings.scopes_buffer_size / 32 > scopebuf_length) { + scopebuf_length = gui_settings.scopes_buffer_size / 32; + for (i = 0; i < 32; i++) { + g_free(scopebufs[i]); + scopebufs[i] = g_new(gint16, scopebuf_length); + if (!scopebufs[i]) + return; + } } scopebuf_ready = TRUE; } -static void * -mixer_mix_and_handle_scopes (void *dest, - guint32 count) +static void* +mixer_mix_and_handle_scopes(void* dest, + guint32 count, + gboolean simple) { int n; - extern ScopeGroup *scopegroup; - audio_clipping_indicator *c; - audio_mixer_position *p; + extern ScopeGroup* scopegroup; + audio_clipping_indicator* c; + audio_mixer_position* p; // See comments in audio.h for Oscilloscope stuff - while(count) { - n = scopebuf_length - scopebuf_end.offset; - if(n > count) - n = count; - - if(n > audio_visual_feedback_counter) { - n = audio_visual_feedback_counter; - } - - dest = scopegroup->scopes_on && scopebuf_ready ? mixer->mix(dest, n, scopebufs, scopebuf_end.offset) : mixer->mix(dest, n, NULL, 0); - - scopebuf_end.offset += n; - scopebuf_end.time += (double)n / scopebuf_freq; - audio_mixer_current_time += (double)n / scopebuf_freq; - count -= n; - audio_visual_feedback_counter -= n; - - if(scopebuf_end.offset == scopebuf_length) { - scopebuf_end.offset = 0; - } - - if(mixer->getclipflag()) { - audio_visual_feedback_clipping = audio_visual_feedback_smear_clipping; - } - - if(audio_visual_feedback_counter == 0) { - /* Get up-to-date info from mixer about current sample positions */ - audio_visual_feedback_counter = audio_visual_feedback_update_interval; - if((p = g_new(audio_mixer_position, 1))) { - mixer->dumpstatus(p->dump); - time_buffer_add(audio_mixer_position_tb, p, audio_mixer_current_time); - } - if((c = g_new(audio_clipping_indicator, 1))) { - c->clipping = audio_visual_feedback_clipping; - if(audio_visual_feedback_clipping) { - audio_visual_feedback_clipping--; - } - time_buffer_add(audio_clipping_indicator_tb, c, audio_mixer_current_time); - } - } - - if(scopebuf_end.time - scopebuf_start.time >= (double)scopebuf_length / scopebuf_freq) { - // adjust scopebuf_start - int d = scopebuf_end.offset - scopebuf_start.offset; - if(d < 0) - d += scopebuf_length; - g_assert(d >= 0); - scopebuf_start.offset += d; - scopebuf_start.offset %= scopebuf_length; - scopebuf_start.time += (double)d / scopebuf_freq; - } + if (simple) + return mixer->mix(dest, count, NULL, 0); + + while (count) { + n = scopebuf_length - scopebuf_end.offset; + if (n > count) + n = count; + + if (n > audio_visual_feedback_counter) { + n = audio_visual_feedback_counter; + } + + dest = scopegroup->scopes_on && scopebuf_ready ? mixer->mix(dest, n, scopebufs, scopebuf_end.offset) : mixer->mix(dest, n, NULL, 0); + + scopebuf_end.offset += n; + scopebuf_end.time += (double)n / scopebuf_freq; + audio_mixer_current_time += (double)n / scopebuf_freq; + count -= n; + audio_visual_feedback_counter -= n; + + if (scopebuf_end.offset == scopebuf_length) { + scopebuf_end.offset = 0; + } + + if (mixer->getclipflag()) { + audio_visual_feedback_clipping = audio_visual_feedback_smear_clipping; + } + + if (audio_visual_feedback_counter == 0) { + /* Get up-to-date info from mixer about current sample positions */ + audio_visual_feedback_counter = audio_visual_feedback_update_interval; + if ((p = g_new(audio_mixer_position, 1))) { + mixer->dumpstatus(p->dump); + time_buffer_add(audio_mixer_position_tb, p, audio_mixer_current_time); + } + if ((c = g_new(audio_clipping_indicator, 1))) { + c->clipping = audio_visual_feedback_clipping; + if (audio_visual_feedback_clipping) { + audio_visual_feedback_clipping--; + } + time_buffer_add(audio_clipping_indicator_tb, c, audio_mixer_current_time); + } + } + + if (scopebuf_end.time - scopebuf_start.time >= (double)scopebuf_length / scopebuf_freq) { + // adjust scopebuf_start + int d = scopebuf_end.offset - scopebuf_start.offset; + if (d < 0) + d += scopebuf_length; + g_assert(d >= 0); + scopebuf_start.offset += d; + scopebuf_start.offset %= scopebuf_length; + scopebuf_start.time += (double)d / scopebuf_freq; + } } return dest; } -static void * -mixer_mix (void *dest, - guint32 count) +static void* +mixer_mix(void* dest, + guint32 count, + gboolean simple) { static int bufsize = 0; - static void *buf = NULL; + static void* buf = NULL; int b, i, c, d; - void *ende; + void* ende; - if(count == 0) - return dest; + if (count == 0) + return dest; g_assert(mixer != NULL); @@ -835,285 +810,282 @@ necessary: 16 bits / 8 bits, mono / stereo, little endian / big endian, unsigned / signed */ - if(mixfmt_conv == 0) { - return mixer_mix_and_handle_scopes(dest, count); + if (mixfmt_conv == 0) { + return mixer_mix_and_handle_scopes(dest, count, simple); } b = count; c = 8; d = 1; - if(mixfmt & MIXFMT_16) { - b *= 2; - c = 16; - } - if((mixfmt & MIXFMT_STEREO) || (mixfmt_conv & MIXFMT_CONV_TO_MONO)) { - b *= 2; - d = 2; + if (mixfmt & MIXFMT_16) { + b *= 2; + c = 16; + } + if ((mixfmt & MIXFMT_STEREO) || (mixfmt_conv & MIXFMT_CONV_TO_MONO)) { + b *= 2; + d = 2; } - if(b > bufsize) { - g_free(buf); - buf = g_new(guint8, b); - bufsize = b; + if (b > bufsize) { + g_free(buf); + buf = g_new(guint8, b); + bufsize = b; } g_assert(buf != NULL); - ende = mixer_mix_and_handle_scopes(buf, count); + ende = mixer_mix_and_handle_scopes(buf, count, simple); - if(mixfmt_conv & MIXFMT_CONV_TO_MONO) { - if(mixfmt & MIXFMT_16) { - gint16 *a = buf, *b = buf; - for(i = 0; i < count; i++, a+=2, b+=1) - *b = (a[0] + a[1]) / 2; - } else { - gint8 *a = buf, *b = buf; - for(i = 0; i < count; i++, a+=2, b+=1) - *b = (a[0] + a[1]) / 2; - } - d = 1; - } - - if(mixfmt_conv & MIXFMT_CONV_TO_8) { - gint16 *a = buf; - gint8 *b = dest; - for(i = 0; i < count * d; i++) - *b++ = *a++ >> 8; - c = 8; - ende = b; - } else if(mixfmt_conv & MIXFMT_CONV_TO_16) { - gint8 *a = buf; - gint16 *b = dest; - for(i = 0; i < count * d; i++) - *b++ = *a++ << 8; - c = 16; - ende = b; + if (mixfmt_conv & MIXFMT_CONV_TO_MONO) { + if (mixfmt & MIXFMT_16) { + gint16 *a = buf, *b = buf; + for (i = 0; i < count; i++, a += 2, b += 1) + *b = (a[0] + a[1]) / 2; + } else { + gint8 *a = buf, *b = buf; + for (i = 0; i < count; i++, a += 2, b += 1) + *b = (a[0] + a[1]) / 2; + } + d = 1; + } + + if (mixfmt_conv & MIXFMT_CONV_TO_8) { + gint16* a = buf; + gint8* b = dest; + for (i = 0; i < count * d; i++) + *b++ = *a++ >> 8; + c = 8; + ende = b; + } else if (mixfmt_conv & MIXFMT_CONV_TO_16) { + gint8* a = buf; + gint16* b = dest; + for (i = 0; i < count * d; i++) + *b++ = *a++ << 8; + c = 16; + ende = b; } else { - memcpy(dest, buf, count * d * (c / 8)); - ende = dest + (count * d * (c / 8)); + memcpy(dest, buf, count * d * (c / 8)); + ende = dest + (count * d * (c / 8)); } - - if(mixfmt_conv & MIXFMT_CONV_TO_UNSIGNED) { - if(c == 16) { - gint16 *a = dest; - guint16 *b = dest; - for(i = 0; i < count * d; i++) - *b++ = *a++ + 32768; - } else { - gint8 *a = dest; - guint8 *b = dest; - for(i = 0; i < count * d; i++) - *b++ = *a++ + 128; - } - } - - if(mixfmt_conv & MIXFMT_CONV_BYTESWAP) { - le_16_array_to_host_order(dest, count * d); - } - - if(mixfmt_conv & MIXFMT_CONV_TO_STEREO) { - g_assert(d == 1); - if(c == 16) { - gint16 *a = dest, *b = dest; - ende = b; - for(i = 0, a += count, b += 2 * count; i < count; i++, a-=1, b-=2) - b[-1] = b[-2] = a[-1]; - } else { - gint8 *a = dest, *b = dest; - ende = b; - for(i = 0, a += count, b += 2 * count; i < count; i++, a-=1, b-=2) - b[-1] = b[-2] = a[-1]; - } + + if (mixfmt_conv & MIXFMT_CONV_TO_UNSIGNED) { + if (c == 16) { + gint16* a = dest; + guint16* b = dest; + for (i = 0; i < count * d; i++) + *b++ = *a++ + 32768; + } else { + gint8* a = dest; + guint8* b = dest; + for (i = 0; i < count * d; i++) + *b++ = *a++ + 128; + } + } + + if (mixfmt_conv & MIXFMT_CONV_BYTESWAP) { + le_16_array_to_host_order(dest, count * d); + } + + if (mixfmt_conv & MIXFMT_CONV_TO_STEREO) { + g_assert(d == 1); + if (c == 16) { + gint16 *a = dest, *b = dest; + ende = b; + for (i = 0, a += count, b += 2 * count; i < count; i++, a -= 1, b -= 2) + b[-1] = b[-2] = a[-1]; + } else { + gint8 *a = dest, *b = dest; + ende = b; + for (i = 0, a += count, b += 2 * count; i < count; i++, a -= 1, b -= 2) + b[-1] = b[-2] = a[-1]; + } } return ende; } -void -driver_setnumch (int numchannels) +void driver_setnumch(int numchannels) { g_assert(numchannels >= 1 && numchannels <= 32); audio_numchannels = numchannels; mixer->setnumch(numchannels); } -void -driver_startnote (int channel, - st_mixer_sample_info *si) +void driver_startnote(int channel, + st_mixer_sample_info* si) { - if(si->length != 0) { - mixer->startnote(channel, si); + if (si->length != 0) { + mixer->startnote(channel, si); } } -void -driver_stopnote (int channel) +void driver_stopnote(int channel) { mixer->stopnote(channel); } -void -driver_setsmplpos (int channel, - guint32 offset) +void driver_setsmplpos(int channel, + guint32 offset) { mixer->setsmplpos(channel, offset); } -void -driver_setsmplend (int channel, - guint32 offset) +void driver_setsmplend(int channel, + guint32 offset) { mixer->setsmplend(channel, offset); } -void -driver_setfreq (int channel, - float frequency) +void driver_setfreq(int channel, + float frequency) { mixer->setfreq(channel, frequency * ((100.0 + pitchbend) / 100.0)); } -void -driver_setvolume (int channel, - float volume) +void driver_setvolume(int channel, + float volume) { g_assert(volume >= 0.0 && volume <= 1.0); - + mixer->setvolume(channel, volume); } -void -driver_setpanning (int channel, - float panning) +void driver_setpanning(int channel, + float panning) { g_assert(panning >= -1.0 && panning <= +1.0); mixer->setpanning(channel, panning); } -void -driver_set_ch_filter_freq (int channel, - float freq) +void driver_set_ch_filter_freq(int channel, + float freq) { - if(mixer->setchcutoff) { - mixer->setchcutoff(channel, freq); + if (mixer->setchcutoff) { + mixer->setchcutoff(channel, freq); } } -void -driver_set_ch_filter_reso (int channel, - float freq) +void driver_set_ch_filter_reso(int channel, + float freq) { - if(mixer->setchreso) { - mixer->setchreso(channel, freq); + if (mixer->setchreso) { + mixer->setchreso(channel, freq); } } -gpointer -audio_poll_add (int fd, - GdkInputCondition cond, - GdkInputFunction func, - gpointer data) -{ - PollInput *input; - - g_assert(g_list_length(inputs) < 5); - - input = g_new(PollInput, 1); - input->fd = fd; - input->condition = cond; - input->function = func; - input->data = data; - - inputs = g_list_prepend(inputs, input); - return input; -} - -void -audio_poll_remove (gpointer input) -{ - if(input) { - ((PollInput*)input)->fd = -1; - } -} - -void -audio_mix (void *dest, - guint32 count, - int mixfreq, - int mixformat) +guint32 audio_mix(void* dest, + const guint32 count, + const gint mixfreq, + const gint mixformat, + const gboolean full, + gboolean* clipping) { int nonewtick = FALSE; + gint count_cur = count; + static gboolean stop_issued = FALSE; + + if (!(playing_noloop && player_looped)) + stop_issued = FALSE; // Set mixer parameters - if(mixfmt_req != mixformat) { - mixfmt_req = mixformat; - mixer_mix_format(mixformat & 15, (mixformat & ST_MIXER_FORMAT_STEREO) != 0); + if (mixfmt_req != mixformat) { + mixfmt_req = mixformat; + mixer_mix_format(mixformat & 15, (mixformat & ST_MIXER_FORMAT_STEREO) != 0); } scopebuf_freq = mixfreq_req = mixfreq; mixer->setmixfreq(mixfreq); audio_visual_feedback_update_interval = mixfreq / audio_visual_feedback_updates_per_second; - while(count) { - // Mix either until the next time is reached when we should call the XM player, - // or until the current mixing buffer is full. - int samples_left = (audio_next_tick_time_bent - audio_current_playback_time_bent) * mixfreq; - - if(samples_left > count) { - // No new player tick this time... - samples_left = count; - nonewtick = TRUE; - } - - if(playing_noloop && player_looped) { - // "noloop" mode for file renderer -- make rest of buffer silent - memset(dest, 0, - samples_left * ((mixfmt & MIXFMT_16) ? 2 : 1) - * ((mixfmt & MIXFMT_STEREO) ? 2 : 1)); - } else { - dest = mixer_mix(dest, samples_left); - } - count -= samples_left; - audio_current_playback_time_bent += (double) samples_left / mixfreq; - - if(!nonewtick) { - double t; - audio_player_pos *p = g_new(audio_player_pos, 1); - - // Pitchbend variable must be updated directly before or after a tick, - // not in the middle of a filled mixing buffer. - if(pitchbend_req != pitchbend) { - pitchbend = pitchbend_req; - } - - // The following three lines, and the stuff in driver_setfreq() contain all - // necessary code to handle the pitchbending feature. - t = xmplayer_play(); - audio_next_tick_time_bent += (t - audio_next_tick_time_unbent) * (100.0 / (100.0 + pitchbend)); - audio_next_tick_time_unbent = t; - - // Update player position time buffer - if(p) { - p->songpos = player_songpos; - p->patpos = player_patpos; - p->tempo = player_tempo; - p->bpm = player_bpm; - time_buffer_add(audio_playerpos_tb, p, audio_current_playback_time_bent); - } - - // Confirm pending event requests - if(set_songpos_wait_for != -1 && player_songpos == set_songpos_wait_for) { - event_waiter_confirm(audio_songpos_ew, audio_current_playback_time_bent); - set_songpos_wait_for = -1; - } - if(confirm_tempo) { - event_waiter_confirm(audio_tempo_ew, audio_current_playback_time_bent); - confirm_tempo = 0; - } - if(confirm_bpm) { - event_waiter_confirm(audio_bpm_ew, audio_current_playback_time_bent); - confirm_bpm = 0; - } - } + while (count_cur) { + audio_player_pos* p; + // Mix either until the next time is reached when we should call the XM player, + // or until the current mixing buffer is full. + int samples_left = (audio_next_tick_time_bent - audio_current_playback_time_bent) * mixfreq; + + if (samples_left > count_cur) { + // No new player tick this time... + samples_left = count_cur; + nonewtick = TRUE; + } + + if (playing_noloop && player_looped) { + if (full) { + /* "noloop" playing mode, make rest of buffer silent */ + memset(dest, 0, + samples_left * ((mixfmt & MIXFMT_16) ? 2 : 1) + * ((mixfmt & MIXFMT_STEREO) ? 2 : 1)); + + if (!stop_issued) { + stop_issued = TRUE; + p = g_new(audio_player_pos, 1); + /* Issue "STOP_PLAYING" synchronous command + with time corresponding to the last non-empty sample */ + if (p) { + p->command = AUDIO_COMMAND_STOP_PLAYING; + time_buffer_add(audio_playerpos_tb, p, audio_current_playback_time_bent); + } + } + } else + return count - count_cur; + } else { + dest = mixer_mix(dest, samples_left, !full); + if (clipping) + *clipping = mixer->getclipflag(); + } + count_cur -= samples_left; + audio_current_playback_time_bent += (double)samples_left / mixfreq; + + if (!nonewtick) { + double t; + + // Pitchbend variable must be updated directly before or after a tick, + // not in the middle of a filled mixing buffer. + if (pitchbend_req != pitchbend) { + pitchbend = pitchbend_req; + } + + // The following three lines, and the stuff in driver_setfreq() contain all + // necessary code to handle the pitchbending feature. + t = xmplayer_play(); + audio_next_tick_time_bent += (t - audio_next_tick_time_unbent) * (100.0 / (100.0 + pitchbend)); + audio_next_tick_time_unbent = t; + + if (full && !(playing_noloop && player_looped)) { + p = g_new(audio_player_pos, 1); + + // Update player position time buffer + if (p) { + p->command = AUDIO_COMMAND_NONE; + p->songpos = player_songpos; + p->patpos = player_patpos; + p->patno = player_patno; + p->tempo = player_tempo; + p->prev_tempo = audio_prev_tempo; + audio_prev_tempo = player_tempo; + p->bpm = player_bpm; + p->curtick = curtick; + p->next_tick_time = audio_next_tick_time_bent; + p->prev_tick_time = audio_prev_tick_time; + audio_prev_tick_time = audio_current_playback_time_bent; + time_buffer_add(audio_playerpos_tb, p, audio_current_playback_time_bent); + } + + // Confirm pending event requests + if (set_songpos_wait_for != -1 && player_songpos == set_songpos_wait_for) { + event_waiter_confirm(audio_songpos_ew, audio_current_playback_time_bent); + set_songpos_wait_for = -1; + } + if (confirm_tempo) { + event_waiter_confirm(audio_tempo_ew, audio_current_playback_time_bent); + confirm_tempo = 0; + } + if (confirm_bpm) { + event_waiter_confirm(audio_bpm_ew, audio_current_playback_time_bent); + confirm_bpm = 0; + } + } + } } + return count; } diff -Nru soundtracker-0.6.8/app/audioconfig.c soundtracker-1.0.2~pre2/app/audioconfig.c --- soundtracker-0.6.8/app/audioconfig.c 2003-03-02 11:34:22.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/audioconfig.c 2020-09-15 17:33:50.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Audio configuration dialog * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,460 +21,361 @@ #include +#include +#include #include -#ifdef USE_GNOME -#include -#endif +#include #include -#include "i18n.h" -#include "audioconfig.h" -#include "gui-subs.h" +#include "audio-subs.h" #include "audio.h" -#include "sample-editor.h" +#include "audioconfig.h" #include "driver.h" -#include "preferences.h" -#include "sample-editor.h" +#include "gui-subs.h" #include "gui.h" #include "mixer.h" +#include "preferences.h" +#include "sample-editor.h" +#include "st-subs.h" /* List of available output and input drivers in this compilation of SoundTracker. */ -GList *drivers[2] = { NULL, NULL }; -GList *mixers = NULL; +GList* drivers[2] = { NULL, NULL }; +GList* mixers = NULL; +GtkWidget* configwindow = NULL; -static GtkWidget *configwindow = NULL; -static GtkWidget *cw_clist, *cw_hbox, *audioconfig_mixer_clist; -static int cw_currentobject = -1; -static GtkWidget *driverwidget = NULL; -static st_mixer *audioconfig_current_mixer = NULL; +static GtkWidget* audioconfig_mixer_list; +static st_mixer* audioconfig_current_mixer = NULL; static gboolean audioconfig_disable_mixer_selection = FALSE; typedef struct audio_object { - const char *title; - const char *shorttitle; + const char* title; + const char* shorttitle; + const char* group; /* Currently is used for sharing the same Jack port */ int type; - void **driver_object; - void **driver; + void** driver_object; + st_driver** driver; + GtkWidget* drivernbook; } audio_object; static audio_object audio_objects[] = { { N_("Playback Output"), - "playback", - DRIVER_OUTPUT, - &playback_driver_object, - (void**)&playback_driver - }, + "playback", + "", + DRIVER_OUTPUT, + &playback_driver_object, + &playback_driver, + NULL }, { N_("Editing Output"), - "editing", - DRIVER_OUTPUT, - &editing_driver_object, - (void**)&editing_driver - }, + "editing", + "editing", + DRIVER_OUTPUT, + &editing_driver_object, + &editing_driver, + NULL }, { N_("Sampling"), - "sampling", - DRIVER_INPUT, - &sampling_driver_object, - (void**)&sampling_driver - } + "sampling", + "", + DRIVER_INPUT, + &sampling_driver_object, + &sampling_driver, + NULL } }; -#define NUM_AUDIO_OBJECTS (sizeof(audio_objects) / sizeof(audio_objects[0])) - -static void -audioconfig_driver_load_config (audio_object *ao) -{ - st_driver *d = *ao->driver; - char buf[256]; - prefs_node *f; - - if(d->loadsettings) { - sprintf(buf, "audio-object-%s", ao->shorttitle); - f = prefs_open_read(buf); - if(f) { - d->loadsettings(*ao->driver_object, f); - prefs_close(f); - } else { - // set default values - // will use module defaults for now - } - } -} +#define NUM_AUDIO_OBJECTS ARRAY_SIZE(audio_objects) -static void -audioconfig_clist_select (GtkCList *list, - gint row, - gint column) -{ - if(cw_currentobject != -1) { - audio_object *object = &audio_objects[cw_currentobject]; - st_driver *old_driver = *object->driver; - void *old_driver_object = *object->driver_object; - st_driver *new_driver = g_list_nth_data(drivers[object->type], row); - GtkWidget *new_driverwidget; - - if(new_driver != old_driver) { - prefs_node *f; - char buf[256]; - - // stop playing and sampling here - sample_editor_stop_sampling(); - gui_play_stop(); - - // get new driver object - *object->driver_object = new_driver->new(); - *object->driver = new_driver; - - /* Load object settings, if there are saved settings. */ - f = prefs_open_read("audio-objects"); - if(f) { - if(prefs_get_string(f, object->shorttitle, buf)) { - if(!strcmp(buf, new_driver->name)) { - audioconfig_driver_load_config(object); - } - } - prefs_close(f); - } - } - - new_driverwidget = new_driver->getwidget(*object->driver_object); - - if(new_driverwidget != driverwidget) { - if(driverwidget) { - gtk_container_remove(GTK_CONTAINER(cw_hbox), driverwidget); - } - driverwidget = new_driverwidget; - gtk_widget_show(driverwidget); - /* we don't want the widget to be destroyed upon removal... */ - gtk_object_ref(GTK_OBJECT(driverwidget)); - gtk_box_pack_start(GTK_BOX(cw_hbox), driverwidget, TRUE, FALSE, 0); - } - - if(new_driver != old_driver) { - // free old driver object - old_driver->destroy(old_driver_object); - } - } else { - // The CList is being updated - } -} +static void*** audio_driver_objects[NUM_AUDIO_OBJECTS]; static void -audioconfig_object_changed (void *a, - void *b) +audioconfig_list_select(GtkTreeSelection* sel, gpointer data) { - unsigned n = GPOINTER_TO_INT(b); - GList *l; - gchar *insertbuf[2] = { NULL }; - int i, active = -1; - - g_assert(n < NUM_AUDIO_OBJECTS); - - if(n == cw_currentobject) - return; - - cw_currentobject = -1; // disable clist select callback - - gtk_clist_freeze(GTK_CLIST(cw_clist)); - gtk_clist_clear(GTK_CLIST(cw_clist)); - for(i = 0, l = drivers[audio_objects[n].type]; l; i++, l = l->next) { - insertbuf[0] = *((gchar **)l->data); - if(l->data == *audio_objects[n].driver) - active = i; - gtk_clist_append(GTK_CLIST(cw_clist), insertbuf); - } - gtk_clist_thaw(GTK_CLIST(cw_clist)); - - // Now update the GUI - cw_currentobject = n; - if(driverwidget) { - gtk_container_remove(GTK_CONTAINER(cw_hbox), driverwidget); - driverwidget = NULL; - } + gint row = gui_list_get_selection_index(sel); + gint page = GPOINTER_TO_INT(data); - if(active != -1) { - gtk_clist_select_row(GTK_CLIST(cw_clist), active, 0); + if (row != -1) { + audio_object* object = &audio_objects[page]; + st_driver* old_driver = *object->driver; + st_driver* new_driver = g_list_nth_data(drivers[object->type], row); + + if (new_driver != old_driver) { + // stop playing and sampling here + sample_editor_stop_sampling(); + gui_play_stop(); + + // get new driver object + if (old_driver->deactivate) + old_driver->deactivate(*object->driver_object); + *object->driver_object = audio_driver_objects[page][row]; + *object->driver = new_driver; + if (new_driver->activate) + new_driver->activate(*object->driver_object, object->group); + } + gtk_notebook_set_current_page(GTK_NOTEBOOK(object->drivernbook), row); } } static void -audioconfig_close_requested (void) +audioconfig_mixer_selected(GtkTreeSelection* sel) { - if(driverwidget) { - gtk_container_remove(GTK_CONTAINER(cw_hbox), driverwidget); - gtk_widget_hide(driverwidget); - driverwidget = NULL; - } - gtk_widget_destroy(configwindow); - configwindow = NULL; - cw_currentobject = -1; -} + gint row = gui_list_get_selection_index(sel); -static void -audioconfig_mixer_selected (GtkCList *list, - gint row, - gint column) -{ - st_mixer *new_mixer = g_list_nth_data(mixers, row); + if (row != -1) { + st_mixer* new_mixer = g_list_nth_data(mixers, row); - if(!audioconfig_disable_mixer_selection && new_mixer != audioconfig_current_mixer) { - audio_set_mixer(new_mixer); - audioconfig_current_mixer = new_mixer; + if (!audioconfig_disable_mixer_selection && new_mixer != audioconfig_current_mixer) { + audio_set_mixer(new_mixer); + audioconfig_current_mixer = new_mixer; + } } } static void -audioconfig_initialize_mixer_list (void) +audioconfig_initialize_mixer_list(void) { - GList *l; - gchar *insertbuf[2] = { NULL }; + GList* l; int i, active = -1; + GtkListStore* list_store = GUI_GET_LIST_STORE(audioconfig_mixer_list); + GtkTreeIter iter; + GtkTreeModel* model; audioconfig_disable_mixer_selection = TRUE; - gtk_clist_freeze(GTK_CLIST(audioconfig_mixer_clist)); - gtk_clist_clear(GTK_CLIST(audioconfig_mixer_clist)); - for(i = 0, l = mixers; l; i++, l = l->next) { - st_mixer *mixer = l->data; - if(mixer == audioconfig_current_mixer) { - active = i; - } - insertbuf[0] = (gchar*)mixer->id; - insertbuf[1] = gettext((gchar*)mixer->description); - gtk_clist_append(GTK_CLIST(audioconfig_mixer_clist), insertbuf); + model = gui_list_freeze(audioconfig_mixer_list); + gui_list_clear_with_model(model); + for (i = 0, l = mixers; l; i++, l = l->next) { + st_mixer* _mixer = l->data; + if (_mixer == audioconfig_current_mixer) { + active = i; + } + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, 0, (gchar*)_mixer->id, + 1, gettext((gchar*)_mixer->description), -1); } - gtk_clist_thaw(GTK_CLIST(audioconfig_mixer_clist)); + gui_list_thaw(audioconfig_mixer_list, model); audioconfig_disable_mixer_selection = FALSE; - gtk_clist_select_row(GTK_CLIST(audioconfig_mixer_clist), active, 0); + gui_list_select(audioconfig_mixer_list, active, FALSE, 0.0); } -void -audioconfig_dialog (void) +static void +audioconfig_notebook_add_page(GtkNotebook* nbook, guint n) { - GtkWidget *mainbox, *thing, *box1, *hbox, *frame, *box2; - OptionMenuItem menu1[NUM_AUDIO_OBJECTS]; - static gchar *listtitles[1]; - static gchar *listtitles2[2]; - int i; + GtkWidget *label, *box1, *list, *widget, *dnbook, *alignment; + GList* l; + guint i, active = -1; + const gchar* listtitles[1] = {N_("Driver Module")}; + GtkListStore* list_store; + GtkTreeIter iter; + + box1 = gtk_hbox_new(FALSE, 4); + gtk_container_set_border_width(GTK_CONTAINER(box1), 4); + + /* Driver selection list */ + list = gui_stringlist_in_scrolled_window(1, listtitles, box1, TRUE); + gtk_widget_set_size_request(list, 200, -1); + list_store = GUI_GET_LIST_STORE(list); + + /* Driver configuration widgets' notebook (with hidden tabs, as a multi-layer container) */ + audio_objects[n].drivernbook = dnbook = gtk_notebook_new(); + gtk_notebook_set_show_tabs(GTK_NOTEBOOK(dnbook), FALSE); + gtk_notebook_set_show_border(GTK_NOTEBOOK(dnbook), FALSE); + gtk_box_pack_start(GTK_BOX(box1), dnbook, TRUE, TRUE, 0); + + for (i = 0, l = drivers[audio_objects[n].type]; l; i++, l = l->next) { + st_driver* driver = l->data; + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, 0, *((gchar**)l->data), -1); + + if (driver == *audio_objects[n].driver) + active = i; + + widget = driver->getwidget(audio_driver_objects[n][i]); + alignment = gtk_alignment_new(0.5, 0.5, 0.0, 0.0); + gtk_container_add(GTK_CONTAINER(alignment), widget); + gtk_notebook_append_page(GTK_NOTEBOOK(dnbook), alignment, NULL); + gtk_widget_show_all(alignment); + } + + gui_list_handle_selection(list, G_CALLBACK(audioconfig_list_select), GINT_TO_POINTER(n)); + if (active != -1) + gui_list_select(list, active, FALSE, 0.0); + else + gui_list_select(list, 0, FALSE, 0.0); - listtitles[0] = gettext("Driver Module"); - listtitles2[0] = gettext("Mixer Module"); - listtitles2[1] = gettext("Description"); - - if(configwindow != NULL) { - gdk_window_raise(configwindow->window); - return; - } - -#ifdef USE_GNOME - configwindow = gnome_app_new("SoundTracker", _("Audio Configuration")); -#else - configwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(configwindow), _("Audio Configuration")); -#endif - gtk_signal_connect (GTK_OBJECT (configwindow), "delete_event", - GTK_SIGNAL_FUNC (audioconfig_close_requested), NULL); - - mainbox = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(mainbox), 4); -#ifdef USE_GNOME - gnome_app_set_contents(GNOME_APP(configwindow), mainbox); -#else - gtk_container_add(GTK_CONTAINER(configwindow), mainbox); -#endif - gtk_widget_show(mainbox); + label = gtk_label_new(gettext(audio_objects[n].title)); + gtk_widget_show(label); - frame = gtk_frame_new(NULL); - gtk_frame_set_label(GTK_FRAME(frame), _("Drivers")); - gtk_box_pack_start(GTK_BOX(mainbox), frame, FALSE, TRUE, 0); - gtk_widget_show(frame); - - box2 = gtk_vbox_new(FALSE, 2); - gtk_widget_show(box2); - gtk_container_add (GTK_CONTAINER(frame), box2); - gtk_container_border_width(GTK_CONTAINER(box2), 4); - - // Driver type selector - for(i = 0; i < NUM_AUDIO_OBJECTS; i++) { - menu1[i].name = gettext(audio_objects[i].title); - menu1[i].func = audioconfig_object_changed; - } - thing = gui_build_option_menu(menu1, NUM_AUDIO_OBJECTS, 0); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); - - cw_hbox = box1 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box1); - gtk_box_pack_start(GTK_BOX(box2), box1, TRUE, TRUE, 0); - - // Driver selection list - thing = gui_clist_in_scrolled_window(1, listtitles, box1); - gtk_clist_set_selection_mode(GTK_CLIST(thing), GTK_SELECTION_BROWSE); - gtk_clist_column_titles_passive(GTK_CLIST(thing)); - gtk_clist_set_column_justification(GTK_CLIST(thing), 0, GTK_JUSTIFY_LEFT); - gtk_widget_set_usize(thing, 200, 50); - gtk_signal_connect_after(GTK_OBJECT(thing), "select_row", - GTK_SIGNAL_FUNC(audioconfig_clist_select), NULL); - cw_clist = thing; + gtk_notebook_append_page(nbook, box1, label); +} - audioconfig_object_changed(NULL, (void*)0); +void audioconfig_dialog(void) +{ + GtkWidget *mainbox, *thing, *nbook, *box2, *frame; + const gchar* listtitles2[2] = {N_("Mixer Module"), N_("Description")}; + int i; + if (configwindow != NULL) { + gtk_window_present(GTK_WINDOW(configwindow)); + return; + } + + configwindow = gtk_dialog_new_with_buttons(_("Audio Configuration"), GTK_WINDOW(mainwindow), 0, + GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); + gui_dialog_connect(configwindow, NULL); + + mainbox = gtk_dialog_get_content_area(GTK_DIALOG(configwindow)); + gui_dialog_adjust(configwindow, GTK_RESPONSE_CLOSE); + + // Each driver (playback,capture,editing,etc...) occupies the notebook page + nbook = gtk_notebook_new(); + gtk_box_pack_start(GTK_BOX(mainbox), nbook, FALSE, TRUE, 0); + for (i = 0; i < NUM_AUDIO_OBJECTS; i++) { + audioconfig_notebook_add_page(GTK_NOTEBOOK(nbook), i); + } // Mixer selection frame = gtk_frame_new(NULL); gtk_frame_set_label(GTK_FRAME(frame), _("Mixers")); gtk_box_pack_start(GTK_BOX(mainbox), frame, TRUE, TRUE, 0); - gtk_widget_show(frame); box2 = gtk_vbox_new(FALSE, 2); - gtk_widget_show(box2); - gtk_container_add (GTK_CONTAINER(frame), box2); - gtk_container_border_width(GTK_CONTAINER(box2), 4); - - thing = gui_clist_in_scrolled_window(2, listtitles2, box2); - gtk_clist_set_selection_mode(GTK_CLIST(thing), GTK_SELECTION_BROWSE); - gtk_clist_column_titles_passive(GTK_CLIST(thing)); - gtk_clist_set_column_justification(GTK_CLIST(thing), 0, GTK_JUSTIFY_LEFT); - gtk_signal_connect_after(GTK_OBJECT(thing), "select_row", - GTK_SIGNAL_FUNC(audioconfig_mixer_selected), NULL); - audioconfig_mixer_clist = thing; - audioconfig_initialize_mixer_list(); - - /* The button area */ - thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - hbox = gtk_hbutton_box_new (); - gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbox), 4); - gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END); - gtk_box_pack_start (GTK_BOX (mainbox), hbox, - FALSE, FALSE, 0); - gtk_widget_show (hbox); - -#ifdef USE_GNOME - thing = gnome_stock_button (GNOME_STOCK_BUTTON_CLOSE); -#else - thing = gtk_button_new_with_label (_ ("Close")); -#endif - GTK_WIDGET_SET_FLAGS(thing, GTK_CAN_DEFAULT); - gtk_window_set_default(GTK_WINDOW(configwindow), thing); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC (audioconfig_close_requested), NULL); - gtk_box_pack_start (GTK_BOX (hbox), thing, FALSE, FALSE, 0); - gtk_widget_show (thing); + gtk_container_add(GTK_CONTAINER(frame), box2); + gtk_container_set_border_width(GTK_CONTAINER(box2), 4); + thing = gui_stringlist_in_scrolled_window(2, listtitles2, box2, TRUE); + gui_list_handle_selection(thing, G_CALLBACK(audioconfig_mixer_selected), NULL); + audioconfig_mixer_list = thing; + audioconfig_initialize_mixer_list(); - gtk_widget_show (configwindow); + gtk_widget_show_all(configwindow); } -void -audioconfig_load_config (void) +void audioconfig_load_config(void) { - char buf[256]; - prefs_node *f; - GList *l; - int i; - - f = prefs_open_read("audio-objects"); - if(f) { - for(i = 0; i < NUM_AUDIO_OBJECTS; i++) { - if(prefs_get_string(f, audio_objects[i].shorttitle, buf)) { - for(l = drivers[audio_objects[i].type]; l; l = l->next) { - if(!strcmp(*((gchar **)l->data), buf)) { - *audio_objects[i].driver = l->data; - break; - } - } - } - } - prefs_close(f); - } - - for(i = 0; i < NUM_AUDIO_OBJECTS; i++) { - st_driver *d = *audio_objects[i].driver; - - if(!d) { - // set default driver if none has been configured - if(drivers[audio_objects[i].type] != NULL) { - d = *audio_objects[i].driver = drivers[audio_objects[i].type]->data; - } - } - - if(d) { - // create driver instance - *audio_objects[i].driver_object = d->new(); - audioconfig_driver_load_config(&audio_objects[i]); - } + gchar* buf; + GList* l; + guint i, n[NUM_AUDIO_OBJECTS]; + + memset(n, 0, sizeof(n)); + for (i = 0; i < NUM_AUDIO_OBJECTS; i++) { + guint j; + + if ((buf = prefs_get_string("audio-objects", audio_objects[i].shorttitle, NULL))) { + for (j = 0, l = drivers[audio_objects[i].type]; l; l = l->next, j++) { + if (!strcmp(*((gchar**)l->data), buf)) { + *audio_objects[i].driver = l->data; + n[i] = j; + break; + } + } + g_free(buf); + } + } + + for (i = 0; i < NUM_AUDIO_OBJECTS; i++) { + guint j; + gchar* buf; + st_driver* d = *audio_objects[i].driver; + + buf = g_strdup_printf("audio-object-%s", audio_objects[i].shorttitle); + audio_driver_objects[i] = g_new(void**, + g_list_length(drivers[audio_objects[i].type])); + for (j = 0, l = drivers[audio_objects[i].type]; l; j++, l = l->next) { + st_driver* driver = l->data; + // create driver instance + void* a_d_o = audio_driver_objects[i][j] = + driver->new(audio_objects[i].type == DRIVER_OUTPUT ? + audio_request_data : sample_editor_sampled); + + if (driver->loadsettings) + driver->loadsettings(a_d_o, buf); + } + g_free(buf); + + if (!d) { + // set the first driver as current if none has been configured + if (drivers[audio_objects[i].type] != NULL) { + d = *audio_objects[i].driver = drivers[audio_objects[i].type]->data; + } + } + + // set the current driver's object and activate it if required + if (d) { + *audio_objects[i].driver_object = audio_driver_objects[i][n[i]]; + if (d->activate) + d->activate(audio_driver_objects[i][n[i]], audio_objects[i].group); + } } } -void -audioconfig_load_mixer_config (void) +void audioconfig_load_mixer_config(void) { - char buf[256]; - prefs_node *f; - GList *l; - - f = prefs_open_read("mixer"); - if(f) { - if(prefs_get_string(f, "mixer", buf)) { - for(l = mixers; l; l = l->next) { - st_mixer *m = l->data; - if(!strcmp(m->id, buf)) { - mixer = m; - audioconfig_current_mixer = m; - } - } - } - prefs_close(f); - } - - if(!audioconfig_current_mixer) { - mixer = mixers->data; - audioconfig_current_mixer = mixers->data; + gchar* buf; + GList* l; + + if ((buf = prefs_get_string("mixer", "mixer", NULL))) { + for (l = mixers; l; l = l->next) { + st_mixer* m = l->data; + if (!strcmp(m->id, buf)) { + mixer = m; + audioconfig_current_mixer = m; + } + } + g_free(buf); + } + + if (!audioconfig_current_mixer) { + mixer = mixers->data; + audioconfig_current_mixer = mixers->data; } } -void -audioconfig_save_config (void) +void audioconfig_save_config(void) { - char buf[256]; - prefs_node *f; - int i; - - f = prefs_open_write("audio-objects"); - if(!f) - return; + guint i, j; + GList* l; // Write the driver module names - for(i = 0; i < NUM_AUDIO_OBJECTS; i++) { - prefs_put_string(f, audio_objects[i].shorttitle, - ((st_driver*)*(audio_objects[i].driver))->name); + for (i = 0; i < NUM_AUDIO_OBJECTS; i++) { + prefs_put_string("audio-objects", audio_objects[i].shorttitle, + (*audio_objects[i].driver)->name); } - prefs_close(f); + /* Write the driver module's configurations */ + for (i = 0; i < NUM_AUDIO_OBJECTS; i++) { + gchar* buf = g_strdup_printf("audio-object-%s", audio_objects[i].shorttitle); - /* Write the driver module's configurations in extra files */ - for(i = 0; i < NUM_AUDIO_OBJECTS; i++) { - gboolean (*savesettings)(void *, prefs_node *) = ((st_driver*)*(audio_objects[i].driver))->savesettings; + for (j = 0, l = drivers[audio_objects[i].type]; l; l = l->next, j++) { + st_driver* driver = l->data; + gboolean (*savesettings)(void*, const gchar*) = driver->savesettings; - if(savesettings) { - sprintf(buf, "audio-object-%s", audio_objects[i].shorttitle); - f = prefs_open_write(buf); - if(f) { - savesettings(*audio_objects[i].driver_object, f); - prefs_close(f); - } - } + if (savesettings) + savesettings(audio_driver_objects[i][j], buf); + } + g_free(buf); } - f = prefs_open_write("mixer"); - if(f) { - prefs_put_string(f, "mixer", audioconfig_current_mixer->id); - prefs_close(f); - } + prefs_put_string("mixer", "mixer", audioconfig_current_mixer->id); +} - return; +void audioconfig_shutdown(void) +{ + GList* l; + guint i; + + if (playback_driver->deactivate) + playback_driver->deactivate(playback_driver_object); + if (editing_driver->deactivate) + editing_driver->deactivate(editing_driver_object); + if (sampling_driver->deactivate) + sampling_driver->deactivate(sampling_driver_object); + + for (i = 0; i < NUM_AUDIO_OBJECTS; i++) { + guint j; + + for (j = 0, l = drivers[audio_objects[i].type]; l; j++, l = l->next) { + st_driver* driver = l->data; + driver->destroy(audio_driver_objects[i][j]); + } + } } diff -Nru soundtracker-0.6.8/app/audioconfig.h soundtracker-1.0.2~pre2/app/audioconfig.h --- soundtracker-0.6.8/app/audioconfig.h 2001-01-03 13:24:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/audioconfig.h 2019-04-15 17:45:04.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Audio configuration dialog (header) * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,18 +23,21 @@ #define _ST_AUDIOCONFIG_H #include +#include -void audioconfig_dialog (void); +void audioconfig_dialog(void); -void audioconfig_load_config (void); -void audioconfig_load_mixer_config (void); -void audioconfig_save_config (void); +void audioconfig_load_config(void); +void audioconfig_load_mixer_config(void); +void audioconfig_save_config(void); +void audioconfig_shutdown(void); +extern GtkWidget* configwindow; // Currently initialized in main.c -extern GList *drivers[2]; -extern GList *mixers; +extern GList* drivers[2]; +extern GList* mixers; #define DRIVER_OUTPUT 0 -#define DRIVER_INPUT 1 +#define DRIVER_INPUT 1 #endif /* _ST_AUDIOCONFIG_H */ diff -Nru soundtracker-0.6.8/app/audio.h soundtracker-1.0.2~pre2/app/audio.h --- soundtracker-0.6.8/app/audio.h 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/audio.h 2020-11-27 17:10:26.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Audio handling thread (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,46 +22,23 @@ #ifndef _ST_AUDIO_H #define _ST_AUDIO_H +#include + #include #include +#include "driver.h" +#include "event-waiter.h" #include "mixer.h" -#include "driver-out.h" #include "time-buffer.h" -#include "event-waiter.h" - -/* === Thread communication stuff */ -typedef enum audio_ctlpipe_id { - AUDIO_CTLPIPE_INIT_PLAYER=2000, /* void */ - AUDIO_CTLPIPE_RENDER_SONG_TO_FILE, /* int len, string (len+1 bytes) */ - AUDIO_CTLPIPE_PLAY_SONG, /* int songpos, int patpos */ - AUDIO_CTLPIPE_PLAY_PATTERN, /* int pattern, int patpos, int only_one_row */ - AUDIO_CTLPIPE_PLAY_NOTE, /* int channel, int note, int instrument */ - AUDIO_CTLPIPE_PLAY_NOTE_FULL, /* int channel, int note, STSample *sample, int offset, int count */ - AUDIO_CTLPIPE_PLAY_NOTE_KEYOFF, /* int channel */ - AUDIO_CTLPIPE_STOP_PLAYING, /* void */ - AUDIO_CTLPIPE_SET_SONGPOS, /* int songpos */ - AUDIO_CTLPIPE_SET_PATTERN, /* int pattern */ - AUDIO_CTLPIPE_SET_AMPLIFICATION, /* float */ - AUDIO_CTLPIPE_SET_PITCHBEND, /* float */ - AUDIO_CTLPIPE_SET_MIXER, /* st_mixer* */ - AUDIO_CTLPIPE_SET_TEMPO, /* int */ - AUDIO_CTLPIPE_SET_BPM, /* int */ -} audio_ctlpipe_id; - -typedef enum audio_backpipe_id { - AUDIO_BACKPIPE_DRIVER_OPEN_FAILED=1000, - AUDIO_BACKPIPE_PLAYING_STARTED, - AUDIO_BACKPIPE_PLAYING_PATTERN_STARTED, - AUDIO_BACKPIPE_PLAYING_NOTE_STARTED, - AUDIO_BACKPIPE_PLAYING_STOPPED, - AUDIO_BACKPIPE_ERROR_MESSAGE, /* int len, string (len+1 bytes) */ - AUDIO_BACKPIPE_WARNING_MESSAGE, /* int len, string (len+1 bytes) */ -} audio_backpipe_id; +/* === Synchronous commmunications via time buffers */ -extern int audio_ctlpipe, audio_backpipe; +typedef enum { + AUDIO_COMMAND_NONE = 0, + AUDIO_COMMAND_STOP_PLAYING +} audio_command_id; /* === Oscilloscope stuff @@ -75,7 +52,7 @@ modulo scopebuf_length, until you reach scopebuf_end.offset. */ extern gboolean scopebuf_ready; -extern gint16 *scopebufs[32]; +extern gint16* scopebufs[32]; extern gint32 scopebuf_length; typedef struct scopebuf_endpoint { guint32 offset; // always < scopebuf_length @@ -88,13 +65,17 @@ typedef struct audio_player_pos { double time; + int command; + double next_tick_time, prev_tick_time; int songpos; int patpos; - int tempo; + int patno; + int tempo, prev_tempo; int bpm; + gint8 curtick; } audio_player_pos; -extern time_buffer *audio_playerpos_tb; +extern time_buffer* audio_playerpos_tb; /* === Clipping indicator time buffer */ @@ -103,7 +84,7 @@ gboolean clipping; } audio_clipping_indicator; -extern time_buffer *audio_clipping_indicator_tb; +extern time_buffer* audio_clipping_indicator_tb; /* === Mixer (sample) position time buffer */ @@ -112,47 +93,71 @@ st_mixer_channel_status dump[32]; } audio_mixer_position; -extern time_buffer *audio_mixer_position_tb; +extern time_buffer* audio_mixer_position_tb; /* === Other stuff */ -extern st_mixer *mixer; -extern st_out_driver *playback_driver, *editing_driver, *current_driver; +typedef enum { + AUDIO_RENDER_SONG, + AUDIO_RENDER_PATTERN, + AUDIO_RENDER_TRACK, + AUDIO_RENDER_BLOCK +} audio_render_target; + +extern st_mixer* mixer; +extern st_driver *playback_driver, *editing_driver, *current_driver; extern void *playback_driver_object, *editing_driver_object, *current_driver_object; extern gint8 player_mute_channels[32]; -extern event_waiter *audio_songpos_ew; -extern event_waiter *audio_tempo_ew; -extern event_waiter *audio_bpm_ew; - -extern st_mixer *mixer; - -gboolean audio_init (int ctlpipe, int backpipe); - -void audio_set_mixer (st_mixer *mixer); +extern event_waiter* audio_songpos_ew; +extern event_waiter* audio_tempo_ew; +extern event_waiter* audio_bpm_ew; + +extern st_mixer* mixer; + +gboolean audio_init(void); +void audio_set_mixer(st_mixer* mixer); +/* Use the following two functions directly only for asynchronous rendering from + the main thread. For sound playing communicate with the audio thread through + the control pipe. */ +guint32 audio_mix(void* dest, + const guint32 count, + const gint mixfreq, + const gint mixformat, + const gboolean full, + gboolean* clipping); +void audio_set_amplification(float af); +void audio_prepare_for_rendering(audio_render_target target, + gint pattern, + gint patpos, + gint stoppos, + gint ch_start, + gint num_ch); +void audio_cleanup_after_rendering(void); +gint audio_get_playback_rate(); -void readpipe (int fd, void *p, int count); +void readpipe(int fd, void* p, int count); /* --- Functions called by the player */ -void driver_setnumch (int numchannels); -void driver_startnote (int channel, - st_mixer_sample_info *si); -void driver_stopnote (int channel); -void driver_setsmplpos (int channel, - guint32 offset); -void driver_setsmplend (int channel, - guint32 offset); -void driver_setfreq (int channel, - float frequency); -void driver_setvolume (int channel, - float volume); -void driver_setpanning (int channel, - float panning); -void driver_set_ch_filter_freq (int channel, - float freq); -void driver_set_ch_filter_reso (int channel, - float freq); +void driver_setnumch(int numchannels); +void driver_startnote(int channel, + st_mixer_sample_info* si); +void driver_stopnote(int channel); +void driver_setsmplpos(int channel, + guint32 offset); +void driver_setsmplend(int channel, + guint32 offset); +void driver_setfreq(int channel, + float frequency); +void driver_setvolume(int channel, + float volume); +void driver_setpanning(int channel, + float panning); +void driver_set_ch_filter_freq(int channel, + float freq); +void driver_set_ch_filter_reso(int channel, + float freq); #endif /* _ST_AUDIO_H */ diff -Nru soundtracker-0.6.8/app/audio-subs.c soundtracker-1.0.2~pre2/app/audio-subs.c --- soundtracker-0.6.8/app/audio-subs.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/audio-subs.c 2021-02-23 17:47:24.000000000 +0000 @@ -0,0 +1,337 @@ + +/* + * The Real SoundTracker - Audio thread communication stuff + * + * Copyright (C) 2020 Yury Aliaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include + +#include +#include + +#include "audio-subs.h" +#include "errors.h" + + +struct _ip { + audio_ctlpipe_id cmd; +} __attribute__((packed)); /* To prevent addition of spacers between fields */ + +struct _ps { + audio_ctlpipe_id cmd; + gint songpos, patpos, looped; +} __attribute__((packed)); + +struct _pp { + audio_ctlpipe_id cmd; + gint pattern, patpos, only1row, looped, stoppos, ch_start, num_ch; +} __attribute__((packed)); + +struct _pn { + audio_ctlpipe_id cmd; + gint channel, note, instr, all; +} __attribute__((packed)); + +struct _pnf { + audio_ctlpipe_id cmd; + gint channel, note; + gpointer sample; + gint offset, count, all_channels; +} __attribute__((packed)); + +struct _pko { + audio_ctlpipe_id cmd; + gint channel; +} __attribute__((packed)); + +struct _sn { + audio_ctlpipe_id cmd; + gint channel; +} __attribute__((packed)); + +struct _sp { + audio_ctlpipe_id cmd; +} __attribute__((packed)); + +struct _ss { + audio_ctlpipe_id cmd; + gint songpos; +} __attribute__((packed)); + +struct _spt { + audio_ctlpipe_id cmd; + gint pattern; +} __attribute__((packed)); + +struct _sa { + audio_ctlpipe_id cmd; + gfloat amplification; +} __attribute__((packed)); + +struct _spb { + audio_ctlpipe_id cmd; + gfloat pitchbend; +} __attribute__((packed)); + +struct _sm { + audio_ctlpipe_id cmd; + gpointer mixer; +} __attribute__((packed)); + +struct _st { + audio_ctlpipe_id cmd; + gint tempo; +} __attribute__((packed)); + +struct _sbpm { + audio_ctlpipe_id cmd; + gint bpm; +} __attribute__((packed)); + +struct _dr { + audio_ctlpipe_id cmd; + void* buf; + gint fragsize, mixfreq, mixformat; +} __attribute__((packed)); + +union audio_ctlpipe_args { + struct _ip ip; + struct _ps ps; + struct _pp pp; + struct _pn pn; + struct _pnf pnf; + struct _pko pko; + struct _sn sn; + struct _sp sp; + struct _ss ss; + struct _spt spt; + struct _sa sa; + struct _spb spb; + struct _sm sm; + struct _st st; + struct _sbpm sbpm; + struct _dr dr; +}; + +union audio_backpipe_args { + struct _cmdtext { + audio_backpipe_id cmd; + gint length; + gchar text[1]; + } __attribute__((packed)) cmdtext; + + struct _cmderrno { + audio_backpipe_id cmd; + gint errno; + gint length; + gchar text[1]; + } __attribute__((packed)) cmderrno; +}; + +static int ctlpipe[2], backpipe[2]; +static gboolean initialized = FALSE; + +void audio_ctlpipe_write(audio_ctlpipe_id cmd, ...) +{ + union audio_ctlpipe_args args; + va_list arg_list; + size_t arg_size; + + va_start(arg_list, cmd); + switch (cmd) { + case AUDIO_CTLPIPE_INIT_PLAYER: + args.ip.cmd = AUDIO_CTLPIPE_INIT_PLAYER; + arg_size = sizeof(args.ip); + break; + case AUDIO_CTLPIPE_PLAY_SONG: + args.ps.cmd = AUDIO_CTLPIPE_PLAY_SONG; + args.ps.songpos = va_arg(arg_list, gint); + args.ps.patpos = va_arg(arg_list, gint); + args.ps.looped = va_arg(arg_list, gint); + arg_size = sizeof(args.ps); + break; + case AUDIO_CTLPIPE_PLAY_PATTERN: + args.pp.cmd = AUDIO_CTLPIPE_PLAY_PATTERN; + args.pp.pattern = va_arg(arg_list, gint); + args.pp.patpos = va_arg(arg_list, gint); + args.pp.only1row = va_arg(arg_list, gint); + args.pp.looped = va_arg(arg_list, gint); + args.pp.stoppos = va_arg(arg_list, gint); + args.pp.ch_start = va_arg(arg_list, gint); + args.pp.num_ch = va_arg(arg_list, gint); + arg_size = sizeof(args.pp); + break; + case AUDIO_CTLPIPE_PLAY_NOTE: + args.pn.cmd = AUDIO_CTLPIPE_PLAY_NOTE; + args.pn.channel = va_arg(arg_list, gint); + args.pn.note = va_arg(arg_list, gint); + args.pn.instr = va_arg(arg_list, gint); + args.pn.all = va_arg(arg_list, gint); + arg_size = sizeof(args.pn); + break; + case AUDIO_CTLPIPE_PLAY_NOTE_FULL: + args.pnf.cmd = AUDIO_CTLPIPE_PLAY_NOTE_FULL; + args.pnf.channel = va_arg(arg_list, gint); + args.pnf.note = va_arg(arg_list, gint); + args.pnf.sample = va_arg(arg_list, gpointer); + args.pnf.offset = va_arg(arg_list, gint); + args.pnf.count = va_arg(arg_list, gint); + args.pnf.all_channels = va_arg(arg_list, gint); + arg_size = sizeof(args.pnf); + break; + case AUDIO_CTLPIPE_PLAY_NOTE_KEYOFF: + args.pko.cmd = AUDIO_CTLPIPE_PLAY_NOTE_KEYOFF; + args.pko.channel = va_arg(arg_list, gint); + arg_size = sizeof(args.pko); + break; + case AUDIO_CTLPIPE_STOP_NOTE: + args.sn.cmd = AUDIO_CTLPIPE_STOP_NOTE; + args.sn.channel = va_arg(arg_list, gint); + arg_size = sizeof(args.sn); + break; + case AUDIO_CTLPIPE_STOP_PLAYING: + args.sp.cmd = AUDIO_CTLPIPE_STOP_PLAYING; + arg_size = sizeof(args.sp); + break; + case AUDIO_CTLPIPE_SET_SONGPOS: + args.ss.cmd = AUDIO_CTLPIPE_SET_SONGPOS; + args.ss.songpos = va_arg(arg_list, gint); + arg_size = sizeof(args.ss); + break; + case AUDIO_CTLPIPE_SET_PATTERN: + args.spt.cmd = AUDIO_CTLPIPE_SET_PATTERN; + args.spt.pattern = va_arg(arg_list, gint); + arg_size = sizeof(args.spt); + break; + case AUDIO_CTLPIPE_SET_AMPLIFICATION: + args.sa.cmd = AUDIO_CTLPIPE_SET_AMPLIFICATION; + args.sa.amplification = va_arg(arg_list, double); + arg_size = sizeof(args.sa); + break; + case AUDIO_CTLPIPE_SET_PITCHBEND: + args.spb.cmd = AUDIO_CTLPIPE_SET_PITCHBEND; + args.spb.pitchbend = va_arg(arg_list, double); + arg_size = sizeof(args.spb); + break; + case AUDIO_CTLPIPE_SET_MIXER: + args.sm.cmd = AUDIO_CTLPIPE_SET_MIXER; + args.sm.mixer = va_arg(arg_list, gpointer); + arg_size = sizeof(args.sm); + break; + case AUDIO_CTLPIPE_SET_TEMPO: + args.st.cmd = AUDIO_CTLPIPE_SET_TEMPO; + args.st.tempo = va_arg(arg_list, gint); + arg_size = sizeof(args.st); + break; + case AUDIO_CTLPIPE_SET_BPM: + args.sbpm.cmd = AUDIO_CTLPIPE_SET_BPM; + args.sbpm.bpm = va_arg(arg_list, gint); + arg_size = sizeof(args.sbpm); + break; + case AUDIO_CTLPIPE_DATA_REQUESTED: + args.dr.cmd = AUDIO_CTLPIPE_DATA_REQUESTED; + args.dr.buf = va_arg(arg_list, gpointer); + args.dr.fragsize = va_arg(arg_list, gint); + args.dr.mixfreq = va_arg(arg_list, gint); + args.dr.mixformat = va_arg(arg_list, gint); + arg_size = sizeof(args.dr); + break; + default: + g_assert_not_reached(); + } + va_end(arg_list); + + if (write(ctlpipe[1], &args, arg_size) != arg_size) + /* Since this can be called from various threads */ + error_error(_("Connection with audio thread failed!")); +} + +void audio_backpipe_write(audio_backpipe_id cmd, ...) +{ + va_list arg_list; + size_t arg_size, l; + gchar* line; + void* arg_pointer; + union audio_backpipe_args* args; + + va_start(arg_list, cmd); + switch (cmd) { + case AUDIO_BACKPIPE_DRIVER_OPEN_FAILED ... AUDIO_BACKPIPE_PLAYING_STOPPED: + arg_pointer = &cmd; + arg_size = sizeof(cmd); + break; + case AUDIO_BACKPIPE_ERROR_MESSAGE ... AUDIO_BACKPIPE_WARNING_MESSAGE: + line = va_arg(arg_list, gchar*); + l = strlen(line); /* Whithout trailing zero */ + /* args->cmdtext.text already has 1 byte size, so we add only string length + without trailing zero */ + arg_size = l + sizeof(args->cmdtext); + args = arg_pointer = alloca(arg_size); + args->cmdtext.cmd = cmd; + args->cmdtext.length = l; + strncpy(args->cmdtext.text, line, l + 1); + break; + case AUDIO_BACKPIPE_ERRNO_MESSAGE: + line = va_arg(arg_list, gchar*); + l = strlen(line); + arg_size = l + sizeof(args->cmderrno); + args = arg_pointer = alloca(arg_size); + args->cmderrno.cmd = cmd; + args->cmderrno.errno = va_arg(arg_list, gint); + args->cmderrno.length = l; + strncpy(args->cmderrno.text, line, l + 1); + break; + default: + g_assert_not_reached(); + } + va_end(arg_list); + + if (write(backpipe[1], arg_pointer, arg_size) != arg_size) + perror("\n\n*** audio_thread: write incomplete"); +} + +gboolean audio_communication_init(int* c) +{ + if (pipe(ctlpipe) || pipe(backpipe)) { + fprintf(stderr, "Cränk. Can't pipe().\n"); + return FALSE; + } + + *c = ctlpipe[0]; + initialized = TRUE; + return TRUE; +} + +int audio_get_backpipe(void) +{ + g_assert(initialized); + return backpipe[0]; +} + +/* It returns boolean to have the same format as sample_editor_sampled() */ +gboolean audio_request_data(void *buf, + guint32 count, + gint mixfreq, + gint mixformat) +{ + audio_ctlpipe_write(AUDIO_CTLPIPE_DATA_REQUESTED, + buf, (gint)count, mixfreq, mixformat); + + return TRUE; +} diff -Nru soundtracker-0.6.8/app/audio-subs.h soundtracker-1.0.2~pre2/app/audio-subs.h --- soundtracker-0.6.8/app/audio-subs.h 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/audio-subs.h 2020-09-14 20:31:01.000000000 +0000 @@ -0,0 +1,67 @@ + +/* + * The Real SoundTracker - Audio thread communication stuff (header) + * + * Copyright (C) 2020 Yury Aliaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef _ST_AUDIO_SUBS_H +#define _ST_AUDIO_SUBS_H + +#include + +typedef enum audio_ctlpipe_id { + AUDIO_CTLPIPE_INIT_PLAYER = 2000, /* void */ + AUDIO_CTLPIPE_PLAY_SONG, /* int songpos, int patpos, int looped */ + AUDIO_CTLPIPE_PLAY_PATTERN, /* int pattern, int patpos, int only_one_row, int looped, int stoppos, + int from_channel, int num_channels */ + AUDIO_CTLPIPE_PLAY_NOTE, /* int channel, int note, int instrument, int all */ + AUDIO_CTLPIPE_PLAY_NOTE_FULL, /* int channel, int note, STSample *sample, int offset, int count, int use_all_channels */ + AUDIO_CTLPIPE_PLAY_NOTE_KEYOFF, /* int channel */ + AUDIO_CTLPIPE_STOP_NOTE, /* int channel */ + AUDIO_CTLPIPE_STOP_PLAYING, /* void */ + AUDIO_CTLPIPE_SET_SONGPOS, /* int songpos */ + AUDIO_CTLPIPE_SET_PATTERN, /* int pattern */ + AUDIO_CTLPIPE_SET_AMPLIFICATION, /* double */ + AUDIO_CTLPIPE_SET_PITCHBEND, /* double */ + AUDIO_CTLPIPE_SET_MIXER, /* st_mixer* */ + AUDIO_CTLPIPE_SET_TEMPO, /* int */ + AUDIO_CTLPIPE_SET_BPM, /* int */ + AUDIO_CTLPIPE_DATA_REQUESTED /* pointer, int, int, int */ +} audio_ctlpipe_id; + +typedef enum audio_backpipe_id { + AUDIO_BACKPIPE_DRIVER_OPEN_FAILED = 1000, + AUDIO_BACKPIPE_PLAYING_STARTED, + AUDIO_BACKPIPE_PLAYING_PATTERN_STARTED, + AUDIO_BACKPIPE_PLAYING_NOTE_STARTED, + AUDIO_BACKPIPE_PLAYING_STOPPED, + AUDIO_BACKPIPE_ERROR_MESSAGE, /* int len, string (len+1 bytes) */ + AUDIO_BACKPIPE_WARNING_MESSAGE, /* int len, string (len+1 bytes) */ + AUDIO_BACKPIPE_ERRNO_MESSAGE, /* int errno, int len, string (len+1 bytes) */ +} audio_backpipe_id; + +void audio_ctlpipe_write(audio_ctlpipe_id cmd, ...); +void audio_backpipe_write(audio_backpipe_id cmd, ...); +gboolean audio_request_data(void *buf, + guint32 count, + gint mixfreq, + gint mixformat); +gboolean audio_communication_init(int* ctlpipe); +int audio_get_backpipe(void); + +#endif /* _ST_AUDIO_SUBS_H */ diff -Nru soundtracker-0.6.8/app/cheat-sheet.c soundtracker-1.0.2~pre2/app/cheat-sheet.c --- soundtracker-0.6.8/app/cheat-sheet.c 2004-01-04 15:57:21.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/cheat-sheet.c 2019-07-23 20:10:53.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - XM effects cheat sheet * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,145 +21,110 @@ #include +#include #include -#ifdef USE_GNOME -#include -#else -#include -#include -#include -#endif - -#include "i18n.h" - -static GtkWidget *cheat_sheet_window = NULL; - -static const char cheat_sheet_string[] = -"\n" -" Standard Effects Column Volume Column\n" -" ---------------------------------------------------------------------\n" -"\n" -" 0 Arpeggio 0 Do nothing\n" -" 1 (*) Porta up $10-$50 Set volume Value-$10\n" -" 2 (*) Porta down : : :\n" -" 3 (*) Tone porta : : :\n" -" 4 (*) Vibrato $60-$6f Volume slide down\n" -" 5 (*) Tone porta+Volume slide $70-$7f Volume slide up\n" -" 6 (*) Vibrato+Volume slide $80-$8f Fine volume slide down\n" -" 7 (*) Tremolo $90-$9f Fine volume slide up\n" -" 8 Set panning $a0-$af Set vibrato speed\n" -" 9 Sample offset $b0-$bf Vibrato\n" -" A (*) Volume slide $c0-$cf Set panning\n" -" B Position jump $d0-$df Panning slide left\n" -" C Set volume $e0-$ef Panning slide right\n" -" D Pattern break $f0-$ff Tone porta\n" -" E1 (*) Fine porta up\n" -" E2 (*) Fine porta down (*) = If the data byte is zero,\n" -" E3 Set gliss control the last nonzero byte for the\n" -" E4 Set vibrato control command should be used.\n" -" E5 Set finetune\n" -" E6 Set loop begin/loop\n" -" E7 Set tremolo control ===================================\n" -" E9 Retrig note\n" -" EA (*) Fine volume slide up Non-Standard XM effects - only\n" -" EB (*) Fine volume slide down available in SoundTracker and\n" -" EC Note cut OpenCP - don't use if you want to\n" -" ED Note delay stay compatible with FastTracker.\n" -" EE Pattern delay -----------------------------------\n" -" F Set tempo/BPM\n" -" G Set global volume Zxx Set LP filter cutoff frequency\n" -" H (*) Global volume slide Qxx Set LP filter resonance\n" -" K Key off\n" -" L Set envelope position To switch off the filter, you must\n" -" P (*) Panning slide usw Q00 _and_ Zff!.\n" -" R (*) Multi retrig note\n" -" T Tremor\n" -" X1 (*) Extra fine porta up\n" -" X2 (*) Extra fine porta down"; -static void -cheat_sheet_close_requested (void) +#include "gui-subs.h" +#include "gui.h" + +static gboolean +cheat_sheet_close_requested(GtkWidget* w) { - gtk_widget_destroy(cheat_sheet_window); - cheat_sheet_window = NULL; + gtk_widget_hide(w); + return TRUE; } -void -cheat_sheet_dialog (void) +void cheat_sheet_dialog(void) { - GtkWidget *mainbox, *scrolled_window, *text, *hbox, *thing; - GdkFont *font; + GtkWidget *mainbox, *thing, *hbox; + GFile* file; + GError* error = NULL; + GtkTextBuffer* buffer; + PangoFontDescription *desc; + gchar *contents, *path; + gsize size; + guint i = 0; + const gchar* const* linguas; + + static GtkWidget* cheat_sheet_window = NULL; + + if (cheat_sheet_window != NULL) { + gtk_window_present(GTK_WINDOW(cheat_sheet_window)); + return; + } + + linguas = g_get_language_names(); + while (linguas[i]) { + path = g_strdup_printf(DATADIR "/" PACKAGE "/cheat-sheet.%s.txt", linguas[i]); + if (g_file_test(path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) { + file = g_file_new_for_path(path); + break; + } - if(cheat_sheet_window != NULL) { - gdk_window_raise(cheat_sheet_window->window); - return; + i++; + g_free(path); } -#ifdef USE_GNOME - cheat_sheet_window = gnome_app_new("SoundTracker", _("XM Effects Cheat Sheet")); -#else + if (!linguas[i]) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("No Cheat Sheet pages are found!"), FALSE); + return; + } + + if (!g_file_load_contents(file, NULL, &contents, &size, NULL, &error)) { + gchar* mess = g_strdup_printf(_("Cheat sheet file %s cannot be loaded.\n%s"), path, error->message); + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, mess, TRUE); + + g_free(mess); + g_error_free(error); + g_object_unref(file); + g_free(path); + return; + } + g_object_unref(file); + g_free(path); + cheat_sheet_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(cheat_sheet_window), _("XM Effects Cheat Sheet")); -#endif - gtk_signal_connect (GTK_OBJECT (cheat_sheet_window), "delete_event", - GTK_SIGNAL_FUNC (cheat_sheet_close_requested), NULL); + gtk_window_set_transient_for(GTK_WINDOW(cheat_sheet_window), GTK_WINDOW(mainwindow)); + g_signal_connect(cheat_sheet_window, "delete_event", + G_CALLBACK(cheat_sheet_close_requested), NULL); + gui_set_escape_close(cheat_sheet_window); mainbox = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(mainbox), 4); -#ifdef USE_GNOME - gnome_app_set_contents(GNOME_APP(cheat_sheet_window), mainbox); -#else + gtk_container_set_border_width(GTK_CONTAINER(mainbox), 4); gtk_container_add(GTK_CONTAINER(cheat_sheet_window), mainbox); -#endif - gtk_widget_show(mainbox); - scrolled_window = gtk_scrolled_window_new (NULL, NULL); - gtk_box_pack_start (GTK_BOX (mainbox), scrolled_window, TRUE, TRUE, 0); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), - GTK_POLICY_NEVER, - GTK_POLICY_ALWAYS); - gtk_widget_show (scrolled_window); + buffer = gtk_text_buffer_new(NULL); + gtk_text_buffer_set_text(buffer, contents, size); + g_free(contents); + thing = gtk_text_view_new_with_buffer(buffer); + gtk_text_view_set_editable(GTK_TEXT_VIEW(thing), FALSE); + gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(thing), FALSE); + desc = pango_font_description_from_string("Monospace 10"); + gtk_widget_modify_font(thing, desc); + pango_font_description_free(desc); + gtk_box_pack_start(GTK_BOX(mainbox), thing, TRUE, TRUE, 0); /* Close button */ thing = gtk_hseparator_new(); - gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - hbox = gtk_hbutton_box_new (); - gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbox), 4); - gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END); - gtk_box_pack_start (GTK_BOX (mainbox), hbox, - FALSE, FALSE, 0); - gtk_widget_show (hbox); - -#ifdef USE_GNOME - thing = gnome_stock_button (GNOME_STOCK_BUTTON_CLOSE); -#else - thing = gtk_button_new_with_label (_ ("Close")); -#endif - GTK_WIDGET_SET_FLAGS(thing, GTK_CAN_DEFAULT); + hbox = gtk_hbutton_box_new(); + gtk_box_set_spacing(GTK_BOX(hbox), 4); + gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_END); + gtk_box_pack_start(GTK_BOX(mainbox), hbox, + FALSE, FALSE, 0); + + thing = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + gtk_widget_set_can_default(thing, TRUE); gtk_window_set_default(GTK_WINDOW(cheat_sheet_window), thing); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC (cheat_sheet_close_requested), NULL); - gtk_box_pack_start (GTK_BOX (hbox), thing, FALSE, FALSE, 0); - gtk_widget_show (thing); - - text = gtk_text_new (NULL, NULL); - gtk_text_set_editable (GTK_TEXT (text), FALSE); - gtk_text_set_word_wrap (GTK_TEXT (text), FALSE); - gtk_container_add (GTK_CONTAINER (scrolled_window), text); - gtk_widget_grab_focus (text); - gtk_widget_show (text); - gtk_widget_set_usize(text, 42 * 12, 46 * 12); - - font = gdk_font_load ("-adobe-courier-medium-r-normal--*-120-*-*-*-*-*-*"); - - gtk_text_insert(GTK_TEXT(text), font, NULL, NULL, cheat_sheet_string, -1); - - /* The Text widget will reference count the font, so we - * unreference it here - */ - gdk_font_unref (font); + g_signal_connect_swapped(G_OBJECT(thing), "clicked", + G_CALLBACK(gtk_widget_hide), cheat_sheet_window); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); - gtk_widget_show (cheat_sheet_window); + gtk_widget_show_all(cheat_sheet_window); } diff -Nru soundtracker-0.6.8/app/cheat-sheet.h soundtracker-1.0.2~pre2/app/cheat-sheet.h --- soundtracker-0.6.8/app/cheat-sheet.h 2001-01-03 13:24:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/cheat-sheet.h 2019-04-15 17:45:04.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - XM effects cheat sheet (header) * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,6 +22,6 @@ #ifndef _ST_CHEAT_SHEET_H #define _ST_CHEAT_SHEET_H -void cheat_sheet_dialog (void); +void cheat_sheet_dialog(void); #endif /* _ST_CHEAT_SHEET_H */ diff -Nru soundtracker-0.6.8/app/clavier.c soundtracker-1.0.2~pre2/app/clavier.c --- soundtracker-0.6.8/app/clavier.c 2001-08-12 09:38:35.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/clavier.c 2021-02-23 17:46:29.000000000 +0000 @@ -1,6 +1,7 @@ /* clavier.c - GTK+ "Clavier" Widget -- based on clavier-0.1.3 * Copyright (C) 1998 Simon Kågedal - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause + * Copyright (C) 2020-2021 Yury Aliaev * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,211 +20,154 @@ * created 1998-04-18 Simon Kågedal */ +#include #include -#include -#include -#include -#include "clavier.h" - -#define XFONTNAME "5x8" - -static const int default_colors[] = { - 255, 0, 0, - 255, 255, 0, -}; - -static void init_colors(GtkWidget *widget) -{ - int n; - const int *p; - GdkColor *c; - - for (n = 0, p = default_colors, c = CLAVIER(widget)->colors; n < CLAVIERCOL_LAST; n++, c++) { - c->red = *p++ * 65535 / 255; - c->green = *p++ * 65535 / 255; - c->blue = *p++ * 65535 / 255; - c->pixel = (gulong)((c->red & 0xff00)*256 + (c->green & 0xff00) + (c->blue & 0xff00)/256); - gdk_color_alloc(gtk_widget_get_colormap(widget), c); - } -} -static GtkDrawingAreaClass *parent_class = NULL; +#include "clavier.h" +#include "colors.h" +#include "marshal.h" /* Signals */ -enum -{ - CLAVIERKEY_PRESS, - CLAVIERKEY_RELEASE, - CLAVIERKEY_ENTER, - CLAVIERKEY_LEAVE, - LAST_SIGNAL +enum { + CLAVIERKEY_PRESS, + CLAVIERKEY_RELEASE, + CLAVIERKEY_ENTER, + CLAVIERKEY_LEAVE, + LAST_SIGNAL }; -static gint clavier_signals[LAST_SIGNAL] = {0}; +static guint clavier_signals[LAST_SIGNAL] = { 0 }; -typedef void (*ClavierSignal1) (GtkObject *object, - gint arg1, - gpointer data); +typedef void (*ClavierSignal1)(GtkObject* object, + gint arg1, + gpointer data); /* Clavier Methods */ -static void clavier_class_init (ClavierClass *class); -static void clavier_init (Clavier *clavier); +static void clavier_class_init(ClavierClass* class); +static void clavier_init(Clavier* clavier); /* GtkObject Methods */ -static void clavier_destroy (GtkObject *object); +static void clavier_destroy(GtkObject* object); /* GtkWidget Methods */ -static void clavier_realize (GtkWidget *widget); -static gint clavier_expose (GtkWidget *widget, GdkEventExpose *event); -static gint clavier_button_press (GtkWidget *widget, GdkEventButton *event); -static gint clavier_button_release (GtkWidget *widget, GdkEventButton *event); -static gint clavier_motion_notify (GtkWidget *widget, GdkEventMotion *event); -static gint clavier_leave_notify (GtkWidget *widget, GdkEventCrossing *event); - -/* Helpers */ -static void draw_key_hint (Clavier *, gint, GdkGC *); - -GtkType -clavier_get_type (void) -{ - static GtkType clavier_type = 0; - - if (!clavier_type) - { - GtkTypeInfo clavier_info = { - "Clavier", - sizeof (Clavier), - sizeof (ClavierClass), - (GtkClassInitFunc) clavier_class_init, - (GtkObjectInitFunc) clavier_init, - (GtkArgSetFunc) NULL, - (GtkArgGetFunc) NULL, - }; +static void clavier_realize(GtkWidget* widget); +static gint clavier_expose(GtkWidget* widget, GdkEventExpose* event); +static void clavier_size_allocate(GtkWidget* widget, GtkAllocation* allocation); +static gint clavier_button_press(GtkWidget* widget, GdkEventButton* event); +static gint clavier_button_release(GtkWidget* widget, GdkEventButton* event); +static gint clavier_motion_notify(GtkWidget* widget, GdkEventMotion* event); +static gint clavier_leave_notify(GtkWidget* widget, GdkEventCrossing* event); - clavier_type = gtk_type_unique (gtk_drawing_area_get_type (), - &clavier_info); - } - - return clavier_type; -} +G_DEFINE_TYPE(Clavier, clavier, custom_drawing_get_type()) static void -clavier_class_init (ClavierClass *class) +clavier_class_init(ClavierClass* class) { - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; + GObjectClass* object_class; + GtkObjectClass* gtkobject_class; + GtkWidgetClass* widget_class; + + object_class = (GObjectClass*)class; + gtkobject_class = (GtkObjectClass*)class; + widget_class = (GtkWidgetClass*)class; + + clavier_signals[CLAVIERKEY_PRESS] = g_signal_new("clavierkey_press", G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(ClavierClass, clavierkey_press), + NULL, NULL, + __marshal_VOID__INT_INT, G_TYPE_NONE, 2, + G_TYPE_INT, G_TYPE_INT); + + clavier_signals[CLAVIERKEY_RELEASE] = g_signal_new("clavierkey_release", G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(ClavierClass, clavierkey_release), + NULL, NULL, + __marshal_VOID__INT_INT, G_TYPE_NONE, 2, + G_TYPE_INT, G_TYPE_INT); + + clavier_signals[CLAVIERKEY_ENTER] = g_signal_new("clavierkey_enter", G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(ClavierClass, clavierkey_enter), + NULL, NULL, + g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, + G_TYPE_INT); + + clavier_signals[CLAVIERKEY_LEAVE] = g_signal_new("clavierkey_leave", G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(ClavierClass, clavierkey_leave), + NULL, NULL, + g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, + G_TYPE_INT); + + gtkobject_class->destroy = clavier_destroy; - object_class = (GtkObjectClass *) class; - widget_class = (GtkWidgetClass *) class; + widget_class->realize = clavier_realize; + widget_class->expose_event = clavier_expose; + widget_class->size_allocate = clavier_size_allocate; - parent_class = gtk_type_class (gtk_drawing_area_get_type ()); - - clavier_signals[CLAVIERKEY_PRESS] = - gtk_signal_new ("clavierkey_press", GTK_RUN_FIRST, object_class->type, - GTK_SIGNAL_OFFSET (ClavierClass, clavierkey_press), - gtk_marshal_NONE__INT, GTK_TYPE_NONE, 1, - GTK_TYPE_INT); - - clavier_signals[CLAVIERKEY_RELEASE] = - gtk_signal_new ("clavierkey_release", GTK_RUN_FIRST, object_class->type, - GTK_SIGNAL_OFFSET (ClavierClass, clavierkey_release), - gtk_marshal_NONE__INT, GTK_TYPE_NONE, 1, - GTK_TYPE_INT); - - clavier_signals[CLAVIERKEY_ENTER] = - gtk_signal_new ("clavierkey_enter", GTK_RUN_FIRST, object_class->type, - GTK_SIGNAL_OFFSET (ClavierClass, clavierkey_enter), - gtk_marshal_NONE__INT, GTK_TYPE_NONE, 1, - GTK_TYPE_INT); - - clavier_signals[CLAVIERKEY_LEAVE] = - gtk_signal_new ("clavierkey_leave", GTK_RUN_FIRST, object_class->type, - GTK_SIGNAL_OFFSET (ClavierClass, clavierkey_leave), - gtk_marshal_NONE__INT, GTK_TYPE_NONE, 1, - GTK_TYPE_INT); - - gtk_object_class_add_signals (object_class, clavier_signals, LAST_SIGNAL); - - object_class->destroy = clavier_destroy; - - widget_class->realize = clavier_realize; - widget_class->expose_event = clavier_expose; - - widget_class->button_press_event = clavier_button_press; - widget_class->button_release_event = clavier_button_release; - widget_class->motion_notify_event = clavier_motion_notify; - widget_class->leave_notify_event = clavier_leave_notify; + widget_class->button_press_event = clavier_button_press; + widget_class->button_release_event = clavier_button_release; + widget_class->motion_notify_event = clavier_motion_notify; + widget_class->leave_notify_event = clavier_leave_notify; } static void -clavier_init (Clavier *clavier) +clavier_init(Clavier* clavier) { - clavier->font = gdk_font_load(XFONTNAME); - if(!clavier->font) { - fprintf(stderr, "Hmpf. Strange X installation. You don't have the %s font?\n", XFONTNAME); - clavier->font = gdk_font_load("fixed"); - } - g_assert(clavier->font != NULL); - - clavier->fonth = clavier->font->ascent + clavier->font->descent; - clavier->fontw = gdk_string_width(clavier->font, "X"); /* let's just hope this is a non-proportional font */ - clavier->keylabels = NULL; - - clavier->type = CLAVIER_TYPE_SEQUENCER; - clavier->dir = CLAVIER_DIR_HORIZONTAL; - clavier->key_start = 36; - clavier->key_end = 96; - clavier->black_key_height = 0.6; - clavier->black_key_width = 0.54; + clavier->keylabels = NULL; - clavier->is_pressed = FALSE; - clavier->key_pressed = 0; + clavier->key_start = 36; + clavier->key_end = 96; + clavier->black_key_height = 0.6; + clavier->black_key_width = 0.64; + clavier->prev_width = 0; - clavier->key_info = NULL; - clavier->key_info_size = 0; + clavier->is_pressed = FALSE; + clavier->key_pressed = 0; - clavier->show_middle_c = TRUE; + clavier->key_info = NULL; + clavier->key_info_size = 0; + + di_widget_configure(GTK_WIDGET(clavier)); } static void -clavier_destroy (GtkObject *object) +clavier_destroy(GtkObject* object) { - Clavier *clavier; + Clavier* clavier; - g_return_if_fail (object != NULL); - g_return_if_fail (IS_CLAVIER (object)); + g_return_if_fail(object != NULL); + g_return_if_fail(IS_CLAVIER(object)); - clavier = CLAVIER (object); + clavier = CLAVIER(object); - /* eventually free memory allocated for key info + /* eventually free memory allocated for key info */ - if (clavier->key_info) - { - g_free (clavier->key_info); + if (clavier->key_info) { + g_free(clavier->key_info); } - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (*GTK_OBJECT_CLASS (parent_class)->destroy) (object); + if (GTK_OBJECT_CLASS(clavier_parent_class)->destroy) + (*GTK_OBJECT_CLASS(clavier_parent_class)->destroy)(object); } /* checks if the given key is a black one */ static gboolean -is_black_key (gint key) +is_black_key(gint key) { - switch (key % 12) - { + switch (key % 12) { case 1: case 3: case 6: case 8: case 10: - return (TRUE); + return (TRUE); default: - return (FALSE); + return (FALSE); } } @@ -232,832 +176,574 @@ */ static void -calc_keys (gint start, gint end, gint *whites, gint *blacks) +calc_keys(gint start, gint end, gint* whites, gint* blacks) { - gint i; - - *blacks = 0; - *whites = 0; - - if (end >= start) - { - for (i=start; i<=end; i++) - { - if (is_black_key(i)) - (*blacks)++; - } - - *whites = end - start + 1 - *blacks; - } -} + gint i; -/* swaps x and y values if clavier->dir == CLAVIER_DIR_VERTICAL - */ - -static void -dir_swap (Clavier *clavier, gint *x1, gint *y1) -{ - if (clavier->dir == CLAVIER_DIR_VERTICAL) - { - gint x; - x = *x1; - *x1 = *y1; - *y1 = x; - } -} + *blacks = 0; + *whites = 0; -/* use this swapping routine on all points, like on a line - */ + if (end >= start) { + for (i = start; i <= end; i++) { + if (is_black_key(i)) + (*blacks)++; + } -static void -dir_swap_point (Clavier *clavier, gint *x1, gint *y1) -{ - if (clavier->dir == CLAVIER_DIR_VERTICAL) - { - gint x; - x = *x1; - *x1 = *y1; - *y1 = GTK_WIDGET(clavier)->allocation.height - x - 1; + *whites = end - start + 1 - *blacks; } } -/* the opposite of dir_swap_point - */ - -static void -dir_swap_point_reverse (Clavier *clavier, gint *x1, gint *y1) -{ - if (clavier->dir == CLAVIER_DIR_VERTICAL) - { - gint y; - y = *y1; - *y1 = *x1; - *x1 = GTK_WIDGET(clavier)->allocation.height - y; - } -} - -/* use this swapping routine on all rectangles - */ - -static void -dir_swap_rectangle (Clavier *clavier, gint *x1, gint *y1, - gint *width, gint *height) -{ - if (clavier->dir == CLAVIER_DIR_VERTICAL) - { - gint x; - x = *x1; - *x1 = *y1; - *y1 = GTK_WIDGET(clavier)->allocation.height - x - *width; - - x = *width; - *width = *height; - *height = x; - } -} - -/* this drawing routine lets each key, whether white or black, take - * up the same width +/* this draws a key like on a real keyboard, y'know, all white keys have + * the same width and the black keys are a bit narrower. */ static void -calc_key_sequencer (Clavier *clavier, gint key, ClavierKeyInfo *key_info) +calc_key_normal(Clavier* clavier, gint key, ClavierKeyInfo* key_info) { - GtkWidget *widget; - gint width, height; + GtkWidget* widget; + gint blacks, whites, width; - widget = GTK_WIDGET (clavier); + widget = GTK_WIDGET(clavier); - width = widget->allocation.width; - height = widget->allocation.height; + width = widget->allocation.width; + calc_keys(clavier->key_start, key - 1, &whites, &blacks); - dir_swap (clavier, &width, &height); - - switch (key % 12) - { - case 1: case 3: case 6: case 8: case 10: + switch (key % 12) { + case 1: + case 3: + case 6: + case 8: + case 10: - /* black key */ + /* black key */ - key_info->is_black = TRUE; - key_info->upper_right_x = - (key - clavier->key_start + 1) * clavier->keywidth; + key_info->is_black = TRUE; + key_info->upper_right_x = ((gfloat)whites + (clavier->black_key_width * 0.5)) * clavier->keywidth; - break; + break; - case 0: case 2: case 5: case 7: case 9: + case 0: + case 2: + case 5: + case 7: + case 9: - /* short right side */ + /* the (whites):th white key from left or bottom, with short + * right side + */ - key_info->is_black = FALSE; - key_info->upper_right_x = - ((gfloat)(key - clavier->key_start) + 1) * clavier->keywidth; - key_info->lower_right_x = - ((gfloat)(key - clavier->key_start) + 1.5) * clavier->keywidth; + key_info->is_black = FALSE; + key_info->upper_right_x = (whites + 1) * clavier->keywidth - (clavier->black_key_width * 0.5 * clavier->keywidth); + key_info->lower_right_x = (whites + 1) * clavier->keywidth; - break; + break; - case 4: case 11: + case 4: + case 11: - /* long right side */ + /* the (whites):th white key from left or bottom, with long + * right side + */ - key_info->is_black = FALSE; - key_info->upper_right_x = - key_info->lower_right_x = - (key - clavier->key_start + 1) * clavier->keywidth; + key_info->is_black = FALSE; + key_info->upper_right_x = key_info->lower_right_x = (whites + 1) * clavier->keywidth; - break; + break; } - /* we need to do some fixing for the rightmost key */ + /* we need to do some fixing for the rightmost key */ - if (key == clavier->key_end) - { - key_info->upper_right_x = - key_info->lower_right_x = - width - 1; + if (key == clavier->key_end) { + key_info->upper_right_x = key_info->lower_right_x = width - 1; } } -/* this draws a key like on a real keyboard, y'know, all white keys have - * the same width and the black keys are a bit narrower. - */ - static void -calc_key_normal (Clavier *clavier, gint key, ClavierKeyInfo *key_info) +calc_key_info(Clavier* clavier) { - GtkWidget *widget; - gint blacks, whites, width, height; - - widget = GTK_WIDGET (clavier); - - width = widget->allocation.width; - height = widget->allocation.height; - - dir_swap (clavier, &width, &height); - - calc_keys (clavier->key_start, key-1, &whites, &blacks); - - switch (key % 12) - { - case 1: case 3: case 6: case 8: case 10: - - /* black key */ - - key_info->is_black = TRUE; - key_info->upper_right_x = - ((gfloat)whites + - (clavier->black_key_width * 0.5)) * clavier->keywidth; - - break; - - case 0: case 2: case 5: case 7: case 9: - - /* the (whites):th white key from left or bottom, with short - * right side - */ - - key_info->is_black = FALSE; - key_info->upper_right_x = - (whites + 1) * clavier->keywidth - - (clavier->black_key_width * 0.5 * clavier->keywidth); - key_info->lower_right_x = (whites + 1) * clavier->keywidth; - - break; - - case 4: case 11: + gint keys = clavier->key_end - clavier->key_start + 1; + gint i, prev = 0, pprev = 0; - /* the (whites):th white key from left or bottom, with long - * right side - */ + if (!clavier->key_info) { + clavier->key_info = g_malloc(sizeof(ClavierKeyInfo) * keys); + } else if (clavier->key_info_size != keys) { + clavier->key_info = g_realloc(clavier->key_info, sizeof(ClavierKeyInfo) * keys); + } - key_info->is_black = FALSE; - key_info->upper_right_x = - key_info->lower_right_x = - (whites + 1) * clavier->keywidth; + for (i = 0; i < keys; i++) { + ClavierKeyInfo* ki = &clavier->key_info[i]; - break; + calc_key_normal(clavier, + clavier->key_start + i, ki); - } + if (!ki->is_black) { + ki->width = ki->lower_right_x - prev; + prev = ki->lower_right_x; + } else + ki->width = ki->upper_right_x - pprev; + pprev = ki->upper_right_x; - /* we need to do some fixing for the rightmost key */ + /* fix so draw_key draws lower rectangle correctly */ - if (key == clavier->key_end) - { - key_info->upper_right_x = - key_info->lower_right_x = - width - 1; + if (i > 0 && (ki->is_black)) { + clavier->key_info[i].lower_right_x = clavier->key_info[i - 1].lower_right_x; + } } } static void -calc_key_info (Clavier *clavier) +clavier_draw_label(Clavier* clavier, + int keynum, gboolean pressed) { - gint keys = clavier->key_end - clavier->key_start + 1; - gint i; + if (clavier->keylabels) { + ClavierKeyInfo* this = &(clavier->key_info[keynum]); + gchar buf[4]; + gint8 label = clavier->keylabels[keynum]; + gboolean is_black = clavier->key_info[keynum].is_black; + gint len; + const gint black_pos = + GTK_WIDGET(clavier)->allocation.height * clavier->black_key_height - + clavier->fonth; + const gint white_pos = + MIN(GTK_WIDGET(clavier)->allocation.height * clavier->black_key_height + clavier->fonth, + GTK_WIDGET(clavier)->allocation.height - clavier->fonth); - if (!clavier->key_info) - { - clavier->key_info = g_malloc (sizeof (ClavierKeyInfo) * keys); - } - else if (clavier->key_info_size != keys) - { - clavier->key_info = - g_realloc (clavier->key_info, sizeof (ClavierKeyInfo) * keys); - } - - for (i=0; itype == CLAVIER_TYPE_NORMAL) - { - calc_key_normal (clavier, - clavier->key_start + i, &clavier->key_info[i]); - } - else - { - calc_key_sequencer (clavier, - clavier->key_start + i, &clavier->key_info[i]); - } - - /* fix so draw_key draws lower rectangle correctly */ - - if (i > 0 && - (clavier->key_info[i].is_black)) - { - clavier->key_info[i].lower_right_x = - clavier->key_info[i - 1].lower_right_x; - } + if (label > 0xf) { + len = sprintf(buf, "%x", label >> 4); + di_draw_text(clavier->layout, + colors_get_color(is_black ? (pressed ? COLOR_TEXT_BLACK_PRESSED : COLOR_TEXT_BLACK) + : (pressed ? COLOR_TEXT_WHITE_PRESSED : COLOR_TEXT_WHITE)), + buf, len, (is_black ? this->upper_right_x : this->lower_right_x) + - ((this->width + clavier->fontw) >> 1), + (is_black ? black_pos : white_pos) - clavier->fonth); + } + len = sprintf(buf, "%x", label & 0xf); + di_draw_text(clavier->layout, + colors_get_color(is_black ? (pressed ? COLOR_TEXT_BLACK_PRESSED : COLOR_TEXT_BLACK) + : (pressed ? COLOR_TEXT_WHITE_PRESSED : COLOR_TEXT_WHITE)), + buf, len, (is_black ? this->upper_right_x : this->lower_right_x) + - ((this->width + clavier->fontw) >> 1), + is_black ? black_pos : white_pos); } } -static void -clavier_draw_label (Clavier *clavier, - int keynum) +static void clavier_size_allocate(GtkWidget* widget, + GtkAllocation* allocation) { - ClavierKeyInfo *this = &(clavier->key_info[keynum]); - GtkWidget *widget = GTK_WIDGET(clavier); - gchar string[10] = ""; + g_return_if_fail(widget != NULL); + g_return_if_fail(IS_CLAVIER(widget)); + g_return_if_fail(allocation != NULL); - if(clavier->keylabels) { - sprintf(string, "%x", clavier->keylabels[keynum]); - } + widget->allocation.x = allocation->x; + widget->allocation.y = allocation->y; + widget->allocation.width = allocation->width; + widget->allocation.height = allocation->height; - if(clavier->key_info[keynum].is_black) { - gdk_draw_string(widget->window, clavier->font, clavier->fontbgc, this->upper_right_x - 6, 10, string); - } else { - gdk_draw_string(widget->window, clavier->font, clavier->fontwgc, this->upper_right_x - 6, 20, string); + if (gtk_widget_get_realized(widget)) { + gdk_window_move_resize(widget->window, allocation->x, allocation->y, + allocation->width, allocation->height); } + + (*GTK_WIDGET_CLASS(clavier_parent_class)->size_allocate)(widget, allocation); } /* main drawing function */ static gint -clavier_expose (GtkWidget *widget, GdkEventExpose *event) +clavier_expose(GtkWidget* widget, GdkEventExpose* event) { - Clavier *clavier; - int i; - gint keys, whitekeys, blackkeys; - gint width, height; - ClavierKeyInfo first = {0, 0}, *prev; - static gint last_transpose = -1; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (IS_CLAVIER (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - clavier = CLAVIER(widget); - - width = widget->allocation.width; - height = widget->allocation.height; - - dir_swap (clavier, &width, &height); - - keys = clavier->key_end - clavier->key_start + 1; - - gdk_draw_rectangle(widget->window, widget->style->bg_gc[0], TRUE, - event->area.x, event->area.y, event->area.width, event->area.height); - - calc_keys (clavier->key_start, clavier->key_end, &whitekeys, &blackkeys); - - switch (clavier->type) - { - case CLAVIER_TYPE_SEQUENCER: - clavier->keywidth = (gfloat)width / (gfloat)(keys); - break; - - case CLAVIER_TYPE_NORMAL: - clavier->keywidth = (gfloat)width / (gfloat)whitekeys; - break; - } + Clavier* clavier; + int i; + gint keys, whitekeys, blackkeys; + gint width, height; + ClavierKeyInfo first = { 0, 0 }, *prev; + DIDrawable drw = custom_drawing_get_drawable(CUSTOM_DRAWING(widget)); - calc_key_info (clavier); + g_return_val_if_fail(widget != NULL, FALSE); + g_return_val_if_fail(IS_CLAVIER(widget), FALSE); + g_return_val_if_fail(event != NULL, FALSE); - /* first.upper_right_x = first.lower_right_x = 0; - */ - prev = &first; + clavier = CLAVIER(widget); + di_layout_set_drawable(clavier->layout, + custom_drawing_get_gdk_drawable(CUSTOM_DRAWING(widget))); - for (i=0; ikey_info[i].is_black) - { - x1 = prev->upper_right_x + 1; - y1 = 1; - - x2 = clavier->key_info[i].upper_right_x - prev->upper_right_x - 1; - y2 = height * clavier->black_key_height; - - dir_swap_rectangle (clavier, &x1, &y1, &x2, &y2); - - gdk_draw_rectangle (widget->window, - widget->style->black_gc, - TRUE, - x1, y1, x2, y2); - } - else - { - if (i != (keys-1)) - { - x1 = clavier->key_info[i].lower_right_x; - y1 = 1; - x2 = x1; - y2 = height; - - dir_swap_point(clavier, &x1, &y1); - dir_swap_point(clavier, &x2, &y2); - - gdk_draw_line (widget->window, - widget->style->black_gc, - x1, y1, x2, y2); - } - } + width = widget->allocation.width; + height = widget->allocation.height; - prev = &clavier->key_info[i]; + keys = clavier->key_end - clavier->key_start + 1; - clavier_draw_label(clavier, i); - } + di_draw_rectangle(drw, clavier->white_gc, TRUE, 0, 0, width, height); - /* show middle C */ + /* To speed up a little bit */ - if (clavier->show_middle_c) - { - draw_key_hint (clavier, 60, - widget->style->black_gc); + if (clavier->prev_width != width) { + clavier->prev_width = width; + calc_keys(clavier->key_start, clavier->key_end, &whitekeys, &blackkeys); + clavier->keywidth = (gfloat)width / (gfloat)whitekeys; + calc_key_info(clavier); } - /* show transpose base */ - if (clavier->show_transpose) - { - gint new_transpose= CLAVIER (clavier)->transpose_base; - - /* delete old */ - if (last_transpose != -1 && new_transpose != last_transpose) - { - draw_key_hint (clavier, last_transpose, - last_transpose == 60 - ? widget->style->black_gc - : widget->style->bg_gc[0]); - } + /* first.upper_right_x = first.lower_right_x = 0; + */ + prev = &first; - draw_key_hint (clavier, new_transpose, - widget->style->light_gc[3]); + for (i = 0; i < keys; i++) { + gint x1, y1, x2, y2; - last_transpose = new_transpose; + if (clavier->key_info[i].is_black) { + x1 = prev->upper_right_x + 1; + y1 = 1; + + x2 = clavier->key_info[i].upper_right_x - prev->upper_right_x - 1; + y2 = height * clavier->black_key_height; + + di_draw_rectangle(drw, + clavier->black_gc, + TRUE, + x1, y1, x2, y2); + } else { + if (i != (keys - 1)) { + x1 = clavier->key_info[i].lower_right_x; + y1 = 1; + x2 = x1; + y2 = height; + + di_draw_line(drw, + clavier->black_gc, + x1, y1, x2, y2); + } + } + + prev = &clavier->key_info[i]; + + clavier_draw_label(clavier, i, FALSE); } - return FALSE; + return (*GTK_WIDGET_CLASS(clavier_parent_class)->expose_event)(widget, event); } /* Draw a key pressed or unpressed */ static void -draw_key (Clavier *clavier, gint key, gboolean pressed) +draw_key(Clavier* clavier, gint key, gboolean pressed) { - ClavierKeyInfo first = {0, 0}, *prev, *this; - gint keynum; - gint x1, y1, x2, y2, width, height; - GtkWidget *widget; - GdkGC *gc; - - widget = GTK_WIDGET (clavier); - - width = widget->allocation.width; - height = widget->allocation.height; - - dir_swap (clavier, &width, &height); - - keynum = key - clavier->key_start; + ClavierKeyInfo first = { 0, 0 }, *prev, *this; + gint keynum; + gint x1, y1, x2, y2, height; + GtkWidget* widget = GTK_WIDGET(clavier); + DIGC gc; + DIDrawable drw = custom_drawing_get_drawable(CUSTOM_DRAWING(widget)); + GdkEventExpose event; - this = &(clavier->key_info[keynum]); - prev = (keynum > 0) ? &(clavier->key_info[keynum-1]) : &first; + di_layout_set_drawable(clavier->layout, + custom_drawing_get_gdk_drawable(CUSTOM_DRAWING(widget))); + height = widget->allocation.height; - if (pressed) - { - /* if anyone could teach me how colours in gdk actually work - * i'd be oh so happy :) - */ + keynum = key - clavier->key_start; - gc = this->is_black ? - /* widget->style->fg_gc[4] :*/ - /* widget->style->bg_gc[1];*/ - widget->style->light_gc[3] : - widget->style->fg_gc[3]; - /* widget->style->bg_gc[3] : - * widget->style->fg_gc[4]; - */ - } - else - { - gc = this->is_black ? widget->style->black_gc : - widget->style->bg_gc[0]; - } + this = &(clavier->key_info[keynum]); + prev = (keynum > 0) ? &(clavier->key_info[keynum - 1]) : &first; - /* draw upper part */ + gc = this->is_black ? (pressed ? clavier->black_p_gc : clavier->black_gc) + : (pressed ? clavier->white_p_gc : clavier->white_gc); - x1 = prev->upper_right_x + 1; - y1 = 1; - x2 = this->upper_right_x - prev->upper_right_x - 1; - y2 = height * clavier->black_key_height; - - dir_swap_rectangle (clavier, &x1, &y1, &x2, &y2); - - gdk_draw_rectangle (widget->window, - gc, - TRUE, - x1, y1, x2, y2); - - if (! clavier->key_info[keynum].is_black) - { - /* draw lower part */ - - x1 = prev->lower_right_x + 1; - y1 = height * clavier->black_key_height + 1; - x2 = this->lower_right_x - prev->lower_right_x - 1; - y2 = height * (1.0 - clavier->black_key_height) - 1; - - dir_swap_rectangle (clavier, &x1, &y1, &x2, &y2); - - gdk_draw_rectangle (widget->window, - gc, - TRUE, - x1, y1, x2, y2); - } + /* draw upper part */ - clavier_draw_label(clavier, keynum); -} + x1 = prev->upper_right_x + 1; + y1 = 1; + x2 = this->upper_right_x - prev->upper_right_x - 1; + y2 = height * clavier->black_key_height; -/* Draw a key "hint" (a little line above the `key') with the - * `gc'. - */ - -static void -draw_key_hint (Clavier *clavier, gint key, GdkGC *gc) -{ - ClavierKeyInfo first = {0, 0}, *prev, *this; - gint keynum; - gint x1, y1, x2, y2; - GtkWidget *widget; + di_draw_rectangle(drw, gc, TRUE, x1, y1, x2, y2); - widget = GTK_WIDGET (clavier); + if (!clavier->key_info[keynum].is_black) { + /* draw lower part */ - if (key < clavier->key_start || key > clavier->key_end) - return; + x1 = prev->lower_right_x + 1; + y1 = height * clavier->black_key_height + 1; + x2 = this->lower_right_x - prev->lower_right_x - 1; + y2 = height * (1.0 - clavier->black_key_height) - 1; - keynum = key - clavier->key_start; - - this = &(clavier->key_info[keynum]); - prev = (keynum > 0) ? &(clavier->key_info[keynum-1]) : &first; - - x1 = prev->upper_right_x + 1; - y1 = 0; - x2 = this->upper_right_x; - y2 = y1; + di_draw_rectangle(drw, gc, TRUE, x1, y1, x2, y2); + } - dir_swap_point (clavier, &x1, &y1); - dir_swap_point (clavier, &x2, &y2); + clavier_draw_label(clavier, keynum, pressed); - gdk_draw_line (widget->window, - gc, - x1, y1, x2, y2); + /* Emulating exposure event to force redrawing from the image buffer */ + event.type = GDK_EXPOSE; + event.window = widget->window; + event.area.x = widget->allocation.x + x1; + event.area.y = widget->allocation.y + 1; + event.area.width = x2; + event.area.height = widget->allocation.height - 1; + (*GTK_WIDGET_CLASS(clavier_parent_class)->expose_event)(widget, &event); } /* See which key is drawn at x, y */ static gint -which_key (Clavier *clavier, gint x, gint y) +which_key(Clavier* clavier, gint x, gint y) { - gint i, keys, width, height; + gint i, keys, height; - width = GTK_WIDGET(clavier)->allocation.width; - height = GTK_WIDGET(clavier)->allocation.height; + height = GTK_WIDGET(clavier)->allocation.height; - dir_swap_point_reverse (clavier, &x, &y); - /* dir_swap (clavier, &x, &y);*/ + keys = clavier->key_end - clavier->key_start + 1; - dir_swap (clavier, &width, &height); + if (y > (height * clavier->black_key_height)) { + /* check lower part */ - keys = clavier->key_end - clavier->key_start + 1; - - if (y > (height * clavier->black_key_height)) - { - /* check lower part */ + for (i = 0; i < keys; i++) { + if (x < clavier->key_info[i].lower_right_x) { + return clavier->key_start + i; + } + } + } else { + /* check upper part */ - for (i=0; ikey_info[i].lower_right_x) - { - return clavier->key_start + i; - } - } - } - else - { - /* check upper part */ - - for (i=0; ikey_info[i].upper_right_x) - { - return (clavier->key_start + i); - } - } + for (i = 0; i < keys; i++) { + if (x < clavier->key_info[i].upper_right_x) { + return (clavier->key_start + i); + } + } } - /* so it must be the rightmost key */ + /* so it must be the rightmost key */ - return (clavier->key_end); + return (clavier->key_end); } static void -press_key (Clavier *clavier, gint key) +press_key(Clavier* clavier, gint key, gint button) { - clavier->is_pressed = TRUE; - clavier->key_pressed = key; + clavier->is_pressed = TRUE; + clavier->key_pressed = key; + clavier->button = button; - gtk_signal_emit (GTK_OBJECT (clavier), - clavier_signals[CLAVIERKEY_PRESS], key); + g_signal_emit(G_OBJECT(clavier), clavier_signals[CLAVIERKEY_PRESS], 0, key, button); - /* printf("press: %i\n", key); */ + /* printf("press: %i\n", key); */ } static void -release_key (Clavier *clavier) +release_key(Clavier* clavier, gint button) { - clavier->is_pressed = FALSE; + clavier->is_pressed = FALSE; - gtk_signal_emit (GTK_OBJECT (clavier), clavier_signals[CLAVIERKEY_RELEASE], - clavier->key_pressed); + g_signal_emit(G_OBJECT(clavier), clavier_signals[CLAVIERKEY_RELEASE], 0, + clavier->key_pressed, button); - /* printf ("release: %i\n", clavier->key_pressed); */ + /* printf ("release: %i\n", clavier->key_pressed); */ } /* events */ static gint -clavier_button_press (GtkWidget *widget, GdkEventButton *event) +clavier_button_press(GtkWidget* widget, GdkEventButton* event) { - Clavier *clavier; - gint key; + Clavier* clavier; + gint key; - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (IS_CLAVIER (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); + g_return_val_if_fail(widget != NULL, FALSE); + g_return_val_if_fail(IS_CLAVIER(widget), FALSE); + g_return_val_if_fail(event != NULL, FALSE); - clavier = CLAVIER(widget); + clavier = CLAVIER(widget); - key = which_key (clavier, (gint)event->x, (gint)event->y); + key = which_key(clavier, (gint)event->x, (gint)event->y); - press_key (clavier, key); + press_key(clavier, key, event->button); - /* add pointer grab - hmm, doesn't seem to work the way i'd like :( */ + /* add pointer grab - hmm, doesn't seem to work the way i'd like :( */ - gtk_grab_add (widget); - /* gdk_pointer_grab (widget->window, TRUE, - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_BUTTON_MOTION_MASK | - GDK_POINTER_MOTION_HINT_MASK, - NULL, NULL, 0);*/ + gtk_grab_add(widget); - return FALSE; + return FALSE; } static gint -clavier_button_release (GtkWidget *widget, GdkEventButton *event) +clavier_button_release(GtkWidget* widget, GdkEventButton* event) { - gint key; - Clavier *clavier; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (IS_CLAVIER (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); + Clavier* clavier; - clavier = CLAVIER (widget); + g_return_val_if_fail(widget != NULL, FALSE); + g_return_val_if_fail(IS_CLAVIER(widget), FALSE); + g_return_val_if_fail(event != NULL, FALSE); - key = which_key (clavier, (gint)event->x, (gint)event->y); + clavier = CLAVIER(widget); - release_key (clavier); + release_key(clavier, event->button); - gtk_grab_remove (widget); - /* gdk_pointer_ungrab (0);*/ + gtk_grab_remove(widget); - return FALSE; + return FALSE; } static gint -clavier_motion_notify (GtkWidget *widget, GdkEventMotion *event) +clavier_motion_notify(GtkWidget* widget, GdkEventMotion* event) { - Clavier *clavier; + Clavier* clavier; gint key; - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (IS_CLAVIER (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - clavier = CLAVIER (widget); - - key = which_key (clavier, (gint)event->x, (gint)event->y); - - if(key != clavier->key_entered) { - if(clavier->key_entered != -1) { - gtk_signal_emit (GTK_OBJECT (clavier), - clavier_signals[CLAVIERKEY_LEAVE], clavier->key_entered); - } - clavier->key_entered = key; - gtk_signal_emit (GTK_OBJECT (clavier), - clavier_signals[CLAVIERKEY_ENTER], key); + g_return_val_if_fail(widget != NULL, FALSE); + g_return_val_if_fail(IS_CLAVIER(widget), FALSE); + g_return_val_if_fail(event != NULL, FALSE); + + clavier = CLAVIER(widget); + + key = which_key(clavier, (gint)event->x, (gint)event->y); + + if (key != clavier->key_entered) { + if (clavier->key_entered != -1) { + g_signal_emit(G_OBJECT(clavier), + clavier_signals[CLAVIERKEY_LEAVE], 0, clavier->key_entered); + } + clavier->key_entered = key; + g_signal_emit(G_OBJECT(clavier), + clavier_signals[CLAVIERKEY_ENTER], 0, key); } if (clavier->is_pressed) { - if (key != clavier->key_pressed) { - release_key (clavier); - press_key (clavier, key); - } + if (key != clavier->key_pressed) { + release_key(clavier, clavier->button); + press_key(clavier, key, clavier->button); + } } return FALSE; } static gint -clavier_leave_notify (GtkWidget *widget, - GdkEventCrossing *event) +clavier_leave_notify(GtkWidget* widget, + GdkEventCrossing* event) { - Clavier *clavier = CLAVIER (widget); + Clavier* clavier = CLAVIER(widget); - if(clavier->key_entered != -1) { - gtk_signal_emit (GTK_OBJECT (clavier), - clavier_signals[CLAVIERKEY_LEAVE], clavier->key_entered); - clavier->key_entered = -1; + if (clavier->key_entered != -1) { + g_signal_emit(G_OBJECT(clavier), + clavier_signals[CLAVIERKEY_LEAVE], 0, clavier->key_entered); + clavier->key_entered = -1; } - + return FALSE; } GtkWidget* -clavier_new (void) +clavier_new(const gchar* font) { - Clavier *clavier; + Clavier* clavier; - clavier = gtk_type_new (clavier_get_type ()); + clavier = g_object_new(clavier_get_type(), NULL); + clavier->font = font; - /* old_mask = gtk_widget_get_events (GTK_WIDGET (clavier)); */ - /* gtk_widget_set_events (GTK_WIDGET (clavier), old_mask | */ + return GTK_WIDGET(clavier); +} - return GTK_WIDGET (clavier); +static inline void +clavier_update_layout(Clavier* clavier) +{ + di_layout_set_font(clavier->layout, clavier->font); + /* let's just hope this is a non-proportional font */ + di_layout_get_pixel_size(clavier->layout, "0", -1, &clavier->fontw, &clavier->fonth); } static void -clavier_realize (GtkWidget *widget) +clavier_realize(GtkWidget* widget) { - GdkWindowAttr attributes; - Clavier *clavier; - gint attributes_mask; - - g_return_if_fail (widget != NULL); - g_return_if_fail (IS_CLAVIER (widget)); - - clavier = CLAVIER (widget); - GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); - - attributes.window_type = GDK_WINDOW_CHILD; - attributes.x = widget->allocation.x; - attributes.y = widget->allocation.y; - attributes.width = widget->allocation.width; - attributes.height = widget->allocation.height; - attributes.wclass = GDK_INPUT_OUTPUT; - attributes.visual = gtk_widget_get_visual (widget); - attributes.colormap = gtk_widget_get_colormap (widget); - attributes.event_mask = gtk_widget_get_events (widget) | - GDK_EXPOSURE_MASK | - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_POINTER_MOTION_MASK | - GDK_LEAVE_NOTIFY_MASK; - /* GDK_POINTER_MOTION_HINT_MASK*/ - - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; - - widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), - &attributes, attributes_mask); - gdk_window_set_user_data (widget->window, clavier); - - init_colors(widget); - - clavier->fontwgc = gdk_gc_new(widget->window); - clavier->fontbgc = gdk_gc_new(widget->window); - gdk_gc_set_foreground(clavier->fontwgc, &clavier->colors[CLAVIERCOL_FONT_ON_WHITE]); - gdk_gc_set_foreground(clavier->fontbgc, &clavier->colors[CLAVIERCOL_FONT_ON_BLACK]); + GdkWindowAttr attributes; + Clavier* clavier; + gint attributes_mask; + + g_return_if_fail(widget != NULL); + g_return_if_fail(IS_CLAVIER(widget)); + + clavier = CLAVIER(widget); + gtk_widget_set_realized(widget, TRUE); + + attributes.window_type = GDK_WINDOW_CHILD; + attributes.x = widget->allocation.x; + attributes.y = widget->allocation.y; + attributes.width = widget->allocation.width; + attributes.height = widget->allocation.height; + attributes.wclass = GDK_INPUT_OUTPUT; + attributes.visual = gtk_widget_get_visual(widget); + attributes.colormap = gtk_widget_get_colormap(widget); + attributes.event_mask = gtk_widget_get_events(widget) | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK; + + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; + + widget->window = gdk_window_new(gtk_widget_get_parent_window(widget), + &attributes, attributes_mask); + gdk_window_set_user_data(widget->window, clavier); - widget->style = gtk_style_attach (widget->style, widget->window); - gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); + widget->style = gtk_style_attach(widget->style, widget->window); + gtk_style_set_background(widget->style, widget->window, GTK_STATE_NORMAL); + + clavier->white_gc = colors_get_gc(COLOR_KEY_WHITE); + colors_add_widget(COLOR_KEY_WHITE, widget); + clavier->black_gc = colors_get_gc(COLOR_KEY_BLACK); + clavier->white_p_gc = colors_get_gc(COLOR_KEY_WHITE_PRESSED); + clavier->black_p_gc = colors_get_gc(COLOR_KEY_BLACK_PRESSED); + clavier->white_tp_gc = colors_get_gc(COLOR_TEXT_WHITE_PRESSED); + clavier->black_tp_gc = colors_get_gc(COLOR_TEXT_BLACK_PRESSED); + + clavier->layout = di_layout_new(widget); + clavier_update_layout(clavier); + (*GTK_WIDGET_CLASS(clavier_parent_class)->realize)(widget); } /* these routines should most often be mapped to the press and release * signals, but not all applications would want it that way */ -void -clavier_press (Clavier *clavier, gint key) +void clavier_press(Clavier* clavier, gint key) { - /* TODO: should keep track of what keys are pressed so that the + /* TODO: should keep track of what keys are pressed so that the * whole widget can be correctly redrawn */ - if (key < clavier->key_start || key > clavier->key_end) - return; + if (key < clavier->key_start || key > clavier->key_end) + return; - draw_key (clavier, key, TRUE); + draw_key(clavier, key, TRUE); } -void -clavier_release (Clavier *clavier, gint key) +void clavier_release(Clavier* clavier, gint key) { - if (key < clavier->key_start || key > clavier->key_end) - return; + if (key < clavier->key_start || key > clavier->key_end) + return; - draw_key (clavier, key, FALSE); + draw_key(clavier, key, FALSE); } /* attribute setting */ -void -clavier_set_range (Clavier *clavier, gint start, gint end) -{ - g_return_if_fail (start >= 0 && start <= 127); - g_return_if_fail (start >= 0 && start <= 127); - g_return_if_fail (end >= start); - - clavier->key_start = start; - clavier->key_end = end; -} - -void -clavier_set_clavier_type (Clavier *clavier, ClavierType type) -{ - clavier->type = type; - /* should redraw here? */ -} - -void -clavier_set_clavier_dir (Clavier *clavier, ClavierDir dir) +void clavier_set_range(Clavier* clavier, gint start, gint end) { - clavier->dir = dir; - /* should redraw here? */ -} + g_return_if_fail(start >= 0 && start <= 127); + g_return_if_fail(start >= 0 && start <= 127); + g_return_if_fail(end >= start); -void -clavier_set_show_middle_c (Clavier *clavier, gboolean b) -{ - clavier->show_middle_c = b; - /* should redraw here? */ -} - -void -clavier_set_show_transpose (Clavier *clavier, gboolean b) -{ - clavier->show_transpose = b; - /* should redraw here? */ + clavier->key_start = start; + clavier->key_end = end; } -void -clavier_set_transpose_base (Clavier *clavier, gint key) +void clavier_set_key_labels(Clavier* clavier, + gint8* labels) { - clavier->transpose_base = key; - - if (GTK_WIDGET_DRAWABLE (clavier)) - gtk_widget_queue_draw (GTK_WIDGET (clavier)); + clavier->keylabels = labels; + gtk_widget_queue_draw(GTK_WIDGET(clavier)); } -void -clavier_set_key_labels (Clavier *clavier, - gint8 *labels) +void clavier_set_font(Clavier* clavier, + const gchar* font) { - clavier->keylabels = labels; + clavier->font = font; + clavier_update_layout(clavier); gtk_widget_queue_draw(GTK_WIDGET(clavier)); } diff -Nru soundtracker-0.6.8/app/clavier.h soundtracker-1.0.2~pre2/app/clavier.h --- soundtracker-0.6.8/app/clavier.h 2001-01-03 13:24:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/clavier.h 2020-11-08 18:12:54.000000000 +0000 @@ -1,6 +1,6 @@ /* clavier.h - GTK+ "Clavier" Widget * Copyright (C) 1998 Simon Kågedal - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,115 +18,85 @@ #ifndef __CLAVIER_H__ #define __CLAVIER_H__ -#include -#include +#include "customdrawing.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ -#define CLAVIER(obj) GTK_CHECK_CAST (obj, clavier_get_type (), Clavier) +#define CLAVIER(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, clavier_get_type(), Clavier)) #define CLAVIER_CLASS(klass) \ - GTK_CHECK_CLASS_CAST (klass, clavier_get_type, ClavierClass) -#define IS_CLAVIER(obj) GTK_CHECK_TYPE (obj, clavier_get_type ()) + (G_TYPE_CHECK_CLASS_CAST(klass, clavier_get_type, ClavierClass)) +#define IS_CLAVIER(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, clavier_get_type())) +typedef struct _Clavier Clavier; +typedef struct _ClavierClass ClavierClass; -typedef struct _Clavier Clavier; -typedef struct _ClavierClass ClavierClass; +struct _ClavierKeyInfo { + gboolean is_black; /* is it a black key */ -typedef enum -{ - CLAVIER_TYPE_SEQUENCER, - CLAVIER_TYPE_NORMAL -} ClavierType; - -typedef enum -{ - CLAVIER_DIR_VERTICAL, - CLAVIER_DIR_HORIZONTAL -} ClavierDir; - -struct _ClavierKeyInfo -{ - gboolean is_black; /* is it a black key */ - - /* these two contains the x value of the right side of the key + /* these two contains the x value of the right side of the key * (it's actually y if clavier->dir == CLAVIER_DIR_VERTICAL) - */ + */ - gint upper_right_x; - gint lower_right_x; /* not valid if is_black==TRUE */ + gint upper_right_x; + gint lower_right_x; /* not valid if is_black==TRUE */ + gint width; /* = */ }; typedef struct _ClavierKeyInfo ClavierKeyInfo; -enum { - CLAVIERCOL_FONT_ON_WHITE, - CLAVIERCOL_FONT_ON_BLACK, - CLAVIERCOL_LAST, -}; +struct _Clavier { + CustomDrawing widget; + + DILayout *layout; + DIGC white_gc, black_gc, white_p_gc, black_p_gc, white_tp_gc, black_tp_gc; + int fonth, fontw; + const gchar* font; + + gint8* keylabels; // Pointer to bytes, not characters... -struct _Clavier -{ - GtkDrawingArea drawingarea; - - GdkFont *font; - int fonth, fontw; - GdkGC *fontbgc, *fontwgc; - GdkColor colors[CLAVIERCOL_LAST]; - - gint8 *keylabels; // Pointer to bytes, not characters... - - ClavierType type; - ClavierDir dir; - gboolean show_middle_c; - gboolean show_transpose; /* show where the current transpose base is */ - gint transpose_base; /* so where is it? */ - gint key_start; /* key number start. like MIDI, middle C = 60 */ - gint key_end; /* key number end. */ - gfloat black_key_height; /* percentage of the whole height */ - gfloat black_key_width; /* when type==CLAVIER_TYPE_NORMAL */ - - gboolean is_pressed; /* is a key pressed? */ - gint key_pressed; /* which key? */ + gint key_start; /* key number start. like MIDI, middle C = 60 */ + gint key_end; /* key number end. */ + gfloat black_key_height; /* percentage of the whole height */ + gfloat black_key_width; /* when type==CLAVIER_TYPE_NORMAL */ + gint prev_width; - int key_entered; /* the key the mouse is over currently (or -1) */ + gboolean is_pressed; /* is a key pressed? */ + gint key_pressed; /* which key? */ + gint button; /* by which mouse button? */ - /* stuff that is calculated */ + int key_entered; /* the key the mouse is over currently (or -1) */ - gfloat keywidth; /* X if dir==CLAVIER_DIR_HORIZONTAL */ + /* stuff that is calculated */ - ClavierKeyInfo *key_info; - gint key_info_size; + gfloat keywidth; /* X */ + + ClavierKeyInfo* key_info; + gint key_info_size; }; -struct _ClavierClass -{ - GtkDrawingAreaClass parent_class; - - void (* clavierkey_press) (Clavier *clavier, gint key); - void (* clavierkey_release) (Clavier *clavier, gint key); - void (* clavierkey_enter) (Clavier *clavier, gint key); - void (* clavierkey_leave) (Clavier *clavier, gint key); +struct _ClavierClass { + CustomDrawingClass parent_class; + + void (*clavierkey_press)(Clavier* clavier, gint key); + void (*clavierkey_release)(Clavier* clavier, gint key); + void (*clavierkey_enter)(Clavier* clavier, gint key); + void (*clavierkey_leave)(Clavier* clavier, gint key); }; -GtkType clavier_get_type (void); -GtkWidget* clavier_new (void); +GType clavier_get_type(void) G_GNUC_CONST; +GtkWidget* clavier_new(const gchar* font); -void clavier_set_range (Clavier *clavier, gint start, gint end); -void clavier_set_clavier_type (Clavier *clavier, ClavierType type); -void clavier_set_clavier_dir (Clavier *clavier, ClavierDir dir); -void clavier_set_show_middle_c (Clavier *, gboolean); -void clavier_set_show_transpose (Clavier *, gboolean); -void clavier_set_transpose_base (Clavier *, gint); -void clavier_set_key_labels (Clavier *, gint8 *); +void clavier_set_range(Clavier* clavier, gint start, gint end); +void clavier_set_key_labels(Clavier*, gint8*); +void clavier_set_font(Clavier* clavier, const gchar* font); -void clavier_press (Clavier *clavier, gint key); -void clavier_release (Clavier *clavier, gint key); +void clavier_press(Clavier* clavier, gint key); +void clavier_release(Clavier* clavier, gint key); #ifdef __cplusplus } #endif /* __cplusplus */ - #endif /* __CLAVIER_H__ */ diff -Nru soundtracker-0.6.8/app/clock.c soundtracker-1.0.2~pre2/app/clock.c --- soundtracker-0.6.8/app/clock.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/clock.c 2020-01-10 18:46:46.000000000 +0000 @@ -0,0 +1,131 @@ + +/* + * The Real SoundTracker - clock re-implementation + * + * Copyright (C) 2006 Miroslav Shatlev, Yury Aliaev + * Copyright (C) 2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include + +#include "clock.h" + +static void clock_class_init(ClockClass* klass); +static void clock_init(Clock* clock); + +G_DEFINE_TYPE(Clock, clock, GTK_TYPE_LABEL) + +static void clock_destroy(GtkObject* object) +{ + g_return_if_fail(object != NULL); + clock_stop(CLOCK(object)); + g_free(CLOCK(object)->tm); + g_free(CLOCK(object)->fmt); + GTK_OBJECT_CLASS(clock_parent_class)->destroy(object); +} + +static void clock_class_init(ClockClass* klass) +{ + GtkObjectClass* object_class = (GtkObjectClass*)klass; + object_class->destroy = clock_destroy; +} + +static void clock_init(Clock* clock) +{ + clock->timer_id = -1; + clock->update_interval = 1; + clock->seconds = time(NULL); + clock->stopped = 0; +} + +static void clock_gen_str(Clock* clock) +{ + gchar timestr[64]; + time_t secs; + + secs = time(NULL) - clock->seconds; + clock->tm->tm_hour = secs / 3600; + secs -= clock->tm->tm_hour * 3600; + clock->tm->tm_min = secs / 60; + clock->tm->tm_sec = secs - clock->tm->tm_min * 60; + strftime(timestr, 64, clock->fmt, clock->tm); + gtk_label_set_text(GTK_LABEL(clock), timestr); +} + +static gint clock_timer_callback(gpointer data) +{ + Clock* clock = (Clock*)data; + GDK_THREADS_ENTER(); + clock_gen_str(clock); + GDK_THREADS_LEAVE(); + return TRUE; +} + +GtkWidget* clock_new() +{ + Clock* clock = g_object_new(clock_get_type(), NULL); + + clock->fmt = g_strdup("%H:%M:%S"); + clock->tm = g_new(struct tm, 1); + memset(clock->tm, 0, sizeof(struct tm)); + clock->update_interval = 1; + + clock_gen_str(clock); + + return GTK_WIDGET(clock); +} + +void clock_set_format(Clock* clock, const gchar* fmt) +{ + g_return_if_fail(clock != NULL); + g_return_if_fail(fmt != NULL); + g_free(clock->fmt); + clock->fmt = g_strdup(fmt); +} + +void clock_set_seconds(Clock* clock, time_t seconds) +{ + g_return_if_fail(clock != NULL); + + clock->seconds = time(NULL) - seconds; + + if (clock->timer_id == -1) + clock->stopped = seconds; + clock_gen_str(clock); +} + +void clock_start(Clock* clock) +{ + g_return_if_fail(clock != NULL); + if (clock->timer_id != -1) + return; + clock_set_seconds(clock, clock->stopped); + clock->timer_id = g_timeout_add(1000 * clock->update_interval, clock_timer_callback, clock); +} + +void clock_stop(Clock* clock) +{ + g_return_if_fail(clock != NULL); + + if (clock->timer_id == -1) + return; + + clock->stopped = time(NULL) - clock->seconds; + g_source_remove(clock->timer_id); + clock->timer_id = -1; +} diff -Nru soundtracker-0.6.8/app/clock.h soundtracker-1.0.2~pre2/app/clock.h --- soundtracker-0.6.8/app/clock.h 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/clock.h 2020-01-10 18:46:46.000000000 +0000 @@ -0,0 +1,56 @@ + +/* + * The Real SoundTracker - clock re-implementation (header) + * + * Copyright (C) 2006 Miroslav Shatlev, Yury Aliaev + * Copyright (C) 2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef _CLOCK_H +#define _CLOCK_H + +#include +#include + +#define CLOCK_TYPE (clock_get_type()) +#define CLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), CLOCK_TYPE, Clock)) + +typedef struct _Clock Clock; +typedef struct _ClockClass ClockClass; + +struct _Clock { + GtkLabel widget; + gint timer_id; + gint update_interval; + time_t seconds; + time_t stopped; + gchar* fmt; + struct tm* tm; +}; + +struct _ClockClass { + GtkLabelClass parent_class; +}; + +GType clock_get_type(void) G_GNUC_CONST; +GtkWidget* clock_new(void); +void clock_set_format(Clock* clock, const gchar* fmt); +void clock_set_seconds(Clock* clock, time_t seconds); +void clock_start(Clock* clock); +void clock_stop(Clock* clock); + +#endif /* _CLOCK_H */ diff -Nru soundtracker-0.6.8/app/colors.c soundtracker-1.0.2~pre2/app/colors.c --- soundtracker-0.6.8/app/colors.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/colors.c 2020-09-15 17:16:39.000000000 +0000 @@ -0,0 +1,474 @@ + +/* + * The Real SoundTracker - Color scheme configuration routines + * + * Copyright (C) 2019 Yury Aliaev + * Copyright (C) 1998-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include "colors.h" +#include "gui-settings.h" +#include "gui-subs.h" +#include "preferences.h" +#include "st-subs.h" + +typedef struct { + const guint r, g, b; /* Default values */ + const gchar *meaning, *tip; /* meaning == NULL also indicates that this color is not configurable */ + GSList *gcs, *widgets; + gboolean changed; + GdkColor color, new_color; /* Actual and desired values */ +} STColor; + +/* This arraly must be consistent with the COLORS_* enum in colors.h */ +static STColor colors[] = { + /* Configurable */ + {10, 20, 30, N_("Background"), N_("Background for tracker and sample dislays"), NULL, NULL, FALSE, {0}, {0}}, + {100, 100, 100, N_("Cursor background"), N_("Background for the tracker cursor line"), NULL, NULL, FALSE, {0}, {0}}, + {70, 70, 70, N_("Major lines"), N_("Major lines highlighting"), NULL, NULL, FALSE, {0}, {0}}, + {50, 50, 50, N_("Minor lines"), N_("Minor lines highlighting"), NULL, NULL, FALSE, {0}, {0}}, + {50, 60, 70, N_("Selection"), N_("Tracker selection"), NULL, NULL, FALSE, {0}, {0}}, + {230, 230, 230, N_("Notes, waveforms"), N_("Tracker text (notes, effects) and waveforms"), NULL, NULL, FALSE, {0}, {0}}, + {170, 170, 200, N_("Delimiters"), N_("Tracker delimiters"), NULL, NULL, FALSE, {0}, {0}}, + {230, 200, 0, N_("Channel numbers, loops"), N_("Channel numbers and loops in the sample editor"), NULL, NULL, FALSE, {0}, {0}}, + {250, 100, 50, N_("Cursor idle"), N_("Tracker cursor in idle mode"), NULL, NULL, FALSE, {0}, {0}}, + {250, 200, 50, N_("Cursor editing"), N_("Tracker cursor in editing mode"), NULL, NULL, FALSE, {0}, {0}}, + {120, 130, 150, N_("Cursor bg in selection"), N_("Background for the tracker cursor in the selection"), NULL, NULL, FALSE, {0}, {0}}, + {230, 0, 0, N_("Mixer position"), N_("Mixer position indicator"), NULL, NULL, FALSE, {0}, {0}}, + {60, 60, 140, N_("Zero line"), N_("Sample display zero line"), NULL, NULL, FALSE, {0}, {0}}, + /* Special */ + {0, 0, 0, N_("White keys"), N_("White clavier keys, text on black keys"), NULL, NULL, FALSE, {0}, {0}}, + {0, 0, 0, N_("Black keys"), N_("Black clavier keys, text on white keys"), NULL, NULL, FALSE, {0}, {0}}, + {0, 0, 0, N_("White keys pressed"), N_("White clavier keys in pressed state"), NULL, NULL, FALSE, {0}, {0}}, + {0, 0, 0, N_("Black keys pressed"), N_("Black clavier keys in pressed state"), NULL, NULL, FALSE, {0}, {0}}, + {0, 0, 0, N_("White text pressed"), N_("Text on white clavier keys in pressed state"), NULL, NULL, FALSE, {0}, {0}}, + {0, 0, 0, N_("Black text pressed"), N_("Text on black clavier keys in pressed state"), NULL, NULL, FALSE, {0}, {0}}, + /* Fixed */ + {255, 0, 0, NULL, NULL, NULL, NULL, FALSE, {0}, {0}}, /* Red */ + {0, 0, 0, NULL, NULL, NULL, NULL, FALSE, {0}, {0}}, /* Black */ + /* Must be consistent with the background color of the "unmuted.png" image */ + {0, 0, 1, NULL, NULL, NULL, NULL, FALSE, {0}, {0}} +}; + +#define COLORS ARRAY_SIZE(colors) + +static GtkWidget* col_samples[COLORS] = {NULL}; +static GtkWidget* colorsel = NULL; +static GdkColormap* cm = NULL; +static guint active_col_item = 0; + +static void +colors_update_color(const guint i) +{ + GSList* l; +#ifdef BACKEND_X11 + XGCValues vls; +#endif + + for (l = colors[i].gcs; l; l = l->next) { +#ifdef BACKEND_X11 + GC* gc = l->data; + + vls.foreground = colors[i].color.pixel; + XChangeGC(display, *gc, GCForeground, &vls); +#else + GdkGC* gc = l->data; + + gdk_gc_set_foreground(gc, &colors[i].color); +#endif + } +} + +static void +colors_special_set_default(GtkWidget* widget, const guint i) +{ + GtkStyle* style = gtk_widget_get_style(widget); + + switch (i) { + case COLOR_KEY_WHITE: + colors[i].color = style->bg[GTK_STATE_NORMAL]; + break; + case COLOR_KEY_BLACK: + colors[i].color = style->text[GTK_STATE_NORMAL]; + break; + case COLOR_KEY_WHITE_PRESSED: + colors[i].color = style->text_aa[GTK_STATE_NORMAL]; + break; + case COLOR_KEY_BLACK_PRESSED: + colors[i].color = style->fg[GTK_STATE_INSENSITIVE]; + break; + case COLOR_TEXT_WHITE_PRESSED: + colors[i].color = style->base[GTK_STATE_NORMAL]; + break; + case COLOR_TEXT_BLACK_PRESSED: + colors[i].color = style->bg[GTK_STATE_NORMAL]; + break; + default: + g_assert_not_reached(); + } + colors_update_color(i); +} + +void +colors_init(GtkWidget* widget, const gint action) +{ + guint i; +#ifdef BACKEND_X11 + XGCValues vls; + DIDrawable drw = di_get_drawable(widget->window); +#endif + + if (!cm) + cm = gdk_colormap_get_system(); + + for (i = 0; i < COLORS; i++) { + GSList* l; + + if (action == COLORS_GET_PREFS || action == COLORS_RESET) { + if (i >= COLOR_SPECIAL && i < COLOR_FIXED) + colors_special_set_default(widget, i); + else { + colors[i].color.red = colors[i].r << 8; + colors[i].color.green = colors[i].g << 8; + colors[i].color.blue = colors[i].b << 8; + } + + if (action == COLORS_GET_PREFS && colors[i].meaning + && (i < COLOR_SPECIAL || !gui_settings.clavier_colors_gtk)) + colors[i].color = prefs_get_color("settings", colors[i].meaning, colors[i].color); + } else { /* COLORS_APPLY */ + if (colors[i].changed) { + colors[i].color = colors[i].new_color; + colors[i].changed = FALSE; + } + } + + gdk_colormap_alloc_color(cm, &colors[i].color, FALSE, TRUE); + + if (!colors[i].gcs) { +#ifdef BACKEND_X11 + GC* gc = g_new(GC, 1); + *gc = XCreateGC(display, drw, 0, &vls); +#else + GdkGC* gc = gdk_gc_new(widget->window); +#endif + colors[i].gcs = g_slist_prepend(NULL, gc); + } + colors_update_color(i); + + for (l = colors[i].widgets; l; l = l->next) { + GtkWidget* w = l->data; + + if (w) + gtk_widget_queue_draw(w); + } + } +} + +void +colors_save(const gchar* section) +{ + guint i; + + for (i = 0; i < COLORS && colors[i].meaning; i++) + prefs_put_color(section, colors[i].meaning, colors[i].color); +} + +GdkColor* +colors_get_color(const guint index) +{ + g_return_val_if_fail(index < COLORS, NULL); + + return &colors[index].color; +} + +DIGC +colors_get_gc(const guint index) +{ + g_return_val_if_fail(index < COLORS, NULL); + + /* Attemt to get something from the uninitialized structure */ + if (!colors[index].gcs) + g_critical("Access to the uninitialized color's manager!"); + +#ifdef BACKEND_X11 + return *(GC*)colors[index].gcs->data; +#else + return colors[index].gcs->data; +#endif +} + +DIGC +colors_new_gc(const guint index, GdkWindow* window) +{ +#ifdef BACKEND_X11 + XGCValues vls; + GC* gc = g_new(GC, 1); +#else + GdkGC* gc; +#endif + + g_return_val_if_fail(index < COLORS, NULL); + +#ifdef BACKEND_X11 + vls.foreground = colors[index].color.pixel; + *gc = XCreateGC(display, di_get_drawable(window), GCForeground, &vls); +#else + gc = gdk_gc_new(window); + gdk_gc_set_foreground(gc, &colors[index].color); +#endif + colors[index].gcs = g_slist_prepend(colors[index].gcs, gc); + +#ifdef BACKEND_X11 + return *gc; +#else + return gc; +#endif +} + +static void +col_sample_paint(GtkWidget* widget, GdkColor* color) +{ +#ifdef BACKEND_X11 + GC gc; + XGCValues vls; + XID drw = di_get_drawable(widget->window); +#else + static GdkGC* gc = NULL; +#endif + +#ifdef BACKEND_X11 + vls.foreground = color->pixel; + gc = XCreateGC(display, drw, GCForeground, &vls); + XFillRectangle(display, drw, gc, 0, 0, widget->allocation.width, widget->allocation.height); +#else + if (!gc) + gc = gdk_gc_new(widget->window); + + gdk_gc_set_foreground(gc, color); + gdk_draw_rectangle(widget->window, gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height); +#endif +} + +static gboolean +col_sample_expose(GtkWidget* widget, GdkEvent* event, gpointer data) +{ + gint n = GPOINTER_TO_INT(data); + + col_sample_paint(widget, colors[n].changed ? &colors[n].new_color : &colors[n].color); + return TRUE; +} + +static void +colors_dialog_response(GtkWidget* dialog, gint response) +{ + guint i; + + switch (response) { + case GTK_RESPONSE_APPLY: + /* Should be mainwindow, but really no difference */ + colors_init(dialog, COLORS_APPLY); + break; + case GTK_RESPONSE_REJECT: + colors_init(dialog, COLORS_RESET); + for (i = 0; i < COLORS && colors[i].meaning; i++) + col_sample_paint(col_samples[i], &colors[i].color); + gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &colors[active_col_item].color); + break; + default: + gtk_widget_hide(dialog); /* Then falling down */ + case GTK_RESPONSE_CANCEL: + for (i = 0; i < COLORS && colors[i].meaning; i++) { + col_sample_paint(col_samples[i], &colors[i].color); + if (colors[i].changed) + colors[i].changed = FALSE; + } + gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &colors[active_col_item].color); + break; + } +} + +static void +col_item_toggled(GtkToggleButton* butt, gpointer data) +{ + if (gtk_toggle_button_get_active(butt)) { + gint n = active_col_item = GPOINTER_TO_INT(data); + gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), + colors[n].changed ? &colors[n].new_color : &colors[n].color); + } +} + +static void +color_changed(void) +{ + gtk_color_selection_get_current_color(GTK_COLOR_SELECTION(colorsel), &colors[active_col_item].new_color); + gdk_colormap_alloc_color(cm, &colors[active_col_item].new_color, FALSE, TRUE); + col_sample_paint(col_samples[active_col_item], &colors[active_col_item].new_color); + colors[active_col_item].changed = TRUE; +} + +static void +clavier_gtk_toggled(GtkToggleButton* tb, GtkWidget* cl_col[]) +{ + guint i; + gboolean active = gtk_toggle_button_get_active(tb); + + gui_settings.clavier_colors_gtk = active; + for (i = COLOR_SPECIAL; i < COLOR_FIXED; i++) { + gtk_widget_set_sensitive(cl_col[i - COLOR_SPECIAL], !active); + if (active) { + colors_special_set_default(cl_col[i - COLOR_SPECIAL], i); + colors[i].changed = FALSE; + col_sample_paint(col_samples[i], &colors[i].color); + if (i == active_col_item) + gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &colors[i].color); + } + } +} + +static void +colors_special_init_all(GtkWidget* widget) +{ + if (gui_settings.clavier_colors_gtk) { + static GtkStyle* prev_style = NULL; + GtkStyle* new_style = gtk_widget_get_style(widget); + + /* Reduce overhead if several widgets use colors from Gtk+ theme */ + if (prev_style != new_style) { + guint i; + + prev_style = new_style; + + for (i = COLOR_SPECIAL; i < COLOR_FIXED; i++) { + colors_special_set_default(widget, i); + if (col_samples[i]) + col_sample_paint(col_samples[i], &colors[i].color); + if (colorsel && i == active_col_item) + gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &colors[i].color); + } + } + } +} + +void +colors_add_widget(const guint index, GtkWidget* w) +{ + g_return_if_fail(index < COLORS); + + colors[index].widgets = g_slist_prepend(colors[index].widgets, w); + /* For colors taken from Gtk+ theme we should reinitialize them + on theme change */ + if (index >= COLOR_SPECIAL && index < COLOR_FIXED) + g_signal_connect(w, "style-set", + G_CALLBACK(colors_special_init_all), NULL); +} + +void +colors_dialog(GtkWidget* window) +{ + static GtkWidget* dialog = NULL; + static GtkWidget* clavier_colors[COLOR_FIXED - COLOR_SPECIAL]; + static guint id; + + GtkWidget *thing, *radio = NULL, *hbox, *vbox, *mainhbox, *c_area; + guint i; + + if (!dialog) { + gchar* buf; + + buf = g_strdup_printf(_("%s colors configuration"), PACKAGE_NAME); + dialog = gtk_dialog_new_with_buttons(buf, GTK_WINDOW(window), + GTK_DIALOG_DESTROY_WITH_PARENT, + _("Reset"), GTK_RESPONSE_REJECT, + GTK_STOCK_APPLY, GTK_RESPONSE_APPLY, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); + g_free(buf); + gui_dialog_adjust(dialog, GTK_RESPONSE_APPLY); + gtk_widget_set_tooltip_text(gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog), GTK_RESPONSE_REJECT), + _("Reset the color scheme to standard")); + gtk_widget_set_tooltip_text(gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog), GTK_RESPONSE_CANCEL), + _("Reset colors to the latest set values")); + gui_dialog_connect(dialog, G_CALLBACK(colors_dialog_response)); + + mainhbox = gtk_hbox_new(FALSE, 0); + vbox = gtk_vbox_new(TRUE, 2); + for (i = 0; i < COLORS && colors[i].meaning; i++) { + if (i == COLOR_SPECIAL) { + thing = gtk_check_button_new_with_label(_("Gtk clavier colors")); + gtk_widget_set_tooltip_text(thing, + _("Use colors from the current Gtk+ theme to paint the clavier")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.clavier_colors_gtk); + gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, FALSE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(clavier_gtk_toggled), clavier_colors); + } + radio = i ? gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(radio)) + : gtk_radio_button_new(NULL); + gtk_box_pack_start(GTK_BOX(vbox), radio, FALSE, FALSE, 0); + g_signal_connect(radio, "toggled", + G_CALLBACK(col_item_toggled), GINT_TO_POINTER(i)); + + hbox = gtk_hbox_new(FALSE, 4); + col_samples[i] = gtk_drawing_area_new(); + di_widget_configure(col_samples[i]); + gtk_box_pack_start(GTK_BOX(hbox), col_samples[i], FALSE, FALSE, 0); + g_signal_connect(col_samples[i], "expose_event", + G_CALLBACK(col_sample_expose), GINT_TO_POINTER(i)); + + thing = gtk_label_new(_(colors[i].meaning)); + gtk_widget_set_tooltip_text(thing, _(colors[i].tip)); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + if (i >= COLOR_SPECIAL) { + gtk_widget_set_sensitive(radio, !gui_settings.clavier_colors_gtk); + clavier_colors[i - COLOR_SPECIAL] = radio; + } + gtk_container_add(GTK_CONTAINER(radio), hbox); + } + gtk_box_pack_start(GTK_BOX(mainhbox), vbox, FALSE, FALSE, 0); + + thing = gtk_vseparator_new(); + gtk_box_pack_start(GTK_BOX(mainhbox), thing, FALSE, FALSE, 4); + + colorsel = gtk_color_selection_new(); + id = g_signal_connect(colorsel, "color_changed", + G_CALLBACK(color_changed), NULL); + gtk_box_pack_start(GTK_BOX(mainhbox), colorsel, FALSE, FALSE, 0); + + c_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + gtk_box_pack_start(GTK_BOX(c_area), mainhbox, TRUE, TRUE, 0); + + thing = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(c_area), thing, FALSE, FALSE, 4); + gtk_widget_show_all(c_area); + + gtk_widget_realize(dialog); + + for (i = 0; i < COLORS && colors[i].meaning; i++) + gtk_widget_set_size_request(col_samples[i], radio->allocation.height * 2, radio->allocation.height); + } + + g_signal_handler_block(colorsel, id); + gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &colors[active_col_item].color); + g_signal_handler_unblock(colorsel, id); + + gtk_window_present(GTK_WINDOW(dialog)); + for (i = 0; i < COLORS && colors[i].meaning; i++) + col_sample_paint(col_samples[i], &colors[i].color); +} diff -Nru soundtracker-0.6.8/app/colors.h soundtracker-1.0.2~pre2/app/colors.h --- soundtracker-0.6.8/app/colors.h 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/colors.h 2020-01-21 19:14:31.000000000 +0000 @@ -0,0 +1,79 @@ + +/* + * The Real SoundTracker - Color scheme configuration routines (header) + * + * Copyright (C) 2019 Yury Aliaev + * Copyright (C) 1998-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __COLORS_H +#define __COLORS_H + +#include "draw-interlayer.h" + +enum { + /* Configurable colors must go first */ + COLOR_BG = 0, + COLOR_BG_CURSOR, + COLOR_BG_MAJHIGH, + COLOR_BG_MINHIGH, + COLOR_BG_SELECTION, + COLOR_NOTES, + COLOR_BARS, + COLOR_CHANNUMS, + COLOR_CURSOR, + COLOR_CURSOR_EDIT, + COLOR_BG_CURSOR_SEL, + COLOR_MIXERPOS, + COLOR_ZEROLINE, + /* Special-purpose configurable colors, all + general-purpose colors should go before them */ + COLOR_SPECIAL, + COLOR_KEY_WHITE = COLOR_SPECIAL, + COLOR_TEXT_BLACK = COLOR_KEY_WHITE, + COLOR_KEY_BLACK, + COLOR_TEXT_WHITE = COLOR_KEY_BLACK, + COLOR_KEY_WHITE_PRESSED, + COLOR_KEY_BLACK_PRESSED, + COLOR_TEXT_WHITE_PRESSED, + COLOR_TEXT_BLACK_PRESSED, + /* Than go fixed colors */ + COLOR_FIXED, + COLOR_RED = COLOR_FIXED, + COLOR_BLACK, + COLOR_UNMUTED_BG +}; + +enum { + COLORS_APPLY, + COLORS_RESET, + COLORS_GET_PREFS, +}; + +void colors_init(GtkWidget* widget, const gint action); +void colors_save(const gchar* section); + +/* Gets the default GC */ +DIGC colors_get_gc(const guint index); +/* Creates a new GC related to the indexed color */ +DIGC colors_new_gc(const guint index, GdkWindow* window); + +GdkColor* colors_get_color(const guint index); +void colors_add_widget(const guint index, GtkWidget* widget); +void colors_dialog(GtkWidget* window); + +#endif /* __COLORS_H */ diff -Nru soundtracker-0.6.8/app/customdrawing.c soundtracker-1.0.2~pre2/app/customdrawing.c --- soundtracker-0.6.8/app/customdrawing.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/customdrawing.c 2020-01-24 17:46:37.000000000 +0000 @@ -0,0 +1,165 @@ + +/* + * The Real SoundTracker - Base class for widgets using custom drawing + * procedures + * + * Copyright (C) 2019 Yury Aliaev + * Copyright (C) 1998-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "customdrawing.h" + +static void custom_drawing_class_init(CustomDrawingClass* klass); +static void custom_drawing_init(CustomDrawing* sp); +static gint custom_drawing_expose(GtkWidget* widget, GdkEventExpose* event); +static void custom_drawing_realize(GtkWidget* widget); +static void custom_drawing_style_set(GtkWidget* widget, GtkStyle* prev); +#ifdef DOUBLE_BUFFERING_NEEDED +static void custom_drawing_size_allocate(GtkWidget* widget, GtkAllocation* allocation); +#endif + +G_DEFINE_TYPE(CustomDrawing, custom_drawing, GTK_TYPE_WIDGET) + +void +custom_drawing_register_drawing_func(CustomDrawing* cd, + void (*drawing_func)(GtkWidget*, GdkRectangle*, gpointer), + gpointer drawing_data) +{ + cd->drawing_func = drawing_func; + cd->drawing_data = drawing_data; +} + +void +custom_drawing_register_realize_func(CustomDrawing* cd, + void (*realize_func)(GtkWidget*, gpointer), + gpointer drawing_data) +{ + cd->realize_func = realize_func; +} + +void +custom_drawing_register_style_set_func(CustomDrawing* cd, + void (*style_set_func)(GtkWidget*, gpointer), + gpointer drawing_data) +{ + cd->style_set_func = style_set_func; +} + +static gint +custom_drawing_expose(GtkWidget* widget, GdkEventExpose* event) +{ + CustomDrawing* cd; +#ifdef DOUBLE_BUFFERING_NEEDED + DIDrawable drw; +#endif + + g_return_val_if_fail(IS_CUSTOM_DRAWING(widget), FALSE); + cd = CUSTOM_DRAWING(widget); + + if (cd->drawing_func) + cd->drawing_func(widget, &event->area, cd->drawing_data); + +#ifdef DOUBLE_BUFFERING_NEEDED + drw = di_get_drawable(widget->window); + if (!cd->gc) + cd->gc = di_gc_new(widget->window); + di_draw_drawable(drw, cd->gc, cd->drawable, + event->area.x, event->area.y, event->area.x, event->area.y, + event->area.width, event->area.height); +#endif + + return TRUE; +} + +static void +custom_drawing_realize(GtkWidget* widget) +{ + CustomDrawing* cd; + + g_return_if_fail(IS_CUSTOM_DRAWING(widget)); + cd = CUSTOM_DRAWING(widget); + +#ifdef DOUBLE_BUFFERING_NEEDED + if (cd->pixmap) + g_object_unref(cd->pixmap); + cd->pixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1); + cd->drawable = di_get_drawable(cd->pixmap); +#endif + + if (cd->realize_func) + cd->realize_func(widget, cd->drawing_data); +} + +static void +custom_drawing_style_set(GtkWidget* widget, GtkStyle* prev) +{ + CustomDrawing* cd; + + g_return_if_fail(IS_CUSTOM_DRAWING(widget)); + cd = CUSTOM_DRAWING(widget); + + if (cd->style_set_func) + cd->style_set_func(widget, cd->drawing_data); + + if (GTK_WIDGET_CLASS(custom_drawing_parent_class)->style_set) + (*GTK_WIDGET_CLASS(custom_drawing_parent_class)->style_set)(widget, prev); +} + +#ifdef DOUBLE_BUFFERING_NEEDED +static void +custom_drawing_size_allocate(GtkWidget* widget, GtkAllocation* allocation) +{ + CustomDrawing* cd; + + g_return_if_fail(IS_CUSTOM_DRAWING(widget)); + cd = CUSTOM_DRAWING(widget); + + if (cd->pixmap) + g_object_unref(cd->pixmap); + if (widget->window) { + cd->pixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1); + cd->drawable = di_get_drawable(cd->pixmap); + } +} +#endif + +static void +custom_drawing_init(CustomDrawing* cd) +{ + cd->drawing_func = NULL; + cd->realize_func = NULL; + cd->style_set_func = NULL; +#ifdef DOUBLE_BUFFERING_NEEDED + cd->pixmap = NULL; + cd->gc = NULL; +#endif +} + +static void +custom_drawing_class_init(CustomDrawingClass* klass) +{ + GtkWidgetClass* widget_class; + + widget_class = (GtkWidgetClass*)klass; + + widget_class->realize = custom_drawing_realize; + widget_class->expose_event = custom_drawing_expose; + widget_class->style_set = custom_drawing_style_set; +#ifdef DOUBLE_BUFFERING_NEEDED + widget_class->size_allocate = custom_drawing_size_allocate; +#endif +} diff -Nru soundtracker-0.6.8/app/customdrawing.h soundtracker-1.0.2~pre2/app/customdrawing.h --- soundtracker-0.6.8/app/customdrawing.h 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/customdrawing.h 2020-01-24 17:46:37.000000000 +0000 @@ -0,0 +1,86 @@ + +/* + * The Real SoundTracker - Base class for widgets using custom drawing + * procedures (header) + * + * Copyright (C) 2019 Yury Aliaev + * Copyright (C) 1998-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __CUSTOM_DRAWING_H +#define __CUSTOM_DRAWING_H + +#include + +#include "draw-interlayer.h" + +#define CUSTOM_DRAWING(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST(obj, custom_drawing_get_type(), CustomDrawing)) +#define CUSTOM_DRAWING_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass, custom_drawing_get_type(), CustomDrawingClass)) +#define IS_CUSTOM_DRAWING(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE(obj, custom_drawing_get_type())) + +typedef struct _CustomDrawing { + GtkWidget widget; + + void (*drawing_func)(GtkWidget*, GdkRectangle*, gpointer); + void (*realize_func)(GtkWidget*, gpointer); + void (*style_set_func)(GtkWidget*, gpointer); + + gpointer drawing_data; +#ifdef DOUBLE_BUFFERING_NEEDED + GdkPixmap *pixmap; + DIGC gc; + DIDrawable drawable; +#endif +} CustomDrawing; + +typedef struct _CustomDrawingClass { + GtkWidgetClass parent_class; +} CustomDrawingClass; + +GType custom_drawing_get_type(void) G_GNUC_CONST; +void custom_drawing_register_drawing_func(CustomDrawing* cd, + void (*drawing_func)(GtkWidget* widget, GdkRectangle* area, gpointer drawing_data), + gpointer drawing_data); +void custom_drawing_register_realize_func(CustomDrawing* cd, + void (*drawing_func)(GtkWidget* widget, gpointer drawing_data), + gpointer drawing_data); +void custom_drawing_register_style_set_func(CustomDrawing* cd, + void (*drawing_func)(GtkWidget* widget, gpointer drawing_data), + gpointer drawing_data); + +static inline DIDrawable custom_drawing_get_drawable(CustomDrawing* cd) +{ +#ifdef DOUBLE_BUFFERING_NEEDED + return cd->drawable; +#else + return di_get_drawable(GTK_WIDGET(cd)->window); +#endif +} + +static inline GdkDrawable* custom_drawing_get_gdk_drawable(CustomDrawing* cd) +{ +#ifdef DOUBLE_BUFFERING_NEEDED + return cd->pixmap; +#else + return GTK_WIDGET(cd)->window; +#endif +} + +#endif /* __CUSTOM_DRAWING_H */ diff -Nru soundtracker-0.6.8/app/draw-interlayer.c soundtracker-1.0.2~pre2/app/draw-interlayer.c --- soundtracker-0.6.8/app/draw-interlayer.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/draw-interlayer.c 2020-01-24 17:46:37.000000000 +0000 @@ -0,0 +1,134 @@ + +/* + * The Real SoundTracker - Intermediate layer for drawing backends + * abstraction + * + * Copyright (C) 2019 Yury Aliaev + * Copyright (C) 1998-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "draw-interlayer.h" + +struct _DILayout { + PangoLayout* pango; + cairo_t* cr; +}; + +#ifdef BACKEND_X11 +Display* display; + +DIGC +di_gc_new(GdkWindow* window) +{ + XGCValues vls; + + return XCreateGC(display, di_get_drawable(window), 0, &vls); +} + +void +di_init_display(GtkWidget* w) +{ + g_assert(gtk_widget_get_realized(w)); + + display = gdk_x11_drawable_get_xdisplay(w->window); +} +#endif + +void +di_update_mask(GdkWindow* window, GdkPixmap* pm, DIGC mask_gc, + const gint x0, const gint y0, const gint pm_width, const gint pm_height, + const gint width, const gint height) +{ + GdkPixbuf *pb, *pba; + GdkBitmap *mask; + + pb = gdk_pixbuf_get_from_drawable(NULL, pm, gdk_colormap_get_system(), + 0, 0, 0, 0, pm_width, pm_height); + pba = gdk_pixbuf_add_alpha(pb, TRUE, 0, 0, 0); + mask = gdk_pixmap_new(window, width, height, 1); + gdk_pixbuf_render_threshold_alpha(pba, mask, 0, 0, x0, y0, pm_width, pm_height, 254); +#ifdef BACKEND_X11 + XSetClipMask(display, mask_gc, di_get_drawable(mask)); +#else + gdk_gc_set_clip_mask(mask_gc, mask); +#endif + + g_object_unref(pb); + g_object_unref(pba); + g_object_unref(mask); +} + +DILayout* +di_layout_new(GtkWidget *widget) +{ + PangoContext* context; + DILayout* layout = g_new(DILayout, 1); + + context = gtk_widget_create_pango_context(widget); + layout->pango = pango_layout_new(context); + g_object_unref(context); + layout->cr = NULL; + + return layout; +} + +void +di_layout_set_drawable(DILayout* layout, GdkDrawable* dest) +{ + if (layout->cr) + cairo_destroy(layout->cr); + + layout->cr = gdk_cairo_create(dest); +} + +void +di_draw_text(DILayout* layout, GdkColor* color, + const char* text, const gint len, const gint x, const gint y) +{ + cairo_save(layout->cr); + pango_layout_set_text(layout->pango, text, len); + gdk_cairo_set_source_color(layout->cr, color); + cairo_move_to(layout->cr, x, y); + pango_cairo_update_layout(layout->cr, layout->pango); + pango_cairo_show_layout(layout->cr, layout->pango); + cairo_restore(layout->cr); +} + +gboolean +di_layout_set_font(DILayout* layout, const gchar* fname) +{ + PangoFontDescription* desc = pango_font_description_from_string(fname); + + if (!desc) { + /* this never seems to be reached... */ + g_warning("can't get font description from string %s", fname); + return FALSE; + } + + pango_layout_set_font_description(layout->pango, desc); + pango_font_description_free(desc); + + return TRUE; +} + +void +di_layout_get_pixel_size(DILayout* layout, const gchar* text, + const gint len, gint* x, gint* y) +{ + pango_layout_set_text(layout->pango, text, len); + pango_layout_get_pixel_size(layout->pango, x, y); +} diff -Nru soundtracker-0.6.8/app/draw-interlayer.h soundtracker-1.0.2~pre2/app/draw-interlayer.h --- soundtracker-0.6.8/app/draw-interlayer.h 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/draw-interlayer.h 2020-01-24 17:46:37.000000000 +0000 @@ -0,0 +1,123 @@ + +/* + * The Real SoundTracker - Intermediate layer for drawing backends + * abstraction (header) + * + * Copyright (C) 2019 Yury Aliaev + * Copyright (C) 1998-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __DRAW_H +#define __DRAW_H + +#include + +#include + +#ifdef BACKEND_X11 + +# include +# include + +#define DOUBLE_BUFFERING_NEEDED 1 + +typedef XID DIDrawable; +typedef GC DIGC; +typedef XSegment DISegment; + +extern Display* display; + +static inline void di_widget_configure(GtkWidget* widget) +{ + gtk_widget_set_double_buffered(widget, FALSE); +} + +static inline void di_gc_set_exposures(DIGC gc, const gboolean value) +{ + XGCValues vls; + + vls.graphics_exposures = value; + XChangeGC(display, gc, GCGraphicsExposures, &vls); +} + +static inline void di_draw_rectangle(DIDrawable drawable, DIGC gc, + gboolean filled, gint x, gint y, gint width, gint height) +{ + (filled ? XFillRectangle : XDrawRectangle)(display, drawable, gc, x, y, width, height); +} + +static inline void di_draw_arc(DIDrawable drawable, DIGC gc, + gboolean filled, gint x, gint y, gint width, gint height, gint angle1, gint angle2) +{ + (filled ? XFillArc : XDrawArc)(display, drawable, gc, x, y, width, height, angle1, angle2); +} + +static inline DIDrawable di_get_drawable(GdkDrawable* win) +{ + return gdk_x11_drawable_get_xid(win); +} + +DIGC di_gc_new(GdkWindow* window); +void di_init_display(GtkWidget* w); + +# define di_draw_line(drawable, gc, x1, y1, x2, y2)\ + XDrawLine(display, drawable, gc, x1, y1, x2, y2) +# define di_draw_drawable(dest, gc, src, x1, y1, x2, y2, width, height)\ + XCopyArea(display, src, dest, gc, x1, y1, width, height, x2, y2) +# define di_draw_segments(dest, gc, segs, nsegs)\ + XDrawSegments(display, dest, gc, segs, nsegs) + +#else /* BACKEND_X11 */ + +typedef GdkDrawable *DIDrawable; +typedef GdkGC *DIGC; +typedef GdkSegment DISegment; + +# define di_init_display(x) {} +# define di_widget_configure(x) {} +# define di_gc_set_exposures(gc, value) gdk_gc_set_exposures(gc, value) + +# define di_draw_rectangle(drawable, gc, filled, x, y, width, height)\ + gdk_draw_rectangle(drawable, gc, filled, x, y, width, height) +# define di_draw_line(drawable, gc, x1, y1, x2, y2)\ + gdk_draw_line(drawable, gc, x1, y1, x2, y2) +# define di_draw_arc(drawable, gc, filled, x, y, width, height, angle1, angle2)\ + gdk_draw_arc(drawable, gc, filled, x, y, width, height, angle1, angle2) +# define di_draw_drawable(dest, gc, src, x1, y1, x2, y2, width, height)\ + gdk_draw_drawable(dest, gc, src, x1, y1, x2, y2, width, height) +# define di_draw_segments(dest, gc, segs, nsegs)\ + gdk_draw_segments(dest, gc, segs, nsegs) + +# define di_get_drawable(x) x +# define di_gc_new(window) gdk_gc_new(window) + +#endif /* !BACKEND_X11 */ + +typedef struct _DILayout DILayout; + +void di_update_mask(GdkWindow* window, GdkPixmap* pixmap, DIGC mask_gc, + const gint x, const gint y, const gint width, const gint height, + const gint window_width, const gint window_height); +DILayout* di_layout_new(GtkWidget *widget); +void di_layout_set_drawable(DILayout* layout, GdkDrawable* dest); +void di_draw_text(DILayout* layout, GdkColor* color, + const char* text, const gint len, const gint x, const gint y); +gboolean di_layout_set_font(DILayout* layout, const gchar* fname); +void di_layout_get_pixel_size(DILayout* layout, const gchar* text, + const gint len, gint* x, gint* y); + +#endif /* __DRAW_H */ diff -Nru soundtracker-0.6.8/app/driver.h soundtracker-1.0.2~pre2/app/driver.h --- soundtracker-0.6.8/app/driver.h 2001-01-03 13:24:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/driver.h 2020-09-14 19:56:29.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Common driver module definitions * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,34 +24,44 @@ #include -#include "preferences.h" - typedef struct st_driver { - const char *name; + const char* name; // create new instance of this driver class - void * (*new) (void); + void* (*new)(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)); // destroy instance of this driver class - void (*destroy) (void *d); + void (*destroy)(void* d); // open the driver - gboolean (*open) (void *d); + gboolean (*open)(void* d); // close the driver, release audio device - void (*release) (void *d); + void (*release)(void* d); // get pointer to configuration widget - GtkWidget * (*getwidget) (void *d); + GtkWidget* (*getwidget)(void* d); - // load configuration from provided prefs_node + // load configuration from provided preferences section // can use get/put the functions from preferences.h - gboolean (*loadsettings) (void *d, prefs_node *f); + gboolean (*loadsettings)(void* d, const gchar* section); - // save configuration to specified prefs_node + // save configuration to specified preferences section // can use get/put the functions from preferences.h - gboolean (*savesettings) (void *d, prefs_node *f); + gboolean (*savesettings)(void* d, const gchar* section); + + // activate the driver when it becomes the current one + void (*activate)(void* d, const gchar* group); + + // deactivate the driver + void (*deactivate)(void* d); + + // notifying new data arrival + void (*commit)(void *d); + + // get time offset since first sound output + double (*get_play_time)(void* d); + int (*get_play_rate)(void* d); } st_driver; #endif /* _ST_DRIVER_H */ - diff -Nru soundtracker-0.6.8/app/driver-in.h soundtracker-1.0.2~pre2/app/driver-in.h --- soundtracker-0.6.8/app/driver-in.h 2001-01-03 13:24:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/driver-in.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ - -/* - * The Real SoundTracker - Input (sampling) driver module definitions - * - * Copyright (C) 1999-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef _ST_DRIVER_IN_H -#define _ST_DRIVER_IN_H - -#include - -#include "driver.h" - -typedef struct st_in_driver { - st_driver common; -} st_in_driver; - -void sample_editor_sampled (void *dest, - guint32 count, - int mixfreq, - int mixformat); - -#endif /* _ST_DRIVER_IN_H */ diff -Nru soundtracker-0.6.8/app/driver-out.h soundtracker-1.0.2~pre2/app/driver-out.h --- soundtracker-0.6.8/app/driver-out.h 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/driver-out.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ - -/* - * The Real SoundTracker - Output driver module definitions - * - * Copyright (C) 1998-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef _ST_DRIVER_OUT_H -#define _ST_DRIVER_OUT_H - -#include -#include - -#include "driver.h" - -typedef struct st_out_driver { - st_driver common; - - // get time offset since first sound output - double (*get_play_time) (void *d); - int (*get_play_rate) (void *d); -} st_out_driver; - -/* Install / remove poll() handlers, similar to gdk_input_add() */ -gpointer audio_poll_add (int fd, - GdkInputCondition cond, - GdkInputFunction func, - gpointer data); -void audio_poll_remove (gpointer poll); - -/* Called by the driver to indicate that it accepts new data */ -void audio_play (void); - -/* Called by the playing driver to indicate that the samples belonging - to the specified time are about to be played immediately. (This is - used to synchronize the oscilloscopes) */ -void audio_time (double); - -/* Called by the sampling driver to deliver new data to the audio - subsystem. This API is going to be changed, though (the current - one doesn't permit data other than 16bit/44.1kHz */ -void audio_sampled (gint16 *data, - int count); - -void audio_mix (void *dest, - guint32 count, - int mixfreq, - int mixformat); - -#endif /* _ST_DRIVER_OUT_H */ diff -Nru soundtracker-0.6.8/app/drivers/alsa1x.c soundtracker-1.0.2~pre2/app/drivers/alsa1x.c --- soundtracker-0.6.8/app/drivers/alsa1x.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/alsa1x.c 2020-09-15 17:33:50.000000000 +0000 @@ -0,0 +1,1607 @@ +/* + * The Real SoundTracker - ALSA 1.0.x (input and output) driver, pcm + * - requires ALSA 1.0.0 or newer + * + * Copyright (C) 2006 Yury Aliaev + * Copyright (C) 2019 Michael Krause + * + * The principles were taken from alsa 0.5 driver: + * regards to Kai Vehmanen :-) + * Device detection and error recovery code is based on aplay.c + * Copyright (c) by Jaroslav Kysela + * Based on vplay program by Michael Beck + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#if DRIVER_ALSA + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "audioconfig.h" +#include "driver.h" +#include "driver-thread.h" +#include "errors.h" +#include "gui-subs.h" +#include "mixer.h" +#include "preferences.h" +#include "st-subs.h" + +#define ALSA_PCM_NEW_HW_PARAMS_API +#define ALSA_PCM_NEW_SW_PARAMS_API + +enum { + MONO8 = 0, + STEREO8, + MONO16, + STEREO16, + NUM_FORMATS +}; + +/* + channels + m | s + +---+---+ +bi 8 | 0 | 1 | +ts 16 | 2 | 3 | + +---+---+ +*/ +#define PARAMS_TO_ADDRESS(d) d->stereo + (d->bits >> 2) - 2 +#define FORMAT_16 (d->bigendian ? (d->signedness16 ? SND_PCM_FORMAT_S16_BE : SND_PCM_FORMAT_U16_BE) \ + : (d->signedness16 ? SND_PCM_FORMAT_S16_LE : SND_PCM_FORMAT_U16_LE)) + +typedef struct _alsa_driver { + GtkWidget *configwidget, *devices_dialog; + GtkWidget *alsa_device, *devices_list; + GtkWidget* prefs_resolution_w[2]; + GtkWidget* prefs_channels_w[2]; + GtkWidget* prefs_mixfreq; + GtkWidget *bufsizespin, *bufsizelabel, *periodspin, *periodlabel, *estimatelabel; + + GtkTreeModel* model; + + gint playrate; + gint stereo; /* Not boolean because quadro is expected =) 0 - mono, 1 - stereo. Thnk how to modify PARAMS_TO_ADDRESS at > 2 channels */ + gint bits; + gint buffer_size; /* The exponent of 2: real_buffer_size = 2 ^ buffer_size */ + snd_pcm_uframes_t persizemin, persizemax; + gint num_periods; /* The exponent of 2, see buffer_size */ + + gchar* device; + gint minfreq[NUM_FORMATS], maxfreq[NUM_FORMATS]; + gint minbufsize[NUM_FORMATS], maxbufsize[NUM_FORMATS]; + gboolean can8, can16, canmono, canstereo, signedness8, signedness16, bigendian; + + snd_pcm_t* soundfd; + snd_output_t* output; + snd_pcm_hw_params_t* hwparams; + snd_pcm_sw_params_t* swparams; + void* sndbuf; + gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat); + gboolean firstpoll; + + guint p_mixfreq; + snd_pcm_uframes_t p_fragsize; + guint mf; + + double starttime; + + gboolean verbose; + gboolean hwtest; + gint minfreq_old, maxfreq_old, address_old, bufsize_old; + + gboolean playback; + + DRIVER_THREAD_STUFF +} alsa_driver; + +static const int mixfreqs[] = { 8000, 11025, 16000, 22050, 32000, 44100, 48000, 64000, 88200, 96000 }; +#define NUM_FREQS ARRAY_SIZE(mixfreqs) + +static void prefs_bufsize_changed(GtkWidget* w, alsa_driver* d); +static void prefs_periods_changed(GtkWidget* w, alsa_driver* d); +static void prefs_channels_changed(GtkWidget* w, alsa_driver* d); +static void prefs_resolution_changed(GtkWidget* w, alsa_driver* d); + +static void +alsa_error(const gchar* msg, gint err) +{ + gchar *buf, *converted; + + converted = g_locale_to_utf8(snd_strerror(err), -1, NULL, NULL, NULL); + + buf = g_strdup_printf("%s: %s\n", _(msg), converted); + error_error(buf); + g_free(converted); + g_free(buf); +} + +static void +set_highest_possible(GtkWidget** radiobutton, guint number) +{ + guint i; + + for (i = number - 1; i >= 0; i--) { + if (gtk_widget_is_sensitive(radiobutton[i])) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radiobutton[i]), TRUE); + break; + } + } +} + +static void +update_freqs_list(alsa_driver* d, gboolean set_highest) +{ + GtkTreeIter iter; + guint i; + + guint address = PARAMS_TO_ADDRESS(d); + guint minfreq = d->minfreq[address]; + guint maxfreq = d->maxfreq[address]; + + if (d->bits == 0) + return; + if ((minfreq == d->minfreq_old) && (maxfreq == d->maxfreq_old)) + return; + + gui_list_clear_with_model(d->model); + + for (i = 0; i < NUM_FREQS; i++) { + if ((mixfreqs[i] >= minfreq) && (mixfreqs[i] < maxfreq)) { + gtk_list_store_append(GTK_LIST_STORE(d->model), &iter); + gtk_list_store_set(GTK_LIST_STORE(d->model), &iter, 0, mixfreqs[i], -1); + } + } + gtk_list_store_append(GTK_LIST_STORE(d->model), &iter); + gtk_list_store_set(GTK_LIST_STORE(d->model), &iter, 0, maxfreq, -1); + if (set_highest) + d->playrate = maxfreq; + + d->minfreq_old = minfreq; + d->maxfreq_old = maxfreq; +} + +static void +update_bufsize_range(alsa_driver* d) +{ + guint j = 0, k = 0; + guint i; + guint address = PARAMS_TO_ADDRESS(d); + + if (d->bits == 0) + return; + + i = d->maxbufsize[address]; + while ((i = i >> 1)) + j++; + + i = d->minbufsize[address]; + while ((i = i >> 1)) + k++; + if ((1 << k) - d->minbufsize[address]) + k++; + + gtk_spin_button_set_range(GTK_SPIN_BUTTON(d->bufsizespin), k, j); + if (d->hwtest) + prefs_bufsize_changed(NULL, d); +} + +static inline void +set_highest_freq(alsa_driver* d) +{ + /* It's a nasty Gtk+ hack, GtkListStore->length is marked 'private' but I don't know how to + implement this another way -- mutab0r */ + gtk_combo_box_set_active(GTK_COMBO_BOX(d->prefs_mixfreq), GTK_LIST_STORE(d->model)->length - 1); +} + +static inline void +set_max_spin(GtkWidget* spinbtn) +{ /* I hope 2^17 will be sane for uutomatim maximum buffer size */ + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn), + MIN(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(spinbtn))->upper, 17)); +} + +static inline void +update_periods_range(alsa_driver* d) +{ + guint i = 0; + snd_pcm_uframes_t bufsize = 1 << d->buffer_size; + guint permin = MAX(bufsize / d->persizemax, 2); + guint permax = bufsize / d->persizemin; + + while ((permin = permin >> 1)) + i++; + permin = i; + + i = 0; + while ((permax = permax >> 1)) + i++; + permax = i; + + gtk_spin_button_set_range(GTK_SPIN_BUTTON(d->periodspin), permin, permax); + if (d->hwtest) + prefs_periods_changed(NULL, d); +} + +static void +update_estimate(alsa_driver* d) +{ + char* buf; + snd_pcm_uframes_t periodsize = (1 << d->buffer_size) / (1 << d->num_periods); + + buf = g_strdup_printf(_("%f milliseconds"), 1000 * (double)periodsize / (double)d->playrate); + gtk_label_set_text(GTK_LABEL(d->estimatelabel), buf); + + g_free(buf); +} + +static void +update_controls(alsa_driver* d) +{ + gtk_widget_set_sensitive(d->prefs_resolution_w[0], d->can8); + gtk_widget_set_sensitive(d->prefs_resolution_w[1], d->can16); + set_highest_possible(d->prefs_resolution_w, ARRAY_SIZE(d->prefs_resolution_w)); + gtk_widget_set_sensitive(d->prefs_channels_w[0], d->canmono); + gtk_widget_set_sensitive(d->prefs_channels_w[1], d->canstereo); + set_highest_possible(d->prefs_channels_w, ARRAY_SIZE(d->prefs_channels_w)); + + /* To be sure that all fields are initialized */ + prefs_channels_changed(NULL, d); + prefs_resolution_changed(NULL, d); + update_freqs_list(d, TRUE); + set_highest_freq(d); + update_bufsize_range(d); + set_max_spin(d->bufsizespin); +} + +/* Only update controls, do not set the highest values */ +static void +update_controls_a(alsa_driver* d) +{ + gtk_widget_set_sensitive(d->prefs_resolution_w[0], d->can8); + gtk_widget_set_sensitive(d->prefs_resolution_w[1], d->can16); + gui_set_radio_active(d->prefs_resolution_w, d->bits / 8 - 1); + + gtk_widget_set_sensitive(d->prefs_channels_w[0], d->canmono); + gtk_widget_set_sensitive(d->prefs_channels_w[1], d->canstereo); + gui_set_radio_active(d->prefs_channels_w, d->stereo); + + update_freqs_list(d, FALSE); + if (!gui_set_active_combo_item(d->prefs_mixfreq, d->model, d->playrate)) + set_highest_freq(d); + + update_bufsize_range(d); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(d->bufsizespin), d->buffer_size); + prefs_bufsize_changed(NULL, d); + + update_periods_range(d); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(d->periodspin), d->num_periods); + prefs_periods_changed(d->periodspin, d); +} + +static gint +pcm_open_and_load_hwparams(alsa_driver* d, gboolean force_nonblock) +{ + gint err; + + /* CAPTURE mode for real usage should be opened in blocking mode to avoid strange bugs at some cards */ + if ((err = snd_pcm_open(&(d->soundfd), d->device, + d->playback ? SND_PCM_STREAM_PLAYBACK : SND_PCM_STREAM_CAPTURE, + force_nonblock ? SND_PCM_NONBLOCK : 0)) + < 0) { + alsa_error(N_("ALSA device opening error"), err); + return -1; + } + if ((err = snd_pcm_hw_params_any(d->soundfd, d->hwparams)) < 0) { + alsa_error(N_("hw params obtaining error"), err); + snd_pcm_close(d->soundfd); + return -1; + } + return 0; +} + +static void +check_period_sizes(alsa_driver* d) +{ + /* Almost everything (luckily except sampling frequency) can affect period size: buffer size, + format, channel numbers... So we need to recheck it after at least one of the parameters is + changed -- mutabor */ + gint err; + guint address = PARAMS_TO_ADDRESS(d); + + /* The procedure is time-consuming and may cause audio system lock. So be sure if we really + need it before starting... -- mutab0r */ + if (d->bits == 0) + return; + if ((address == d->address_old) && (d->buffer_size == d->bufsize_old)) + return; + + if (pcm_open_and_load_hwparams(d, TRUE) < 0) + return; + + if ((err = snd_pcm_hw_params_set_format(d->soundfd, d->hwparams, + (d->bits - 8) ? FORMAT_16 : d->signedness8 ? SND_PCM_FORMAT_S8 : SND_PCM_FORMAT_U8)) + < 0) { + alsa_error(N_("Unable to set audio format"), err); + snd_pcm_close(d->soundfd); + return; + } + if ((err = snd_pcm_hw_params_set_channels(d->soundfd, d->hwparams, d->stereo + 1)) < 0) { + alsa_error(N_("Unable to set channels number"), err); + snd_pcm_close(d->soundfd); + return; + } + if (snd_pcm_hw_params_set_buffer_size(d->soundfd, d->hwparams, 1 << d->buffer_size) < 0) { + /* Some soundcards report wrong maximal buffer size (maybe alsa bug). So we should try + to downscale its value before the reporting an error. The spinbutton still may display + the wrong number, but actually the correct value will be implemented.*/ + while ((--d->buffer_size) >= 8) + if (!snd_pcm_hw_params_set_buffer_size(d->soundfd, d->hwparams, 1 << d->buffer_size)) + break; + if (d->buffer_size < 8) { + error_error(_("Unable to set appropriate buffer size")); + snd_pcm_close(d->soundfd); + return; + } + } + + snd_pcm_close(d->soundfd); + + if ((err = snd_pcm_hw_params_get_period_size_min(d->hwparams, &(d->persizemin), 0)) < 0) { + alsa_error(N_("Unable to get minimal period size"), err); + return; + } + if (!d->persizemin) + d->persizemin = 1; + if ((err = snd_pcm_hw_params_get_period_size_max(d->hwparams, &(d->persizemax), 0)) < 0) { + alsa_error(N_("Unable to get maximal period size"), err); + return; + } + + update_periods_range(d); + if (d->playback) + update_estimate(d); + + d->address_old = address; + d->bufsize_old = d->buffer_size; +} + +static gint +set_rates(alsa_driver* d, guint channels, guint format) +{ + guint ratemin, ratemax; + snd_pcm_uframes_t bufsizemin, bufsizemax; + gint err; + + if ((err = snd_pcm_hw_params_set_channels(d->soundfd, d->hwparams, channels)) < 0) { + alsa_error(N_("Unable to set channels number"), err); + return -1; + } + if ((err = snd_pcm_hw_params_get_rate_min(d->hwparams, &ratemin, 0)) < 0) { + alsa_error(N_("Unable to get minimal sample rate"), err); + return -1; + } + d->minfreq[format] = MAX(ratemin, 8000); + + if ((err = snd_pcm_hw_params_get_rate_max(d->hwparams, &ratemax, 0)) < 0) { + alsa_error(N_("Unable to get maximal sample rate"), err); + return -1; + } + d->maxfreq[format] = MIN(ratemax, 96000); + + if ((err = snd_pcm_hw_params_get_buffer_size_min(d->hwparams, &bufsizemin)) < 0) { + alsa_error(N_("Unable to get minimal buffer size"), err); + return -1; + } + d->minbufsize[format] = MAX(bufsizemin, 256); + + if ((err = snd_pcm_hw_params_get_buffer_size_max(d->hwparams, &bufsizemax)) < 0) { + alsa_error(N_("Unable to get maximal buffer size"), err); + return -1; + } + d->maxbufsize[format] = bufsizemax; + + return 0; +} + +static void +device_test(GtkWidget* w, alsa_driver* d) +{ + guint chmin, chmax, i; + gint err; + const gchar* new_device; + gboolean needs_conversion, result; + + d->can8 = FALSE; + d->can16 = FALSE; + d->canmono = FALSE; + d->canstereo = FALSE; + d->signedness8 = FALSE; + d->signedness16 = FALSE; +#ifdef WORDS_BIGENDIAN + d->bigendian = TRUE; +#else + d->bigendian = FALSE; +#endif + + new_device = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(d->alsa_device)); + + if (g_ascii_strcasecmp(d->device, new_device)) { + g_free(d->device); + d->device = g_strdup(new_device); + gui_combo_box_prepend_text_or_set_active(GTK_COMBO_BOX_TEXT(d->alsa_device), d->device, FALSE); + } + + for (i = 0; i < NUM_FORMATS; i++) { + d->minfreq[i] = 8000; + d->maxfreq[i] = 44100; + d->minbufsize[i] = 256; + } + d->maxbufsize[MONO8] = 65536; + d->maxbufsize[STEREO8] = 32768; + d->maxbufsize[MONO16] = 32768; + d->maxbufsize[STEREO16] = 16384; + + if (pcm_open_and_load_hwparams(d, TRUE) < 0) + return; + + if (!snd_pcm_hw_params_test_format(d->soundfd, d->hwparams, SND_PCM_FORMAT_U8)) { + d->can8 = TRUE; + } + if (!snd_pcm_hw_params_test_format(d->soundfd, d->hwparams, SND_PCM_FORMAT_S8)) { + d->can8 = TRUE; + d->signedness8 = TRUE; + } +#ifdef WORDS_BIGENDIAN + needs_conversion = result = snd_pcm_hw_params_test_format(d->soundfd, d->hwparams, SND_PCM_FORMAT_U16_BE); + if (!result) { + d->can16 = TRUE; + } + result = snd_pcm_hw_params_test_format(d->soundfd, d->hwparams, SND_PCM_FORMAT_S16_BE); + needs_conversion = result && needs_conversion; + if (!result) { + d->can16 = TRUE; + d->signedness16 = TRUE; + } + if (needs_conversion) { + d->bigendian = FALSE; + if (!snd_pcm_hw_params_test_format(d->soundfd, d->hwparams, SND_PCM_FORMAT_U16_LE)) { + d->can16 = TRUE; + } + if (!snd_pcm_hw_params_test_format(d->soundfd, d->hwparams, SND_PCM_FORMAT_S16_LE)) { + d->can16 = TRUE; + d->signedness16 = TRUE; + } + } +#else + needs_conversion = result = snd_pcm_hw_params_test_format(d->soundfd, d->hwparams, SND_PCM_FORMAT_U16_LE); + if (!result) { + d->can16 = TRUE; + } + result = snd_pcm_hw_params_test_format(d->soundfd, d->hwparams, SND_PCM_FORMAT_S16_LE); + needs_conversion = result && needs_conversion; + if (!result) { + d->can16 = TRUE; + d->signedness16 = TRUE; + } + if (needs_conversion) { + d->bigendian = TRUE; + if (!snd_pcm_hw_params_test_format(d->soundfd, d->hwparams, SND_PCM_FORMAT_U16_BE)) { + d->can16 = TRUE; + } + if (!snd_pcm_hw_params_test_format(d->soundfd, d->hwparams, SND_PCM_FORMAT_S16_BE)) { + d->can16 = TRUE; + d->signedness16 = TRUE; + } + } +#endif + + if ((err = snd_pcm_hw_params_get_channels_min(d->hwparams, &chmin)) < 0) { + alsa_error(N_("Unable to get minimal channels number"), err); + snd_pcm_close(d->soundfd); + return; + } + if ((err = snd_pcm_hw_params_get_channels_max(d->hwparams, &chmax)) < 0) { + alsa_error(N_("Unable to get maximal channels number"), err); + snd_pcm_close(d->soundfd); + return; + } + if (chmin > 2) { + error_error(_("Both mono and stereo are not supported by ALSA device!")); + snd_pcm_close(d->soundfd); + return; + } + if (chmin == 1) + d->canmono = TRUE; + + if (chmax >= 2) { + d->canstereo = TRUE; + d->stereo = 1; + } else + d->stereo = 0; + + if (d->can8) { + if ((err = snd_pcm_hw_params_set_format(d->soundfd, d->hwparams, + d->signedness8 ? SND_PCM_FORMAT_S8 : SND_PCM_FORMAT_U8)) + < 0) { + alsa_error(N_("Unable to set audio format"), err); + snd_pcm_close(d->soundfd); + return; + } + if (d->canmono) { + if (set_rates(d, 1, MONO8) < 0) { + snd_pcm_close(d->soundfd); + return; + } + } + + if (d->canstereo) { + snd_pcm_close(d->soundfd); + if (pcm_open_and_load_hwparams(d, TRUE) < 0) + return; + if (set_rates(d, 2, STEREO8) < 0) { + snd_pcm_close(d->soundfd); + return; + } + } + } + + if (d->can16) { + snd_pcm_close(d->soundfd); + if (pcm_open_and_load_hwparams(d, TRUE) < 0) + return; + if ((err = snd_pcm_hw_params_set_format(d->soundfd, d->hwparams, + d->signedness16 ? SND_PCM_FORMAT_S16 : SND_PCM_FORMAT_U16)) + < 0) { + alsa_error(N_("Unable to set audio format"), err); + snd_pcm_close(d->soundfd); + return; + } + if (d->canmono) { + if (set_rates(d, 1, MONO16) < 0) { + snd_pcm_close(d->soundfd); + return; + } + } + if (d->canstereo) { + snd_pcm_close(d->soundfd); + if (pcm_open_and_load_hwparams(d, TRUE) < 0) + return; + if (set_rates(d, 2, STEREO16) < 0) { + snd_pcm_close(d->soundfd); + return; + } + } + d->bits = 16; + } else { + d->bits = 8; + } + + if (!d->can16 && !d->can8) { + error_error(_("Neither 8 nor 16 bit resolution is supported by ALSA device!")); + snd_pcm_close(d->soundfd); + return; + } + + snd_pcm_close(d->soundfd); + update_controls(d); +} + +static void +prefs_channels_changed(GtkWidget* w, alsa_driver* d) +{ + gint curr; + + if ((curr = find_current_toggle(d->prefs_channels_w, + ARRAY_SIZE(d->prefs_channels_w))) < 0) + return; + d->stereo = curr; + + if (d->hwtest) { + update_freqs_list(d, TRUE); + update_bufsize_range(d); + set_highest_freq(d); + set_max_spin(d->bufsizespin); + check_period_sizes(d); + } +} + +static void +prefs_resolution_changed(GtkWidget* w, alsa_driver* d) +{ + gint curr; + + if ((curr = find_current_toggle(d->prefs_resolution_w, + ARRAY_SIZE(d->prefs_resolution_w))) < 0) + return; + d->bits = (curr + 1) * 8; + + if (d->hwtest) { + update_freqs_list(d, TRUE); + update_bufsize_range(d); + set_highest_freq(d); + set_max_spin(d->bufsizespin); + check_period_sizes(d); + } +} + +static void +prefs_mixfreq_changed(GtkWidget* w, alsa_driver* d) +{ + GtkTreeIter iter; + + if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(d->prefs_mixfreq), &iter)) + return; + gtk_tree_model_get(d->model, &iter, 0, &d->playrate, -1); + if (d->playback) + update_estimate(d); +} + +static void +prefs_bufsize_changed(GtkWidget* w, alsa_driver* d) +{ + gchar* expression; + + d->buffer_size = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(d->bufsizespin)); + + expression = g_strdup_printf(_(" = %u samples"), 1 << d->buffer_size); + gtk_label_set_text(GTK_LABEL(d->bufsizelabel), expression); + g_free(expression); + + if (d->hwtest) + check_period_sizes(d); +} + +static void +prefs_periods_changed(GtkWidget* w, alsa_driver* d) +{ + gchar* expression; + + d->num_periods = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(d->periodspin)); + + expression = g_strdup_printf(" = %u", 1 << d->num_periods); + gtk_label_set_text(GTK_LABEL(d->periodlabel), expression); + g_free(expression); + + if (d->playback) + update_estimate(d); +} + +static void +prefs_init_from_structure(alsa_driver* d) +{ + d->hwtest = FALSE; + gui_combo_box_prepend_text_or_set_active(GTK_COMBO_BOX_TEXT(d->alsa_device), d->device, TRUE); + update_controls_a(d); + d->hwtest = TRUE; +} + +static void +devices_row_selected(alsa_driver* d) +{ + GtkTreeModel* model; + GtkTreeIter iter; + gchar* dev; + + gtk_widget_hide(d->devices_dialog); + + if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(d->devices_list)), + &model, &iter)) + return; + gtk_tree_model_get(model, &iter, 0, &dev, -1); + gui_combo_box_prepend_text_or_set_active(GTK_COMBO_BOX_TEXT(d->alsa_device), dev, TRUE); + g_free(dev); +} + +static void +devices_response(GtkWidget* w, gint response, alsa_driver* d) +{ + if (response == GTK_RESPONSE_APPLY) + devices_row_selected(d); + else + gtk_widget_hide(d->devices_dialog); +} + +static void device_list(GtkWidget* w, alsa_driver* d) +{ + snd_ctl_t* handle; + gint card, dev; + snd_ctl_card_info_t* info; + snd_pcm_info_t* pcminfo; + const snd_pcm_stream_t stream = d->playback ? SND_PCM_STREAM_PLAYBACK : SND_PCM_STREAM_CAPTURE; + GtkListStore* ls; + GtkTreeIter iter; + GtkWidget* thing; + const gchar* titles[] = { N_("Dev"), N_("Description") }; + + snd_ctl_card_info_alloca(&info); + snd_pcm_info_alloca(&pcminfo); + + card = -1; + if (snd_card_next(&card) < 0 || card < 0) { + error_error(_("No soundcards found...")); + return; + } + + if (!d->devices_dialog) { + thing = d->devices_dialog = gtk_dialog_new_with_buttons(_("Devices list"), GTK_WINDOW(configwindow), GTK_DIALOG_DESTROY_WITH_PARENT, + "Select", GTK_RESPONSE_APPLY, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); + gui_dialog_adjust(thing, GTK_RESPONSE_APPLY); + gtk_widget_set_size_request(thing, -1, 200); + gui_dialog_connect_data(thing, G_CALLBACK(devices_response), d); + + d->devices_list = gui_stringlist_in_scrolled_window(2, titles, gtk_dialog_get_content_area(GTK_DIALOG(thing)), TRUE); + g_signal_connect_swapped(d->devices_list, "row-activated", + G_CALLBACK(devices_row_selected), d); + } + + ls = GUI_GET_LIST_STORE(d->devices_list); + gui_list_clear(d->devices_list); + while (card >= 0) { + gchar name[32]; + + g_snprintf(name, sizeof(name), "hw:%d", card); + if (snd_ctl_open(&handle, name, 0) < 0) { + goto next_card; + } + if (snd_ctl_card_info(handle, info) < 0) { + snd_ctl_close(handle); + goto next_card; + } + dev = -1; + while (1) { + snd_ctl_pcm_next_device(handle, &dev); + if (dev < 0) + break; + snd_pcm_info_set_device(pcminfo, dev); + snd_pcm_info_set_subdevice(pcminfo, 0); + snd_pcm_info_set_stream(pcminfo, stream); + if (snd_ctl_pcm_info(handle, pcminfo) < 0) { + continue; + } + g_snprintf(name, sizeof(name), "hw:%i,%i", card, dev); + gtk_list_store_append(ls, &iter); + gtk_list_store_set(ls, &iter, 0, name, 1, snd_pcm_info_get_name(pcminfo), -1); + } + snd_ctl_close(handle); + next_card: + if (snd_card_next(&card) < 0) { + break; + } + } + gtk_widget_show_all(d->devices_dialog); +} + +static void +alsa_make_config_widgets(alsa_driver* d) +{ + GtkWidget *thing, *mainbox, *box2; + GtkListStore* ls; + GtkCellRenderer* cell; + + static const char* resolutionlabels[] = { N_("8 bit"), N_("16 bit") }; + static const char* channelslabels[] = { N_("Mono"), N_("Stereo") }; + + d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); + + thing = gtk_label_new(d->playback ? _("These changes won't take effect until you restart playing.") + : _("These changes won't take effect until you restart sampling.")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + + thing = gtk_hseparator_new(); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Device:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + + thing = gtk_button_new_with_label("Test"); + gtk_widget_show(thing); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "clicked", + G_CALLBACK(device_test), d); + thing = gtk_button_new_with_label("List"); + gtk_widget_set_tooltip_text(thing, _("List available hardware devices")); + gtk_widget_show(thing); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "clicked", + G_CALLBACK(device_list), d); + d->alsa_device = gtk_combo_box_text_new_with_entry(); + + gtk_widget_show(d->alsa_device); + gtk_box_pack_end(GTK_BOX(box2), d->alsa_device, FALSE, TRUE, 0); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Resolution:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + make_radio_group_full_ext(resolutionlabels, box2, d->prefs_resolution_w, + FALSE, TRUE, (void (*)())prefs_resolution_changed, d, TRUE); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Channels:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + make_radio_group_full_ext(channelslabels, box2, d->prefs_channels_w, + FALSE, TRUE, (void (*)())prefs_channels_changed, d, TRUE); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Frequency [Hz]:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + ls = gtk_list_store_new(1, G_TYPE_UINT); + d->model = GTK_TREE_MODEL(ls); + thing = d->prefs_mixfreq = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ls)); + g_object_unref(ls); + cell = gtk_cell_renderer_text_new(); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(thing), cell, TRUE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(thing), cell, "text", 0, NULL); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, TRUE, 0); + gtk_widget_show(thing); + g_signal_connect(thing, "changed", + G_CALLBACK(prefs_mixfreq_changed), d); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Buffer Size:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + + d->bufsizelabel = thing = gtk_label_new(" = "); + gtk_widget_show(thing); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, FALSE, 0); + + d->bufsizespin = thing = gtk_spin_button_new_with_range(8.0, 16.0, 1.0); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, FALSE, 0); + gtk_widget_show(thing); + g_signal_connect(thing, "value-changed", + G_CALLBACK(prefs_bufsize_changed), d); + + thing = gtk_label_new("2^"); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, FALSE, 0); + gtk_widget_show(thing); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Number of Periods:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + add_empty_hbox(box2); + + d->periodlabel = thing = gtk_label_new(" = "); + gtk_widget_show(thing); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, FALSE, 0); + + d->periodspin = thing = gtk_spin_button_new_with_range(1.0, 4.0, 1.0); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, FALSE, 0); + gtk_widget_show(thing); + g_signal_connect(thing, "value-changed", + G_CALLBACK(prefs_periods_changed), d); + + thing = gtk_label_new("2^"); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, FALSE, 0); + gtk_widget_show(thing); + + if (d->playback) { + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, FALSE, 0); + + thing = gtk_label_new(_("Estimated audio delay:")); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + gtk_widget_show(thing); + + d->estimatelabel = thing = gtk_label_new(""); + gtk_widget_set_tooltip_text(box2, _("The playback will start and stop immediately, " + "but the reaction to the interactive events " + "will happens after this delay.")); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, FALSE, 0); + gtk_widget_show(thing); + } +} + +static GtkWidget* +alsa_getwidget(void* dp) +{ + alsa_driver* const d = dp; + + prefs_init_from_structure(d); + + return d->configwidget; +} + +static void* +alsa_playing (void* data) +{ + alsa_driver* const d = data; + guint size; + snd_pcm_sframes_t towrite; + gint8* buffer; + snd_pcm_status_t* status; + snd_pcm_status_alloca(&status); + + DRIVER_THREAD_LOOP_BEGIN(d, TRUE) + size = d->stereo + (d->bits >> 4); + towrite = d->p_fragsize; + buffer = d->sndbuf; + if (!d->firstpoll) { + while (towrite > 0) { + gint res; + + if (!d->processing) /* Driver is stopping; we should skip sound output */ + break; + snd_pcm_sframes_t w = snd_pcm_writei(d->soundfd, buffer, towrite); + + switch (w) { + case -EAGAIN: + continue; + case -ESTRPIPE: + while ((res = snd_pcm_resume(d->soundfd)) == -EAGAIN) + usleep(100000); /* wait until suspend flag is released */ + if (res < 0) { + if (d->verbose) + fprintf(stderr, "Stream restarting failed\n"); + if ((res = snd_pcm_prepare(d->soundfd)) < 0) { + alsa_error(N_("Unable to restart stream from suspending"), res); + DRIVER_THREAD_ERROR + } + } + continue; + case -EPIPE: + if ((res = snd_pcm_prepare(d->soundfd)) < 0) { + alsa_error(N_("Stream preparation error"), res); + DRIVER_THREAD_ERROR + } + continue; + default: + if (w < 0) { + alsa_error(N_("Sound playing error"), w); + DRIVER_THREAD_ERROR + } + break; + } + if (d->verbose) + g_print("Written: %li from %li samples\n", w, d->p_fragsize); + + towrite -= w; + buffer += w << size; + } + } else { + snd_timestamp_t tstamp; + + snd_pcm_status(d->soundfd, status); + snd_pcm_status_get_tstamp(status, &tstamp); + d->starttime = (double)tstamp.tv_sec + (double)tstamp.tv_usec / 1e6; + + d->firstpoll = FALSE; + } + d->callback(d->sndbuf, d->p_fragsize, d->p_mixfreq, d->mf); + DRIVER_THREAD_LOOP_END(d) + + return NULL; +} + +static void* +alsa_sampling (void *data) +{ + alsa_driver * const d = data; + snd_pcm_sframes_t toread; + guint size; + gint8 *buffer; + + DRIVER_THREAD_LOOP_BEGIN(d, FALSE) + /* Since this parameters could be modified when the driver was waiting */ + toread = d->p_fragsize; + size = d->stereo + (d->bits >> 4); + buffer = d->sndbuf; + + while (toread > 0) { + gint res; + + if (!d->processing) /* Driver is stopping; we should skip sound output */ + break; + snd_pcm_sframes_t w = snd_pcm_readi(d->soundfd, buffer, toread); + switch (w) { + case -EAGAIN: + continue; + case -ESTRPIPE: + while ((res = snd_pcm_resume(d->soundfd)) == -EAGAIN) + usleep(100000); /* wait until suspend flag is released */ + if (res < 0) { + if (d->verbose) + fprintf(stderr, "Stream restarting failed\n"); + if ((res = snd_pcm_prepare(d->soundfd)) < 0) { + alsa_error(N_("Unable to restart stream from suspending"), res); + DRIVER_THREAD_ERROR + } + } + continue; + case -EPIPE: + if ((res = snd_pcm_prepare(d->soundfd)) < 0) { + alsa_error(N_("Stream preparation error"), res); + DRIVER_THREAD_ERROR + } + continue; + default: + if (w < 0) { + alsa_error(N_("Sound recording error"), w); + DRIVER_THREAD_ERROR + } + break; + } + if (d->verbose) + g_print("Read: %li from %li samples\n", w, d->p_fragsize); + + toread -= w; + buffer += w << size; + } + + if (d->processing) + /* TRUE means that the buffer is acquired by sampler and a new one is required */ + if (d->callback(d->sndbuf, d->p_fragsize << size, d->p_mixfreq, d->mf)){ + d->sndbuf = calloc(1 << size, d->p_fragsize); + if (!d->sndbuf) { + error_error(_("ALSA driver: Out of memory error!")); + DRIVER_THREAD_ERROR + } + } + DRIVER_THREAD_LOOP_END(d) + + return NULL; +} + +static alsa_driver* +alsa_new(gboolean playback, + gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) +{ + gint err; + guint i; + alsa_driver* d = g_new(alsa_driver, 1); + + d->callback = callback; + d->device = g_strdup("hw:0,0"); + d->bits = 8; + d->stereo = 0; + d->buffer_size = 14; + d->playrate = 44100; + d->minfreq_old = 0; + d->maxfreq_old = 0; + d->address_old = 0; + d->bufsize_old = 0; + d->num_periods = 1; + d->can8 = TRUE; + d->can16 = TRUE; + d->canmono = TRUE; + d->canstereo = TRUE; + d->signedness8 = FALSE; + d->signedness16 = TRUE; + d->persizemin = 256; + d->persizemax = 8192; +#ifdef WORDS_BIGENDIAN + d->bigendian = TRUE; +#else + d->bigendian = FALSE; +#endif + + for (i = 0; i < NUM_FORMATS; i++) { + d->minfreq[i] = 22050; + d->maxfreq[i] = 44100; + d->minbufsize[i] = 512; + d->maxbufsize[i] = 16384; + } + + d->soundfd = 0; + d->sndbuf = NULL; + d->devices_dialog = NULL; + + d->verbose = FALSE; + d->hwtest = TRUE; + d->playback = playback; + + DRIVER_THREAD_INIT(d) + + if ((err = snd_output_stdio_attach(&(d->output), stdout, 0)) < 0) { + alsa_error(N_("Error attaching sound output"), err); + return NULL; + } + + snd_pcm_hw_params_malloc(&(d->hwparams)); + snd_pcm_sw_params_malloc(&(d->swparams)); + + alsa_make_config_widgets(d); + return d; +} + +static void* +alsa_new_out(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) +{ + return alsa_new(TRUE, callback); +} + +static void* +alsa_new_in(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) +{ + return alsa_new(FALSE, callback); +} + +static void +alsa_destroy(void* dp) +{ + alsa_driver* const d = dp; + + gtk_widget_destroy(d->configwidget); + snd_pcm_hw_params_free(d->hwparams); + snd_pcm_sw_params_free(d->swparams); + DRIVER_THREAD_CLEAR(d) + + g_free(dp); +} + +static void +alsa_release(void* dp) +{ + alsa_driver* const d = dp; + + DRIVER_THREAD_STOP(d) + + if (d->soundfd != 0) { + snd_pcm_drop(d->soundfd); + snd_pcm_close(d->soundfd); + d->soundfd = 0; + } + + DRIVER_THREAD_WAIT(d) + + if (d->sndbuf) { + free(d->sndbuf); + d->sndbuf = NULL; + } +} + +static gboolean +alsa_open(void* dp) +{ + alsa_driver* const d = dp; + gint mf, err; + guint pers; + + if (pcm_open_and_load_hwparams(d, FALSE) < 0) + goto out; + + /* Set channel parameters */ + if ((err = snd_pcm_hw_params_set_access(d->soundfd, d->hwparams, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) { + alsa_error(N_("Unable to set access"), err); + goto out; + } + + if ((err = snd_pcm_hw_params_set_format(d->soundfd, d->hwparams, + (d->bits - 8) ? FORMAT_16 : (d->signedness8 ? SND_PCM_FORMAT_S8 : SND_PCM_FORMAT_U8)) + < 0)) { + alsa_error(N_("Unable to set audio format"), err); + goto out; + } + switch (d->bits) { + case 16: + mf = d->bigendian ? (d->signedness16 ? ST_MIXER_FORMAT_S16_BE : ST_MIXER_FORMAT_U16_BE) + : (d->signedness16 ? ST_MIXER_FORMAT_S16_LE : ST_MIXER_FORMAT_U16_LE); + break; + case 8: + default: + mf = d->signedness8 ? ST_MIXER_FORMAT_S8 : ST_MIXER_FORMAT_U8; + break; + } + + if ((err = snd_pcm_hw_params_set_channels(d->soundfd, d->hwparams, d->stereo + 1)) < 0) { + alsa_error(N_("Unable to set channels number"), err); + goto out; + } + if ((d->stereo)) { + mf |= ST_MIXER_FORMAT_STEREO; + } + d->mf = mf; + + d->p_mixfreq = d->playrate; + if ((err = snd_pcm_hw_params_set_rate_near(d->soundfd, d->hwparams, &(d->p_mixfreq), NULL)) < 0) { + alsa_error(N_("Unable to set sample rate"), err); + goto out; + } + + if (snd_pcm_hw_params_set_buffer_size(d->soundfd, d->hwparams, 1 << d->buffer_size) < 0) { + /* Some soundcards report wrong maximal buffer size (maybe alsa bug). So we should try + to downscale its value before the reporting an error. The spinbutton still may display + the wrong number, but actually the correct value will be implemented.*/ + while ((--d->buffer_size) >= 8) + if (!snd_pcm_hw_params_set_buffer_size(d->soundfd, d->hwparams, 1 << d->buffer_size)) + break; + if (d->buffer_size < 8) { + error_error(_("Unable to set appropriate buffer size")); + goto out; + } + } + pers = 1 << d->num_periods; + if ((err = snd_pcm_hw_params_set_periods_near(d->soundfd, d->hwparams, &pers, NULL)) < 0) { + alsa_error(N_("Unable to set periods number"), err); + goto out; + } + if ((err = snd_pcm_hw_params_get_period_size(d->hwparams, &(d->p_fragsize), NULL)) < 0) { + alsa_error(N_("Unable to get period size"), err); + goto out; + } + + if ((err = snd_pcm_hw_params(d->soundfd, d->hwparams))) { + alsa_error(N_("Error setting hw parameters"), err); + goto out; + } + + /* The following piece of code is directly c_n_p'ed from the ALSA pcm example (whith a little adopting) */ + /* get the current swparams */ + err = snd_pcm_sw_params_current(d->soundfd, d->swparams); + if (err < 0) { + alsa_error(d->playback ? N_("Unable to determine current swparams for playback") + : N_("Unable to determine current swparams for capture"), + err); + goto out; + } + /* start the transfer when all fragments except the last one are filled */ + err = snd_pcm_sw_params_set_start_threshold(d->soundfd, d->swparams, d->p_fragsize * (pers - 1)); + if (err < 0) { + alsa_error(d->playback ? N_("Unable to set start threshold mode for playback") + : N_("Unable to set start threshold mode for capture"), + err); + goto out; + } + /* allow the transfer when at least period_size samples can be processed */ + err = snd_pcm_sw_params_set_avail_min(d->soundfd, d->swparams, d->p_fragsize); + if (err < 0) { + alsa_error(d->playback ? N_("Unable to set avail min for playback") + : N_("Unable to set avail min for capture"), + err); + goto out; + } + + // need to enable timestamping explicitly, otherwise alsa_get_play_time() + // will always return zero and the pattern display will not scroll in sync + // with the audio output, at least on my (MK's) machine. + err = snd_pcm_sw_params_set_tstamp_mode(d->soundfd, d->swparams, SND_PCM_TSTAMP_ENABLE); + if (err < 0) { + alsa_error(d->playback ? N_("Unable to enable timestamping for playback") + : N_("Unable to enable timestamping for capture"), + err); + goto out; + } + err = snd_pcm_sw_params_set_tstamp_type(d->soundfd, d->swparams, SND_PCM_TSTAMP_TYPE_MONOTONIC); + if (err < 0) { + alsa_error(d->playback ? N_("Unable to set timestamp type for playback") + : N_("Unable to set timestamp type for capture"), + err); + goto out; + } + + /* write the parameters to the playback device */ + err = snd_pcm_sw_params(d->soundfd, d->swparams); + if (err < 0) { + alsa_error(d->playback ? N_("Unable to set sw params for playback") + : N_("Unable to set sw params for capture"), + err); + goto out; + } + + err = snd_pcm_prepare(d->soundfd); + if (err < 0) { + alsa_error(d->playback ? N_("Unable to prepare playback") + : N_("Unable to prepare capture"), + err); + goto out; + } + + /* Get buffering parameters */ + if (d->verbose) + snd_pcm_dump(d->soundfd, d->output); + + d->sndbuf = calloc((d->stereo + 1) << (d->bits >> 4), d->p_fragsize); + if (!d->sndbuf) { + error_error(_("ALSA driver: Out of memory error!")); + goto out; + } + + if (!d->playback) { + /* Recording requires explicit start */ + if ((err = snd_pcm_start(d->soundfd)) < 0) { + alsa_error(N_("Unable to start capture"), err); + goto out; + } + } + /* Waking up the driver thread */ + d->firstpoll = TRUE; + DRIVER_THREAD_RESUME(d) + return TRUE; + +out: + alsa_release(dp); + return FALSE; +} + +static double +alsa_get_play_time(void* dp) +{ + alsa_driver* const d = dp; + double play_time; + + snd_pcm_status_t* status; + snd_pcm_status_alloca(&status); + if (!status) { + g_message("alsa_get_play_time(): can't allocate status"); + return 0; + } + if (snd_pcm_status(d->soundfd, status)) { + g_message("alsa_get_play_time(): can't retrieve status"); + return 0; + } + + snd_timestamp_t tstamp; + snd_pcm_status_get_tstamp(status, &tstamp); + play_time = (double)tstamp.tv_sec + (double)tstamp.tv_usec / 1e6 - d->starttime; + + g_debug("alsa_get_play_time() -> %lf", play_time); + + return play_time; +} + +static inline int +alsa_get_play_rate(void* d) +{ + alsa_driver* const dp = d; + return (int)dp->playrate; +} + +static gboolean +alsa_loadsettings(void* dp, + const gchar* f) +{ + alsa_driver* const d = dp; + gchar *buf, **devlist; + gsize size, i; + gint* tmp; + + if ((buf = prefs_get_string(f, "alsa1x-device", NULL))) { + g_free(d->device); + d->device = buf; + } + + d->bits = prefs_get_int(f, "alsa1x-resolution", d->bits); + d->stereo = prefs_get_int(f, "alsa1x-stereo", d->stereo); + d->playrate = prefs_get_int(f, "alsa1x-playrate", d->playrate); + d->buffer_size = prefs_get_int(f, "alsa1x-buffer_size", d->buffer_size); + d->num_periods = prefs_get_int(f, "alsa1x-num_periods", d->num_periods); + d->can8 = prefs_get_bool(f, "alsa1x-can_8", d->can8); + d->can16 = prefs_get_bool(f, "alsa1x-can_16", d->can16); + d->canmono = prefs_get_bool(f, "alsa1x-can_mono", d->canmono); + d->canstereo = prefs_get_bool(f, "alsa1x-can_stereo", d->canstereo); + d->signedness8 = prefs_get_bool(f, "alsa1x-signedness_8", d->signedness8); + d->signedness16 = prefs_get_bool(f, "alsa1x-signedness_16", d->signedness16); + d->bigendian = prefs_get_bool(f, "alsa1x-bigendian", d->bigendian); + d->persizemin = prefs_get_int(f, "alsa1x-period_size_min", d->persizemin); + d->persizemax = prefs_get_int(f, "alsa1x-period_size_max", d->persizemax); + + tmp = prefs_get_int_array(f, "alsa1x-minfreq", &size); + for (i = 0; i < MIN(NUM_FORMATS, size); i++) { + d->minfreq[i] = tmp[i]; + } + if (size) + g_free(tmp); + + tmp = prefs_get_int_array(f, "alsa1x-maxfreq", &size); + for (i = 0; i < MIN(NUM_FORMATS, size); i++) { + d->maxfreq[i] = tmp[i]; + } + if (size) + g_free(tmp); + + tmp = prefs_get_int_array(f, "alsa1x-minbufsize", &size); + for (i = 0; i < MIN(NUM_FORMATS, size); i++) { + d->minbufsize[i] = tmp[i]; + } + if (size) + g_free(tmp); + + tmp = prefs_get_int_array(f, "alsa1x-maxbufsize", &size); + for (i = 0; i < MIN(NUM_FORMATS, size); i++) { + d->maxbufsize[i] = tmp[i]; + } + if (size) + g_free(tmp); + + d->verbose = prefs_get_bool(f, "alsa1x-verbose", d->verbose); + + devlist = prefs_get_str_array(f, "alsa1x-device-list", &size); + for (i = 0; i < size; i++) + gui_combo_box_prepend_text_or_set_active(GTK_COMBO_BOX_TEXT(d->alsa_device), devlist[i], FALSE); + + gtk_combo_box_set_active(GTK_COMBO_BOX(d->alsa_device), 0); + + prefs_init_from_structure(d); + + return TRUE; +} + +typedef struct _svd_data { + GString* str; + guint counter; +} svd_data; + +static gboolean +save_dev_func(GtkTreeModel* model, GtkTreePath* path, GtkTreeIter* iter, gpointer data) +{ + svd_data* sdd = (svd_data*)data; + gchar* item_str = NULL; + + if (sdd->counter++ >= 10) + return TRUE; + + gtk_tree_model_get(model, iter, 0, &item_str, -1); + if (!item_str) + return TRUE; /* Aborting due to error */ + + g_string_append_printf(sdd->str, "%s;", item_str); + g_free(item_str); + return FALSE; +} + +static gboolean +alsa_savesettings(void* dp, + const gchar* f) +{ + alsa_driver* const d = dp; + svd_data sdd; + + prefs_put_string(f, "alsa1x-device", d->device); + + prefs_put_int(f, "alsa1x-resolution", d->bits); + prefs_put_int(f, "alsa1x-stereo", d->stereo); + prefs_put_int(f, "alsa1x-playrate", d->playrate); + prefs_put_int(f, "alsa1x-buffer_size", d->buffer_size); + prefs_put_int(f, "alsa1x-num_periods", d->num_periods); + prefs_put_bool(f, "alsa1x-can_8", d->can8); + prefs_put_bool(f, "alsa1x-can_16", d->can16); + prefs_put_bool(f, "alsa1x-can_mono", d->canmono); + prefs_put_bool(f, "alsa1x-can_stereo", d->canstereo); + prefs_put_bool(f, "alsa1x-signedness_8", d->signedness8); + prefs_put_bool(f, "alsa1x-signedness_16", d->signedness16); + prefs_put_bool(f, "alsa1x-bigendian", d->bigendian); + prefs_put_int(f, "alsa1x-period_size_min", d->persizemin); + prefs_put_int(f, "alsa1x-period_size_max", d->persizemax); + + prefs_put_int_array(f, "alsa1x-minfreq", d->minfreq, NUM_FORMATS); + prefs_put_int_array(f, "alsa1x-maxfreq", d->maxfreq, NUM_FORMATS); + prefs_put_int_array(f, "alsa1x-minbufsize", d->minbufsize, NUM_FORMATS); + prefs_put_int_array(f, "alsa1x-maxbufsize", d->maxbufsize, NUM_FORMATS); + + prefs_put_bool(f, "alsa1x-verbose", d->verbose); + + sdd.counter = 0; + sdd.str = g_string_new(""); + gtk_tree_model_foreach(gtk_combo_box_get_model(GTK_COMBO_BOX(d->alsa_device)), save_dev_func, &sdd); + prefs_put_string(f, "alsa1x-device-list", sdd.str->str); + g_string_free(sdd.str, TRUE); + + return TRUE; +} + +static void +alsa_activate (void* dp, const gchar* group) +{ + alsa_driver * const d = dp; + + DRIVER_THREAD_NEW(d, d->playback ? alsa_playing : alsa_sampling, dp, + d->playback ? "Playback" : "Sampling") +} + +static void +alsa_deactivate (void* dp) +{ + alsa_driver * const d = dp; + + DRIVER_THREAD_CANCEL(d) +} + +static void +alsa_commit (void* dp) +{ + alsa_driver * const d = dp; + + DRIVER_THREAD_COMMIT(d) +} + +st_driver driver_out_alsa1x = { + "ALSA-1.0.x Output", + + alsa_new_out, + alsa_destroy, + + alsa_open, + alsa_release, + + alsa_getwidget, + alsa_loadsettings, + alsa_savesettings, + + alsa_activate, + alsa_deactivate, + + alsa_commit, + + alsa_get_play_time, + alsa_get_play_rate +}; + +st_driver driver_in_alsa1x = { + "ALSA-1.0.x Input", + + alsa_new_in, + alsa_destroy, + + alsa_open, + alsa_release, + + alsa_getwidget, + alsa_loadsettings, + alsa_savesettings, + + alsa_activate, + alsa_deactivate, + + NULL, + + alsa_get_play_time, + alsa_get_play_rate +}; + +#endif /* DRIVER_ALSA */ diff -Nru soundtracker-0.6.8/app/drivers/alsa2-input.c soundtracker-1.0.2~pre2/app/drivers/alsa2-input.c --- soundtracker-0.6.8/app/drivers/alsa2-input.c 2001-01-03 13:24:11.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/alsa2-input.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,554 +0,0 @@ - -/* - * The Real SoundTracker - ALSA (input) driver - * - requires ALSA 0.5.0 or newer - * - * Copyright (C) 2000 Kai Vehmanen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#if DRIVER_ALSA_050 - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "i18n.h" -#include "driver-in.h" -#include "mixer.h" -#include "errors.h" -#include "gui-subs.h" -#include "preferences.h" - -typedef struct alsa_driver { - GtkWidget *configwidget; - GtkWidget *prefs_resolution_w[2]; - GtkWidget *prefs_channels_w[2]; - GtkWidget *prefs_mixfreq_w[4]; - GtkWidget *bufsizespin_w, *bufsizelabel_w, *estimatelabel_w; - GtkWidget *alsacardspin_w, *alsadevicespin_w; - - int playrate; - int stereo; - int bits; - int fragsize; - int numfrags; - int mf; - - int card_number; - int device_number; - - GMutex *configmutex; - - snd_pcm_t *soundfd; - void *sndbuf; - int polltag; - int firstpoll; - - int p_resolution; - int p_channels; - int p_mixfreq; - int p_fragsize; - - double outtime; - double playtime; -} alsa_driver; - -static const int mixfreqs[] = { 8000, 16000, 22050, 44100, -1 }; - -static void -alsa_poll_ready_sampling (gpointer data, - gint source, - GdkInputCondition condition) -{ - alsa_driver * const d = data; - int size; - - size = (d->stereo + 1) * (d->bits / 8) * d->fragsize; - - size = snd_pcm_read(d->soundfd, d->sndbuf, size); - - sample_editor_sampled(d->sndbuf, d->fragsize, d->playrate, d->mf); -} - -static void -prefs_init_from_structure (alsa_driver *d) -{ - int i; - - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_resolution_w[d->p_resolution / 8 - 2]), TRUE); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_channels_w[d->p_channels - 1]), TRUE); - - for(i = 0; mixfreqs[i] != -1; i++) { - if(d->p_mixfreq == mixfreqs[i]) - break; - } - if(mixfreqs[i] == -1) { - i = 3; - } - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_mixfreq_w[i]), TRUE); - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(d->bufsizespin_w), d->p_fragsize); -} - -static void -prefs_update_estimate (alsa_driver *d) -{ - char buf[64]; - - sprintf(buf, _("(%d bytes)"), d->p_fragsize * d->p_channels * d->p_resolution / 8); - gtk_label_set_text(GTK_LABEL(d->bufsizelabel_w), buf); - - sprintf(buf, _("Estimated audio delay: %f microseconds"), (double)(1000 * d->p_fragsize / d->p_mixfreq)); - gtk_label_set_text(GTK_LABEL(d->estimatelabel_w), buf); -} - -static void -prefs_resolution_changed (void *a, - alsa_driver *d) -{ - d->p_resolution = (find_current_toggle(d->prefs_resolution_w, 2) + 1) * 16; - prefs_update_estimate(d); -} - -static void -prefs_channels_changed (void *a, - alsa_driver *d) -{ - d->p_channels = find_current_toggle(d->prefs_channels_w, 2) + 1; - prefs_update_estimate(d); -} - -static void -prefs_mixfreq_changed (void *a, - alsa_driver *d) -{ - d->p_mixfreq = mixfreqs[find_current_toggle(d->prefs_mixfreq_w, 4)]; - prefs_update_estimate(d); -} - -static void -prefs_fragsize_changed (GtkSpinButton *w, - alsa_driver *d) -{ - d->p_fragsize = gtk_spin_button_get_value_as_int(w); - prefs_update_estimate(d); -} - -static void -prefs_alsacard_changed (GtkSpinButton *w, - alsa_driver *d) -{ - d->card_number = gtk_spin_button_get_value_as_int(w); -} - -static void -prefs_alsadevice_changed (GtkSpinButton *w, - alsa_driver *d) -{ - d->device_number = gtk_spin_button_get_value_as_int(w); -} - -static void -alsa_make_config_widgets (alsa_driver *d) -{ - GtkWidget *thing, *mainbox, *box2, *box3, *alsa_card, *alsa_device; -/* static const char *resolutionlabels[] = { "8 bits", "16 bits", NULL }; */ -/* static const char *channelslabels[] = { "Mono", "Stereo", NULL }; */ -/* static const char *mixfreqlabels[] = { "8000", "16000", "22050", "44100", NULL }; */ - - static const char *resolutionlabels[] = { "16 bits", NULL }; - static const char *channelslabels[] = { "Mono", NULL }; - static const char *mixfreqlabels[] = { "8000", "16000", "22050", "44100", NULL }; - - - d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - - thing = gtk_label_new(_("These changes won't take effect until you restart playing.")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Resolution:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(resolutionlabels, box2, d->prefs_resolution_w, FALSE, TRUE, (void(*)())prefs_resolution_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Channels:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(channelslabels, box2, d->prefs_channels_w, FALSE, TRUE, (void(*)())prefs_channels_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Frequency [Hz]:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(mixfreqlabels, box2, d->prefs_mixfreq_w, FALSE, TRUE, (void(*)())prefs_mixfreq_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Buffer Size:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - - box3 = gtk_vbox_new(FALSE, 2); - gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0); - gtk_widget_show(box3); - - d->bufsizespin_w = thing = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(d->fragsize, 64.0, 16384.0, 64.0, 0.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect (GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(prefs_fragsize_changed), d); - - d->bufsizelabel_w = thing = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - add_empty_hbox(box2); - d->estimatelabel_w = thing = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - add_empty_hbox(box2); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - alsa_card = gtk_label_new(_("ALSA card number:")); - gtk_widget_show(alsa_card); - gtk_box_pack_start(GTK_BOX(box2), alsa_card, FALSE, TRUE, 0); - add_empty_hbox(box2); - - d->alsacardspin_w = alsa_card = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(d->card_number, 0.0, 256.0, 1.0, 1.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box2), alsa_card, FALSE, TRUE, 0); - gtk_widget_show(alsa_card); - gtk_signal_connect (GTK_OBJECT(alsa_card), "changed", - GTK_SIGNAL_FUNC(prefs_alsacard_changed), d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - alsa_device = gtk_label_new(_("ALSA device number:")); - gtk_widget_show(alsa_device); - gtk_box_pack_start(GTK_BOX(box2), alsa_device, FALSE, TRUE, 0); - add_empty_hbox(box2); - - d->alsadevicespin_w = alsa_device = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(d->device_number, 0.0, 256.0, 1.0, 1.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box2), alsa_device, FALSE, TRUE, 0); - gtk_widget_show(alsa_device); - gtk_signal_connect (GTK_OBJECT(alsa_device), "changed", - GTK_SIGNAL_FUNC(prefs_alsadevice_changed), d); - - prefs_init_from_structure(d); -} - -static GtkWidget * -alsa_getwidget (void *dp) -{ - alsa_driver * const d = dp; - - return d->configwidget; -} - -static void * -alsa_new (void) -{ - alsa_driver *d = g_new(alsa_driver, 1); - - d->card_number = 0; - d->device_number = 0; - - d->p_mixfreq = 44100; - d->p_channels = 1; - d->p_resolution = 16; - d->p_fragsize = 512; - d->soundfd = 0; - d->sndbuf = NULL; - d->polltag = 0; - d->configmutex = g_mutex_new(); - - alsa_make_config_widgets(d); - - return d; -} - -static void -alsa_destroy (void *dp) -{ - alsa_driver * const d = dp; - - gtk_widget_destroy(d->configwidget); - g_mutex_free(d->configmutex); - - g_free(dp); -} - -static void -alsa_release (void *dp) -{ - alsa_driver * const d = dp; - - free(d->sndbuf); - d->sndbuf = NULL; - - /* audio_poll_remove(d->polltag); */ - gdk_input_remove(d->polltag); - d->polltag = 0; - - if(d->soundfd != 0) { - /* snd_pcm_drain_capture(d->soundfd); */ - snd_pcm_close(d->soundfd); - d->soundfd = 0; - } -} - -static gboolean -alsa_open (void *dp) -{ - alsa_driver * const d = dp; - int mf, err; - - snd_pcm_format_t pf; - - // snd_pcm_channel_info_t pcm_info; - snd_pcm_channel_params_t pp; - snd_pcm_channel_setup_t setup; - - snd_pcm_channel_flush(d->soundfd, SND_PCM_CHANNEL_CAPTURE); - memset(&pp, 0, sizeof(pp)); - - err = snd_pcm_open(&(d->soundfd), d->card_number, d->device_number, SND_PCM_OPEN_CAPTURE); - if (err != 0) { - char buf[256]; - sprintf(buf, _("Couldn't open ALSA device for sound output (card:%d, device:%d):\n%s"), - d->card_number, d->device_number, snd_strerror(err)); - error_error(buf); - goto out; - } - - // --- - // Set non-blocking mode. - // --- - // snd_pcm_nonblock_mode(d->soundfd, 1); - - d->outtime = 0; - d->bits = 0; - mf = 0; - - // -- - // Set channel parameters - // -- - pp.mode = SND_PCM_MODE_BLOCK; - pp.channel = SND_PCM_CHANNEL_CAPTURE; - pp.start_mode = SND_PCM_START_DATA; - pp.stop_mode = SND_PCM_STOP_STOP; - - // --- - // Select audio format - // --- - memset(&pf, 0, sizeof(pf)); - pf.interleave = 1; - if (d->p_resolution == 16) { - pf.format = SND_PCM_SFMT_S16_LE; - d->bits = 16; - mf = ST_MIXER_FORMAT_S16_LE; - } - else { - pf.format = SND_PCM_SFMT_U8; - d->bits = 8; - mf = ST_MIXER_FORMAT_S8; - } - - pf.rate = d->p_mixfreq; - d->playrate = d->p_mixfreq; - - if(d->p_channels == 2) { - d->stereo = 1; - pf.voices = d->p_channels; - mf |= ST_MIXER_FORMAT_STEREO; - } - else { - pf.voices = d->p_channels; - d->stereo = 0; - } - d->mf = mf; - memcpy(&pp.format, &pf, sizeof(pf)); - - // pp.buf.block.frag_size = d->p_fragsize * pf.voices * (d->bits / 8); - pp.buf.block.frag_size = d->p_fragsize; - pp.buf.block.frags_max = -1; - pp.buf.block.frags_min = 1; - - err = snd_pcm_channel_params(d->soundfd, &pp); - if (err < 0) { - error_error(_("Required output-channel parameters not supported.\n")); - goto out; - } - - if (snd_pcm_channel_prepare(d->soundfd, SND_PCM_CHANNEL_CAPTURE) < 0) { - error_error(_("Unable to prepare ALSA channel.\n")); - goto out; - } - - // --- - // Get buffering parameters - // --- - - memset(&setup, 0, sizeof(setup)); - setup.mode = SND_PCM_MODE_BLOCK; - setup.channel = SND_PCM_CHANNEL_CAPTURE; - err = snd_pcm_channel_setup(d->soundfd, &setup); - if (err < 0) { - error_error(_("Alsa setup error.\n")); - goto out; - } - - // snd_pcm_channel_status(d->soundfd, &pbstat); - // d->fragsize = pbstat.fragment_size; - - d->numfrags = setup.buf.block.frags; - d->fragsize = setup.buf.block.frag_size; - /* fprintf(stderr, "Numfrags: %d\n", d->numfrags); - fprintf(stderr, "Fragsize: %d\n", d->fragsize); */ - - d->sndbuf = calloc(1, d->fragsize); - - if(d->stereo == 1) { - d->fragsize /= 2; - } - if(d->bits == 16) { - d->fragsize /= 2; - } - - d->polltag = gdk_input_add(snd_pcm_file_descriptor(d->soundfd, SND_PCM_CHANNEL_CAPTURE), GDK_INPUT_READ, alsa_poll_ready_sampling, d); - /* d->firstpoll = TRUE; */ - /* d->firstpoll = TRUE; */ - /* d->playtime = 0; */ - - return TRUE; - - out: - alsa_release(dp); - return FALSE; -} - -static double -alsa_get_play_time (void *dp) -{ - alsa_driver * const d = dp; - struct timeval tv; - double curtime; - - gettimeofday(&tv, NULL); - curtime = tv.tv_sec + tv.tv_usec / 1e6; - - return d->playtime + curtime - d->outtime - d->numfrags * ((double) d->fragsize / d->playrate); -} - -static gboolean -alsa_loadsettings (void *dp, - prefs_node *f) -{ - alsa_driver * const d = dp; - - prefs_get_int(f, "alsa-resolution", &d->p_resolution); - prefs_get_int(f, "alsa-channels", &d->p_channels); - prefs_get_int(f, "alsa-mixfreq", &d->p_mixfreq); - prefs_get_int(f, "alsa-fragsize", &d->p_fragsize); - - prefs_get_int(f, "alsa-card", &d->card_number); - prefs_get_int(f, "alsa-device", &d->device_number); - - prefs_init_from_structure(d); - - return TRUE; -} - -static gboolean -alsa_savesettings (void *dp, - prefs_node *f) -{ - alsa_driver * const d = dp; - - prefs_put_int(f, "alsa-resolution", d->p_resolution); - prefs_put_int(f, "alsa-channels", d->p_channels); - prefs_put_int(f, "alsa-mixfreq", d->p_mixfreq); - prefs_put_int(f, "alsa-fragsize", d->p_fragsize); - - prefs_put_int(f, "alsa-card", d->card_number); - prefs_put_int(f, "alsa-device", d->device_number); - - return TRUE; -} - -st_in_driver driver_in_alsa2 = { - { "ALSA-pcm2 Sampling", - - alsa_new, - alsa_destroy, - - alsa_open, - alsa_release, - - alsa_getwidget, - /* alsa_loadsettings, - alsa_savesettings, */ - } - /* , */ - - /* alsa_get_play_time, */ -}; - -#endif /* DRIVER_ALSA */ diff -Nru soundtracker-0.6.8/app/drivers/alsa2-output.c soundtracker-1.0.2~pre2/app/drivers/alsa2-output.c --- soundtracker-0.6.8/app/drivers/alsa2-output.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/alsa2-output.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,569 +0,0 @@ -/* - * The Real SoundTracker - ALSA (output) driver, pcm2 - * - requires ALSA 0.5.0 or newer - * - * Copyright (C) 1999-2000 Kai Vehmanen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#if DRIVER_ALSA_050 - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "i18n.h" -#include "driver-out.h" -#include "mixer.h" -#include "errors.h" -#include "gui-subs.h" -#include "preferences.h" - -typedef struct alsa_driver { - GtkWidget *configwidget; - GtkWidget *prefs_resolution_w[2]; - GtkWidget *prefs_channels_w[2]; - GtkWidget *prefs_mixfreq_w[4]; - GtkWidget *bufsizespin_w, *bufsizelabel_w, *estimatelabel_w; - GtkWidget *alsacardspin_w, *alsadevicespin_w; - - int playrate; - int stereo; - int bits; - int fragsize; - int numfrags; - int mf; - - int card_number; - int device_number; - - GMutex *configmutex; - - snd_pcm_t *soundfd; - void *sndbuf; - gpointer polltag; - int firstpoll; - - int p_resolution; - int p_channels; - int p_mixfreq; - int p_fragsize; - - double outtime; - double playtime; -} alsa_driver; - -static const int mixfreqs[] = { 8000, 16000, 22050, 44100, -1 }; - -static void -alsa_poll_ready_playing (gpointer data, - gint source, - GdkInputCondition condition) -{ - alsa_driver * const d = data; - int byte_count = (d->stereo + 1) * (d->bits / 8) * d->fragsize; - int w; - struct timeval tv; - - w = snd_pcm_write(d->soundfd, d->sndbuf, byte_count); - if(w != byte_count) { - if(w < 0) { - fprintf(stderr, "driver_alsa2: write() returned -1.\n--- \"%s\"", snd_strerror(w)); - } else { - fprintf(stderr, "driver_alsa2: write not completely done.\n"); - } - } - - gettimeofday(&tv, NULL); - d->outtime = tv.tv_sec + tv.tv_usec / 1e6; - d->playtime += (double) d->fragsize / d->playrate; - - audio_mix(d->sndbuf, d->fragsize, d->playrate, d->mf); -} - -static void -prefs_init_from_structure (alsa_driver *d) -{ - int i; - - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_resolution_w[d->p_resolution / 8 - 1]), TRUE); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_channels_w[d->p_channels - 1]), TRUE); - - for(i = 0; mixfreqs[i] != -1; i++) { - if(d->p_mixfreq == mixfreqs[i]) - break; - } - if(mixfreqs[i] == -1) { - i = 3; - } - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_mixfreq_w[i]), TRUE); - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(d->bufsizespin_w), d->p_fragsize); -} - -static void -prefs_update_estimate (alsa_driver *d) -{ - char buf[64]; - - sprintf(buf, _("(%d bytes)"), d->p_fragsize * d->p_channels * d->p_resolution / 8); - gtk_label_set_text(GTK_LABEL(d->bufsizelabel_w), buf); - - sprintf(buf, _("Estimated audio delay: %f milliseconds"), (1000.0 * (double)(d->p_fragsize) / d->p_mixfreq)); - gtk_label_set_text(GTK_LABEL(d->estimatelabel_w), buf); -} - -static void -prefs_resolution_changed (void *a, - alsa_driver *d) -{ - d->p_resolution = (find_current_toggle(d->prefs_resolution_w, 2) + 1) * 8; - prefs_update_estimate(d); -} - -static void -prefs_channels_changed (void *a, - alsa_driver *d) -{ - d->p_channels = find_current_toggle(d->prefs_channels_w, 2) + 1; - prefs_update_estimate(d); -} - -static void -prefs_mixfreq_changed (void *a, - alsa_driver *d) -{ - d->p_mixfreq = mixfreqs[find_current_toggle(d->prefs_mixfreq_w, 4)]; - prefs_update_estimate(d); -} - -static void -prefs_fragsize_changed (GtkSpinButton *w, - alsa_driver *d) -{ - d->p_fragsize = gtk_spin_button_get_value_as_int(w); - prefs_update_estimate(d); -} - -static void -prefs_alsacard_changed (GtkSpinButton *w, - alsa_driver *d) -{ - d->card_number = gtk_spin_button_get_value_as_int(w); -} - -static void -prefs_alsadevice_changed (GtkSpinButton *w, - alsa_driver *d) -{ - d->device_number = gtk_spin_button_get_value_as_int(w); -} - -static void -alsa_make_config_widgets (alsa_driver *d) -{ - GtkWidget *thing, *mainbox, *box2, *box3, *alsa_card, *alsa_device; - static const char *resolutionlabels[] = { "8 bits", "16 bits", NULL }; - static const char *channelslabels[] = { "Mono", "Stereo", NULL }; - static const char *mixfreqlabels[] = { "8000", "16000", "22050", "44100", NULL }; - - d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - - thing = gtk_label_new(_("These changes won't take effect until you restart playing.")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Resolution:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(resolutionlabels, box2, d->prefs_resolution_w, FALSE, TRUE, (void(*)())prefs_resolution_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Channels:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(channelslabels, box2, d->prefs_channels_w, FALSE, TRUE, (void(*)())prefs_channels_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Frequency [Hz]:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(mixfreqlabels, box2, d->prefs_mixfreq_w, FALSE, TRUE, (void(*)())prefs_mixfreq_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Buffer Size:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - - box3 = gtk_vbox_new(FALSE, 2); - gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0); - gtk_widget_show(box3); - - d->bufsizespin_w = thing = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(d->fragsize, 64.0, 16384.0, 64.0, 0.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect (GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(prefs_fragsize_changed), d); - - d->bufsizelabel_w = thing = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - add_empty_hbox(box2); - d->estimatelabel_w = thing = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - add_empty_hbox(box2); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - alsa_card = gtk_label_new(_("ALSA card number:")); - gtk_widget_show(alsa_card); - gtk_box_pack_start(GTK_BOX(box2), alsa_card, FALSE, TRUE, 0); - add_empty_hbox(box2); - - d->alsacardspin_w = alsa_card = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(d->card_number, 0.0, 256.0, 1.0, 1.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box2), alsa_card, FALSE, TRUE, 0); - gtk_widget_show(alsa_card); - gtk_signal_connect (GTK_OBJECT(alsa_card), "changed", - GTK_SIGNAL_FUNC(prefs_alsacard_changed), d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - alsa_device = gtk_label_new(_("ALSA device number:")); - gtk_widget_show(alsa_device); - gtk_box_pack_start(GTK_BOX(box2), alsa_device, FALSE, TRUE, 0); - add_empty_hbox(box2); - - d->alsadevicespin_w = alsa_device = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(d->device_number, 0.0, 256.0, 1.0, 1.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box2), alsa_device, FALSE, TRUE, 0); - gtk_widget_show(alsa_device); - gtk_signal_connect (GTK_OBJECT(alsa_device), "changed", - GTK_SIGNAL_FUNC(prefs_alsadevice_changed), d); - - prefs_init_from_structure(d); -} - -static GtkWidget * -alsa_getwidget (void *dp) -{ - alsa_driver * const d = dp; - - return d->configwidget; -} - -static void * -alsa_new (void) -{ - alsa_driver *d = g_new(alsa_driver, 1); - - d->card_number = 0; - d->device_number = 0; - - d->p_mixfreq = 44100; - d->p_channels = 2; - d->p_resolution = 16; - d->p_fragsize = 256; - d->soundfd = 0; - d->sndbuf = NULL; - d->polltag = NULL; - d->configmutex = g_mutex_new(); - - alsa_make_config_widgets(d); - - return d; -} - -static void -alsa_destroy (void *dp) -{ - alsa_driver * const d = dp; - - gtk_widget_destroy(d->configwidget); - g_mutex_free(d->configmutex); - - g_free(dp); -} - -static void -alsa_release (void *dp) -{ - alsa_driver * const d = dp; - - free(d->sndbuf); - d->sndbuf = NULL; - - audio_poll_remove(d->polltag); - d->polltag = NULL; - - if(d->soundfd != 0) { - snd_pcm_playback_drain(d->soundfd); - snd_pcm_close(d->soundfd); - d->soundfd = 0; - } -} - -static gboolean -alsa_open (void *dp) -{ - alsa_driver * const d = dp; - int mf, err; - - snd_pcm_format_t pf; - - // snd_pcm_channel_info_t pcm_info; - snd_pcm_channel_params_t pp; - snd_pcm_channel_setup_t setup; - - snd_pcm_channel_flush(d->soundfd, SND_PCM_CHANNEL_PLAYBACK); - memset(&pp, 0, sizeof(pp)); - - err = snd_pcm_open(&(d->soundfd), d->card_number, d->device_number, SND_PCM_OPEN_PLAYBACK); - if (err != 0) { - char buf[256]; - sprintf(buf, _("Couldn't open ALSA device for sound output (card:%d, device:%d):\n%s"), - d->card_number, d->device_number, snd_strerror(err)); - error_error(buf); - goto out; - } - - // --- - // Set non-blocking mode. - // --- - // snd_pcm_nonblock_mode(d->soundfd, 1); - - d->outtime = 0; - d->bits = 0; - mf = 0; - - // -- - // Set channel parameters - // -- - pp.mode = SND_PCM_MODE_BLOCK; - pp.channel = SND_PCM_CHANNEL_PLAYBACK; - pp.start_mode = SND_PCM_START_FULL; - pp.stop_mode = SND_PCM_STOP_ROLLOVER; - - // --- - // Select audio format - // --- - memset(&pf, 0, sizeof(pf)); - pf.interleave = 1; - if (d->p_resolution == 16) { - pf.format = SND_PCM_SFMT_S16_LE; - d->bits = 16; - mf = ST_MIXER_FORMAT_S16_LE; - } - else { - pf.format = SND_PCM_SFMT_U8; - d->bits = 8; - mf = ST_MIXER_FORMAT_S8; - } - - pf.rate = d->p_mixfreq; - d->playrate = d->p_mixfreq; - - if(d->p_channels == 2) { - d->stereo = 1; - pf.voices = d->p_channels; - mf |= ST_MIXER_FORMAT_STEREO; - } - else { - pf.voices = d->p_channels; - d->stereo = 0; - } - d->mf = mf; - memcpy(&pp.format, &pf, sizeof(pf)); - - // pp.buf.block.frag_size = d->p_fragsize * pf.voices * (d->bits / 8); - pp.buf.block.frag_size = d->p_fragsize; - pp.buf.block.frags_max = -1; - pp.buf.block.frags_min = 1; - - err = snd_pcm_channel_params(d->soundfd, &pp); - if (err < 0) { - error_error(_("Required output-channel parameters not supported.\n")); - goto out; - } - - if (snd_pcm_channel_prepare(d->soundfd, SND_PCM_CHANNEL_PLAYBACK) < 0) { - error_error(_("Unable to prepare ALSA channel.\n")); - goto out; - } - - // --- - // Get buffering parameters - // --- - - memset(&setup, 0, sizeof(setup)); - setup.mode = SND_PCM_MODE_BLOCK; - setup.channel = SND_PCM_CHANNEL_PLAYBACK; - err = snd_pcm_channel_setup(d->soundfd, &setup); - if (err < 0) { - error_error(_("Alsa setup error.\n")); - goto out; - } - - // snd_pcm_channel_status(d->soundfd, &pbstat); - // d->fragsize = pbstat.fragment_size; - - d->numfrags = setup.buf.block.frags; - d->fragsize = setup.buf.block.frag_size; - /* fprintf(stderr, "Numfrags: %d\n", d->numfrags); - fprintf(stderr, "Fragsize: %d\n", d->fragsize); */ - - d->sndbuf = calloc(1, d->fragsize); - - if(d->stereo == 1) { - d->fragsize /= 2; - } - if(d->bits == 16) { - d->fragsize /= 2; - } - - d->polltag = audio_poll_add(snd_pcm_file_descriptor(d->soundfd, SND_PCM_CHANNEL_PLAYBACK), GDK_INPUT_WRITE, alsa_poll_ready_playing, d); - /* d->firstpoll = TRUE; */ - d->firstpoll = TRUE; - d->playtime = 0; - - return TRUE; - - out: - alsa_release(dp); - return FALSE; -} - -static double -alsa_get_play_time (void *dp) -{ - alsa_driver * const d = dp; - struct timeval tv; - double curtime; - - // snd_pcm_channel_status_t status; - // snd_pcm_channel_status(d->soundfd, &status); - // curtime = status.stime.tv_sec + status.stime.tv_usec / 1e6; - - gettimeofday(&tv, NULL); - curtime = tv.tv_sec + tv.tv_usec / 1e6; - - return d->playtime + curtime - d->outtime - d->numfrags * ((double) d->fragsize / d->playrate); -} - -static inline int -alsa_get_play_rate (void *d) -{ - alsa_driver * const dp = d; - return dp->playrate; -} - -static gboolean -alsa_loadsettings (void *dp, - prefs_node *f) -{ - alsa_driver * const d = dp; - - prefs_get_int(f, "alsa-resolution", &d->p_resolution); - prefs_get_int(f, "alsa-channels", &d->p_channels); - prefs_get_int(f, "alsa-mixfreq", &d->p_mixfreq); - prefs_get_int(f, "alsa-fragsize", &d->p_fragsize); - - prefs_get_int(f, "alsa-card", &d->card_number); - prefs_get_int(f, "alsa-device", &d->device_number); - - prefs_init_from_structure(d); - - return TRUE; -} - -static gboolean -alsa_savesettings (void *dp, - prefs_node *f) -{ - alsa_driver * const d = dp; - - prefs_put_int(f, "alsa-resolution", d->p_resolution); - prefs_put_int(f, "alsa-channels", d->p_channels); - prefs_put_int(f, "alsa-mixfreq", d->p_mixfreq); - prefs_put_int(f, "alsa-fragsize", d->p_fragsize); - - prefs_put_int(f, "alsa-card", d->card_number); - prefs_put_int(f, "alsa-device", d->device_number); - - return TRUE; -} - -st_out_driver driver_out_alsa2 = { - { "ALSA-pcm2 Output", - - alsa_new, - alsa_destroy, - - alsa_open, - alsa_release, - - alsa_getwidget, - alsa_loadsettings, - alsa_savesettings, - }, - - alsa_get_play_time, - alsa_get_play_rate -}; - -#endif /* DRIVER_ALSA */ diff -Nru soundtracker-0.6.8/app/drivers/alsa-input.c soundtracker-1.0.2~pre2/app/drivers/alsa-input.c --- soundtracker-0.6.8/app/drivers/alsa-input.c 2001-01-03 13:24:11.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/alsa-input.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,535 +0,0 @@ - -/* - * The Real SoundTracker - ALSA (input) driver - * - requires ALSA 0.4.0 or newer - * - * Copyright (C) 1999-2000 Kai Vehmanen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#if DRIVER_ALSA - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "i18n.h" -#include "driver-in.h" -#include "mixer.h" -#include "errors.h" -#include "gui-subs.h" -#include "preferences.h" - -typedef struct alsa_driver { - GtkWidget *configwidget; - GtkWidget *prefs_resolution_w[2]; - GtkWidget *prefs_channels_w[2]; - GtkWidget *prefs_mixfreq_w[4]; - GtkWidget *bufsizespin_w, *bufsizelabel_w, *estimatelabel_w; - GtkWidget *alsacardspin_w, *alsadevicespin_w; - - int playrate; - int stereo; - int bits; - int fragsize; - int numfrags; - int mf; - - int card_number; - int device_number; - - GMutex *configmutex; - - snd_pcm_t *soundfd; - void *sndbuf; - int polltag; - int firstpoll; - - int p_resolution; - int p_channels; - int p_mixfreq; - int p_fragsize; - - double outtime; - double playtime; -} alsa_driver; - -static const int mixfreqs[] = { 8000, 16000, 22050, 44100, -1 }; - -static void -alsa_poll_ready_sampling (gpointer data, - gint source, - GdkInputCondition condition) -{ - alsa_driver * const d = data; - int size; - - size = (d->stereo + 1) * (d->bits / 8) * d->fragsize; - - size = snd_pcm_read(d->soundfd, d->sndbuf, size); - - sample_editor_sampled(d->sndbuf, d->fragsize, d->playrate, d->mf); -} - -static void -prefs_init_from_structure (alsa_driver *d) -{ - int i; - - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_resolution_w[d->p_resolution / 8 - 2]), TRUE); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_channels_w[d->p_channels - 1]), TRUE); - - for(i = 0; mixfreqs[i] != -1; i++) { - if(d->p_mixfreq == mixfreqs[i]) - break; - } - if(mixfreqs[i] == -1) { - i = 3; - } - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_mixfreq_w[i]), TRUE); - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(d->bufsizespin_w), d->p_fragsize); -} - -static void -prefs_update_estimate (alsa_driver *d) -{ - char buf[64]; - - sprintf(buf, _("(%d bytes)"), d->p_fragsize * d->p_channels * d->p_resolution / 8); - gtk_label_set_text(GTK_LABEL(d->bufsizelabel_w), buf); - - sprintf(buf, _("Estimated audio delay: %f microseconds"), (double)(1000 * d->p_fragsize / d->p_mixfreq)); - gtk_label_set_text(GTK_LABEL(d->estimatelabel_w), buf); -} - -static void -prefs_resolution_changed (void *a, - alsa_driver *d) -{ - d->p_resolution = (find_current_toggle(d->prefs_resolution_w, 2) + 1) * 16; - prefs_update_estimate(d); -} - -static void -prefs_channels_changed (void *a, - alsa_driver *d) -{ - d->p_channels = find_current_toggle(d->prefs_channels_w, 2) + 1; - prefs_update_estimate(d); -} - -static void -prefs_mixfreq_changed (void *a, - alsa_driver *d) -{ - d->p_mixfreq = mixfreqs[find_current_toggle(d->prefs_mixfreq_w, 4)]; - prefs_update_estimate(d); -} - -static void -prefs_fragsize_changed (GtkSpinButton *w, - alsa_driver *d) -{ - d->p_fragsize = gtk_spin_button_get_value_as_int(w); - prefs_update_estimate(d); -} - -static void -prefs_alsacard_changed (GtkSpinButton *w, - alsa_driver *d) -{ - d->card_number = gtk_spin_button_get_value_as_int(w); -} - -static void -prefs_alsadevice_changed (GtkSpinButton *w, - alsa_driver *d) -{ - d->device_number = gtk_spin_button_get_value_as_int(w); -} - -static void -alsa_make_config_widgets (alsa_driver *d) -{ - GtkWidget *thing, *mainbox, *box2, *box3, *alsa_card, *alsa_device; -/* static const char *resolutionlabels[] = { "8 bits", "16 bits", NULL }; */ -/* static const char *channelslabels[] = { "Mono", "Stereo", NULL }; */ -/* static const char *mixfreqlabels[] = { "8000", "16000", "22050", "44100", NULL }; */ - - static const char *resolutionlabels[] = { "16 bits", NULL }; - static const char *channelslabels[] = { "Mono", NULL }; - static const char *mixfreqlabels[] = { "8000", "16000", "22050", "44100", NULL }; - - - d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - - thing = gtk_label_new(_("These changes won't take effect until you restart playing.")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Resolution:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(resolutionlabels, box2, d->prefs_resolution_w, FALSE, TRUE, (void(*)())prefs_resolution_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Channels:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(channelslabels, box2, d->prefs_channels_w, FALSE, TRUE, (void(*)())prefs_channels_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Frequency [Hz]:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(mixfreqlabels, box2, d->prefs_mixfreq_w, FALSE, TRUE, (void(*)())prefs_mixfreq_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Buffer Size:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - - box3 = gtk_vbox_new(FALSE, 2); - gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0); - gtk_widget_show(box3); - - d->bufsizespin_w = thing = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(d->fragsize, 64.0, 16384.0, 64.0, 0.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect (GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(prefs_fragsize_changed), d); - - d->bufsizelabel_w = thing = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - add_empty_hbox(box2); - d->estimatelabel_w = thing = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - add_empty_hbox(box2); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - alsa_card = gtk_label_new(_("ALSA card number:")); - gtk_widget_show(alsa_card); - gtk_box_pack_start(GTK_BOX(box2), alsa_card, FALSE, TRUE, 0); - add_empty_hbox(box2); - - d->alsacardspin_w = alsa_card = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(d->card_number, 0.0, 256.0, 1.0, 1.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box2), alsa_card, FALSE, TRUE, 0); - gtk_widget_show(alsa_card); - gtk_signal_connect (GTK_OBJECT(alsa_card), "changed", - GTK_SIGNAL_FUNC(prefs_alsacard_changed), d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - alsa_device = gtk_label_new(_("ALSA device number:")); - gtk_widget_show(alsa_device); - gtk_box_pack_start(GTK_BOX(box2), alsa_device, FALSE, TRUE, 0); - add_empty_hbox(box2); - - d->alsadevicespin_w = alsa_device = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(d->device_number, 0.0, 256.0, 1.0, 1.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box2), alsa_device, FALSE, TRUE, 0); - gtk_widget_show(alsa_device); - gtk_signal_connect (GTK_OBJECT(alsa_device), "changed", - GTK_SIGNAL_FUNC(prefs_alsadevice_changed), d); - - prefs_init_from_structure(d); -} - -static GtkWidget * -alsa_getwidget (void *dp) -{ - alsa_driver * const d = dp; - - return d->configwidget; -} - -static void * -alsa_new (void) -{ - alsa_driver *d = g_new(alsa_driver, 1); - - d->card_number = 0; - d->device_number = 0; - - d->p_mixfreq = 44100; - d->p_channels = 1; - d->p_resolution = 16; - d->p_fragsize = 2048; // 512; - d->soundfd = 0; - d->sndbuf = NULL; - d->polltag = 0; - d->configmutex = g_mutex_new(); - - alsa_make_config_widgets(d); - - return d; -} - -static void -alsa_destroy (void *dp) -{ - alsa_driver * const d = dp; - - gtk_widget_destroy(d->configwidget); - g_mutex_free(d->configmutex); - - g_free(dp); -} - -static void -alsa_release (void *dp) -{ - alsa_driver * const d = dp; - - free(d->sndbuf); - d->sndbuf = NULL; - - /* audio_poll_remove(d->polltag); */ - gdk_input_remove(d->polltag); - d->polltag = 0; - - if(d->soundfd != 0) { - /* snd_pcm_drain_capture(d->soundfd); */ - snd_pcm_close(d->soundfd); - d->soundfd = 0; - } -} - -static gboolean -alsa_open (void *dp) -{ - alsa_driver * const d = dp; - int mf; - - snd_pcm_format_t pf; - snd_pcm_capture_info_t pcm_info; - snd_pcm_capture_params_t pp; - snd_pcm_capture_status_t pbstat; - - // int err = snd_pcm_open(&(d->soundfd), d->card_number, d->device_number, - // SND_PCM_OPEN_CAPTURE); - int err = snd_pcm_open(&(d->soundfd), 0, 0, SND_PCM_OPEN_CAPTURE); - - if (err != 0) { - char buf[256]; - sprintf(buf, _("Couldn't open ALSA device for sound input (card:%d, device:%d):\n%s"), - d->card_number, d->device_number, snd_strerror(err)); - error_error(buf); - goto out; - } - - // --- - // Set non-blocking mode. - // --- - - snd_pcm_block_mode(d->soundfd, 1); // enable block mode - - d->bits = 0; - mf = 0; - - // --- - // Select audio format - // --- - - memset(&pf, 0, sizeof(pf)); - - if (d->p_resolution == 16) { - pf.format = SND_PCM_SFMT_S16_LE; - d->bits = 16; - mf = ST_MIXER_FORMAT_S16_LE; - } - else { - pf.format = SND_PCM_SFMT_U8; - d->bits = 8; - mf = ST_MIXER_FORMAT_S8; - } - -/* if(d->p_channels == 2) { */ -/* d->stereo = 1; */ -/* pf.channels = d->p_channels; */ -/* mf |= ST_MIXER_FORMAT_STEREO; */ -/* } */ -/* else { */ -/* pf.channels = d->p_channels; */ -/* d->stereo = 0; */ -/* } */ - - d->stereo = 0; - pf.channels = 1; - - pf.rate = d->p_mixfreq; - d->playrate = d->p_mixfreq; - mf = ST_MIXER_FORMAT_S16_LE; - d->mf = mf; - - err = snd_pcm_capture_format(d->soundfd, &pf); - if (err < 0) { - error_error(_("Required sound output format not supported.\n")); - goto out; - } - - snd_pcm_capture_info(d->soundfd, &pcm_info); - - memset(&pp, 0, sizeof(pp)); - - pp.fragment_size = d->p_fragsize * pf.channels * d->bits / 8; - pp.fragments_min = 1; - - err = snd_pcm_capture_params(d->soundfd, &pp); - if (err < 0) { - error_error(_("Required sound output parameters not supported.\n")); - goto out; - } - - snd_pcm_capture_status(d->soundfd, &pbstat); - /* d->numfrags = pbstat.fragments; */ - d->numfrags = 1; - d->fragsize = pbstat.fragment_size; - - d->sndbuf = calloc(1, d->fragsize); - - if(d->stereo == 1) { - d->fragsize /= 2; - } - if(d->bits == 16) { - d->fragsize /= 2; - } - - d->polltag = gdk_input_add(snd_pcm_file_descriptor(d->soundfd), GDK_INPUT_READ, alsa_poll_ready_sampling, d); - // d->firstpoll = TRUE; - // d->playtime = 0; - - return TRUE; - - out: - alsa_release(dp); - return FALSE; -} - -static double -alsa_get_play_time (void *dp) -{ - alsa_driver * const d = dp; - struct timeval tv; - double curtime; - - gettimeofday(&tv, NULL); - curtime = tv.tv_sec + tv.tv_usec / 1e6; - - return d->playtime + curtime - d->outtime - d->numfrags * ((double) d->fragsize / d->playrate); -} - -static gboolean -alsa_loadsettings (void *dp, - prefs_node *f) -{ - alsa_driver * const d = dp; - - prefs_get_int(f, "alsa-resolution", &d->p_resolution); - prefs_get_int(f, "alsa-channels", &d->p_channels); - prefs_get_int(f, "alsa-mixfreq", &d->p_mixfreq); - prefs_get_int(f, "alsa-fragsize", &d->p_fragsize); - - prefs_get_int(f, "alsa-card", &d->card_number); - prefs_get_int(f, "alsa-device", &d->device_number); - - prefs_init_from_structure(d); - - return TRUE; -} - -static gboolean -alsa_savesettings (void *dp, - prefs_node *f) -{ - alsa_driver * const d = dp; - - prefs_put_int(f, "alsa-resolution", d->p_resolution); - prefs_put_int(f, "alsa-channels", d->p_channels); - prefs_put_int(f, "alsa-mixfreq", d->p_mixfreq); - prefs_put_int(f, "alsa-fragsize", d->p_fragsize); - - prefs_put_int(f, "alsa-card", d->card_number); - prefs_put_int(f, "alsa-device", d->device_number); - - return TRUE; -} - -st_in_driver driver_in_alsa = { - { "ALSA Sampling", - - alsa_new, - alsa_destroy, - - alsa_open, - alsa_release, - - alsa_getwidget, - /* alsa_loadsettings, - alsa_savesettings, */ - } - /* , */ - - /* alsa_get_play_time, */ -}; - -#endif /* DRIVER_ALSA */ diff -Nru soundtracker-0.6.8/app/drivers/alsa-output.c soundtracker-1.0.2~pre2/app/drivers/alsa-output.c --- soundtracker-0.6.8/app/drivers/alsa-output.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/alsa-output.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,549 +0,0 @@ -/* - * The Real SoundTracker - ALSA (output) driver - * - requires ALSA 0.4.0 or newer - * - * Copyright (C) 1999-2000 Kai Vehmanen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#if DRIVER_ALSA - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "i18n.h" -#include "driver-out.h" -#include "mixer.h" -#include "errors.h" -#include "gui-subs.h" -#include "preferences.h" - -typedef struct alsa_driver { - GtkWidget *configwidget; - GtkWidget *prefs_resolution_w[2]; - GtkWidget *prefs_channels_w[2]; - GtkWidget *prefs_mixfreq_w[4]; - GtkWidget *bufsizespin_w, *bufsizelabel_w, *estimatelabel_w; - GtkWidget *alsacardspin_w, *alsadevicespin_w; - - int playrate; - int stereo; - int bits; - int fragsize; - int numfrags; - int mf; - - int card_number; - int device_number; - - GMutex *configmutex; - - snd_pcm_t *soundfd; - void *sndbuf; - gpointer polltag; - int firstpoll; - - int p_resolution; - int p_channels; - int p_mixfreq; - int p_fragsize; - - double outtime; - double playtime; -} alsa_driver; - -static const int mixfreqs[] = { 8000, 16000, 22050, 44100, -1 }; - -static void -alsa_poll_ready_playing (gpointer data, - gint source, - GdkInputCondition condition) -{ - alsa_driver * const d = data; - int byte_count = (d->stereo + 1) * (d->bits / 8) * d->fragsize; - int w; - struct timeval tv; - - if((w = snd_pcm_write(d->soundfd, d->sndbuf, byte_count) != byte_count)) { - if(w == -1) { - fprintf(stderr, "driver_alsa: write() returned -1.\n"); - } else { - fprintf(stderr, "driver_alsa: write not completely done.\n"); - } - } - - gettimeofday(&tv, NULL); - d->outtime = tv.tv_sec + tv.tv_usec / 1e6; - d->playtime += (double) d->fragsize / d->playrate; - - audio_mix(d->sndbuf, d->fragsize, d->playrate, d->mf); -} - -static void -prefs_init_from_structure (alsa_driver *d) -{ - int i; - - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_resolution_w[d->p_resolution / 8 - 1]), TRUE); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_channels_w[d->p_channels - 1]), TRUE); - - for(i = 0; mixfreqs[i] != -1; i++) { - if(d->p_mixfreq == mixfreqs[i]) - break; - } - if(mixfreqs[i] == -1) { - i = 3; - } - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_mixfreq_w[i]), TRUE); - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(d->bufsizespin_w), d->p_fragsize); -} - -static void -prefs_update_estimate (alsa_driver *d) -{ - char buf[64]; - - sprintf(buf, _("(%d bytes)"), d->p_fragsize * d->p_channels * d->p_resolution / 8); - gtk_label_set_text(GTK_LABEL(d->bufsizelabel_w), buf); - - sprintf(buf, _("Estimated audio delay: %f milliseconds"), (double)(1000 * (d->p_fragsize) / d->p_mixfreq)); - gtk_label_set_text(GTK_LABEL(d->estimatelabel_w), buf); -} - -static void -prefs_resolution_changed (void *a, - alsa_driver *d) -{ - d->p_resolution = (find_current_toggle(d->prefs_resolution_w, 2) + 1) * 8; - prefs_update_estimate(d); -} - -static void -prefs_channels_changed (void *a, - alsa_driver *d) -{ - d->p_channels = find_current_toggle(d->prefs_channels_w, 2) + 1; - prefs_update_estimate(d); -} - -static void -prefs_mixfreq_changed (void *a, - alsa_driver *d) -{ - d->p_mixfreq = mixfreqs[find_current_toggle(d->prefs_mixfreq_w, 4)]; - prefs_update_estimate(d); -} - -static void -prefs_fragsize_changed (GtkSpinButton *w, - alsa_driver *d) -{ - char buf[30]; - - d->p_fragsize = gtk_spin_button_get_value_as_int(w); - prefs_update_estimate(d); -} - -static void -prefs_alsacard_changed (GtkSpinButton *w, - alsa_driver *d) -{ - d->card_number = gtk_spin_button_get_value_as_int(w); -} - -static void -prefs_alsadevice_changed (GtkSpinButton *w, - alsa_driver *d) -{ - d->device_number = gtk_spin_button_get_value_as_int(w); -} - -static void -alsa_make_config_widgets (alsa_driver *d) -{ - GtkWidget *thing, *mainbox, *box2, *box3, *alsa_card, *alsa_device; - static const char *resolutionlabels[] = { "8 bits", "16 bits", NULL }; - static const char *channelslabels[] = { "Mono", "Stereo", NULL }; - static const char *mixfreqlabels[] = { "8000", "16000", "22050", "44100", NULL }; - - d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - - thing = gtk_label_new(_("These changes won't take effect until you restart playing.")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Resolution:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(resolutionlabels, box2, d->prefs_resolution_w, FALSE, TRUE, (void(*)())prefs_resolution_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Channels:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(channelslabels, box2, d->prefs_channels_w, FALSE, TRUE, (void(*)())prefs_channels_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Frequency [Hz]:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(mixfreqlabels, box2, d->prefs_mixfreq_w, FALSE, TRUE, (void(*)())prefs_mixfreq_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Buffer Size:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - - box3 = gtk_vbox_new(FALSE, 2); - gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0); - gtk_widget_show(box3); - - d->bufsizespin_w = thing = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(d->fragsize, 64.0, 16384.0, 64.0, 0.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect (GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(prefs_fragsize_changed), d); - - d->bufsizelabel_w = thing = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - add_empty_hbox(box2); - d->estimatelabel_w = thing = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - add_empty_hbox(box2); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - alsa_card = gtk_label_new(_("ALSA card number:")); - gtk_widget_show(alsa_card); - gtk_box_pack_start(GTK_BOX(box2), alsa_card, FALSE, TRUE, 0); - add_empty_hbox(box2); - - d->alsacardspin_w = alsa_card = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(d->card_number, 0.0, 256.0, 1.0, 1.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box2), alsa_card, FALSE, TRUE, 0); - gtk_widget_show(alsa_card); - gtk_signal_connect (GTK_OBJECT(alsa_card), "changed", - GTK_SIGNAL_FUNC(prefs_alsacard_changed), d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - alsa_device = gtk_label_new(_("ALSA device number:")); - gtk_widget_show(alsa_device); - gtk_box_pack_start(GTK_BOX(box2), alsa_device, FALSE, TRUE, 0); - add_empty_hbox(box2); - - d->alsadevicespin_w = alsa_device = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(d->device_number, 0.0, 256.0, 1.0, 1.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box2), alsa_device, FALSE, TRUE, 0); - gtk_widget_show(alsa_device); - gtk_signal_connect (GTK_OBJECT(alsa_device), "changed", - GTK_SIGNAL_FUNC(prefs_alsadevice_changed), d); - - prefs_init_from_structure(d); -} - -static GtkWidget * -alsa_getwidget (void *dp) -{ - alsa_driver * const d = dp; - - return d->configwidget; -} - -static void * -alsa_new (void) -{ - alsa_driver *d = g_new(alsa_driver, 1); - - d->card_number = 0; - d->device_number = 0; - - d->p_mixfreq = 44100; - d->p_channels = 2; - d->p_resolution = 16; - d->p_fragsize = 2048; - d->soundfd = 0; - d->sndbuf = NULL; - d->polltag = NULL; - d->configmutex = g_mutex_new(); - - alsa_make_config_widgets(d); - - return d; -} - -static void -alsa_destroy (void *dp) -{ - alsa_driver * const d = dp; - - gtk_widget_destroy(d->configwidget); - g_mutex_free(d->configmutex); - - g_free(dp); -} - -static void -alsa_release (void *dp) -{ - alsa_driver * const d = dp; - - free(d->sndbuf); - d->sndbuf = NULL; - - audio_poll_remove(d->polltag); - d->polltag = NULL; - - if(d->soundfd != 0) { - snd_pcm_drain_playback(d->soundfd); - snd_pcm_close(d->soundfd); - d->soundfd = 0; - } -} - -static gboolean -alsa_open (void *dp) -{ - alsa_driver * const d = dp; - int mf; - - snd_pcm_format_t pf; - snd_pcm_playback_info_t pcm_info; - snd_pcm_playback_params_t pp; - snd_pcm_playback_status_t pbstat; - - int err = snd_pcm_open(&(d->soundfd), d->card_number, d->device_number, - SND_PCM_OPEN_PLAYBACK); - if (err != 0) { - char buf[256]; - sprintf(buf, _("Couldn't open ALSA device for sound output (card:%d, device:%d):\n%s"), - d->card_number, d->device_number, snd_strerror(err)); - error_error(buf); - goto out; - } - - // --- - // Set non-blocking mode. - // --- - - snd_pcm_block_mode(d->soundfd, 0); // enable block mode - - d->outtime = 0; - d->bits = 0; - mf = 0; - - // --- - // Select audio format - // --- - - memset(&pf, 0, sizeof(pf)); - - if (d->p_resolution == 16) { - pf.format = SND_PCM_SFMT_S16_LE; - d->bits = 16; - mf = ST_MIXER_FORMAT_S16_LE; - } - else { - pf.format = SND_PCM_SFMT_U8; - d->bits = 8; - mf = ST_MIXER_FORMAT_S8; - } - - if(d->p_channels == 2) { - d->stereo = 1; - pf.channels = d->p_channels; - mf |= ST_MIXER_FORMAT_STEREO; - } - else { - pf.channels = d->p_channels; - d->stereo = 0; - } - - pf.rate = d->p_mixfreq; - d->playrate = d->p_mixfreq; - d->mf = mf; - - err = snd_pcm_playback_format(d->soundfd, &pf); - if (err < 0) { - error_error(_("Required sound output format not supported.\n")); - goto out; - } - - snd_pcm_playback_info(d->soundfd, &pcm_info); - - memset(&pp, 0, sizeof(pp)); - - pp.fragment_size = d->p_fragsize * pf.channels * (d->bits / 8); - pp.fragments_max = 1; - // pp.fragments_max = 16pcm_info.buffer_size / pp.fragment_size; - pp.fragments_room = 1; - - err = snd_pcm_playback_params(d->soundfd, &pp); - if (err < 0) { - error_error(_("Required sound output parameters not supported.\n")); - goto out; - } - - snd_pcm_playback_status(d->soundfd, &pbstat); - // d->numfrags = pbstat.fragments; - // d->numfrags = 1; - d->fragsize = pbstat.fragment_size; - d->numfrags = 1; - - /* fprintf(stderr, "Numfrags: %d\n", d->numfrags); - fprintf(stderr, "Fragsize: %d\n", d->fragsize); */ - - d->sndbuf = calloc(1, d->fragsize); - - if(d->stereo == 1) { - d->fragsize /= 2; - } - if(d->bits == 16) { - d->fragsize /= 2; - } - - d->polltag = audio_poll_add(snd_pcm_file_descriptor(d->soundfd), GDK_INPUT_WRITE, alsa_poll_ready_playing, d); - /* d->firstpoll = TRUE; */ - d->firstpoll = TRUE; - d->playtime = 0; - - return TRUE; - - out: - alsa_release(dp); - return FALSE; -} - -static double -alsa_get_play_time (void *dp) -{ - alsa_driver * const d = dp; - struct timeval tv; - double curtime; - - gettimeofday(&tv, NULL); - curtime = tv.tv_sec + tv.tv_usec / 1e6; - - return d->playtime + curtime - d->outtime - d->numfrags * ((double) d->fragsize / d->playrate); -} - -static inline int -alsa_get_play_rate (void *d) -{ - alsa_driver * const dp = d; - return dp->playrate; -} - -static gboolean -alsa_loadsettings (void *dp, - prefs_node *f) -{ - alsa_driver * const d = dp; - - prefs_get_int(f, "alsa-resolution", &d->p_resolution); - prefs_get_int(f, "alsa-channels", &d->p_channels); - prefs_get_int(f, "alsa-mixfreq", &d->p_mixfreq); - prefs_get_int(f, "alsa-fragsize", &d->p_fragsize); - - prefs_get_int(f, "alsa-card", &d->card_number); - prefs_get_int(f, "alsa-device", &d->device_number); - - prefs_init_from_structure(d); - - return TRUE; -} - -static gboolean -alsa_savesettings (void *dp, - prefs_node *f) -{ - alsa_driver * const d = dp; - - prefs_put_int(f, "alsa-resolution", d->p_resolution); - prefs_put_int(f, "alsa-channels", d->p_channels); - prefs_put_int(f, "alsa-mixfreq", d->p_mixfreq); - prefs_put_int(f, "alsa-fragsize", d->p_fragsize); - - prefs_put_int(f, "alsa-card", d->card_number); - prefs_put_int(f, "alsa-device", d->device_number); - - return TRUE; -} - -st_out_driver driver_out_alsa = { - { "ALSA Output", - - alsa_new, - alsa_destroy, - - alsa_open, - alsa_release, - - alsa_getwidget, - alsa_loadsettings, - alsa_savesettings, - }, - - alsa_get_play_time, - alsa_get_play_rate -}; - -#endif /* DRIVER_ALSA */ diff -Nru soundtracker-0.6.8/app/drivers/driver-thread.h soundtracker-1.0.2~pre2/app/drivers/driver-thread.h --- soundtracker-0.6.8/app/drivers/driver-thread.h 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/driver-thread.h 2020-08-31 19:37:40.000000000 +0000 @@ -0,0 +1,73 @@ + +/* + * The Real SoundTracker - Common driver's multithread stuff (header) + * + * Copyright (C) 2018 Yury Aliaev + * Copyright (C) 2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#define DRIVER_THREAD_STUFF GThread* tid; GMutex mutex; GCond cond;\ + gboolean running, processing, active; + +#define DRIVER_THREAD_LOOP_BEGIN(dp, always_wait) g_mutex_lock(&dp->mutex);\ + dp->running = TRUE;\ + do {\ + if (always_wait || !dp->processing)\ + g_cond_wait(&dp->cond, &dp->mutex);\ + if (!dp->active)\ + break; + +#define DRIVER_THREAD_ERROR goto out; + +#define DRIVER_THREAD_LOOP_END(dp) } while(dp->active); \ +out: \ + g_mutex_unlock(&dp->mutex);\ + dp->running = FALSE; + +#define DRIVER_THREAD_INIT(dp) g_mutex_init(&dp->mutex); g_cond_init(&dp->cond);\ + d->running = FALSE; d->processing = FALSE; d->active = FALSE; + +#define DRIVER_THREAD_CLEAR(dp) g_mutex_clear(&dp->mutex); g_cond_clear(&dp->cond); + +#define DRIVER_THREAD_NEW(dp, loop_fn, orig_ptr, name) if (!dp->running) {\ + dp->active = TRUE;\ + dp->processing = FALSE;\ + dp->tid = g_thread_new(name, loop_fn, orig_ptr);\ +} + +#define DRIVER_THREAD_CANCEL(dp) if (dp->running) {\ + dp->active = FALSE;\ + dp->processing = FALSE;\ + g_cond_signal(&dp->cond);\ + g_thread_join(dp->tid);\ +} + +#define DRIVER_THREAD_STOP(dp) if (!dp->running) return;\ + if (!dp->processing) return;\ + dp->processing = FALSE; + +#define DRIVER_THREAD_WAIT(dp) g_mutex_lock(&dp->mutex);\ + g_mutex_unlock(&dp->mutex); + +#define DRIVER_THREAD_RESUME(dp) if (!dp->running) return FALSE;\ + if (dp->processing) return FALSE;\ + dp->processing = TRUE;\ + g_cond_signal(&dp->cond); + +#define DRIVER_THREAD_COMMIT(dp) g_mutex_lock(&dp->mutex);\ + g_cond_signal(&dp->cond);\ + g_mutex_unlock(&dp->mutex); diff -Nru soundtracker-0.6.8/app/drivers/dsound-output.c soundtracker-1.0.2~pre2/app/drivers/dsound-output.c --- soundtracker-0.6.8/app/drivers/dsound-output.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/dsound-output.c 2020-08-26 20:01:46.000000000 +0000 @@ -24,32 +24,32 @@ #if defined(_WIN32) +#include #include #include #include -#include "i18n.h" -#include "driver-out.h" -#include "mixer.h" +#include "driver.h" #include "errors.h" #include "gui-subs.h" +#include "mixer.h" #include "preferences.h" #include "winpipe.h" +#include #include #include -#include -typedef HRESULT (WINAPI *dscfunc)(LPGUID,LPDIRECTSOUND*,LPUNKNOWN); +typedef HRESULT(WINAPI* dscfunc)(LPGUID, LPDIRECTSOUND*, LPUNKNOWN); typedef struct { - GtkWidget *configwidget; + GtkWidget* configwidget; int out_sock, out_bits, out_channels, out_rate; int samples_per_frame; int mf; - void *buf; + void* buf; int fakepipe[2]; gpointer polltag; @@ -65,16 +65,16 @@ DSCAPS dscaps; WAVEFORMATEX pbformat, sbformat; - WAVEFORMATEX *wbformat; + WAVEFORMATEX* wbformat; DSBUFFERDESC pbdesc, sbdesc; LPDIRECTSOUNDBUFFER pbuffer, sbuffer, wbuffer; DSBCAPS pbcaps; - int locked; - void *lockbuf,*lockbuf2; - DWORD locklen,locklen2; + int locked; + void *lockbuf, *lockbuf2; + DWORD locklen, locklen2; - char *tempbuf; + char* tempbuf; int writeprim; int sampshift; @@ -85,97 +85,94 @@ static int thread; static int -dsound_get_buffer_pos (void *dp) +dsound_get_buffer_pos(void* dp) { - dsound_driver *d=dp; + dsound_driver* d = dp; int pc; - IDirectSoundBuffer_GetCurrentPosition(d->wbuffer,(DWORD*) &pc,0); + IDirectSoundBuffer_GetCurrentPosition(d->wbuffer, (DWORD*)&pc, 0); return pc; } static void -dsound_poll_ready_playing (gpointer data, - gint source, - GdkInputCondition condition) +dsound_poll_ready_playing(gpointer data, + gint source, + GdkInputCondition condition) { - dsound_driver * const d = data; - int bufpos, delta, pos, lockok=0, len1, len2; + dsound_driver* const d = data; + int bufpos, delta, pos, lockok = 0, len1, len2; char bla; - bufpos=dsound_get_buffer_pos(data); - delta=((bufpos>=d->lastpos)?0:d->buflen)+bufpos-d->lastpos; + bufpos = dsound_get_buffer_pos(data); + delta = ((bufpos >= d->lastpos) ? 0 : d->buflen) + bufpos - d->lastpos; - pos=(bufpos+delta)%d->buflen; - d->playpos+=delta; + pos = (bufpos + delta) % d->buflen; + d->playpos += delta; - while (!lockok) - { - switch (IDirectSoundBuffer_Lock(d->wbuffer,d->lastpos,delta,&d->lockbuf,&d->locklen,&d->lockbuf2,&d->locklen2,0)) - { + while (!lockok) { + switch (IDirectSoundBuffer_Lock(d->wbuffer, d->lastpos, delta, &d->lockbuf, &d->locklen, &d->lockbuf2, &d->locklen2, 0)) { case DS_OK: - lockok=1; - break; + lockok = 1; + break; case DSERR_BUFFERLOST: - if FAILED(IDirectSoundBuffer_Restore(d->wbuffer)) - lockok=2; - break; + if + FAILED(IDirectSoundBuffer_Restore(d->wbuffer)) + lockok = 2; + break; default: - lockok=2; - } + lockok = 2; + } } - if (lockok==1) - { - audio_mix(d->lockbuf,d->locklen>>d->sampshift,d->out_rate,d->mf); - if (d->locklen2) - audio_mix(d->lockbuf2,d->locklen2>>d->sampshift,d->out_rate,d->mf); + if (lockok == 1) { + audio_mix(d->lockbuf, d->locklen >> d->sampshift, d->out_rate, d->mf); + if (d->locklen2) + audio_mix(d->lockbuf2, d->locklen2 >> d->sampshift, d->out_rate, d->mf); } - IDirectSoundBuffer_Unlock(d->wbuffer,d->lockbuf,d->locklen,d->lockbuf2,d->locklen2); - d->lastpos=bufpos; + IDirectSoundBuffer_Unlock(d->wbuffer, d->lockbuf, d->locklen, d->lockbuf2, d->locklen2); + d->lastpos = bufpos; } static DWORD WINAPI dsound_thread(LPVOID dp) { - dsound_driver * const d = dp; + dsound_driver* const d = dp; - SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL); + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL); - while (thread) - { - dsound_poll_ready_playing(d, 0, 0); - Sleep(25); /* sonst zieht das entschieden zuviel rechenzeit */ - } + while (thread) { + dsound_poll_ready_playing(d, 0, 0); + Sleep(25); /* sonst zieht das entschieden zuviel rechenzeit */ + } - return 0; + return 0; } static void -dsound_make_config_widgets (dsound_driver *d) +dsound_make_config_widgets(dsound_driver* d) { GtkWidget *thing, *mainbox; d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - + thing = gtk_label_new(_("in beta state. aber ryg rockt.")); gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); } -static GtkWidget * -dsound_getwidget (void *dp) +static GtkWidget* +dsound_getwidget(void* dp) { - dsound_driver * const d = dp; + dsound_driver* const d = dp; return d->configwidget; } -static void * -dsound_new (void) +static void* +dsound_new(void) { - dsound_driver *d = g_new(dsound_driver, 1); + dsound_driver* d = g_new(dsound_driver, 1); d->out_bits = 16; d->out_rate = 44100; @@ -191,249 +188,248 @@ } static void -dsound_destroy (void *dp) +dsound_destroy(void* dp) { - dsound_driver * const d = dp; + dsound_driver* const d = dp; gtk_widget_destroy(d->configwidget); g_free(dp); } static void -dsound_release (void *dp) +dsound_release(void* dp) { - dsound_driver * const d = dp; + dsound_driver* const d = dp; - thread=0; + thread = 0; WaitForSingleObject(d->thread, 1000); - if (d->sbuffer) - { - IDirectSoundBuffer_Stop(d->sbuffer); - IDirectSoundBuffer_Release(d->sbuffer); + if (d->sbuffer) { + IDirectSoundBuffer_Stop(d->sbuffer); + IDirectSoundBuffer_Release(d->sbuffer); } if (d->tempbuf) - g_free(d->tempbuf); + g_free(d->tempbuf); - d->sbuffer=0; - d->tempbuf=0; + d->sbuffer = 0; + d->tempbuf = 0; IDirectSound_Release(d->lpds); } static gboolean -dsound_play (void *dp) +dsound_play(void* dp) { - dsound_driver *d = dp; + dsound_driver* d = dp; int len; - memset(&d->pbformat,0,sizeof(WAVEFORMATEX)); - d->pbformat.wFormatTag=WAVE_FORMAT_PCM; - d->pbformat.nChannels=d->out_channels; - d->pbformat.nSamplesPerSec=d->out_rate; - d->pbformat.wBitsPerSample=d->out_bits; - d->pbformat.nBlockAlign=d->pbformat.wBitsPerSample/8*d->pbformat.nChannels; - d->pbformat.nAvgBytesPerSec=d->pbformat.nSamplesPerSec*d->pbformat.nBlockAlign; - if FAILED(IDirectSoundBuffer_SetFormat(d->pbuffer,&d->pbformat)) - { - if (d->writeprim) - { - IDirectSound_SetCooperativeLevel(d->lpds,d->winhwnd,DSSCL_PRIORITY); - d->writeprim=0; - } - } - - IDirectSoundBuffer_GetFormat(d->pbuffer,&d->pbformat,sizeof(d->pbformat),0); - - len=(d->out_bits/8*d->out_channels*d->out_rate)/5; // 200ms buf default + memset(&d->pbformat, 0, sizeof(WAVEFORMATEX)); + d->pbformat.wFormatTag = WAVE_FORMAT_PCM; + d->pbformat.nChannels = d->out_channels; + d->pbformat.nSamplesPerSec = d->out_rate; + d->pbformat.wBitsPerSample = d->out_bits; + d->pbformat.nBlockAlign = d->pbformat.wBitsPerSample / 8 * d->pbformat.nChannels; + d->pbformat.nAvgBytesPerSec = d->pbformat.nSamplesPerSec * d->pbformat.nBlockAlign; + if + FAILED(IDirectSoundBuffer_SetFormat(d->pbuffer, &d->pbformat)) + { + if (d->writeprim) { + IDirectSound_SetCooperativeLevel(d->lpds, d->winhwnd, DSSCL_PRIORITY); + d->writeprim = 0; + } + } + + IDirectSoundBuffer_GetFormat(d->pbuffer, &d->pbformat, sizeof(d->pbformat), 0); + + len = (d->out_bits / 8 * d->out_channels * d->out_rate) / 5; // 200ms buf default + + if (d->writeprim) { + d->pbcaps.dwSize = sizeof(d->pbcaps); + IDirectSoundBuffer_GetCaps(d->pbuffer, &d->pbcaps); + len = d->pbcaps.dwBufferBytes; + d->wbuffer = d->pbuffer; + d->wbformat = &d->pbformat; + } else { + len = (len < DSBSIZE_MIN) ? DSBSIZE_MIN : (len > DSBSIZE_MAX) ? DSBSIZE_MAX : len; + + memset(&d->sbformat, 0, sizeof(WAVEFORMATEX)); + d->sbformat.wFormatTag = WAVE_FORMAT_PCM; + d->sbformat.nChannels = d->out_channels; + d->sbformat.nSamplesPerSec = d->out_rate; + d->sbformat.wBitsPerSample = d->out_bits; + d->sbformat.nBlockAlign = d->sbformat.wBitsPerSample / 8 * d->sbformat.nChannels; + d->sbformat.nAvgBytesPerSec = d->sbformat.nSamplesPerSec * d->sbformat.nBlockAlign; + + memset(&d->sbdesc, 0, sizeof(DSBUFFERDESC)); + d->sbdesc.dwSize = sizeof(DSBUFFERDESC); + d->sbdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_GLOBALFOCUS | DSBCAPS_STICKYFOCUS; + d->sbdesc.dwBufferBytes = len; + d->sbdesc.lpwfxFormat = &d->sbformat; - if (d->writeprim) - { - d->pbcaps.dwSize=sizeof(d->pbcaps); - IDirectSoundBuffer_GetCaps(d->pbuffer,&d->pbcaps); - len=d->pbcaps.dwBufferBytes; - d->wbuffer=d->pbuffer; - d->wbformat=&d->pbformat; - } - else - { - len=(lenDSBSIZE_MAX)?DSBSIZE_MAX:len; - - memset(&d->sbformat,0,sizeof(WAVEFORMATEX)); - d->sbformat.wFormatTag=WAVE_FORMAT_PCM; - d->sbformat.nChannels=d->out_channels; - d->sbformat.nSamplesPerSec=d->out_rate; - d->sbformat.wBitsPerSample=d->out_bits; - d->sbformat.nBlockAlign=d->sbformat.wBitsPerSample/8*d->sbformat.nChannels; - d->sbformat.nAvgBytesPerSec=d->sbformat.nSamplesPerSec*d->sbformat.nBlockAlign; - - memset(&d->sbdesc,0,sizeof(DSBUFFERDESC)); - d->sbdesc.dwSize=sizeof(DSBUFFERDESC); - d->sbdesc.dwFlags=DSBCAPS_GETCURRENTPOSITION2|DSBCAPS_GLOBALFOCUS|DSBCAPS_STICKYFOCUS; - d->sbdesc.dwBufferBytes=len; - d->sbdesc.lpwfxFormat=&d->sbformat; - - if FAILED(IDirectSound_CreateSoundBuffer(d->lpds,&d->sbdesc,&d->sbuffer,0)) + if + FAILED(IDirectSound_CreateSoundBuffer(d->lpds, &d->sbdesc, &d->sbuffer, 0)) return FALSE; - d->wbuffer=d->sbuffer; - d->wbformat=&d->sbformat; + d->wbuffer = d->sbuffer; + d->wbformat = &d->sbformat; } - d->buflen=len; + d->buflen = len; - if FAILED(IDirectSoundBuffer_Lock(d->wbuffer,0,0,&d->lockbuf,&d->locklen,0,0,DSBLOCK_ENTIREBUFFER)) - { - IDirectSoundBuffer_Unlock(d->wbuffer,d->lockbuf,0,0,0); - - if (d->writeprim) - { - d->writeprim=0; - IDirectSound_SetCooperativeLevel(d->lpds,d->winhwnd,DSSCL_PRIORITY); - return dsound_play(dp); - } - else - { - IDirectSoundBuffer_Release(d->sbuffer); - return FALSE; - } - } - else - { - memset(d->lockbuf,0,d->locklen); - IDirectSoundBuffer_Unlock(d->wbuffer,d->lockbuf,0,0,0); + if + FAILED(IDirectSoundBuffer_Lock(d->wbuffer, 0, 0, &d->lockbuf, &d->locklen, 0, 0, DSBLOCK_ENTIREBUFFER)) + { + IDirectSoundBuffer_Unlock(d->wbuffer, d->lockbuf, 0, 0, 0); + + if (d->writeprim) { + d->writeprim = 0; + IDirectSound_SetCooperativeLevel(d->lpds, d->winhwnd, DSSCL_PRIORITY); + return dsound_play(dp); + } else { + IDirectSoundBuffer_Release(d->sbuffer); + return FALSE; + } + } + else { + memset(d->lockbuf, 0, d->locklen); + IDirectSoundBuffer_Unlock(d->wbuffer, d->lockbuf, 0, 0, 0); } - if FAILED(IDirectSoundBuffer_Play(d->wbuffer,0,0,DSBPLAY_LOOPING)) - { - if (d->writeprim) - { - d->writeprim=0; - IDirectSound_SetCooperativeLevel(d->lpds,d->winhwnd,DSSCL_PRIORITY); - return dsound_play(dp); - } - else - { - IDirectSoundBuffer_Release(d->sbuffer); - return FALSE; - } - } - - d->tempbuf=g_new(char, len); - memset(d->tempbuf,0,len); - d->buf=d->tempbuf; - - d->locked=0; - d->playpos=-d->buflen; - d->lastpos=0; + if + FAILED(IDirectSoundBuffer_Play(d->wbuffer, 0, 0, DSBPLAY_LOOPING)) + { + if (d->writeprim) { + d->writeprim = 0; + IDirectSound_SetCooperativeLevel(d->lpds, d->winhwnd, DSSCL_PRIORITY); + return dsound_play(dp); + } else { + IDirectSoundBuffer_Release(d->sbuffer); + return FALSE; + } + } + + d->tempbuf = g_new(char, len); + memset(d->tempbuf, 0, len); + d->buf = d->tempbuf; + + d->locked = 0; + d->playpos = -d->buflen; + d->lastpos = 0; return TRUE; } static gboolean -dsound_open (void *dp) +dsound_open(void* dp) { - dsound_driver * const d = dp; + dsound_driver* const d = dp; int out_format; DWORD tid; char bla; - d->winhwnd=GetForegroundWindow(); - d->writeprim=0; + d->winhwnd = GetForegroundWindow(); + d->writeprim = 0; - d->hdsinst=LoadLibrary("dsound.dll"); + d->hdsinst = LoadLibrary("dsound.dll"); if (!d->hdsinst) - return FALSE; + return FALSE; - d->DSCreate=(dscfunc)GetProcAddress(d->hdsinst,"DirectSoundCreate"); + d->DSCreate = (dscfunc)GetProcAddress(d->hdsinst, "DirectSoundCreate"); if (!d->DSCreate) - return FALSE; - - if FAILED(d->DSCreate(0,&d->lpds,0)) - return FALSE; - - d->dscaps.dwSize=sizeof(DSCAPS); - if FAILED(IDirectSound_GetCaps(d->lpds,&d->dscaps)) - return FALSE; - - if FAILED(IDirectSound_SetCooperativeLevel(d->lpds,d->winhwnd,d->writeprim?DSSCL_WRITEPRIMARY:DSSCL_PRIORITY)) - { - d->writeprim=0; - if FAILED(IDirectSound_SetCooperativeLevel(d->lpds,d->winhwnd,DSSCL_PRIORITY)) return FALSE; - } - memset(&d->pbdesc,0,sizeof(DSBUFFERDESC)); - d->pbdesc.dwSize=sizeof(DSBUFFERDESC); - d->pbdesc.dwFlags=DSBCAPS_PRIMARYBUFFER; - if FAILED(IDirectSound_CreateSoundBuffer(d->lpds,&d->pbdesc,&d->pbuffer,0)) - return FALSE; + if + FAILED(d->DSCreate(0, &d->lpds, 0)) + return FALSE; + + d->dscaps.dwSize = sizeof(DSCAPS); + if + FAILED(IDirectSound_GetCaps(d->lpds, &d->dscaps)) + return FALSE; + + if + FAILED(IDirectSound_SetCooperativeLevel(d->lpds, d->winhwnd, d->writeprim ? DSSCL_WRITEPRIMARY : DSSCL_PRIORITY)) + { + d->writeprim = 0; + if + FAILED(IDirectSound_SetCooperativeLevel(d->lpds, d->winhwnd, DSSCL_PRIORITY)) + return FALSE; + } + + memset(&d->pbdesc, 0, sizeof(DSBUFFERDESC)); + d->pbdesc.dwSize = sizeof(DSBUFFERDESC); + d->pbdesc.dwFlags = DSBCAPS_PRIMARYBUFFER; + if + FAILED(IDirectSound_CreateSoundBuffer(d->lpds, &d->pbdesc, &d->pbuffer, 0)) + return FALSE; if (!dsound_play(dp)) - return FALSE; + return FALSE; - d->sampshift=(d->out_bits==16)?1:0; - d->sampshift+=(d->out_channels==2)?1:0; + d->sampshift = (d->out_bits == 16) ? 1 : 0; + d->sampshift += (d->out_channels == 2) ? 1 : 0; - d->mf=(d->out_bits==16)?ST_MIXER_FORMAT_S16_LE:ST_MIXER_FORMAT_U8; - d->mf|=(d->out_channels==2)?ST_MIXER_FORMAT_STEREO:0; -// d->polltag=audio_poll_add(d->fakepipe[0], GDK_INPUT_READ, dsound_poll_ready_playing, d); + d->mf = (d->out_bits == 16) ? ST_MIXER_FORMAT_S16_LE : ST_MIXER_FORMAT_U8; + d->mf |= (d->out_channels == 2) ? ST_MIXER_FORMAT_STEREO : 0; + // d->polltag=audio_poll_add(d->fakepipe[0], GDK_INPUT_READ, dsound_poll_ready_playing, d); /* now kick the "polling" (which sucks coz of pipe-faking) */ - thread=1; - d->thread=CreateThread(0, 8*1024, dsound_thread, d, 0, &tid); + thread = 1; + d->thread = CreateThread(0, 8 * 1024, dsound_thread, d, 0, &tid); return TRUE; } static double -dsound_get_play_time (void *dp) +dsound_get_play_time(void* dp) { - dsound_driver * const d = dp; + dsound_driver* const d = dp; - return (double) d->playpos/(double) d->wbformat->nAvgBytesPerSec; + return (double)d->playpos / (double)d->wbformat->nAvgBytesPerSec; } static inline int -dsound_get_play_rate (void *d) +dsound_get_play_rate(void* d) { - dsound_driver * const dp = d; + dsound_driver* const dp = d; return dp->out_rate; } static gboolean -dsound_loadsettings (void *dp, - prefs_node *f) +dsound_loadsettings(void* dp, + const gchar* f) { -// dsound_driver * const d = dp; + // dsound_driver * const d = dp; return TRUE; } static gboolean -dsound_savesettings (void *dp, - prefs_node *f) +dsound_savesettings(void* dp, + const gchar* f) { -// dsound_driver * const d = dp; + // dsound_driver * const d = dp; return TRUE; } -st_out_driver driver_out_dsound = { - { "DirectSound Output", +st_driver driver_out_dsound = { + "DirectSound Output", + + dsound_new, + dsound_destroy, - dsound_new, - dsound_destroy, + dsound_open, + dsound_release, - dsound_open, - dsound_release, + dsound_getwidget, + dsound_loadsettings, + dsound_savesettings, - dsound_getwidget, - dsound_loadsettings, - dsound_savesettings, - }, + NULL, + NULL, dsound_get_play_time, dsound_get_play_rate diff -Nru soundtracker-0.6.8/app/drivers/dummy-drivers.c soundtracker-1.0.2~pre2/app/drivers/dummy-drivers.c --- soundtracker-0.6.8/app/drivers/dummy-drivers.c 2001-01-03 13:24:11.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/dummy-drivers.c 2020-09-07 07:46:14.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Dummy drivers * - * Copyright (C) 2001 Michael Krause + * Copyright (C) 2001-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,89 +21,171 @@ #include +#include +#include + +#include #include -#include "i18n.h" -#include "driver-in.h" -#include "driver-out.h" +#include "driver.h" +#include "mixer.h" + +#ifdef WORDS_BIGENDIAN +const STMixerFormat format = ST_MIXER_FORMAT_S16_BE; +#else +const STMixerFormat format = ST_MIXER_FORMAT_S16_LE; +#endif +const gint bufsize = 1024; +const gint rate = 44100; +const gint prebuffered = 2; typedef struct dummy_driver { - GtkWidget *configwidget; + GtkWidget* configwidget; + void* buf; + gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat); + double outtime; + double playtime; + gint prebuf; } dummy_driver; static void -dummy_make_config_widgets (dummy_driver *d) +dummy_make_config_widgets(dummy_driver* d) { GtkWidget *thing, *mainbox; d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - + thing = gtk_label_new(_("No driver available for your system.")); gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); } -static GtkWidget * -dummy_getwidget (void *dp) +static GtkWidget* +dummy_getwidget(void* dp) { - dummy_driver * const d = dp; + dummy_driver* const d = dp; return d->configwidget; } -static void * -dummy_new (void) +static void* +dummy_new(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) { - dummy_driver *d = g_new(dummy_driver, 1); + dummy_driver* d = g_new(dummy_driver, 1); + d->callback = callback; dummy_make_config_widgets(d); return d; } static void -dummy_destroy (void *dp) +dummy_destroy(void* dp) { - dummy_driver * const d = dp; + dummy_driver* const d = dp; gtk_widget_destroy(d->configwidget); g_free(dp); } static void -dummy_release (void *dp) +dummy_release(void* dp) { + dummy_driver* const d = dp; + + free(d->buf); } static gboolean -dummy_open (void *dp) +dummy_open(void* dp) { - return FALSE; + dummy_driver* const d = dp; + struct timeval tv; + + /* Buffer for fake rendering necessary for working scopes, time events and so on */ + d->buf = calloc(mixer_get_resolution(format) << mixer_is_format_stereo(format), bufsize); + + gettimeofday(&tv, NULL); + d->playtime = 0.0; + d->prebuf = prebuffered; + + d->callback(d->buf, bufsize, rate, format); + + return TRUE; } -st_out_driver driver_out_dummy = { - { "No Output", +static void +dummy_commit(void* dp) +{ + dummy_driver* const d = dp; + struct timeval tv; + const struct timespec ts = {0, 900000000LL * bufsize / rate}; - dummy_new, - dummy_destroy, + if (d->prebuf) + d->prebuf--; + else + nanosleep(&ts, NULL); + d->callback(d->buf, bufsize, rate, format); - dummy_open, - dummy_release, + gettimeofday(&tv, NULL); + d->outtime = tv.tv_sec + tv.tv_usec / 1e6; + d->playtime += (double)bufsize / rate; +} - dummy_getwidget, - }, -}; +static double +dummy_get_play_time(void* dp) +{ + dummy_driver* const d = dp; + struct timeval tv; + double playtime; -st_out_driver driver_in_dummy = { - { "No Input", + gettimeofday(&tv, NULL); + playtime = d->playtime + tv.tv_sec + tv.tv_usec / 1e6 - d->outtime - + (double)bufsize / rate; - dummy_new, - dummy_destroy, + return playtime > 0.0 ? playtime : 0.0; +} + +st_driver driver_out_dummy = { + "No Output", + + dummy_new, + dummy_destroy, + + dummy_open, + dummy_release, - dummy_open, - dummy_release, + dummy_getwidget, + NULL, + NULL, - dummy_getwidget, - }, + NULL, + NULL, + + dummy_commit, + + dummy_get_play_time, + NULL, }; +st_driver driver_in_dummy = { + "No Input", + + dummy_new, + dummy_destroy, + + dummy_open, + dummy_release, + + dummy_getwidget, + NULL, + NULL, + + NULL, + NULL, + + NULL, + + NULL, + NULL, +}; diff -Nru soundtracker-0.6.8/app/drivers/esd-output.c soundtracker-1.0.2~pre2/app/drivers/esd-output.c --- soundtracker-0.6.8/app/drivers/esd-output.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/esd-output.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,245 +0,0 @@ - -/* - * The Real SoundTracker - ESD (output) driver. - * - * Copyright (C) 1999-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#if DRIVER_ESD - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include "i18n.h" -#include "driver-out.h" -#include "mixer.h" -#include "errors.h" -#include "gui-subs.h" -#include "preferences.h" - - -typedef struct esd_driver { - GtkWidget *configwidget; - - int out_sock, out_bits, out_channels, out_rate; - int samples_per_frame; - int mf; - - void *sndbuf; - gpointer polltag; - int firstpoll; - - double outtime; - double playtime; -} esd_driver; - -static void -esd_poll_ready_playing (gpointer data, - gint source, - GdkInputCondition condition) -{ - esd_driver * const d = data; - int w; - struct timeval tv; - - if(!d->firstpoll) { - if((w = write(d->out_sock, d->sndbuf, ESD_BUF_SIZE) != ESD_BUF_SIZE)) { - if(w == -1) { - fprintf(stderr, "driver_esd: write() returned -1.\n"); - } else { - fprintf(stderr, "driver_esd: write not completely done.\n"); - } - } - - gettimeofday(&tv, NULL); - d->outtime = tv.tv_sec + tv.tv_usec / 1e6; - d->playtime += (double) d->samples_per_frame / d->out_rate; - } - - d->firstpoll = FALSE; - - audio_mix(d->sndbuf, d->samples_per_frame, d->out_rate, d->mf); -} - -static void -esd_make_config_widgets (esd_driver *d) -{ - GtkWidget *thing, *mainbox; - - d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - - thing = gtk_label_new(_("Note that the ESD output is unusable in\ninteractive mode because of the latency added\nby ESD. Use the OSS or ALSA output plug-ins\nfor serious work.")); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); -} - -static GtkWidget * -esd_getwidget (void *dp) -{ - esd_driver * const d = dp; - - return d->configwidget; -} - -static void * -esd_new (void) -{ - esd_driver *d = g_new(esd_driver, 1); - - d->out_bits = ESD_BITS16; - d->out_rate = 44100; - d->out_channels = ESD_STEREO; - - esd_make_config_widgets(d); - - return d; -} - -static void -esd_destroy (void *dp) -{ - esd_driver * const d = dp; - - gtk_widget_destroy(d->configwidget); - - g_free(dp); -} - -static void -esd_release (void *dp) -{ - esd_driver * const d = dp; - - free(d->sndbuf); - d->sndbuf = NULL; - - audio_poll_remove(d->polltag); - d->polltag = NULL; - - if(d->out_sock >= 0) { - esd_close(d->out_sock); - d->out_sock = -1; - } -} - -static gboolean -esd_open (void *dp) -{ - esd_driver * const d = dp; - int out_format; - - out_format = d->out_bits | d->out_channels | ESD_STREAM | ESD_PLAY; - - d->out_sock = esd_play_stream_fallback(out_format, d->out_rate, NULL, "SoundTracker ESD Output"); - if(d->out_sock <= 0) { - char buf[256]; - sprintf(buf, _("Couldn't connect to ESD for sound output:\n%s"), strerror(errno)); - error_error(buf); - return FALSE; - } - -#ifdef WORDS_BIGENDIAN - d->mf = ST_MIXER_FORMAT_S16_BE; -#else - d->mf = ST_MIXER_FORMAT_S16_LE; -#endif - - d->mf |= ST_MIXER_FORMAT_STEREO; - - d->samples_per_frame = ESD_BUF_SIZE; - if(d->out_bits == ESD_BITS16) - d->samples_per_frame /= 2; - if(d->out_channels == ESD_STEREO) - d->samples_per_frame /= 2; - - d->sndbuf = calloc(1, ESD_BUF_SIZE); - - d->polltag = audio_poll_add(d->out_sock, GDK_INPUT_WRITE, esd_poll_ready_playing, d); - d->firstpoll = TRUE; - d->playtime = 0; - - return TRUE; -} - -static double -esd_get_play_time (void *dp) -{ - esd_driver * const d = dp; - struct timeval tv; - double curtime; - - gettimeofday(&tv, NULL); - curtime = tv.tv_sec + tv.tv_usec / 1e6; - - return d->playtime + curtime - d->outtime - 24 * ((double)d->samples_per_frame / d->out_rate); -} - -static inline int -esd_get_play_rate (void *d) -{ - esd_driver * const dp = d; - return dp->out_rate; -} - -static gboolean -esd_loadsettings (void *dp, - prefs_node *f) -{ -// esd_driver * const d = dp; - - return TRUE; -} - -static gboolean -esd_savesettings (void *dp, - prefs_node *f) -{ -// esd_driver * const d = dp; - - return TRUE; -} - -st_out_driver driver_out_esd = { - { "ESD Output", - - esd_new, - esd_destroy, - - esd_open, - esd_release, - - esd_getwidget, - esd_loadsettings, - esd_savesettings, - }, - - esd_get_play_time, - esd_get_play_rate -}; - -#endif /* DRIVER_ESD */ diff -Nru soundtracker-0.6.8/app/drivers/file-output.c soundtracker-1.0.2~pre2/app/drivers/file-output.c --- soundtracker-0.6.8/app/drivers/file-output.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/file-output.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,450 +0,0 @@ - -/* - * The Real SoundTracker - File (output) driver. - * - * Copyright (C) 1999-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#if USE_SNDFILE - -#include -#include -#include -#include - -#include -#include - -#include - -#include "i18n.h" -#include "driver-out.h" -#include "mixer.h" -#include "errors.h" -#include "gui-subs.h" -#include "preferences.h" - -typedef struct sndfile_driver { - gchar *filename; /* must be the first entry. is altered by audio.c (hack, hack) */ - - SNDFILE *outfile; - SF_INFO sfinfo; - - int pipe[2]; - gpointer polltag; - int firstpoll; - - gint16 *sndbuf; - int sndbuf_size; - double playtime; - - int p_resolution; - int p_channels; - int p_mixfreq; - - GtkWidget *configwidget; -} sndfile_driver; - -static void -sndfile_poll_ready_playing (gpointer data, - gint source, - GdkInputCondition condition) -{ - sndfile_driver * const d = data; - - if(!d->firstpoll) { - sf_writef_short (d->outfile, d->sndbuf, d->sndbuf_size / 4); - d->playtime += (double)(d->sndbuf_size) / 4 / d->p_mixfreq; - } - - d->firstpoll = FALSE; -#ifdef WORDS_BIGENDIAN - audio_mix(d->sndbuf, d->sndbuf_size / 4, d->p_mixfreq, ST_MIXER_FORMAT_S16_BE | ST_MIXER_FORMAT_STEREO); -#else - audio_mix(d->sndbuf, d->sndbuf_size / 4, d->p_mixfreq, ST_MIXER_FORMAT_S16_LE | ST_MIXER_FORMAT_STEREO); -#endif - -} - -static void -sndfile_make_config_widgets (sndfile_driver *d) -{ - GtkWidget *thing, *mainbox; - - d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - - thing = gtk_label_new(_("no settings (yet), sorry!")); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); -} - -static GtkWidget * -sndfile_getwidget (void *dp) -{ - sndfile_driver * const d = dp; - - return d->configwidget; -} - -static void * -sndfile_new (void) -{ - sndfile_driver *d = g_new(sndfile_driver, 1); - - d->p_mixfreq = 44100; - d->p_channels = 2; - d->p_resolution = 16; - d->sndbuf = NULL; - d->polltag = NULL; - - sndfile_make_config_widgets(d); - - pipe(d->pipe); - - return d; -} - -static void -sndfile_destroy (void *dp) -{ - sndfile_driver * const d = dp; - - close(d->pipe[0]); - close(d->pipe[1]); - - gtk_widget_destroy(d->configwidget); - - g_free(d->filename); - - g_free(dp); -} - -static void -sndfile_release (void *dp) -{ - sndfile_driver * const d = dp; - - free(d->sndbuf); - d->sndbuf = NULL; - - audio_poll_remove(d->polltag); - d->polltag = NULL; - - if(d->outfile != NULL) { - sf_close(d->outfile); - d->outfile = NULL; - } -} - -static gboolean -sndfile_open (void *dp) -{ - sndfile_driver * const d = dp; - - d->sfinfo.channels = 2 ; - d->sfinfo.samplerate = 44100 ; - d->sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ; - - d->outfile = sf_open (d->filename, SFM_WRITE, &d->sfinfo); - - if(!d->outfile) { - error_error(_("Can't open file for writing.")); - goto out; - } - - /* In case we're running setuid root... */ - chown(d->filename, getuid(), getgid()); - - d->sndbuf_size = 16384; - d->sndbuf = malloc(d->sndbuf_size); - if(!d->sndbuf) { - error_error("Can't allocate mix buffer."); - goto out; - } - - d->polltag = audio_poll_add(d->pipe[1], GDK_INPUT_WRITE, sndfile_poll_ready_playing, d); - d->firstpoll = TRUE; - d->playtime = 0.0; - - return TRUE; - - out: - sndfile_release(dp); - return FALSE; -} - -static double -sndfile_get_play_time (void *dp) -{ - sndfile_driver * const d = dp; - - return d->playtime; -} - -static gboolean -sndfile_loadsettings (void *dp, - prefs_node *f) -{ -// sndfile_driver * const d = dp; - - return TRUE; -} - -static gboolean -sndfile_savesettings (void *dp, - prefs_node *f) -{ -// sndfile_driver * const d = dp; - - return TRUE; -} - -st_out_driver driver_out_file = { - { "WAV Rendering Output using libsndfile", - - sndfile_new, - sndfile_destroy, - - sndfile_open, - sndfile_release, - - sndfile_getwidget, - sndfile_loadsettings, - sndfile_savesettings, - }, - - sndfile_get_play_time, -}; - -#elif !defined (NO_AUDIOFILE) - -#include -#include -#include -#include - -#include -#include - -#include - -#include "i18n.h" -#include "driver-out.h" -#include "mixer.h" -#include "errors.h" -#include "gui-subs.h" -#include "preferences.h" - -typedef struct file_driver { - gchar *filename; /* must be the first entry. is altered by audio.c (hack, hack) */ - - AFfilehandle outfile; - int pipe[2]; - gpointer polltag; - int firstpoll; - - gint16 *sndbuf; - int sndbuf_size; - double playtime; - - int p_resolution; - int p_channels; - int p_mixfreq; - - GtkWidget *configwidget; -} file_driver; - -static void -file_poll_ready_playing (gpointer data, - gint source, - GdkInputCondition condition) -{ - file_driver * const d = data; - - if(!d->firstpoll) { - afWriteFrames(d->outfile, AF_DEFAULT_TRACK, d->sndbuf, d->sndbuf_size / 4); - d->playtime += (double)(d->sndbuf_size) / 4 / d->p_mixfreq; - } - - d->firstpoll = FALSE; - - audio_mix(d->sndbuf, d->sndbuf_size / 4, d->p_mixfreq, ST_MIXER_FORMAT_S16_LE | ST_MIXER_FORMAT_STEREO); -} - -static void -file_make_config_widgets (file_driver *d) -{ - GtkWidget *thing, *mainbox; - - d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - - thing = gtk_label_new(_("no settings (yet), sorry!")); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); -} - -static GtkWidget * -file_getwidget (void *dp) -{ - file_driver * const d = dp; - - return d->configwidget; -} - -static void * -file_new (void) -{ - file_driver *d = g_new(file_driver, 1); - - d->p_mixfreq = 44100; - d->p_channels = 2; - d->p_resolution = 16; - d->sndbuf = NULL; - d->polltag = NULL; - - file_make_config_widgets(d); - - pipe(d->pipe); - - return d; -} - -static void -file_destroy (void *dp) -{ - file_driver * const d = dp; - - close(d->pipe[0]); - close(d->pipe[1]); - - gtk_widget_destroy(d->configwidget); - - g_free(d->filename); - - g_free(dp); -} - -static void -file_release (void *dp) -{ - file_driver * const d = dp; - - free(d->sndbuf); - d->sndbuf = NULL; - - audio_poll_remove(d->polltag); - d->polltag = NULL; - - if(d->outfile != 0) { - afCloseFile(d->outfile); - d->outfile = 0; - } -} - -static gboolean -file_open (void *dp) -{ - file_driver * const d = dp; - AFfilesetup outfilesetup; - - outfilesetup = afNewFileSetup(); - afInitFileFormat(outfilesetup, AF_FILE_WAVE); - afInitChannels(outfilesetup, AF_DEFAULT_TRACK, 2); - afInitSampleFormat(outfilesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 16); - d->outfile = afOpenFile(d->filename, "w", outfilesetup); - afFreeFileSetup(outfilesetup); - - if(!d->outfile) { - error_error(_("Can't open file for writing.")); - goto out; - } - - /* In case we're running setuid root... */ - chown(d->filename, getuid(), getgid()); - - d->sndbuf_size = 16384; - d->sndbuf = malloc(d->sndbuf_size); - if(!d->sndbuf) { - error_error("Can't allocate mix buffer."); - goto out; - } - - d->polltag = audio_poll_add(d->pipe[1], GDK_INPUT_WRITE, file_poll_ready_playing, d); - d->firstpoll = TRUE; - d->playtime = 0.0; - - return TRUE; - - out: - file_release(dp); - return FALSE; -} - -static double -file_get_play_time (void *dp) -{ - file_driver * const d = dp; - - return d->playtime; -} - -static inline int -file_get_play_rate (void *d) -{ - sndfile_driver * const dp = d; - return dp->p_mixfreq; -} - -static gboolean -file_loadsettings (void *dp, - prefs_node *f) -{ -// file_driver * const d = dp; - - return TRUE; -} - -static gboolean -file_savesettings (void *dp, - prefs_node *f) -{ -// file_driver * const d = dp; - - return TRUE; -} - -st_out_driver driver_out_file = { - { "WAV Rendering Output", - - file_new, - file_destroy, - - file_open, - file_release, - - file_getwidget, - file_loadsettings, - file_savesettings, - }, - - file_get_play_time, - file_get_play_rate -}; - -#endif /* NO_AUDIOFILE */ diff -Nru soundtracker-0.6.8/app/drivers/irix-output.c soundtracker-1.0.2~pre2/app/drivers/irix-output.c --- soundtracker-0.6.8/app/drivers/irix-output.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/irix-output.c 2020-08-26 20:01:46.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - IRIX 5.x (output) driver. * - * Copyright (C) 2001 Michael Krause + * Copyright (C) 2001-2019 Michael Krause * Inspired by libmikmod's drv_sgi.c * * This program is free software; you can redistribute it and/or modify @@ -24,100 +24,107 @@ #if DRIVER_SGI +#include #include #include #include -#include +#include #include #include +#include #include #include -#include -#include #include +#include #include -#include "i18n.h" -#include "driver-out.h" -#include "mixer.h" +#include "driver.h" +#include "driver-thread.h" #include "errors.h" #include "gui-subs.h" +#include "mixer.h" #include "preferences.h" -#define DEFAULT_SGI_FRAGSIZE 2048 +#define DEFAULT_SGI_FRAGSIZE 2048 typedef struct irix_driver { - GtkWidget *configwidget; - GMutex *configmutex; + GtkWidget* configwidget; + GMutex* configmutex; ALconfig sgi_config; ALport sgi_port; int sample_factor; int sgi_fragsize; int sgi_bufsize; - char *audiobuffer; + char* audiobuffer; + gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat); gboolean firstpoll; - gpointer polltag; double outtime; double playtime; + DRIVER_THREAD_STUFF } irix_driver; -static void -irix_poll_ready_playing (gpointer data, - gint source, - GdkInputCondition condition) +static void* +irix_playing(void* data) { - irix_driver * const d = data; + irix_driver* const d = data; struct timeval tv; - if(!d->firstpoll) { - alWriteFrames(d->sgi_port, d->audiobuffer, d->sgi_fragsize); - - if(1) { - gettimeofday(&tv, NULL); - d->outtime = tv.tv_sec + tv.tv_usec / 1e6; - d->playtime += (double) d->sgi_fragsize / 48000; - } - } - - d->firstpoll = FALSE; + DRIVER_THREAD_LOOP_BEGIN(d, TRUE) + if (!d->firstpoll) { + alWriteFrames(d->sgi_port, d->audiobuffer, d->sgi_fragsize); + + if (1) { + gettimeofday(&tv, NULL); + d->outtime = tv.tv_sec + tv.tv_usec / 1e6; + d->playtime += (double)d->sgi_fragsize / 48000; + } + } + + d->firstpoll = FALSE; + + d->callback(d->audiobuffer, d->sgi_fragsize, + 48000, ST_MIXER_FORMAT_S16_BE | ST_MIXER_FORMAT_STEREO); + DRIVER_THREAD_LOOP_END(d) - audio_mix(d->audiobuffer, d->sgi_fragsize, 48000, ST_MIXER_FORMAT_S16_BE | ST_MIXER_FORMAT_STEREO); + return NULL; } static void -irix_make_config_widgets (irix_driver *d) +irix_make_config_widgets(irix_driver* d) { GtkWidget *thing, *mainbox; d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - + thing = gtk_label_new(_("no settings (yet), sorry!")); gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); } -static GtkWidget * -irix_getwidget (void *dp) +static GtkWidget* +irix_getwidget(void* dp) { - irix_driver * const d = dp; + irix_driver* const d = dp; return d->configwidget; } -static void * -irix_new (void) +static void* +irix_new(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) { - irix_driver *d = g_new(irix_driver, 1); + irix_driver* d = g_new(irix_driver, 1); - d->configmutex = g_mutex_new(); + g_mutex_init(&d->configmutex); d->sgi_fragsize = DEFAULT_SGI_FRAGSIZE; d->audiobuffer = NULL; - d->polltag = NULL; + d->callback = callback; + + DRIVER_THREAD_INIT(d) irix_make_config_widgets(d); @@ -125,123 +132,156 @@ } static void -irix_destroy (void *dp) +irix_destroy(void* dp) { - irix_driver * const d = dp; + irix_driver* const d = dp; gtk_widget_destroy(d->configwidget); g_mutex_free(d->configmutex); + DRIVER_THREAD_CLEAR(d) g_free(dp); } static void -irix_release (void *dp) +irix_release(void* dp) { - irix_driver * const d = dp; + irix_driver* const d = dp; + + DRIVER_THREAD_STOP(d) - audio_poll_remove(d->polltag); - d->polltag = NULL; - - if(d->sgi_port) { - alClosePort(d->sgi_port); - d->sgi_port = NULL; - } - - if(d->sgi_config) { - alFreeConfig(d->sgi_config); - d->sgi_config = NULL; - } - - if(d->audiobuffer) { - free(d->audiobuffer); - d->audiobuffer = NULL; + if (d->sgi_port) { + alClosePort(d->sgi_port); + d->sgi_port = NULL; + } + + if (d->sgi_config) { + alFreeConfig(d->sgi_config); + d->sgi_config = NULL; + } + + DRIVER_THREAD_WAIT(d) + + if (d->audiobuffer) { + free(d->audiobuffer); + d->audiobuffer = NULL; } } static gboolean -irix_open (void *dp) +irix_open(void* dp) { - irix_driver * const d = dp; + irix_driver* const d = dp; long chpars[] = { AL_OUTPUT_RATE, AL_RATE_48000 }; ALseterrorhandler(0); ALsetparams(AL_DEFAULT_DEVICE, chpars, 2); - if(!(d->sgi_config = ALnewconfig())) { - error_error("ALnewconfig() failed."); - goto out; - } - - if(ALsetwidth(d->sgi_config, AL_SAMPLE_16) < 0) { - error_error("16 Bit output not supported."); - goto out; + if (!(d->sgi_config = ALnewconfig())) { + error_error(_("ALnewconfig() failed.")); + goto out; + } + + if (ALsetwidth(d->sgi_config, AL_SAMPLE_16) < 0) { + error_error(_("16 Bit output not supported.")); + goto out; } d->sample_factor = 1; - if(ALsetchannels(d->sgi_config, AL_STEREO) < 0) { - error_error("Stereo output not supported."); - goto out; + if (ALsetchannels(d->sgi_config, AL_STEREO) < 0) { + error_error(_("Stereo output not supported.")); + goto out; } d->sgi_bufsize = d->sgi_fragsize * 2 * 2; // stereo, 16 bit alSetQueueSize(d->sgi_config, d->sgi_fragsize); - if(!(d->sgi_port = ALopenport("soundtracker", "w", d->sgi_config))) { - error_error("Couldn't open audio port."); - goto out; + if (!(d->sgi_port = ALopenport("soundtracker", "w", d->sgi_config))) { + error_error(_("Couldn't open audio port.")); + goto out; } - if(!(d->audiobuffer = calloc(1, d->sgi_bufsize))) - goto out; + if (!(d->audiobuffer = calloc(1, d->sgi_bufsize))) + goto out; alSetFillPoint(d->sgi_port, d->sgi_fragsize / 2); - d->polltag = audio_poll_add(alGetFD(d->sgi_port), GDK_INPUT_WRITE, - irix_poll_ready_playing, d); d->firstpoll = FALSE; d->outtime = 0.0; d->playtime = 0.0; + + DRIVER_THREAD_RESUME(d) return TRUE; - out: +out: irix_release(dp); return FALSE; } static double -irix_get_play_time (void *dp) +irix_get_play_time(void* dp) { - irix_driver * const d = dp; + irix_driver* const d = dp; - if(1) { - struct timeval tv; - double curtime; + if (1) { + struct timeval tv; + double curtime; - gettimeofday(&tv, NULL); - curtime = tv.tv_sec + tv.tv_usec / 1e6; + gettimeofday(&tv, NULL); + curtime = tv.tv_sec + tv.tv_usec / 1e6; - return d->playtime + curtime - d->outtime; + return d->playtime + curtime - d->outtime; } } static inline int -irix_get_play_rate (void *d) +irix_get_play_rate(void* d) { return 48000; } -st_out_driver driver_out_irix = { - { "IRIX Output", +static void +irix_activate(void *dp, const gchar* group) +{ + irix_driver * const d = dp; + + DRIVER_THREAD_NEW(d, irix_playing, dp, "Playback") +} + +static void +irix_deactivate(void *dp) +{ + irix_driver * const d = dp; + + DRIVER_THREAD_CANCEL(d) +} + +static void +irix_commit (void* dp) +{ + irix_driver * const d = dp; + + DRIVER_THREAD_COMMIT(d) +} + +st_driver driver_out_irix = { + "IRIX Output", + + irix_new, + irix_destroy, + + irix_open, + irix_release, + + irix_getwidget, - irix_new, - irix_destroy, + NULL, + NULL, - irix_open, - irix_release, + irix_activate, + irix_deactivate, - irix_getwidget, - }, + irix_commit, irix_get_play_time, irix_get_play_rate diff -Nru soundtracker-0.6.8/app/drivers/jack.c soundtracker-1.0.2~pre2/app/drivers/jack.c --- soundtracker-0.6.8/app/drivers/jack.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/jack.c 2020-08-26 20:01:46.000000000 +0000 @@ -0,0 +1,790 @@ +/* + * The Real SoundTracker - JACK (output) driver + * + * Copyright (C) 2003 Anthony Van Groningen + * Copyright (C) 2014 Yury Aliaev + * Copyright (C) 2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/* + * TODO: + * need better declicking? + * slave transport was removed + * should master transport always work? even for pattern? Can we determine this info anyway? + * general thread safety: d->state should be wrapped in state_mx locks as a matter of principle + * In practice this is needed only when we are waiting on state_cv. + * XRUN counter + */ + +#include + +#if DRIVER_JACK + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include "driver.h" +#include "errors.h" +#include "gui-subs.h" +#include "mixer.h" +#include "preferences.h" + +/* suggested by Erik de Castro Lopo */ +#define INT16_MAX_float 32767.0f +static inline gfloat +sample_convert_s16_to_float(gint16 inval) +{ + return inval * (1.0 / (INT16_MAX_float + 1)); +} + +static inline gint16 +sample_convert_float_to_s16(gfloat inval) +{ + return lrintf(inval * INT16_MAX_float); +} + +typedef jack_default_audio_sample_t audio_t; +typedef jack_nframes_t nframes_t; + +/* For sampling driver only Rolling and Stopped states are valid */ +typedef enum { + JackDriverStateIsRolling, + JackDriverStateIsDeclicking, + JackDriverStateIsStopping, /* declicking is done, we want to transition to be stopped */ + JackDriverStateIsStopped +} jack_driver_state; + +/* +typedef enum { + JackDriverTransportIsInternal = 0, + JackDriverTransportIsMaster = 1, + // JackDriverTransportIsSlave = 2 +} jack_driver_transport; +*/ + +typedef enum { + JACK_FLAG_SAMPLING = 1, + JACK_FLAG_AUTOSTART = 1 << 1 +} jack_flags; + +typedef struct _jack_driver_group jack_driver_group; +typedef struct jack_driver { + /* prefs stuff */ + GtkWidget* configwidget; + GtkWidget* client_name_label; + GtkWidget* status_label; +// GtkWidget* transport_check; + guint transport_check_id, autostart_check_id; + GtkWidget* autostart_check; + gint flags; + gboolean is_active; /* jack seems to be running fine */ + jack_driver_group* group; + GMutex process_mx; /* try to lock this around process_core() */ + GCond state_cv; /* trigger after declicking if we have the lock */ + jack_driver_state state; /* internal state stuff */ + + /* jack + audio stuff */ + nframes_t buffer_size; + unsigned long sample_rate; + char* client_name; + jack_client_t* client; + jack_port_t *left, *right; + void* mixbuf; /* passed to audio_mix, big enough for stereo 16 bit nframes = nframes*4 */ + gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat); + STMixerFormat mf; + + nframes_t position, lastframes; /* frames since ST called open() and the last fragment size */ + gdouble outtime; /* Time of the last output operation */ +// jack_driver_transport transport; /* who do we serve? */ +} jack_driver; + +typedef struct { + jack_driver driver; /* Must be at the first place */ + + GtkWidget* declick_check; + gboolean do_declick; + + gboolean locked; /* set true if we get it. then we can trigger any CV's during process_core() */ +} jack_driver_playback; + +typedef struct { + jack_driver driver; /* Must be at the first place */ + + GMutex sampling_mx; + GThread* tid; +} jack_driver_sampling; + +struct _jack_driver_group { + jack_driver *sampling, *playback; + const gchar* name; +}; + +static jack_driver_group *groups = NULL; +static guint jack_driver_ref = 0; +static guint num_groups = 0, num_allocated = 2; + +static inline float +jack_driver_declick_coeff(nframes_t total, nframes_t current) +{ + /* total = # of frames it takes from 1.0 to 0.0 + current = total ... 0 */ + return (float)current / (float)total; +} + +static void +jack_driver_process_core(nframes_t nframes, jack_driver* d) +{ + audio_t *lbuf, *rbuf; + struct timeval tv; + gint16* mix = d->mixbuf; + nframes_t cnt = nframes; + float gain = 1.0f; + jack_driver_playback *dd = (jack_driver_playback *)d; + jack_driver_state state = d->state; + + lbuf = (audio_t*)jack_port_get_buffer(d->left, nframes); + rbuf = (audio_t*)jack_port_get_buffer(d->right, nframes); + + switch (state) { + + case JackDriverStateIsRolling: + d->callback(mix, nframes, d->sample_rate, d->mf); + d->position += nframes; + d->lastframes = nframes; + gettimeofday(&tv, NULL); + d->outtime = (gdouble)tv.tv_sec + (gdouble)tv.tv_usec * 1.0e-6; + while (cnt--) { + *(lbuf++) = sample_convert_s16_to_float(*mix++); + *(rbuf++) = sample_convert_s16_to_float(*mix++); + } + break; + + case JackDriverStateIsDeclicking: + d->callback(mix, (gint)nframes, (gint)d->sample_rate, (gint)d->mf); + d->position += nframes; + d->lastframes = nframes; + gettimeofday(&tv, NULL); + d->outtime = (gdouble)tv.tv_sec + (gdouble)tv.tv_usec * 1.0e-6; + while (cnt--) { + gain = jack_driver_declick_coeff(nframes, cnt); + *(lbuf++) = gain * sample_convert_s16_to_float(*mix++); + *(rbuf++) = gain * sample_convert_s16_to_float(*mix++); + } + /* safe because ST shouldn't call open() with pending release() */ + d->state = JackDriverStateIsStopping; + break; + + case JackDriverStateIsStopping: + /* if locked, then trigger change of state, otherwise keep silent */ + if (dd->locked) { + d->state = JackDriverStateIsStopped; + g_cond_signal(&d->state_cv); + } + /* fall down */ + + case JackDriverStateIsStopped: + default: + memset(lbuf, 0, nframes * sizeof(audio_t)); + memset(rbuf, 0, nframes * sizeof(audio_t)); + } +} + +static int +jack_driver_process_wrapper(nframes_t nframes, void* arg) +{ + jack_driver *d = arg, *rd, *pd; + + g_assert(d->group != NULL); + + pd = d->group->playback; + rd = d->group->sampling; + + if (pd && pd->is_active) { + jack_driver_playback* dd = (jack_driver_playback *)pd; + + if (g_mutex_trylock(&pd->process_mx)) { + dd->locked = TRUE; + jack_driver_process_core(nframes, pd); + g_mutex_unlock(&pd->process_mx); + } else { + dd->locked = FALSE; + jack_driver_process_core(nframes, pd); + } + } + + if (rd && rd->is_active && rd->state == JackDriverStateIsRolling) { + jack_driver_sampling* dd = (jack_driver_sampling *)rd; + nframes_t cnt = nframes; + audio_t *lbuf, *rbuf; + gint16* mix; + + if (!g_mutex_trylock(&rd->process_mx)) + /* The driver is being stopped, exiting immediately */ + return 0; + + lbuf = (audio_t*)jack_port_get_buffer(rd->left, nframes); + rbuf = (audio_t*)jack_port_get_buffer(rd->right, nframes); + rd->position += nframes; + + g_mutex_lock(&dd->sampling_mx); + mix = rd->mixbuf; + while (cnt--) { + *(mix++) = sample_convert_float_to_s16(*lbuf++); + *(mix++) = sample_convert_float_to_s16(*rbuf++); + } + g_mutex_unlock(&dd->sampling_mx); + g_mutex_unlock(&rd->process_mx); + g_cond_signal(&rd->state_cv); + } + + return 0; +} + +static void* +sampling_thread(void* arg) +{ + jack_driver* d = arg; + jack_driver_sampling* sd = arg; + + do { + g_mutex_lock(&sd->sampling_mx); + g_cond_wait(&d->state_cv, &sd->sampling_mx); + g_mutex_unlock(&sd->sampling_mx); + if (!d->is_active) + break; + + if (d->callback(d->mixbuf, d->buffer_size << 2, d->sample_rate, d->mf)) { + void* buf = malloc(d->buffer_size << 2); + + g_mutex_lock(&sd->sampling_mx); + d->mixbuf = buf; + g_mutex_unlock(&sd->sampling_mx); + } + } while(d->is_active); + + return NULL; +} +/* +static void +jack_driver_prefs_transport_callback(void* a, jack_driver* d) +{ //!!! Revise + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(d->transport_check))) { + if (d->is_active) { + d->transport = JackDriverTransportIsMaster; + return; + } else { + // reset + // gtk_signal_handler_block (GTK_OBJECT(d->transport_check), d->transport_check_id); + // gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(d->transport_check), FALSE); + // gtk_signal_handler_unblock (GTK_OBJECT(d->transport_check), d->transport_check_id); + return; + } + } else { + d->transport = JackDriverTransportIsInternal; + } +} +*/ + +static void +jack_driver_prefs_declick_callback(GtkToggleButton* widget, jack_driver_playback* d) +{ + d->do_declick = gtk_toggle_button_get_active(widget); +} + +static int +jack_driver_sample_rate_callback(nframes_t nframes, void* arg) +{ + jack_driver *d = arg, *cp; + + g_assert(d->group != NULL); + + d->sample_rate = nframes; + cp = (d->flags & JACK_FLAG_SAMPLING) ? d->group->playback : d->group->sampling; + if (cp) + cp->sample_rate = nframes; + + return 0; +} + +static int +jack_driver_buffer_size_callback(nframes_t nframes, void* arg) +{ + jack_driver *d = arg, *cp; + + g_assert(d->group != NULL); + + if (nframes > d->buffer_size) { + d->buffer_size = nframes; + d->mixbuf = realloc(d->mixbuf, d->buffer_size << 2); + } + + /* Counterpart, if exists */ + cp = (d->flags & JACK_FLAG_SAMPLING) ? d->group->playback : d->group->sampling; + if (cp) + if (nframes > cp->buffer_size) { + cp->buffer_size = nframes; + cp->mixbuf = realloc(cp->mixbuf, cp->buffer_size << 2); + } + + return 0; +} + +static void +jack_driver_prefs_update(jack_driver* d) +{ + gchar* status_buf; + + if (d->is_active) { + status_buf = g_strdup_printf(_("Running at %d Hz with %d frames"), (int)d->sample_rate, (int)d->buffer_size); + gtk_label_set_text(GTK_LABEL(d->client_name_label), d->client_name); + gtk_label_set_text(GTK_LABEL(d->status_label), status_buf); + } else { + status_buf = g_strdup_printf(_("Jack server not running?")); + gtk_label_set_text(GTK_LABEL(d->status_label), ""); + gtk_label_set_text(GTK_LABEL(d->client_name_label), status_buf); + } + g_free(status_buf); +} + +static void +jack_driver_server_has_shutdown(void* arg) +{ + jack_driver *d = arg, *cp; + + g_assert(d->group != NULL); + + d->is_active = FALSE; + d->client = NULL; + jack_driver_ref = 0; + jack_driver_prefs_update(d); + + /* Counterpart, if exists */ + cp = (d->flags & JACK_FLAG_SAMPLING) ? d->group->playback : d->group->sampling; + if (cp) { + cp->is_active = FALSE; + cp->client = NULL; + jack_driver_prefs_update(cp); + } +} + +static void +jack_driver_error(const char* msg) +{ + gchar* buf; + buf = g_strdup_printf(_("Jack driver error:\n%s"), msg); + error_error(buf); + g_free(buf); +} + +static void +jack_driver_activate_do(jack_driver* d) +{ + jack_status_t status; + + g_assert(d->group != NULL); + + if (!d->is_active) { + gboolean just_opened = FALSE, r_c = FALSE, p_c = FALSE; + + if (d->group->sampling) + r_c = (d->group->sampling->client != NULL); + if (d->group->playback) + p_c = (d->group->playback->client != NULL); + /* We open a client only if no client for the group is opened */ + if (!r_c && !p_c) { + jack_options_t options = (d->flags & JACK_FLAG_AUTOSTART) ? JackNullOption : JackNoStartServer; + d->client = jack_client_open("soundtracker", options, &status, NULL); + just_opened = TRUE; + } else /* Looking for the counterpart's client */ + d->client = (d->flags & JACK_FLAG_SAMPLING) ? + d->group->playback->client : d->group->sampling->client; + + if (d->client == NULL) { + /* we've failed here, but we should have a working dummy driver + because ST will segfault on NULL return */ + return; + } + + d->client_name = jack_get_client_name(d->client); + d->sample_rate = jack_get_sample_rate(d->client); + d->buffer_size = jack_get_buffer_size(d->client); + if (!d->mixbuf) + d->mixbuf = malloc(d->buffer_size << 2); + + d->left = jack_port_register(d->client, + (d->flags & JACK_FLAG_SAMPLING) ? "in_1" : "out_1", + JACK_DEFAULT_AUDIO_TYPE, + (d->flags & JACK_FLAG_SAMPLING) ? JackPortIsInput : JackPortIsOutput, 0); + d->right = jack_port_register(d->client, + (d->flags & JACK_FLAG_SAMPLING) ? "in_2" : "out_2", + JACK_DEFAULT_AUDIO_TYPE, + (d->flags & JACK_FLAG_SAMPLING) ? JackPortIsInput : JackPortIsOutput, 0); + + if (just_opened) { + jack_set_process_callback(d->client, jack_driver_process_wrapper, d); + jack_set_sample_rate_callback(d->client, jack_driver_sample_rate_callback, d); + jack_set_buffer_size_callback(d->client, jack_driver_buffer_size_callback, d); + jack_on_shutdown(d->client, jack_driver_server_has_shutdown, d); + + if (jack_activate(d->client)) { + static GtkWidget* dialog = NULL; + + d->is_active = FALSE; + gui_error_dialog(&dialog, _("Jack driver activation failed."), FALSE); + } else { + d->is_active = TRUE; + + if (jack_driver_ref == 0) + jack_set_error_function(jack_driver_error); + jack_driver_ref++; + } + } else + d->is_active = (d->flags & JACK_FLAG_SAMPLING) ? + d->group->playback->is_active : d->group->sampling->is_active; + } + jack_driver_prefs_update(d); +} + +static void +jack_driver_activate(void* dp, const gchar* group) +{ + guint i; + jack_driver_group *cur_grp = NULL; + + jack_driver* d = dp; + + if (!groups) + groups = g_new0(jack_driver_group, num_allocated); + for (i = 0; i < num_groups; i++) + if (!strcmp(groups[i].name, group)) { + cur_grp = &groups[i]; + break; + } + /* No group with the specified name, creating a new one */ + if (!cur_grp) { + /* Shoud be "==", but I'm a bit paranoiac $-) */ + if (num_groups >= num_allocated) { + num_allocated *= 2; + groups = g_renew(jack_driver_group, groups, num_allocated); + memset(&groups[num_groups], 0, (num_allocated - num_groups) * sizeof(jack_driver_group)); + } + cur_grp = &groups[num_groups++]; + cur_grp->name = group; /* The rest fields are already NULL */ + } + d->group = cur_grp; + if (d->flags & JACK_FLAG_SAMPLING) { + cur_grp->sampling = d; + ((jack_driver_sampling *)d)->tid = g_thread_new("Sampling", sampling_thread, dp); + } else + cur_grp->playback = d; + + jack_driver_activate_do(d); +} + +static void +jack_driver_prefs_autostart_callback(GtkToggleButton* widget, jack_driver* d) +{ + gboolean autostart = gtk_toggle_button_get_active(widget); + d->flags = autostart ? d->flags | JACK_FLAG_AUTOSTART : d->flags & ~JACK_FLAG_AUTOSTART; + + if (autostart && (!d->is_active)) + jack_driver_activate_do(d); +} + +static void +jack_driver_make_config_widgets(jack_driver* d) +{ + GtkWidget *thing, *mainbox, *hbox; + + d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); + + d->client_name_label = thing = gtk_label_new(""); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + gtk_widget_show(thing); + + thing = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + gtk_widget_show(thing); + + d->status_label = thing = gtk_label_new(""); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + gtk_widget_show(thing); + + thing = gtk_button_new_with_label(_("Update")); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + g_signal_connect_swapped(thing, "clicked", G_CALLBACK(jack_driver_activate_do), d); + gtk_widget_show(thing); + + hbox = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(mainbox), hbox, FALSE, TRUE, 0); + gtk_widget_show(hbox); + + thing = d->autostart_check = gtk_check_button_new_with_label(_("Jack autostart")); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + d->autostart_check_id = g_signal_connect(thing, "clicked", G_CALLBACK(jack_driver_prefs_autostart_callback), d); + gtk_widget_show(thing); +/* + thing = d->transport_check = gtk_check_button_new_with_label(_("transport master")); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + d->transport_check_id = g_signal_connect(thing, "clicked", G_CALLBACK(jack_driver_prefs_transport_callback), d); + gtk_widget_show(thing); +*/ + if (!(d->flags & JACK_FLAG_SAMPLING)) { + thing = ((jack_driver_playback *)d)->declick_check = gtk_check_button_new_with_label(_("declick")); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "clicked", G_CALLBACK(jack_driver_prefs_declick_callback), d); + } + gtk_widget_show(thing); +} + +static void +jack_driver_init(jack_driver* d) +{ +#ifdef WORDS_BIGENDIAN + d->mf = ST_MIXER_FORMAT_S16_BE | ST_MIXER_FORMAT_STEREO; +#else + d->mf = ST_MIXER_FORMAT_S16_LE | ST_MIXER_FORMAT_STEREO; +#endif + d->state = JackDriverStateIsStopped; + g_mutex_init(&d->process_mx); + g_cond_init(&d->state_cv); + jack_driver_make_config_widgets(d); +} + +static void* +jack_driver_new_out(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) +{ + jack_driver_playback* d = g_new0(jack_driver_playback, 1); + +// d->transport = JackDriverTransportIsInternal; + ((jack_driver *)d)->callback = callback; + jack_driver_init((jack_driver *)d); + return d; +} + +static void* +jack_driver_new_in(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) +{ + jack_driver_sampling* d = g_new0(jack_driver_sampling, 1); + + ((jack_driver *)d)->flags |= JACK_FLAG_SAMPLING; + ((jack_driver *)d)->callback = callback; + g_mutex_init(&d->sampling_mx); + jack_driver_init((jack_driver *)d); + return d; +} + +static gboolean +jack_driver_open(void* dp) +{ + jack_driver* d = dp; + + if (!d->is_active) { + error_warning(_("Jack server is not running or some error occured.")); + return FALSE; + } + d->position = 0; + d->lastframes = 0; + d->outtime = 0.0; + d->state = JackDriverStateIsRolling; + + return TRUE; +} + +static void +jack_driver_release(void* dp) +{ + jack_driver* d = dp; + + g_mutex_lock(&d->process_mx); /* Aviod concurrency with processing callback */ + if (d->flags & JACK_FLAG_SAMPLING) { + d->state = JackDriverStateIsStopped; + } else { + jack_driver_playback* dd = dp; + + if (dd->do_declick) { + d->state = JackDriverStateIsDeclicking; + } else { + d->state = JackDriverStateIsStopping; + } + g_cond_wait(&d->state_cv, &d->process_mx); + /* at this point process() has set state to stopped */ + } + g_mutex_unlock(&d->process_mx); +} + +static void +jack_driver_deactivate(void* dp) +{ + jack_driver* d = dp; + if (d->is_active) { + jack_client_t* old_client = d->client; + gboolean r_c = FALSE, p_c = FALSE; + + d->is_active = FALSE; + d->client = NULL; + if (d->flags & JACK_FLAG_SAMPLING) { + g_cond_signal(&d->state_cv); + g_thread_join(((jack_driver_sampling *)d)->tid); + } + jack_port_unregister(old_client, d->left); + jack_port_unregister(old_client, d->right); + + if (d->group->sampling) + r_c = (d->group->sampling->client != NULL); + if (d->group->playback) + p_c = (d->group->playback->client != NULL); + /* No active drivers, close the client */ + if (!r_c && !p_c) { + jack_driver_ref--; + if (jack_driver_ref == 0) + jack_set_error_function(NULL); + + jack_client_close(old_client); + jack_driver_prefs_update(d); + } + } +} + +static void +jack_driver_destroy(void* dp) +{ + jack_driver* d = dp; + + gtk_widget_destroy(d->configwidget); + if (d->mixbuf != NULL) { + free(d->mixbuf); + d->mixbuf = NULL; + } + g_mutex_clear(&d->process_mx); + if (d->flags & JACK_FLAG_SAMPLING) + g_mutex_clear(&((jack_driver_sampling *)d)->sampling_mx); + g_cond_clear(&d->state_cv); + g_free(d); +} + +static GtkWidget* +jack_driver_getwidget(void* dp) +{ + jack_driver* d = dp; + jack_driver_prefs_update(d); + return d->configwidget; +} + +//!!! Transport master? +static gboolean +jack_driver_loadsettings(void* dp, const gchar* f) +{ + jack_driver* d = dp; + + if (!(d->flags & JACK_FLAG_SAMPLING)) { + jack_driver_playback* dd = dp; + + dd->do_declick = prefs_get_bool(f, "jack-declick", TRUE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->declick_check), dd->do_declick); + } + + d->flags = prefs_get_bool(f, "jack-autostart", FALSE) ? + d->flags | JACK_FLAG_AUTOSTART : d->flags & ~JACK_FLAG_AUTOSTART; + /* To prevent Jack server preliminary starting */ + g_signal_handler_block(G_OBJECT(d->autostart_check), d->autostart_check_id); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(d->autostart_check), d->flags & JACK_FLAG_AUTOSTART); + g_signal_handler_unblock(G_OBJECT(d->autostart_check), d->autostart_check_id); + + return TRUE; +} + +static gboolean +jack_driver_savesettings(void* dp, const gchar* f) +{ + jack_driver* d = dp; + + if (!(d->flags & JACK_FLAG_SAMPLING)) + prefs_put_bool(f, "jack-declick", ((jack_driver_playback *)d)->do_declick); + + prefs_put_bool(f, "jack-autostart", (d->flags & JACK_FLAG_AUTOSTART) != 0); + return TRUE; +} + +static double +jack_driver_get_play_time(void* dp) +{ + jack_driver* const d = dp; + struct timeval tv; + + gettimeofday(&tv, NULL); + + return (double)(d->position - d->lastframes) / (double)d->sample_rate + + (gdouble)tv.tv_sec + (gdouble)tv.tv_usec * 1.0e-6 - d->outtime; +} + +static inline int +jack_driver_get_play_rate(void* d) +{ + jack_driver* const dp = d; + return (int)dp->sample_rate; +} + +st_driver driver_out_jack = { + "JACK Output", + jack_driver_new_out, /* create new instance of this driver class */ + jack_driver_destroy, /* destroy instance of this driver class */ + jack_driver_open, /* open the driver */ + jack_driver_release, /* close the driver, release audio */ + jack_driver_getwidget, /* get pointer to configuration widget */ + jack_driver_loadsettings, /* load configuration from provided preferences section */ + jack_driver_savesettings, /* save configuration to specified preferences section */ + jack_driver_activate, /* create ports, run client and optionally the server if needed */ + jack_driver_deactivate, /* close ports, close the client if no ports exist anymore */ + NULL, /* No need to commit data arrival */ + jack_driver_get_play_time, /* get time offset since first sound output */ + jack_driver_get_play_rate /* get current play rate */ +}; + +st_driver driver_in_jack = { + "JACK Input", + jack_driver_new_in, + jack_driver_destroy, + jack_driver_open, + jack_driver_release, + jack_driver_getwidget, + jack_driver_loadsettings, + jack_driver_savesettings, + jack_driver_activate, + jack_driver_deactivate, + NULL, + jack_driver_get_play_time, + jack_driver_get_play_rate +}; + +#endif /* DRIVER_JACK */ diff -Nru soundtracker-0.6.8/app/drivers/jack-output.c soundtracker-1.0.2~pre2/app/drivers/jack-output.c --- soundtracker-0.6.8/app/drivers/jack-output.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/jack-output.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,470 +0,0 @@ -/* - * The Real SoundTracker - JACK (output) driver - * - * Copyright (C) 2003 Anthony Van Groningen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* - * TODO: - * scopes: I think this is an ST issue, but I don't think our clock updates enough. - * Clientname code could be improved. Max 10 clients soundtracker_0-9 - * need better declicking? - * endianness? - * slave transport was removed - * should master transport always work? even for pattern? Can we determine this info anyway? - * general thread safety: d->state should be wrapped in state_mx locks as a matter of principle - * In practice this is needed only when we are waiting on state_cv. - * XRUN counter - */ - -#include - -#if DRIVER_JACK - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include "i18n.h" -#include "driver-out.h" -#include "mixer.h" -#include "errors.h" -#include "gui.h" -#include "preferences.h" - -// suggested by Erik de Castro Lopo -#define INT16_MAX 32767.0f -static inline float -sample_convert_s16_to_float(gint16 inval) -{ - return inval * (1.0 / (INT16_MAX + 1)); -} - -typedef jack_default_audio_sample_t audio_t; -typedef jack_nframes_t nframes_t; - -typedef enum { - JackDriverStateIsRolling, - JackDriverStateIsDeclicking, - JackDriverStateIsStopping, // declicking is done, we want to transition to stopped - JackDriverStateIsStopped -} jack_driver_state; - -typedef enum { - JackDriverTransportIsInternal = 0, - JackDriverTransportIsMaster = 1, - JackDriverTransportIsSlave = 2 -} jack_driver_transport; - -typedef struct jack_driver { - // prefs stuff - GtkWidget *configwidget; - GtkWidget *client_name_label; - GtkWidget *status_label; - GtkWidget *transport_check; - guint transport_check_id; - GtkWidget *declick_check; - gboolean do_declick; - - // jack + audio stuff - nframes_t buffer_size; - unsigned long sample_rate; - char client_name[15]; - jack_client_t *client; - jack_port_t *left,*right; - void *mix; // passed to audio_mix, big enough for stereo 16 bit nframes = nframes*4 - STMixerFormat mf; - jack_transport_info_t ti; - - // internal state stuff - jack_driver_state state; - nframes_t position; // frames since ST called open() - pthread_mutex_t *process_mx; // try to lock this around process_core() - pthread_cond_t *state_cv; // trigger after declicking if we have the lock - gboolean locked; // set true if we get it. then we can trigger any CV's during process_core() - gboolean is_active; // jack seems to be running fine - jack_driver_transport transport; // who do we serve? - -} jack_driver; - -static inline float -jack_driver_declick_coeff (nframes_t total, nframes_t current) -{ - // total = # of frames it takes from 1.0 to 0.0 - // current = total ... 0 - return (float)current/(float)total; -} - -static void -jack_driver_process_core (nframes_t nframes, jack_driver *d) -{ - audio_t *lbuf,*rbuf; - gint16 *mix = d->mix; - nframes_t cnt = nframes; - float gain = 1.0f; - jack_driver_state state = d->state; - - lbuf = (audio_t *) jack_port_get_buffer(d->left,nframes); - rbuf = (audio_t *) jack_port_get_buffer(d->right,nframes); - - switch (state) { - - case JackDriverStateIsRolling: - audio_mix (mix, nframes, d->sample_rate, d->mf); - d->position += nframes; - while (cnt--) { - *(lbuf++) = sample_convert_s16_to_float (*mix++); - *(rbuf++) = sample_convert_s16_to_float (*mix++); - } - d->ti.transport_state = JackTransportRolling; // redundant or reassuring? - break; - - case JackDriverStateIsDeclicking: - audio_mix (mix, nframes, d->sample_rate, d->mf); - d->position += nframes; - while (cnt--) { - gain = jack_driver_declick_coeff (nframes, cnt); - *(lbuf++) = gain * sample_convert_s16_to_float (*mix++); - *(rbuf++) = gain * sample_convert_s16_to_float (*mix++); - } - // safe because ST shouldn't call open() with pending release() - d->state = JackDriverStateIsStopping; - d->ti.transport_state = JackTransportStopped; - break; - - case JackDriverStateIsStopping: - // if locked, then trigger change of state, otherwise keep silent - if (d->locked) { - d->state = JackDriverStateIsStopped; - pthread_cond_signal (d->state_cv); - } - // fall down - - case JackDriverStateIsStopped: - default: - memset (lbuf, 0, nframes * sizeof (audio_t)); - memset (rbuf, 0, nframes * sizeof (audio_t)); - d->ti.transport_state = JackTransportStopped; - } - - if (d->transport == JackDriverTransportIsMaster) { - d->ti.frame = d->position; - d->ti.valid = JackTransportPosition | JackTransportState; - jack_set_transport_info (d->client, &(d->ti)); - } - else { - d->ti.valid = 0; - jack_set_transport_info (d->client, &d->ti); - } -} - -static int -jack_driver_process_wrapper (nframes_t nframes, void *arg) -{ - jack_driver *d = arg; - - if (pthread_mutex_trylock (d->process_mx) == 0) { - d->locked = TRUE; - jack_driver_process_core (nframes, d); - pthread_mutex_unlock (d->process_mx); - } else { - d->locked = FALSE; - jack_driver_process_core (nframes, d); - } - return 0; -} - -static void -jack_driver_prefs_transport_callback (void *a, jack_driver *d) -{ - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (d->transport_check))) { - if (d->is_active && (jack_engine_takeover_timebase (d->client) == 0)) { - d->transport = JackDriverTransportIsMaster; - return; - } else { - // reset - // gtk_signal_handler_block (GTK_OBJECT(d->transport_check), d->transport_check_id); - // gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(d->transport_check), FALSE); - // gtk_signal_handler_unblock (GTK_OBJECT(d->transport_check), d->transport_check_id); - return; - } - } else { - d->transport = JackDriverTransportIsInternal; - } -} - -static void -jack_driver_prefs_declick_callback (void *a, jack_driver *d) -{ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (d->declick_check))) - d->do_declick = TRUE; - else - d->do_declick = FALSE; -} - -static void -jack_driver_make_config_widgets (jack_driver *d) -{ - GtkWidget *thing, *mainbox, *hbox; - - d->configwidget = mainbox = gtk_vbox_new (FALSE,2); - - d->client_name_label = thing = gtk_label_new (""); - gtk_box_pack_start (GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - gtk_widget_show (thing); - - thing = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - gtk_widget_show (thing); - - d->status_label = thing = gtk_label_new (""); - gtk_box_pack_start (GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - gtk_widget_show (thing); - - hbox = gtk_hbox_new (FALSE, 4); - gtk_box_pack_start (GTK_BOX(mainbox), hbox, FALSE, TRUE, 0); - gtk_widget_show (hbox); - - thing = d->transport_check = gtk_check_button_new_with_label (_("transport master")); - gtk_box_pack_start (GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - d->transport_check_id = gtk_signal_connect(GTK_OBJECT(thing), "clicked", GTK_SIGNAL_FUNC(jack_driver_prefs_transport_callback),d); - gtk_widget_show (thing); - - thing = d->declick_check = gtk_check_button_new_with_label (_("declick")); - gtk_box_pack_start (GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", GTK_SIGNAL_FUNC(jack_driver_prefs_declick_callback),d); - gtk_widget_show (thing); -} - -static int -jack_driver_sample_rate_callback (nframes_t nframes, void *arg) -{ - jack_driver *d = arg; - d->sample_rate = nframes; - return 0; -} - -static void -jack_driver_prefs_update (jack_driver *d) -{ - char status_buf[64]; - - if (d->is_active) { - sprintf (status_buf, _("Running at %d Hz with %d frames"), (int)d->sample_rate, (int)d->buffer_size); - gtk_label_set_text (GTK_LABEL (d->client_name_label), d->client_name); - } - else - sprintf (status_buf, _("Jack server not running?")); - gtk_label_set_text (GTK_LABEL (d->status_label), status_buf); - -} - -static void -jack_driver_server_has_shutdown (void *arg) -{ - jack_driver *d = arg; - d->is_active = FALSE; - jack_driver_prefs_update (d); -} - -static void -jack_driver_error (const char *s) -{ - -} - -static void * -jack_driver_new (void) -{ - jack_driver *d = g_new(jack_driver, 1); - int i; - - d->mix = NULL; - d->mf = ST_MIXER_FORMAT_S16_LE | ST_MIXER_FORMAT_STEREO; - // d->mf = ST_MIXER_FORMAT_S16_BE | ST_MIXER_FORMAT_STEREO; - d->state = JackDriverStateIsStopped; - //d->transport = JackDriverTransportIsSlave; - d->transport = JackDriverTransportIsInternal; - d->position = 0; - d->is_active = FALSE; - d->process_mx = (pthread_mutex_t*)malloc(sizeof (pthread_mutex_t)); - d->state_cv = (pthread_cond_t *)malloc(sizeof (pthread_mutex_t)); - d->do_declick = TRUE; - pthread_mutex_init (d->process_mx, NULL); - pthread_cond_init (d->state_cv, NULL); - jack_driver_make_config_widgets (d); - - jack_set_error_function (jack_driver_error); - - // TODO: this should be improved, both error handling and saving the string - // I'm probably not taking advantage of libjack - sprintf (d->client_name, _("soundtracker")); - d->client_name[12] = '_'; - d->client_name[14] = 0; - for (i = 0; i < 9; i++) { - d->client_name[13] = 48 + i; // "0"-"9" - if ((d->client = jack_client_new (d->client_name)) != 0) { - break; - } - } - if (d->client == NULL) { - // we've failed here, but we should have a working dummy driver - // because ST will segfault on NULL return - return d; - } - - // Jack-dependent setup only - d->sample_rate = jack_get_sample_rate (d->client); - d->buffer_size = jack_get_buffer_size (d->client); - d->mix = calloc(1, d->buffer_size * 4); - - d->left = jack_port_register (d->client,_("out_1"),JACK_DEFAULT_AUDIO_TYPE,JackPortIsOutput,0); - d->right = jack_port_register (d->client,_("out_2"),JACK_DEFAULT_AUDIO_TYPE,JackPortIsOutput,0); - - jack_set_process_callback (d->client,jack_driver_process_wrapper, d); - jack_set_sample_rate_callback (d->client,jack_driver_sample_rate_callback, d); - jack_on_shutdown (d->client, jack_driver_server_has_shutdown, d); - - if (jack_activate (d->client)) { - d->is_active = FALSE; - } else { - d->is_active = TRUE; - } - return d; -} - - -static gboolean -jack_driver_open (void *dp) -{ - jack_driver *d = dp; - - if (!d->is_active) { - // TODO: need a pop-up message, and bail out for now - return FALSE; - } - d->position = 0; - d->state = JackDriverStateIsRolling; - return TRUE; -} - - -static void -jack_driver_release (void *dp) -{ - jack_driver *d = dp; - - pthread_mutex_lock (d->process_mx); - if (d->do_declick) { - d->state = JackDriverStateIsDeclicking; - } else { - d->state = JackDriverStateIsStopping; - } - pthread_cond_wait (d->state_cv,d->process_mx); - // at this point process() has set state to stopped - pthread_mutex_unlock (d->process_mx); -} - -static void -jack_driver_destroy (void *dp) -{ - jack_driver *d = dp; - - printf("destroy in\n"); - - if (d->is_active) { - d->is_active = FALSE; - jack_client_close (d->client); - } - gtk_widget_destroy (d->configwidget); - if (d->mix != NULL) { - free (d->mix); - } - pthread_mutex_destroy (d->process_mx); - pthread_cond_destroy (d->state_cv); - g_free(d); - printf("destroy out\n"); -} - -static GtkWidget * -jack_driver_getwidget (void *dp) -{ - jack_driver *d = dp; - jack_driver_prefs_update (d); - return d->configwidget; -} - -static gboolean -jack_driver_loadsettings (void *dp, prefs_node *f) -{ - jack_driver *d = dp; - // prefs_get_string (f, "jack_client_name", d->client_name); - prefs_get_int (f, "jack-declick", &(d->do_declick)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(d->declick_check), d->do_declick); - return TRUE; -} - -static gboolean -jack_driver_savesettings (void *dp, prefs_node *f) -{ - jack_driver *d = dp; - // prefs_put_string (f, "jack-client_name", d->client_name); - prefs_put_int (f, "jack-declick", d->do_declick); - return TRUE; -} - -static double -jack_driver_get_play_time (void *dp) -{ - jack_driver * const d = dp; - return (double)d->position / (double)d->sample_rate; -} - -static inline int -jack_driver_get_play_rate (void *d) -{ - jack_driver * const dp = d; - return (int)dp->sample_rate; -} - -st_out_driver driver_out_jack = { - { "JACK Output", - jack_driver_new, // create new instance of this driver class - jack_driver_destroy, // destroy instance of this driver class - jack_driver_open, // open the driver - jack_driver_release, // close the driver, release audio - jack_driver_getwidget, // get pointer to configuration widget - jack_driver_loadsettings, // load configuration from provided prefs_node - jack_driver_savesettings, // save configuration to specified prefs_node - }, - jack_driver_get_play_time, // get time offset since first sound output - jack_driver_get_play_rate -}; - -#endif /* DRIVER_JACK */ diff -Nru soundtracker-0.6.8/app/drivers/Makefile.am soundtracker-1.0.2~pre2/app/drivers/Makefile.am --- soundtracker-0.6.8/app/drivers/Makefile.am 2006-02-25 12:52:11.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/Makefile.am 2021-02-13 21:00:49.000000000 +0000 @@ -1,26 +1,18 @@ noinst_LIBRARIES = libdrivers.a -libdrivers_a_SOURCES = dummy-drivers.c file-output.c +libdrivers_a_SOURCES = dummy-drivers.c driver-thread.h if DRIVER_OSS - libdrivers_a_SOURCES += oss-output.c oss-input.c + libdrivers_a_SOURCES += oss.c endif if DRIVER_ALSA - libdrivers_a_SOURCES += alsa-output.c alsa-input.c -endif - -if DRIVER_ALSA_050 - libdrivers_a_SOURCES += alsa2-output.c alsa2-input.c -endif - -if DRIVER_ESD - libdrivers_a_SOURCES += esd-output.c + libdrivers_a_SOURCES += alsa1x.c endif if DRIVER_JACK - libdrivers_a_SOURCES += jack-output.c + libdrivers_a_SOURCES += jack.c endif if DRIVER_IRIX @@ -35,6 +27,10 @@ libdrivers_a_SOURCES += sdl-output.c endif -INCLUDES = -I.. ${ST_S_JACK_INCLUDES} +if DRIVER_PULSE + libdrivers_a_SOURCES += pulse-output.c +endif + +AM_CPPFLAGS = -I.. EXTRA_DIST = dsound-output.c diff -Nru soundtracker-0.6.8/app/drivers/Makefile.in soundtracker-1.0.2~pre2/app/drivers/Makefile.in --- soundtracker-0.6.8/app/drivers/Makefile.in 2006-02-25 13:37:16.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/Makefile.in 2021-02-26 19:46:41.000000000 +0000 @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.7.9 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 -# Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,16 +14,67 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. - +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -35,29 +86,119 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : +build_triplet = @build@ host_triplet = @host@ -@DRIVER_OSS_TRUE@am__append_1 = oss-output.c oss-input.c -@DRIVER_ALSA_TRUE@am__append_2 = alsa-output.c alsa-input.c -@DRIVER_ALSA_050_TRUE@am__append_3 = alsa2-output.c alsa2-input.c -@DRIVER_ESD_TRUE@am__append_4 = esd-output.c -@DRIVER_JACK_TRUE@am__append_5 = jack-output.c -@DRIVER_IRIX_TRUE@am__append_6 = irix-output.c -@DRIVER_SUN_TRUE@am__append_7 = sun-output.c sun-input.c -@DRIVER_SDL_TRUE@am__append_8 = sdl-output.c +@DRIVER_OSS_TRUE@am__append_1 = oss.c +@DRIVER_ALSA_TRUE@am__append_2 = alsa1x.c +@DRIVER_JACK_TRUE@am__append_3 = jack.c +@DRIVER_IRIX_TRUE@am__append_4 = irix-output.c +@DRIVER_SUN_TRUE@am__append_5 = sun-output.c sun-input.c +@DRIVER_SDL_TRUE@am__append_6 = sdl-output.c +@DRIVER_PULSE_TRUE@am__append_7 = pulse-output.c +subdir = app/drivers +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = +libdrivers_a_AR = $(AR) $(ARFLAGS) +libdrivers_a_LIBADD = +am__libdrivers_a_SOURCES_DIST = dummy-drivers.c driver-thread.h oss.c \ + alsa1x.c jack.c irix-output.c sun-output.c sun-input.c \ + sdl-output.c pulse-output.c +@DRIVER_OSS_TRUE@am__objects_1 = oss.$(OBJEXT) +@DRIVER_ALSA_TRUE@am__objects_2 = alsa1x.$(OBJEXT) +@DRIVER_JACK_TRUE@am__objects_3 = jack.$(OBJEXT) +@DRIVER_IRIX_TRUE@am__objects_4 = irix-output.$(OBJEXT) +@DRIVER_SUN_TRUE@am__objects_5 = sun-output.$(OBJEXT) \ +@DRIVER_SUN_TRUE@ sun-input.$(OBJEXT) +@DRIVER_SDL_TRUE@am__objects_6 = sdl-output.$(OBJEXT) +@DRIVER_PULSE_TRUE@am__objects_7 = pulse-output.$(OBJEXT) +am_libdrivers_a_OBJECTS = dummy-drivers.$(OBJEXT) $(am__objects_1) \ + $(am__objects_2) $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_7) +libdrivers_a_OBJECTS = $(am_libdrivers_a_OBJECTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libdrivers_a_SOURCES) +DIST_SOURCES = $(am__libdrivers_a_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +ARFLAGS = @ARFLAGS@ AUDIOFILE_CFLAGS = @AUDIOFILE_CFLAGS@ -AUDIOFILE_CONFIG = @AUDIOFILE_CONFIG@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +CANVAS_CFLAGS = @CANVAS_CFLAGS@ +CANVAS_LIBS = @CANVAS_LIBS@ CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ @@ -65,45 +206,26 @@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DRIVER_ALSA_050_FALSE = @DRIVER_ALSA_050_FALSE@ -DRIVER_ALSA_050_TRUE = @DRIVER_ALSA_050_TRUE@ -DRIVER_ALSA_09x_FALSE = @DRIVER_ALSA_09x_FALSE@ -DRIVER_ALSA_09x_TRUE = @DRIVER_ALSA_09x_TRUE@ -DRIVER_ALSA_FALSE = @DRIVER_ALSA_FALSE@ -DRIVER_ALSA_TRUE = @DRIVER_ALSA_TRUE@ -DRIVER_ESD_FALSE = @DRIVER_ESD_FALSE@ -DRIVER_ESD_TRUE = @DRIVER_ESD_TRUE@ -DRIVER_IRIX_FALSE = @DRIVER_IRIX_FALSE@ -DRIVER_IRIX_TRUE = @DRIVER_IRIX_TRUE@ -DRIVER_JACK_FALSE = @DRIVER_JACK_FALSE@ -DRIVER_JACK_TRUE = @DRIVER_JACK_TRUE@ -DRIVER_OSS_FALSE = @DRIVER_OSS_FALSE@ -DRIVER_OSS_TRUE = @DRIVER_OSS_TRUE@ -DRIVER_SDL_FALSE = @DRIVER_SDL_FALSE@ -DRIVER_SDL_TRUE = @DRIVER_SDL_TRUE@ -DRIVER_SUN_FALSE = @DRIVER_SUN_FALSE@ -DRIVER_SUN_TRUE = @DRIVER_SUN_TRUE@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ESD_CFLAGS = @ESD_CFLAGS@ -ESD_CONFIG = @ESD_CONFIG@ -ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ -GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ -GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@ -GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ -GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ @@ -113,293 +235,255 @@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ -MKINSTALLDIRS = @MKINSTALLDIRS@ +MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ -NO_ASM_FALSE = @NO_ASM_FALSE@ -NO_ASM_TRUE = @NO_ASM_TRUE@ -NO_GDK_PIXBUF_FALSE = @NO_GDK_PIXBUF_FALSE@ -NO_GDK_PIXBUF_TRUE = @NO_GDK_PIXBUF_TRUE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ +PULSE_CFLAGS = @PULSE_CFLAGS@ +PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ -ST_S_JACK_INCLUDES = @ST_S_JACK_INCLUDES@ -ST_S_JACK_LIBS = @ST_S_JACK_LIBS@ -USE_GNOME_FALSE = @USE_GNOME_FALSE@ -USE_GNOME_TRUE = @USE_GNOME_TRUE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ -gnomepath = @gnomepath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ +mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ +sedpath = @sedpath@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ -target = @target@ target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ - +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ noinst_LIBRARIES = libdrivers.a - -libdrivers_a_SOURCES = dummy-drivers.c file-output.c $(am__append_1) $(am__append_2) $(am__append_3) $(am__append_4) $(am__append_5) $(am__append_6) $(am__append_7) $(am__append_8) - -INCLUDES = -I.. ${ST_S_JACK_INCLUDES} - +libdrivers_a_SOURCES = dummy-drivers.c driver-thread.h $(am__append_1) \ + $(am__append_2) $(am__append_3) $(am__append_4) \ + $(am__append_5) $(am__append_6) $(am__append_7) +AM_CPPFLAGS = -I.. EXTRA_DIST = dsound-output.c -subdir = app/drivers -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -LIBRARIES = $(noinst_LIBRARIES) - -libdrivers_a_AR = $(AR) cru -libdrivers_a_LIBADD = -am__libdrivers_a_SOURCES_DIST = dummy-drivers.c file-output.c \ - oss-output.c oss-input.c alsa-output.c alsa-input.c \ - alsa2-output.c alsa2-input.c esd-output.c jack-output.c \ - irix-output.c sun-output.c sun-input.c sdl-output.c -@DRIVER_OSS_TRUE@am__objects_1 = oss-output.$(OBJEXT) \ -@DRIVER_OSS_TRUE@ oss-input.$(OBJEXT) -@DRIVER_ALSA_TRUE@am__objects_2 = alsa-output.$(OBJEXT) \ -@DRIVER_ALSA_TRUE@ alsa-input.$(OBJEXT) -@DRIVER_ALSA_050_TRUE@am__objects_3 = alsa2-output.$(OBJEXT) \ -@DRIVER_ALSA_050_TRUE@ alsa2-input.$(OBJEXT) -@DRIVER_ESD_TRUE@am__objects_4 = esd-output.$(OBJEXT) -@DRIVER_JACK_TRUE@am__objects_5 = jack-output.$(OBJEXT) -@DRIVER_IRIX_TRUE@am__objects_6 = irix-output.$(OBJEXT) -@DRIVER_SUN_TRUE@am__objects_7 = sun-output.$(OBJEXT) \ -@DRIVER_SUN_TRUE@ sun-input.$(OBJEXT) -@DRIVER_SDL_TRUE@am__objects_8 = sdl-output.$(OBJEXT) -am_libdrivers_a_OBJECTS = dummy-drivers.$(OBJEXT) file-output.$(OBJEXT) \ - $(am__objects_1) $(am__objects_2) $(am__objects_3) \ - $(am__objects_4) $(am__objects_5) $(am__objects_6) \ - $(am__objects_7) $(am__objects_8) -libdrivers_a_OBJECTS = $(am_libdrivers_a_OBJECTS) - -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/alsa-input.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/alsa-output.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/alsa2-input.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/alsa2-output.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/dummy-drivers.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/esd-output.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/file-output.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/irix-output.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/jack-output.Po ./$(DEPDIR)/oss-input.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/oss-output.Po ./$(DEPDIR)/sdl-output.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/sun-input.Po ./$(DEPDIR)/sun-output.Po -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -DIST_SOURCES = $(am__libdrivers_a_SOURCES_DIST) -DIST_COMMON = $(srcdir)/Makefile.in Makefile.am -SOURCES = $(libdrivers_a_SOURCES) - all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj -$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu app/drivers/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) - -AR = ar +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu app/drivers/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu app/drivers/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) -libdrivers.a: $(libdrivers_a_OBJECTS) $(libdrivers_a_DEPENDENCIES) - -rm -f libdrivers.a - $(libdrivers_a_AR) libdrivers.a $(libdrivers_a_OBJECTS) $(libdrivers_a_LIBADD) - $(RANLIB) libdrivers.a + +libdrivers.a: $(libdrivers_a_OBJECTS) $(libdrivers_a_DEPENDENCIES) $(EXTRA_libdrivers_a_DEPENDENCIES) + $(AM_V_at)-rm -f libdrivers.a + $(AM_V_AR)$(libdrivers_a_AR) libdrivers.a $(libdrivers_a_OBJECTS) $(libdrivers_a_LIBADD) + $(AM_V_at)$(RANLIB) libdrivers.a mostlyclean-compile: - -rm -f *.$(OBJEXT) core *.core + -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsa-input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsa-output.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsa2-input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsa2-output.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alsa1x.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy-drivers.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esd-output.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file-output.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/irix-output.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jack-output.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oss-input.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oss-output.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jack.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oss.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pulse-output.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdl-output.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun-input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun-output.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ -@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ -@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ -@am__fastdepCC_TRUE@ fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ -@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ -@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ -@am__fastdepCC_TRUE@ fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` -uninstall-info-am: - -ETAGS = etags -ETAGSFLAGS = - -CTAGS = ctags -CTAGSFLAGS = - -tags: TAGS +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$tags$$unique" \ - || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique - -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - -top_distdir = ../.. -distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkinstalldirs) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) - installdirs: install: install-am install-exec: install-exec-am @@ -411,16 +495,22 @@ installcheck: installcheck-am install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi mostlyclean-generic: clean-generic: distclean-generic: - -rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -439,18 +529,40 @@ dvi-am: +html: html-am + +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -470,17 +582,25 @@ ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am + +.PRECIOUS: Makefile -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am info \ - info-am install install-am install-data install-data-am \ - install-exec install-exec-am install-info install-info-am \ - install-man install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ - ps ps-am tags uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru soundtracker-0.6.8/app/drivers/oss.c soundtracker-1.0.2~pre2/app/drivers/oss.c --- soundtracker-0.6.8/app/drivers/oss.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/oss.c 2020-08-26 20:01:46.000000000 +0000 @@ -0,0 +1,676 @@ + +/* + * The Real SoundTracker - OSS (input/output) driver. + * + * Copyright (C) 1998-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#if DRIVER_OSS + +#include +#include +#include +#include + +#include +#include +#include +#include +#ifdef HAVE_SYS_SOUNDCARD_H +#include +#elif HAVE_MACHINE_SOUNDCARD_H +#include +#elif HAVE_SOUNDCARD_H +#include +#endif +#include + +#include +#include + +#include "audio-subs.h" +#include "driver.h" +#include "driver-thread.h" +#include "errors.h" +#include "gui-subs.h" +#include "mixer.h" +#include "preferences.h" + +typedef struct oss_driver { + GtkWidget* configwidget; + GtkWidget* prefs_devdsp_w; + GtkWidget* prefs_resolution_w[2]; + GtkWidget* prefs_channels_w[2]; + GtkWidget* prefs_mixfreq_w[4]; + GtkWidget *bufsizespin_w, *bufsizelabel_w, *estimatelabel_w; + + int playrate; + int stereo; + int bits; + int fragsize, size; + int numfrags; + int mf; + gboolean realtimecaps; + + int soundfd; + void* sndbuf; + gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat); + int firstpoll; + + gchar* p_devdsp_saved; + const gchar* p_devdsp; + int p_resolution; + int p_channels; + int p_mixfreq; + int p_fragsize; + + double outtime; + double playtime; + + gboolean sampling; + DRIVER_THREAD_STUFF +} oss_driver; + +static const int mixfreqs[] = { 8000, 16000, 22050, 44100, -1 }; + +static void* +oss_playing(void* data) +{ + oss_driver* const d = data; + int w; + struct timeval tv; + + DRIVER_THREAD_LOOP_BEGIN(d, TRUE) + if (!d->firstpoll) { + + errno = 0; + if ((w = write(d->soundfd, d->sndbuf, d->size) != d->size)) { + if (w == -1) { + error_errno(_("OSS output: writing error")); + DRIVER_THREAD_ERROR + } else { + fprintf(stderr, "driver_oss: write not completely done.\n"); + } + } + + if (!d->realtimecaps) { + gettimeofday(&tv, NULL); + d->outtime = tv.tv_sec + tv.tv_usec / 1e6; + d->playtime += (double)d->fragsize / d->playrate; + } + } + + d->firstpoll = FALSE; + + d->callback(d->sndbuf, d->fragsize, d->playrate, d->mf); + DRIVER_THREAD_LOOP_END(d) + + return NULL; +} + +static void* +oss_sampling(void *data) +{ + oss_driver* const d = data; + + DRIVER_THREAD_LOOP_BEGIN(d, FALSE); + errno = 0; + if (read(d->soundfd, d->sndbuf, d->size) != d->size) { + error_errno(_("OSS input: reading error")); + DRIVER_THREAD_ERROR + } + + if (d->callback(d->sndbuf, d->size, d->playrate, d->mf)) { + d->sndbuf = malloc(d->size); + if (!d->sndbuf) { + error_errno(_("OSS input: out of memory error")); + DRIVER_THREAD_ERROR + } + } + DRIVER_THREAD_LOOP_END(d) + + return NULL; +} + +static void +prefs_init_from_structure(oss_driver* d) +{ + int i; + + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(d->prefs_resolution_w[d->p_resolution / 8 - 1]), TRUE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(d->prefs_channels_w[d->p_channels - 1]), TRUE); + + for (i = 0; mixfreqs[i] != -1; i++) { + if (d->p_mixfreq == mixfreqs[i]) + break; + } + if (mixfreqs[i] == -1) { + i = 3; + } + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(d->prefs_mixfreq_w[i]), TRUE); + + gtk_spin_button_set_value(GTK_SPIN_BUTTON(d->bufsizespin_w), d->p_fragsize); + + gtk_entry_set_text(GTK_ENTRY(d->prefs_devdsp_w), d->p_devdsp_saved); +} + +static void +prefs_update_estimate(oss_driver* d) +{ + gchar* buf = g_strdup_printf(_("Estimated audio delay: %f milliseconds"), + 1000 * (double)(1 << d->p_fragsize) / (double)d->p_mixfreq); + + gtk_label_set_text(GTK_LABEL(d->estimatelabel_w), buf); + g_free(buf); +} + +static void +prefs_resolution_changed(void* a, + oss_driver* d) +{ + d->p_resolution = (find_current_toggle(d->prefs_resolution_w, 2) + 1) * 8; +} + +static void +prefs_channels_changed(void* a, + oss_driver* d) +{ + d->p_channels = find_current_toggle(d->prefs_channels_w, 2) + 1; +} + +static void +prefs_mixfreq_changed(void* a, + oss_driver* d) +{ + d->p_mixfreq = mixfreqs[find_current_toggle(d->prefs_mixfreq_w, 4)]; + + if (!d->sampling) + prefs_update_estimate(d); +} + +static void +prefs_fragsize_changed(GtkSpinButton* w, + oss_driver* d) +{ + gchar* buf; + + d->p_fragsize = gtk_spin_button_get_value_as_int(w); + + buf = g_strdup_printf(_("(%d samples)"), 1 << d->p_fragsize); + gtk_label_set_text(GTK_LABEL(d->bufsizelabel_w), buf); + g_free(buf); + if (!d->sampling) + prefs_update_estimate(d); +} + +static void +oss_devdsp_changed(void* a, + oss_driver* d) +{ + d->p_devdsp = gtk_entry_get_text(GTK_ENTRY(d->prefs_devdsp_w)); +} + +static void +oss_make_config_widgets(oss_driver* d) +{ + GtkWidget *thing, *mainbox, *box2, *box3; + static const char* resolutionlabels[] = { "8 bits", "16 bits" }; + static const char* channelslabels[] = { "Mono", "Stereo" }; + static const char* mixfreqlabels[] = { "8000", "16000", "22050", "44100" }; + + d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); + + thing = gtk_label_new(_(d->sampling ? N_("These changes won't take effect until you restart sampling.") + : N_("These changes won't take effect until you restart playing."))); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + + thing = gtk_hseparator_new(); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_(d->sampling ? N_("Input device (e.g. '/dev/dsp'):") + : N_("Output device (e.g. '/dev/dsp'):"))); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + + thing = gtk_entry_new(); + gtk_entry_set_max_length(GTK_ENTRY(thing), 126); + gtk_widget_show(thing); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, FALSE, 0); + g_signal_connect_after(thing, "changed", + G_CALLBACK(oss_devdsp_changed), d); + d->prefs_devdsp_w = thing; + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Resolution:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + make_radio_group_full_ext(resolutionlabels, box2, d->prefs_resolution_w, + FALSE, TRUE, (void (*)())prefs_resolution_changed, d, TRUE); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Channels:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + make_radio_group_full_ext(channelslabels, box2, d->prefs_channels_w, + FALSE, TRUE, (void (*)())prefs_channels_changed, d, TRUE); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Frequency [Hz]:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + make_radio_group_full_ext(mixfreqlabels, box2, d->prefs_mixfreq_w, + FALSE, TRUE, (void (*)())prefs_mixfreq_changed, d, TRUE); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Buffer Size:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + + box3 = gtk_vbox_new(FALSE, 2); + gtk_box_pack_end(GTK_BOX(box2), box3, FALSE, FALSE, 0); + gtk_widget_show(box3); + + d->bufsizespin_w = thing = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(5.0, 5.0, 15.0, 1.0, 1.0, 0.0)), 0, 0); + gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); + gtk_widget_show(thing); + g_signal_connect(thing, "value-changed", + G_CALLBACK(prefs_fragsize_changed), d); + + d->bufsizelabel_w = thing = gtk_label_new(""); + gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); + gtk_widget_show(thing); + + if (!d->sampling) { + d->estimatelabel_w = thing = gtk_label_new(""); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + gtk_widget_show(thing); + } + + prefs_init_from_structure(d); +} + +static GtkWidget* +oss_getwidget(void* dp) +{ + oss_driver* const d = dp; + + return d->configwidget; +} + +static oss_driver* +oss_new(gboolean sampling, + gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) +{ + oss_driver* d = g_new(oss_driver, 1); + + d->p_devdsp_saved = g_strdup("/dev/dsp"); + d->p_devdsp = d->p_devdsp_saved; + d->p_mixfreq = 44100; + d->p_channels = 2; + d->p_resolution = 16; + d->p_fragsize = 11; // 2048; + d->soundfd = -1; + d->sndbuf = NULL; + d->sampling = sampling; + d->callback = callback; + + DRIVER_THREAD_INIT(d) + + oss_make_config_widgets(d); + + return d; +} + +static void* +oss_new_playback(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) +{ + return oss_new(FALSE, callback); +} + +static void* +oss_new_sampling(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) +{ + return oss_new(TRUE, callback); +} + +static void +oss_destroy(void* dp) +{ + oss_driver* const d = dp; + + gtk_widget_destroy(d->configwidget); + g_free(d->p_devdsp_saved); + DRIVER_THREAD_CLEAR(d) + + g_free(dp); +} + +static gboolean +oss_try_format(oss_driver* d, int f) +{ + int format = f; + + if (ioctl(d->soundfd, SNDCTL_DSP_SETFMT, &format) == -1) { + error_errno(_("OSS driver: setting format failed")); + return FALSE; + } + + return format == f; +} + +static gboolean +oss_try_stereo(oss_driver* d, int f) +{ + int format = f; + + if (ioctl(d->soundfd, SNDCTL_DSP_STEREO, &format) == -1) { + error_errno(_("OSS driver: setting number of channels failed")); + return FALSE; + } + + return format == f; +} + +static void +oss_release(void* dp) +{ + oss_driver* const d = dp; + + DRIVER_THREAD_STOP(d) + + if (d->soundfd >= 0) { + ioctl(d->soundfd, SNDCTL_DSP_RESET, 0); + close(d->soundfd); + d->soundfd = -1; + } + + DRIVER_THREAD_WAIT(d) + + if (d->sndbuf) { + free(d->sndbuf); + d->sndbuf = NULL; + } +} + +static gboolean +oss_open(void* dp) +{ + oss_driver* const d = dp; + int mf; + int i; + audio_buf_info info; + + /* O_NONBLOCK is required for the es1370 driver in Linux + 2.2.9, for example. It's open() behaviour is not + OSS-conformant (though Thomas Sailer says it's okay). */ + errno = 0; + if ((d->soundfd = open(d->p_devdsp, d->sampling ? O_RDONLY | O_NONBLOCK : O_WRONLY | O_NONBLOCK)) < 0) { + gchar* buf; + buf = g_strdup_printf(_("OSS driver (%s): Couldn't open %s"), + d->sampling ? "sampling" : "sound output", d->p_devdsp); + error_errno(buf); + g_free(buf); + goto out; + } + + // Clear O_NONBLOCK again + fcntl(d->soundfd, F_SETFL, 0); + + d->bits = 0; + mf = 0; + if (d->p_resolution == 16) { + if (oss_try_format(d, AFMT_S16_LE)) { + d->bits = 16; + mf = ST_MIXER_FORMAT_S16_LE; + } else if (oss_try_format(d, AFMT_S16_BE)) { + d->bits = 16; + mf = ST_MIXER_FORMAT_S16_BE; + } else if (oss_try_format(d, AFMT_U16_LE)) { + d->bits = 16; + mf = ST_MIXER_FORMAT_U16_LE; + } else if (oss_try_format(d, AFMT_U16_BE)) { + d->bits = 16; + mf = ST_MIXER_FORMAT_U16_BE; + } + } + if (d->bits != 16) { + if (oss_try_format(d, AFMT_S8)) { + d->bits = 8; + mf = ST_MIXER_FORMAT_S8; + } else if (oss_try_format(d, AFMT_U8)) { + d->bits = 8; + mf = ST_MIXER_FORMAT_U8; + } else { + gchar* buf = g_strdup_printf(_("Required %s format not supported."), + d->sampling ? "sampling" : "sound output"); + error_warning(buf); + g_free(buf); + goto out; + } + } + + if (d->p_channels == 2 && oss_try_stereo(d, 1)) { + d->stereo = 1; + mf |= ST_MIXER_FORMAT_STEREO; + } else if (oss_try_stereo(d, 0)) { + d->stereo = 0; + } + + d->mf = mf; + + d->playrate = d->p_mixfreq; + ioctl(d->soundfd, SNDCTL_DSP_SPEED, &d->playrate); + + if (d->sampling) { + i = 0x00040000 + d->p_fragsize + d->stereo + (d->bits / 8 - 1); + ioctl(d->soundfd, SNDCTL_DSP_SETFRAGMENT, &i); + ioctl(d->soundfd, SNDCTL_DSP_GETBLKSIZE, &d->fragsize); + } else { + i = 0x00020000 + d->p_fragsize + d->stereo + (d->bits / 8 - 1); + ioctl(d->soundfd, SNDCTL_DSP_SETFRAGMENT, &i); + + // Find out how many fragments OSS actually uses and how large they are. + ioctl(d->soundfd, SNDCTL_DSP_GETOSPACE, &info); + d->fragsize = info.fragsize; + d->numfrags = info.fragstotal; + + ioctl(d->soundfd, SNDCTL_DSP_GETCAPS, &i); + d->realtimecaps = i & DSP_CAP_REALTIME; + } + + d->size = (d->stereo + 1) * (d->bits / 8) * d->fragsize; + d->sndbuf = malloc(d->size); + + if (d->sampling) { + if (d->stereo == 1) { + d->fragsize /= 2; + } + if (d->bits == 16) { + d->fragsize /= 2; + } + + // At least my ES1370 requires an initial read... +// if (read(d->soundfd, d->sndbuf, d->fragsize) != d->fragsize) +// perror("OSS input: read()"); + } else { + d->firstpoll = TRUE; + d->playtime = 0; + } + DRIVER_THREAD_RESUME(d) + + return TRUE; + +out: + oss_release(dp); + return FALSE; +} + +static double +oss_get_play_time(void* dp) +{ + oss_driver* const d = dp; + + if (d->realtimecaps) { + count_info info; + + ioctl(d->soundfd, SNDCTL_DSP_GETOPTR, &info); + + return (double)info.bytes / (d->stereo + 1) / (d->bits / 8) / d->playrate; + } else { + struct timeval tv; + double curtime; + + gettimeofday(&tv, NULL); + curtime = tv.tv_sec + tv.tv_usec / 1e6; + + return d->playtime + curtime - d->outtime - d->numfrags * ((double)d->fragsize / d->playrate); + } +} + +static inline int +oss_get_play_rate(void* d) +{ + oss_driver* const dp = d; + return dp->playrate; +} + +static gboolean +oss_loadsettings(void* dp, + const gchar* f) +{ + oss_driver* const d = dp; + gchar* buf; + + if ((buf = prefs_get_string(f, "oss-devdsp", NULL))) { + g_free(d->p_devdsp_saved); + d->p_devdsp = d->p_devdsp_saved = buf; + } + d->p_resolution = prefs_get_int(f, "oss-resolution", d->p_resolution); + d->p_channels = prefs_get_int(f, "oss-channels", d->p_channels); + d->p_mixfreq = prefs_get_int(f, "oss-mixfreq", d->p_mixfreq); + d->p_fragsize = prefs_get_int(f, "oss-fragsize", d->p_fragsize); + + prefs_init_from_structure(d); + + return TRUE; +} + +static void +oss_activate(void *dp, const gchar* group) +{ + oss_driver * const d = dp; + + DRIVER_THREAD_NEW(d, d->sampling ? oss_sampling : oss_playing, dp, + d->sampling ? "Sampling" : "Playback") +} + +static void +oss_deactivate(void *dp) +{ + oss_driver * const d = dp; + + DRIVER_THREAD_CANCEL(d) +} + +static gboolean +oss_savesettings(void* dp, + const gchar* f) +{ + oss_driver* const d = dp; + + prefs_put_string(f, "oss-devdsp", d->p_devdsp); + prefs_put_int(f, "oss-resolution", d->p_resolution); + prefs_put_int(f, "oss-channels", d->p_channels); + prefs_put_int(f, "oss-mixfreq", d->p_mixfreq); + prefs_put_int(f, "oss-fragsize", d->p_fragsize); + + return TRUE; +} + +static void +oss_commit (void* dp) +{ + oss_driver * const d = dp; + + DRIVER_THREAD_COMMIT(d) +} + +st_driver driver_out_oss = { + "OSS Output", + + oss_new_playback, + oss_destroy, + + oss_open, + oss_release, + + oss_getwidget, + oss_loadsettings, + oss_savesettings, + + oss_activate, + oss_deactivate, + + oss_commit, + + oss_get_play_time, + oss_get_play_rate +}; + +st_driver driver_in_oss = { + "OSS Input", + + oss_new_sampling, + oss_destroy, + + oss_open, + oss_release, + + oss_getwidget, + oss_loadsettings, + oss_savesettings, + + oss_activate, + oss_deactivate, + + NULL, + + oss_get_play_time, + oss_get_play_rate +}; + +#endif /* DRIVER_OSS */ diff -Nru soundtracker-0.6.8/app/drivers/oss-input.c soundtracker-1.0.2~pre2/app/drivers/oss-input.c --- soundtracker-0.6.8/app/drivers/oss-input.c 2003-04-03 21:34:15.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/oss-input.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,348 +0,0 @@ - -/* - * The Real SoundTracker - OSS (input) driver. - * - * Copyright (C) 1998-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#if DRIVER_OSS - -#include -#include -#include -#include - -#include -#include -#include -#include -#ifdef HAVE_SYS_SOUNDCARD_H -# include -#elif HAVE_MACHINE_SOUNDCARD_H -# include -#elif HAVE_SOUNDCARD_H -# include -#endif -#include - -#include -#include - -#include "i18n.h" -#include "driver-in.h" -#include "mixer.h" -#include "errors.h" -#include "gui-subs.h" - -typedef struct oss_driver { - GtkWidget *configwidget; - GtkWidget *prefs_devdsp_w; - - int playrate; - int stereo; - int bits; - int fragsize; - int mf; - - GMutex *configmutex; - - int soundfd; - void *sndbuf; - int polltag; - - gchar p_devdsp[128]; - int p_resolution; - int p_channels; - int p_mixfreq; - int p_fragsize; -} oss_driver; - -static void -oss_poll_ready_sampling (gpointer data, - gint source, - GdkInputCondition condition) -{ - oss_driver * const d = data; - int size; - - size = (d->stereo + 1) * (d->bits / 8) * d->fragsize; - - read(d->soundfd, d->sndbuf, size); - - sample_editor_sampled(d->sndbuf, d->fragsize, d->playrate, d->mf); -} - -static void -prefs_init_from_structure (oss_driver *d) -{ - gtk_entry_set_text(GTK_ENTRY(d->prefs_devdsp_w), d->p_devdsp); -} - -static void -oss_devdsp_changed (void *a, - oss_driver *d) -{ - strncpy(d->p_devdsp, gtk_entry_get_text(GTK_ENTRY(d->prefs_devdsp_w)), 127); -} - -static void -oss_make_config_widgets (oss_driver *d) -{ - GtkWidget *thing, *mainbox, *box2; - - d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - - thing = gtk_label_new(_("These changes won't take effect until you restart sampling.")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Input device (e.g. '/dev/dsp'):")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - thing = gtk_entry_new_with_max_length(126); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - gtk_entry_set_text(GTK_ENTRY(thing), d->p_devdsp); - gtk_signal_connect_after(GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(oss_devdsp_changed), d); - d->prefs_devdsp_w = thing; - - prefs_init_from_structure(d); -} - -static GtkWidget * -oss_getwidget (void *dp) -{ - oss_driver * const d = dp; - - return d->configwidget; -} - -static void * -oss_new (void) -{ - oss_driver *d = g_new(oss_driver, 1); - - strcpy(d->p_devdsp, "/dev/dsp"); - d->p_mixfreq = 44100; - d->p_channels = 1; - d->p_resolution = 16; - d->p_fragsize = 9; - d->soundfd = -1; - d->sndbuf = NULL; - d->polltag = 0; - d->configmutex = g_mutex_new(); - - oss_make_config_widgets(d); - - return d; -} - -static void -oss_destroy (void *dp) -{ - oss_driver * const d = dp; - - gtk_widget_destroy(d->configwidget); - g_mutex_free(d->configmutex); - - g_free(dp); -} - -static gboolean -oss_try_format (oss_driver *d, int f) -{ - int format = f; - - if(ioctl(d->soundfd, SNDCTL_DSP_SETFMT, &format) == -1) { - perror("SNDCTL_DSP_SETFMT"); - return FALSE; - } - - return format == f; -} - -static gboolean -oss_try_stereo (oss_driver *d, int f) -{ - int format = f; - - if(ioctl(d->soundfd, SNDCTL_DSP_STEREO, &format) == -1) { - perror("SNDCTL_DSP_STEREO"); - return FALSE; - } - - return format == f; -} - -static void -oss_release (void *dp) -{ - oss_driver * const d = dp; - - free(d->sndbuf); - d->sndbuf = NULL; - - if(d->polltag != 0) { - gdk_input_remove(d->polltag); - d->polltag = 0; - } - - if(d->soundfd >= 0) { - close(d->soundfd); - d->soundfd = -1; - } -} - -static gboolean -oss_open (void *dp) -{ - oss_driver * const d = dp; - int mf; - int i; - - /* O_NONBLOCK is required for the es1370 driver in Linux - 2.2.9, for example. It's open() behaviour is not - OSS-conformant (though Thomas Sailer says it's okay). */ - if((d->soundfd = open(d->p_devdsp, O_RDONLY | O_NONBLOCK)) < 0) { - char buf[256]; - sprintf(buf, _("Couldn't open %s for sampling:\n%s"), d->p_devdsp, strerror(errno)); - error_error(buf); - goto out; - } - - // Clear O_NONBLOCK again - fcntl(d->soundfd, F_SETFL, 0); - - d->bits = 0; - mf = 0; - if(d->p_resolution == 16) { - if(oss_try_format(d, AFMT_S16_LE)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_S16_LE; - } else if(oss_try_format(d, AFMT_S16_BE)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_S16_BE; - } else if(oss_try_format(d, AFMT_U16_LE)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_U16_LE; - } else if(oss_try_format(d, AFMT_U16_BE)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_U16_BE; - } - } - if(d->bits != 16) { - if(oss_try_format(d, AFMT_S8)) { - d->bits = 8; - mf = ST_MIXER_FORMAT_S8; - } else if(oss_try_format(d, AFMT_U8)) { - d->bits = 8; - mf = ST_MIXER_FORMAT_U8; - } else { - error_error(_("Required sound output format not supported.\n")); - goto out; - } - } - - if(d->p_channels == 2 && oss_try_stereo(d, 1)) { - d->stereo = 1; - mf |= ST_MIXER_FORMAT_STEREO; - } else if(oss_try_stereo(d, 0)) { - d->stereo = 0; - } - - d->mf = mf; - - d->playrate = d->p_mixfreq; - ioctl(d->soundfd, SNDCTL_DSP_SPEED, &d->playrate); - - i = 0x00040000 + d->p_fragsize + d->stereo + (d->bits / 8 - 1); - ioctl(d->soundfd, SNDCTL_DSP_SETFRAGMENT, &i); - ioctl(d->soundfd, SNDCTL_DSP_GETBLKSIZE, &d->fragsize); - - d->sndbuf = calloc(1, d->fragsize); - - if(d->stereo == 1) { - d->fragsize /= 2; - } - if(d->bits == 16) { - d->fragsize /= 2; - } - - d->polltag = gdk_input_add(d->soundfd, GDK_INPUT_READ, oss_poll_ready_sampling, d); - - // At least my ES1370 requires an initial read... - read(d->soundfd, d->sndbuf, (d->stereo + 1) * (d->bits / 8) * d->fragsize); - - return TRUE; - - out: - oss_release(dp); - return FALSE; -} - -static gboolean -oss_loadsettings (void *dp, - prefs_node *f) -{ - oss_driver * const d = dp; - - prefs_get_string(f, "oss-devdsp", d->p_devdsp); - - prefs_init_from_structure(d); - - return TRUE; -} - -static gboolean -oss_savesettings (void *dp, - prefs_node *f) -{ - oss_driver * const d = dp; - - prefs_put_string(f, "oss-devdsp", d->p_devdsp); - - return TRUE; -} - -st_in_driver driver_in_oss = { - { "OSS Sampling", - - oss_new, - oss_destroy, - - oss_open, - oss_release, - - oss_getwidget, - oss_loadsettings, - oss_savesettings, - } -}; - -#endif /* DRIVER_OSS */ diff -Nru soundtracker-0.6.8/app/drivers/oss-output.c soundtracker-1.0.2~pre2/app/drivers/oss-output.c --- soundtracker-0.6.8/app/drivers/oss-output.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/oss-output.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,551 +0,0 @@ - -/* - * The Real SoundTracker - OSS (output) driver. - * - * Copyright (C) 1998-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#if DRIVER_OSS - -#include -#include -#include -#include - -#include -#include -#include -#include -#ifdef HAVE_SYS_SOUNDCARD_H -# include -#elif HAVE_MACHINE_SOUNDCARD_H -# include -#elif HAVE_SOUNDCARD_H -# include -#endif -#include - -#include -#include - -#include "i18n.h" -#include "driver-out.h" -#include "mixer.h" -#include "errors.h" -#include "gui-subs.h" -#include "preferences.h" - -typedef struct oss_driver { - GtkWidget *configwidget; - GtkWidget *prefs_devdsp_w; - GtkWidget *prefs_resolution_w[2]; - GtkWidget *prefs_channels_w[2]; - GtkWidget *prefs_mixfreq_w[4]; - GtkWidget *bufsizespin_w, *bufsizelabel_w, *estimatelabel_w; - - int playrate; - int stereo; - int bits; - int fragsize; - int numfrags; - int mf; - gboolean realtimecaps; - - GMutex *configmutex; - - int soundfd; - void *sndbuf; - gpointer polltag; - int firstpoll; - - gchar p_devdsp[128]; - int p_resolution; - int p_channels; - int p_mixfreq; - int p_fragsize; - - double outtime; - double playtime; -} oss_driver; - -static const int mixfreqs[] = { 8000, 16000, 22050, 44100, -1 }; - -static void -oss_poll_ready_playing (gpointer data, - gint source, - GdkInputCondition condition) -{ - oss_driver * const d = data; - int w; - int size; - struct timeval tv; - - if(!d->firstpoll) { - size = (d->stereo + 1) * (d->bits / 8) * d->fragsize; - - if((w = write(d->soundfd, d->sndbuf, size) != size)) { - if(w == -1) { - fprintf(stderr, "driver_oss: write() returned -1.\n"); - } else { - fprintf(stderr, "driver_oss: write not completely done.\n"); - } - } - - if(!d->realtimecaps) { - gettimeofday(&tv, NULL); - d->outtime = tv.tv_sec + tv.tv_usec / 1e6; - d->playtime += (double) d->fragsize / d->playrate; - } - } - - d->firstpoll = FALSE; - - audio_mix(d->sndbuf, d->fragsize, d->playrate, d->mf); -} - -static void -prefs_init_from_structure (oss_driver *d) -{ - int i; - - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_resolution_w[d->p_resolution / 8 - 1]), TRUE); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_channels_w[d->p_channels - 1]), TRUE); - - for(i = 0; mixfreqs[i] != -1; i++) { - if(d->p_mixfreq == mixfreqs[i]) - break; - } - if(mixfreqs[i] == -1) { - i = 3; - } - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_mixfreq_w[i]), TRUE); - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(d->bufsizespin_w), d->p_fragsize); - - gtk_entry_set_text(GTK_ENTRY(d->prefs_devdsp_w), d->p_devdsp); -} - -static void -prefs_update_estimate (oss_driver *d) -{ - char buf[64]; - - sprintf(buf, _("Estimated audio delay: %f milliseconds"), (double)(1000 * (1 << d->p_fragsize)) / d->p_mixfreq); - gtk_label_set_text(GTK_LABEL(d->estimatelabel_w), buf); -} - -static void -prefs_resolution_changed (void *a, - oss_driver *d) -{ - d->p_resolution = (find_current_toggle(d->prefs_resolution_w, 2) + 1) * 8; -} - -static void -prefs_channels_changed (void *a, - oss_driver *d) -{ - d->p_channels = find_current_toggle(d->prefs_channels_w, 2) + 1; -} - -static void -prefs_mixfreq_changed (void *a, - oss_driver *d) -{ - d->p_mixfreq = mixfreqs[find_current_toggle(d->prefs_mixfreq_w, 4)]; - prefs_update_estimate(d); -} - -static void -prefs_fragsize_changed (GtkSpinButton *w, - oss_driver *d) -{ - char buf[30]; - - d->p_fragsize = gtk_spin_button_get_value_as_int(w); - - sprintf(buf, _("(%d samples)"), 1 << d->p_fragsize); - gtk_label_set_text(GTK_LABEL(d->bufsizelabel_w), buf); - prefs_update_estimate(d); -} - -static void -oss_devdsp_changed (void *a, - oss_driver *d) -{ - strncpy(d->p_devdsp, gtk_entry_get_text(GTK_ENTRY(d->prefs_devdsp_w)), 127); -} - -static void -oss_make_config_widgets (oss_driver *d) -{ - GtkWidget *thing, *mainbox, *box2, *box3; - static const char *resolutionlabels[] = { "8 bits", "16 bits", NULL }; - static const char *channelslabels[] = { "Mono", "Stereo", NULL }; - static const char *mixfreqlabels[] = { "8000", "16000", "22050", "44100", NULL }; - - d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - - thing = gtk_label_new(_("These changes won't take effect until you restart playing.")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Output device (e.g. '/dev/dsp'):")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - thing = gtk_entry_new_with_max_length(126); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - gtk_entry_set_text(GTK_ENTRY(thing), d->p_devdsp); - gtk_signal_connect_after(GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(oss_devdsp_changed), d); - d->prefs_devdsp_w = thing; - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Resolution:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(resolutionlabels, box2, d->prefs_resolution_w, FALSE, TRUE, (void(*)())prefs_resolution_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Channels:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(channelslabels, box2, d->prefs_channels_w, FALSE, TRUE, (void(*)())prefs_channels_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Frequency [Hz]:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(mixfreqlabels, box2, d->prefs_mixfreq_w, FALSE, TRUE, (void(*)())prefs_mixfreq_changed, d); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Buffer Size:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - - box3 = gtk_vbox_new(FALSE, 2); - gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0); - gtk_widget_show(box3); - - d->bufsizespin_w = thing = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(5.0, 5.0, 15.0, 1.0, 1.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect (GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(prefs_fragsize_changed), d); - - d->bufsizelabel_w = thing = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - add_empty_hbox(box2); - d->estimatelabel_w = thing = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - add_empty_hbox(box2); - - prefs_init_from_structure(d); -} - -static GtkWidget * -oss_getwidget (void *dp) -{ - oss_driver * const d = dp; - - return d->configwidget; -} - -static void * -oss_new (void) -{ - oss_driver *d = g_new(oss_driver, 1); - - strcpy(d->p_devdsp, "/dev/dsp"); - d->p_mixfreq = 44100; - d->p_channels = 2; - d->p_resolution = 16; - d->p_fragsize = 11; // 2048; - d->soundfd = -1; - d->sndbuf = NULL; - d->polltag = NULL; - d->configmutex = g_mutex_new(); - - oss_make_config_widgets(d); - - return d; -} - -static void -oss_destroy (void *dp) -{ - oss_driver * const d = dp; - - gtk_widget_destroy(d->configwidget); - g_mutex_free(d->configmutex); - - g_free(dp); -} - -static gboolean -oss_try_format (oss_driver *d, int f) -{ - int format = f; - - if(ioctl(d->soundfd, SNDCTL_DSP_SETFMT, &format) == -1) { - perror("SNDCTL_DSP_SETFMT"); - return FALSE; - } - - return format == f; -} - -static gboolean -oss_try_stereo (oss_driver *d, int f) -{ - int format = f; - - if(ioctl(d->soundfd, SNDCTL_DSP_STEREO, &format) == -1) { - perror("SNDCTL_DSP_STEREO"); - return FALSE; - } - - return format == f; -} - -static void -oss_release (void *dp) -{ - oss_driver * const d = dp; - - free(d->sndbuf); - d->sndbuf = NULL; - - audio_poll_remove(d->polltag); - d->polltag = NULL; - - if(d->soundfd >= 0) { - ioctl(d->soundfd, SNDCTL_DSP_RESET, 0); - close(d->soundfd); - d->soundfd = -1; - } -} - -static gboolean -oss_open (void *dp) -{ - oss_driver * const d = dp; - int mf; - int i; - audio_buf_info info; - - /* O_NONBLOCK is required for the es1370 driver in Linux - 2.2.9, for example. It's open() behaviour is not - OSS-conformant (though Thomas Sailer says it's okay). */ - if((d->soundfd = open(d->p_devdsp, O_WRONLY | O_NONBLOCK)) < 0) { - char buf[256]; - sprintf(buf, _("Couldn't open %s for sound output:\n%s"), d->p_devdsp, strerror(errno)); - error_error(buf); - goto out; - } - - // Clear O_NONBLOCK again - fcntl(d->soundfd, F_SETFL, 0); - - d->bits = 0; - mf = 0; - if(d->p_resolution == 16) { - if(oss_try_format(d, AFMT_S16_LE)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_S16_LE; - } else if(oss_try_format(d, AFMT_S16_BE)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_S16_BE; - } else if(oss_try_format(d, AFMT_U16_LE)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_U16_LE; - } else if(oss_try_format(d, AFMT_U16_BE)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_U16_BE; - } - } - if(d->bits != 16) { - if(oss_try_format(d, AFMT_S8)) { - d->bits = 8; - mf = ST_MIXER_FORMAT_S8; - } else if(oss_try_format(d, AFMT_U8)) { - d->bits = 8; - mf = ST_MIXER_FORMAT_U8; - } else { - error_error(_("Required sound output format not supported.\n")); - goto out; - } - } - - if(d->p_channels == 2 && oss_try_stereo(d, 1)) { - d->stereo = 1; - mf |= ST_MIXER_FORMAT_STEREO; - } else if(oss_try_stereo(d, 0)) { - d->stereo = 0; - } - - d->mf = mf; - - d->playrate = d->p_mixfreq; - ioctl(d->soundfd, SNDCTL_DSP_SPEED, &d->playrate); - - i = 0x00020000 + d->p_fragsize + d->stereo + (d->bits / 8 - 1); - ioctl(d->soundfd, SNDCTL_DSP_SETFRAGMENT, &i); - - // Find out how many fragments OSS actually uses and how large they are. - ioctl(d->soundfd, SNDCTL_DSP_GETOSPACE, &info); - d->fragsize = info.fragsize; - d->numfrags = info.fragstotal; - - ioctl(d->soundfd, SNDCTL_DSP_GETCAPS, &i); - d->realtimecaps = i & DSP_CAP_REALTIME; - - d->sndbuf = calloc(1, d->fragsize); - - if(d->stereo == 1) { - d->fragsize /= 2; - } - if(d->bits == 16) { - d->fragsize /= 2; - } - - d->polltag = audio_poll_add(d->soundfd, GDK_INPUT_WRITE, oss_poll_ready_playing, d); - d->firstpoll = TRUE; - d->playtime = 0; - - return TRUE; - - out: - oss_release(dp); - return FALSE; -} - -static double -oss_get_play_time (void *dp) -{ - oss_driver * const d = dp; - - if(d->realtimecaps) { - count_info info; - - ioctl(d->soundfd, SNDCTL_DSP_GETOPTR, &info); - - return (double)info.bytes / (d->stereo + 1) / (d->bits / 8) / d->playrate; - } else { - struct timeval tv; - double curtime; - - gettimeofday(&tv, NULL); - curtime = tv.tv_sec + tv.tv_usec / 1e6; - - return d->playtime + curtime - d->outtime - d->numfrags * ((double) d->fragsize / d->playrate); - } -} - -static inline int -oss_get_play_rate (void *d) -{ - oss_driver * const dp = d; - return dp->playrate; -} - -static gboolean -oss_loadsettings (void *dp, - prefs_node *f) -{ - oss_driver * const d = dp; - - prefs_get_string(f, "oss-devdsp", d->p_devdsp); - prefs_get_int(f, "oss-resolution", &d->p_resolution); - prefs_get_int(f, "oss-channels", &d->p_channels); - prefs_get_int(f, "oss-mixfreq", &d->p_mixfreq); - prefs_get_int(f, "oss-fragsize", &d->p_fragsize); - - prefs_init_from_structure(d); - - return TRUE; -} - -static gboolean -oss_savesettings (void *dp, - prefs_node *f) -{ - oss_driver * const d = dp; - - prefs_put_string(f, "oss-devdsp", d->p_devdsp); - prefs_put_int(f, "oss-resolution", d->p_resolution); - prefs_put_int(f, "oss-channels", d->p_channels); - prefs_put_int(f, "oss-mixfreq", d->p_mixfreq); - prefs_put_int(f, "oss-fragsize", d->p_fragsize); - - return TRUE; -} - -st_out_driver driver_out_oss = { - { "OSS Output", - - oss_new, - oss_destroy, - - oss_open, - oss_release, - - oss_getwidget, - oss_loadsettings, - oss_savesettings, - }, - - oss_get_play_time, - oss_get_play_rate -}; - -#endif /* DRIVER_OSS */ diff -Nru soundtracker-0.6.8/app/drivers/pulse-output.c soundtracker-1.0.2~pre2/app/drivers/pulse-output.c --- soundtracker-0.6.8/app/drivers/pulse-output.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/pulse-output.c 2021-02-10 09:56:46.000000000 +0000 @@ -0,0 +1,537 @@ + +/* + * The Real SoundTracker - PulseAudio output driver + * + * Copyright (C) 2021 Yury Aliaev + * + * Some PulseAudio tricks were spied from Shairport Sync program by + * Mike Brady + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#if DRIVER_PULSE + +#include +#include +#include +#include + +#include "driver.h" +#include "errors.h" +#include "gui-subs.h" +#include "mixer.h" +#include "preferences.h" +#include "st-subs.h" + +typedef enum { + PULSE_STATE_NOTREADY = 0, + PULSE_STATE_READY, + PULSE_STATE_RUNNING, + PULSE_STATE_ERROR +} PulseState; + +typedef struct { + GtkWidget *configwidget, *freqlabel, *freq_combo; + + pa_threaded_mainloop* mainloop; + pa_context* context; + pa_stream* stream; + + gint rate, native_rate; + STMixerFormat format; + PulseState state; + gdouble starttime; + + void* sndbuf; + size_t len; + gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat); +} pulse_driver; + +/* Buffer size is hardcoded. Seems for PulseAudio it's a normal practice */ +#define BSIZE (uint32_t)(2 * 2 * 65536) >> 4 + +static const guint mixfreqs[] = { 44100, 48000, 96000 }; +#define NUM_FREQS ARRAY_SIZE(mixfreqs) + +static void +pulse_error(const gchar* msg, pulse_driver* d) +{ + gchar *buf, *converted; + + converted = g_locale_to_utf8(pa_strerror(pa_context_errno(d->context)), + -1, NULL, NULL, NULL); + + buf = g_strdup_printf(_("PulseAudio driver error: %s\n" + "Error message is: %s\n"), _(msg), converted); + error_error(buf); + g_free(converted); + g_free(buf); +} + +static void +update_controls(pulse_driver* d) +{ + gchar* buf; + gint selected = -1, i; + + buf = g_strdup_printf("%u", d->rate); + gtk_label_set_text(GTK_LABEL(d->freqlabel), buf); + g_free(buf); + + for (i = 0; i < NUM_FREQS; i++) { + if (d->native_rate == mixfreqs[i]) + selected = i; + } + if (selected == -1) + selected = i; + + gtk_combo_box_set_active(GTK_COMBO_BOX(d->freq_combo), selected); +} + +static void +context_state_callback(pa_context* c, void* dp) +{ + pulse_driver* const d = dp; + + pa_threaded_mainloop_signal(d->mainloop, 0); +} + +static void +stream_state_callback(pa_stream* s, void* dp) { + pulse_driver* const d = dp; + const pa_sample_spec *spc; + + g_assert(s); + switch (pa_stream_get_state(s)) { + case PA_STREAM_TERMINATED: + case PA_STREAM_CREATING: + break; + + case PA_STREAM_READY: + spc = pa_stream_get_sample_spec(s); + d->rate = spc->rate; + d->format = (spc->format == PA_SAMPLE_S16LE ? + ST_MIXER_FORMAT_S16_LE : ST_MIXER_FORMAT_S16_BE) | ST_MIXER_FORMAT_STEREO; + d->state = PULSE_STATE_READY; + update_controls(d); + + break; + case PA_STREAM_FAILED: + default: + d->state = PULSE_STATE_ERROR; + break; + } + pa_threaded_mainloop_signal(d->mainloop, 0); +} + +static void +stream_write_callback(pa_stream* s, size_t length, void* dp) +{ + pulse_driver* const d = dp; + + d->len = length; + pa_stream_begin_write(s, &d->sndbuf, &d->len); + + if (d->state == PULSE_STATE_RUNNING) { + g_assert(s); + + /* sndbuf length is in bytes, but mixing routine gets number of samples */ + d->callback(d->sndbuf, d->len >> 2, d->rate, d->format); + } else { + /* Silently ignore this case and feed PulseAudio with zeroes. This can happen + on playback stopping */ + memset(d->sndbuf, 0, d->len); + pa_stream_write(d->stream, d->sndbuf, d->len, NULL, 0, PA_SEEK_RELATIVE); + } +} + +static void +pulse_activate(void* dp, const gchar* group) +{ + pulse_driver* const d = dp; + pa_sample_spec sample_spec; + pa_channel_map map; + pa_buffer_attr buffer_attr; + + d->starttime = 0.0; + d->mainloop = pa_threaded_mainloop_new(); + if (!d->mainloop) { + error_error(_("PulseAudio driver error: Cannot create a main loop")); + d->state = PULSE_STATE_ERROR; + return; + } + + d->context = pa_context_new(pa_threaded_mainloop_get_api(d->mainloop), + PACKAGE_NAME); + if (!d->context) { + error_error(_("PulseAudio driver error: Cannot create a new context")); + d->state = PULSE_STATE_ERROR; + return; + } + + pa_context_set_state_callback(d->context, context_state_callback, dp); + pa_threaded_mainloop_lock(d->mainloop); + if (pa_threaded_mainloop_start(d->mainloop)) { + error_error(_("PulseAudio driver error: Cannot start the main loop")); + d->state = PULSE_STATE_ERROR; + goto out; + } + if (pa_context_connect(d->context, NULL, 0, NULL)) { + pulse_error(N_("Cannot connect the context"), d); + d->state = PULSE_STATE_ERROR; + goto out; + } + + for (;;) { + pa_context_state_t context_state = pa_context_get_state(d->context); + if (!PA_CONTEXT_IS_GOOD(context_state)) { + pulse_error(N_("Bad context"), d); + d->state = PULSE_STATE_ERROR; + goto out; + } + if (context_state == PA_CONTEXT_READY) + break; + pa_threaded_mainloop_wait(d->mainloop); + } + + sample_spec.format = PA_SAMPLE_S16NE; + sample_spec.rate = d->native_rate ? d->native_rate : 48000; + sample_spec.channels = 2; + + pa_channel_map_init_stereo(&map); + + d->stream = pa_stream_new(d->context, "SoundTracker output", &sample_spec, NULL); + pa_stream_set_state_callback(d->stream, stream_state_callback, dp); + pa_stream_set_write_callback(d->stream, stream_write_callback, dp); + + /* recommended settings, i.e. server uses sensible values */ + buffer_attr.maxlength = (uint32_t)-1; + buffer_attr.tlength = BSIZE; + buffer_attr.prebuf = (uint32_t)0; + buffer_attr.minreq = (uint32_t)-1; + + if (pa_stream_connect_playback(d->stream, NULL, &buffer_attr, + (d->native_rate ? 0 : PA_STREAM_FIX_RATE) | PA_STREAM_START_CORKED | PA_STREAM_INTERPOLATE_TIMING | + PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_ADJUST_LATENCY, + NULL, NULL)) { + pulse_error(N_("Cannot connect the playback stream"), d); + d->state = PULSE_STATE_ERROR; + goto out; + } + + /* Wait for the stream to be ready */ + for (;;) { + gboolean finished = FALSE; + + switch (d->state) { + case PULSE_STATE_READY: + finished = TRUE; + break; + case PULSE_STATE_ERROR: + pulse_error(N_("Error while setting up the stream"), d); + goto out; + default: + break; + } + if (finished) + break; + + pa_threaded_mainloop_wait(d->mainloop); + } +out: + pa_threaded_mainloop_unlock(d->mainloop); +} + +static void +pulse_deactivate(void* dp) +{ + pulse_driver* const d = dp; + + if (!d->mainloop) + return; + + pa_threaded_mainloop_lock(d->mainloop); + if (d->stream) { + pa_stream_disconnect(d->stream); + pa_stream_unref(d->stream); + d->stream = NULL; + } + if (d->context) { + pa_context_unref(d->context); + d->context = NULL; + } + pa_threaded_mainloop_unlock(d->mainloop); + + pa_threaded_mainloop_stop(d->mainloop); + pa_threaded_mainloop_free(d->mainloop); + d->mainloop = NULL; + d->state = PULSE_STATE_NOTREADY; +} + +static void +release_success_cb(pa_stream* s, int success, void* dp) +{ + pulse_driver* const d = dp; + + d->state = success ? PULSE_STATE_READY : PULSE_STATE_ERROR; +} + +static void +pulse_release(void* dp) +{ + pulse_driver* const d = dp; + pa_usec_t usec; + + if (d->state != PULSE_STATE_RUNNING) + return; + + pa_threaded_mainloop_lock(d->mainloop); + pa_stream_flush(d->stream, NULL, NULL); + pa_stream_cork(d->stream, 1, release_success_cb, dp); + pa_threaded_mainloop_unlock(d->mainloop); + for (;;) { + const struct timespec ts = {.tv_sec = 0, .tv_nsec = 1000000}; + if (d->state != PULSE_STATE_RUNNING) + break; + nanosleep(&ts, NULL); + } + + pa_stream_get_time(d->stream, &usec); + /* If the sound stream is "corked" (that is, paused), the + playtime will not be reset on next resume. So we subtract + the last pause time point plus some delay of about 100ms + added by PulseAudio */ + d->starttime = (gdouble)usec / 1.0e6 + 0.1; +} + +static void +open_success_cb(pa_stream* s, int success, void* dp) +{ + pulse_driver* const d = dp; + + d->state = success ? PULSE_STATE_RUNNING : PULSE_STATE_ERROR; +} + +static gboolean +pulse_open(void* dp) +{ + pulse_driver* const d = dp; + + if (d->state == PULSE_STATE_READY) { + pa_threaded_mainloop_lock(d->mainloop); + pa_stream_cork(d->stream, 0, open_success_cb, dp); + pa_threaded_mainloop_unlock(d->mainloop); + + return TRUE; + } else { + error_error(_("PulseAudio driver error: Driver is not ready")); + return FALSE; + } +} + +static double +pulse_get_play_time(void* dp) +{ + pa_usec_t usec; + pulse_driver* const d = dp; + + pa_stream_get_time(d->stream, &usec); + return (gdouble)usec / 1.0e6 - d->starttime; +} + +static inline int +pulse_get_play_rate(void* d) +{ + pulse_driver* const dp = d; + return dp->rate; +} + +static gboolean +pulse_loadsettings(void* dp, + const gchar* f) +{ + pulse_driver* const d = dp; + + d->native_rate = prefs_get_int(f, "pulse-rate", 0); + update_controls(d); + + return TRUE; +} + +static gboolean +pulse_savesettings(void* dp, + const gchar* f) +{ + pulse_driver* const d = dp; + + prefs_put_int(f, "pulse-rate", d->native_rate); + + return TRUE; +} + +static void +pulse_commit(void* dp) +{ + pulse_driver * const d = dp; + + pa_stream_write(d->stream, d->sndbuf, d->len, NULL, 0LL, PA_SEEK_RELATIVE); +} + +static void +mixfreq_changed(GtkComboBox* cb, pulse_driver* d) +{ + gint pos = gtk_combo_box_get_active(cb); + guint new_rate; + gboolean running = FALSE; + static gdouble prev_time = 0.0; + + if (pos < 0 || pos > NUM_FREQS) + return; + + new_rate = (pos == NUM_FREQS) ? 0 : mixfreqs[pos]; + if (d->native_rate == new_rate) + return; + + d->native_rate = new_rate; + /* Restart driver if it was in running state */ + if (d->state == PULSE_STATE_RUNNING) { + running = TRUE; + pulse_release(d); + prev_time -= d->starttime - 0.1; /* Since we add 0.1s on release */ + } + pulse_deactivate(d); + pulse_activate(d, NULL); + if (running) { /* Play time is reset on driver restart. So we compensate this */ + d->starttime = prev_time; + pulse_open(d); + } +} + +static void +pulse_make_config_widgets(pulse_driver* d) +{ + GtkWidget *thing, *mainbox, *hbox; + GtkListStore* ls; + GtkTreeIter iter; + gchar* buf; + gint selected = -1, i; + + d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); + hbox = gtk_hbox_new(FALSE, 2); + gtk_box_pack_start(GTK_BOX(mainbox), hbox, FALSE, FALSE, 0); + + thing = gtk_label_new(_("Frequency [Hz]:")); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + + ls = gtk_list_store_new(1, G_TYPE_STRING); + + for (i = 0; i < NUM_FREQS; i++) { + if (d->native_rate == mixfreqs[i]) + selected = i; + buf = g_strdup_printf("%u", mixfreqs[i]); + gtk_list_store_append(ls, &iter); + gtk_list_store_set(ls, &iter, 0, buf, -1); + g_free(buf); + } + if (selected == -1) + selected = i; + + gtk_list_store_append(ls, &iter); + gtk_list_store_set(ls, &iter, 0, _("Server default"), -1); + d->freq_combo = thing = gui_combo_new(ls); + gtk_combo_box_set_active(GTK_COMBO_BOX(thing), selected); + g_signal_connect(thing, "changed", G_CALLBACK(mixfreq_changed), d); + gtk_box_pack_end(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + + hbox = gtk_hbox_new(FALSE, 2); + gtk_box_pack_start(GTK_BOX(mainbox), hbox, FALSE, FALSE, 0); + + thing = gtk_label_new(_("Actual frequency [Hz]:")); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + buf = g_strdup_printf("%u", d->rate); + d->freqlabel = gtk_label_new(buf); + g_free(buf); + gtk_box_pack_end(GTK_BOX(hbox), d->freqlabel, FALSE, FALSE, 0); + + gtk_widget_show_all(mainbox); +} + +static GtkWidget* +pulse_getwidget(void* dp) +{ + pulse_driver* const d = dp; + + return d->configwidget; +} + +static void +pulse_destroy(void* dp) +{ + pulse_driver* const d = dp; + + gtk_widget_destroy(d->configwidget); + + g_free(dp); +} + +static void* +pulse_new(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) +{ + pulse_driver* d = g_new(pulse_driver, 1); + + d->context = NULL; + d->stream = NULL; + d->sndbuf = NULL; + d->callback = callback; + d->mainloop = NULL; + d->state = PULSE_STATE_NOTREADY; + d->rate = d->native_rate = 0; +#ifdef WORDS_BIGENDIAN + d->format = ST_MIXER_FORMAT_U16_BE | ST_MIXER_FORMAT_STEREO; +#elde + d->format = ST_MIXER_FORMAT_U16_LE | ST_MIXER_FORMAT_STEREO; +#endif + + pulse_make_config_widgets(d); + + return d; +} + +st_driver driver_out_pulse = { + "Pulseaudio Output", + + pulse_new, + pulse_destroy, + + pulse_open, + pulse_release, + + pulse_getwidget, + pulse_loadsettings, + pulse_savesettings, + + pulse_activate, + pulse_deactivate, + + pulse_commit, + + pulse_get_play_time, + pulse_get_play_rate +}; + +#endif /* DRIVER_PULSE */ diff -Nru soundtracker-0.6.8/app/drivers/sdl-output.c soundtracker-1.0.2~pre2/app/drivers/sdl-output.c --- soundtracker-0.6.8/app/drivers/sdl-output.c 2006-02-25 12:51:14.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/sdl-output.c 2020-09-02 14:55:55.000000000 +0000 @@ -25,75 +25,77 @@ #include #include +#include +#include #include +#include #include -#include -#include "i18n.h" -#include "driver-out.h" -#include "mixer.h" +#include "audio-subs.h" +#include "driver.h" #include "errors.h" #include "gui-subs.h" +#include "mixer.h" #include "preferences.h" #define SDL_BUFSIZE 1024 typedef struct sdl_driver { - GtkWidget *configwidget; + GtkWidget* configwidget; int out_bits, out_channels, out_rate; - int played; int mf; - SDL_AudioSpec spec; + gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat); - gpointer polltag; + double outtime; + double playtime; } sdl_driver; -void sdl_callback(void *udata, Uint8 *stream, int len) +void sdl_callback(void* udata, Uint8* stream, int len) { - sdl_driver * const d = udata; + sdl_driver* const d = udata; + struct timeval tv; - audio_mix(stream, len/4, d->out_rate, d->mf); - d->played+=len/4; -} + len >>= 2; + d->callback(stream, len, d->out_rate, d->mf); -static void -sdl_poll_ready_playing (gpointer data, - gint source, - GdkInputCondition condition) -{ - SDL_Delay(10); + gettimeofday(&tv, NULL); + d->outtime = tv.tv_sec + tv.tv_usec / 1e6; + d->playtime += (double)len / d->out_rate; + + SDL_Delay(1); } static void -sdl_make_config_widgets (sdl_driver *d) +sdl_make_config_widgets(sdl_driver* d) { GtkWidget *thing, *mainbox; d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - + thing = gtk_label_new(_("Experimental SDL support.")); gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); } -static GtkWidget * -sdl_getwidget (void *dp) +static GtkWidget* +sdl_getwidget(void* dp) { - sdl_driver * const d = dp; + sdl_driver* const d = dp; return d->configwidget; } -static void * -sdl_new (void) +static void* +sdl_new(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) { - sdl_driver *d = g_new(sdl_driver, 1); + sdl_driver* d = g_new(sdl_driver, 1); d->out_bits = AUDIO_S16SYS; d->out_rate = 44100; d->out_channels = 2; + d->callback = callback; sdl_make_config_widgets(d); @@ -101,9 +103,9 @@ } static void -sdl_destroy (void *dp) +sdl_destroy(void* dp) { - sdl_driver * const d = dp; + sdl_driver* const d = dp; gtk_widget_destroy(d->configwidget); @@ -111,84 +113,95 @@ } static void -sdl_release (void *dp) +sdl_release(void* dp) { - sdl_driver * const d = dp; - - audio_poll_remove(d->polltag); - d->polltag = NULL; - SDL_PauseAudio(1); SDL_Quit(); } static gboolean -sdl_open (void *dp) +sdl_open(void* dp) { - sdl_driver * const d = dp; + sdl_driver* const d = dp; + SDL_AudioSpec spec; SDL_Init(SDL_INIT_AUDIO); - d->spec.freq=44100; - d->spec.format=AUDIO_S16SYS; - d->spec.channels=2; - d->spec.samples=SDL_BUFSIZE; - d->spec.callback=sdl_callback; - d->spec.userdata=dp; - SDL_OpenAudio(&d->spec,NULL); - SDL_PauseAudio(0); + spec.freq = d->out_rate; + spec.format = d->out_bits; + spec.channels = d->out_channels; + spec.samples = SDL_BUFSIZE; + spec.callback = sdl_callback; + spec.userdata = dp; + SDL_OpenAudio(&spec, NULL); #ifdef WORDS_BIGENDIAN d->mf = ST_MIXER_FORMAT_S16_BE; #else d->mf = ST_MIXER_FORMAT_S16_LE; #endif - d->mf |= ST_MIXER_FORMAT_STEREO; - d->polltag = audio_poll_add(0, GDK_INPUT_WRITE, sdl_poll_ready_playing, d); - d->played = 0; + d->playtime = 0.0; SDL_PauseAudio(0); return TRUE; } static double -sdl_get_play_time (void *dp) +sdl_get_play_time(void* dp) { - sdl_driver * const d = dp; + sdl_driver* const d = dp; + struct timeval tv; + double curtime; + + gettimeofday(&tv, NULL); + curtime = tv.tv_sec + tv.tv_usec / 1e6; - return((double)d->played/44100.0); + return d->playtime + curtime - d->outtime - (double)SDL_BUFSIZE / d->out_rate * 2.0; +} + +static int +sdl_get_play_rate(void* dp) +{ + sdl_driver* const d = dp; + + return d->out_rate; } static gboolean -sdl_loadsettings (void *dp, - prefs_node *f) +sdl_loadsettings(void* dp, + const gchar* f) { return TRUE; } static gboolean -sdl_savesettings (void *dp, - prefs_node *f) +sdl_savesettings(void* dp, + const gchar* f) { return TRUE; } -st_out_driver driver_out_sdl = { - { "SDL Output", +st_driver driver_out_sdl = { + "SDL Output", + + sdl_new, + sdl_destroy, + + sdl_open, + sdl_release, - sdl_new, - sdl_destroy, + sdl_getwidget, + sdl_loadsettings, + sdl_savesettings, - sdl_open, - sdl_release, + NULL, + NULL, - sdl_getwidget, - sdl_loadsettings, - sdl_savesettings, - }, + NULL, sdl_get_play_time, + sdl_get_play_rate }; #endif /* DRIVER_SDL */ diff -Nru soundtracker-0.6.8/app/drivers/sun-input.c soundtracker-1.0.2~pre2/app/drivers/sun-input.c --- soundtracker-0.6.8/app/drivers/sun-input.c 2003-05-18 14:53:53.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/sun-input.c 2020-12-31 14:47:11.000000000 +0000 @@ -22,30 +22,30 @@ #include +#include #include #include #include -#include #include +#include #include +#include #include -#include #include -#include -#include +#include #include -#include "i18n.h" -#include "driver-in.h" -#include "mixer.h" +#include "driver.h" +#include "driver-thread.h" #include "errors.h" #include "gui-subs.h" +#include "mixer.h" typedef struct sun_driver { - GtkWidget *configwidget; - GtkWidget *prefs_devaudio_w; + GtkWidget* configwidget; + GtkWidget* prefs_devaudio_w; int playrate; int stereo; @@ -55,57 +55,72 @@ int mf; int soundfd; - void *sndbuf; - int polltag; + void* sndbuf; + gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat); audio_info_t info; - gchar p_devaudio[128]; + gchar* p_devaudio; int p_resolution; int p_channels; int p_mixfreq; int p_bufsize; + DRIVER_THREAD_STUFF } sun_driver; -static void -sun_poll_ready_sampling (gpointer data, - gint source, - GdkInputCondition condition) +static void* +sun_sampling(void* data) { - sun_driver * const d = data; + sun_driver* const d = data; - printf("sampling...\n"); + DRIVER_THREAD_LOOP_BEGIN(d) + errno = 0; + if (read(d->soundfd, d->sndbuf, d->bufsize) != d->bufsize) { + error_errno(_("SUN input: reading error")); + DRIVER_THREAD_ERROR + } - read(d->soundfd, d->sndbuf, d->bufsize); + if (d->callback(d->sndbuf, d->bufsize, d->playrate, d->mf)) { + d->sndbuf = calloc(d->bufsize); + if (!d->sndbuf) { + error_errno(_("SUN input: out of memory error")); + DRIVER_THREAD_ERROR + } + } + DRIVER_THREAD_LOOP_END(d) - sample_editor_sampled(d->sndbuf, d->bufsize, d->playrate, d->mf); + return NULL; } static void -prefs_init_from_structure (sun_driver *d) +prefs_init_from_structure(sun_driver* d) { gtk_entry_set_text(GTK_ENTRY(d->prefs_devaudio_w), d->p_devaudio); } static void -sun_devaudio_changed (void *a, - sun_driver *d) +sun_devaudio_changed(void* a, + sun_driver* d) { - strncpy(d->p_devaudio, gtk_entry_get_text(GTK_ENTRY(d->prefs_devaudio_w)), - 127); + gchar *buf = gtk_entry_get_text(GTK_ENTRY(d->prefs_devaudio_w); + + if (strcmp(buf, d->p_devaudio)) { + g_free(d->p_devaudio); + d->p_devaudio = g_strdup(buf); + } } static void -sun_make_config_widgets (sun_driver *d) +sun_make_config_widgets(sun_driver* d) { GtkWidget *thing, *mainbox, *box2; d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - + thing = gtk_label_new( _("These changes won't take effect until you restart sampling.")); gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - + thing = gtk_hseparator_new(); gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); @@ -116,178 +131,191 @@ thing = gtk_label_new(_("Input device (e.g. '/dev/audio'):")); gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - thing = gtk_entry_new_with_max_length(126); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + + thing = gtk_entry_new(); + gtk_entry_set_max_length(GTK_ENTRY(thing), 126); gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, FALSE, 0); gtk_entry_set_text(GTK_ENTRY(thing), d->p_devaudio); - gtk_signal_connect_after(GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(sun_devaudio_changed), d); + g_signal_connect_after(thing, "changed", + G_CALLBACK(sun_devaudio_changed), d); d->prefs_devaudio_w = thing; prefs_init_from_structure(d); } -static GtkWidget * -sun_getwidget (void *dp) +static GtkWidget* +sun_getwidget(void* dp) { - sun_driver * const d = dp; + sun_driver* const d = dp; return d->configwidget; } -static void * -sun_new (void) +static void* +sun_new(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) { - sun_driver *d = g_new(sun_driver, 1); + sun_driver* d = g_new(sun_driver, 1); - strcpy(d->p_devaudio, "/dev/audio"); + d->p_devaudio = g_strdup("/dev/audio"); d->p_mixfreq = 44100; d->p_channels = 1; d->p_resolution = 16; d->p_bufsize = 9; d->soundfd = -1; d->sndbuf = NULL; - d->polltag = 0; + d->callback = callback; + DRIVER_THREAD_INIT(d) + sun_make_config_widgets(d); return d; } static void -sun_destroy (void *dp) +sun_destroy(void* dp) { - sun_driver * const d = dp; + sun_driver* const d = dp; + DRIVER_THREAD_CLEAR(d) gtk_widget_destroy(d->configwidget); g_free(dp); } static gboolean -sun_try_format (sun_driver *d, int fmt, int precision) +sun_try_format(sun_driver* d, int fmt, int precision) { audio_encoding_t enc; - - for(enc.index = 0; ioctl(d->soundfd, AUDIO_GETENC, &enc) == 0; - enc.index++) { + + for (enc.index = 0; ioctl(d->soundfd, AUDIO_GETENC, &enc) == 0; + enc.index++) { if (enc.encoding == fmt && enc.precision == precision) { - d->info.record.encoding = enc.encoding; - d->info.record.precision = enc.precision; - if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) == 0) { - return TRUE; - } else { - return FALSE; - } - } + d->info.record.encoding = enc.encoding; + d->info.record.precision = enc.precision; + if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) == 0) { + return TRUE; + } else { + return FALSE; + } + } } return FALSE; } static gboolean -sun_try_channels (sun_driver *d, int nch) +sun_try_channels(sun_driver* d, int nch) { d->info.record.channels = nch; - if(ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { + if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { return FALSE; } - + return TRUE; } static void -sun_release (void *dp) +sun_release(void* dp) { - sun_driver * const d = dp; + sun_driver* const d = dp; - free(d->sndbuf); - d->sndbuf = NULL; + DRIVER_THREAD_STOP(d); - if(d->polltag != 0) { - gdk_input_remove(d->polltag); - d->polltag = 0; + if (d->sndbuf) { + free(d->sndbuf); + d->sndbuf = NULL; } - if(d->soundfd >= 0) { - close(d->soundfd); - d->soundfd = -1; + if (d->soundfd >= 0) { + close(d->soundfd); + d->soundfd = -1; } } static gboolean -sun_open (void *dp) +sun_open(void* dp) { - char buf[256]; - sun_driver * const d = dp; + char* buf; + sun_driver* const d = dp; int mf, i, fullduplex; AUDIO_INITINFO(&d->info); - d->soundfd = open(d->p_devaudio, O_RDONLY|O_NONBLOCK); - if(d->soundfd < 0) { - sprintf(buf, _("%s: %s"), d->p_devaudio, strerror(errno)); - goto out; + errno = 0; + d->soundfd = open(d->p_devaudio, O_RDONLY | O_NONBLOCK); + if (d->soundfd < 0) { + buf = g_strdup_printf(_("SUN input (%s): Cannot open device"), d->p_devaudio); + error_errno(buf); + g_free(buf); + goto out; } - + fullduplex = 1; if (ioctl(d->soundfd, AUDIO_SETFD, &fullduplex) != 0) { - fprintf(stderr, "%s: does not support full-duplex operation\n", - d->p_devaudio); - fullduplex = 0; + buf = g_strdup_printf(_("SUN input (%s) does not support full-duplex operation"), + d->p_devaudio); + error_warning(buf); + g_free(buf); + fullduplex = 0; } - + + errno = 0; d->info.mode = AUMODE_RECORD; - if(ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { - sprintf(buf, _("%s: Cannot record (%s)"), d->p_devaudio, - strerror(errno)); - goto out; + if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { + buf = g_strdup_printf(_("SUN input (%s) does not support recording"), d->p_devaudio); + error_errno(buf); + g_free(buf); + goto out; } - + d->playrate = d->p_mixfreq; d->info.record.sample_rate = d->playrate; - if(ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { - sprintf(buf, _("%s: Cannot handle %dHz (%s)"), d->p_devaudio, - d->playrate, strerror(errno)); - goto out; - } + if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { + buf = g_strdup_printf(_("SUN input (%s): Cannot handle %d Hz"), d->p_devaudio); + error_errno(buf); + g_free(buf); + goto out; + } d->bits = 0; mf = 0; - if(d->p_resolution == 16) { - if(sun_try_format(d, AUDIO_ENCODING_SLINEAR_LE, 16)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_S16_LE; - } else if(sun_try_format(d, AUDIO_ENCODING_SLINEAR_BE, 16)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_S16_BE; - } else if(sun_try_format(d, AUDIO_ENCODING_ULINEAR_LE, 16)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_U16_LE; - } else if(sun_try_format(d, AUDIO_ENCODING_ULINEAR_BE, 16)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_U16_BE; - } - } - if(d->bits != 16) { - if(sun_try_format(d, AUDIO_ENCODING_SLINEAR, 8)) { - d->bits = 8; - mf = ST_MIXER_FORMAT_S8; - } else if(sun_try_format(d, AUDIO_ENCODING_PCM8, 8)) { - d->bits = 8; - mf = ST_MIXER_FORMAT_U8; - } else { - sprintf(buf, _("%s: Required sound encoding not supported.\n"), - d->p_devaudio); - goto out; - } - } - - if(d->p_channels == 2 && sun_try_channels(d, 2)) { - d->stereo = 1; - mf |= ST_MIXER_FORMAT_STEREO; - } else if(sun_try_channels(d, 1)) { - d->stereo = 0; + if (d->p_resolution == 16) { + if (sun_try_format(d, AUDIO_ENCODING_SLINEAR_LE, 16)) { + d->bits = 16; + mf = ST_MIXER_FORMAT_S16_LE; + } else if (sun_try_format(d, AUDIO_ENCODING_SLINEAR_BE, 16)) { + d->bits = 16; + mf = ST_MIXER_FORMAT_S16_BE; + } else if (sun_try_format(d, AUDIO_ENCODING_ULINEAR_LE, 16)) { + d->bits = 16; + mf = ST_MIXER_FORMAT_U16_LE; + } else if (sun_try_format(d, AUDIO_ENCODING_ULINEAR_BE, 16)) { + d->bits = 16; + mf = ST_MIXER_FORMAT_U16_BE; + } + } + if (d->bits != 16) { + if (sun_try_format(d, AUDIO_ENCODING_SLINEAR, 8)) { + d->bits = 8; + mf = ST_MIXER_FORMAT_S8; + } else if (sun_try_format(d, AUDIO_ENCODING_PCM8, 8)) { + d->bits = 8; + mf = ST_MIXER_FORMAT_U8; + } else { + buf = g_strdup_printf(_("SUN input (%s): Required sound encoding not supported."), + d->p_devaudio); + error_warning(buf); + g_free(buf); + goto out; + } + } + + if (d->p_channels == 2 && sun_try_channels(d, 2)) { + d->stereo = 1; + mf |= ST_MIXER_FORMAT_STEREO; + } else if (sun_try_channels(d, 1)) { + d->stereo = 0; } d->mf = mf; @@ -299,51 +327,53 @@ printf("input blocksize %d hiwat %d\n", d->info.blocksize, d->info.hiwat); d->info.hiwat = 1; if (d->info.hiwat == 0) { - d->info.hiwat = 65536; + d->info.hiwat = 65536; } + errno = 0; if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { - sprintf(buf, _("%s: Cannot set block size (%s)"), d->p_devaudio, - strerror(errno)); + buf = g_strdup_printf(_("SUN input (%s): Cannot set block size"), d->p_devaudio); + error_errno(buf); + g_free(buf); goto out; } - - if (ioctl(d->soundfd, AUDIO_GETINFO, &d->info) != 0) { - sprintf(buf, _("%s: %s"), d->p_devaudio, strerror(errno)); - goto out; + + if (ioctl(d->soundfd, AUDIO_GETINFO, &d->info) != 0) { + buf = g_strdup_printf(_("SUN input (%s): Cannot get device information"), d->p_devaudio); + error_errno(buf); + g_free(buf); + goto out; } d->bufsize = d->info.blocksize; d->numbufs = d->info.hiwat; d->sndbuf = calloc(1, d->bufsize); - if(d->stereo == 1) { - d->bufsize /= 2; + if (d->stereo == 1) { + d->bufsize /= 2; } - if(d->bits == 16) { - d->bufsize /= 2; + if (d->bits == 16) { + d->bufsize /= 2; } - - printf("reading...\n"); - read(d->soundfd, d->sndbuf, d->bufsize); - printf("done\n"); - - d->polltag = gdk_input_add(d->soundfd, GDK_INPUT_READ, - sun_poll_ready_sampling, d); + + DRIVER_THREAD_RESUME(d) return TRUE; - out: - error_error(buf); +out: sun_release(dp); return FALSE; } static gboolean -sun_loadsettings (void *dp, - prefs_node *f) +sun_loadsettings(void* dp, + const gchar* f) { - sun_driver * const d = dp; + sun_driver* const d = dp; + gchar* buf; - prefs_get_string(f, "sun-devaudio", d->p_devaudio); + if ((buf = prefs_get_string(f, "sun-devaudio", NULL))) { + g_free(d->p_devaudio); + d->p_devaudio = buf; + } prefs_init_from_structure(d); @@ -351,27 +381,48 @@ } static gboolean -sun_savesettings (void *dp, - prefs_node *f) +sun_savesettings(void* dp, + const gchar* f) { - sun_driver * const d = dp; + sun_driver* const d = dp; prefs_put_string(f, "sun-devaudio", d->p_devaudio); return TRUE; } -st_in_driver driver_in_sun = { - { "Sun Sampling", +static void +sun_activate (void *dp, const gchar* group) +{ + sun_driver* const d = dp; - sun_new, - sun_destroy, + DRIVER_THREAD_NEW(d, sun_sampling, dp) +} + +static void +sun_deactivate (void *dp) +{ + sun_driver* const d = dp; - sun_open, - sun_release, + DRIVER_THREAD_CANCEL(d) +} - sun_getwidget, - sun_loadsettings, - sun_savesettings, - } +st_driver driver_in_sun = { + "Sun Sampling", + + sun_new, + sun_destroy, + + sun_open, + sun_release, + + sun_getwidget, + sun_loadsettings, + sun_savesettings, + + sun_activate, + sun_deactivate, + + NULL, + NULL }; diff -Nru soundtracker-0.6.8/app/drivers/sun-output.c soundtracker-1.0.2~pre2/app/drivers/sun-output.c --- soundtracker-0.6.8/app/drivers/sun-output.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/drivers/sun-output.c 2020-12-31 14:47:11.000000000 +0000 @@ -22,34 +22,35 @@ #include +#include #include #include #include -#include #include +#include #include +#include #include -#include #include -#include -#include +#include #include -#include "i18n.h" -#include "driver-out.h" -#include "mixer.h" +#include "audio-subs.h" +#include "driver.h" +#include "driver-thread.h" #include "errors.h" #include "gui-subs.h" +#include "mixer.h" #include "preferences.h" typedef struct sun_driver { - GtkWidget *configwidget; - GtkWidget *prefs_devaudio_w; - GtkWidget *prefs_resolution_w[2]; - GtkWidget *prefs_channels_w[2]; - GtkWidget *prefs_mixfreq_w[4]; + GtkWidget* configwidget; + GtkWidget* prefs_devaudio_w; + GtkWidget* prefs_resolution_w[2]; + GtkWidget* prefs_channels_w[2]; + GtkWidget* prefs_mixfreq_w[4]; GtkWidget *bufsizespin_w, *bufsizelabel_w, *estimatelabel_w; int playrate; @@ -61,11 +62,11 @@ gboolean realtimecaps; int soundfd; - void *sndbuf; - gpointer polltag; + void* sndbuf; + gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat); int firstpoll; - gchar p_devaudio[128]; + gchar* p_devaudio; int p_resolution; int p_channels; int p_mixfreq; @@ -75,121 +76,128 @@ double playtime; audio_info_t info; + DRIVER_THREAD_STUFF } sun_driver; static const int mixfreqs[] = { 8000, 16000, 22050, 44100, -1 }; -static void -sun_poll_ready_playing (gpointer data, - gint source, - GdkInputCondition condition) +static void* +sun_playing(void* data) { - sun_driver * const d = data; + sun_driver* const d = data; static int size; static struct timeval tv; - if(!d->firstpoll) { - size = (d->stereo + 1) * (d->bits / 8) * d->bufsize; - write(d->soundfd, d->sndbuf, size); + DRIVER_THREAD_LOOP_BEGIN(d, TRUE) + if (!d->firstpoll) { + size = (d->stereo + 1) * (d->bits / 8) * d->bufsize; + write(d->soundfd, d->sndbuf, size); - if(!d->realtimecaps) { - gettimeofday(&tv, NULL); - d->outtime = tv.tv_sec + tv.tv_usec / 1e6; - d->playtime += (double) d->bufsize / d->playrate; - } - } + if (!d->realtimecaps) { + gettimeofday(&tv, NULL); + d->outtime = tv.tv_sec + tv.tv_usec / 1e6; + d->playtime += (double)d->bufsize / d->playrate; + } + } + + d->firstpoll = FALSE; - d->firstpoll = FALSE; + d->callback(d->sndbuf, d->bufsize, d->playrate, d->mf); + DRIVER_THREAD_LOOP_END(d) - audio_mix(d->sndbuf, d->bufsize, d->playrate, d->mf); + return NULL; } static void -prefs_init_from_structure (sun_driver *d) +prefs_init_from_structure(sun_driver* d) { int i; - gtk_toggle_button_set_state( + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(d->prefs_resolution_w[d->p_resolution / 8 - 1]), - TRUE); - gtk_toggle_button_set_state( + TRUE); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(d->prefs_channels_w[d->p_channels - 1]), - TRUE); + TRUE); - for(i = 0; mixfreqs[i] != -1; i++) { - if(d->p_mixfreq == mixfreqs[i]) - break; + for (i = 0; mixfreqs[i] != -1; i++) { + if (d->p_mixfreq == mixfreqs[i]) + break; } - if(mixfreqs[i] == -1) { - i = 3; + if (mixfreqs[i] == -1) { + i = 3; } - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(d->prefs_mixfreq_w[i]), TRUE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(d->prefs_mixfreq_w[i]), TRUE); gtk_spin_button_set_value(GTK_SPIN_BUTTON(d->bufsizespin_w), d->p_bufsize); gtk_entry_set_text(GTK_ENTRY(d->prefs_devaudio_w), d->p_devaudio); } static void -prefs_update_estimate (sun_driver *d) +prefs_update_estimate(sun_driver* d) { - char buf[64]; - - sprintf(buf, _("Estimated audio delay: %f milliseconds"), + gchar* buf = g_strdup_printf(_("Estimated audio delay: %f milliseconds"), (double)(1000 * (1 << d->p_bufsize)) / d->p_mixfreq); + gtk_label_set_text(GTK_LABEL(d->estimatelabel_w), buf); + g_free(buf); } static void -prefs_resolution_changed (void *a, - sun_driver *d) +prefs_resolution_changed(void* a, + sun_driver* d) { d->p_resolution = (find_current_toggle(d->prefs_resolution_w, 2) + 1) * 8; } static void -prefs_channels_changed (void *a, - sun_driver *d) +prefs_channels_changed(void* a, + sun_driver* d) { d->p_channels = find_current_toggle(d->prefs_channels_w, 2) + 1; } static void -prefs_mixfreq_changed (void *a, - sun_driver *d) +prefs_mixfreq_changed(void* a, + sun_driver* d) { d->p_mixfreq = mixfreqs[find_current_toggle(d->prefs_mixfreq_w, 4)]; prefs_update_estimate(d); } static void -prefs_bufsize_changed (GtkSpinButton *w, - sun_driver *d) +prefs_bufsize_changed(GtkSpinButton* w, + sun_driver* d) { - char buf[30]; + gchar* buf; d->p_bufsize = gtk_spin_button_get_value_as_int(w); - sprintf(buf, _("(%d samples)"), 1 << d->p_bufsize); + buf = g_strdup_printf(_("(%d samples)"), 1 << d->p_bufsize); gtk_label_set_text(GTK_LABEL(d->bufsizelabel_w), buf); + g_free(buf); prefs_update_estimate(d); } static void -sun_devaudio_changed (void *a, - sun_driver *d) +sun_devaudio_changed(void* a, + sun_driver* d) { - strncpy(d->p_devaudio, gtk_entry_get_text(GTK_ENTRY(d->prefs_devaudio_w)), - 127); + gchar *buf = gtk_entry_get_text(GTK_ENTRY(d->prefs_devaudio_w); + + if (strcmp(buf, d->p_devaudio)) { + g_free(d->p_devaudio); + d->p_devaudio = g_strdup(buf); + } } static void -sun_make_config_widgets (sun_driver *d) +sun_make_config_widgets(sun_driver* d) { GtkWidget *thing, *mainbox, *box2, *box3; - static const char *resolutionlabels[] = { "8 bits", "16 bits", NULL }; - static const char *channelslabels[] = { "Mono", "Stereo", NULL }; - static const char *mixfreqlabels[] = { "8000", "16000", "22050", "44100", - NULL }; + static const char* resolutionlabels[] = { "8 bits", "16 bits" }; + static const char* channelslabels[] = { "Mono", "Stereo" }; + static const char* mixfreqlabels[] = { "8000", "16000", "22050", "44100" }; d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); @@ -197,7 +205,7 @@ _("These changes won't take effect until you restart playing.")); gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - + thing = gtk_hseparator_new(); gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); @@ -208,14 +216,15 @@ thing = gtk_label_new(_("Output device (e.g. '/dev/audio'):")); gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - thing = gtk_entry_new_with_max_length(126); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + + thing = gtk_entry_new(); + gtk_entry_set_max_length(GTK_ENTRY(thing), 126); gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, FALSE, 0); gtk_entry_set_text(GTK_ENTRY(thing), d->p_devaudio); - gtk_signal_connect_after(GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(sun_devaudio_changed), d); + g_signal_connect_after(thing, "changed", + G_CALLBACK(sun_devaudio_changed), d); d->prefs_devaudio_w = thing; box2 = gtk_hbox_new(FALSE, 4); @@ -224,10 +233,9 @@ thing = gtk_label_new(_("Resolution:")); gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(resolutionlabels, box2, d->prefs_resolution_w, - FALSE, TRUE, (void(*)())prefs_resolution_changed, d); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + make_radio_group_full_ext(resolutionlabels, box2, d->prefs_resolution_w, + FALSE, TRUE, (void (*)())prefs_resolution_changed, d, TRUE); box2 = gtk_hbox_new(FALSE, 4); gtk_widget_show(box2); @@ -235,10 +243,9 @@ thing = gtk_label_new(_("Channels:")); gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(channelslabels, box2, d->prefs_channels_w, - FALSE, TRUE, (void(*)())prefs_channels_changed, d); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + make_radio_group_full_ext(channelslabels, box2, d->prefs_channels_w, + FALSE, TRUE, (void (*)())prefs_channels_changed, d, TRUE); box2 = gtk_hbox_new(FALSE, 4); gtk_widget_show(box2); @@ -246,10 +253,9 @@ thing = gtk_label_new(_("Frequency [Hz]:")); gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(mixfreqlabels, box2, d->prefs_mixfreq_w, - FALSE, TRUE, (void(*)())prefs_mixfreq_changed, d); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + make_radio_group_full_ext(mixfreqlabels, box2, d->prefs_mixfreq_w, + FALSE, TRUE, (void (*)())prefs_mixfreq_changed, d, TRUE); box2 = gtk_hbox_new(FALSE, 4); gtk_widget_show(box2); @@ -257,58 +263,54 @@ thing = gtk_label_new(_("Buffer Size:")); gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); box3 = gtk_vbox_new(FALSE, 2); - gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0); + gtk_box_pack_end(GTK_BOX(box2), box3, FALSE, FALSE, 0); gtk_widget_show(box3); d->bufsizespin_w = thing = gtk_spin_button_new(GTK_ADJUSTMENT( - gtk_adjustment_new(5.0, 5.0, 15.0, 1.0, 1.0, 0.0)), 0, 0); + gtk_adjustment_new(5.0, 5.0, 15.0, 1.0, 1.0, 0.0)), + 0, 0); gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - gtk_signal_connect (GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(prefs_bufsize_changed), d); + g_signal_connect(thing, "value-changed", + G_CALLBACK(prefs_bufsize_changed), d); d->bufsizelabel_w = thing = gtk_label_new(""); gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); - - add_empty_hbox(box2); d->estimatelabel_w = thing = gtk_label_new(""); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 0); gtk_widget_show(thing); - add_empty_hbox(box2); prefs_init_from_structure(d); } -static GtkWidget * -sun_getwidget (void *dp) +static GtkWidget* +sun_getwidget(void* dp) { - sun_driver * const d = dp; + sun_driver* const d = dp; return d->configwidget; } -static void * -sun_new (void) +static void* +sun_new(gboolean (*callback)(void *buf, guint32 count, gint mixfreq, gint mixformat)) { - sun_driver *d = g_new(sun_driver, 1); + sun_driver* d = g_new(sun_driver, 1); - strcpy(d->p_devaudio, "/dev/audio"); + d->p_devaudio = g_strdup("/dev/audio"); d->p_mixfreq = 44100; d->p_channels = 2; d->p_resolution = 16; d->p_bufsize = 11; // 2048; d->soundfd = -1; d->sndbuf = NULL; - d->polltag = NULL; + d->callback = callback; + + DRIVER_THREAD_INIT(d) sun_make_config_widgets(d); @@ -316,131 +318,139 @@ } static void -sun_destroy (void *dp) +sun_destroy(void* dp) { - sun_driver * const d = dp; + sun_driver* const d = dp; gtk_widget_destroy(d->configwidget); + DRIVER_THREAD_CLEAR(d) g_free(dp); } static gboolean -sun_try_format (sun_driver *d, int fmt, int precision) +sun_try_format(sun_driver* d, int fmt, int precision) { audio_encoding_t enc; - - for(enc.index = 0; ioctl(d->soundfd, AUDIO_GETENC, &enc) == 0; - enc.index++) { + + for (enc.index = 0; ioctl(d->soundfd, AUDIO_GETENC, &enc) == 0; + enc.index++) { if (enc.encoding == fmt && enc.precision == precision) { - d->info.play.encoding = enc.encoding; - d->info.play.precision = enc.precision; - if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) == 0) { - return TRUE; - } else { - return FALSE; - } - } + d->info.play.encoding = enc.encoding; + d->info.play.precision = enc.precision; + if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) == 0) { + return TRUE; + } else { + return FALSE; + } + } } - + return FALSE; } static gboolean -sun_try_channels (sun_driver *d, int nch) +sun_try_channels(sun_driver* d, int nch) { d->info.play.channels = nch; - if(ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { + if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { return FALSE; } - + return TRUE; } static void -sun_release (void *dp) +sun_release(void* dp) { - sun_driver * const d = dp; + sun_driver* const d = dp; - free(d->sndbuf); - d->sndbuf = NULL; + DRIVER_THREAD_CLEAR(d) - audio_poll_remove(d->polltag); - d->polltag = NULL; - - if(d->soundfd >= 0) { - ioctl(d->soundfd, AUDIO_FLUSH, NULL); - close(d->soundfd); - d->soundfd = -1; + if (d->soundfd >= 0) { + ioctl(d->soundfd, AUDIO_FLUSH, NULL); + close(d->soundfd); + d->soundfd = -1; } + + DRIVER_THREAD_WAIT(d) + + free(d->sndbuf); + d->sndbuf = NULL; } static gboolean -sun_open (void *dp) +sun_open(void* dp) { - char buf[256]; - sun_driver * const d = dp; + gchar* buf; + sun_driver* const d = dp; int mf = 0, i; AUDIO_INITINFO(&d->info); + errno = 0; d->soundfd = open(d->p_devaudio, O_WRONLY); - if(d->soundfd < 0) { - sprintf(buf, _("%s: %s"), d->p_devaudio, strerror(errno)); - goto out; + if (d->soundfd < 0) { + buf = g_strdup_printf(_("SUN output (%s): Cannot open device"), d->p_devaudio); + error_errno(buf); + g_free(buf); + goto out; } - + d->info.mode = AUMODE_PLAY; - if(ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { - sprintf(buf, _("%s: Cannot play (%s)"), d->p_devaudio, strerror(errno)); - goto out; + if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { + buf = g_strdup_printf(_("SUN output (%s) does not support playback"), d->p_devaudio); + error_errno(buf); + g_free(buf); + goto out; } - + d->playrate = d->p_mixfreq; d->info.play.sample_rate = d->playrate; - if(ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { - sprintf(buf, _("%s: Cannot handle %dHz (%s)"), d->p_devaudio, - d->playrate, strerror(errno)); - goto out; - } - - d->bits = 0; - if(d->p_resolution == 16) { - if(sun_try_format(d, AUDIO_ENCODING_SLINEAR_LE, 16)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_S16_LE; - } else if(sun_try_format(d, AUDIO_ENCODING_SLINEAR_BE, 16)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_S16_BE; - } else if(sun_try_format(d, AUDIO_ENCODING_ULINEAR_LE, 16)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_U16_LE; - } else if(sun_try_format(d, AUDIO_ENCODING_ULINEAR_BE, 16)) { - d->bits = 16; - mf = ST_MIXER_FORMAT_U16_BE; - } - } - if(d->bits != 16) { - if(sun_try_format(d, AUDIO_ENCODING_SLINEAR, 8)) { - d->bits = 8; - mf = ST_MIXER_FORMAT_S8; - } else if(sun_try_format(d, AUDIO_ENCODING_PCM8, 8)) { - d->bits = 8; - mf = ST_MIXER_FORMAT_U8; - } else { - sprintf(buf, _("%s: Required sound encoding not supported.\n"), - d->p_devaudio); - goto out; - } - } - - if(d->p_channels == 2 && sun_try_channels(d, 2)) { - d->stereo = 1; - mf |= ST_MIXER_FORMAT_STEREO; - } else if(sun_try_channels(d, 1)) { - d->stereo = 0; + if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { + buf = g_strdup_printf(_("SUN output (%s): Cannot handle %d Hz"), d->p_devaudio); + error_errno(buf); + g_free(buf); + goto out; } + d->bits = 0; + if (d->p_resolution == 16) { + if (sun_try_format(d, AUDIO_ENCODING_SLINEAR_LE, 16)) { + d->bits = 16; + mf = ST_MIXER_FORMAT_S16_LE; + } else if (sun_try_format(d, AUDIO_ENCODING_SLINEAR_BE, 16)) { + d->bits = 16; + mf = ST_MIXER_FORMAT_S16_BE; + } else if (sun_try_format(d, AUDIO_ENCODING_ULINEAR_LE, 16)) { + d->bits = 16; + mf = ST_MIXER_FORMAT_U16_LE; + } else if (sun_try_format(d, AUDIO_ENCODING_ULINEAR_BE, 16)) { + d->bits = 16; + mf = ST_MIXER_FORMAT_U16_BE; + } + } + if (d->bits != 16) { + if (sun_try_format(d, AUDIO_ENCODING_SLINEAR, 8)) { + d->bits = 8; + mf = ST_MIXER_FORMAT_S8; + } else if (sun_try_format(d, AUDIO_ENCODING_PCM8, 8)) { + d->bits = 8; + mf = ST_MIXER_FORMAT_U8; + } else { + buf = g_strdup_printf(_("SUN output (%s): Required sound encoding not supported"), d->p_devaudio); + error_error(buf); + g_free(buf); + goto out; + } + } + + if (d->p_channels == 2 && sun_try_channels(d, 2)) { + d->stereo = 1; + mf |= ST_MIXER_FORMAT_STEREO; + } else if (sun_try_channels(d, 1)) { + d->stereo = 0; + } d->mf = mf; @@ -448,17 +458,20 @@ d->info.blocksize = 1 << (i & 0xffff); d->info.hiwat = ((unsigned)i >> 16) & 0x7fff; if (d->info.hiwat == 0) { - d->info.hiwat = 65536; + d->info.hiwat = 65536; } if (ioctl(d->soundfd, AUDIO_SETINFO, &d->info) != 0) { - sprintf(buf, _("%s: Cannot set block size (%s)"), d->p_devaudio, - strerror(errno)); + buf = g_strdup_printf(_("SUN output (%s): Cannot set block size"), d->p_devaudio); + error_errno(buf); + g_free(buf); goto out; } - + if (ioctl(d->soundfd, AUDIO_GETINFO, &d->info) != 0) { - sprintf(buf, _("%s: %s"), d->p_devaudio, strerror(errno)); - goto out; + buf = g_strdup_printf(_("SUN input (%s): Cannot get device information"), d->p_devaudio); + error_errno(buf); + g_free(buf); + goto out; } d->bufsize = d->info.blocksize; d->numbufs = d->info.hiwat; @@ -472,68 +485,68 @@ d->sndbuf = calloc(1, d->bufsize); - if(d->stereo == 1) { - d->bufsize /= 2; + if (d->stereo == 1) { + d->bufsize /= 2; } - if(d->bits == 16) { - d->bufsize /= 2; + if (d->bits == 16) { + d->bufsize /= 2; } - d->polltag = audio_poll_add(d->soundfd, GDK_INPUT_WRITE, - sun_poll_ready_playing, d); d->firstpoll = TRUE; d->playtime = 0; + DRIVER_THREAD_RESUME(d) return TRUE; - out: - error_error(buf); +out: sun_release(dp); return FALSE; } static double -sun_get_play_time (void *dp) +sun_get_play_time(void* dp) { - sun_driver * const d = dp; + sun_driver* const d = dp; - if(d->realtimecaps) { + if (d->realtimecaps) { static audio_offset_t ooffs; - ioctl(d->soundfd, AUDIO_GETOOFFS, &ooffs); + ioctl(d->soundfd, AUDIO_GETOOFFS, &ooffs); - return (double)ooffs.samples / - (d->stereo + 1) / (d->bits / 8) / d->playrate; + return (double)ooffs.samples / (d->stereo + 1) / (d->bits / 8) / d->playrate; } else { - struct timeval tv; - double curtime; + struct timeval tv; + double curtime; - gettimeofday(&tv, NULL); - curtime = tv.tv_sec + tv.tv_usec / 1e6; + gettimeofday(&tv, NULL); + curtime = tv.tv_sec + tv.tv_usec / 1e6; - return d->playtime + curtime - d->outtime - - d->numbufs * ((double) d->bufsize / d->playrate); + return d->playtime + curtime - d->outtime - d->numbufs * ((double)d->bufsize / d->playrate); } } static inline int -sun_get_play_rate (void *d) +sun_get_play_rate(void* d) { - sun_driver * const dp = d; + sun_driver* const dp = d; return dp->playrate; } static gboolean -sun_loadsettings (void *dp, - prefs_node *f) +sun_loadsettings(void* dp, + const gchar* f) { - sun_driver * const d = dp; + gchar* buf; + sun_driver* const d = dp; - prefs_get_string(f, "sun-devaudio", d->p_devaudio); - prefs_get_int(f, "sun-resolution", &d->p_resolution); - prefs_get_int(f, "sun-channels", &d->p_channels); - prefs_get_int(f, "sun-mixfreq", &d->p_mixfreq); - prefs_get_int(f, "sun-bufsize", &d->p_bufsize); + if ((buf = prefs_get_string(f, "sun-devaudio", NULL))) { + g_free(d->p_devaudio); + d->p_devaudio = buf; + } + d->p_resolution = prefs_get_int(f, "sun-resolution", 16); + d->p_channels = prefs_get_int(f, "sun-channels", 2); + d->p_mixfreq = prefs_get_int(f, "sun-mixfreq", 44100); + d->p_bufsize = prefs_get_int(f, "sun-bufsize", 11); prefs_init_from_structure(d); @@ -541,10 +554,10 @@ } static gboolean -sun_savesettings (void *dp, - prefs_node *f) +sun_savesettings(void* dp, + const gchar* f) { - sun_driver * const d = dp; + sun_driver* const d = dp; prefs_put_string(f, "sun-devaudio", d->p_devaudio); prefs_put_int(f, "sun-resolution", d->p_resolution); @@ -555,19 +568,47 @@ return TRUE; } -st_out_driver driver_out_sun = { - { "Sun Output", +static void +sun_activate(void *dp, const gchar* group) +{ + sun_driver * const d = dp; + + DRIVER_THREAD_NEW(d, sun_playing, dp, "Playback") +} + +static void +sun_deactivate(void *dp) +{ + sun_driver * const d = dp; + + DRIVER_THREAD_CANCEL(d) +} + +static void +sun_commit (void* dp) +{ + sun_driver * const d = dp; + + DRIVER_THREAD_COMMIT(d) +} + +st_driver driver_out_sun = { + "Sun Output", + + sun_new, + sun_destroy, + + sun_open, + sun_release, - sun_new, - sun_destroy, + sun_getwidget, + sun_loadsettings, + sun_savesettings, - sun_open, - sun_release, + sun_activate, + sun_deactivate, - sun_getwidget, - sun_loadsettings, - sun_savesettings, - }, + sun_commit, sun_get_play_time, sun_get_play_rate diff -Nru soundtracker-0.6.8/app/endian-conv.c soundtracker-1.0.2~pre2/app/endian-conv.c --- soundtracker-0.6.8/app/endian-conv.c 2001-01-03 13:24:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/endian-conv.c 2019-04-15 17:45:04.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Endianness conversion * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,28 +23,26 @@ #include "endian-conv.h" -void -le_16_array_to_host_order (gint16 *data, - int count) +void le_16_array_to_host_order(gint16* data, + int count) { #ifdef WORDS_BIGENDIAN - for(; count; count--, data++) { - gint8 *p = (gint8*)data; - gint8 a = p[0]; - p[0] = p[1]; - p[1] = a; + for (; count; count--, data++) { + gint8* p = (gint8*)data; + gint8 a = p[0]; + p[0] = p[1]; + p[1] = a; } #endif } -void -byteswap_16_array (gint16 *data, - int count) +void byteswap_16_array(gint16* data, + int count) { - for(; count; count--, data++) { - gint8 *p = (gint8*)data; - gint8 a = p[0]; - p[0] = p[1]; - p[1] = a; + for (; count; count--, data++) { + gint8* p = (gint8*)data; + gint8 a = p[0]; + p[0] = p[1]; + p[1] = a; } } diff -Nru soundtracker-0.6.8/app/endian-conv.h soundtracker-1.0.2~pre2/app/endian-conv.h --- soundtracker-0.6.8/app/endian-conv.h 2001-01-03 13:24:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/endian-conv.h 2020-11-27 17:06:10.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Endianness conversion * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ #include static inline guint32 -get_le_32 (guint8 *src) +get_le_32(const guint8* src) { #if defined(__i386__) return *(guint32*)src; @@ -37,17 +37,20 @@ } static inline void -put_le_32 (guint8 *dest, gint32 d) +put_le_32(guint8* dest, gint32 d) { #if defined(__i386__) *(guint32*)dest = d; #else - dest[0] = d >> 0; dest[1] = d >> 8; dest[2] = d >> 16; dest[3] = d >> 24; + dest[0] = d >> 0; + dest[1] = d >> 8; + dest[2] = d >> 16; + dest[3] = d >> 24; #endif } static inline guint16 -get_le_16 (guint8 *src) +get_le_16(const guint8* src) { #if defined(__i386__) return *(guint16*)src; @@ -57,29 +60,26 @@ } static inline void -put_le_16 (guint8 *dest, gint16 d) +put_le_16(guint8* dest, gint16 d) { #if defined(__i386__) *(guint16*)dest = d; #else - dest[0] = d >> 0; dest[1] = d >> 8; + dest[0] = d >> 0; + dest[1] = d >> 8; #endif } static inline guint16 -get_be_16 (guint8 *src) +get_be_16(const guint8* src) { return (src[0] << 8) + (src[1] << 0); } -void -le_16_array_to_host_order (gint16 *data, - int count); - -void -byteswap_16_array (gint16 *data, - int count); - -#endif /* _ENDIAN_CONV_H */ +void le_16_array_to_host_order(gint16* data, + int count); +void byteswap_16_array(gint16* data, + int count); +#endif /* _ENDIAN_CONV_H */ diff -Nru soundtracker-0.6.8/app/envelope-box.c soundtracker-1.0.2~pre2/app/envelope-box.c --- soundtracker-0.6.8/app/envelope-box.c 2002-05-16 13:52:25.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/envelope-box.c 2020-11-14 20:57:29.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GTK+ envelope editor box * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,15 +21,19 @@ #include +#include #include +#include #include -#include "i18n.h" -#include "gui-subs.h" #include "envelope-box.h" -#include "xm.h" #include "gui-settings.h" +#include "gui-subs.h" +#include "gui.h" +#include "history.h" +#include "st-subs.h" +#include "xm.h" static STEnvelope dummy_envelope = { { { 0, 0 } }, @@ -41,351 +45,598 @@ }; static void -spin_length_changed (GtkSpinButton *spin, - EnvelopeBox *e); +spin_length_changed(GtkSpinButton* spin, + EnvelopeBox* e); static gboolean -envelope_box_clip_point_movement (EnvelopeBox *e, - int p, - int *dx, - int *dy) +envelope_box_clip_point_movement(EnvelopeBox* e, + int p, + int* dx, + int* dy) { gboolean corrected = FALSE; int bound; int curx = e->current->points[p].pos; int cury = e->current->points[p].val; - if(dx != NULL) { - if(p == 0 && *dx != 0) { - *dx = 0; - corrected = TRUE; - } else if(*dx < 0) { - if(p > 0) - bound = e->current->points[p-1].pos + 1; - else - bound = 0; - if(*dx < bound - curx) { - *dx = bound - curx; - corrected = TRUE; - } - } else { - if(p < e->current->num_points - 1) - bound = e->current->points[p+1].pos - 1; - else - bound = 65535; - if(*dx > bound - curx) { - *dx = bound - curx; - corrected = TRUE; - } - } - } - - if(dy != NULL) { - if(*dy < 0) { - bound = 0; - if(*dy < bound - cury) { - *dy = bound - cury; - corrected = TRUE; - } - } else { - bound = 64; - if(*dy > bound - cury) { - *dy = bound - cury; - corrected = TRUE; - } - } + if (dx != NULL) { + if (p == 0 && *dx != 0) { + *dx = 0; + corrected = TRUE; + } else if (*dx < 0) { + if (p > 0) + bound = e->current->points[p - 1].pos + 1; + else + bound = 0; + if (*dx < bound - curx) { + *dx = bound - curx; + corrected = TRUE; + } + } else { + if (p < e->current->num_points - 1) + bound = e->current->points[p + 1].pos - 1; + else + bound = 65535; + if (*dx > bound - curx) { + *dx = bound - curx; + corrected = TRUE; + } + } + } + + if (dy != NULL) { + if (*dy < 0) { + bound = 0; + if (*dy < bound - cury) { + *dy = bound - cury; + corrected = TRUE; + } + } else { + bound = 64; + if (*dy > bound - cury) { + *dy = bound - cury; + corrected = TRUE; + } + } } return corrected; } -#ifdef USE_GNOME -static gint -envelope_box_point_event (GnomeCanvasItem *item, - GdkEvent *event, - gpointer data); +static void +envelope_box_move_point(EnvelopeBox* e, + int n, + int dpos, + int dval); + +#ifdef USE_CANVAS + +#define POINT_ACTIVE "#ffcc00" +#define POINT_CURRENT "#ff7777" +#define POINT_NORMAL "#cc0000" + +static void +envelope_box_initialize_point_dragging(EnvelopeBox* e, + GooCanvasItem* eventitem, + GdkEventButton* event, + GooCanvasItem* point); + +static void +envelope_box_stop_point_dragging(EnvelopeBox* e, + GdkEventButton* event); + +static void +envelope_box_canvas_set_max_x(EnvelopeBox* e, + int x); + +static gboolean +envelope_box_point_enter(GooCanvasItem* item, GooCanvasItem* target_item, + GdkEventCrossing* event, + gpointer data) +{ + g_object_set(G_OBJECT(item), "fill-color", POINT_ACTIVE, NULL); + return FALSE; +} + +static gboolean +envelope_box_point_leave(GooCanvasItem* item, GooCanvasItem* target_item, + GdkEventCrossing* event, + EnvelopeBox* e) +{ + g_object_set(G_OBJECT(item), "fill-color", item == e->cur_point ? POINT_CURRENT : POINT_NORMAL, NULL); + return FALSE; +} + +static gboolean +envelope_box_point_press(GooCanvasItem* item, GooCanvasItem* target_item, + GdkEventButton* event, + gpointer data) +{ + guint i; + EnvelopeBox* e = ENVELOPE_BOX(data); + + switch (event->button) { + case 1: + envelope_box_initialize_point_dragging(e, item, event, item); + return TRUE; + case 3: + for (i = 0; i < e->current->num_points; i++) + if (e->points[i] == item) { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_pos), i); + return TRUE; + } + + return FALSE; + default: + break; + } + return FALSE; +} + +static gboolean +envelope_box_point_release(GooCanvasItem* item, GooCanvasItem* target_item, + GdkEventButton* event, + gpointer data) +{ + EnvelopeBox* e = ENVELOPE_BOX(data); + + if (event->button == 1) { + envelope_box_stop_point_dragging(e, event); + return TRUE; + } + return FALSE; +} +static gboolean +envelope_box_point_motion(GooCanvasItem* item, GooCanvasItem* target_item, + GdkEventMotion* event, + gpointer data) +{ + EnvelopeBox* e = ENVELOPE_BOX(data); + + if (e->dragpoint != -1 && event->state & GDK_BUTTON1_MASK) { + /* Snap movement to integer grid */ + int dx, dy; + gdouble ex = event->x, ey = event->y; + + goo_canvas_convert_from_item_space(e->canvas, item, &ex, &ey); + dx = ex - e->dragfromx; + dy = e->dragfromy - ey; + + if (dx || dy) { + envelope_box_clip_point_movement(e, e->dragpoint, &dx, &dy); + + if (event->state & GDK_CONTROL_MASK) { + if (fabs(ex - e->origin_x) > fabs(ey - e->origin_y)) + dy = e->dragfromy - e->origin_y; + else + dx = e->origin_x - e->dragfromx; + } + + envelope_box_move_point(e, e->dragpoint, dx, dy); + + e->dragfromx += dx; + e->dragfromy -= dy; + + /* Expand scrolling region horizontally, if necessary */ + if (e->dragpoint == e->current->num_points - 1 && e->current->points[e->dragpoint].pos > e->canvas_max_x) { + envelope_box_canvas_set_max_x(e, e->current->points[e->dragpoint].pos); + } + } + } + return TRUE; +} static void -envelope_box_canvas_size_allocate (GnomeCanvas *c, - void *dummy, - EnvelopeBox *e) +envelope_box_canvas_size_allocate(GooCanvas* c, + void* dummy, + EnvelopeBox* e) { double newval = (double)GTK_WIDGET(c)->allocation.height / (64 + 10); - if(newval != e->zoomfactor_base) { - gnome_canvas_set_pixels_per_unit(c, newval * e->zoomfactor_mult); - e->zoomfactor_base = newval; + if (newval != e->zoomfactor_base) { + goo_canvas_set_scale(c, newval * e->zoomfactor_mult); + e->zoomfactor_base = newval; } } static void -envelope_box_canvas_set_max_x (EnvelopeBox *e, - int x) +envelope_box_canvas_set_max_x(EnvelopeBox* e, + int x) { e->canvas_max_x = x; - gnome_canvas_set_scroll_region(e->canvas, -2 - 10 - 10, -2, x + 2 + 10, 66); + goo_canvas_set_bounds(e->canvas, -2 - 10 - 10, -4, x + 2 + 10, 66); } static void -envelope_box_canvas_paint_grid (EnvelopeBox *e) +envelope_box_canvas_paint_grid(EnvelopeBox* e) { - GnomeCanvasPoints *points; - GnomeCanvasItem *item; - GnomeCanvasGroup *group; + GooCanvasItem* item; + GooCanvasGroup* group; int lines[] = { - 0, 0, 0, 64, - -6, 0, 0, 0, - -4, 16, 0, 16, - -6, 32, 0, 32, - -4, 48, 0, 48, - -6, 64, 0, 64, - 2, 0, 16384, 0, - 2, 64, 16384, 64, + 0, + 0, + 0, + 64, + -6, + 0, + 0, + 0, + -4, + 16, + 0, + 16, + -6, + 32, + 0, + 32, + -4, + 48, + 0, + 48, + -6, + 64, + 0, + 64, + 2, + 0, + 16384, + 0, + 2, + 64, + 16384, + 64, }; int i; - group = GNOME_CANVAS_GROUP (gnome_canvas_item_new (gnome_canvas_root(e->canvas), - gnome_canvas_group_get_type (), - "x", 0.0, - "y", 0.0, - NULL)); - - points = gnome_canvas_points_new(2); - for(i = 0; i < sizeof(lines) / 4 / sizeof(int); i++) { - points->coords[0] = lines[4*i+0]; - points->coords[1] = lines[4*i+1]; - points->coords[2] = lines[4*i+2]; - points->coords[3] = lines[4*i+3]; - item = gnome_canvas_item_new (group, - gnome_canvas_line_get_type (), - "points", points, - "fill_color", "#000088", - "width_units", 0.5, - NULL); - gnome_canvas_item_lower_to_bottom(item); - } - gnome_canvas_points_free(points); - - // UGH! Find a better way of making the background white... - item = gnome_canvas_item_new (group, - gnome_canvas_rect_get_type (), - "x1", (double)-500, - "y1", (double)-100, - "x2", (double)+70000, - "y2", (double)+100, - "fill_color", "#ffffff", - "outline_color", "#ffffff", - "width_pixels", 0, - NULL); - gnome_canvas_item_lower_to_bottom(item); + group = GOO_CANVAS_GROUP(goo_canvas_group_new(goo_canvas_get_root_item(e->canvas), + "x", 0.0, + "y", 0.0, + NULL)); + + for (i = 0; i < sizeof(lines) / 4 / sizeof(int); i++) { + item = goo_canvas_polyline_new_line(GOO_CANVAS_ITEM(group), + lines[4 * i + 0], + lines[4 * i + 1], + lines[4 * i + 2], + lines[4 * i + 3], + "stroke-color", "#000088", + "line-width", 0.5, + NULL); + goo_canvas_item_lower(item, NULL); + } } static void -envelope_box_canvas_add_point (EnvelopeBox *e, - int n) +envelope_box_canvas_add_point(EnvelopeBox* e, + int n, gboolean current) { // Create new point - e->points[n] = gnome_canvas_item_new (e->group, - gnome_canvas_rect_get_type (), - "x1", (double)e->current->points[n].pos - 1.5, - "y1", (double)(64-e->current->points[n].val) - 1.5, - "x2", (double)e->current->points[n].pos + 1.5, - "y2", (double)(64-e->current->points[n].val) + 1.5, - "fill_color", "#ff0000", - "outline_color", "#ff0000", - "width_pixels", 0, - NULL); - gtk_signal_connect (GTK_OBJECT (e->points[n]), "event", - (GtkSignalFunc) envelope_box_point_event, - e); + e->points[n] = goo_canvas_rect_new(e->group, + (double)e->current->points[n].pos - 1.5, + (double)(64 - e->current->points[n].val) - 1.5, + 3.0, 3.0, + "fill-color", current ? POINT_CURRENT : POINT_NORMAL, + "stroke-color", "#ff0000", + "line-width", 0.0, + NULL); + g_signal_connect(e->points[n], "enter-notify-event", + G_CALLBACK(envelope_box_point_enter), + e); + g_signal_connect(e->points[n], "leave-notify-event", + G_CALLBACK(envelope_box_point_leave), + e); + g_signal_connect(e->points[n], "button-press-event", + G_CALLBACK(envelope_box_point_press), + e); + g_signal_connect(e->points[n], "button-release-event", + G_CALLBACK(envelope_box_point_release), + e); + g_signal_connect(e->points[n], "motion-notify-event", + G_CALLBACK(envelope_box_point_motion), + e); // Adjust / Create line connecting to the previous point - if(n > 0) { - if(e->lines[n - 1]) { - GNOME_CANVAS_LINE(e->lines[n - 1])->coords[2] = (double)e->current->points[n].pos; - GNOME_CANVAS_LINE(e->lines[n - 1])->coords[3] = (double)(64 - e->current->points[n].val); - gnome_canvas_item_request_update(e->lines[n - 1]); - } else { - GnomeCanvasPoints *points = gnome_canvas_points_new(2); - points->coords[0] = (double)e->current->points[n-1].pos; - points->coords[1] = (double)(64 - e->current->points[n-1].val); - points->coords[2] = (double)e->current->points[n].pos; - points->coords[3] = (double)(64 - e->current->points[n].val); - - e->lines[n-1] = gnome_canvas_item_new (e->group, - gnome_canvas_line_get_type (), - "points", points, - "fill_color", "black", - "width_units", 1.0, - NULL); - gnome_canvas_item_lower_to_bottom(e->lines[n-1]); - gnome_canvas_points_free(points); - } + if (n > 0) { + if (e->lines[n - 1]) { + GooCanvasPoints* points; + + g_object_get(G_OBJECT(e->lines[n - 1]), "points", &points, NULL); + points->coords[2] = (double)e->current->points[n].pos; + points->coords[3] = (double)(64 - e->current->points[n].val); + g_object_set(G_OBJECT(e->lines[n - 1]), "points", points, NULL); + } else { + e->lines[n - 1] = goo_canvas_polyline_new_line(e->group, + (double)e->current->points[n - 1].pos, + (double)(64 - e->current->points[n - 1].val), + (double)e->current->points[n].pos, + (double)(64 - e->current->points[n].val), + "stroke-color", "black", + "line-width", 1.0, + NULL); + goo_canvas_item_lower(e->lines[n - 1], NULL); + } } // Adjust / Create line connecting to the next point - if(n < e->current->num_points - 1) { - if(e->lines[n]) { - printf("muh.\n"); - } else { - GnomeCanvasPoints *points = gnome_canvas_points_new(2); - points->coords[0] = (double)e->current->points[n].pos; - points->coords[1] = (double)(64 - e->current->points[n].val); - points->coords[2] = (double)e->current->points[n + 1].pos; - points->coords[3] = (double)(64 - e->current->points[n + 1].val); - - e->lines[n] = gnome_canvas_item_new (e->group, - gnome_canvas_line_get_type (), - "points", points, - "fill_color", "black", - "width_units", 1.0, - NULL); - gnome_canvas_item_lower_to_bottom(e->lines[n]); - gnome_canvas_points_free(points); - } - } - - gtk_widget_queue_draw(GTK_WIDGET(e->canvas)); // Is needed for anti-aliased canvas -} - + if (n < e->current->num_points - 1) { + if (e->lines[n]) { + printf("muh.\n"); + } else { + e->lines[n] = goo_canvas_polyline_new_line(e->group, + (double)e->current->points[n].pos, + (double)(64 - e->current->points[n].val), + (double)e->current->points[n + 1].pos, + (double)(64 - e->current->points[n + 1].val), + "stroke-color", "black", + "line-width", 1.0, + NULL); + goo_canvas_item_lower(e->lines[n], NULL); + } + } +} #endif static void -envelope_box_block_loop_spins (EnvelopeBox *e, - int block) -{ - void (*func) (GtkObject*, gpointer); - - func = block ? gtk_signal_handler_block_by_data : gtk_signal_handler_unblock_by_data; - - func(GTK_OBJECT(e->spin_length), e); - func(GTK_OBJECT(e->spin_pos), e); - func(GTK_OBJECT(e->spin_offset), e); - func(GTK_OBJECT(e->spin_value), e); - func(GTK_OBJECT(e->spin_sustain), e); - func(GTK_OBJECT(e->spin_loop_start), e); - func(GTK_OBJECT(e->spin_loop_end), e); +envelope_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + const gsize e_size = sizeof(STEnvelope); + EnvelopeBox* e = data; + STEnvelope* tmp = alloca(e_size); + + g_assert(IS_ENVELOPE_BOX(data)); + + memcpy(tmp, arg, e_size); + memcpy(arg, e->current, e_size); + memcpy(e->current, tmp, e_size); + envelope_box_set_envelope(e, e->current); } static int -envelope_box_insert_point (EnvelopeBox *e, - int before, - int pos, - int val) +envelope_box_insert_point(EnvelopeBox* e, + int before, + int pos, + int val) { + STEnvelope* arg; /* Check if there's enough room */ - if(e->current->num_points == ST_MAX_ENVELOPE_POINTS) - return FALSE; - if(!(before >= 1 && before <= e->current->num_points)) - return FALSE; - if(pos <= e->current->points[before - 1].pos) - return FALSE; - if(before < e->current->num_points && pos >= e->current->points[before].pos) - return FALSE; + if (e->current->num_points == ST_MAX_ENVELOPE_POINTS) + return FALSE; + if (!(before >= 1 && before <= e->current->num_points)) + return FALSE; + if (pos <= e->current->points[before - 1].pos) + return FALSE; + if (before < e->current->num_points && pos >= e->current->points[before].pos) + return FALSE; + +#ifdef USE_CANVAS + /* Unhighlight previous current point */ + g_object_set(G_OBJECT(e->cur_point), "fill-color", POINT_NORMAL, NULL); +#endif + arg = g_new(STEnvelope, 1); + memcpy(arg, e->current, sizeof(STEnvelope)); + history_log_action(HISTORY_ACTION_POINTER, _("Envelope point inserting"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS, envelope_undo, e, + sizeof(STEnvelope), arg); // Update envelope structure memmove(&e->current->points[before + 1], &e->current->points[before], - (ST_MAX_ENVELOPE_POINTS - 1 - before) * sizeof(e->current->points[0])); + (ST_MAX_ENVELOPE_POINTS - 1 - before) * sizeof(e->current->points[0])); e->current->points[before].pos = pos; e->current->points[before].val = val; e->current->num_points++; // Update GUI - gtk_spin_button_set_value(e->spin_length, e->current->num_points); - spin_length_changed(e->spin_length, e); - envelope_box_block_loop_spins(e, TRUE); - gtk_spin_button_set_value(e->spin_pos, before); - gtk_spin_button_set_value(e->spin_offset, e->current->points[before].pos); - gtk_spin_button_set_value(e->spin_value, e->current->points[before].val); - envelope_box_block_loop_spins(e, FALSE); - xm_set_modified(1); + history_skip = TRUE; + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_length), e->current->num_points); + if (before <= e->current->sustain_point) + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_sustain), e->current->sustain_point + 1); + gui_block_signals(e->objs, e->sig_tags, TRUE); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_pos), before); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_offset), e->current->points[before].pos); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_value), e->current->points[before].val); + gui_block_signals(e->objs, e->sig_tags, FALSE); + history_skip = FALSE; -#ifdef USE_GNOME +#ifdef USE_CANVAS // Update Canvas memmove(&e->points[before + 1], &e->points[before], (ST_MAX_ENVELOPE_POINTS - 1 - before) * sizeof(e->points[0])); - memmove(&e->lines[before + 1], &e->lines[before], (ST_MAX_ENVELOPE_POINTS - 1 - before) * sizeof(e->lines[0])); + memmove(&e->lines[before + 1], &e->lines[before], (ST_MAX_ENVELOPE_POINTS - 2 - before) * sizeof(e->lines[0])); e->lines[before] = NULL; - envelope_box_canvas_add_point(e, before); + envelope_box_canvas_add_point(e, before, TRUE); + /* New current point, already painted highlit */ + e->cur_point = e->points[before]; + e->prev_current = before; #endif return TRUE; } static void -envelope_box_delete_point (EnvelopeBox *e, - int n) +envelope_box_delete_point(EnvelopeBox* e, + int n) { - if(!(n >= 1 && n < e->current->num_points)) - return; + int nn; + STEnvelope* arg; + + if (!(n >= 1 && n < e->current->num_points)) + return; + + arg = g_new(STEnvelope, 1); + memcpy(arg, e->current, sizeof(STEnvelope)); + history_log_action(HISTORY_ACTION_POINTER, _("Envelope point removing"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS, envelope_undo, e, + sizeof(STEnvelope), arg); // Update envelope structure memmove(&e->current->points[n], &e->current->points[n + 1], - (ST_MAX_ENVELOPE_POINTS - 1 - n) * sizeof(e->current->points[0])); + (ST_MAX_ENVELOPE_POINTS - 1 - n) * sizeof(e->current->points[0])); e->current->num_points--; + nn = MIN(n, e->current->num_points - 1); // Update GUI - gtk_spin_button_set_value(e->spin_length, e->current->num_points); - spin_length_changed(e->spin_length, e); - envelope_box_block_loop_spins(e, TRUE); - gtk_spin_button_set_value(e->spin_pos, n); - gtk_spin_button_set_value(e->spin_offset, e->current->points[n].pos); - gtk_spin_button_set_value(e->spin_value, e->current->points[n].val); - envelope_box_block_loop_spins(e, FALSE); - xm_set_modified(1); + history_skip = TRUE; + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_length), e->current->num_points); + if (n <= e->current->sustain_point) + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_sustain), e->current->sustain_point - 1); + gui_block_signals(e->objs, e->sig_tags, TRUE); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_pos), nn); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_offset), e->current->points[nn].pos); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_value), e->current->points[nn].val); + gui_block_signals(e->objs, e->sig_tags, FALSE); + history_skip = FALSE; -#ifdef USE_GNOME +#ifdef USE_CANVAS // Update Canvas - gtk_object_destroy(GTK_OBJECT(e->points[n])); - gtk_object_destroy(GTK_OBJECT(e->lines[n-1])); + goo_canvas_item_remove(e->points[n]); + goo_canvas_item_remove(e->lines[n - 1]); memmove(&e->points[n], &e->points[n + 1], (ST_MAX_ENVELOPE_POINTS - 1 - n) * sizeof(e->points[0])); - e->points[ST_MAX_ENVELOPE_POINTS - 1] = NULL; memmove(&e->lines[n - 1], &e->lines[n], (ST_MAX_ENVELOPE_POINTS - 1 - n) * sizeof(e->lines[0])); - e->lines[ST_MAX_ENVELOPE_POINTS - 2] = NULL; - if(e->lines[n-1]) { - GNOME_CANVAS_LINE(e->lines[n - 1])->coords[0] = (double)e->current->points[n-1].pos; - GNOME_CANVAS_LINE(e->lines[n - 1])->coords[1] = (double)(64 - e->current->points[n-1].val); - gnome_canvas_item_request_update(e->lines[n - 1]); + e->lines[e->current->num_points - 1] = NULL; + if (e->lines[n - 1]) { + GooCanvasPoints* points; + + g_object_get(G_OBJECT(e->lines[n - 1]), "points", &points, NULL); + points->coords[0] = (double)e->current->points[n - 1].pos; + points->coords[1] = (double)(64 - e->current->points[n - 1].val); + g_object_set(G_OBJECT(e->lines[n - 1]), "points", points, NULL); } - gtk_widget_queue_draw(GTK_WIDGET(e->canvas)); // Is needed for anti-aliased canvas envelope_box_canvas_set_max_x(e, e->current->points[e->current->num_points - 1].pos); + + /* New current point highlighting */ + if (n < e->current->num_points) { /* If the current point is last, it will be highlit automatically */ + e->cur_point = e->points[n]; + e->prev_current = n; + g_object_set(G_OBJECT(e->cur_point), "fill-color", POINT_CURRENT, NULL); + } #endif } +#ifdef USE_CANVAS +static void +envelope_box_canvas_point_out_of_sight(EnvelopeBox* e, + STEnvelopePoint point, gint* dragx, gint* dragy) +{ + double xposwindow = point.pos, y = point.val; + double bottom = gtk_adjustment_get_upper(e->vadj) - gtk_adjustment_get_page_size(e->vadj) + - gtk_adjustment_get_value(e->vadj) + 2.0 * (e->zoomfactor_base * e->zoomfactor_mult); /* :-P */ + + goo_canvas_convert_to_pixels(e->canvas, &xposwindow, &y); + xposwindow -= gtk_adjustment_get_value(e->hadj); + + if (xposwindow < 0) + *dragx = -1; + if (xposwindow >= GTK_WIDGET(e->canvas)->allocation.width) + *dragx = 1; + + if (y < bottom) + *dragy = -1; + if (y >= bottom + GTK_WIDGET(e->canvas)->allocation.height) + *dragy = 1; +} + /* We assume here that the movement is valid! */ static void -envelope_box_move_point (EnvelopeBox *e, - int n, - int dpos, - int dval) +loop_sustain_move(GooCanvasItem* line, guint pos) +{ + GooCanvasPoints* points; + + g_object_get(G_OBJECT(line), "points", &points, NULL); + points->coords[0] = points->coords[2] = pos; + g_object_set(G_OBJECT(line), "points", points, NULL); +} + +static GooCanvasItem* +loop_sustain_new(EnvelopeBox* e, guint pos, gboolean is_sustain) +{ + GooCanvasItem* line; + + if (is_sustain) { + GooCanvasLineDash* dash = goo_canvas_line_dash_new(2, 4.0, 4.0); + + line = goo_canvas_polyline_new_line(e->group, pos, 0.0, pos, 64.0, + "stroke-color", "#00cc00", + "line-width", 1.5, + "line-dash", dash, + NULL); + goo_canvas_line_dash_unref(dash); + } else { + line = goo_canvas_polyline_new_line(e->group, pos, 0.0, pos, 64.0, + "stroke-color", "#7700ff", + "line-width", 1.5, + NULL); + } + if (is_sustain && e->loop_start_line) + goo_canvas_item_raise(line, e->loop_start_line); + else if (!is_sustain && e->sustain_line) + goo_canvas_item_lower(line, e->sustain_line); + else + goo_canvas_item_lower(line, NULL); + + return line; +} +#endif + +static void +envelope_box_move_point(EnvelopeBox* e, + int n, + int dpos, + int dval) { +#ifdef USE_CANVAS + GooCanvasPoints* points; +#endif + + if (!history_test_collate(HISTORY_ACTION_POINTER, + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | HISTORY_EXTRA_FLAGS(n), e)) { + STEnvelope* arg = g_new(STEnvelope, 1); + + memcpy(arg, e->current, sizeof(STEnvelope)); + history_log_action(HISTORY_ACTION_POINTER, _("Envelope point moving"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | HISTORY_EXTRA_FLAGS(n), + envelope_undo, e, sizeof(STEnvelope), arg); + } + // Update envelope structure e->current->points[n].pos += dpos; e->current->points[n].val += dval; // Update GUI - envelope_box_block_loop_spins(e, TRUE); - gtk_spin_button_set_value(e->spin_offset, e->current->points[n].pos); - gtk_spin_button_set_value(e->spin_value, e->current->points[n].val); - envelope_box_block_loop_spins(e, FALSE); - xm_set_modified(1); + gui_block_signals(e->objs, e->sig_tags, TRUE); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_offset), e->current->points[n].pos); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_value), e->current->points[n].val); + gui_block_signals(e->objs, e->sig_tags, FALSE); -#ifdef USE_GNOME +#ifdef USE_CANVAS // Update Canvas - gnome_canvas_item_move(e->points[n], dpos, -dval); - if(n < e->current->num_points - 1) { - GNOME_CANVAS_LINE(e->lines[n])->coords[0] += dpos; - GNOME_CANVAS_LINE(e->lines[n])->coords[1] -= dval; - gnome_canvas_item_request_update(e->lines[n]); + goo_canvas_item_translate(e->points[n], dpos, -dval); + if (n < e->current->num_points - 1) { + g_object_get(G_OBJECT(e->lines[n]), "points", &points, NULL); + + points->coords[0] += dpos; + points->coords[1] -= dval; + g_object_set(G_OBJECT(e->lines[n]), "points", points, NULL); } - if(n > 0) { - GNOME_CANVAS_LINE(e->lines[n-1])->coords[2] += dpos; - GNOME_CANVAS_LINE(e->lines[n-1])->coords[3] -= dval; - gnome_canvas_item_request_update(e->lines[n-1]); + if (n > 0) { + g_object_get(G_OBJECT(e->lines[n - 1]), "points", &points, NULL); + + points->coords[2] += dpos; + points->coords[3] -= dval; + g_object_set(G_OBJECT(e->lines[n - 1]), "points", points, NULL); + + if (n == e->current->sustain_point && e->current->flags & EF_SUSTAIN) + loop_sustain_move(e->sustain_line, e->current->points[n].pos); + + if (n == e->current->loop_start && e->current->flags & EF_LOOP) + loop_sustain_move(e->loop_start_line, e->current->points[n].pos); + + if (n == e->current->loop_end && e->current->flags & EF_LOOP) + loop_sustain_move(e->loop_end_line, e->current->points[n].pos); } #endif } -#ifdef USE_GNOME +#ifdef USE_CANVAS /* This function returns world coordinates for a click on an item, if it is given, or else (if item == NULL), assumes the click was on @@ -393,405 +644,614 @@ that case). A little confusing, I admit. */ static void -envelope_box_get_world_coords (GnomeCanvasItem *item, - GdkEvent *event, - EnvelopeBox *e, - double *worldx, - double *worldy) -{ - if(item == NULL) { - gnome_canvas_window_to_world(e->canvas, event->button.x, event->button.y, worldx, worldy); - } else { - *worldx = event->button.x; - *worldy = event->button.y; - } -} - -static gboolean -envelope_box_canvas_point_out_of_sight (EnvelopeBox *e, - int xpos) -{ - double xposwindow; - - gnome_canvas_world_to_window(e->canvas, xpos, 0, &xposwindow, NULL); - - return xposwindow < 0 || xposwindow >= GTK_WIDGET(e->canvas)->allocation.width; +envelope_box_get_world_coords(GooCanvasItem* item, + GdkEventButton* event, + EnvelopeBox* e, + double* worldx, + double* worldy) +{ + *worldx = event->x; + *worldy = event->y; + if (item == NULL) { + goo_canvas_convert_from_pixels(e->canvas, worldx, worldy); + } else + goo_canvas_convert_from_item_space(e->canvas, item, worldx, worldy); } static void -envelope_box_initialize_point_dragging (EnvelopeBox *e, - GnomeCanvasItem *eventitem, - GdkEvent *event, - GnomeCanvasItem *point) +envelope_box_initialize_point_dragging(EnvelopeBox* e, + GooCanvasItem* eventitem, + GdkEventButton* event, + GooCanvasItem* point) { - GdkCursor *cursor; + GdkCursor* cursor; int i; double x, y; envelope_box_get_world_coords(eventitem, event, e, &x, &y); - cursor = gdk_cursor_new (GDK_FLEUR); - gnome_canvas_item_grab (point, - GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, - cursor, - event->button.time); - gdk_cursor_destroy (cursor); - - e->dragfromx = x; - e->dragfromy = y; + cursor = gdk_cursor_new(GDK_FLEUR); + goo_canvas_pointer_grab(e->canvas, point, + GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, + cursor, + event->time); + gdk_cursor_unref(cursor); - gnome_canvas_get_scroll_offsets(e->canvas, &e->dragging_canvas_from_x, &e->dragging_canvas_from_y); + e->origin_x = e->dragfromx = x; + e->origin_y = e->dragfromy = y; e->dragpoint = -1; - for(i = 0; i < 12; i++) { - if(e->points[i] == point) { - e->dragpoint = i; - break; - } + for (i = 0; i < 12; i++) { + if (e->points[i] == point) { + e->dragpoint = i; + break; + } } g_assert(e->dragpoint != -1); e->dragging_item_from_x = e->current->points[e->dragpoint].pos; e->dragging_item_from_y = e->current->points[e->dragpoint].val; - envelope_box_block_loop_spins(e, TRUE); - gtk_spin_button_set_value(e->spin_pos, e->dragpoint); - gtk_spin_button_set_value(e->spin_offset, e->current->points[e->dragpoint].pos); - gtk_spin_button_set_value(e->spin_value, e->current->points[e->dragpoint].val); - envelope_box_block_loop_spins(e, FALSE); + gui_block_signals(e->objs, e->sig_tags, TRUE); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_pos), e->dragpoint); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_offset), e->current->points[e->dragpoint].pos); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_value), e->current->points[e->dragpoint].val); + gui_block_signals(e->objs, e->sig_tags, FALSE); + + g_object_set(G_OBJECT(e->cur_point), "fill-color", POINT_NORMAL, NULL); + e->prev_current = e->dragpoint; + e->cur_point = point; } static void -envelope_box_stop_point_dragging (EnvelopeBox *e, - GdkEvent *event) +envelope_box_stop_point_dragging(EnvelopeBox* e, + GdkEventButton* event) { - if(e->dragpoint == -1) - return; + gint dragx = 0, dragy = 0; + gdouble dx = 0.0, dy = 0.0, zoom = e->zoomfactor_base * e->zoomfactor_mult; + + if (e->dragpoint == -1) + return; - gnome_canvas_item_ungrab(e->points[e->dragpoint], event->button.time); + goo_canvas_pointer_ungrab(e->canvas, e->points[e->dragpoint], event->time); /* Shrink scrolling region horizontally, if necessary */ - if(e->dragpoint == e->current->num_points - 1 && e->current->points[e->dragpoint].pos < e->canvas_max_x) { - envelope_box_canvas_set_max_x(e, e->current->points[e->dragpoint].pos); + if (e->dragpoint == e->current->num_points - 1 && e->current->points[e->dragpoint].pos < e->canvas_max_x) { + envelope_box_canvas_set_max_x(e, e->current->points[e->dragpoint].pos); } /* If new location is out of sight, jump there */ - if(envelope_box_canvas_point_out_of_sight(e, e->current->points[e->dragpoint].pos)) { - int dx = e->current->points[e->dragpoint].pos - e->dragging_item_from_x; - int dy = e->current->points[e->dragpoint].val - e->dragging_item_from_y; - double zoom = e->zoomfactor_base * e->zoomfactor_mult; - gnome_canvas_scroll_to(e->canvas, - e->dragging_canvas_from_x + dx * zoom, - e->dragging_canvas_from_y - dy * zoom); + envelope_box_canvas_point_out_of_sight(e, e->current->points[e->dragpoint], &dragx, &dragy); + if (dragx < 0) + dx = e->current->points[e->dragpoint].pos - 10.0 / zoom; + else if (dragx > 0) + dx = e->current->points[e->dragpoint].pos - (GTK_WIDGET(e->canvas)->allocation.width - 10.0) / zoom; + else if (dragy) + dx = gtk_adjustment_get_value(e->hadj) / zoom - 22.0; + + if (dragy < 0) + dy = 64.0 - e->current->points[e->dragpoint].val - (GTK_WIDGET(e->canvas)->allocation.height - 10.0) / zoom; + else if (dragy > 0) + dy = 64.0 - e->current->points[e->dragpoint].val - 10.0 / zoom; + else if (dragx) + dy = gtk_adjustment_get_value(e->vadj) / zoom - 4.0; + + if (dragx || dragy) + goo_canvas_scroll_to(e->canvas, dx, dy); +} + +static gboolean +scrolled_window_press(GtkWidget* widget, GdkEventButton* event, gpointer data) +{ + GdkCursor* cursor; + EnvelopeBox* e = ENVELOPE_BOX(data); + + if (event->button == 2) { + /* Middle button */ + if (event->state & GDK_SHIFT_MASK) { + /* Zoom in/out */ + cursor = gdk_cursor_new(GDK_SIZING); + goo_canvas_pointer_grab(e->canvas, e->group, + GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, + cursor, + event->time); + gdk_cursor_unref(cursor); + + e->zooming_canvas = TRUE; + e->dragfromy = event->y - gtk_adjustment_get_value(e->vadj); + e->zooming_canvas_from_val = e->zoomfactor_mult; + + return TRUE; + } else { + /* Drag canvas */ + cursor = gdk_cursor_new(GDK_FLEUR); + goo_canvas_pointer_grab(e->canvas, e->group, + GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, + cursor, + event->time); + gdk_cursor_unref(cursor); + + e->dragging_canvas = TRUE; + e->dragfromx = event->x; + e->dragfromy = event->y; + + return TRUE; + } + } + + return FALSE; +} + +static gboolean +scrolled_window_release(GtkWidget* widget, GdkEventButton* event, gpointer data) +{ + EnvelopeBox* e = ENVELOPE_BOX(data); + + if (event->button == 2) { + goo_canvas_pointer_ungrab(e->canvas, e->group, event->time); + e->dragging_canvas = FALSE; + e->zooming_canvas = FALSE; + return TRUE; + } + + return FALSE; +} + +static gboolean +scrolled_window_motion(GtkScrolledWindow* widget, GdkEventMotion* event, gpointer data) +{ + EnvelopeBox* e = ENVELOPE_BOX(data); + gdouble lower, upper, new, step; + + if (e->dragging_canvas) { + lower = gtk_adjustment_get_lower(e->hadj); + upper = gtk_adjustment_get_upper(e->hadj) - gtk_adjustment_get_page_size(e->hadj); + step = event->x - e->dragfromx; + new = gtk_adjustment_get_value(e->hadj) - step; + + e->dragfromx = event->x - step; + if (new < lower) + new = lower; + if (new > upper) + new = upper; + + gtk_adjustment_set_value(e->hadj, new); + + lower = gtk_adjustment_get_lower(e->vadj); + upper = gtk_adjustment_get_upper(e->vadj) - gtk_adjustment_get_page_size(e->vadj); + step = event->y - e->dragfromy; + new = gtk_adjustment_get_value(e->vadj) - step; + + e->dragfromy = event->y - step; + if (new < lower) + new = lower; + if (new > upper) + new = upper; + + gtk_adjustment_set_value(e->vadj, new); + + return TRUE; + } else if (e->zooming_canvas) { + gdouble dy = event->y - e->dragfromy - gtk_adjustment_get_value(e->vadj); + + e->zoomfactor_mult = e->zooming_canvas_from_val - (dy / 20); + if (e->zoomfactor_mult < 1.0) { + e->zoomfactor_mult = 1.0; + } + goo_canvas_set_scale(e->canvas, e->zoomfactor_base * e->zoomfactor_mult); + return TRUE; } + + return FALSE; +} + +static gboolean +envelope_box_canvas_event_button_press(GooCanvas* canvas, + GdkEventButton* event, + gpointer data) +{ + if (event->button == 1) { + EnvelopeBox* e = ENVELOPE_BOX(data); + gdouble x, y; + GooCanvasItem* item; + + gint i, insert_after = -1, xint; + + /* Find out where to insert new point */ + x = event->x; + y = event->y; + goo_canvas_convert_from_pixels(canvas, &x, &y); + xint = lrint(x); + item = goo_canvas_get_item_at(canvas, x, y, FALSE); + /* GooCanvas probably has a bug here. The event is send to canvas first, then + to the item. */ + for (i = 0, insert_after = -1; i < e->current->num_points && e->points[i]; i++) { + if (e->points[i] == item) { + /* An already existing point has been selected. Will + be handled by envelope_box_point_event(). */ + return FALSE; + } + if (e->current->points[i].pos < xint) { + insert_after = i; + } + } + + if (insert_after != -1 && y >= 0 && y < 64) { + /* Insert new point and start dragging */ + envelope_box_insert_point(e, insert_after + 1, xint, 64 - y); + envelope_box_initialize_point_dragging(e, NULL, event, e->points[insert_after + 1]); + return TRUE; + } + } + return FALSE; } -static gint -envelope_box_canvas_event (GnomeCanvas *canvas, - GdkEvent *event, - gpointer data) +static gboolean +envelope_box_canvas_event_button_release(GooCanvas* canvas, + GdkEventButton* event, + gpointer data) { - EnvelopeBox *e = ENVELOPE_BOX(data); + EnvelopeBox* e = ENVELOPE_BOX(data); double x, y; - GnomeCanvasItem *item; - GdkCursor *cursor; + GooCanvasItem* item; - int i, insert_after = -1; + int i; - switch (event->type) { - case GDK_BUTTON_PRESS: - if(event->button.button == 2) { - /* Middle button */ - if(event->button.state & GDK_SHIFT_MASK) { - /* Zoom in/out */ - cursor = gdk_cursor_new (GDK_SIZING); - gnome_canvas_item_grab (GNOME_CANVAS_ITEM(e->group), - GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, - cursor, - event->button.time); - gdk_cursor_destroy (cursor); - - e->zooming_canvas = TRUE; - e->dragfromy = event->button.y; - e->zooming_canvas_from_val = e->zoomfactor_mult; - } else { - /* Drag canvas */ - cursor = gdk_cursor_new (GDK_FLEUR); - gnome_canvas_item_grab (GNOME_CANVAS_ITEM(e->group), - GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, - cursor, - event->button.time); - gdk_cursor_destroy (cursor); - - e->dragging_canvas = TRUE; - e->dragfromx = event->button.x; - e->dragfromy = event->button.y; - gnome_canvas_get_scroll_offsets(e->canvas, &e->dragging_canvas_from_x, &e->dragging_canvas_from_y); - } - return TRUE; - } - - if(event->button.button == 1) { - /* Find out where to insert new point */ - gnome_canvas_window_to_world(canvas, event->button.x, event->button.y, &x, &y); - item = gnome_canvas_get_item_at(canvas, x, y); - - for(i = 0, insert_after = -1; i < e->current->num_points && e->points[i]; i++) { - if(e->points[i] == item) { - /* An already existing point has been selected. Will + if (event->button == 1) { + x = event->x; + y = event->y; + goo_canvas_convert_from_pixels(canvas, &x, &y); + item = goo_canvas_get_item_at(canvas, x, y, FALSE); + + for (i = 0; i < e->current->num_points && e->points[i]; i++) + if (e->points[i] == item) { + /* An already existing point has been selected. Will be handled by envelope_box_point_event(). */ - return FALSE; - } - if(e->current->points[i].pos < (int)x) { - insert_after = i; - } - } - - if(insert_after != -1 && y >= 0 && y < 64) { - /* Insert new point and start dragging */ - envelope_box_insert_point(e, insert_after + 1, (int)x, 64 - y); - envelope_box_initialize_point_dragging(e, NULL, event, e->points[insert_after + 1]); - return TRUE; - } - } - break; - - case GDK_BUTTON_RELEASE: - if(event->button.button == 2) { - gnome_canvas_item_ungrab (GNOME_CANVAS_ITEM(e->group), event->button.time); - e->dragging_canvas = FALSE; - e->zooming_canvas = FALSE; - return TRUE; - } else if(event->button.button == 1) { - envelope_box_stop_point_dragging(e, event); - } - break; - - case GDK_MOTION_NOTIFY: - if(e->dragging_canvas) { - int dx = event->motion.x - e->dragfromx; - int dy = event->motion.y - e->dragfromy; - gnome_canvas_scroll_to(e->canvas, (e->dragging_canvas_from_x - dx), e->dragging_canvas_from_y - dy); - } else if(e->zooming_canvas) { - int dy = event->motion.y - e->dragfromy; - e->zoomfactor_mult = e->zooming_canvas_from_val + (-(double)dy / 20); - if(e->zoomfactor_mult < 1.0) { - e->zoomfactor_mult = 1.0; - } - gnome_canvas_set_pixels_per_unit(e->canvas, e->zoomfactor_base * e->zoomfactor_mult); - } - break; + return FALSE; + } + envelope_box_stop_point_dragging(e, event); + return TRUE; + } + return FALSE; +} - default: - break; +void zoom_in(gpointer data) +{ + EnvelopeBox* e = ENVELOPE_BOX(data); + + if (e->zoomfactor_mult < 20.0) { + e->zoomfactor_mult *= 1.414; + goo_canvas_set_scale(e->canvas, e->zoomfactor_base * e->zoomfactor_mult); + } +} + +void zoom_out(gpointer data) +{ + EnvelopeBox* e = ENVELOPE_BOX(data); + + if (e->zoomfactor_mult > 1.0) { + e->zoomfactor_mult /= 1.414; + if (e->zoomfactor_mult < 1.0) + e->zoomfactor_mult = 1.0; + goo_canvas_set_scale(e->canvas, e->zoomfactor_base * e->zoomfactor_mult); + } +} + +static gboolean +envelope_box_canvas_event_scroll(GooCanvas* canvas, + GdkEventScroll* event, + EnvelopeBox* e) +{ + if (event->direction == GDK_SCROLL_UP) { + if (event->state & GDK_SHIFT_MASK) { /* Horizontal scrolling */ + gtk_adjustment_set_value(e->hadj, gtk_adjustment_get_value(e->hadj) - gtk_adjustment_get_step_increment(e->hadj)); + return TRUE; + } else if (event->state & GDK_CONTROL_MASK) { /* Zooming */ + zoom_in(e); + return TRUE; + } + } else if (event->direction == GDK_SCROLL_DOWN) { + if (event->state & GDK_SHIFT_MASK) { /* Horizontal scrolling */ + gdouble value = gtk_adjustment_get_value(e->hadj) + gtk_adjustment_get_step_increment(e->hadj); + gdouble maxval = gtk_adjustment_get_upper(e->hadj) - gtk_adjustment_get_page_size(e->hadj); + + if (value > maxval) + value = maxval; + gtk_adjustment_set_value(e->hadj, value); + + return TRUE; + } else if (event->state & GDK_CONTROL_MASK) { /* Zooming */ + zoom_out(e); + return TRUE; + } } return FALSE; } +#endif -static gint -envelope_box_point_event (GnomeCanvasItem *item, - GdkEvent *event, - gpointer data) -{ - EnvelopeBox *e = ENVELOPE_BOX(data); - - switch (event->type) { - case GDK_ENTER_NOTIFY: - gnome_canvas_item_set(item, "fill_color", "#ffff00", NULL); - break; - - case GDK_LEAVE_NOTIFY: - if(!(event->crossing.state & GDK_BUTTON1_MASK)) { - gnome_canvas_item_set(item, "fill_color", "#ff0000", NULL); - } - break; - - case GDK_BUTTON_PRESS: - if(event->button.button == 1) { - envelope_box_initialize_point_dragging(e, item, event, item); - return TRUE; - } - break; - - case GDK_BUTTON_RELEASE: - if(event->button.button == 1) { - envelope_box_stop_point_dragging(e, event); - return TRUE; - } - break; - - case GDK_MOTION_NOTIFY: - if(e->dragpoint != -1 && event->motion.state & GDK_BUTTON1_MASK) { - /* Snap movement to integer grid */ - int dx, dy; - - dx = event->motion.x - e->dragfromx; - dy = e->dragfromy - event->motion.y; - - if(dx || dy) { - envelope_box_clip_point_movement(e, e->dragpoint, &dx, &dy); - - envelope_box_move_point(e, e->dragpoint, dx, dy); - - e->dragfromx += dx; - e->dragfromy -= dy; - - /* Expand scrolling region horizontally, if necessary */ - if(e->dragpoint == e->current->num_points - 1 && e->current->points[e->dragpoint].pos > e->canvas_max_x) { - envelope_box_canvas_set_max_x(e, e->current->points[e->dragpoint].pos); - } - } - } - break; +static void +set_num_points(EnvelopeBox* e, const gint newval) +{ + gtk_spin_button_set_range(GTK_SPIN_BUTTON(e->spin_pos), 0, newval - 1); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(e->spin_sustain), 0, newval - 1); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(e->spin_loop_start), 0, newval - 1); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(e->spin_loop_end), 0, newval - 1); +} + +#ifdef USE_CANVAS +static void update_sustain_line(EnvelopeBox* e) +{ + if (e->current->flags & EF_SUSTAIN && !e->sustain_line) + e->sustain_line = loop_sustain_new(e, e->current->points[e->current->sustain_point].pos, TRUE); + if (!(e->current->flags & EF_SUSTAIN) && e->sustain_line) { + goo_canvas_item_remove(e->sustain_line); + e->sustain_line = NULL; + } +} - default: - break; +static void update_loop_lines(EnvelopeBox* e) +{ + if (e->current->flags & EF_LOOP) { + if (!e->loop_start_line) + e->loop_start_line = loop_sustain_new(e, e->current->points[e->current->loop_start].pos, FALSE); + if (!e->loop_end_line) + e->loop_end_line = loop_sustain_new(e, e->current->points[e->current->loop_end].pos, FALSE); + } + if (!(e->current->flags & EF_LOOP)) { + if (e->loop_start_line) { + goo_canvas_item_remove(e->loop_start_line); + e->loop_start_line = NULL; + } + if (e->loop_end_line) { + goo_canvas_item_remove(e->loop_end_line); + e->loop_end_line = NULL; + } } - - return FALSE; } #endif -void envelope_box_set_envelope(EnvelopeBox *e, STEnvelope *env) +void envelope_box_set_envelope(EnvelopeBox* e, STEnvelope* env) { int i; - int m = xm_get_modified(); g_return_if_fail(e != NULL); - if(env == NULL) { - env = &dummy_envelope; + if (env == NULL) { + env = &dummy_envelope; } - e->current = env; // Some preliminary Paranoia... g_assert(env->num_points >= 1 && env->num_points <= ST_MAX_ENVELOPE_POINTS); - for(i = 0; i < env->num_points; i++) { - int h = env->points[i].val; - g_assert(h >= 0 && h <= 64); + for (i = 0; i < env->num_points; i++) { + int h = env->points[i].val; + g_assert(h >= 0 && h <= 64); } // Update GUI - gtk_spin_button_set_value(e->spin_length, env->num_points); - spin_length_changed(e->spin_length, e); - envelope_box_block_loop_spins(e, TRUE); - gtk_spin_button_set_value(e->spin_pos, 0); - gtk_spin_button_set_value(e->spin_offset, env->points[0].pos); - gtk_spin_button_set_value(e->spin_value, env->points[0].val); - gtk_spin_button_set_value(e->spin_sustain, env->sustain_point); - gtk_spin_button_set_value(e->spin_loop_start, env->loop_start); - gtk_spin_button_set_value(e->spin_loop_end, env->loop_end); - envelope_box_block_loop_spins(e, FALSE); - - gtk_toggle_button_set_state(e->enable, env->flags & EF_ON); - gtk_toggle_button_set_state(e->sustain, env->flags & EF_SUSTAIN); - gtk_toggle_button_set_state(e->loop, env->flags & EF_LOOP); +#ifdef USE_CANVAS + /* Creation and removing lines are handled by toggle button callbacks */ + if (env->flags & EF_SUSTAIN && e->sustain_line) + loop_sustain_move(e->sustain_line, env->points[env->sustain_point].pos); + + if (env->flags & EF_LOOP && e->loop_start_line) { + loop_sustain_move(e->loop_start_line, env->points[env->loop_start].pos); + loop_sustain_move(e->loop_end_line, env->points[env->loop_end].pos); + } -#ifdef USE_GNOME // Update Canvas - for(i = 0; i < (sizeof(e->points) / sizeof(e->points[0])) && e->points[i]; i++) { - gtk_object_destroy(GTK_OBJECT(e->points[i])); - e->points[i] = NULL; - } - for(i = 0; i < (sizeof(e->lines) / sizeof(e->lines[0])) && e->lines[i]; i++) { - gtk_object_destroy(GTK_OBJECT(e->lines[i])); - e->lines[i] = NULL; + for (i = 0; i < ARRAY_SIZE(e->points) && e->points[i]; i++) { + goo_canvas_item_remove(e->points[i]); + e->points[i] = NULL; + } + for (i = 0; i < ARRAY_SIZE(e->lines) && e->lines[i]; i++) { + goo_canvas_item_remove(e->lines[i]); + e->lines[i] = NULL; } - for(i = 0; i < env->num_points; i++) { - envelope_box_canvas_add_point(e, i); + for (i = 0; i < env->num_points; i++) { + envelope_box_canvas_add_point(e, i, !i); } envelope_box_canvas_set_max_x(e, env->points[env->num_points - 1].pos); + e->prev_current = 0; + e->cur_point = e->points[0]; +#endif + + gui_block_signals(e->objs, e->sig_tags, TRUE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(e->enable), env->flags & EF_ON); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(e->sustain), env->flags & EF_SUSTAIN); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(e->loop), env->flags & EF_LOOP); + +#ifdef USE_CANVAS + update_sustain_line(e); + update_loop_lines(e); #endif - xm_set_modified(m); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_length), env->num_points); + + set_num_points(e, env->num_points); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_pos), 0); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_offset), env->points[0].pos); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_value), env->points[0].val); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_sustain), env->sustain_point); + + gtk_spin_button_set_range(GTK_SPIN_BUTTON(e->spin_loop_start), 0, e->current->loop_end); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(e->spin_loop_end), e->current->loop_start, e->current->num_points - 1); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_loop_start), env->loop_start); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_loop_end), env->loop_end); + gui_block_signals(e->objs, e->sig_tags, FALSE); } -static void handle_toggle_button(GtkToggleButton *t, EnvelopeBox *e) +static void handle_enable_button(GtkToggleButton* t, EnvelopeBox* e) { - int flag = 0; - - if(t == e->enable) - flag = EF_ON; - else if(t == e->sustain) - flag = EF_SUSTAIN; - else if(t == e->loop) - flag = EF_LOOP; + const gboolean is_active = gtk_toggle_button_get_active(t); - g_return_if_fail(flag != 0); + history_log_toggle_button(t, + _(is_active ? N_("Envelope enabling") : N_("Envelope disabling")), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS, + e->current->flags & EF_ON); - if(t->active) - e->current->flags |= flag; + if (is_active) + e->current->flags |= EF_ON; else - e->current->flags &= ~flag; + e->current->flags &= ~EF_ON; +} + +static void handle_sustain_button(GtkToggleButton* t, EnvelopeBox* e) +{ + const gboolean is_active = gtk_toggle_button_get_active(t); - xm_set_modified(1); + history_log_toggle_button(t, + _(is_active ? N_("Sustain enabling") : N_("Sustain disabling")), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS, + e->current->flags & EF_SUSTAIN); + + if (is_active) + e->current->flags |= EF_SUSTAIN; + else + e->current->flags &= ~EF_SUSTAIN; +#ifdef USE_CANVAS + update_sustain_line(e); +#endif } -static void handle_spin_button(GtkSpinButton *s, EnvelopeBox *e) +static void handle_loop_button(GtkToggleButton* t, EnvelopeBox* e) { - unsigned char *p = NULL; + const gboolean is_active = gtk_toggle_button_get_active(t); - if(s == e->spin_sustain) - p = &e->current->sustain_point; - else if(s == e->spin_loop_start) - p = &e->current->loop_start; - else if(s == e->spin_loop_end) - p = &e->current->loop_end; + history_log_toggle_button(t, + _(is_active ? N_("Envelope loop enabling") : N_("Envelope loop disabling")), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS, + e->current->flags & EF_LOOP); + + if (is_active) + e->current->flags |= EF_LOOP; + else + e->current->flags &= ~EF_LOOP; +#ifdef USE_CANVAS + update_loop_lines(e); +#endif +} - g_return_if_fail(p != NULL); +static void handle_spin_sustain(GtkSpinButton* s, EnvelopeBox* e) +{ + history_log_spin_button(s, + _("Sustain point changing"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS, + e->current->sustain_point); + + e->current->sustain_point = gtk_spin_button_get_value_as_int(s); +#ifdef USE_CANVAS + if (e->current->flags & EF_SUSTAIN) + loop_sustain_move(e->sustain_line, e->current->points[e->current->sustain_point].pos); +#endif +} - *p = gtk_spin_button_get_value_as_int(s); +static void handle_spin_loop_start(GtkSpinButton* s, EnvelopeBox* e) +{ + history_log_spin_button(s, + _("Envelope loop start changing"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS, + e->current->loop_start); + + e->current->loop_start = gtk_spin_button_get_value_as_int(s); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(e->spin_loop_end), e->current->loop_start, e->current->num_points - 1); +#ifdef USE_CANVAS + if (e->current->flags & EF_LOOP) + loop_sustain_move(e->loop_start_line, e->current->points[e->current->loop_start].pos); +#endif +} - xm_set_modified(1); +static void handle_spin_loop_end(GtkSpinButton* s, EnvelopeBox* e) +{ + history_log_spin_button(s, + _("Envelope loop end changing"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS, + e->current->loop_end); + + e->current->loop_end = gtk_spin_button_get_value_as_int(s); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(e->spin_loop_start), 0, e->current->loop_end); +#ifdef USE_CANVAS + if (e->current->flags & EF_LOOP) + loop_sustain_move(e->loop_end_line, e->current->points[e->current->loop_end].pos); +#endif } static void -spin_length_changed (GtkSpinButton *spin, - EnvelopeBox *e) +spin_length_changed(GtkSpinButton* spin, + EnvelopeBox* e) { int newval = gtk_spin_button_get_value_as_int(spin); - while(newval < e->current->num_points) { - envelope_box_delete_point(e, e->current->num_points - 1); - } +#ifdef USE_CANVAS + int i; - while(newval > e->current->num_points) { - envelope_box_insert_point(e, e->current->num_points, - e->current->points[e->current->num_points - 1].pos + 10, - e->current->points[e->current->num_points - 1].val); + if (newval < e->current->num_points) + for (i = e->current->num_points - 1; i >= newval; i--) { + goo_canvas_item_remove(e->points[i]); + e->points[i] = NULL; + goo_canvas_item_remove(e->lines[i - 1]); + e->lines[i - 1] = NULL; + } + + if (newval > e->current->num_points) + for (i = e->current->num_points; i < newval; i++) { + if (e->current->points[i].pos <= e->current->points[i - 1].pos) + e->current->points[i].pos = e->current->points[i - 1].pos + 10; + envelope_box_canvas_add_point(e, i, FALSE); + } +#endif + + /* Length changing can affect other controls (loop, sustain), so it's simplier to + log the whole envelope */ + if (!history_test_collate(HISTORY_ACTION_POINTER, + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | HISTORY_EXTRA_FLAGS(256), e)) { + STEnvelope* arg = g_new(STEnvelope, 1); + + memcpy(arg, e->current, sizeof(STEnvelope)); + history_log_action(HISTORY_ACTION_POINTER, _("Envelope length changing"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | HISTORY_EXTRA_FLAGS(256), + envelope_undo, e, sizeof(STEnvelope), arg); } - envelope_box_block_loop_spins(e, TRUE); - gui_update_spin_adjustment(e->spin_pos, 0, newval - 1); - gui_update_spin_adjustment(e->spin_sustain, 0, newval - 1); - gui_update_spin_adjustment(e->spin_loop_start, 0, newval - 1); - gui_update_spin_adjustment(e->spin_loop_end, 0, newval - 1); - envelope_box_block_loop_spins(e, FALSE); + e->current->num_points = newval; +#ifdef USE_CANVAS + envelope_box_canvas_set_max_x(e, e->current->points[e->current->num_points - 1].pos); +#endif + /* We log overall changes of the envelope rather + than changes of the particular controls */ + history_skip = TRUE; + set_num_points(e, newval); + history_skip = FALSE; } static void -spin_pos_changed (GtkSpinButton *spin, - EnvelopeBox *e) +spin_pos_changed(GtkSpinButton* spin, + EnvelopeBox* e) { - int m = xm_get_modified(); - int p = gtk_spin_button_get_value_as_int(e->spin_pos); + int p = gtk_spin_button_get_value_as_int(spin); g_assert(p >= 0 && p < e->current->num_points); - envelope_box_block_loop_spins(e, TRUE); - gtk_spin_button_set_value(e->spin_offset, e->current->points[p].pos); - gtk_spin_button_set_value(e->spin_value, e->current->points[p].val); - envelope_box_block_loop_spins(e, FALSE); - xm_set_modified(m); + gui_block_signals(e->objs, e->sig_tags, TRUE); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_offset), e->current->points[p].pos); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(e->spin_value), e->current->points[p].val); + gui_block_signals(e->objs, e->sig_tags, FALSE); + +#ifdef USE_CANVAS + if (e->prev_current < e->current->num_points) + g_object_set(G_OBJECT(e->cur_point), "fill-color", POINT_NORMAL, NULL); + e->prev_current = p; + e->cur_point = e->points[p]; + g_object_set(G_OBJECT(e->cur_point), "fill-color", POINT_CURRENT, NULL); +#endif } static void -spin_offset_changed (GtkSpinButton *spin, - EnvelopeBox *e) +spin_offset_changed(GtkSpinButton* spin, + EnvelopeBox* e) { - int p = gtk_spin_button_get_value_as_int(e->spin_pos); + int p = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(e->spin_pos)); int dx; g_assert(p >= 0 && p < e->current->num_points); @@ -801,19 +1261,19 @@ envelope_box_clip_point_movement(e, p, &dx, NULL); envelope_box_move_point(e, p, dx, 0); -#ifdef USE_GNOME +#ifdef USE_CANVAS // Horizontal adjustment of scrolling region - if(p == e->current->num_points - 1) { - envelope_box_canvas_set_max_x(e, e->current->points[p].pos); + if (p == e->current->num_points - 1) { + envelope_box_canvas_set_max_x(e, e->current->points[p].pos); } #endif } static void -spin_value_changed (GtkSpinButton *spin, - EnvelopeBox *e) +spin_value_changed(GtkSpinButton* spin, + EnvelopeBox* e) { - int p = gtk_spin_button_get_value_as_int(e->spin_pos); + int p = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(e->spin_pos)); int dy; g_assert(p >= 0 && p < e->current->num_points); @@ -825,46 +1285,64 @@ } static void -insert_clicked (GtkWidget *w, - EnvelopeBox *e) +insert_clicked(GtkWidget* w, + EnvelopeBox* e) { int pos = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(e->spin_pos)); - envelope_box_insert_point(e, pos, e->current->points[pos].pos - 1, e->current->points[pos].val); + /* We cannot insert point before the beginning */ + if (!pos) + return; + + envelope_box_insert_point(e, pos, (e->current->points[pos - 1].pos + e->current->points[pos].pos) >> 1, + (e->current->points[pos - 1].val + e->current->points[pos].val) >> 1); } static void -delete_clicked (GtkWidget *w, - EnvelopeBox *e) +delete_clicked(GtkWidget* w, + EnvelopeBox* e) { envelope_box_delete_point(e, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(e->spin_pos))); } -GtkWidget* envelope_box_new(const gchar *label) +#ifdef USE_CANVAS +void zoom_normal(gpointer data) +{ + EnvelopeBox* e = ENVELOPE_BOX(data); + + e->zoomfactor_mult = 1.0; + goo_canvas_set_scale(e->canvas, e->zoomfactor_base * e->zoomfactor_mult); +} +#endif + +GtkWidget* envelope_box_new(const gchar* label) { - EnvelopeBox *e; - GtkWidget *box2, *thing, *box3, *box4, *frame; -#ifdef USE_GNOME - GtkWidget *table, *canvas; + EnvelopeBox* e; + GtkWidget *box2, *thing, *box3, *box4; +#ifdef USE_CANVAS + GtkWidget *canvas, *menu; + GtkBuilder* builder; + + struct menu_callback cb[] = { + { "env_zoom_in", zoom_in, NULL }, + { "env_zoom_out", zoom_out, NULL }, + { "env_normal", zoom_normal, NULL }, + { NULL } + }; +#else + GtkWidget* frame; #endif - e = gtk_type_new(envelope_box_get_type()); + e = g_object_new(envelope_box_get_type(), NULL); GTK_BOX(e)->spacing = 2; GTK_BOX(e)->homogeneous = FALSE; - box2 = gtk_hbox_new(FALSE, 2); - gtk_box_pack_start(GTK_BOX(e), box2, FALSE, TRUE, 0); - gtk_widget_show(box2); - - thing = gtk_check_button_new_with_label(label); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), 0); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + e->enable = thing = gtk_check_button_new_with_label(label); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), 0); + gtk_box_pack_start(GTK_BOX(e), thing, FALSE, FALSE, 0); gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(handle_toggle_button), e); - e->enable = GTK_TOGGLE_BUTTON(thing); - - add_empty_hbox(box2); + e->sig_tags[7] = g_signal_connect(thing, "toggled", + G_CALLBACK(handle_enable_button), e); box2 = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(e), box2, FALSE, TRUE, 0); @@ -875,10 +1353,14 @@ gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0); gtk_widget_show(box3); - gui_put_labelled_spin_button(box3, _("Length"), 1, 12, (GtkWidget**)&e->spin_length, spin_length_changed, e); - gui_put_labelled_spin_button(box3, _("Current"), 0, 11, (GtkWidget**)&e->spin_pos, spin_pos_changed, e); - gui_put_labelled_spin_button(box3, _("Offset"), 0, 65535, (GtkWidget**)&e->spin_offset, spin_offset_changed, e); - gui_put_labelled_spin_button(box3, _("Value"), 0, 64, (GtkWidget**)&e->spin_value, spin_value_changed, e); + e->sig_tags[0] = gui_put_labelled_spin_button(box3, + _("Length"), 1, 12, &e->spin_length, spin_length_changed, e, TRUE); + e->sig_tags[1] = gui_put_labelled_spin_button(box3, + _("Current"), 0, 11, &e->spin_pos, spin_pos_changed, e, TRUE); + e->sig_tags[2] = gui_put_labelled_spin_button(box3, + _("Offset"), 0, 65535, &e->spin_offset, spin_offset_changed, e, TRUE); + e->sig_tags[3] = gui_put_labelled_spin_button(box3, + _("Value"), 0, 64, &e->spin_value, spin_value_changed, e, TRUE); box4 = gtk_hbox_new(TRUE, 4); gtk_box_pack_start(GTK_BOX(box3), box4, FALSE, TRUE, 0); @@ -887,106 +1369,88 @@ thing = gtk_button_new_with_label(_("Insert")); gtk_box_pack_start(GTK_BOX(box4), thing, TRUE, TRUE, 0); gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(insert_clicked), e); - + g_signal_connect(thing, "clicked", + G_CALLBACK(insert_clicked), e); + thing = gtk_button_new_with_label(_("Delete")); gtk_box_pack_start(GTK_BOX(box4), thing, TRUE, TRUE, 0); gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(delete_clicked), e); + g_signal_connect(thing, "clicked", + G_CALLBACK(delete_clicked), e); thing = gtk_vseparator_new(); gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); gtk_widget_show(thing); // Here comes the graphical stuff -#ifdef USE_GNOME -// gnome-libs-1.0 explicitly states that AA canvas is buggy -// gnome-libs-1.2 doesn't change anything -// gnome-libs-1.4 doesn't even work (program hangs in infinite loop) -// if(gui_settings.gui_use_aa_canvas) { // gnome-libs-1.0.12 says aa canvas is buggy -// gtk_widget_push_visual (gdk_rgb_get_visual ()); -// gtk_widget_push_colormap (gdk_rgb_get_cmap ()); -// canvas = gnome_canvas_new_aa (); -// } else { - gtk_widget_push_visual (gdk_imlib_get_visual ()); - gtk_widget_push_colormap (gdk_imlib_get_colormap ()); - canvas = gnome_canvas_new (); -// } - e->canvas = GNOME_CANVAS(canvas); - gtk_widget_pop_colormap (); - gtk_widget_pop_visual (); +#ifdef USE_CANVAS + canvas = goo_canvas_new(); + e->canvas = GOO_CANVAS(canvas); + g_object_set(G_OBJECT(canvas), "background-color", "#ffffff", NULL); /* GooCanvas allows to set background simply! */ memset(e->points, 0, sizeof(e->points)); memset(e->lines, 0, sizeof(e->lines)); + e->sustain_line = e->loop_start_line = e->loop_end_line = NULL; e->zoomfactor_base = 0.0; e->zoomfactor_mult = 1.0; e->dragpoint = -1; + e->prev_current = 0; envelope_box_canvas_paint_grid(e); - e->group = GNOME_CANVAS_GROUP (gnome_canvas_item_new (gnome_canvas_root(e->canvas), - gnome_canvas_group_get_type (), - "x", 0.0, - "y", 0.0, - NULL)); - - gtk_signal_connect_after (GTK_OBJECT (canvas), "event", - (GtkSignalFunc) envelope_box_canvas_event, - e); - - gtk_signal_connect_after(GTK_OBJECT(canvas), "size_allocate", - GTK_SIGNAL_FUNC(envelope_box_canvas_size_allocate), e); - - table = gtk_table_new (2, 2, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 4); - gtk_box_pack_start (GTK_BOX (box2), table, TRUE, TRUE, 0); - gtk_widget_show (table); - - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_table_attach (GTK_TABLE (table), frame, - 0, 1, 0, 1, - GTK_EXPAND | GTK_FILL | GTK_SHRINK, - GTK_EXPAND | GTK_FILL | GTK_SHRINK, - 0, 0); - gtk_widget_show (frame); - - gtk_widget_set_usize (canvas, 30, 64); - gtk_container_add (GTK_CONTAINER (frame), canvas); - gtk_widget_show (canvas); - - thing = gtk_hscrollbar_new (GTK_LAYOUT (canvas)->hadjustment); - gtk_table_attach (GTK_TABLE (table), thing, - 0, 1, 1, 2, - GTK_EXPAND | GTK_FILL | GTK_SHRINK, - GTK_FILL, - 0, 0); - gtk_widget_show (thing); - - thing = gtk_vscrollbar_new (GTK_LAYOUT (canvas)->vadjustment); - gtk_table_attach (GTK_TABLE (table), thing, - 1, 2, 0, 1, - GTK_FILL, - GTK_EXPAND | GTK_FILL | GTK_SHRINK, - 0, 0); - gtk_widget_show (thing); - -#else /* !USE_GNOME */ - - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_widget_show (frame); + e->group = goo_canvas_group_new(goo_canvas_get_root_item(e->canvas), + "x", 0.0, + "y", 0.0, + NULL); + + g_signal_connect_after(canvas, "button-press-event", + G_CALLBACK(envelope_box_canvas_event_button_press), + e); + g_signal_connect_after(canvas, "button-release-event", + G_CALLBACK(envelope_box_canvas_event_button_release), + e); + g_signal_connect(canvas, "scroll-event", + G_CALLBACK(envelope_box_canvas_event_scroll), + e); + + g_signal_connect_after(canvas, "size_allocate", + G_CALLBACK(envelope_box_canvas_size_allocate), e); + + thing = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(thing), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(thing), GTK_SHADOW_ETCHED_IN); + g_signal_connect(thing, "button-press-event", G_CALLBACK(scrolled_window_press), e); + g_signal_connect(thing, "button-release-event", G_CALLBACK(scrolled_window_release), e); + g_signal_connect(thing, "motion-notify-event", G_CALLBACK(scrolled_window_motion), e); + + e->hadj = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(thing)); + e->vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(thing)); + + gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); + gtk_widget_set_size_request(canvas, 30, 64); + gtk_container_add(GTK_CONTAINER(thing), canvas); + gtk_widget_show_all(thing); + + cb[0].data = cb[1].data = cb[2].data = e; +#define MENU_FILE DATADIR "/" PACKAGE "/envelope-box.xml" + builder = gui_builder_from_file(MENU_FILE, cb); + menu = gui_get_widget(builder, "env_editor_zoom_menu", MENU_FILE); + gui_popup_menu_attach(menu, thing, NULL); + g_object_unref(builder); + +#else /* !USE_CANVAS */ + + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); + gtk_widget_show(frame); - gtk_box_pack_start (GTK_BOX (box2), frame, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0); - thing = gtk_label_new(_("Graphical\nEnvelope\nEditor\nonly in\nGNOME Version")); + thing = gtk_label_new(_("Graphical\nEnvelope\nEditor\nonly with\nGooCanvas")); gtk_widget_show(thing); - gtk_container_add (GTK_CONTAINER (frame), thing); + gtk_container_add(GTK_CONTAINER(frame), thing); -#endif /* defined(USE_GNOME) */ +#endif /* defined(USE_CANVAS) */ thing = gtk_vseparator_new(); gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); @@ -997,50 +1461,39 @@ gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0); gtk_widget_show(box3); - thing = gtk_check_button_new_with_label(_("Sustain")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), 0); + e->sustain = thing = gtk_check_button_new_with_label(_("Sustain")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), 0); gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(handle_toggle_button), e); - e->sustain = GTK_TOGGLE_BUTTON(thing); + e->sig_tags[8] = g_signal_connect(thing, "toggled", + G_CALLBACK(handle_sustain_button), e); - gui_put_labelled_spin_button(box3, _("Point"), 0, 11, (GtkWidget**)&e->spin_sustain, handle_spin_button, e); + e->sig_tags[4] = gui_put_labelled_spin_button(box3, + _("Point"), 0, 11, &e->spin_sustain, handle_spin_sustain, e, TRUE); - thing = gtk_check_button_new_with_label(_("Loop")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), 0); + e->loop = thing = gtk_check_button_new_with_label(_("Loop")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), 0); gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(handle_toggle_button), e); - e->loop = GTK_TOGGLE_BUTTON(thing); + e->sig_tags[9] = g_signal_connect(thing, "toggled", + G_CALLBACK(handle_loop_button), e); - gui_put_labelled_spin_button(box3, _("Start"), 0, 11, (GtkWidget**)&e->spin_loop_start, handle_spin_button, e); - gui_put_labelled_spin_button(box3, _("End"), 0, 11, (GtkWidget**)&e->spin_loop_end, handle_spin_button, e); + e->sig_tags[5] = gui_put_labelled_spin_button(box3, + _("Start"), 0, 11, &e->spin_loop_start, handle_spin_loop_start, e, TRUE); + e->sig_tags[6] = gui_put_labelled_spin_button(box3, + _("End"), 0, 11, &e->spin_loop_end, handle_spin_loop_end, e, TRUE); return GTK_WIDGET(e); } -guint envelope_box_get_type() +static void +envelope_box_init (EnvelopeBox *self) { - static guint envelope_box_type = 0; - - if (!envelope_box_type) { - GtkTypeInfo envelope_box_info = - { - "EnvelopeBox", - sizeof(EnvelopeBox), - sizeof(EnvelopeBoxClass), - (GtkClassInitFunc) NULL, - (GtkObjectInitFunc) NULL, - (GtkArgSetFunc) NULL, - (GtkArgGetFunc) NULL, - }; - - envelope_box_type = gtk_type_unique(gtk_vbox_get_type (), &envelope_box_info); - } - - return envelope_box_type; } +static void +envelope_box_class_init(EnvelopeBoxClass* class) +{ +} +G_DEFINE_TYPE(EnvelopeBox, envelope_box, GTK_TYPE_VBOX) diff -Nru soundtracker-0.6.8/app/envelope-box.h soundtracker-1.0.2~pre2/app/envelope-box.h --- soundtracker-0.6.8/app/envelope-box.h 2001-01-03 13:24:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/envelope-box.h 2020-11-14 20:57:29.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GTK+ envelope editor box (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,65 +26,69 @@ #include -#ifdef USE_GNOME -#include +#ifdef USE_CANVAS +#include #endif #include "xm.h" -#define ENVELOPE_BOX(obj) GTK_CHECK_CAST (obj, envelope_box_get_type (), EnvelopeBox) -#define ENVELOPE_BOX_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, envelope_box_get_type (), EnvelopeBoxClass) -#define IS_ENVELOPE_BOX(obj) GTK_CHECK_TYPE (obj, envelope_box_get_type ()) +#define ENVELOPE_BOX(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, envelope_box_get_type(), EnvelopeBox)) +#define ENVELOPE_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST(klass, envelope_box_get_type(), EnvelopeBoxClass)) +#define IS_ENVELOPE_BOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, envelope_box_get_type())) + +typedef struct _EnvelopeBox EnvelopeBox; +typedef struct _EnvelopeBoxClass EnvelopeBoxClass; + +#define NUM_OBJS 10 /* Number of spin buttons */ + +#define spin_length objs[0] +#define spin_pos objs[1] +#define spin_offset objs[2] +#define spin_value objs[3] +#define spin_sustain objs[4] +#define spin_loop_start objs[5] +#define spin_loop_end objs[6] +#define enable objs[7] +#define sustain objs[8] +#define loop objs[9] -typedef struct _EnvelopeBox EnvelopeBox; -typedef struct _EnvelopeBoxClass EnvelopeBoxClass; - -struct _EnvelopeBox -{ +struct _EnvelopeBox { GtkVBox vbox; - STEnvelope *current; + STEnvelope* current; + + GtkWidget* objs[NUM_OBJS]; + gint sig_tags[NUM_OBJS]; + +#ifdef USE_CANVAS + GooCanvas* canvas; + GooCanvasItem* group; + GooCanvasItem *points[ST_MAX_ENVELOPE_POINTS], *cur_point; + GooCanvasItem *lines[ST_MAX_ENVELOPE_POINTS - 1], *sustain_line, *loop_start_line, *loop_end_line; + GtkAdjustment *hadj, *vadj; - GtkSpinButton *spin_length; - GtkSpinButton *spin_pos; - GtkSpinButton *spin_offset; - GtkSpinButton *spin_value; - GtkSpinButton *spin_sustain; - GtkSpinButton *spin_loop_start; - GtkSpinButton *spin_loop_end; - - GtkToggleButton *enable; - GtkToggleButton *sustain; - GtkToggleButton *loop; - -#ifdef USE_GNOME - GnomeCanvas *canvas; - GnomeCanvasGroup *group; - GnomeCanvasItem *points[ST_MAX_ENVELOPE_POINTS]; - GnomeCanvasItem *lines[ST_MAX_ENVELOPE_POINTS - 1]; int canvas_max_x; - double zoomfactor_base; - double zoomfactor_mult; + gdouble zoomfactor_base; + gdouble zoomfactor_mult; - int dragging_canvas_from_x, dragging_canvas_from_y; /* world coordinates */ - int dragging_item_from_x, dragging_item_from_y; /* world coordinates */ - double dragfromx, dragfromy; /* screen pixel coordinates */ - double zooming_canvas_from_val; + gdouble dragging_item_from_x, dragging_item_from_y; /* world coordinates */ + gdouble dragfromx, dragfromy, origin_x, origin_y; /* screen pixel coordinates */ + gdouble zooming_canvas_from_val; int dragpoint; gboolean dragging_canvas; gboolean zooming_canvas; + guint prev_current; #endif }; -struct _EnvelopeBoxClass -{ +struct _EnvelopeBoxClass { GtkVBoxClass parent_class; }; -guint envelope_box_get_type (void); -GtkWidget* envelope_box_new (const gchar *label); +GType envelope_box_get_type(void) G_GNUC_CONST; +GtkWidget* envelope_box_new(const gchar* label); -void envelope_box_set_envelope (EnvelopeBox *e, STEnvelope *env); +void envelope_box_set_envelope(EnvelopeBox* e, STEnvelope* env); #endif /* _ENVELOPE_BOX_H */ diff -Nru soundtracker-0.6.8/app/errors.c soundtracker-1.0.2~pre2/app/errors.c --- soundtracker-0.6.8/app/errors.c 2002-02-09 15:59:52.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/errors.c 2020-08-26 20:01:46.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - error handling functions * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,35 +19,21 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include -#include +#include -#include "audio.h" +#include "audio-subs.h" -static void -error_error_common (int level, - const char *text) +void error_error(const char* text) { - // This uses the mixer backpipe (see decls in audio.h) to collect - // all errors and warnings in one central place. Decls from - // audio.h should probably be put into a more general place. - int l; - extern int pipeb[2]; - write(pipeb[1], &level, sizeof(level)); - l = strlen(text); - write(pipeb[1], &l, sizeof(l)); - write(pipeb[1], text, l + 1); + audio_backpipe_write(AUDIO_BACKPIPE_ERROR_MESSAGE, text); } -void -error_error (const char *text) +void error_warning(const char* text) { - error_error_common(AUDIO_BACKPIPE_ERROR_MESSAGE, text); + audio_backpipe_write(AUDIO_BACKPIPE_WARNING_MESSAGE, text); } -void -error_warning (const char *text) +void error_errno(const char *text) { - error_error_common(AUDIO_BACKPIPE_WARNING_MESSAGE, text); + audio_backpipe_write(AUDIO_BACKPIPE_ERRNO_MESSAGE, text, (gint)errno); } - diff -Nru soundtracker-0.6.8/app/errors.h soundtracker-1.0.2~pre2/app/errors.h --- soundtracker-0.6.8/app/errors.h 2001-01-03 13:24:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/errors.h 2019-04-15 17:45:04.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - error handling functions (header) * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,7 +27,9 @@ read_mixer_pipe(). More complicated dialogs (OK/Cancel questions etc.) have to be hacked up manually. */ -void error_error (const char *text); -void error_warning (const char *text); +void error_error(const char* text); +void error_warning(const char* text); +/* Takes the current errno value */ +void error_errno(const char *text); #endif /* _ERRORS_H */ diff -Nru soundtracker-0.6.8/app/event-waiter.c soundtracker-1.0.2~pre2/app/event-waiter.c --- soundtracker-0.6.8/app/event-waiter.c 2001-01-03 13:24:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/event-waiter.c 2019-04-15 17:45:04.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - event waiter * - * Copyright (C) 2001 Michael Krause + * Copyright (C) 2001-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,81 +24,77 @@ #include struct event_waiter { - GMutex *mutex; + GMutex mutex; int counter; double time; }; -event_waiter * -event_waiter_new (void) +event_waiter* +event_waiter_new(void) { - event_waiter *e = g_new(event_waiter, 1); + event_waiter* e = g_new(event_waiter, 1); - if(e) { - e->mutex = g_mutex_new(); - event_waiter_reset(e); + if (e) { + g_mutex_init(&e->mutex); + event_waiter_reset(e); } return e; } -void -event_waiter_destroy (event_waiter *e) +void event_waiter_destroy(event_waiter* e) { - if(e) { - g_mutex_free(e->mutex); - g_free(e); + if (e) { + g_mutex_clear(&e->mutex); + g_free(e); } } -void -event_waiter_reset (event_waiter *e) +void event_waiter_reset(event_waiter* e) { g_assert(e); - g_mutex_lock(e->mutex); + g_mutex_lock(&e->mutex); e->counter = 0; e->time = 0.0; - g_mutex_unlock(e->mutex); + g_mutex_unlock(&e->mutex); } -void -event_waiter_start (event_waiter *e) +void event_waiter_start(event_waiter* e) { g_assert(e); - g_mutex_lock(e->mutex); + g_mutex_lock(&e->mutex); e->counter++; - g_mutex_unlock(e->mutex); + g_mutex_unlock(&e->mutex); } -void -event_waiter_confirm (event_waiter *e, - double readytime) +void event_waiter_confirm(event_waiter* e, + double readytime) { g_assert(e); - g_mutex_lock(e->mutex); - if(e->counter > 0) { - e->counter--; + g_mutex_lock(&e->mutex); + if (e->counter > 0) { + e->counter--; } - if(readytime >= e->time) { - e->time = readytime; + if (readytime >= e->time) { + e->time = readytime; } - g_mutex_unlock(e->mutex); + g_mutex_unlock(&e->mutex); } gboolean -event_waiter_ready (event_waiter *e, - double currenttime) +event_waiter_ready(event_waiter* e, + double currenttime) { gboolean result; g_assert(e); - g_mutex_lock(e->mutex); + g_mutex_lock(&e->mutex); result = (e->counter == 0 && currenttime >= e->time); - g_mutex_unlock(e->mutex); + g_mutex_unlock(&e->mutex); return result; } diff -Nru soundtracker-0.6.8/app/event-waiter.h soundtracker-1.0.2~pre2/app/event-waiter.h --- soundtracker-0.6.8/app/event-waiter.h 2001-01-03 13:24:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/event-waiter.h 2019-04-15 17:45:04.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - event waiter (header) * - * Copyright (C) 2001 Michael Krause + * Copyright (C) 2001-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -49,12 +49,12 @@ The same applies to Tempo / BPM changes. */ -event_waiter * event_waiter_new (void); -void event_waiter_destroy (event_waiter *e); +event_waiter* event_waiter_new(void); +void event_waiter_destroy(event_waiter* e); -void event_waiter_reset (event_waiter *e); -void event_waiter_start (event_waiter *e); -void event_waiter_confirm (event_waiter *e, double readytime); -gboolean event_waiter_ready (event_waiter *e, double currenttime); +void event_waiter_reset(event_waiter* e); +void event_waiter_start(event_waiter* e); +void event_waiter_confirm(event_waiter* e, double readytime); +gboolean event_waiter_ready(event_waiter* e, double currenttime); #endif /* _EVENT_WAITER_H */ diff -Nru soundtracker-0.6.8/app/extspinbutton.c soundtracker-1.0.2~pre2/app/extspinbutton.c --- soundtracker-0.6.8/app/extspinbutton.c 2001-01-03 13:35:01.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/extspinbutton.c 2021-02-06 10:36:02.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GTK+ Spinbutton extensions * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,18 +22,18 @@ #include #include "extspinbutton.h" -#include "gui.h" +#include "gui-subs.h" /* These two defines have been taken from gtkspinbutton.c in gtk+-1.2.1 Unfortunately there's no cleaner solution */ -#define MIN_SPIN_BUTTON_WIDTH 30 -#define ARROW_SIZE 11 +#define MIN_SPIN_BUTTON_WIDTH 30 +#define ARROW_SIZE 11 -static GtkEntryClass *parent_class = NULL; +G_DEFINE_TYPE(ExtSpinButton, extspinbutton, GTK_TYPE_SPIN_BUTTON) static int -extspinbutton_find_display_digits (GtkAdjustment *adjustment) +extspinbutton_find_display_digits(GtkAdjustment* adjustment) { int num_digits; @@ -44,96 +44,104 @@ } static void -extspinbutton_size_request (GtkWidget *widget, - GtkRequisition *requisition) +extspinbutton_style_set(GtkWidget* w) { - g_return_if_fail (widget != NULL); - g_return_if_fail (requisition != NULL); - g_return_if_fail (GTK_IS_SPIN_BUTTON (widget)); - - GTK_WIDGET_CLASS (parent_class)->size_request (widget, requisition); - - if(EXTSPINBUTTON(widget)->size_hack) { - requisition->width = MAX (MIN_SPIN_BUTTON_WIDTH, - extspinbutton_find_display_digits(GTK_SPIN_BUTTON(widget)->adjustment) - * gdk_string_width(widget->style->font, "X")) - + ARROW_SIZE - + 2 * widget->style->klass->xthickness; + gint height; + + ExtSpinButton* s = EXTSPINBUTTON(w); + + gui_get_pixel_size(w, "X", &s->width, &height); +} + +static void +extspinbutton_size_request(GtkWidget* widget, + GtkRequisition* requisition) +{ + g_return_if_fail(widget != NULL); + g_return_if_fail(requisition != NULL); + g_return_if_fail(GTK_IS_SPIN_BUTTON(widget)); + + GTK_WIDGET_CLASS(extspinbutton_parent_class)->size_request(widget, requisition); + + if (EXTSPINBUTTON(widget)->size_hack) { + if (EXTSPINBUTTON(widget)->width == -1) + extspinbutton_style_set(widget); + requisition->width = MAX(MIN_SPIN_BUTTON_WIDTH, + extspinbutton_find_display_digits(GTK_SPIN_BUTTON(widget)->adjustment) + * EXTSPINBUTTON(widget)->width) + + ARROW_SIZE + 2 * widget->style->xthickness; } else { - // This is the normal size_request() from gtk+-1.2.8 - requisition->width = MIN_SPIN_BUTTON_WIDTH + ARROW_SIZE - + 2 * widget->style->klass->xthickness; + // This is the normal size_request() from gtk+-1.2.8 + requisition->width = MIN_SPIN_BUTTON_WIDTH + ARROW_SIZE + + 2 * widget->style->xthickness; } } static void -extspinbutton_value_changed (GtkSpinButton *spin) +extspinbutton_value_changed(ExtSpinButton* spin) { - if(spin->button != 0) { - // Should only do this if this widget is really in the main window. - gtk_window_set_focus(GTK_WINDOW(mainwindow), NULL); - } + if (spin->parent_window) + gtk_window_set_focus(GTK_WINDOW(spin->parent_window), NULL); } -GtkWidget * -extspinbutton_new (GtkAdjustment *adjustment, - gfloat climb_rate, - guint digits) +static void +extspinbutton_map(GtkWidget* w) { - ExtSpinButton *s; + ExtSpinButton* s; + GtkWidget* p; - s = gtk_type_new(extspinbutton_get_type()); + g_assert(IS_EXTSPINBUTTON(w)); + s = EXTSPINBUTTON(w); + if (s->unset_focus) + for(p = gtk_widget_get_parent(w); p; p = gtk_widget_get_parent(p)) + if (GTK_IS_WINDOW(p)) { + s->parent_window = p; + break; + } + + (*GTK_WIDGET_CLASS(extspinbutton_parent_class)->map)(w); +} + +GtkWidget* +extspinbutton_new(GtkAdjustment* adjustment, + gfloat climb_rate, + guint digits, + gboolean unset_focus) +{ + ExtSpinButton* s; + + s = g_object_new(extspinbutton_get_type(), NULL); s->size_hack = TRUE; + s->unset_focus = unset_focus; + s->parent_window = NULL; + s->width = -1; gtk_spin_button_configure(GTK_SPIN_BUTTON(s), adjustment, climb_rate, digits); - gtk_signal_connect(GTK_OBJECT(s), "changed", - GTK_SIGNAL_FUNC(extspinbutton_value_changed), NULL); + g_signal_connect(s, "style-set", + G_CALLBACK(extspinbutton_style_set), NULL); + if (unset_focus) + g_signal_connect(s, "value-changed", + G_CALLBACK(extspinbutton_value_changed), NULL); return GTK_WIDGET(s); } -void -extspinbutton_disable_size_hack (ExtSpinButton *b) +void extspinbutton_disable_size_hack(ExtSpinButton* b) { b->size_hack = FALSE; } static void -extspinbutton_init (ExtSpinButton *s) +extspinbutton_init(ExtSpinButton* s) { } static void -extspinbutton_class_init (ExtSpinButtonClass *class) +extspinbutton_class_init(ExtSpinButtonClass* class) { - GtkWidgetClass *widget_class; + GtkWidgetClass* widget_class; widget_class = (GtkWidgetClass*)class; - widget_class->size_request = extspinbutton_size_request; - - parent_class = gtk_type_class (GTK_TYPE_ENTRY); -} - -guint -extspinbutton_get_type (void) -{ - static guint extspinbutton_type = 0; - - if (!extspinbutton_type) { - GtkTypeInfo extspinbutton_info = - { - "ExtSpinButton", - sizeof(ExtSpinButton), - sizeof(ExtSpinButtonClass), - (GtkClassInitFunc) extspinbutton_class_init, - (GtkObjectInitFunc) extspinbutton_init, - (GtkArgSetFunc) NULL, - (GtkArgGetFunc) NULL, - }; - - extspinbutton_type = gtk_type_unique(gtk_spin_button_get_type (), &extspinbutton_info); - } - - return extspinbutton_type; + widget_class->map = extspinbutton_map; } diff -Nru soundtracker-0.6.8/app/extspinbutton.h soundtracker-1.0.2~pre2/app/extspinbutton.h --- soundtracker-0.6.8/app/extspinbutton.h 2001-01-03 11:20:49.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/extspinbutton.h 2021-02-06 10:36:02.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GTK+ Spinbutton extensions (header) * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,29 +24,31 @@ #include -#define EXTSPINBUTTON(obj) GTK_CHECK_CAST (obj, extspinbutton_get_type (), ExtSpinButton) -#define EXTSPINBUTTON_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, extspinbutton_get_type (), ExtSpinButtonClass) -#define IS_EXTSPINBUTTON(obj) GTK_CHECK_TYPE (obj, extspinbutton_get_type ()) +#define EXTSPINBUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, extspinbutton_get_type(), ExtSpinButton)) +#define EXTSPINBUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST(klass, extspinbutton_get_type(), ExtSpinButtonClass)) +#define IS_EXTSPINBUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, extspinbutton_get_type())) -typedef struct _ExtSpinButton ExtSpinButton; -typedef struct _ExtSpinButtonClass ExtSpinButtonClass; +typedef struct _ExtSpinButton ExtSpinButton; +typedef struct _ExtSpinButtonClass ExtSpinButtonClass; -struct _ExtSpinButton -{ +struct _ExtSpinButton { GtkSpinButton spin; - gboolean size_hack; + GtkWidget* parent_window; + + gboolean size_hack, unset_focus; + gint width; }; -struct _ExtSpinButtonClass -{ +struct _ExtSpinButtonClass { GtkSpinButtonClass parent_class; }; -guint extspinbutton_get_type (void); -GtkWidget* extspinbutton_new (GtkAdjustment *adjustment, - gfloat climb_rate, - guint digits); -void extspinbutton_disable_size_hack (ExtSpinButton *b); +GType extspinbutton_get_type(void) G_GNUC_CONST; +GtkWidget* extspinbutton_new(GtkAdjustment* adjustment, + gfloat climb_rate, + guint digits, + gboolean unset_focus); +void extspinbutton_disable_size_hack(ExtSpinButton* b); #endif /* _EXTSPINBUTTON_H */ diff -Nru soundtracker-0.6.8/app/file-operations.c soundtracker-1.0.2~pre2/app/file-operations.c --- soundtracker-0.6.8/app/file-operations.c 2003-08-04 10:07:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/file-operations.c 2021-02-26 19:39:19.000000000 +0000 @@ -2,7 +2,8 @@ /* * The Real SoundTracker - file operations page * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause + * Copyright (C) 2020, 2021 Yury Aliaev * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,253 +22,521 @@ #include -#include - +#include #include +#include +#include +#include +#include #include -#include #include -#include "i18n.h" -#include #include "file-operations.h" -#include "keys.h" -#include "track-editor.h" +#include "gui-settings.h" #include "gui-subs.h" #include "gui.h" -#include "errors.h" +#include "keys.h" +#include "preferences.h" +#include "track-editor.h" -/* Welcome! Heavy gtk+ hacking going on here! :-) */ +enum { + FOP_IS_SAVE = 1 << 0, + FOP_TRIGGER_A = 1 << 1, + FOP_TRIGGER_B = 1 << 2, +}; + +struct _file_op { + GtkWidget *dialog, *chooser; + void (*callback)(); + gchar flags; + gchar index; /* -1 for standalone dialogs */ + const gchar *title, *tip, *ext; + gchar** path; +}; + +/* Some single-click magick to avoid artifacts when directory changes */ +static gint current_subpage = 0, stored_subpage = 0; +static gint current_page = 0; +static gboolean need_return = FALSE, nostore_subpage = FALSE; + +static GtkWidget *rightnb = NULL, *leftbox, *radio[DIALOG_LAST]; +static GSList *fileops = NULL; + +static inline file_op* +find_fileop(gint subpage) +{ + GSList *l; -GtkWidget *fileops_dialogs[DIALOG_LAST]; + g_assert(fileops != NULL); + g_assert(subpage >= 0); -static GtkWidget *rightbox; -static GtkWidget *typeradio[DIALOG_LAST]; + for (l = fileops; l; l = l->next) { + file_op *fop = l->data; + + if (fop->index == subpage) + return fop; + } -static GtkFileSelection *fileops_current_dialog = NULL; -static guint handler_id_f, handler_id_d; + return NULL; +} -static GtkWidget * -fileops_filesel_get_confirm_area (GtkFileSelection *fs) +static void +typeradio_changed(GtkToggleButton* w, gpointer data) { - /* whhaaaaaahooooooooo! */ - return GTK_WIDGET( - ((GtkBoxChild*) g_list_nth_data( - GTK_BOX(fs->main_vbox)->children, - 4)) - ->widget); + if (gtk_toggle_button_get_active(w)) { + current_subpage = GPOINTER_TO_INT(data); + if (!nostore_subpage) + stored_subpage = current_subpage; + gtk_notebook_set_current_page(GTK_NOTEBOOK(rightnb), current_subpage); + } +} + +static void +folder_changed(file_op* fop) +{ + if (fop->flags & FOP_TRIGGER_A) + fop->flags &= ~FOP_TRIGGER_A; + else + fop->flags |= FOP_TRIGGER_B; } static gboolean -is_single_click_dialog (GtkFileSelection *fs) +do_file_callback(file_op* fop, gchar* filename) { - GtkWidget *w = GTK_WIDGET(fs); + gchar* utfpath = gui_filename_to_utf8(filename); + gchar* localpath = filename; + + if (utfpath) { + if (fop->flags & FOP_IS_SAVE) { + if (gui_settings.add_extension) { + gchar *fname = g_path_get_basename(utfpath); + + /* File can begin with '.'. One-letter name does need an extension */ + if (strlen(fname) == 1 || !strchr(&fname[1], '.')) { + gchar *fname_new = g_strconcat(utfpath, ".", fop->ext, NULL); + + g_free(utfpath); + utfpath = fname_new; + localpath = gui_filename_from_utf8(utfpath); + if (!localpath) { + g_free(utfpath); + return FALSE; + } + } + g_free(fname); + } + if (g_file_test(localpath, G_FILE_TEST_EXISTS)) { + gchar *mess = g_strdup_printf(_("The file named \"%s\" already exists.\nDo you want to replace it?"), + g_utf8_next_char(g_strrstr(utfpath, "/"))); + gboolean answer = gui_ok_cancel_modal(mainwindow, mess); + + g_free(mess); + if (!answer) { + g_free(utfpath); + return FALSE; + } + } + } + + gui_settings_make_path(utfpath, fop->path); + fop->callback(utfpath, localpath); + + g_free(utfpath); + if (localpath != filename) + g_free(localpath); + return TRUE; + } - return w == fileops_dialogs[DIALOG_LOAD_MOD] - || w == fileops_dialogs[DIALOG_LOAD_SAMPLE] - || w == fileops_dialogs[DIALOG_LOAD_INSTRUMENT]; + return FALSE; } static void -file_selection_file_button (GtkWidget *widget, - gint row, - gint column, - GdkEventButton *bevent, - gpointer user_data) +file_chosen(file_op* fops) { - gtk_button_clicked(GTK_BUTTON(GTK_FILE_SELECTION(user_data)->ok_button)); + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fops->chooser)); + + /* Silently ignore errors, because filechooser sometimes returns NULL with the "selection-changed" signal */ + if (!filename) + return; + + if (filename[0] != '\0') { + /* Please don't ask me anything about the further lines. In order to implement single-click + operation with the Gtk+-2 file chooser one have to do something pervetred unnatural... */ + + /* Change directory by single click for both save and load */ + if (g_file_test(filename, G_FILE_TEST_IS_DIR)) { + fops->flags |= FOP_TRIGGER_A; + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fops->chooser), filename); + } else { + fops->flags &= ~FOP_TRIGGER_A; + if ((!(fops->flags & FOP_IS_SAVE)) && + g_file_test(filename, G_FILE_TEST_IS_REGULAR || G_FILE_TEST_IS_SYMLINK)) { + /* File activating by single click only for load */ + if (do_file_callback(fops, filename) && need_return) { + need_return = FALSE; + gui_go_to_page(current_page); + } + } + } + } + g_free(filename); } static void -file_selection_dir_button (GtkWidget *widget, - gint row, - gint column, - GdkEventButton *bevent, - gpointer user_data) -{ - gchar *k = NULL; - static gchar t[256]; - - gtk_clist_get_text (GTK_CLIST (widget), row, 0, &k); - - if(k != NULL) { - strncpy(t, k, 255); - t[255] = 0; - - gtk_file_selection_set_filename (GTK_FILE_SELECTION(user_data), - t); - } +load_clicked(file_op* fops) +{ + fops->flags &= ~(FOP_TRIGGER_A & FOP_TRIGGER_B); + file_chosen(fops); } static void -fileops_filesel_pre_insertion (GtkFileSelection *fs) +save_clicked(file_op* fop) { - gtk_widget_hide(fs->button_area); + gchar* name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fop->chooser)); - if(is_single_click_dialog(fs)) { - gtk_widget_hide(fileops_filesel_get_confirm_area(fs)); + if (!name) + return; - handler_id_f = gtk_signal_connect_after (GTK_OBJECT (fs->file_list), "select_row", - (GtkSignalFunc) file_selection_file_button, - (gpointer) fs); + if (name[0] != '\0') { + if (do_file_callback(fop, name) && need_return) { + gui_go_to_page(current_page); + need_return = FALSE; + } } + g_free(name); +} + +static void set_filepath(GtkWidget* fc, const gchar* path) +{ + gchar* newname = gui_filename_from_utf8(path); - handler_id_d = gtk_signal_connect_after (GTK_OBJECT (fs->dir_list), "select_row", - (GtkSignalFunc) file_selection_dir_button, - (gpointer) fs); + if (!newname) + return; + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc), newname); + g_free(newname); } static void -fileops_filesel_post_removal (GtkFileSelection *fs) +add_filters(GtkFileChooser* fc, const char** formats[]) { - gtk_signal_disconnect(GTK_OBJECT(fs->dir_list), handler_id_d); + GtkFileFilter *current, *omni; + const gchar** format; + guint i = 0; + + omni = gtk_file_filter_new(); + gtk_file_filter_set_name(omni, _("All supported types")); + + while ((format = formats[i])) { + guint j = 1; + + current = gtk_file_filter_new(); + gtk_file_filter_set_name(current, _(format[0])); + while (format[j]) { + gtk_file_filter_add_pattern(current, format[j]); + gtk_file_filter_add_pattern(omni, format[j]); + j++; + } + gtk_file_chooser_add_filter(fc, current); + i++; + } - if(is_single_click_dialog(fs)) { - gtk_signal_disconnect(GTK_OBJECT(fs->file_list), handler_id_f); + gtk_file_chooser_add_filter(fc, omni); + gtk_file_chooser_set_filter(fc, omni); - gtk_widget_show(fileops_filesel_get_confirm_area(fs)); - } + omni = gtk_file_filter_new(); + gtk_file_filter_set_name(omni, _("All files")); + gtk_file_filter_add_pattern(omni, "*"); + gtk_file_chooser_add_filter(fc, omni); +} - gtk_widget_show(fs->button_area); +static gboolean +brelease(GtkWidget* w, GdkEventButton* ev, file_op* fop) +{ + if (ev->button == 1) { + if (fop->flags & FOP_TRIGGER_B) + fop->flags |= FOP_TRIGGER_A; + else + file_chosen(fop); + + fop->flags &= ~FOP_TRIGGER_B; + } + return FALSE; } static void -typeradio_changed (void) +filesel_dialog_response(file_op* fop) { - int n = find_current_toggle(typeradio, DIALOG_LAST); + gtk_dialog_response(GTK_DIALOG(fop->dialog), GTK_RESPONSE_ACCEPT); +} - if(fileops_current_dialog) { - gtk_container_remove(GTK_CONTAINER(rightbox), fileops_current_dialog->main_vbox); - fileops_filesel_post_removal(fileops_current_dialog); - gtk_container_add(GTK_CONTAINER(fileops_current_dialog), fileops_current_dialog->main_vbox); +/* Two-step procedure since file dialogs can be declared at random order, + but shoud appear as notebook pages as intended */ + +file_op* fileops_dialog_create(const guint index, const gchar* title, gchar** path, void (*callback)(), + const gboolean is_embedded, const gboolean is_save, + const gchar** formats[], const gchar* tip, const gchar* ext) +{ + GtkWidget *fc; + file_op *fop = g_new0(file_op, 1); + + g_assert(fop != NULL); + + fop->callback = callback; + fop->title = title; + fop->tip = tip; + fop->path = path; + fop->ext = ext; + if (is_save) + fop->flags = FOP_IS_SAVE; + + if (is_embedded) { +#ifdef GTK_HACKS + GList* list; + + /* Even for Save action we create filechooser in OPEN mode and explicetly + enable CREATE_DIR button and add filename entry. Native SAVE mode leads + to creation of too many place taking unneccessary widgets */ + fc = gtk_file_chooser_widget_new(GTK_FILE_CHOOSER_ACTION_OPEN); +#else + /* Traditional way for those who don't like hacking */ + fc = gtk_file_chooser_widget_new(is_save ? GTK_FILE_CHOOSER_ACTION_SAVE + : GTK_FILE_CHOOSER_ACTION_OPEN); +#endif + g_signal_connect_swapped(fc, "file-activated", + G_CALLBACK(is_save ? save_clicked : file_chosen), fop); + g_signal_connect_swapped(fc, "current-folder-changed", G_CALLBACK(folder_changed), fop); + g_signal_connect(fc, "button-release-event", G_CALLBACK(brelease), fop); + +#ifdef GTK_HACKS + if (is_save) { /* Create Directory button */ + GtkWidget *widget; + + list = gtk_container_get_children(GTK_CONTAINER(fc)); + widget = GTK_WIDGET(g_list_nth_data(list, 0)); /* FileChooserDefault */ + g_list_free(list); + list = gtk_container_get_children(GTK_CONTAINER(widget)); + widget = GTK_WIDGET(g_list_nth_data(list, 0)); /* vbox */ + g_list_free(list); + list = gtk_container_get_children(GTK_CONTAINER(widget)); + widget = GTK_WIDGET(g_list_nth_data(list, 0)); /* browse_path_bar_box */ + g_list_free(list); + list = gtk_container_get_children(GTK_CONTAINER(widget)); /* Create Folder button :) */ + widget = GTK_WIDGET(g_list_nth_data(list, g_list_length(list) - 1)); + g_list_free(list); + + gtk_widget_show(widget); + } +#endif + } else { /* Standalone */ + GtkWidget* vbox; + gint font_size; + GdkScreen *screen; + gdouble resolution; + + /* Some work around the GtkFileChooserDialog bug: all files selected by + it get into the recent list. In ST standalone dialogs are used for + rather auxiliary things like pattern saving / loading, and these files + should not be in the recent list which is for modules only. So we + create out own dialog. */ + fc = gtk_file_chooser_widget_new(is_save ? GTK_FILE_CHOOSER_ACTION_SAVE + : GTK_FILE_CHOOSER_ACTION_OPEN); + fop->dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(mainwindow), 0, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + is_save ? GTK_STOCK_SAVE : GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); + g_signal_connect_swapped(fc, "file-activated", + G_CALLBACK(filesel_dialog_response), fop); + + /* Code for determination of the file chooser size is + borrowed from Gtk+-2 sources (gtkfilechooserdefault.c) */ + screen = gtk_widget_get_screen(fc); + if (screen) { + resolution = gdk_screen_get_resolution(screen); + if (resolution < 0.0) /* will be -1 if the resolution is not defined in the GdkScreen */ + resolution = 96.0; + } else + resolution = 96.0; + + font_size = pango_font_description_get_size(gtk_widget_get_style(fc)->font_desc); + font_size = PANGO_PIXELS(font_size) * resolution / 72.0; + gtk_widget_set_size_request(fc, font_size * 40, font_size * 40); + + gtk_container_set_border_width(GTK_CONTAINER(fop->dialog), 5); + gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_action_area(GTK_DIALOG(fop->dialog))), 5); + + vbox = gtk_dialog_get_content_area(GTK_DIALOG(fop->dialog)); + gtk_box_set_spacing(GTK_BOX(vbox), 2); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); + gtk_box_pack_start(GTK_BOX(vbox), fc, TRUE, TRUE, 0); + gtk_widget_show(fc); + + fop->index = -1; } - fileops_current_dialog = GTK_FILE_SELECTION(fileops_dialogs[n]); - fileops_refresh_list(GTK_FILE_SELECTION(fileops_dialogs[n]), FALSE); + fop->chooser = fc; + if (formats) + add_filters(GTK_FILE_CHOOSER(fc), formats); + + set_filepath(fc, *path); + + fileops = g_slist_append(fileops, fop); + return fop; +} + +void fileops_page_post_create(void) +{ + gint num = 0; + GSList *l; + + for (l = fileops; l; l = l->next) { + file_op *fop = l->data; + + if (fop->index != -1) { /* Embedded */ + GtkWidget *widget, *box, *buttonbox; + + /* Radio buttons */ + radio[num] = gtk_radio_button_new_with_label(num ? gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio[0])) : NULL, + fop->title); + if (fop->tip) + gtk_widget_set_tooltip_text(radio[num], _(fop->tip)); + gtk_widget_show(radio[num]); + gtk_box_pack_start(GTK_BOX(leftbox), radio[num], FALSE, FALSE, 0); + g_signal_connect(radio[num], "toggled", G_CALLBACK(typeradio_changed), GINT_TO_POINTER(num)); + + /* File selector with action button */ + box = gtk_vbox_new(FALSE, 2); + gtk_box_pack_start(GTK_BOX(box), fop->chooser, TRUE, TRUE, 0); + + buttonbox = gtk_hbutton_box_new(); + gtk_button_box_set_layout(GTK_BUTTON_BOX(buttonbox), GTK_BUTTONBOX_END); + gtk_box_pack_start(GTK_BOX(box), buttonbox, FALSE, FALSE, 0); + widget = gtk_button_new_from_stock(fop->flags & FOP_IS_SAVE ? GTK_STOCK_SAVE : GTK_STOCK_OPEN); + gtk_box_pack_end(GTK_BOX(buttonbox), widget, FALSE, FALSE, 0); + g_signal_connect_swapped(widget, "clicked", + G_CALLBACK(fop->flags & FOP_IS_SAVE ? save_clicked : load_clicked), + fop); - gtk_widget_hide(GTK_WIDGET(fileops_current_dialog)); /* close window if it's open */ + gtk_notebook_append_page(GTK_NOTEBOOK(rightnb), box, NULL); + fop->index = num++; + } + } - gtk_object_ref(GTK_OBJECT(fileops_current_dialog->main_vbox)); - gtk_container_remove(GTK_CONTAINER(fileops_current_dialog), fileops_current_dialog->main_vbox); - fileops_filesel_pre_insertion(fileops_current_dialog); - gtk_box_pack_start(GTK_BOX(rightbox), fileops_current_dialog->main_vbox, TRUE, TRUE, 0); - fileops_refresh_list(fileops_current_dialog, FALSE); + gtk_widget_show_all(rightnb); + gtk_notebook_set_current_page(GTK_NOTEBOOK(rightnb), 0); } -void -fileops_page_create (GtkNotebook *nb) +void fileops_page_create(GtkNotebook* nb) { GtkWidget *hbox, *vbox, *thing; - static const char *labels1[] = { - N_("Load Module"), - N_("Save Module"), - N_("Render WAV"), - N_("Save Song"), - N_("Load Sample"), - N_("Save Sample"), - N_("Load Instrument"), - N_("Save Instrument"), - NULL - }; hbox = gtk_hbox_new(FALSE, 4); - gtk_container_border_width(GTK_CONTAINER(hbox), 10); + gtk_container_set_border_width(GTK_CONTAINER(hbox), 10); gtk_notebook_append_page(nb, hbox, gtk_label_new(_("File"))); - gtk_widget_show(hbox); - vbox = gtk_vbox_new(FALSE, 2); + leftbox = vbox = gtk_vbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); - gtk_widget_show(vbox); - - make_radio_group((const char**)labels1, vbox, typeradio, FALSE, FALSE, typeradio_changed); - -#if USE_SNDFILE == 0 && defined (NO_AUDIOFILE) - gtk_widget_set_sensitive(typeradio[DIALOG_SAVE_MOD_AS_WAV], FALSE); - gtk_widget_set_sensitive(typeradio[DIALOG_LOAD_SAMPLE], FALSE); - gtk_widget_set_sensitive(typeradio[DIALOG_SAVE_SAMPLE], FALSE); -#endif thing = gtk_vseparator_new(); gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); - gtk_widget_show(thing); - rightbox = vbox = gtk_vbox_new(TRUE, 2); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); - gtk_widget_show(vbox); - - typeradio_changed(); + thing = rightnb = gtk_notebook_new(); + gtk_notebook_set_show_tabs(GTK_NOTEBOOK(thing), FALSE); + gtk_notebook_set_show_border(GTK_NOTEBOOK(thing), FALSE); + gtk_box_pack_start(GTK_BOX(hbox), rightnb, TRUE, TRUE, 0); + gtk_widget_show_all(hbox); } gboolean -fileops_page_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval, - gboolean pressed) +fileops_page_handle_keys(int shift, + int ctrl, + int alt, + guint32 keyval, + gboolean pressed) { int i; - i = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); - if(i != -1 && KEYS_MEANING_TYPE(i) == KEYS_MEANING_NOTE) { - track_editor_do_the_note_key(i, pressed, keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); - return TRUE; + i = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt), -1); + if (i != -1 && KEYS_MEANING_TYPE(i) == KEYS_MEANING_NOTE) { + track_editor_do_the_note_key(i, pressed, keyval, ENCODE_MODIFIERS(shift, ctrl, alt), TRUE); + return TRUE; } return FALSE; } -void -fileops_open_dialog (void *dummy, - void *index) -{ - int n = GPOINTER_TO_INT(index); - - if(!fileops_dialogs[n]) { - error_error(_("Operation not supported.")); - return; - } - - if(fileops_dialogs[n] == (GtkWidget*)fileops_current_dialog) { - gui_go_to_fileops_page(); +/* This function is used when the file operations are initiated by menus and buttons + rather than selection of the file tab by user*/ +void fileops_open_dialog(file_op *item) +{ + g_assert(item->chooser != NULL); + + if (item->index != -1) { + current_page = notebook_current_page; + nostore_subpage = TRUE; + gui_set_radio_active(radio, item->index); + nostore_subpage = FALSE; + need_return = TRUE; + gui_go_to_fileops_page(); } else { - gtk_widget_show(fileops_dialogs[n]); - fileops_refresh_list(GTK_FILE_SELECTION(fileops_dialogs[n]), TRUE); + gboolean file_op_ok; + + do { + file_op_ok = TRUE; + gint response = gtk_dialog_run(GTK_DIALOG(item->dialog)); + + if (response == GTK_RESPONSE_ACCEPT) { + gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(item->chooser)); + + /* Silently ignore errors */ + if (!filename) + break; + if (filename[0] != '\0') + file_op_ok = do_file_callback(item, filename); + g_free(filename); + } + } while(!file_op_ok); + + gtk_widget_hide(item->dialog); } } -void -fileops_refresh_list (GtkFileSelection *fs, - gboolean grab) +/* Restore previous manually set subpage after moving away from the file page */ +void fileops_restore_subpage(void) +{ + nostore_subpage = TRUE; + gui_set_radio_active(radio, stored_subpage); + nostore_subpage = FALSE; +} + +void fileops_enter_pressed(void) { - gtk_file_selection_set_filename (GTK_FILE_SELECTION (fs), "." G_DIR_SEPARATOR_S); - if(grab) - gtk_widget_grab_focus (GTK_FILE_SELECTION (fs)->selection_entry); + file_op *item = find_fileop(current_subpage); + + if (item) { + item->flags &= ~(FOP_TRIGGER_A & FOP_TRIGGER_B); + (item->flags & FOP_IS_SAVE) ? save_clicked(item) : file_chosen(item); + } } -/* simple, non-recursive file eraser... make it better! :-) */ -void -fileops_tmpclean (void) +void fileops_tmpclean(void) { - DIR *dire; - struct dirent *entry; + DIR* dire; + struct dirent* entry; static char tname[1024], fname[1024]; - strcpy (tname, prefs_get_prefsdir()); - strcat (tname, "/tmp/"); + strcpy(tname, prefs_get_prefsdir()); + strcat(tname, "/tmp/"); - if(!(dire = opendir(tname))) { - return; + if (!(dire = opendir(tname))) { + return; } - while((entry = readdir(dire))) { - if (strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..")) { - strcpy(fname, tname); - strcat(fname, entry->d_name); - unlink(fname); + while ((entry = readdir(dire))) { + if (strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..")) { + strcpy(fname, tname); + strcat(fname, entry->d_name); + unlink(fname); } } closedir(dire); } - - diff -Nru soundtracker-0.6.8/app/file-operations.h soundtracker-1.0.2~pre2/app/file-operations.h --- soundtracker-0.6.8/app/file-operations.h 2003-08-04 10:07:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/file-operations.h 2020-01-10 18:46:46.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - file operations page (header) * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,11 +25,11 @@ #include /* When adding new dialogs, add them in the "not included in the File - tab" section first, or create appropriate labels in - file-operations.c. */ + tab" section if they are standalone. But in principle embedded + dialogs can be shuffled with standalone ones... */ enum { - DIALOG_LOAD_MOD = 0, + DIALOG_LOAD_MOD = 0, /* Dialogs of the "File" tab */ DIALOG_SAVE_MOD, DIALOG_SAVE_MOD_AS_WAV, DIALOG_SAVE_SONG_AS_XM, @@ -38,28 +38,33 @@ DIALOG_LOAD_INSTRUMENT, DIALOG_SAVE_INSTRUMENT, - DIALOG_SAVE_RGN_SAMPLE, // is not included in the "File" tab + DIALOG_SAVE_RGN_SAMPLE, /* are not included in the "File" tab */ DIALOG_LOAD_PATTERN, DIALOG_SAVE_PATTERN, DIALOG_LAST }; -extern GtkWidget *fileops_dialogs[DIALOG_LAST]; +typedef struct _file_op file_op; -void fileops_page_create (GtkNotebook *nb); +void fileops_page_create(GtkNotebook* nb); -gboolean fileops_page_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval, - gboolean pressed); +void fileops_page_post_create(void); -void fileops_open_dialog (void *dummy, - void *index); +file_op* fileops_dialog_create(const guint index, const gchar* title, gchar** path, + void (*callback)(), const gboolean is_embedded, const gboolean is_save, + const gchar** formats[], const gchar* tip, const gchar* extension); -void fileops_refresh_list (GtkFileSelection *fs, - gboolean grab); +gboolean fileops_page_handle_keys(int shift, + int ctrl, + int alt, + guint32 keyval, + gboolean pressed); -void fileops_tmpclean (void); - +void fileops_open_dialog(file_op* item); + +void fileops_tmpclean(void); + +void fileops_restore_subpage(void); + +void fileops_enter_pressed(void); #endif /* _FILE_OPERATIONS_H */ diff -Nru soundtracker-0.6.8/app/gettext.h soundtracker-1.0.2~pre2/app/gettext.h --- soundtracker-0.6.8/app/gettext.h 2006-01-15 15:52:06.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/gettext.h 2019-03-12 11:12:44.000000000 +0000 @@ -1,20 +1,19 @@ /* Convenience header for conditional use of GNU . - Copyright (C) 1995-1998, 2000-2002, 2004 Free Software Foundation, Inc. + Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2011, 2015 Free + Software Foundation, Inc. - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU Library General Public License as published - by the Free Software Foundation; either version 2, or (at your option) - any later version. + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - USA. */ + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 @@ -23,7 +22,19 @@ #if ENABLE_NLS /* Get declarations of GNU message catalog functions. */ -# include +#include + +/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by + the gettext() and ngettext() macros. This is an alternative to calling + textdomain(), and is useful for libraries. */ +#ifdef DEFAULT_TEXT_DOMAIN +#undef gettext +#define gettext(Msgid) \ + dgettext(DEFAULT_TEXT_DOMAIN, Msgid) +#undef ngettext +#define ngettext(Msgid1, Msgid2, N) \ + dngettext(DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) +#endif #else @@ -34,17 +45,17 @@ and also including would fail on SunOS 4, whereas is OK. */ #if defined(__sun) -# include +#include #endif /* Many header files from the libstdc++ coming with g++ 3.3 or newer include , which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. */ #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) -# include -# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H -# include -# endif +#include +#if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H +#include +#endif #endif /* Disabled NLS. @@ -52,19 +63,39 @@ for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ -# define gettext(Msgid) ((const char *) (Msgid)) -# define dgettext(Domainname, Msgid) ((const char *) (Msgid)) -# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid)) -# define ngettext(Msgid1, Msgid2, N) \ - ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) -# define dngettext(Domainname, Msgid1, Msgid2, N) \ - ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) -# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ - ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) -# define textdomain(Domainname) ((const char *) (Domainname)) -# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname)) -# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset)) +#undef gettext +#define gettext(Msgid) ((const char*)(Msgid)) +#undef dgettext +#define dgettext(Domainname, Msgid) ((void)(Domainname), gettext(Msgid)) +#undef dcgettext +#define dcgettext(Domainname, Msgid, Category) \ + ((void)(Category), dgettext(Domainname, Msgid)) +#undef ngettext +#define ngettext(Msgid1, Msgid2, N) \ + ((N) == 1 \ + ? ((void)(Msgid2), (const char*)(Msgid1)) \ + : ((void)(Msgid1), (const char*)(Msgid2))) +#undef dngettext +#define dngettext(Domainname, Msgid1, Msgid2, N) \ + ((void)(Domainname), ngettext(Msgid1, Msgid2, N)) +#undef dcngettext +#define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ + ((void)(Category), dngettext(Domainname, Msgid1, Msgid2, N)) +#undef textdomain +#define textdomain(Domainname) ((const char*)(Domainname)) +#undef bindtextdomain +#define bindtextdomain(Domainname, Dirname) \ + ((void)(Domainname), (const char*)(Dirname)) +#undef bind_textdomain_codeset +#define bind_textdomain_codeset(Domainname, Codeset) \ + ((void)(Domainname), (const char*)(Codeset)) + +#endif +/* Prefer gnulib's setlocale override over libintl's setlocale override. */ +#ifdef GNULIB_defined_setlocale +#undef setlocale +#define setlocale rpl_setlocale #endif /* A pseudo function call that serves as a marker for the automated @@ -76,4 +107,178 @@ initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String +/* The separator between msgctxt and msgid in a .mo file. */ +#define GETTEXT_CONTEXT_GLUE "\004" + +/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a + MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be + short and rarely need to change. + The letter 'p' stands for 'particular' or 'special'. */ +#ifdef DEFAULT_TEXT_DOMAIN +#define pgettext(Msgctxt, Msgid) \ + pgettext_aux(DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#else +#define pgettext(Msgctxt, Msgid) \ + pgettext_aux(NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#endif +#define dpgettext(Domainname, Msgctxt, Msgid) \ + pgettext_aux(Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ + pgettext_aux(Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) +#ifdef DEFAULT_TEXT_DOMAIN +#define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux(DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#else +#define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux(NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#endif +#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux(Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ + npgettext_aux(Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif + static const char* + pgettext_aux(const char* domain, + const char* msg_ctxt_id, const char* msgid, + int category) +{ + const char* translation = dcgettext(domain, msg_ctxt_id, category); + if (translation == msg_ctxt_id) + return msgid; + else + return translation; +} + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif + static const char* + npgettext_aux(const char* domain, + const char* msg_ctxt_id, const char* msgid, + const char* msgid_plural, unsigned long int n, + int category) +{ + const char* translation = dcngettext(domain, msg_ctxt_id, msgid_plural, n, category); + if (translation == msg_ctxt_id || translation == msgid_plural) + return (n == 1 ? msgid : msgid_plural); + else + return translation; +} + +/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID + can be arbitrary expressions. But for string literals these macros are + less efficient than those above. */ + +#include + +#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) /* || __STDC_VERSION__ >= 199901L */) +#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 +#else +#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 +#endif + +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS +#include +#endif + +#define pgettext_expr(Msgctxt, Msgid) \ + dcpgettext_expr(NULL, Msgctxt, Msgid, LC_MESSAGES) +#define dpgettext_expr(Domainname, Msgctxt, Msgid) \ + dcpgettext_expr(Domainname, Msgctxt, Msgid, LC_MESSAGES) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif + static const char* + dcpgettext_expr(const char* domain, + const char* msgctxt, const char* msgid, + int category) +{ + size_t msgctxt_len = strlen(msgctxt) + 1; + size_t msgid_len = strlen(msgid) + 1; + const char* translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char* msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof(buf) + ? buf + : (char*)malloc(msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + memcpy(msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy(msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcgettext(domain, msg_ctxt_id, category); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free(msg_ctxt_id); +#endif + if (translation != msg_ctxt_id) + return translation; + } + return msgid; +} + +#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr(NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif + static const char* + dcnpgettext_expr(const char* domain, + const char* msgctxt, const char* msgid, + const char* msgid_plural, unsigned long int n, + int category) +{ + size_t msgctxt_len = strlen(msgctxt) + 1; + size_t msgid_len = strlen(msgid) + 1; + const char* translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char* msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof(buf) + ? buf + : (char*)malloc(msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + memcpy(msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy(msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcngettext(domain, msg_ctxt_id, msgid_plural, n, category); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free(msg_ctxt_id); +#endif + if (!(translation == msg_ctxt_id || translation == msgid_plural)) + return translation; + } + return (n == 1 ? msgid : msgid_plural); +} + #endif /* _LIBGETTEXT_H */ diff -Nru soundtracker-0.6.8/app/gui.c soundtracker-1.0.2~pre2/app/gui.c --- soundtracker-0.6.8/app/gui.c 2006-02-25 12:34:40.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/gui.c 2021-02-13 21:10:35.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - main user interface handling * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,1054 +21,1767 @@ #include +#if USE_SNDFILE +#include +#else +#include +#endif + +#include +#include #include #include #include -#include #include #include "poll.h" #include -#include #include -#ifdef USE_GNOME -#include -#endif -#ifndef NO_GDK_PIXBUF -#include -#endif +#include +#include -#include "i18n.h" -#include "gui.h" -#include "gui-subs.h" -#include "gui-settings.h" -#include "xm.h" -#include "st-subs.h" #include "audio.h" -#include "xm-player.h" -#include "tracker.h" -#include "main.h" -#include "keys.h" +#include "audio-subs.h" +#include "clock.h" +#include "colors.h" +#include "extspinbutton.h" +#include "file-operations.h" +#include "gui-settings.h" +#include "gui-subs.h" +#include "gui.h" +#include "history.h" #include "instrument-editor.h" -#include "sample-editor.h" -#include "track-editor.h" -#include "scope-group.h" +#include "keys.h" +#include "main.h" +#include "menubar.h" #include "module-info.h" +#include "playlist.h" #include "preferences.h" -#include "menubar.h" +#include "sample-editor.h" +#include "scope-group.h" +#include "st-subs.h" #include "time-buffer.h" #include "tips-dialog.h" -#include "gui-settings.h" -#include "file-operations.h" -#include "playlist.h" -#include "extspinbutton.h" +#include "track-editor.h" +#include "tracker.h" +#include "xm-player.h" int gui_playing_mode = 0; int notebook_current_page = NOTEBOOK_PAGE_FILE; -GtkWidget *editing_toggle; +GtkWidget* editing_toggle; GtkWidget *gui_curins_name, *gui_cursmpl_name; -GtkWidget *mainwindow; +GtkWidget* mainwindow = NULL; GtkWidget *alt[2], *arrow[2]; -ScopeGroup *scopegroup; +ScopeGroup* scopegroup; +GtkBuilder* gui_builder; -static GtkWidget *gui_splash_window = NULL; -#ifndef NO_GDK_PIXBUF -static GdkPixbuf *gui_splash_logo = NULL; -static GtkWidget *gui_splash_logo_area; -#endif -static GtkWidget *gui_splash_label; -static GtkWidget *gui_splash_close_button; - -static gint pipetag = -1; +static GtkWidget* gui_splash_window = NULL; +static cairo_surface_t* gui_splash_logo = NULL; +static GtkWidget* gui_splash_logo_area; +static GtkWidget* gui_splash_label; +static GtkWidget* gui_splash_close_button; + +static gint snch_id, inch_id, tempo_spin_id, bpm_spin_id, db_id; +static GIOChannel *audio_backpipe_channel; +static gchar* current_filename = NULL; +static gboolean looping_cross = TRUE, stop_process; static GtkWidget *mainwindow_upper_hbox, *mainwindow_second_hbox; -static GtkWidget *notebook; +static GtkWidget* notebook; static GtkWidget *spin_editpat, *spin_patlen, *spin_numchans; -static GtkWidget *cursmpl_spin; -static GtkWidget *pbutton; +static GtkWidget* cursmpl_spin; static GtkAdjustment *adj_amplification, *adj_pitchbend; -static GtkWidget *spin_jump, *curins_spin, *spin_octave; -static GtkWidget *toggle_lock_editpat; -static Playlist *playlist; - -guint statusbar_context_id; -GtkWidget *status_bar; -GtkWidget *st_clock; - -struct f_n_l -{ - FILE *file; - int length; -}; +static GtkWidget *spin_jump, *curins_spin, *spin_octave, *bpm_spin, *tempo_spin; +static GtkWidget *toggle_lock_editpat, *looping_toggle; +static GtkWidget* status_bar; +static GtkWidget* st_clock; +static GtkRecentManager* rcmgr; +static Playlist* playlist; +static file_op *loadmod, *savemod, *savexm, *loadpat, *savepat; +static gint notebook_prev_page = NOTEBOOK_PAGE_FILE; +#if USE_SNDFILE || AUDIOFILE_VERSION +static file_op* renderwav; +#endif +extern file_op *saveinstr, *loadinstr; -struct measure -{ - const gchar *title; +struct measure { + const gchar* title; gint major; gint minor; }; static struct measure measure_msr[] = { - {"2/2", 16, 8}, - {"3/2", 24, 8}, - {"4/2", 32, 8}, - {"2/4", 8, 4}, - {"3/4", 12, 4}, - {"4/4", 16, 4}, - {"5/4", 20, 4}, - {"6/4", 24, 4}, - {"7/4", 28, 4}, - {"3/8", 6, 2}, - {"4/8", 8, 2}, - {"5/8", 10, 2}, - {"6/8", 12, 2}, - {"9/8", 18, 2}, - {"12/8", 24, 2}, - {NULL} + { "2/2", 16, 8 }, + { "3/2", 24, 8 }, + { "4/2", 32, 8 }, + { "2/4", 8, 4 }, + { "3/4", 12, 4 }, + { "4/4", 16, 4 }, + { "5/4", 20, 4 }, + { "6/4", 24, 4 }, + { "7/4", 28, 4 }, + { "3/8", 6, 6 }, + { "4/8", 8, 8 }, + { "5/8", 10, 10 }, + { "6/8", 12, 6 }, + { "9/8", 18, 6 }, + { "12/8", 24, 6 }, + { NULL } }; -#define MAXMEASURE (sizeof(measure_msr) / sizeof(struct measure) - 1) - -static GtkWidget *measurewindow = NULL; -static gint measure_chosen; - -static void gui_tempo_changed (int value); -static void gui_bpm_changed (int value); - -gui_subs_slider tempo_slider = { - N_("Tempo"), 1, 31, gui_tempo_changed, GUI_SUBS_SLIDER_SPIN_ONLY +struct { + gboolean modified; + guint handler; +} tidata = { 0 }; + +static const gchar* pixmaps[] = { + DATADIR "/" PACKAGE "/play.xpm", + DATADIR "/" PACKAGE "/play_cur.xpm", + DATADIR "/" PACKAGE "/stop.xpm", + DATADIR "/" PACKAGE "/lock.xpm", + DATADIR "/" PACKAGE "/play_from.xpm", + DATADIR "/" PACKAGE "/play_block.xpm", + DATADIR "/" PACKAGE "/loop.xpm" }; -gui_subs_slider bpm_slider = { - "BPM", 32, 255, gui_bpm_changed, GUI_SUBS_SLIDER_SPIN_ONLY + +static const char* status_messages[] = { + N_("Ready."), + N_("Playing song..."), + N_("Playing pattern..."), + N_("Loading module..."), + N_("Module loaded."), + N_("Saving module..."), + N_("Module saved."), + N_("Loading sample..."), + N_("Sample loaded."), + N_("Saving sample..."), + N_("Sample saved."), + N_("Loading instrument..."), + N_("Instrument loaded."), + N_("Saving instrument..."), + N_("Instrument saved."), + N_("Saving song..."), + N_("Song saved."), }; -static GdkColor gui_clipping_led_on, gui_clipping_led_off; -static GtkWidget *gui_clipping_led; -static gboolean gui_clipping_led_status; +static gchar *base_message = NULL; -static int editing_pat = 0; +static GtkWidget* measurewindow = NULL; + +static GtkWidget* gui_clipping_led; +static GdkPixbuf *led_normal, *led_clipping; +static int editing_pat = 0; static int gui_ewc_startstop = 0; /* gui event handlers */ -static void file_selected(GtkWidget *w, GtkFileSelection *fs); -static void current_instrument_changed(GtkSpinButton *spin); +static void current_instrument_changed(GtkSpinButton* spin); static void current_instrument_name_changed(void); -static void current_sample_changed(GtkSpinButton *spin); +static void current_sample_changed(GtkSpinButton* spin); static void current_sample_name_changed(void); -static int keyevent(GtkWidget *widget, GdkEventKey *event, gpointer data); -static void gui_editpat_changed(GtkSpinButton *spin); -static void gui_patlen_changed(GtkSpinButton *spin); -static void gui_numchans_changed(GtkSpinButton *spin); -static void notebook_page_switched(GtkNotebook *notebook, GtkNotebookPage *page, int page_num); -static void gui_adj_amplification_changed(GtkAdjustment *adj); -static void gui_adj_pitchbend_changed(GtkAdjustment *adj); +static int keyevent(GtkWidget* widget, GdkEventKey* event, gpointer data); +static void gui_editpat_changed(GtkSpinButton* spin); +static void gui_patlen_changed(GtkSpinButton* spin); +static void gui_numchans_changed(GtkSpinButton* spin); +static void notebook_page_switched(GtkNotebook* notebook, gpointer page, int page_num); +static void gui_adj_amplification_changed(GtkAdjustment* adj, GtkSpinButton* spin); +static void gui_adj_pitchbend_changed(GtkAdjustment* adj); /* mixer / player communication */ -static void read_mixer_pipe(gpointer data, gint source, GdkInputCondition condition); static void wait_for_player(void); static void play_pattern(void); -static void play_current_pattern_row(void); +static void play_song(gpointer start_from_current_row); /* gui initialization / helpers */ static void gui_enable(int enable); static void offset_current_pattern(int offset); -static void offset_current_instrument(int offset); -static void offset_current_sample(int offset); +void gui_offset_current_instrument(int offset); +void gui_offset_current_sample(int offset); -static void gui_auto_switch_page (void); +static void gui_auto_switch_page(void); +static gboolean gui_load_xm(const char* filename, const char* localname); static void -editing_toggled (GtkToggleButton *button, gpointer data) +editing_toggled(GtkToggleButton* button, gpointer data) { - tracker_redraw(tracker); - if (button->active) - show_editmode_status(); + gboolean is_active = button->active; + tracker_set_editing(tracker, is_active); + if (is_active) + show_editmode_status(); else - statusbar_update(STATUS_IDLE, FALSE); + gui_statusbar_update(STATUS_IDLE, FALSE); } static void -gui_highlight_rows_toggled (GtkWidget *widget) +gui_highlight_rows_toggled(GtkWidget* widget) { gui_settings.highlight_rows = GTK_TOGGLE_BUTTON(widget)->active; tracker_redraw(tracker); } -void -gui_accidentals_clicked (GtkWidget *widget, gpointer data) +void gui_accidentals_clicked(GtkWidget* widget, gpointer data) { + GtkWidget* focus_widget = GTK_WINDOW(mainwindow)->focus_widget; + + if (GTK_IS_ENTRY(focus_widget)) { /* Emulate Ctrl + A if the cursor is in an entry */ + g_signal_emit_by_name(focus_widget, "move-cursor", GTK_MOVEMENT_DISPLAY_LINE_ENDS, -1, FALSE, NULL); + g_signal_emit_by_name(focus_widget, "move-cursor", GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1, TRUE, NULL); + return; + } gui_settings.sharp = !gui_settings.sharp; gtk_widget_hide(alt[gui_settings.sharp ? 1 : 0]); gtk_widget_show(alt[gui_settings.sharp ? 0 : 1]); tracker_redraw(tracker); } -void -gui_direction_clicked (GtkWidget *widget, gpointer data) +void gui_direction_clicked(GtkWidget* widget, gpointer data) { gui_settings.advance_cursor_in_fx_columns = !gui_settings.advance_cursor_in_fx_columns; gtk_widget_hide(arrow[gui_settings.advance_cursor_in_fx_columns ? 0 : 1]); gtk_widget_show(arrow[gui_settings.advance_cursor_in_fx_columns ? 1 : 0]); } -static void -measure_close_requested (void) +static gboolean +measure_close_requested(void) { -#ifndef USE_GNOME gtk_widget_hide(measurewindow); -#endif -/* to make keyboard working immediately after closing the dialog */ - gtk_widget_grab_focus(pbutton); + /* to make keyboard working immediately after closing the dialog */ + gui_unset_focus(); + return TRUE; } static void -measure_dialog (gint x, gint y) +measure_dialog() { - GtkObject *adj; + GtkObject* adj; GtkWidget *mainbox, *thing, *vbox; -#ifndef USE_GNOME - GtkWidget *button; -#endif - static GtkWidget *majspin; - - if(measurewindow != NULL) { - gtk_widget_set_uposition(measurewindow, x, y); - gtk_widget_show(measurewindow); - gtk_widget_grab_focus(majspin); - return; - } - -#ifdef USE_GNOME - measurewindow = gnome_dialog_new(_("Row highlighting configuration"), - GNOME_STOCK_BUTTON_CLOSE, NULL); - gnome_dialog_close_hides(GNOME_DIALOG(measurewindow), TRUE); - gnome_dialog_set_close(GNOME_DIALOG(measurewindow), TRUE); - gtk_signal_connect(GTK_OBJECT(measurewindow), "clicked", - GTK_SIGNAL_FUNC (measure_close_requested), NULL); - vbox = GNOME_DIALOG(measurewindow)->vbox; -#else -/* stolen from Gnome UI code. With Gnome life seemed so easy... (yaliaev) */ - measurewindow = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_window_set_title(GTK_WINDOW(measurewindow), _("Row highlighting configuration")); - gtk_container_border_width(GTK_CONTAINER(measurewindow), 4); - - vbox = gtk_vbox_new(FALSE, 8); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); - gtk_container_add(GTK_CONTAINER(measurewindow), vbox); - gtk_widget_show(vbox); + static GtkWidget* majspin; - gtk_window_set_policy (GTK_WINDOW (measurewindow), FALSE, - FALSE, FALSE); - - mainbox = gtk_vbox_new(FALSE, 8); - gtk_box_pack_start (GTK_BOX (vbox), mainbox, - TRUE, TRUE, 4); - - thing = gtk_hbutton_box_new (); - - gtk_button_box_set_spacing (GTK_BUTTON_BOX (thing), 8); - - button = gtk_button_new_with_label(_("Close")); - GTK_WIDGET_SET_FLAGS (GTK_WIDGET (button), GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (thing), button, TRUE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC (measure_close_requested), NULL); - - gtk_widget_grab_default (button); - gtk_widget_show (button); - - gtk_box_pack_end (GTK_BOX (vbox), thing, - FALSE, TRUE, 0); - gtk_widget_show (thing); - - thing = gtk_hseparator_new (); - gtk_box_pack_end (GTK_BOX (vbox), thing, - FALSE, TRUE, 4); - gtk_widget_show (thing); - -#endif - - gtk_signal_connect(GTK_OBJECT (measurewindow), "delete_event", - GTK_SIGNAL_FUNC (measure_close_requested), NULL); + if (measurewindow != NULL) { + gtk_window_set_position(GTK_WINDOW(measurewindow), GTK_WIN_POS_MOUSE); + gtk_window_present(GTK_WINDOW(measurewindow)); + gtk_widget_grab_focus(majspin); + return; + } + + measurewindow = gtk_dialog_new_with_buttons(_("Row highlighting configuration"), GTK_WINDOW(mainwindow), + GTK_DIALOG_MODAL, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); + gui_dialog_adjust(measurewindow, GTK_RESPONSE_CLOSE); + gui_dialog_connect(measurewindow, G_CALLBACK(measure_close_requested)); + gtk_window_set_position(GTK_WINDOW(measurewindow), GTK_WIN_POS_MOUSE); + vbox = gtk_dialog_get_content_area(GTK_DIALOG(measurewindow)); mainbox = gtk_hbox_new(FALSE, 2); - - gtk_widget_show(mainbox); thing = gtk_label_new(_("Highlight rows (major / minor):")); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - add_empty_hbox(mainbox); - adj = gtk_adjustment_new((double)gui_settings.highlight_rows_n, 1, 32, 1, 2, 0.0); - majspin = extspinbutton_new(GTK_ADJUSTMENT(adj), 0, 0); - gtk_box_pack_start(GTK_BOX(mainbox), majspin, FALSE, TRUE, 0); - gtk_widget_show(majspin); - gtk_spin_button_set_digits(GTK_SPIN_BUTTON(majspin), 0); - gtk_signal_connect(GTK_OBJECT(majspin), "changed", - GTK_SIGNAL_FUNC(gui_settings_highlight_rows_changed), NULL); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 0); + adj = gtk_adjustment_new((double)gui_settings.highlight_rows_minor_n, 1, 16, 1, 2, 0.0); - thing = extspinbutton_new(GTK_ADJUSTMENT(adj), 0, 0); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); + thing = extspinbutton_new(GTK_ADJUSTMENT(adj), 0, 0, FALSE); + gtk_box_pack_end(GTK_BOX(mainbox), thing, FALSE, FALSE, 0); gtk_spin_button_set_digits(GTK_SPIN_BUTTON(thing), 0); - gtk_signal_connect(GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(gui_settings_highlight_rows_minor_changed), NULL); - gtk_widget_set_uposition(measurewindow, x, y); - + g_signal_connect(thing, "value-changed", + G_CALLBACK(gui_settings_highlight_rows_minor_changed), NULL); + + adj = gtk_adjustment_new((double)gui_settings.highlight_rows_n, 1, 32, 1, 2, 0.0); + majspin = extspinbutton_new(GTK_ADJUSTMENT(adj), 0, 0, FALSE); + gtk_box_pack_end(GTK_BOX(mainbox), majspin, FALSE, FALSE, 0); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(majspin), 0); + g_signal_connect(majspin, "value-changed", + G_CALLBACK(gui_settings_highlight_rows_changed), NULL); + gtk_box_pack_start(GTK_BOX(vbox), mainbox, TRUE, TRUE, 0); + + thing = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, FALSE, 4); + gtk_widget_show_all(measurewindow); gtk_widget_grab_focus(majspin); -} +} static void -measure_changed (GtkWidget *list, GtkWidget *child, gpointer data) +measure_changed(GtkWidget* widget, gpointer data) { - if((measure_chosen = gtk_list_child_position(GTK_LIST(list), child)) <= (MAXMEASURE - 1)) { - if ((gui_settings.highlight_rows_n != measure_msr[measure_chosen].major) || - (gui_settings.highlight_rows_minor_n != measure_msr[measure_chosen].minor)) { - gui_settings.highlight_rows_n = measure_msr[measure_chosen].major; - gui_settings.highlight_rows_minor_n = measure_msr[measure_chosen].minor; - tracker_redraw(tracker); -/* to make keyboard working immediately after chosing the measure */ - gtk_widget_grab_focus(pbutton); - } - } + gint measure_chosen; + guint maxmeasure = GPOINTER_TO_INT(data); + + if ((measure_chosen = gtk_combo_box_get_active(GTK_COMBO_BOX(widget))) <= (maxmeasure - 1)) { + if (measurewindow && gtk_widget_get_visible(measurewindow)) + gtk_widget_hide(measurewindow); + if ((gui_settings.highlight_rows_n != measure_msr[measure_chosen].major) || (gui_settings.highlight_rows_minor_n != measure_msr[measure_chosen].minor)) { + gui_settings.highlight_rows_n = measure_msr[measure_chosen].major; + gui_settings.highlight_rows_minor_n = measure_msr[measure_chosen].minor; + tracker_redraw(tracker); + /* to make keyboard working immediately after chosing the measure */ + gui_unset_focus(); + } + /* Gtk+ stupidity: when combo box list is popped down, */ + } else if (measure_chosen == maxmeasure + 1) + measure_dialog(); } static void -popwin_hide (GtkWidget *widget, GtkWidget *thing) +popwin_hide(GtkWidget* widget, GParamSpec* ps, gpointer data) { - gint x, y, w, h, dx, dy; - - if (measure_chosen == MAXMEASURE){ - gdk_window_get_geometry (thing->window, &x, &y, &w, &h, NULL); - gdk_window_get_root_origin (thing->window, &dx, &dy); - measure_dialog(x+ dx + w + 32, y + dy + h + 24); - } + gboolean shown; + guint maxmeasure = GPOINTER_TO_INT(data); + + g_object_get(G_OBJECT(widget), "popup-shown", &shown, NULL); + if (!shown && gtk_combo_box_get_active(GTK_COMBO_BOX(widget)) == maxmeasure + 1) /* Popup is hidden by clicking on "Other..." */ + measure_dialog(); } -static void -gui_update_title (const gchar *filename) +static gboolean +gui_update_title_idle_func() { - gchar *title; + gchar* title; - title = g_strdup_printf("SoundTracker "VERSION": %s", g_basename(filename)); + if (current_filename) { + gchar* bn; + + bn = g_path_get_basename(current_filename); + title = g_strdup_printf(PACKAGE_NAME " " VERSION ": %s%s", tidata.modified ? "*" : "", bn); + g_free(bn); + } else + title = g_strdup_printf(PACKAGE_NAME " " VERSION ": %s%s", tidata.modified ? "*" : "", _("")); gtk_window_set_title(GTK_WINDOW(mainwindow), title); + g_free(title); + tidata.handler = 0; + return FALSE; } -static void -gui_mixer_play_pattern (int pattern, - int row, - int stop_after_row) +GtkWidget* +gui_get_pixmap(GuiPixmap pm) { - audio_ctlpipe_id i = AUDIO_CTLPIPE_PLAY_PATTERN; - write(audio_ctlpipe, &i, sizeof(i)); - write(audio_ctlpipe, &pattern, sizeof(pattern)); - write(audio_ctlpipe, &row, sizeof(row)); - write(audio_ctlpipe, &stop_after_row, sizeof(stop_after_row)); + g_assert(pm < GUI_PIXMAP_LAST); + return gtk_image_new_from_file(pixmaps[pm]); } -static void -gui_mixer_stop_playing (void) +void gui_update_title(const gchar* filename) +{ + static gboolean was_modified = FALSE; + + tidata.modified = history_get_modified(); + + /* To reduce overhead due to excessive calls of the gui_update_title() */ + if (filename == NULL && was_modified == tidata.modified) + return; + + if (filename && g_strcmp0(filename, current_filename)) { + if (current_filename) { + g_free(current_filename); + } + current_filename = g_strdup(filename); + } + if (!tidata.handler) + tidata.handler = g_idle_add((GSourceFunc)gui_update_title_idle_func, NULL); + g_assert(tidata.handler != 0); + + was_modified = tidata.modified; +} + +void gui_reset_title() { - audio_ctlpipe_id i = AUDIO_CTLPIPE_STOP_PLAYING; - write(audio_ctlpipe, &i, sizeof(i)); + if (current_filename) + g_free(current_filename); + + current_filename = NULL; + tidata.modified = FALSE; + if (!tidata.handler) + tidata.handler = g_idle_add((GSourceFunc)gui_update_title_idle_func, NULL); + g_assert(tidata.handler != 0); } -static void -gui_mixer_set_songpos (int songpos) +static gboolean +status_update_idle_func(const gchar *mess) +{ + g_assert(mess != NULL); + gtk_label_set_text(GTK_LABEL(status_bar), mess); + return FALSE; +} + +void +gui_statusbar_update_message(gchar* message, gboolean force_update) { - audio_ctlpipe_id i = AUDIO_CTLPIPE_SET_SONGPOS; - write(audio_ctlpipe, &i, sizeof(i)); - write(audio_ctlpipe, &songpos, sizeof(songpos)); + base_message = message; + + /* Take care here... GUI callbacks can be called at this point. */ + if (force_update) { + gtk_label_set_text(GTK_LABEL(status_bar), message); + while (gtk_events_pending()) + gtk_main_iteration(); + } else + g_idle_add((GSourceFunc)status_update_idle_func, base_message); +} + +void +gui_statusbar_update(int message, gboolean force_update) +{ + gui_statusbar_update_message(_(status_messages[message]), force_update); +} + +/* Allowing to output something over the base level message */ +void +gui_statusbar_update_message_high(gchar* message) +{ + g_idle_add((GSourceFunc)status_update_idle_func, message); +} + +/* Return to the base level message */ +void +gui_statusbar_restore_base_message(void) +{ + g_idle_add((GSourceFunc)status_update_idle_func, base_message); +} + +static inline void +gui_mixer_play_pattern(int pattern, + int row, + int stop_after_row, + int stoppos, + int ch_start, + int num_ch) +{ + audio_ctlpipe_write(AUDIO_CTLPIPE_PLAY_PATTERN, pattern, row, stop_after_row, (gint)gui_settings.looped, + stoppos, ch_start, num_ch); +} + +static inline void +gui_mixer_stop_playing(void) +{ + audio_ctlpipe_write(AUDIO_CTLPIPE_STOP_PLAYING); +} + +static inline void +gui_mixer_set_songpos(int songpos) +{ + audio_ctlpipe_write(AUDIO_CTLPIPE_SET_SONGPOS, songpos); +} + +static inline void +gui_mixer_set_pattern(int pattern) +{ + audio_ctlpipe_write(AUDIO_CTLPIPE_SET_PATTERN, pattern); } static void -gui_mixer_set_pattern (int pattern) +gui_recent_add_item(const gchar *filename) { - audio_ctlpipe_id i = AUDIO_CTLPIPE_SET_PATTERN; - write(audio_ctlpipe, &i, sizeof(i)); - write(audio_ctlpipe, &pattern, sizeof(pattern)); + gchar* uri = g_filename_to_uri(filename, NULL, NULL); + + gtk_recent_manager_add_item(rcmgr, uri); + g_free(uri); } static void -gui_load_callback (gint reply, - gpointer data) +gui_save(const gchar* data, gchar* localname, gboolean save_smpls, gboolean switch_needed) { - if(reply == 0) { - gui_load_xm((gchar*)data); - gui_auto_switch_page(); + gboolean need_free = FALSE; + + if (!localname) { + localname = gui_filename_from_utf8(data); + need_free = TRUE; + } + + if (!localname) + return; + + gui_statusbar_update(STATUS_SAVING_MODULE, TRUE); + if (XM_Save(xm, localname, data, save_smpls)) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Saving module failed"), FALSE); + gui_statusbar_update(STATUS_IDLE, FALSE); + } else { + if (switch_needed) + gui_auto_switch_page(); + gui_statusbar_update(STATUS_MODULE_SAVED, FALSE); + gui_update_title(data); + gui_recent_add_item(localname); + if (save_smpls) + history_save(); } + + if (need_free) + g_free(localname); } +void gui_save_current(void) +{ + if (current_filename) + gui_save(current_filename, NULL, TRUE, FALSE); + else + fileops_open_dialog(savemod); +} + +static const char* channelslabels[] = { N_("Mono"), N_("Stereo") }; +static const char* res_labels[] = { N_("8 bit"), N_("16 bit") }; +struct FormatDialog{ + gboolean is_stereo, is_16bit; + guint freq; + GtkWidget* config_dialog; + GtkWidget *prefs_channels_w[ARRAY_SIZE(channelslabels)], *prefs_res_w[ARRAY_SIZE(res_labels)]; + GtkTreeModel* model; +}; + static void -gui_save_callback (gint reply, - gpointer data) +prefs_channels_changed(GtkToggleButton* w, struct FormatDialog* self) { - if(reply == 0) { - statusbar_update(STATUS_SAVING_MODULE, TRUE); - if(XM_Save(xm, (gchar*)data, FALSE)) { - xm->modified = 0; - gui_auto_switch_page(); - statusbar_update(STATUS_MODULE_SAVED, FALSE); - gui_update_title ((gchar*)data); - } else { - statusbar_update(STATUS_IDLE, FALSE); - } + if (gtk_toggle_button_get_active(w)) { + gint curr; + + if ((curr = find_current_toggle(self->prefs_channels_w, ARRAY_SIZE(channelslabels))) >= 0) + self->is_stereo = curr; } } static void -gui_save_song_callback (gint reply, - gpointer data) +prefs_res_changed(GtkToggleButton* w, struct FormatDialog* self) { - if(reply == 0) { - statusbar_update(STATUS_SAVING_SONG, TRUE); - if(XM_Save(xm, (gchar*)data, TRUE)) { - gui_auto_switch_page(); - statusbar_update(STATUS_SONG_SAVED, FALSE); - gui_update_title ((gchar*)data); - } else { - statusbar_update(STATUS_IDLE, FALSE); - } + if (gtk_toggle_button_get_active(w)) { + gint curr; + + if ((curr = find_current_toggle(self->prefs_res_w, ARRAY_SIZE(res_labels))) >= 0) + self->is_16bit = curr; } } static void -gui_save_wav_callback (gint reply, - gpointer data) +prefs_mixfreq_changed(GtkComboBox* prefs_mixfreq, struct FormatDialog* self) { - if(reply == 0) { - int l = strlen(data); - audio_ctlpipe_id i = AUDIO_CTLPIPE_RENDER_SONG_TO_FILE; + GtkTreeIter iter; - gui_play_stop(); + if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(prefs_mixfreq), &iter)) + gtk_tree_model_get(self->model, &iter, 0, &self->freq, -1); +} - write(audio_ctlpipe, &i, sizeof(i)); - write(audio_ctlpipe, &l, sizeof(l)); - write(audio_ctlpipe, data, l + 1); - wait_for_player(); +static gboolean +format_dialog(struct FormatDialog* self, + const gchar* title, + const gboolean is_stereo, + const gboolean is_16bit, + const guint32 freq) +{ + gint response; + + if (!self->config_dialog) { + static const guint mixfreqs[] = { 8000, 11025, 16000, 22050, 32000, 44100, 48000, 64000, 88200, 96000 }; + GtkWidget *mainbox, *box2, *thing; + GtkListStore* ls; + GtkCellRenderer* cell; + GtkTreeIter iter; + guint i; + + self->is_stereo = is_stereo; + self->is_16bit = is_16bit; + self->freq = freq; + + self->config_dialog = gtk_dialog_new_with_buttons(_(title), GTK_WINDOW(mainwindow), + GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); + gui_dialog_adjust(self->config_dialog, GTK_RESPONSE_OK); + + mainbox = gtk_dialog_get_content_area(GTK_DIALOG(self->config_dialog)); + gtk_box_set_spacing(GTK_BOX(mainbox), 2); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Channels:")); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + make_radio_group_full_ext(channelslabels, box2, self->prefs_channels_w, FALSE, TRUE, + (void (*)())prefs_channels_changed, self, TRUE); + gui_set_radio_active(self->prefs_channels_w, self->is_stereo); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Resolution:")); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + make_radio_group_full_ext(res_labels, box2, self->prefs_res_w, FALSE, TRUE, + (void (*)())prefs_res_changed, self, TRUE); + gui_set_radio_active(self->prefs_res_w, self->is_16bit); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Frequency [Hz]:")); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + ls = gtk_list_store_new(1, G_TYPE_UINT); + self->model = GTK_TREE_MODEL(ls); + thing = gtk_combo_box_new_with_model(self->model); + g_object_unref(ls); + for (i = 0; i < ARRAY_SIZE(mixfreqs); i++) { + gtk_list_store_append(GTK_LIST_STORE(self->model), &iter); + gtk_list_store_set(GTK_LIST_STORE(self->model), &iter, 0, mixfreqs[i], -1); + } + cell = gtk_cell_renderer_text_new(); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(thing), cell, TRUE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(thing), cell, "text", 0, NULL); + gui_set_active_combo_item(thing, self->model, self->freq); + gtk_box_pack_end(GTK_BOX(box2), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "changed", + G_CALLBACK(prefs_mixfreq_changed), self); + gtk_widget_show_all(self->config_dialog); } + response = gtk_dialog_run(GTK_DIALOG(self->config_dialog)); + gtk_widget_hide(self->config_dialog); + + return response == GTK_RESPONSE_OK; } +#define SNDBUF_SIZE 16384 + +#if USE_SNDFILE || AUDIOFILE_VERSION static void -gui_shrink_callback (gint reply, - gpointer data) +save_wav(const gchar* fn, const gchar* path) { - if(!reply) { - st_shrink_pattern((XMPattern *)data); - gui_update_pattern_data(); - tracker_set_pattern(tracker, NULL); - tracker_set_pattern(tracker, (XMPattern *)data); - xm_set_modified(1); + static struct FormatDialog fd = {0}; + + gint8* sndbuf; + STMixerFormat format; + guint32 num_samples, num_rendered; +#if USE_SNDFILE + SNDFILE* outfile; + SF_INFO sfinfo; +#else + AFfilehandle outfile; +#endif + + if (!format_dialog(&fd, N_("File output"), + gui_settings.file_out_channels - 1, + gui_settings.file_out_resolution >> 4, + gui_settings.file_out_mixfreq)) + return; + gui_settings.file_out_channels = fd.is_stereo + 1; + gui_settings.file_out_resolution = (fd.is_16bit << 3) + 8; + gui_settings.file_out_mixfreq = fd.freq; + +#if USE_SNDFILE + sfinfo.channels = gui_settings.file_out_channels; + sfinfo.samplerate = gui_settings.file_out_mixfreq; + sfinfo.format = SF_FORMAT_WAV | + (gui_settings.file_out_resolution == 16 ? SF_FORMAT_PCM_16 : SF_FORMAT_PCM_U8); + + errno = 0; + outfile = sf_open(path, SFM_WRITE, &sfinfo); +#else + AFfilesetup outfilesetup; + + outfilesetup = afNewFileSetup(); + afInitFileFormat(outfilesetup, AF_FILE_WAVE); + afInitChannels(outfilesetup, AF_DEFAULT_TRACK, gui_settings.file_out_channels); + afInitRate(outfilesetup, AF_DEFAULT_TRACK, gui_settings.file_out_mixfreq); + afInitSampleFormat(outfilesetup, AF_DEFAULT_TRACK, + gui_settings.file_out_resolution == 16 ? AF_SAMPFMT_TWOSCOMP : AF_SAMPFMT_UNSIGNED, + gui_settings.file_out_resolution); + errno = 0; + outfile = afOpenFile(path, "w", outfilesetup); + if (outfile) + afFreeFileSetup(outfilesetup); +#endif + + if (!outfile) { + gui_errno_dialog(mainwindow, _("Can't open file for writing"), errno); + return; + } + + /* In case we're running setuid root... */ + if (chown(path, getuid(), getgid()) == -1) + gui_errno_dialog(mainwindow, _("Can't change file ownership"), errno); + + sndbuf = malloc(SNDBUF_SIZE); + if (!sndbuf) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Can't allocate mix buffer."), FALSE); + return; } + + gui_play_stop(); + audio_prepare_for_rendering(AUDIO_RENDER_SONG, 0, 0, 0, 0, 0); + + num_samples = (SNDBUF_SIZE >> (gui_settings.file_out_channels - 1)); +#if USE_SNDFILE + /* libsndfile can handle only 16-bit samples, even when it saves a 8-bit wav */ + num_samples = num_samples >> 1; +#else + num_samples = num_samples >> (gui_settings.file_out_resolution >> 4); + if (gui_settings.file_out_resolution == 16) { +#endif +#ifdef WORDS_BIGENDIAN + format = ST_MIXER_FORMAT_S16_BE; +#else + format = ST_MIXER_FORMAT_S16_LE; +#endif +#if !USE_SNDFILE + } else + format = ST_MIXER_FORMAT_U8; +#endif + format |= (gui_settings.file_out_channels == 2 ? ST_MIXER_FORMAT_STEREO : 0); + + do { + gint num_written; + + num_rendered = audio_mix(sndbuf, num_samples, gui_settings.file_out_mixfreq, format, FALSE, NULL); +#if USE_SNDFILE + num_written = sf_writef_short(outfile, (short int*)sndbuf, num_rendered); +#else + num_written = afWriteFrames(outfile, AF_DEFAULT_TRACK, sndbuf, num_rendered); +#endif + if (num_written != num_rendered) { + gui_errno_dialog(mainwindow, _("An error occured while writing to file"), errno); + break; + } + } while (num_rendered == num_samples); + + audio_cleanup_after_rendering(); +#if USE_SNDFILE + sf_close(outfile); +#else + afCloseFile(outfile); +#endif + g_free(sndbuf); } +#endif /* USE_SNDFILE || AUDIOFILE_VERSION */ -void -gui_shrink_pattern () +static void proc_stop(GtkWidget* w, gint id, GtkSpinner* s) { - XMPattern *patt = tracker->curpattern; + stop_process = TRUE; + gtk_spinner_stop(s); + gtk_widget_hide(w); +} - if(st_check_if_odd_are_not_empty(patt)) { - gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), - _("Odd pattern rows contain data which will be lost after shrinking.\n" - "Do you want to continue anyway?"), - gui_shrink_callback, - patt); - } else { - gui_shrink_callback(0, patt); +static gboolean proc_delete(void) +{ + return TRUE; +} + +static GtkWidget* +show_process_window(const gchar* text) +{ + static GtkWidget *dialog = NULL, *spinner, *label; + + if (!dialog) { + GtkWidget *vbox, *hbox; + + dialog = gtk_dialog_new_with_buttons("", GTK_WINDOW(mainwindow), + GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); + + vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + + hbox = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + label = gtk_label_new(""); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + + spinner = gtk_spinner_new(); + gtk_widget_set_size_request(spinner, 20, 20); + gtk_box_pack_start(GTK_BOX(hbox), spinner, FALSE, FALSE, 0); + gtk_widget_show_all(vbox); + + g_signal_connect(dialog, "delete_event", G_CALLBACK(proc_delete), NULL); + g_signal_connect(dialog, "response", G_CALLBACK(proc_stop), spinner); } + stop_process = FALSE; + gtk_label_set_text(GTK_LABEL(label), _(text)); + gtk_spinner_start(GTK_SPINNER(spinner)); + gtk_window_present(GTK_WINDOW(dialog)); + + return dialog; +} + +static void +gui_render_to_sample(audio_render_target what, + gint pattern, + gint patpos, + gint stoppos, + gint ch_start, + gint num_ch) +{ + static struct FormatDialog fd = {0}; + + GtkWidget* pw; + STMixerFormat format; + guint32 num_samples, num_rendered, length = 0; + STSampleChain* renderbufs = NULL; + + if (!format_dialog(&fd, N_("Sample rendering"), TRUE, TRUE, 44100)) + return; + format = fd.is_16bit ? ST_MIXER_FORMAT_S16_LE : ST_MIXER_FORMAT_S8; + if (fd.is_stereo) + format |= ST_MIXER_FORMAT_STEREO; + + gui_play_stop(); + audio_prepare_for_rendering(what, pattern, patpos, stoppos, ch_start, num_ch); + num_samples = (SNDBUF_SIZE >> (fd.is_16bit + fd.is_stereo)); + + pw = show_process_window(N_("Rendering")); + do { + STSampleChain *newbuf, *oldbuf; + + newbuf = malloc(sizeof(STSampleChain)); + if (!newbuf) { + gui_oom_error(); + sample_editor_clear_buffers(renderbufs); + return; + } + newbuf->next = NULL; + newbuf->data = malloc(SNDBUF_SIZE); + if (!newbuf->data) { + gui_oom_error(); + sample_editor_clear_buffers(renderbufs); + return; + } + if (!renderbufs) + renderbufs = newbuf; + else { + oldbuf->next = newbuf; + } + oldbuf = newbuf; + + num_rendered = audio_mix(newbuf->data, num_samples, fd.freq, format, FALSE, NULL); + newbuf->length = num_rendered << (fd.is_16bit + fd.is_stereo); + length += newbuf->length; + + while (gtk_events_pending()) + gtk_main_iteration(); + } while (num_rendered == num_samples && !stop_process); + gtk_widget_hide(pw); + + if (!stop_process) + sample_editor_chain_to_sample(renderbufs, length, format, fd.freq, TRUE, + N_(""), N_("rendered"), N_("Sample rendering")); + sample_editor_clear_buffers(renderbufs); + audio_cleanup_after_rendering(); +} + +void +gui_song_to_sample(void) { + gui_render_to_sample(AUDIO_RENDER_SONG, 0, 0, 0, 0, 0); +} + +void +gui_pattern_to_sample(void) { + gui_render_to_sample(AUDIO_RENDER_PATTERN, editing_pat, 0, -1, -1, -1); +} + +void +gui_track_to_sample(void) { + gui_render_to_sample(AUDIO_RENDER_TRACK, editing_pat, 0, -1, tracker->cursor_ch, 1); } +void +gui_block_to_sample(void) { + gint ch_start, row_start, n_ch, n_rows; + + tracker_get_selection_rect(tracker, &ch_start, &row_start, &n_ch, &n_rows); + if (ch_start >= 0 && row_start >= 0) + gui_render_to_sample(AUDIO_RENDER_BLOCK, editing_pat, + row_start, row_start + n_rows, ch_start, n_ch); +} + +typedef struct { + gint len, channels, pat; + /* Manual 2D indexing is supposed */ + XMNote notes[1]; +} PatternArg; + static void -gui_expand_callback (gint reply, gpointer data) +gui_pattern_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) { - if(!reply) { - st_expand_pattern((XMPattern *)data); - gui_update_pattern_data(); - tracker_set_pattern(tracker, NULL); - tracker_set_pattern(tracker, (XMPattern *)data); - xm_set_modified(1); + Tracker* t; + PatternArg* pa = arg; + XMNote* tmp_notes; + gint i, tmp_length, src_chaddr, dst_chaddr; + XMPattern* pattern; + + g_assert(IS_TRACKER(data)); + t = TRACKER(data); + + pattern = (pa->pat < 0) ? t->curpattern : &xm->patterns[pa->pat]; + tmp_notes = g_malloc(MAX(pattern->length, pa->len) * pa->channels * sizeof(XMNote)); + + /* Current pattern is already set by undo routines */ + tmp_length = pa->len; + pa->len = pattern->length; + st_set_pattern_length(pattern, tmp_length); + for (i = 0, src_chaddr = 0, dst_chaddr = 0; i < pa->channels; + i++, dst_chaddr += pa->len, src_chaddr += tmp_length) { + memcpy(&tmp_notes[dst_chaddr], pattern->channels[i], pa->len * sizeof(XMNote)); + memcpy(pattern->channels[i], &pa->notes[src_chaddr], tmp_length * sizeof(XMNote)); } + memcpy(pa->notes, tmp_notes, pa->len * pa->channels * sizeof(XMNote)); + + if (pa->pat >= 0 && redo) + gui_set_current_pattern(pa->pat, TRUE); + gui_update_pattern_data(); + if (pa->pat < 0) { + tracker_set_pattern(tracker, NULL); + tracker_set_pattern(tracker, pattern); + } + + g_free(tmp_notes); } void -gui_expand_pattern () +gui_log_pattern(XMPattern* pattern, const gchar* title, const gint pat, + gint len, gint alloc_len) +{ + gsize asize, chansize; + PatternArg* arg; + gint i, chaddr; + + len = len > 0 ? len : pattern->length; + alloc_len = alloc_len > 0 ? alloc_len : pattern->length; + g_assert(len <= alloc_len); + + chansize = len * sizeof(XMNote); + asize = sizeof(PatternArg) + (alloc_len * xm->num_channels - 1) * sizeof(XMNote); + arg = g_malloc(asize); + + arg->len = len; + arg->pat = pat; + arg->channels = xm->num_channels; + for (i = 0, chaddr = 0; i < xm->num_channels; i++, chaddr += len) + memcpy(&arg->notes[chaddr], pattern->channels[i], chansize); + + history_log_action(HISTORY_ACTION_POINTER, _(title), + HISTORY_FLAG_LOG_POS | HISTORY_FLAG_LOG_PAT | + HISTORY_SET_PAGE(NOTEBOOK_PAGE_TRACKER), + gui_pattern_undo, tracker, asize, arg); +} + +void gui_find_unused_pattern(void) +{ + gint n = st_find_first_unused_and_empty_pattern(xm); + + if (n != -1) + gui_set_current_pattern(n, TRUE); +} + +void gui_copy_to_unused_pattern(void) +{ + gint n = st_find_first_unused_and_empty_pattern(xm); + XMPattern* epat = &xm->patterns[editing_pat]; + + if (n != -1 && !st_is_empty_pattern(epat)) { + XMPattern* newpat = &xm->patterns[n]; + + gui_log_pattern(newpat, N_("Pattern duplicating"), n, + newpat->length, MAX(newpat->length, epat->length)); + gui_play_stop(); + st_copy_pattern(newpat, epat); + gui_set_current_pattern(n, TRUE); + } +} + +static void +gui_shrink_callback(XMPattern* data) +{ + gui_log_pattern(data, N_("Pattern shrinking"), -1, data->length, data->length); + st_shrink_pattern(data); + gui_update_pattern_data(); + tracker_set_pattern(tracker, NULL); + tracker_set_pattern(tracker, data); +} + +void gui_shrink_pattern() { - XMPattern *patt = tracker->curpattern; + XMPattern* patt = tracker->curpattern; - if(patt->length > 128) { - gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), - _("The pattern is too long for expanding.\n" - "Some data at the end of the pattern will be lost.\n" - "Do you want to continue anyway?"), - gui_expand_callback, - patt); + if (st_check_if_odd_are_not_empty(patt)) { + if (gui_ok_cancel_modal(mainwindow, + _("Odd pattern rows contain data which will be lost after shrinking.\n" + "Do you want to continue anyway?"))) + gui_shrink_callback(patt); } else { - gui_expand_callback(0, patt); + gui_shrink_callback(patt); } } static void -gui_pattern_length_correct (gint reply, gpointer data) +gui_expand_callback(XMPattern* data) +{ + gui_log_pattern(data, N_("Pattern expanding"), -1, + data->length, MIN(data->length << 1, 256)); + st_expand_pattern(data); + gui_update_pattern_data(); + tracker_set_pattern(tracker, NULL); + tracker_set_pattern(tracker, data); +} + +void gui_expand_pattern() +{ + XMPattern* patt = tracker->curpattern; + + if (patt->length > 128) { + if (gui_ok_cancel_modal(mainwindow, + _("The pattern is too long for expanding.\n" + "Some data at the end of the pattern will be lost.\n" + "Do you want to continue anyway?"))) + gui_expand_callback(patt); + } else { + gui_expand_callback(patt); + } +} + +static gboolean +gui_pattern_length_correct(FILE* f, int length, gint reply) { - XMPattern *patt = tracker->curpattern; - struct f_n_l *ddata = (struct f_n_l*) data; - int length = ddata->length; - FILE *f = ddata->file; + XMPattern* patt = tracker->curpattern; switch (reply) { - case 0: /* Yes! */ - st_set_pattern_length (patt, length); - gui_update_pattern_data (); - case 1: /* No! */ - if (xm_xp_load (f, length, patt, xm)) { - tracker_set_pattern (tracker, NULL); - tracker_set_pattern (tracker, patt); - xm_set_modified(1); - } + case GTK_RESPONSE_YES: /* Yes! */ + st_set_pattern_length(patt, length); + gui_update_pattern_data(); /* Falling through */ + case GTK_RESPONSE_NO: /* No! */ + return TRUE; case 2: /* Cancel, do nothing */ default: - break; + break; + } + return FALSE; +} + +static gboolean +load_xm_full(const gchar* fn, const gchar* localpath) +{ + gboolean success = TRUE; + + static GtkWidget* dialog = NULL; + + if (history_get_modified()) { + gint response; + + if (!dialog) + dialog = gtk_message_dialog_new(GTK_WINDOW(mainwindow), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL, + _("Are you sure you want to free the current project?\nAll changes will be lost!")); + + response = gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_hide(dialog); + if (response == GTK_RESPONSE_OK) { + success = gui_load_xm(fn, localpath); + gui_auto_switch_page(); + } + } else { + success = gui_load_xm(fn, localpath); + gui_auto_switch_page(); + } + + return success; +} + +static inline void +load_xm(const gchar* fn, const gchar* localpath) +{ + load_xm_full(fn, localpath); +} + +static void +save_song(const gchar* fn, gchar* localname) +{ + gui_save(fn, localname, TRUE, TRUE); /* with samples */ +} + +static void +save_xm(const gchar* fn, gchar* localname) +{ + gui_save(fn, localname, FALSE, TRUE); /* without samples */ +} + +static void +save_pat(gchar* fn, gchar* localname) +{ + xm_xp_save(localname, fn, tracker->curpattern, xm); +} + +static void +load_pat(const gchar* fn, const gchar* localname) +{ + gint length; + gboolean will_load; + FILE* f; + static GtkWidget *dialog = NULL; + + XMPattern* patt = tracker->curpattern; + + f = gui_fopen(localname, fn, "rb"); + if (!f) + return; + + if (xm_xp_load_header(f, &length)) { + gint oldlength = patt->length; + + if (length == oldlength) + will_load = TRUE; + else { + gint response; + + if (!dialog) { + dialog = gtk_message_dialog_new(GTK_WINDOW(mainwindow), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, + _("The length of the pattern being loaded doesn't match with that of current pattern in module.\n" + "Do you want to change the current pattern length?")); + gtk_dialog_add_buttons(GTK_DIALOG(dialog), GTK_STOCK_YES, GTK_RESPONSE_YES, GTK_STOCK_NO, GTK_RESPONSE_NO, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); + } + + response = gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_hide(dialog); + will_load = gui_pattern_length_correct(f, length, response); + } + if (will_load) { + gui_log_pattern(patt, N_("Pattern loading"), -1, oldlength, MAX(length, oldlength)); + if (xm_xp_load(f, length, patt, xm)) { + tracker_set_pattern(tracker, NULL); + tracker_set_pattern(tracker, patt); + } + } } - fclose (f); + fclose(f); } static void -file_selected (GtkWidget *w, - GtkFileSelection *fs) +current_instrument_changed(GtkSpinButton* spin) { - static struct f_n_p fnp; /* we need static here 'cause we pass these */ - static struct f_n_l fnl; /* structures to callback functions */ - int length; - - gchar *fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs)); - - gtk_widget_hide(GTK_WIDGET(fs)); - - if(!file_selection_is_valid(fn)) { - /* No file was actually selected. */ - gnome_error_dialog(_("No file selected.")); - return; - } - - if(fs == GTK_FILE_SELECTION(fileops_dialogs[DIALOG_LOAD_MOD])) { - file_selection_save_path(fn, gui_settings.loadmod_path); - if(xm->modified) { - gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), - _("Are you sure you want to free the current project?\nAll changes will be lost!"), - gui_load_callback, - fn); - } else { - gui_load_callback(0, fn); - } - } else if(fs == GTK_FILE_SELECTION(fileops_dialogs[DIALOG_SAVE_MOD])) { - FILE *f = fopen(fn, "r"); - - file_selection_save_path(fn, gui_settings.savemod_path); - - if(f != NULL) { - fclose(f); - gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), - _("Are you sure you want to overwrite the file?"), - gui_save_callback, - fn); - } else { - gui_save_callback(0, fn); - fileops_refresh_list(fs, FALSE); - } - } else if(fs == GTK_FILE_SELECTION(fileops_dialogs[DIALOG_SAVE_SONG_AS_XM])) { - FILE *f = fopen(fn, "r"); - - file_selection_save_path(fn, gui_settings.savesongasxm_path); - - if(f != NULL) { - fclose(f); - gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), - _("Are you sure you want to overwrite the file?"), - gui_save_song_callback, - fn); - } else { - gui_save_song_callback(0, fn); - fileops_refresh_list(fs, FALSE); - } - } else if(fs == GTK_FILE_SELECTION(fileops_dialogs[DIALOG_SAVE_MOD_AS_WAV])) { - FILE *f = fopen(fn, "r"); - - file_selection_save_path(fn, gui_settings.savemodaswav_path); - - if(f != NULL) { - fclose(f); - gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), - _("Are you sure you want to overwrite the file?"), - gui_save_wav_callback, - fn); - } else { - gui_save_wav_callback(0, fn); - fileops_refresh_list(fs, FALSE); - } - } else if(fs == GTK_FILE_SELECTION(fileops_dialogs[DIALOG_SAVE_PATTERN])) { - FILE *f = fopen (fn, "r"); - - file_selection_save_path(fn, gui_settings.savepat_path); - - fnp.name = fn; - fnp.pattern = tracker->curpattern; - fnp.xm = xm; - if(f != NULL) { - fclose(f); - gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), - _("Are you sure you want to overwrite the file?"), - xm_xp_save, - &fnp); - } else { - xm_xp_save (0, &fnp); - fileops_refresh_list(fs, FALSE); - } - } else if(fs == GTK_FILE_SELECTION(fileops_dialogs[DIALOG_LOAD_PATTERN])) { - XMPattern *patt = tracker->curpattern; - FILE *f = fopen (fn, "r"); - - file_selection_save_path(fn, gui_settings.loadpat_path); - - if (!f) gnome_error_dialog (_("Error when opening pattern file!")); - else { if (xm_xp_load_header (f, &length)) { - if (length == patt->length) { - if (xm_xp_load (f, length, patt, xm)) { - tracker_set_pattern (tracker, NULL); - tracker_set_pattern (tracker, patt); - xm_set_modified(1); - } - fclose (f); - } else { - fnl.file = f; - fnl.length = length; - gui_yes_no_cancel_modal (GTK_WIDGET(mainwindow), - _("The length of the pattern being loaded doesn't match with that of current pattern in module.\nDo you want to change the current pattern length?"), - gui_pattern_length_correct, - &fnl); - } - } else fclose (f); } - } -} - -static void -current_instrument_changed (GtkSpinButton *spin) -{ - int m = xm_get_modified(); - STInstrument *i = &xm->instruments[gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin))-1]; - STSample *s = &i->samples[gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(cursmpl_spin))]; + int ins; + + STInstrument* i = &xm->instruments[ins = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin)) - 1]; + STSample* s = &i->samples[gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(cursmpl_spin))]; - instrument_editor_set_instrument(i); + instrument_editor_set_instrument(i, ins); sample_editor_set_sample(s); - modinfo_set_current_instrument(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin)) - 1); - xm_set_modified(m); + modinfo_set_current_instrument(ins); } static void -current_instrument_name_changed (void) +current_instrument_name_changed(void) { - STInstrument *i = &xm->instruments[gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin))-1]; + gchar* term; + gint curins; + + STInstrument* i = &xm->instruments[curins = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin)) - 1]; + + history_log_entry(GTK_ENTRY(gui_curins_name), _("Instrument name changing"), 22 * 4, + HISTORY_FLAG_LOG_INS, i->utf_name); - strncpy(i->name, gtk_entry_get_text(GTK_ENTRY(gui_curins_name)), 22); - i->name[22] = 0; - modinfo_update_instrument(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin))-1); - xm_set_modified(1); + g_utf8_strncpy(i->utf_name, gtk_entry_get_text(GTK_ENTRY(gui_curins_name)), 22); + term = g_utf8_offset_to_pointer(i->utf_name, 23); + term[0] = 0; + i->needs_conversion = TRUE; + modinfo_update_instrument(curins); } static void -current_sample_changed (GtkSpinButton *spin) +current_sample_changed(GtkSpinButton* spin) { - int m = xm_get_modified(); - STInstrument *i = &xm->instruments[gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin))-1]; - STSample *s = &i->samples[gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(cursmpl_spin))]; + int smpl; + + STInstrument* i = &xm->instruments[gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin)) - 1]; + STSample* s = &i->samples[smpl = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(cursmpl_spin))]; - gtk_entry_set_text(GTK_ENTRY(gui_cursmpl_name), s->name); sample_editor_set_sample(s); - modinfo_set_current_sample(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(cursmpl_spin))); - xm_set_modified(m); + modinfo_set_current_sample(smpl); } static void -current_sample_name_changed (void) +current_sample_name_changed(void) { - STInstrument *i = &xm->instruments[gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin))-1]; - STSample *s = &i->samples[gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(cursmpl_spin))]; + gchar* term; + gint cursmpl; + STInstrument* i = &xm->instruments[gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin)) - 1]; + STSample* s = &i->samples[cursmpl = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(cursmpl_spin))]; + + history_log_entry(GTK_ENTRY(gui_cursmpl_name), _("Sample name changing"), 22 * 4, + HISTORY_FLAG_LOG_INS | HISTORY_FLAG_LOG_SMP, s->utf_name); - strncpy(s->name, gtk_entry_get_text(GTK_ENTRY(gui_cursmpl_name)), 22); - s->name[22] = 0; - modinfo_update_sample(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(cursmpl_spin))); - xm_set_modified(1); + g_utf8_strncpy(s->utf_name, gtk_entry_get_text(GTK_ENTRY(gui_cursmpl_name)), 22); + term = g_utf8_offset_to_pointer(i->utf_name, 23); + term[0] = 0; + s->needs_conversion = TRUE; + modinfo_update_sample(cursmpl); } -static gboolean -gui_handle_standard_keys (int shift, - int ctrl, - int alt, - guint32 keyval) +static void +spin_db_changed(GtkSpinButton* db, GtkAdjustment* adj) +{ + gtk_adjustment_set_value(adj, 20.0 - gtk_spin_button_get_value(db)); +} + +void gui_go_to_page(gint page) +{ + if (notebook_current_page != page) { + if (notebook_current_page == NOTEBOOK_PAGE_FILE) + fileops_restore_subpage(); + gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), + page); + } +} + +gboolean +gui_handle_standard_keys(int shift, + int ctrl, + int alt, + guint32 keyval, + gint hwcode) { gboolean handled = FALSE, b; + gint m = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt), hwcode); int currpos; + if (KEYS_MEANING_TYPE(m) == KEYS_MEANING_FUNC) { + switch (KEYS_MEANING_VALUE(m)) { + case KEY_PLAY_SNG: + play_song(GINT_TO_POINTER(FALSE)); + handled = TRUE; + break; + case KEY_REC_SNG: + play_song(GINT_TO_POINTER(FALSE)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editing_toggle), TRUE); + handled = TRUE; + break; + case KEY_PLAY_PAT: + play_pattern(); + handled = TRUE; + break; + case KEY_REC_PAT: + play_pattern(); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editing_toggle), TRUE); + handled = TRUE; + break; + case KEY_PLAY_CUR: + play_song(GINT_TO_POINTER(TRUE)); + handled = TRUE; + break; + case KEY_REC_CUR: + play_song(GINT_TO_POINTER(TRUE)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editing_toggle), TRUE); + handled = TRUE; + break; + default: + break; + } + if (handled) + return TRUE; + } + switch (keyval) { case GDK_F1 ... GDK_F7: - if(!shift && !ctrl && !alt) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_octave), keyval - GDK_F1); - handled = TRUE; - } - break; + if (!shift && !ctrl && !alt) { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_octave), keyval - GDK_F1); + handled = TRUE; + } + break; case '1' ... '8': - if(ctrl) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_jump), keyval - '0'); - handled = TRUE; - } - if(alt) { - switch(keyval) - { - case '1' ... '5': - gtk_notebook_set_page(GTK_NOTEBOOK(notebook), keyval - '1'); + if (notebook_current_page != NOTEBOOK_PAGE_SAMPLE_EDITOR && ctrl) { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_jump), keyval - '0'); + handled = TRUE; + } + if (alt) { + switch (keyval) { + case '1' ... '5': + gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), keyval - '1'); + break; + default: break; - default: - break; } - handled = TRUE; + handled = TRUE; + } + break; + case GDK_Page_Up: + if (ctrl) { + /* previous position */ + currpos = playlist_get_position(playlist) - (shift ? 10 : 1); + if (currpos < 0) + currpos = 0; + + playlist_set_position(playlist, currpos); + handled = TRUE; + } + break; + case GDK_Page_Down: + if (ctrl) { + /* next position */ + currpos = playlist_get_position(playlist) + (shift ? 10 : 1); + if (currpos >= xm->song_length) + currpos = xm->song_length - 1; + + playlist_set_position(playlist, currpos); + handled = TRUE; } - break; + break; + case GDK_Home: + if (ctrl) { + /* first position */ + playlist_set_position(playlist, 0); + handled = TRUE; + } + break; + case GDK_End: + if (ctrl) { + /* first position */ + playlist_set_position(playlist, xm->song_length - 1); + handled = TRUE; + } + break; case GDK_Left: - if(ctrl) { - /* previous instrument */ - offset_current_instrument(shift ? -5 : -1); - handled = TRUE; - } else if(alt) { - /* previous pattern */ - offset_current_pattern(shift ? -10 : -1); - handled = TRUE; - } else if(shift){ - /* previous position */ - currpos = playlist_get_position (playlist); - if((--currpos) >= 0 ) { - playlist_set_position (playlist, currpos); - handled = TRUE; - } - } - break; + if (ctrl) { + /* previous instrument */ + gui_offset_current_instrument(shift ? -5 : -1); + handled = TRUE; + } else if (alt) { + /* previous pattern */ + offset_current_pattern(shift ? -10 : -1); + handled = TRUE; + } + break; case GDK_Right: - if(ctrl) { - /* next instrument */ - offset_current_instrument(shift ? 5 : 1); - handled = TRUE; - } else if(alt) { - /* next pattern */ - offset_current_pattern(shift ? 10 : 1); - handled = TRUE; - } else if(shift){ - /* next position */ - currpos = playlist_get_position (playlist); - if ((++currpos) < xm->song_length ) { - playlist_set_position (playlist, currpos); - handled = TRUE; - } + if (ctrl) { + /* next instrument */ + gui_offset_current_instrument(shift ? 5 : 1); + handled = TRUE; + } else if (alt) { + /* next pattern */ + offset_current_pattern(shift ? 10 : 1); + handled = TRUE; } - break; + break; case GDK_Up: - if(ctrl) { - /* next sample */ - offset_current_sample(shift ? 4 : 1); - handled = TRUE; - } - break; + if (ctrl) { + /* next sample */ + gui_offset_current_sample(shift ? 4 : 1); + handled = TRUE; + } + break; case GDK_Down: - if(ctrl) { - /* previous sample */ - offset_current_sample(shift ? -4 : -1); - handled = TRUE; - } - break; - case GDK_Alt_R: - case GDK_Meta_R: - case GDK_Super_R: - case GDK_Hyper_R: - case GDK_Mode_switch: /* well... this is X :D */ - case GDK_Multi_key: - case GDK_ISO_Level3_Shift: - play_pattern(); - if(shift) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editing_toggle), TRUE); - handled = TRUE; - break; - case GDK_Control_R: - play_song(); - if(shift) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editing_toggle), TRUE); - handled = TRUE; - break; - case GDK_Menu: - play_current_pattern_row(); - break; + if (ctrl) { + /* previous sample */ + gui_offset_current_sample(shift ? -4 : -1); + handled = TRUE; + } + break; case ' ': - if(ctrl || alt || shift) + if (alt || shift) + break; + + handled = TRUE; + + b = GUI_ENABLED; + if (!b) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editing_toggle), FALSE); + gui_play_stop(); + if (ctrl) break; - b = GUI_ENABLED; - if (!b) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editing_toggle), FALSE); - - gui_play_stop(); - if(notebook_current_page != NOTEBOOK_PAGE_SAMPLE_EDITOR - && notebook_current_page != NOTEBOOK_PAGE_INSTRUMENT_EDITOR - && notebook_current_page != NOTEBOOK_PAGE_FILE - && notebook_current_page != NOTEBOOK_PAGE_MODULE_INFO) { - if(b) { - /* toggle editing mode (only if we haven't been in playing mode) */ - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(editing_toggle), !GUI_EDITING); - } - } - handled = TRUE; - break; + + if (notebook_current_page == NOTEBOOK_PAGE_TRACKER && b) + /* toggle editing mode (only if we haven't been in playing mode) */ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editing_toggle), !GUI_EDITING); + + /* Hmm, maybe handle keyevents by the pages first and only than by the default GUI handler? */ + if (notebook_current_page == NOTEBOOK_PAGE_MODULE_INFO) + modinfo_stop_cycling(); + break; case GDK_Escape: - if(ctrl || alt || shift) + if (ctrl || alt || shift || notebook_current_page == NOTEBOOK_PAGE_FILE) break; - /* toggle editing mode, even if we're in playing mode */ - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(editing_toggle), !GUI_EDITING); - handled = TRUE; - break; + /* toggle editing mode, even if we're in playing mode */ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editing_toggle), !GUI_EDITING); + handled = TRUE; + break; + default: + break; } return handled; } static int -keyevent (GtkWidget *widget, - GdkEventKey *event, - gpointer data) -{ - static gboolean (*handle_page_keys[])(int,int,int,guint32,gboolean) = { - fileops_page_handle_keys, - track_editor_handle_keys, - instrument_editor_handle_keys, - sample_editor_handle_keys, - modinfo_page_handle_keys, +keyevent(GtkWidget* widget, + GdkEventKey* event, + gpointer data) +{ + static gboolean (*handle_page_keys[])(int, int, int, guint32, gboolean) = { + fileops_page_handle_keys, + track_editor_handle_keys, + instrument_editor_handle_keys, + sample_editor_handle_keys, + modinfo_page_handle_keys, }; gboolean pressed = (gboolean)GPOINTER_TO_INT(data); gboolean handled = FALSE; gboolean entry_focus = GTK_IS_ENTRY(GTK_WINDOW(mainwindow)->focus_widget); - if(!entry_focus && GTK_WIDGET_VISIBLE(notebook)) { - int shift = event->state & GDK_SHIFT_MASK; - int ctrl = event->state & GDK_CONTROL_MASK; - int alt = event->state & GDK_MOD1_MASK; - - if(pressed) - handled = gui_handle_standard_keys(shift, ctrl, alt, event->keyval); - handled = handled || handle_page_keys[notebook_current_page](shift, ctrl, alt, event->keyval, pressed); - - if(!handled) switch(event->keyval) { - /* from gtk+-1.2.8's gtkwindow.c. These keypresses need to + if (!entry_focus && gtk_widget_get_visible(notebook)) { + int shift = event->state & GDK_SHIFT_MASK; + int ctrl = event->state & GDK_CONTROL_MASK; + int alt = event->state & GDK_MOD1_MASK; + + if (pressed) + handled = gui_handle_standard_keys(shift, ctrl, alt, event->keyval, event->hardware_keycode); + handled = handled || handle_page_keys[notebook_current_page](shift, ctrl, alt, event->keyval, pressed); + + if (!handled) + switch (event->keyval) { + /* from gtk+-1.2.8's gtkwindow.c. These keypresses need to be stopped in any case. */ - case GDK_Up: - case GDK_Down: - case GDK_Left: - case GDK_Right: - case GDK_KP_Up: - case GDK_KP_Down: - case GDK_KP_Left: - case GDK_KP_Right: - case GDK_Tab: - case GDK_ISO_Left_Tab: - handled = TRUE; - } - - if(handled) { - if(pressed) { - gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_press_event"); - } else { - gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_release_event"); - } - } + case GDK_Up: + case GDK_Down: + case GDK_Left: + case GDK_Right: + case GDK_KP_Up: + case GDK_KP_Down: + case GDK_KP_Left: + case GDK_KP_Right: + case GDK_Tab: + case GDK_ISO_Left_Tab: + handled = TRUE; + break; + /* It's easier to do it here rather than in file-operations.c */ + case GDK_Escape: + if (notebook_current_page == NOTEBOOK_PAGE_FILE) + gui_go_to_page(notebook_prev_page); + break; + } + + if (handled) { + if (pressed) { + g_signal_stop_emission_by_name(G_OBJECT(widget), "key-press-event"); + } else { + g_signal_stop_emission_by_name(G_OBJECT(widget), "key-release-event"); + } + } } else { - if(pressed) { - switch(event->keyval) { - case GDK_Tab: - case GDK_Return: - gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_press_event"); - gtk_window_set_focus(GTK_WINDOW(mainwindow), NULL); - break; - } - } + if (pressed) { + switch (event->keyval) { + case GDK_Tab: + g_signal_stop_emission_by_name(G_OBJECT(widget), "key-press-event"); + gui_unset_focus(); + break; + case GDK_Return: + case GDK_KP_Enter: + if (notebook_current_page == NOTEBOOK_PAGE_FILE) { + GtkWidget* parent = GTK_WINDOW(mainwindow)->focus_widget; + + if (GTK_IS_ENTRY(parent) && /* File name entry */ + !strncmp("GtkFileChooserEntry", gtk_widget_get_name(parent), 19)) + fileops_enter_pressed(); + else + /* Checking if it is the directory creation entry. In this case we shouldn't + block signal propagation */ + do { + parent = gtk_widget_get_parent(parent); + if (parent && GTK_IS_FILE_CHOOSER(parent)) + break; + } while (parent); + /* Other entry having GtkFileChooser as a parent --- seems to be + the directory creation entry */ + if (parent) + /* Leaving switch {} without stopping signal propagation */ + break; + } + g_signal_stop_emission_by_name(G_OBJECT(widget), "key-press-event"); + gui_unset_focus(); + break; + } + } } - return TRUE; + return handled; } static void -gui_playlist_position_changed (Playlist *p, - int newpos) +gui_playlist_position_changed(Playlist* p, + int newpos) { - if(gui_playing_mode == PLAYING_SONG) { - // This will only be executed when the user changes the song position manually - event_waiter_start(audio_songpos_ew); - gui_mixer_set_songpos(newpos); + if (gui_playing_mode == PLAYING_SONG) { + // This will only be executed when the user changes the song position manually + event_waiter_start(audio_songpos_ew); + gui_mixer_set_songpos(newpos); } else { - if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_lock_editpat))) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_editpat), - playlist_get_nth_pattern(p, newpos)); - } + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_lock_editpat))) { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_editpat), + playlist_get_nth_pattern(p, newpos)); + } } } static void -gui_playlist_restart_position_changed (Playlist *p, - int pos) +restart_pos_undo(const gint smp, const gint ins, const gboolean redo, + gpointer arg, gpointer data) +{ + gint tmp_value; + gint* value = arg; + + g_assert(IS_PLAYLIST(data)); + + tmp_value = playlist_get_restart_position(PLAYLIST(data)); + playlist_set_restart_position(PLAYLIST(data), *value); + *value = tmp_value; +} + +static void +gui_playlist_restart_position_changed(Playlist* p, + int pos) { + history_log_action(HISTORY_ACTION_INT, _("Restart position changing"), + HISTORY_FLAG_COLLATABLE, restart_pos_undo, p, 0, xm->restart_position); xm->restart_position = pos; - xm_set_modified(1); } static void -gui_playlist_entry_changed (Playlist *p, - int pos, - int pat) +playlist_entry_undo(const gint smp, const gint ins, const gboolean redo, + gpointer arg, gpointer data) { - int i; + gint tmp_value, pos; + gint* value = arg; + Playlist* p; - if(pos != -1) { - xm->pattern_order_table[pos] = pat; - if(pos == playlist_get_position(p) - && !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_lock_editpat))) { - gui_set_current_pattern(pat); - } - } else { - for(i = 0; i < xm->song_length; i++) { - xm->pattern_order_table[i] = playlist_get_nth_pattern(p, i); - } - } + g_assert(IS_PLAYLIST(data)); + p = PLAYLIST(data); + pos = playlist_get_position(p); - xm_set_modified(1); + tmp_value = playlist_get_nth_pattern(p, pos); + playlist_set_nth_pattern(p, pos, *value); + xm->pattern_order_table[pos] = *value; + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_lock_editpat))) + gui_set_current_pattern(*value, TRUE); + *value = tmp_value; } static void -gui_playlist_song_length_changed (Playlist *p, - int length) +gui_playlist_entry_changed(Playlist* p, + int pos, + int pat) +{ + history_log_action(HISTORY_ACTION_INT, _("Pattern number changing"), + HISTORY_FLAG_COLLATABLE | HISTORY_FLAG_LOG_POS, + playlist_entry_undo, p, 0, xm->pattern_order_table[pos]); + xm->pattern_order_table[pos] = pat; + if (pos == playlist_get_position(p) + && !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_lock_editpat))) { + gui_set_current_pattern(pat, TRUE); + } +} + +struct PlaylistState { + gint length, restartpos, pos, dest, src; + guint8 pot[256]; +}; + +static void +playlist_total_undo(const gint smp, const gint ins, const gboolean redo, + gpointer arg, gpointer data) { + gint tmp_value, old_length; + Playlist* p; + struct PlaylistState* state = arg; + guint8* pot = alloca(xm->song_length); + + g_assert(IS_PLAYLIST(data)); + p = PLAYLIST(data); + + memcpy(pot, p->patterns, xm->song_length * sizeof(p->patterns[0])); + playlist_freeze(p); + playlist_freeze_signals(p); + playlist_set_length(p, state->length); + playlist_thaw_signals(p); + memcpy(p->patterns, state->pot, state->length * sizeof(p->patterns[0])); + old_length = xm->song_length; + xm->song_length = state->length; + memcpy(xm->pattern_order_table, state->pot, state->length * sizeof(p->patterns[0])); + state->length = old_length; + tmp_value = playlist_get_restart_position(p); + playlist_set_restart_position(p, state->restartpos); + state->restartpos = tmp_value; + tmp_value = playlist_get_position(p); + playlist_set_position(p, state->pos); + playlist_freeze_signals(p); + playlist_set_nth_pattern(p, state->pos, p->patterns[state->pos]); + playlist_thaw_signals(p); + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle_lock_editpat))) + gui_set_current_pattern(p->patterns[state->pos], TRUE); + state->pos = tmp_value; + playlist_thaw(p); + memcpy(state->pot, pot, old_length * sizeof(p->patterns[0])); + if (state->dest >= 0) { + if (redo) + st_copy_pattern(&xm->patterns[state->dest], &xm->patterns[state->src]); + else + st_clear_pattern(&xm->patterns[state->dest]); + } +} + +static void +gui_playlist_song_length_changed(Playlist* p, + gint length, gint restartpos) +{ + /* Playlist length can be changed from some different operations, so I (yaliaev) + have regarded to log each change separately without collation */ + struct PlaylistState* arg = g_new(struct PlaylistState, 1); + + arg->length = xm->song_length; + arg->restartpos = xm->restart_position; + arg->pos = playlist_get_position(p); + arg->dest = -1; + memcpy(arg->pot, xm->pattern_order_table, arg->length * sizeof(p->patterns[0])); + history_log_action(HISTORY_ACTION_POINTER, _("Pattern sequence modification"), + 0, playlist_total_undo, p, sizeof(struct PlaylistState), arg); + xm->song_length = length; - gui_playlist_entry_changed(p, -1, -1); + xm->restart_position = restartpos; + memcpy(xm->pattern_order_table, p->patterns, length * sizeof(p->patterns[0])); } static void -gui_editpat_changed (GtkSpinButton *spin) +gui_editpat_changed(GtkSpinButton* spin) { int n = gtk_spin_button_get_value_as_int(spin); - if(n != editing_pat) { - gui_set_current_pattern(n); - - /* If we are in 'playing pattern' mode and asynchronous + if (n != editing_pat) { + /* If we are in 'playing pattern' mode and asynchronous * editing is disabled, make the audio thread jump to the new * pattern, too. I think it would be cool to have this for * 'playing song' mode, too, but then modifications in * gui_update_player_pos() will be necessary. */ - if(gui_playing_mode == PLAYING_PATTERN && !ASYNCEDIT) { - gui_mixer_set_pattern(n); - } + if (gui_playing_mode == PLAYING_PATTERN && !ASYNCEDIT) { + gui_mixer_set_pattern(n); + } else + gui_set_current_pattern(n, FALSE); } } static void -gui_patlen_changed (GtkSpinButton *spin) +gui_patlen_changed(GtkSpinButton* spin) { int n = gtk_spin_button_get_value_as_int(spin); - XMPattern *pat = &xm->patterns[editing_pat]; + XMPattern* pat = &xm->patterns[editing_pat]; - if(n != pat->length) { - st_set_pattern_length(pat, n); - tracker_set_pattern(tracker, NULL); - tracker_set_pattern(tracker, pat); - xm_set_modified(1); + if (n != pat->length) { + history_log_spin_button(spin, _("Pattern length setting"), + 0, pat->length); + st_set_pattern_length(pat, n); + tracker_set_pattern(tracker, NULL); + tracker_set_pattern(tracker, pat); } } static void -gui_numchans_changed (GtkSpinButton *spin) +gui_numchans_changed(GtkSpinButton* spin) { int n = gtk_spin_button_get_value_as_int(spin); - if(n & 1) { - gtk_spin_button_set_value(spin, --n); - return; + if (n & 1) { + gtk_spin_button_set_value(spin, --n); + return; } - if(xm->num_channels != n) { - gui_play_stop(); - tracker_set_pattern(tracker, NULL); - st_set_num_channels(xm, n); - gui_init_xm(0); - xm_set_modified(1); + if (xm->num_channels != n) { + history_log_spin_button(spin, _("Number of channels setting"), + 0, xm->num_channels); + gui_play_stop(); + tracker_set_pattern(tracker, NULL); + st_set_num_channels(xm, n); + gui_init_xm(0, FALSE); } } static void -gui_tempo_changed (int value) +gui_tempo_changed(GtkSpinButton *spin) { - audio_ctlpipe_id i; + gint value = gtk_spin_button_get_value_as_int(spin); + + history_log_spin_button(spin, _("Tempo setting"), 0, xm->tempo); xm->tempo = value; - xm_set_modified(1); - if(gui_playing_mode) { - event_waiter_start(audio_tempo_ew); + + if (gui_playing_mode) { + event_waiter_start(audio_tempo_ew); } - i = AUDIO_CTLPIPE_SET_TEMPO; - write(audio_ctlpipe, &i, sizeof(i)); - write(audio_ctlpipe, &value, sizeof(value)); + audio_ctlpipe_write(AUDIO_CTLPIPE_SET_TEMPO, value); } static void -gui_bpm_changed (int value) +gui_bpm_changed(GtkSpinButton *spin) { - audio_ctlpipe_id i; + gint value = gtk_spin_button_get_value_as_int(spin); + + history_log_spin_button(spin, _("BPM setting"), 0, xm->bpm); xm->bpm = value; - xm_set_modified(1); - if(gui_playing_mode) { - event_waiter_start(audio_bpm_ew); + + if (gui_playing_mode) { + event_waiter_start(audio_bpm_ew); } - i = AUDIO_CTLPIPE_SET_BPM; - write(audio_ctlpipe, &i, sizeof(i)); - write(audio_ctlpipe, &value, sizeof(value)); + audio_ctlpipe_write(AUDIO_CTLPIPE_SET_BPM, value); } static void -gui_adj_amplification_changed (GtkAdjustment *adj) +gui_adj_amplification_changed(GtkAdjustment* adj, GtkSpinButton* spin) { - audio_ctlpipe_id a = AUDIO_CTLPIPE_SET_AMPLIFICATION; - float b = 8.0 - adj->value; + gdouble b = 20.0 - gtk_adjustment_get_value(adj), c = powf(10.0, b / 20.0); + + g_signal_handler_block(G_OBJECT(spin), db_id); + gtk_spin_button_set_value(spin, b); + g_signal_handler_unblock(G_OBJECT(spin), db_id); - write(audio_ctlpipe, &a, sizeof(a)); - write(audio_ctlpipe, &b, sizeof(b)); + audio_ctlpipe_write(AUDIO_CTLPIPE_SET_AMPLIFICATION, c); } static void -gui_adj_pitchbend_changed (GtkAdjustment *adj) +gui_adj_pitchbend_changed(GtkAdjustment* adj) { - audio_ctlpipe_id a = AUDIO_CTLPIPE_SET_PITCHBEND; - float b = adj->value; + gdouble b = adj->value; - write(audio_ctlpipe, &a, sizeof(a)); - write(audio_ctlpipe, &b, sizeof(b)); + audio_ctlpipe_write(AUDIO_CTLPIPE_SET_PITCHBEND, b); } static void -gui_reset_pitch_bender (void) +gui_reset_pitch_bender(void) { gtk_adjustment_set_value(adj_pitchbend, 0.0); } static void -notebook_page_switched (GtkNotebook *notebook, - GtkNotebookPage *page, - int page_num) +looping_toggled(GtkToggleButton* tbn, GtkCheckMenuItem* menuitem) +{ + gui_play_stop(); + gui_settings.looped = gtk_toggle_button_get_active(tbn); + if (looping_cross) { + looping_cross = FALSE; + gtk_check_menu_item_set_active(menuitem, gui_settings.looped); + looping_cross = TRUE; + } +} + +void +gui_looping_toggled(GtkCheckMenuItem* menuitem) +{ + if (looping_cross) { + looping_cross = FALSE; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(looping_toggle), + gtk_check_menu_item_get_active(menuitem)); + looping_cross = TRUE; + } +} + +static void +notebook_page_switched(GtkNotebook* notebook, + gpointer page, + int page_num) { + /* Sample editor may post its own status messages above + ST global ones. So we restore the last message when + leaving the sample editor */ + if (notebook_current_page == NOTEBOOK_PAGE_SAMPLE_EDITOR) + gui_statusbar_restore_base_message(); + + notebook_prev_page = notebook_current_page; notebook_current_page = page_num; + + /* Sample editor can post its own status messages */ + if (page_num == NOTEBOOK_PAGE_SAMPLE_EDITOR) + sample_editor_update_status(); } /* gui_update_player_pos() is responsible for updating various GUI @@ -1082,689 +1795,791 @@ editing"), which disables the scrolling, but still updates the current song position spin buttons, for example. */ -void -gui_update_player_pos (const audio_player_pos *p) -{ - int m = xm_get_modified(); - - if(gui_playing_mode == PLAYING_NOTE) - return; +void gui_update_player_pos(const gdouble time, + const gint songpos, + const gint patno, + const gint patpos, + const gint tempo, + const gint bpm) +{ + if (gui_playing_mode == PLAYING_NOTE) + return; + + if (gui_playing_mode == PLAYING_SONG) { + if (event_waiter_ready(audio_songpos_ew, time)) { + /* The following check prevents excessive calls of set_position() */ + if (songpos != playlist_get_position(playlist)) { + playlist_freeze_signals(playlist); + playlist_set_position(playlist, songpos); + playlist_thaw_signals(playlist); + } + } + if (!ASYNCEDIT) { + /* The following is a no-op if we're already in the right pattern */ + gui_set_current_pattern(xm->pattern_order_table[songpos], TRUE); + } + } - if(gui_playing_mode == PLAYING_SONG) { - if(event_waiter_ready(audio_songpos_ew, p->time)) { - /* The following check prevents excessive calls of set_position() */ - if(p->songpos != playlist_get_position(playlist)) { - playlist_freeze_signals(playlist); - playlist_set_position(playlist, p->songpos); - playlist_thaw_signals(playlist); - } - } - if(!ASYNCEDIT) { - /* The following is a no-op if we're already in the right pattern */ - gui_set_current_pattern(xm->pattern_order_table[p->songpos]); - } - } - - if(!ASYNCEDIT) { - tracker_set_patpos(tracker, p->patpos); - - if(notebook_current_page == 0) { - /* Prevent accumulation of X drawing primitives */ - gdk_flush(); - } - } - - if(gui_settings.tempo_bpm_update) { - if(event_waiter_ready(audio_tempo_ew, p->time)) { - tempo_slider.update_without_signal = TRUE; - gui_subs_set_slider_value(&tempo_slider, p->tempo); - tempo_slider.update_without_signal = FALSE; - } - - if(event_waiter_ready(audio_bpm_ew, p->time)) { - bpm_slider.update_without_signal = TRUE; - gui_subs_set_slider_value(&bpm_slider, p->bpm); - bpm_slider.update_without_signal = FALSE; - } + if (!ASYNCEDIT) { + if (gui_playing_mode == PLAYING_PATTERN) + gui_set_current_pattern(patno, FALSE); + track_editor_set_patpos(patpos); + + if (notebook_current_page == 0) { + /* Prevent accumulation of X drawing primitives */ + gdk_flush(); + } } - xm_set_modified(m); + if (gui_settings.tempo_bpm_update) { + if (event_waiter_ready(audio_tempo_ew, time)) { + static gint old_tempo = 0; + + if (tempo != old_tempo) { + g_signal_handler_block(G_OBJECT(tempo_spin), tempo_spin_id); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(tempo_spin), tempo); + old_tempo = tempo; + g_signal_handler_unblock(G_OBJECT(tempo_spin), tempo_spin_id); + } + } + if (event_waiter_ready(audio_bpm_ew, time)) { + static gint old_bpm = 0; + + if (bpm != old_bpm) { + g_signal_handler_block(G_OBJECT(bpm_spin), bpm_spin_id); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(bpm_spin), bpm); + old_bpm = bpm; + g_signal_handler_unblock(G_OBJECT(bpm_spin), bpm_spin_id); + } + } + } } -void -gui_clipping_indicator_update (double songtime) +void gui_clipping_indicator_update(const gboolean status) { - if(songtime < 0.0) { - gui_clipping_led_status = 0; - } else { - audio_clipping_indicator *c = time_buffer_get(audio_clipping_indicator_tb, songtime); - gui_clipping_led_status = c && c->clipping; + static gboolean prev_status = FALSE; + + if (status != prev_status) { + gtk_image_set_from_pixbuf(GTK_IMAGE(gui_clipping_led), + status ? led_clipping : led_normal); + gtk_widget_queue_draw(gui_clipping_led); + prev_status = status; } - gtk_widget_draw(gui_clipping_led, NULL); } -static void -read_mixer_pipe (gpointer data, - gint source, - GdkInputCondition condition) +static gboolean +read_mixer_pipe(GIOChannel* source, + GIOCondition condition, + gpointer data) { audio_backpipe_id a; - struct pollfd pfd = { source, POLLIN, 0 }; - int x; + int fd = g_io_channel_unix_get_fd(source); + struct pollfd pfd = { fd, POLLIN, 0 }; + int x, err = 0; - static char *msgbuf = NULL; + static char* msgbuf = NULL; static int msgbuflen = 0; + static GtkWidget *dialog_err = NULL, *dialog_warn = NULL; - loop: - if(poll(&pfd, 1, 0) <= 0) - return; - - read(source, &a, sizeof(a)); -// printf("read %d\n", a); - - switch(a) { - case AUDIO_BACKPIPE_PLAYING_STOPPED: - statusbar_update(STATUS_IDLE, FALSE); -#ifdef USE_GNOME - gtk_clock_stop(GTK_CLOCK(st_clock)); -#endif + while (poll(&pfd, 1, 0) > 0) { + if (read(fd, &a, sizeof(a)) != sizeof(a)) { + static GtkWidget* dialog = NULL; + gui_error_dialog(&dialog, _("Connection with audio thread failed!"), FALSE); + } - if(gui_ewc_startstop > 0) { - /* can be equal to zero when the audio subsystem decides to stop playing on its own. */ - gui_ewc_startstop--; - } - gui_playing_mode = 0; - scope_group_stop_updating(scopegroup); - tracker_stop_updating(); - sample_editor_stop_updating(); - gui_enable(1); - break; - - case AUDIO_BACKPIPE_PLAYING_STARTED: - statusbar_update(STATUS_PLAYING_SONG, FALSE); - /* fall through */ - - case AUDIO_BACKPIPE_PLAYING_PATTERN_STARTED: - if(a == AUDIO_BACKPIPE_PLAYING_PATTERN_STARTED) - statusbar_update(STATUS_PLAYING_PATTERN, FALSE); -#ifdef USE_GNOME - gtk_clock_set_seconds(GTK_CLOCK(st_clock), 0); - gtk_clock_start(GTK_CLOCK(st_clock)); -#endif + switch (a) { + case AUDIO_BACKPIPE_PLAYING_STOPPED: + gui_statusbar_update(STATUS_IDLE, FALSE); + clock_stop(CLOCK(st_clock)); + + if (gui_ewc_startstop > 0) { + /* can be equal to zero when the audio subsystem decides to stop playing on its own. */ + gui_ewc_startstop--; + } + gui_playing_mode = 0; + scope_group_stop_updating(scopegroup); + tracker_stop_updating(); + sample_editor_stop_updating(); + gui_enable(1); + break; + + case AUDIO_BACKPIPE_PLAYING_STARTED: + gui_statusbar_update(STATUS_PLAYING_SONG, FALSE); + /* fall through */ + + case AUDIO_BACKPIPE_PLAYING_PATTERN_STARTED: + if (a == AUDIO_BACKPIPE_PLAYING_PATTERN_STARTED) + gui_statusbar_update(STATUS_PLAYING_PATTERN, FALSE); + clock_set_seconds(CLOCK(st_clock), 0); + clock_start(CLOCK(st_clock)); + + gui_ewc_startstop--; + gui_playing_mode = (a == AUDIO_BACKPIPE_PLAYING_STARTED) ? PLAYING_SONG : PLAYING_PATTERN; + if (!ASYNCEDIT) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editing_toggle), FALSE); + } + gui_enable(0); + scope_group_start_updating(scopegroup); + tracker_start_updating(); + sample_editor_start_updating(); + break; - gui_ewc_startstop--; - gui_playing_mode = (a == AUDIO_BACKPIPE_PLAYING_STARTED) ? PLAYING_SONG : PLAYING_PATTERN; - if(!ASYNCEDIT) { - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(editing_toggle), FALSE); - } - gui_enable(0); - scope_group_start_updating(scopegroup); - tracker_start_updating(); - sample_editor_start_updating(); - break; - - case AUDIO_BACKPIPE_PLAYING_NOTE_STARTED: - gui_ewc_startstop--; - if(!gui_playing_mode) { - gui_playing_mode = PLAYING_NOTE; - scope_group_start_updating(scopegroup); - tracker_start_updating(); - sample_editor_start_updating(); - } - break; + case AUDIO_BACKPIPE_PLAYING_NOTE_STARTED: + gui_ewc_startstop--; + if (!gui_playing_mode) { + gui_playing_mode = PLAYING_NOTE; + scope_group_start_updating(scopegroup); + tracker_start_updating(); + sample_editor_start_updating(); + } + break; - case AUDIO_BACKPIPE_DRIVER_OPEN_FAILED: - gui_ewc_startstop--; - break; + case AUDIO_BACKPIPE_DRIVER_OPEN_FAILED: + gui_ewc_startstop--; + break; - case AUDIO_BACKPIPE_ERROR_MESSAGE: - case AUDIO_BACKPIPE_WARNING_MESSAGE: - statusbar_update(STATUS_IDLE, FALSE); - readpipe(source, &x, sizeof(x)); - if(msgbuflen < x + 1) { - g_free(msgbuf); - msgbuf = g_new(char, x + 1); - msgbuflen = x + 1; - } - readpipe(source, msgbuf, x + 1); - if(a == AUDIO_BACKPIPE_ERROR_MESSAGE) - gnome_error_dialog(msgbuf); - else - gnome_warning_dialog(msgbuf); - break; + case AUDIO_BACKPIPE_ERRNO_MESSAGE: + readpipe(fd, &x, sizeof(x)); + err = x; + /* No break, we are falling through */ + case AUDIO_BACKPIPE_ERROR_MESSAGE: + case AUDIO_BACKPIPE_WARNING_MESSAGE: + gui_statusbar_update(STATUS_IDLE, FALSE); + readpipe(fd, &x, sizeof(x)); + if (msgbuflen < x + 1) { + g_free(msgbuf); + msgbuf = g_new(char, x + 1); + msgbuflen = x + 1; + } + readpipe(fd, msgbuf, x + 1); + switch (a) { + case AUDIO_BACKPIPE_ERROR_MESSAGE: + gui_error_dialog(&dialog_err, msgbuf, TRUE); + break; + case AUDIO_BACKPIPE_WARNING_MESSAGE: + gui_warning_dialog(&dialog_warn, msgbuf, TRUE); + break; + case AUDIO_BACKPIPE_ERRNO_MESSAGE: + gui_errno_dialog(mainwindow, msgbuf, err); + break; + default: + break; + } + break; - default: - fprintf(stderr, "\n\n*** read_mixer_pipe: unexpected backpipe id %d\n\n\n", a); - g_assert_not_reached(); - break; + default: + fprintf(stderr, "\n\n*** read_mixer_pipe: unexpected backpipe id %d\n\n\n", a); + g_assert_not_reached(); + break; + } } - - goto loop; + return TRUE; } static void -wait_for_player (void) +wait_for_player(void) { - struct pollfd pfd = { audio_backpipe, POLLIN, 0 }; + struct pollfd pfd = { audio_get_backpipe(), POLLIN, 0 }; gui_ewc_startstop++; - while(gui_ewc_startstop != 0) { - g_return_if_fail(poll(&pfd, 1, -1) > 0); - read_mixer_pipe(NULL, audio_backpipe, 0); + while (gui_ewc_startstop != 0) { + g_return_if_fail(poll(&pfd, 1, -1) > 0); + read_mixer_pipe(audio_backpipe_channel, G_IO_IN, NULL); } } -void -play_song (void) +static void play_song(gpointer data) { + const gboolean current = GPOINTER_TO_INT(data); int sp = playlist_get_position(playlist); - int pp = 0; - audio_ctlpipe_id i = AUDIO_CTLPIPE_PLAY_SONG; + int pp = current ? tracker->patpos : 0; g_assert(xm != NULL); gui_play_stop(); - - write(audio_ctlpipe, &i, sizeof(i)); - write(audio_ctlpipe, &sp, sizeof(sp)); - write(audio_ctlpipe, &pp, sizeof(pp)); + playlist_enable(playlist, FALSE); + audio_ctlpipe_write(AUDIO_CTLPIPE_PLAY_SONG, sp, pp, (gint)gui_settings.looped); wait_for_player(); } static void -play_pattern (void) +play_pattern(void) { gui_play_stop(); - gui_mixer_play_pattern(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_editpat)), 0, 0); + gui_mixer_play_pattern(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_editpat)), 0, 0, -1, -1, -1); wait_for_player(); } -static void -play_current_pattern_row (void) +void +gui_play_block(void) +{ + gint ch_start, row_start, n_ch, n_rows; + + gui_play_stop(); + tracker_get_selection_rect(tracker, &ch_start, &row_start, &n_ch, &n_rows); + if (ch_start >= 0 && row_start >= 0) { + gui_mixer_play_pattern(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_editpat)), + row_start, 0, row_start + n_rows, ch_start, n_ch); + wait_for_player(); + } +} + +void +gui_play_current_pattern_row(void) { gui_play_stop(); - gui_mixer_play_pattern(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_editpat)), tracker->patpos, 1); + gui_mixer_play_pattern(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_editpat)), tracker->patpos, 1, -1, -1, -1); gui_ewc_startstop++; } -void -gui_play_stop (void) +void gui_play_stop(void) { gui_mixer_stop_playing(); wait_for_player(); + gui_clipping_indicator_update(FALSE); + playlist_enable(playlist, TRUE); } -void -gui_init_xm (int new_xm) +void gui_init_xm(int new_xm, gboolean updatechspin) { - int m = xm_get_modified(); - audio_ctlpipe_id i; - - i = AUDIO_CTLPIPE_INIT_PLAYER; - write(audio_ctlpipe, &i, sizeof(i)); + audio_ctlpipe_write(AUDIO_CTLPIPE_INIT_PLAYER); tracker_reset(tracker); - if(new_xm) { - gui_playlist_initialize(); - editing_pat = -1; - gui_set_current_pattern(xm->pattern_order_table[0]); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(curins_spin), 1); - current_instrument_changed(GTK_SPIN_BUTTON(curins_spin)); - modinfo_set_current_instrument(0); - modinfo_set_current_sample(0); - modinfo_update_all(); + if (new_xm) { + gui_playlist_initialize(); + editing_pat = -1; + gui_set_current_pattern(xm->pattern_order_table[0], TRUE); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(curins_spin), 1); + current_instrument_changed(GTK_SPIN_BUTTON(curins_spin)); + modinfo_set_current_instrument(0); + modinfo_set_current_sample(0); + modinfo_update_all(); } else { - i = editing_pat; - editing_pat = -1; - gui_set_current_pattern(i); + gint i = editing_pat; + editing_pat = -1; + gui_set_current_pattern(i, TRUE); } - gui_subs_set_slider_value(&tempo_slider, xm->tempo); - gui_subs_set_slider_value(&bpm_slider, xm->bpm); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(tempo_spin), xm->tempo); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(bpm_spin), xm->bpm); track_editor_set_num_channels(xm->num_channels); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_numchans), xm->num_channels); + if (updatechspin) + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_numchans), xm->num_channels); scope_group_set_num_channels(scopegroup, xm->num_channels); - xm_set_modified(m); } -void -gui_free_xm (void) +void gui_free_xm(void) { gui_play_stop(); - instrument_editor_set_instrument(NULL); + instrument_editor_set_instrument(NULL, 0); sample_editor_set_sample(NULL); tracker_set_pattern(tracker, NULL); XM_Free(xm); xm = NULL; } -void -gui_new_xm (void) +void gui_new_xm(void) { xm = XM_New(); - if(!xm) { - fprintf(stderr, "Whooops, having memory problems?\n"); - exit(1); + if (!xm) { + g_critical("Whooops, having memory problems?"); } - gui_init_xm(1); + gui_init_xm(1, TRUE); + history_clear(FALSE); } -void -gui_load_xm (const char *filename) +static gboolean +gui_load_xm(const char* filename, const char* localname) { - statusbar_update(STATUS_LOADING_MODULE, TRUE); + gchar* newname = NULL; + XM *new_xm = NULL; - gui_free_xm(); - xm = File_Load(filename); + gui_statusbar_update(STATUS_LOADING_MODULE, TRUE); - if(!xm) { - gui_new_xm(); - statusbar_update(STATUS_IDLE, FALSE); - } else { - gui_init_xm(1); - statusbar_update(STATUS_MODULE_LOADED, FALSE); - gui_update_title (filename); + if (localname) + new_xm = File_Load(localname, filename); + else { + newname = gui_filename_from_utf8(filename); + if (newname) + new_xm = File_Load(newname, filename); } -} -void -gui_play_note (int channel, - int note) + if (!new_xm) { + gui_statusbar_update(STATUS_IDLE, FALSE); + } else { + history_skip = TRUE; + gui_free_xm(); + xm = new_xm; + gui_init_xm(1, TRUE); + gui_statusbar_update(STATUS_MODULE_LOADED, FALSE); + gui_update_title(filename); + gui_recent_add_item(localname ? localname : newname); + history_skip = FALSE; + history_clear(FALSE); + } + + if (newname) + g_free(newname); + + return (new_xm != NULL); +} + +void gui_play_note(int channel, + int note, + gboolean all) { int instrument = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin)); - audio_ctlpipe_id a = AUDIO_CTLPIPE_PLAY_NOTE; - write(audio_ctlpipe, &a, sizeof(a)); - write(audio_ctlpipe, &channel, sizeof(channel)); - write(audio_ctlpipe, ¬e, sizeof(note)); - write(audio_ctlpipe, &instrument, sizeof(instrument)); + audio_ctlpipe_write(AUDIO_CTLPIPE_PLAY_NOTE, channel, note, instrument, (gint)all); gui_ewc_startstop++; } -void -gui_play_note_full (unsigned channel, - unsigned note, - STSample *sample, - guint32 offset, - guint32 count) -{ - int x; - audio_ctlpipe_id a = AUDIO_CTLPIPE_PLAY_NOTE_FULL; - - g_assert(sizeof(int) == sizeof(unsigned)); - - write(audio_ctlpipe, &a, sizeof(a)); - write(audio_ctlpipe, &channel, sizeof(channel)); - write(audio_ctlpipe, ¬e, sizeof(note)); - write(audio_ctlpipe, &sample, sizeof(sample)); - x = offset; write(audio_ctlpipe, &x, sizeof(x)); - x = count; write(audio_ctlpipe, &x, sizeof(x)); +void gui_play_note_full(unsigned channel, + unsigned note, + STSample* sample, + guint32 offset, + guint32 count, + gboolean all_channels) +{ + audio_ctlpipe_write(AUDIO_CTLPIPE_PLAY_NOTE_FULL, + (gint)channel, (gint)note, sample, (gint)offset, (gint)count, (gint)all_channels); gui_ewc_startstop++; } -void -gui_play_note_keyoff (int channel) +gboolean gui_play_note_no_repeat(guint32 keyval, + gint modifiers, + gboolean pressed, + STSample* sample, + gint start, gint length, + gint channel, + gboolean full_stop, + gboolean* is_note, + gboolean all_channels) { - audio_ctlpipe_id a = AUDIO_CTLPIPE_PLAY_NOTE_KEYOFF; - write(audio_ctlpipe, &a, sizeof(a)); - write(audio_ctlpipe, &channel, sizeof(channel)); + gboolean handled = FALSE; + static gint playing = -1; + gint i = keys_get_key_meaning(keyval, modifiers, -1); + + if (i != -1 && KEYS_MEANING_TYPE(i) == KEYS_MEANING_NOTE) { + i += 12 * gui_get_current_octave_value() + 1; + if (!pressed) { + /* Autorepeat fake keyoff */ + if (keys_is_key_pressed(keyval, modifiers)) + return FALSE; + + if (playing == i) { + full_stop ? gui_play_stop() : gui_stop_note(channel); + playing = -1; + handled = TRUE; + } + } else + if (i < NUM_NOTES && sample != NULL && playing != i) { + playing = i; + gui_play_note_full(channel, i, sample, start, length, all_channels); + handled = TRUE; + } + if (is_note) + *is_note = TRUE; + } + + return handled; } -static void -gui_enable (int enable) +void gui_play_note_keyoff(int channel) { - if(!ASYNCEDIT) { - gtk_widget_set_sensitive(vscrollbar, enable); - gtk_widget_set_sensitive(spin_patlen, enable); - } - playlist_enable(playlist, enable); + audio_ctlpipe_write(AUDIO_CTLPIPE_PLAY_NOTE_KEYOFF, channel); } -void -gui_set_current_pattern (int p) +void gui_stop_note(int channel) { - int m; + audio_ctlpipe_write(AUDIO_CTLPIPE_STOP_NOTE, channel); +} - if(editing_pat == p) - return; +static void +gui_enable(int enable) +{ + if (!ASYNCEDIT) { + gtk_widget_set_sensitive(vscrollbar, enable); + gtk_widget_set_sensitive(spin_patlen, enable); + } +} - m = xm_get_modified(); +void gui_set_current_pattern(int p, gboolean updatespin) +{ + if (editing_pat == p) + return; editing_pat = p; tracker_set_pattern(tracker, &xm->patterns[p]); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_editpat), p); + if (updatespin) + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_editpat), p); gui_update_pattern_data(); - - xm_set_modified(m); } -void -gui_update_pattern_data (void) +void gui_update_pattern_data(void) { int p = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_editpat)); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_patlen), xm->patterns[p].length); } -int -gui_get_current_pattern (void) +int gui_get_current_pattern(void) { return editing_pat; } static void -offset_current_pattern (int offset) +offset_current_pattern(int offset) { int nv; nv = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_editpat)) + offset; - if(nv < 0) - nv = 0; - else if(nv > 255) - nv = 255; + if (nv < 0) + nv = 0; + else if (nv > 255) + nv = 255; gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_editpat), nv); } -void -gui_set_current_instrument (int n) +void gui_block_smplname_entry(gboolean block) +{ + block ? g_signal_handler_block(G_OBJECT(gui_cursmpl_name), snch_id) + : g_signal_handler_unblock(G_OBJECT(gui_cursmpl_name), snch_id); +} + +void gui_block_instrname_entry(gboolean block) +{ + block ? g_signal_handler_block(G_OBJECT(gui_curins_name), inch_id) + : g_signal_handler_unblock(G_OBJECT(gui_curins_name), inch_id); +} + +void gui_set_current_instrument(int n) { - int m = xm_get_modified(); - g_return_if_fail(n >= 1 && n <= 128); - if(n != gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin))) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(curins_spin), n); + GtkWidget* focus; + + g_return_if_fail(n >= 1 && n <= ST_NUM_INSTRUMENTS(xm)); + if (n != gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin))) { + focus = GTK_WINDOW(mainwindow)->focus_widget; /* gtk_spin_button_set_value changes focus widget */ + gtk_spin_button_set_value(GTK_SPIN_BUTTON(curins_spin), n); + gtk_window_set_focus(GTK_WINDOW(mainwindow), focus); } - xm_set_modified(m); } -void -gui_set_current_sample (int n) +static gboolean find_instr(XMPattern* p, + gint* startpos, + gint* startch, + gint instr) +{ + gint pos, ch = *startch; + + for (pos = *startpos; pos < p->length; pos++) { + for (; ch < tracker->num_channels; ch++) + if (p->channels[ch][pos].instrument == instr) { + *startpos = pos; + *startch = ch; + return TRUE; + } + ch = 0; + } + + return FALSE; +} + +void gui_find_instrument(void) +{ + gint curins = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin)); + gint pos = tracker->patpos; + gint ch = tracker->cursor_ch; + gint pat = editing_pat; + gint ord = playlist_get_position(playlist); + gint stopord = playlist_get_length(playlist); + gint i; + + static GtkWidget* dialog = NULL; + + /* Step the position by one with possible wrap */ + if (++ch >= tracker->num_channels) { + ch = 0; + if (++pos >= xm->patterns[pat].length) { + pos = 0; + if (++ord >= stopord) /* Here stopord == length */ + ord = 0; + pat = playlist_get_nth_pattern(playlist, ord); + } + } + + for (i = 0; i < 2; i++) { + for (;;) { + if (find_instr(&xm->patterns[pat], &pos, &ch, curins)) { + track_editor_set_patpos(pos); + tracker_set_cursor_channel(tracker, ch); + if (ord != playlist_get_position(playlist)) + playlist_set_position(playlist, ord); + return; + } + if (++ord >= stopord) + break; + pat = playlist_get_nth_pattern(playlist, ord); + ch = 0; + pos = 0; + } + + if (!gui_ok_cancel_modal(mainwindow, + _("Instrument is not found. Start search from the beginning?"))) + return; + ord = 0; + pat = playlist_get_nth_pattern(playlist, ord); + /* We allow also search in the current pattern. The right choice would be looking for + only in the part before cursor, but using the whole pattern will not lead to + notable overhead */ + stopord = playlist_get_position(playlist) + 1; + } + + gui_info_dialog(&dialog, _("The current instrument is not used in the module."), FALSE); +} + +void gui_set_current_sample(int n) { - int m = xm_get_modified(); - g_return_if_fail(n >= 0 && n <= 15); - if(n != gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(cursmpl_spin))) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(cursmpl_spin), n); + GtkWidget* focus; + + g_return_if_fail(n >= 0 && n <= 127); + if (n != gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(cursmpl_spin))) { + focus = GTK_WINDOW(mainwindow)->focus_widget; /* gtk_spin_button_set_value changes focus widget */ + gtk_spin_button_set_value(GTK_SPIN_BUTTON(cursmpl_spin), n); + gtk_window_set_focus(GTK_WINDOW(mainwindow), focus); } - xm_set_modified(m); } -int -gui_get_current_sample (void) +void gui_set_current_position(int n) +{ + g_return_if_fail(n >= 0 && n < xm->song_length); + playlist_set_position(playlist, n); +} + +int gui_get_current_sample(void) { return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(cursmpl_spin)); } -int -gui_get_current_octave_value (void) +int gui_get_current_octave_value(void) { return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_octave)); } -int -gui_get_current_jump_value (void) +int gui_get_current_position(void) { - if(!GUI_ENABLED && !ASYNCEDIT) - return 0; + return playlist_get_position(playlist); +} + +int gui_get_current_jump_value(void) +{ + if (!GUI_ENABLED && !ASYNCEDIT) + return 0; else - return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_jump)); + return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_jump)); } -void -gui_set_jump_value (int value) +void gui_set_jump_value(int value) { - if(GUI_ENABLED || ASYNCEDIT){ - g_return_if_fail (value >= 0 && value <= 16); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_jump), value); + if (GUI_ENABLED || ASYNCEDIT) { + g_return_if_fail(value >= 0 && value <= 16); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_jump), value); } } -int -gui_get_current_instrument (void) +int gui_get_current_instrument(void) { return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin)); } -static void -offset_current_instrument (int offset) +void gui_offset_current_instrument(int offset) { - int nv, v; + int nv, v, ni; v = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(curins_spin)); nv = v + offset; - if(nv < 1) - nv = 1; - else if(nv > 128) - nv = 128; + if (nv < 1) + nv = 1; + else if (nv > (ni = ST_NUM_INSTRUMENTS(xm))) + nv = ni; gui_set_current_instrument(nv); } -static void -offset_current_sample (int offset) +void gui_offset_current_sample(int offset) { int nv, v; v = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(cursmpl_spin)); nv = v + offset; - if(nv < 0) - nv = 0; - else if(nv > 15) - nv = 15; + if (nv < 0) + nv = 0; + else if (nv > 127) + nv = 127; gui_set_current_sample(nv); } static void -gui_add_free_pattern (GtkWidget *w, Playlist *p) +gui_insert_pattern(GtkWidget* w, Playlist* p) { - int pos = playlist_get_position(p) + 1; - - if(p->length < p->max_length) { - int n = st_find_first_unused_and_empty_pattern(xm); - - if(n != -1) { - playlist_insert_pattern(p, pos, n); - playlist_set_position(p, pos); - } - } + playlist_insert_pattern(p, playlist_get_position(p), gui_get_current_pattern()); } static void -gui_add_free_pattern_and_copy (GtkWidget *w, Playlist *p) +gui_add_free_pattern(GtkWidget* w, Playlist* p) { - int pos = playlist_get_position(p) + 1; + gint pos = playlist_get_position(p) + 1; - if(p->length < p->max_length) { - int n = st_find_first_unused_and_empty_pattern(xm); - int c = gui_get_current_pattern(); + if (p->length < p->max_length) { + gint n = st_find_first_unused_and_empty_pattern(xm); - if(n != -1) { - st_copy_pattern(&xm->patterns[n], &xm->patterns[c]); - playlist_insert_pattern(p, pos, n); - playlist_set_position(p, pos); - } + if (n != -1) { + playlist_insert_pattern(p, pos, n); + playlist_set_position(p, pos); + } } } -void -gui_get_text_entry (int length, - void(*changedfunc)(), - GtkWidget **widget) +static void +gui_add_free_pattern_and_copy(GtkWidget* w, Playlist* p) { - GtkWidget *thing; - - thing = gtk_entry_new_with_max_length(length); + gint pos = playlist_get_position(p) + 1; - gtk_signal_connect_after(GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(changedfunc), NULL); - - *widget = thing; + if (p->length < p->max_length) { + gint n = st_find_first_unused_and_empty_pattern(xm); + gint c = gui_get_current_pattern(); + + if (n != -1) { + struct PlaylistState* arg = g_new(struct PlaylistState, 1); + + arg->length = xm->song_length; + arg->restartpos = xm->restart_position; + arg->pos = playlist_get_position(p); + arg->dest = n; + arg->src = c; + memcpy(arg->pot, xm->pattern_order_table, arg->length * sizeof(p->patterns[0])); + history_log_action(HISTORY_ACTION_POINTER, _("Pattern add + copy"), + 0, playlist_total_undo, p, sizeof(struct PlaylistState), arg); + + st_copy_pattern(&xm->patterns[n], &xm->patterns[c]); + history_skip = TRUE; + playlist_insert_pattern(p, pos, n); + playlist_set_position(p, pos); + history_skip = FALSE; + } + } } -void -gui_playlist_initialize (void) +void gui_playlist_initialize(void) { - int i; - playlist_freeze_signals(playlist); playlist_freeze(playlist); playlist_set_position(playlist, 0); playlist_set_length(playlist, xm->song_length); - for(i = 0; i < xm->song_length; i++) { - playlist_set_nth_pattern(playlist, i, xm->pattern_order_table[i]); - } + playlist_set_patterns(playlist, xm->pattern_order_table); playlist_set_restart_position(playlist, xm->restart_position); playlist_thaw(playlist); playlist_thaw_signals(playlist); } -static gint -gui_clipping_led_event (GtkWidget *thing, - GdkEvent *event) -{ - static GdkGC *clipping_led_gc = NULL; - - if(!clipping_led_gc) - clipping_led_gc = gdk_gc_new(thing->window); - - switch (event->type) { - case GDK_MAP: - case GDK_EXPOSE: - gdk_gc_set_foreground(clipping_led_gc, gui_clipping_led_status ? &gui_clipping_led_on : &gui_clipping_led_off); - gdk_draw_rectangle(thing->window, clipping_led_gc, 1, 0, 0, -1, -1); - default: - break; - } - - return 0; -} - -void -gui_go_to_fileops_page (void) -{ - gtk_notebook_set_page(GTK_NOTEBOOK(notebook), - 0); -} - -void -gui_auto_switch_page (void) +void gui_auto_switch_page(void) { - if(gui_settings.auto_switch) - gtk_notebook_set_page(GTK_NOTEBOOK(notebook), - 1); + if (gui_settings.auto_switch) + gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), + 1); } -#ifndef NO_GDK_PIXBUF static gint -gui_splash_logo_expose (GtkWidget *widget, - GdkEventExpose *event, - gpointer data) -{ - gdk_pixbuf_render_to_drawable (gui_splash_logo, - widget->window, - widget->style->black_gc, - event->area.x, event->area.y, - event->area.x, event->area.y, - event->area.width, event->area.height, - GDK_RGB_DITHER_NORMAL, - 0, 0); +gui_splash_logo_expose(GtkWidget* widget, + GdkEventExpose* event, + gpointer data) +{ + cairo_t* cr = gdk_cairo_create(widget->window); + cairo_set_source_surface(cr, gui_splash_logo, 0, 0); + cairo_paint(cr); + cairo_destroy(cr); return TRUE; } -#endif static void -gui_splash_close (void) +gui_splash_close(void) { gtk_widget_destroy(gui_splash_window); gui_splash_window = NULL; } static void -gui_splash_set_label (const gchar *text, - gboolean update) +gui_splash_set_label(const gchar* text, + gboolean update) { char buf[256]; - strcpy(buf, "SoundTracker v" VERSION " - "); - strncat(buf, text, 255-sizeof(buf)); + strcpy(buf, PACKAGE_NAME " v" VERSION " - "); + strncat(buf, text, 255 - strlen(buf)); gtk_label_set_text(GTK_LABEL(gui_splash_label), buf); - while(update && gtk_events_pending ()) { - gtk_main_iteration (); + while (update && gtk_events_pending()) { + gtk_main_iteration(); } } -int -gui_splash (int argc, - char *argv[]) +int gui_splash(void) { GtkWidget *vbox, *thing; -#ifndef NO_GDK_PIXBUF GtkWidget *hbox, *logo_area, *frame; -#endif - -#ifdef USE_GNOME - gnome_init("SoundTracker", VERSION, argc, argv); - gdk_rgb_init(); -#else - gtk_init(&argc, &argv); - gdk_rgb_init(); -#endif + gchar* buf; - gui_splash_window = gtk_window_new (GTK_WINDOW_DIALOG); + gui_splash_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW(gui_splash_window), _("SoundTracker Startup")); -// gtk_window_set_wmclass (GTK_WINDOW (gui_splash_window), "soundtracker_startup", "SoundTracker"); - gtk_window_set_position (GTK_WINDOW (gui_splash_window), GTK_WIN_POS_CENTER); - gtk_window_set_policy (GTK_WINDOW (gui_splash_window), FALSE, FALSE, FALSE); + buf = g_strdup_printf(_("%s Startup"), PACKAGE_NAME); + gtk_window_set_title(GTK_WINDOW(gui_splash_window), buf); + g_free(buf); + gtk_window_set_position(GTK_WINDOW(gui_splash_window), GTK_WIN_POS_CENTER); + gtk_window_set_resizable(GTK_WINDOW(gui_splash_window), FALSE); gtk_window_set_modal(GTK_WINDOW(gui_splash_window), TRUE); - gtk_signal_connect(GTK_OBJECT (gui_splash_window), "delete_event", - GTK_SIGNAL_FUNC (gui_splash_close), NULL); + g_signal_connect(gui_splash_window, "delete_event", + G_CALLBACK(gui_splash_close), NULL); - vbox = gtk_vbox_new (FALSE, 4); - gtk_container_add (GTK_CONTAINER (gui_splash_window), vbox); + vbox = gtk_vbox_new(FALSE, 4); + gtk_container_add(GTK_CONTAINER(gui_splash_window), vbox); - gtk_container_border_width(GTK_CONTAINER(vbox), 4); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 4); /* Show splash screen if enabled and image available. */ -#ifndef NO_GDK_PIXBUF - gui_splash_logo = gdk_pixbuf_new_from_file(PREFIX"/share/soundtracker/soundtracker_splash.png"); - if(gui_splash_logo) { - thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, TRUE, 0); - - hbox = gtk_hbox_new(FALSE, 4); - gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show(hbox); - - add_empty_vbox(hbox); - - frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); - gtk_widget_show(frame); - - gui_splash_logo_area = logo_area = gtk_drawing_area_new (); - gtk_container_add (GTK_CONTAINER(frame), logo_area); - gtk_widget_show(logo_area); - - add_empty_vbox(hbox); - - gtk_signal_connect (GTK_OBJECT (logo_area), "expose_event", - GTK_SIGNAL_FUNC (gui_splash_logo_expose), - NULL); - - gtk_drawing_area_size (GTK_DRAWING_AREA (logo_area), - gdk_pixbuf_get_width(gui_splash_logo), - gdk_pixbuf_get_height(gui_splash_logo)); + gui_splash_logo = cairo_image_surface_create_from_png(DATADIR "/" PACKAGE "/soundtracker_splash.png"); + if (gui_splash_logo) { + thing = gtk_hseparator_new(); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, TRUE, 0); + + hbox = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show(hbox); + + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); + gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); + gtk_widget_show(frame); + + gui_splash_logo_area = logo_area = gtk_drawing_area_new(); + gtk_container_add(GTK_CONTAINER(frame), logo_area); + gtk_widget_show(logo_area); + + g_signal_connect(logo_area, "expose_event", + G_CALLBACK(gui_splash_logo_expose), + NULL); + + gtk_widget_set_size_request(logo_area, + cairo_image_surface_get_width(gui_splash_logo), + cairo_image_surface_get_height(gui_splash_logo)); } -#endif /* Show version number. */ @@ -1779,34 +2594,25 @@ /* Show tips if enabled. */ - if(tips_dialog_show_tips) { - GtkWidget *tipsbox = tips_dialog_get_vbox(); + if (tips_dialog_show_tips) { + thing = gtk_hseparator_new(); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, TRUE, 0); - if(tipsbox) { - thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, TRUE, 0); - - gtk_box_pack_start(GTK_BOX(vbox), tipsbox, FALSE, FALSE, 0); - gtk_widget_show(tipsbox); - } + tips_box_populate(vbox, FALSE); } thing = gtk_hseparator_new(); gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, TRUE, 0); - if( -#ifndef NO_GDK_PIXBUF - gui_splash_logo || -#endif - tips_dialog_show_tips) { - gui_splash_close_button = thing = gtk_button_new_with_label(_("Use SoundTracker!")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC(gui_splash_close), NULL); - gtk_widget_set_sensitive(thing, FALSE); + if (gui_splash_logo || tips_dialog_show_tips) { + gui_splash_close_button = thing = gtk_button_new_with_label(_("Use SoundTracker!")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "clicked", + (gui_splash_close), NULL); + gtk_widget_set_sensitive(thing, FALSE); } gtk_widget_show(vbox); @@ -1817,76 +2623,221 @@ return 1; } -int -gui_final (int argc, - char *argv[]) -{ - GtkWidget *thing, *mainvbox, *table, *hbox, *frame, *mainvbox0, *pmw, *vbox, *list, *entry; - GdkColormap *colormap; - GtkStyle *style; - GdkPixmap *pm; - GdkBitmap *mask; - gint i, wdth, cur, selected; - GList *glist; - gchar *other; -#ifdef USE_GNOME - GtkWidget *dockitem; -#endif +gboolean +quit_requested(void) +{ + if (history_get_modified()) { + if (gui_ok_cancel_modal(mainwindow, + _("Are you sure you want to quit?\nAll changes will be lost!"))) + gtk_main_quit(); + } else { + gtk_main_quit(); + } + return TRUE; +} + +static gboolean +is_sep(GtkTreeModel* model, GtkTreeIter* iter, gpointer data) +{ + GtkTreePath* path = gtk_tree_model_get_path(model, iter); + gint index = GPOINTER_TO_INT(data); + gint* indices = gtk_tree_path_get_indices(path); + gint curindex = indices[0]; - pipetag = gdk_input_add(audio_backpipe, GDK_INPUT_READ, read_mixer_pipe, NULL); + gtk_tree_path_free(path); + return curindex == index; +} -#ifdef USE_GNOME - mainwindow = gnome_app_new("SoundTracker", "SoundTracker " VERSION); -#else - mainwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (mainwindow), "SoundTracker " VERSION); -#endif +static void +recent_selected(GtkRecentChooser *rcc) +{ + gchar* uri = gtk_recent_chooser_get_current_uri(rcc); + gchar* fname = g_filename_from_uri(uri, NULL, NULL); - gtk_signal_connect (GTK_OBJECT (mainwindow), "delete_event", - GTK_SIGNAL_FUNC (menubar_quit_requested), NULL); + if (fname) { + gchar* utfname = gui_filename_to_utf8(fname); - if(gui_splash_window) { - gtk_window_set_transient_for(GTK_WINDOW(gui_splash_window), - GTK_WINDOW(mainwindow)); - } - - if(gui_settings.st_window_x != -666) { - gtk_window_set_default_size (GTK_WINDOW (mainwindow), - gui_settings.st_window_w, - gui_settings.st_window_h); - gtk_widget_set_uposition (GTK_WIDGET (mainwindow), - gui_settings.st_window_x, - gui_settings.st_window_y); - } - - fileops_dialogs[DIALOG_LOAD_MOD] = file_selection_create(_("Load XM..."), file_selected); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_LOAD_MOD]), gui_settings.loadmod_path); - fileops_dialogs[DIALOG_SAVE_MOD] = file_selection_create(_("Save XM..."), file_selected); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_SAVE_MOD]), gui_settings.savemod_path); -#if USE_SNDFILE || !defined (NO_AUDIOFILE) - fileops_dialogs[DIALOG_SAVE_MOD_AS_WAV] = file_selection_create(_("Render module as WAV..."), file_selected); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_SAVE_MOD_AS_WAV]), gui_settings.savemodaswav_path); -#endif - fileops_dialogs[DIALOG_SAVE_SONG_AS_XM] = file_selection_create(_("Save song as XM..."), file_selected); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_SAVE_SONG_AS_XM]), gui_settings.savesongasxm_path); - fileops_dialogs[DIALOG_LOAD_PATTERN] = file_selection_create(_("Load current pattern..."), file_selected); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_LOAD_PATTERN]), gui_settings.loadpat_path); - fileops_dialogs[DIALOG_SAVE_PATTERN] = file_selection_create(_("Save current pattern..."), file_selected); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_SAVE_PATTERN]), gui_settings.savepat_path); - - mainvbox0 = gtk_vbox_new(FALSE, 0); - gtk_container_border_width(GTK_CONTAINER(mainvbox0), 0); -#ifdef USE_GNOME - gnome_app_set_contents(GNOME_APP(mainwindow), mainvbox0); + if (utfname) { + if (!load_xm_full(utfname, fname)) + gtk_recent_manager_remove_item(rcmgr, uri, NULL); + g_free(utfname); + } + } + + g_free(uri); + g_free(fname); +} + +static void scroll_songpos(GtkWidget* w, const gint direction) +{ + gint currpos = CLAMP(playlist_get_position(playlist) + direction, 0, xm->song_length - 1); + + playlist_set_position(playlist, currpos); +} + +void gui_amp_estimate(void) +{ + static GtkWidget* est_dialog = NULL; + gint response; + + if (!est_dialog) { + GtkWidget *vbox, *label; + est_dialog = gtk_dialog_new_with_buttons(_("Amplification estimation"), GTK_WINDOW(mainwindow), + GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); + gui_dialog_adjust(est_dialog, GTK_RESPONSE_OK); + + vbox = gtk_dialog_get_content_area(GTK_DIALOG(est_dialog)); + gtk_widget_show(vbox); + label = gtk_label_new(_("You are about to start the procedure for automatic amplification estimation.\n" + "This may take some time.")); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + } + + response = gtk_dialog_run(GTK_DIALOG(est_dialog)); + gtk_widget_hide(est_dialog); + + if (response == GTK_RESPONSE_OK) { + gint rate = audio_get_playback_rate(); + + if (rate != -1) { +#define EST_BUFSIZE 65536 +#ifdef WORDS_BIGENDIAN + const gint format = ST_MIXER_FORMAT_S16_BE | ST_MIXER_FORMAT_STEREO; #else - gtk_container_add(GTK_CONTAINER(mainwindow), mainvbox0); + const gint format = ST_MIXER_FORMAT_S16_LE | ST_MIXER_FORMAT_STEREO; #endif - gtk_widget_show(mainvbox0); + const guint32 num_samples = + (EST_BUFSIZE / mixer_get_resolution(format)) >> mixer_is_format_stereo(format); + guint32 num_rendered; + gint16* est_buf = malloc(EST_BUFSIZE); + gboolean clipping; + gint16 min_val, max_val; + gfloat amp = 1.0; + GtkWidget* pw; + + pw = show_process_window(N_("Estimating...")); + gui_play_stop(); + stop_process = FALSE; + do { + /* We start estimation from the normal amplification level */ + audio_set_amplification(amp); + audio_prepare_for_rendering(AUDIO_RENDER_SONG, 0, 0, 0, 0, 0); + + min_val = max_val = 0; + clipping = FALSE; + do { + guint i; + + num_rendered = audio_mix(est_buf, num_samples, rate, format, FALSE, &clipping); + for(i = 0; i < EST_BUFSIZE / sizeof(gint16); i++) { + if (est_buf[i] > max_val) + max_val = est_buf[i]; + if (est_buf[i] < min_val) + min_val = est_buf[i]; + } + while (gtk_events_pending()) + gtk_main_iteration(); + } while (num_rendered == num_samples && !clipping && !stop_process); + + audio_cleanup_after_rendering(); + /* Clipping occured, decrease amplification and make the next attempt */ + if (clipping) + amp /= 2.0; + } while (clipping && !stop_process); + gtk_widget_hide(pw); + + if (stop_process) /* restoring the old value on explicit stop */ + audio_set_amplification(powf(10.0, (20.0 - gtk_adjustment_get_value(adj_amplification)) / 20.0)); + else { + max_val = MAX(abs(min_val), abs(max_val)); + if (max_val == 0) /* Nothing to do for a silent module, restoring the old value */ + audio_set_amplification(powf(10.0, (20.0 - gtk_adjustment_get_value(adj_amplification)) / 20.0)); + else { + /* 0.9 to be at the safe side */ + amp = CLAMP(amp * 0.9 * 32768.0 / max_val, 0.01, 10.0); + gtk_adjustment_set_value(adj_amplification, 20.0 * (1.0 - log10f(amp))); + } + } + g_free(est_buf); + } + } +} + +int gui_final(int argc, char* argv[]) +{ + GtkWidget *thing, *mainvbox, *table, *hbox, *button, *mainvbox0, *pmw, *vbox, *recent; + gint i, selected; + GError* error = NULL; + GtkListStore* ls; + GtkTreeIter iter; + GtkRecentFilter* rcfilter; + static gchar buf[128]; + + static const gchar* xm_f[] = { N_("FastTracker modules (*.xm)"), "*.[xX][mM]", NULL }; + static const gchar* mod_f[] = { N_("Original SoundTracker modules (*.mod)"), "*.[mM][oO][dD]", NULL }; + static const gchar** mod_formats[] = { xm_f, mod_f, NULL }; + static const gchar* save_mod_f[] = { N_("FastTracker modules (*.xm)"), "*.[xX][mM]", NULL }; + static const gchar** save_mod_formats[] = { save_mod_f, NULL }; +#if USE_SNDFILE || AUDIOFILE_VERSION + static const gchar* wav_f[] = { N_("Microsoft RIFF (*.wav)"), "*.[wW][aA][vV]", NULL }; + static const gchar** wav_formats[] = { wav_f, NULL }; +#endif + static const gchar* xp_f[] = { N_("Extended pattern (*.xp)"), "*.[xX][pP]", NULL }; + static const gchar** xp_formats[] = { xp_f, NULL }; + + const icon_set gui_icons[] = + {{"st-history", "history", SIZES_MENU}, + {NULL}}; + + audio_backpipe_channel = g_io_channel_unix_new(audio_get_backpipe()); + g_io_add_watch(audio_backpipe_channel, G_IO_IN, read_mixer_pipe, NULL); + + gui_builder = gtk_builder_new(); + if (!gtk_builder_add_from_file(gui_builder, XML_FILE, &error)) { + g_critical(_("%s.\n%s startup is aborted\nFailed GUI description file: %s\n"), + error->message, PACKAGE, XML_FILE); + g_error_free(error); + return 0; + } + + gui_add_icons(gui_icons); + + mainwindow = gui_get_widget(gui_builder, "mainwindow", XML_FILE); + if (!mainwindow) + return 0; + gtk_window_set_title(GTK_WINDOW(mainwindow), PACKAGE_NAME " " VERSION); + + if (gui_splash_window) { + gtk_window_set_transient_for(GTK_WINDOW(gui_splash_window), + GTK_WINDOW(mainwindow)); + } + + if (gui_settings.st_window_x != -666) { + gtk_window_set_default_size(GTK_WINDOW(mainwindow), + gui_settings.st_window_w, + gui_settings.st_window_h); + gtk_window_move(GTK_WINDOW(mainwindow), + gui_settings.st_window_x, + gui_settings.st_window_y); + } + + loadmod = fileops_dialog_create(DIALOG_LOAD_MOD, _("Load Module"), &gui_settings.loadmod_path, load_xm, TRUE, FALSE, mod_formats, N_("Load the selected module into the tracker"), NULL); + savemod = fileops_dialog_create(DIALOG_SAVE_MOD, _("Save Module"), &gui_settings.savemod_path, save_song, TRUE, TRUE, save_mod_formats, N_("Save the current module"), "xm"); +#if USE_SNDFILE || AUDIOFILE_VERSION + renderwav = fileops_dialog_create(DIALOG_SAVE_MOD_AS_WAV, _("Render WAV"), &gui_settings.savemodaswav_path, save_wav, TRUE, TRUE, wav_formats, N_("Render the current module as WAV file"), "wav"); +#endif + savexm = fileops_dialog_create(DIALOG_SAVE_SONG_AS_XM, _("Save XM without samples..."), &gui_settings.savesongasxm_path, save_xm, FALSE, TRUE, save_mod_formats, NULL, "xm"); + loadpat = fileops_dialog_create(DIALOG_LOAD_PATTERN, _("Load current pattern..."), &gui_settings.loadpat_path, load_pat, FALSE, FALSE, xp_formats, NULL, NULL); + savepat = fileops_dialog_create(DIALOG_SAVE_PATTERN, _("Save current pattern..."), &gui_settings.savepat_path, save_pat, FALSE, TRUE, xp_formats, NULL, "xp"); + + mainvbox0 = gui_get_widget(gui_builder, "mainvbox0", XML_FILE); + if (!mainvbox0) + return 0; - menubar_create(mainwindow, mainvbox0); - mainvbox = gtk_vbox_new(FALSE, 4); - gtk_container_border_width(GTK_CONTAINER(mainvbox), 4); + gtk_container_set_border_width(GTK_CONTAINER(mainvbox), 4); gtk_box_pack_start(GTK_BOX(mainvbox0), mainvbox, TRUE, TRUE, 0); gtk_widget_show(mainvbox); @@ -1901,247 +2852,244 @@ gtk_widget_show(thing); playlist = PLAYLIST(thing); - gtk_signal_connect (GTK_OBJECT (playlist), "current_position_changed", - GTK_SIGNAL_FUNC (gui_playlist_position_changed), NULL); - gtk_signal_connect (GTK_OBJECT (playlist), "restart_position_changed", - GTK_SIGNAL_FUNC (gui_playlist_restart_position_changed), NULL); - gtk_signal_connect (GTK_OBJECT (playlist), "song_length_changed", - GTK_SIGNAL_FUNC (gui_playlist_song_length_changed), NULL); - gtk_signal_connect (GTK_OBJECT (playlist), "entry_changed", - GTK_SIGNAL_FUNC (gui_playlist_entry_changed), NULL); - gtk_signal_connect (GTK_OBJECT (playlist->ifbutton), "clicked", - GTK_SIGNAL_FUNC (gui_add_free_pattern), playlist); - gtk_signal_connect (GTK_OBJECT (playlist->icbutton), "clicked", - GTK_SIGNAL_FUNC (gui_add_free_pattern_and_copy), playlist); - + g_signal_connect(playlist, "current_position_changed", + G_CALLBACK(gui_playlist_position_changed), NULL); + g_signal_connect(playlist, "restart_position_changed", + G_CALLBACK(gui_playlist_restart_position_changed), NULL); + g_signal_connect(playlist, "song_length_changed", + G_CALLBACK(gui_playlist_song_length_changed), NULL); + g_signal_connect(playlist, "entry_changed", + G_CALLBACK(gui_playlist_entry_changed), NULL); + g_signal_connect(playlist->ibutton, "clicked", + G_CALLBACK(gui_insert_pattern), playlist); + g_signal_connect(playlist->ifbutton, "clicked", + G_CALLBACK(gui_add_free_pattern), playlist); + g_signal_connect(playlist->icbutton, "clicked", + G_CALLBACK(gui_add_free_pattern_and_copy), playlist); + playlist_enable(playlist, TRUE); + + thing = gui_get_widget(gui_builder, "add_free", XML_FILE); + g_signal_connect(thing, "activate", + G_CALLBACK(gui_add_free_pattern), playlist); + thing = gui_get_widget(gui_builder, "add_copy", XML_FILE); + g_signal_connect(thing, "activate", + G_CALLBACK(gui_add_free_pattern_and_copy), playlist); + thing = gtk_vseparator_new(); gtk_box_pack_start(GTK_BOX(mainwindow_upper_hbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); /* Basic editing commands and properties */ - + table = gtk_table_new(5, 2, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_table_set_col_spacings(GTK_TABLE(table), 4); gtk_box_pack_start(GTK_BOX(mainwindow_upper_hbox), table, FALSE, TRUE, 0); gtk_widget_show(table); - gtk_widget_realize(mainwindow); /* to produce the correct style... */ - style = gtk_widget_get_style(mainwindow); hbox = gtk_hbox_new(FALSE, 4); gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 2, 0, 1); gtk_widget_show(hbox); - pm = gdk_pixmap_create_from_xpm(mainwindow->window, - &mask, &style->bg[GTK_STATE_NORMAL], - PREFIX"/share/soundtracker/play.xpm"); - pmw = gtk_pixmap_new(pm, mask); - pbutton = thing = gtk_button_new(); + pmw = gtk_image_new_from_file(pixmaps[GUI_PIXMAP_PLAY]); + thing = gtk_button_new(); gtk_container_add(GTK_CONTAINER(thing), pmw); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC(play_song), NULL); - gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE,0); - gui_hang_tooltip(thing, _("Play Song")); + g_signal_connect_swapped(thing, "clicked", + G_CALLBACK(play_song), GINT_TO_POINTER(FALSE)); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + gtk_widget_set_tooltip_text(thing, _("Play Song")); gtk_widget_show_all(thing); - pm = gdk_pixmap_create_from_xpm(mainwindow->window, - &mask, &style->bg[GTK_STATE_NORMAL], - PREFIX"/share/soundtracker/play_cur.xpm"); - pmw = gtk_pixmap_new(pm, mask); + pmw = gtk_image_new_from_file(pixmaps[GUI_PIXMAP_PLAY_CUR]); thing = gtk_button_new(); gtk_container_add(GTK_CONTAINER(thing), pmw); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC(play_pattern), NULL); - gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE,0); - gui_hang_tooltip(thing, _("Play Pattern")); + g_signal_connect(thing, "clicked", + G_CALLBACK(play_pattern), NULL); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + gtk_widget_set_tooltip_text(thing, _("Play Pattern")); gtk_widget_show_all(thing); - pm = gdk_pixmap_create_from_xpm(mainwindow->window, - &mask, &style->bg[GTK_STATE_NORMAL], - PREFIX"/share/soundtracker/stop.xpm"); - pmw = gtk_pixmap_new(pm, mask); + pmw = gtk_image_new_from_file(pixmaps[GUI_PIXMAP_PLAY_FROM]); thing = gtk_button_new(); gtk_container_add(GTK_CONTAINER(thing), pmw); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC(gui_play_stop), NULL); - gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE,0); - gui_hang_tooltip(thing, _("Stop")); + g_signal_connect_swapped(thing, "clicked", + G_CALLBACK(play_song), GINT_TO_POINTER(TRUE)); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + gtk_widget_set_tooltip_text(thing, _("Play From Cursor")); gtk_widget_show_all(thing); - - add_empty_hbox(hbox); + + pmw = gtk_image_new_from_file(pixmaps[GUI_PIXMAP_PLAY_BLOCK]); + thing = gtk_button_new(); + gtk_container_add(GTK_CONTAINER(thing), pmw); + g_signal_connect(thing, "clicked", + G_CALLBACK(gui_play_block), NULL); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + gtk_widget_set_tooltip_text(thing, _("Play Block")); + gtk_widget_show_all(thing); + + pmw = gtk_image_new_from_file(pixmaps[GUI_PIXMAP_STOP]); + thing = gtk_button_new(); + gtk_container_add(GTK_CONTAINER(thing), pmw); + g_signal_connect(thing, "clicked", + G_CALLBACK(gui_play_stop), NULL); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + gtk_widget_set_tooltip_text(thing, _("Stop")); + gtk_widget_show_all(thing); + + pmw = gtk_image_new_from_file(pixmaps[GUI_PIXMAP_LOOP]); + looping_toggle = gtk_toggle_button_new(); + gtk_container_add(GTK_CONTAINER(looping_toggle), pmw); + thing = gui_get_widget(gui_builder, "settings_loop_playback", XML_FILE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(looping_toggle), gui_settings.looped); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(thing), gui_settings.looped); + gtk_box_pack_end(GTK_BOX(hbox), looping_toggle, FALSE, FALSE, 0); + gtk_widget_set_tooltip_text(looping_toggle, _("Loop Playback")); + gtk_widget_show_all(looping_toggle); + g_signal_connect(looping_toggle, "toggled", + G_CALLBACK(looping_toggled), thing); + + hbox = gtk_hbox_new(FALSE, 4); + gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 2, 1, 2); + gtk_widget_show(hbox); thing = gtk_label_new(_("Pat")); gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - spin_editpat = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 255, 1.0, 10.0, 0.0)), 0, 0); + spin_editpat = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 255, 1.0, 10.0, 0.0)), 1, 0, TRUE); extspinbutton_disable_size_hack(EXTSPINBUTTON(spin_editpat)); - gui_hang_tooltip(spin_editpat, _("Edited pattern")); + gtk_widget_set_tooltip_text(spin_editpat, _("Edited pattern")); gtk_box_pack_start(GTK_BOX(hbox), spin_editpat, FALSE, TRUE, 0); gtk_widget_show(spin_editpat); - gtk_signal_connect(GTK_OBJECT(spin_editpat), "changed", - GTK_SIGNAL_FUNC(gui_editpat_changed), NULL); - - pm = gdk_pixmap_create_from_xpm(mainwindow->window, - &mask, &style->bg[GTK_STATE_NORMAL], - PREFIX"/share/soundtracker/lock.xpm"); - pmw = gtk_pixmap_new(pm, mask); + g_signal_connect(spin_editpat, "value-changed", + G_CALLBACK(gui_editpat_changed), NULL); + + pmw = gtk_image_new_from_file(pixmaps[GUI_PIXMAP_LOCK]); toggle_lock_editpat = thing = gtk_toggle_button_new(); gtk_container_add(GTK_CONTAINER(thing), pmw); - gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE,0); - gui_hang_tooltip(thing, _("When enabled, browsing the playlist does not change the edited pattern.")); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + gtk_widget_set_tooltip_text(thing, _("When enabled, browsing the playlist does not change the edited pattern.")); gtk_widget_show_all(thing); - thing = gui_subs_create_slider(&tempo_slider); - gtk_table_attach_defaults(GTK_TABLE(table), thing, 0, 1, 3, 4); + spin_patlen = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(64, 1, 256, 1.0, 16.0, 0.0)), 1, 0, TRUE); + extspinbutton_disable_size_hack(EXTSPINBUTTON(spin_patlen)); + gtk_widget_set_tooltip_text(spin_patlen, _("Pattern Length")); + gtk_box_pack_end(GTK_BOX(hbox), spin_patlen, FALSE, TRUE, 0); + g_signal_connect(spin_patlen, "value-changed", + G_CALLBACK(gui_patlen_changed), NULL); + gtk_widget_show(spin_patlen); + thing = gtk_label_new(_("Length")); + gtk_box_pack_end(GTK_BOX(hbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - thing = gui_subs_create_slider(&bpm_slider); + thing = gui_labelled_spin_button_new(_("Tempo"), 1, 31, &tempo_spin, gui_tempo_changed, NULL, TRUE, &tempo_spin_id); + gtk_table_attach_defaults(GTK_TABLE(table), thing, 0, 1, 3, 4); + gtk_widget_show(thing); + + thing = gui_labelled_spin_button_new("BPM", 32, 255, &bpm_spin, gui_bpm_changed, NULL, TRUE, &bpm_spin_id); gtk_table_attach_defaults(GTK_TABLE(table), thing, 1, 2, 3, 4); gtk_widget_show(thing); hbox = gtk_hbox_new(FALSE, 4); - gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 2, 1, 2); + gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 2, 2, 3); gtk_widget_show(hbox); thing = gtk_label_new(_("Number of Channels:")); gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - add_empty_hbox(hbox); - - spin_numchans = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(8, 2, 32, 2.0, 8.0, 0.0)), 0, 0); + spin_numchans = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(8, 2, 32, 2.0, 8.0, 0.0)), 1, 0, TRUE); extspinbutton_disable_size_hack(EXTSPINBUTTON(spin_numchans)); - gtk_box_pack_start(GTK_BOX(hbox), spin_numchans, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(spin_numchans), "changed", - GTK_SIGNAL_FUNC(gui_numchans_changed), NULL); + gtk_box_pack_end(GTK_BOX(hbox), spin_numchans, FALSE, TRUE, 0); + g_signal_connect(spin_numchans, "value-changed", + G_CALLBACK(gui_numchans_changed), NULL); gtk_widget_show(spin_numchans); hbox = gtk_hbox_new(FALSE, 4); - gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 2, 2, 3); - gtk_widget_show(hbox); - - thing = gtk_label_new(_("Pattern Length")); - gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - - add_empty_hbox(hbox); - - spin_patlen = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(64, 1, 256, 1.0, 16.0, 0.0)), 0, 0); - extspinbutton_disable_size_hack(EXTSPINBUTTON(spin_patlen)); - gtk_box_pack_start(GTK_BOX(hbox), spin_patlen, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(spin_patlen), "changed", - GTK_SIGNAL_FUNC(gui_patlen_changed), NULL); - gtk_widget_show(spin_patlen); - - hbox = gtk_hbox_new(FALSE, 4); gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 2, 4, 5); gtk_widget_show(hbox); - + vbox = gtk_vbox_new(FALSE, 0); - pm = gdk_pixmap_create_from_xpm(mainwindow->window, - &mask, &style->bg[GTK_STATE_NORMAL], - PREFIX"/share/soundtracker/sharp.xpm"); - alt[0] = gtk_pixmap_new(pm, mask); + alt[0] = gtk_image_new_from_file(DATADIR "/" PACKAGE "/sharp.xpm"); gtk_box_pack_start(GTK_BOX(vbox), alt[0], FALSE, FALSE, 0); - - pm = gdk_pixmap_create_from_xpm(mainwindow->window, - &mask, &style->bg[GTK_STATE_NORMAL], - PREFIX"/share/soundtracker/flat.xpm"); - alt[1] = gtk_pixmap_new(pm, mask); + + alt[1] = gtk_image_new_from_file(DATADIR "/" PACKAGE "/flat.xpm"); gtk_widget_show(alt[gui_settings.sharp ? 0 : 1]); gtk_box_pack_start(GTK_BOX(vbox), alt[1], FALSE, FALSE, 0); gtk_widget_show(vbox); - + thing = gtk_button_new(); gtk_container_add(GTK_CONTAINER(thing), vbox); gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); - gui_hang_tooltip(thing, _("Set preferred accidental type")); + gtk_widget_set_tooltip_text(thing, _("Set preferred accidental type")); gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(gui_accidentals_clicked), NULL); + g_signal_connect(thing, "clicked", + G_CALLBACK(gui_accidentals_clicked), NULL); add_empty_hbox(hbox); thing = gtk_toggle_button_new_with_label(_("Measure")); - gui_hang_tooltip(thing, _("Enable row highlighting")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing),gui_settings.highlight_rows); + gtk_widget_set_tooltip_text(thing, _("Enable row highlighting")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.highlight_rows); gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(gui_highlight_rows_toggled), NULL); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_highlight_rows_toggled), NULL); gtk_widget_show(thing); - thing = gtk_combo_new(); + selected = -1; + ls = gtk_list_store_new(1, G_TYPE_STRING); + + for (i = 0; measure_msr[i].title != NULL; i++) { + gtk_list_store_append(ls, &iter); + gtk_list_store_set(ls, &iter, 0, measure_msr[i].title, -1); + if ((measure_msr[i].major == gui_settings.highlight_rows_n) && (measure_msr[i].minor == gui_settings.highlight_rows_minor_n)) + selected = i; + } + if (selected == -1) + selected = i + 1; + gtk_list_store_append(ls, &iter); /* separator */ + gtk_list_store_set(ls, &iter, 0, "", -1); + gtk_list_store_append(ls, &iter); + gtk_list_store_set(ls, &iter, 0, _("Other..."), -1); + + thing = gui_combo_new(ls); + gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(thing), is_sep, GINT_TO_POINTER(i), NULL); + gtk_combo_box_set_active(GTK_COMBO_BOX(thing), selected); + + gtk_widget_set_tooltip_text(thing, _("Row highlighting configuration")); gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); gtk_widget_show(thing); - entry = GTK_COMBO(thing)->entry; - gui_hang_tooltip(entry, _("Row highlighting configuration")); - style = gtk_widget_get_style(entry); - - glist = NULL; - wdth = 0; - selected = -1; - for(i = 0; measure_msr[i].title != NULL; i++) { - glist = g_list_append(glist, (gpointer)measure_msr[i].title); - if ((cur = gdk_string_width(style->font, measure_msr[i].title)) > wdth) - wdth = cur; - if ((measure_msr[i].major == gui_settings.highlight_rows_n) && - (measure_msr[i].minor == gui_settings.highlight_rows_minor_n)) - selected = i; - } - if (selected == -1) selected = i; - other = _("Other..."); - glist = g_list_append(glist, other); - if ((cur = gdk_string_width(style->font,other)) > wdth) wdth = cur; - - gtk_combo_set_popdown_strings(GTK_COMBO(thing), glist); - list = GTK_COMBO(thing)->list; - gtk_list_select_item(GTK_LIST(list), selected); - gtk_signal_connect(GTK_OBJECT(list), "select_child", - GTK_SIGNAL_FUNC(measure_changed), NULL); - /* the direct use of combo->popwin is not recommended, but I couldn't find another way... */ - gtk_signal_connect(GTK_OBJECT(GTK_COMBO(thing)->popwin), "hide", - GTK_SIGNAL_FUNC(popwin_hide), entry); - - gtk_widget_set_usize(entry, wdth + 5, -1);//-1 to suppress the height changing - gtk_entry_set_editable(GTK_ENTRY(entry), FALSE); - + + g_signal_connect(thing, "changed", G_CALLBACK(measure_changed), GINT_TO_POINTER(i)); + g_signal_connect(thing, "notify::popup-shown", G_CALLBACK(popwin_hide), GINT_TO_POINTER(i)); + add_empty_hbox(hbox); - + vbox = gtk_vbox_new(FALSE, 0); - pm = gdk_pixmap_create_from_xpm(mainwindow->window, - &mask, &style->bg[GTK_STATE_NORMAL], - PREFIX"/share/soundtracker/downarrow.xpm"); - arrow[0] = gtk_pixmap_new(pm, mask); + arrow[0] = gtk_image_new_from_file(DATADIR "/" PACKAGE "/downarrow.xpm"); gtk_box_pack_start(GTK_BOX(vbox), arrow[0], FALSE, FALSE, 0); - - pm = gdk_pixmap_create_from_xpm(mainwindow->window, - &mask, &style->bg[GTK_STATE_NORMAL], - PREFIX"/share/soundtracker/rightarrow.xpm"); - arrow[1] = gtk_pixmap_new(pm, mask); + + arrow[1] = gtk_image_new_from_file(DATADIR "/" PACKAGE "/rightarrow.xpm"); gtk_box_pack_start(GTK_BOX(vbox), arrow[1], FALSE, FALSE, 0); gtk_widget_show(arrow[gui_settings.advance_cursor_in_fx_columns ? 1 : 0]); gtk_widget_show(vbox); - + thing = gtk_button_new(); gtk_container_add(GTK_CONTAINER(thing), vbox); gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); - gui_hang_tooltip(thing, _("Change effect column editing direction")); + gtk_widget_set_tooltip_text(thing, _("Change effect column editing direction")); gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(gui_direction_clicked), NULL); - + g_signal_connect(thing, "clicked", + G_CALLBACK(gui_direction_clicked), NULL); + /* Scopes Group or Instrument / Sample Listing */ thing = gtk_vseparator_new(); gtk_box_pack_start(GTK_BOX(mainwindow_upper_hbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); -#ifndef NO_GDK_PIXBUF - scopegroup = SCOPE_GROUP(scope_group_new(gdk_pixbuf_new_from_file(PREFIX"/share/soundtracker/muted.png"))); -#else - scopegroup = SCOPE_GROUP(scope_group_new()); -#endif + scopegroup = SCOPE_GROUP(scope_group_new(gui_pixbuf_new_from_file(DATADIR "/" PACKAGE "/muted.png"), + gui_pixbuf_new_from_file(DATADIR "/" PACKAGE "/unmuted.png"))); gtk_widget_show(GTK_WIDGET(scopegroup)); gtk_box_pack_start(GTK_BOX(mainwindow_upper_hbox), GTK_WIDGET(scopegroup), TRUE, TRUE, 0); @@ -2150,42 +3098,29 @@ thing = gtk_vseparator_new(); gtk_box_pack_start(GTK_BOX(mainwindow_upper_hbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - + hbox = gtk_vbox_new(FALSE, 2); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(mainwindow_upper_hbox), hbox, FALSE, TRUE, 0); - adj_amplification = GTK_ADJUSTMENT(gtk_adjustment_new(7.0, 0, 8.0, 0.1, 0.1, 0.1)); + adj_amplification = GTK_ADJUSTMENT(gtk_adjustment_new(20.0, 0.0, 61.0, 1.0, 1.0, 1.0)); thing = gtk_vscale_new(adj_amplification); - gui_hang_tooltip(thing, _("Global amplification")); + gtk_widget_set_tooltip_text(thing, _("Global amplification")); gtk_scale_set_draw_value(GTK_SCALE(thing), FALSE); gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(hbox), thing, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT(adj_amplification), "value_changed", - GTK_SIGNAL_FUNC(gui_adj_amplification_changed), NULL); - frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); - gtk_widget_show(frame); - - gui_clipping_led = thing = gtk_drawing_area_new(); - gtk_drawing_area_size(GTK_DRAWING_AREA(thing), 15, 15); - gtk_widget_set_events(thing, GDK_EXPOSURE_MASK); - gtk_container_add (GTK_CONTAINER(frame), thing); - colormap = gtk_widget_get_colormap(thing); - gui_clipping_led_on.red = 0xffff; - gui_clipping_led_on.green = 0; - gui_clipping_led_on.blue = 0; - gui_clipping_led_on.pixel = 0; - gui_clipping_led_off.red = 0; - gui_clipping_led_off.green = 0; - gui_clipping_led_off.blue = 0; - gui_clipping_led_off.pixel = 0; - gdk_color_alloc(colormap, &gui_clipping_led_on); - gdk_color_alloc(colormap, &gui_clipping_led_off); - gtk_signal_connect(GTK_OBJECT(thing), "event", GTK_SIGNAL_FUNC(gui_clipping_led_event), thing); - gtk_widget_show (thing); + button = gtk_button_new(); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, TRUE, 0); + gtk_widget_show(button); + g_signal_connect(button, "clicked", G_CALLBACK(gui_amp_estimate), NULL); + gtk_widget_set_tooltip_text(button, _("Estimate the best amplification by pressing on the clipping indicator")); + + led_normal = gui_pixbuf_new_from_file(DATADIR "/" PACKAGE "/led_off.xpm"); + led_clipping = gui_pixbuf_new_from_file(DATADIR "/" PACKAGE "/led_on.xpm"); + gui_clipping_led = thing = gtk_image_new_from_pixbuf(led_normal); + gtk_container_add(GTK_CONTAINER(button), thing); + gtk_widget_show(thing); hbox = gtk_vbox_new(FALSE, 2); gtk_widget_show(hbox); @@ -2193,19 +3128,19 @@ adj_pitchbend = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, -20.0, +20.0, 1, 1, 1)); thing = gtk_vscale_new(adj_pitchbend); - gui_hang_tooltip(thing, _("Pitchbend")); + gtk_widget_set_tooltip_text(thing, _("Pitchbend")); gtk_scale_set_draw_value(GTK_SCALE(thing), FALSE); gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(hbox), thing, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT(adj_pitchbend), "value_changed", - GTK_SIGNAL_FUNC(gui_adj_pitchbend_changed), NULL); + g_signal_connect(adj_pitchbend, "value_changed", + G_CALLBACK(gui_adj_pitchbend_changed), NULL); thing = gtk_button_new_with_label("R"); - gui_hang_tooltip(thing, _("Reset pitchbend to its normal value")); + gtk_widget_set_tooltip_text(thing, _("Reset pitchbend to its normal value")); gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC(gui_reset_pitch_bender), NULL); + g_signal_connect(thing, "clicked", + G_CALLBACK(gui_reset_pitch_bender), NULL); /* Instrument, sample, editing status */ @@ -2214,17 +3149,17 @@ gtk_widget_show(hbox); editing_toggle = thing = gtk_check_button_new_with_label(_("Editing")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), 0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), 0); gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - gtk_signal_connect (GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(editing_toggled), NULL); + g_signal_connect(G_OBJECT(thing), "toggled", + G_CALLBACK(editing_toggled), NULL); thing = gtk_label_new(_("Octave")); gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - spin_octave = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(3.0, 0.0, 6.0, 1.0, 1.0, 0.0)), 0, 0); + spin_octave = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(3.0, 0.0, 6.0, 1.0, 1.0, 0.0)), 0, 0, TRUE); extspinbutton_disable_size_hack(EXTSPINBUTTON(spin_octave)); gtk_box_pack_start(GTK_BOX(hbox), spin_octave, FALSE, TRUE, 0); gtk_widget_show(spin_octave); @@ -2233,7 +3168,7 @@ gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - spin_jump = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(1.0, 0.0, 16.0, 1.0, 1.0, 0.0)), 0, 0); + spin_jump = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(1.0, 0.0, 16.0, 1.0, 1.0, 0.0)), 0, 0, TRUE); extspinbutton_disable_size_hack(EXTSPINBUTTON(spin_jump)); gtk_box_pack_start(GTK_BOX(hbox), spin_jump, FALSE, TRUE, 0); gtk_widget_show(spin_jump); @@ -2242,33 +3177,47 @@ gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - curins_spin = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(1.0, 1.0, 128.0, 1.0, 16.0, 0.0)), 0, 0); + curins_spin = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(1.0, 1.0, 128.0, 1.0, 16.0, 0.0)), 0, 0, TRUE); extspinbutton_disable_size_hack(EXTSPINBUTTON(curins_spin)); gtk_box_pack_start(GTK_BOX(hbox), curins_spin, FALSE, TRUE, 0); gtk_widget_show(curins_spin); - gtk_signal_connect (GTK_OBJECT(curins_spin), "changed", - GTK_SIGNAL_FUNC(current_instrument_changed), NULL); + g_signal_connect(curins_spin, "value-changed", + G_CALLBACK(current_instrument_changed), NULL); - gui_get_text_entry(22, current_instrument_name_changed, &gui_curins_name); + inch_id = gui_get_text_entry(22, current_instrument_name_changed, &gui_curins_name); gtk_box_pack_start(GTK_BOX(hbox), gui_curins_name, TRUE, TRUE, 0); gtk_widget_show(gui_curins_name); - gtk_widget_set_usize(gui_curins_name, 100, gui_curins_name->requisition.height); + gtk_widget_set_size_request(gui_curins_name, 100, -1); thing = gtk_label_new(_("Sample")); gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - cursmpl_spin = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 15.0, 1.0, 4.0, 0.0)), 0, 0); + cursmpl_spin = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 127.0, 1.0, 4.0, 0.0)), 0, 0, TRUE); extspinbutton_disable_size_hack(EXTSPINBUTTON(cursmpl_spin)); gtk_box_pack_start(GTK_BOX(hbox), cursmpl_spin, FALSE, TRUE, 0); gtk_widget_show(cursmpl_spin); - gtk_signal_connect (GTK_OBJECT(cursmpl_spin), "changed", - GTK_SIGNAL_FUNC(current_sample_changed), NULL); + g_signal_connect(cursmpl_spin, "value-changed", + G_CALLBACK(current_sample_changed), NULL); - gui_get_text_entry(22, current_sample_name_changed, &gui_cursmpl_name); + snch_id = gui_get_text_entry(22, current_sample_name_changed, &gui_cursmpl_name); gtk_box_pack_start(GTK_BOX(hbox), gui_cursmpl_name, TRUE, TRUE, 0); gtk_widget_show(gui_cursmpl_name); - gtk_widget_set_usize(gui_cursmpl_name, 100, gui_cursmpl_name->requisition.height); + gtk_widget_set_size_request(gui_cursmpl_name, 100, -1); + + thing = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(0.0, -40.0, 20.0, 1.0, 5.0, 0.0)), 0, 0, TRUE); + extspinbutton_disable_size_hack(EXTSPINBUTTON(thing)); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); + gtk_widget_set_tooltip_text(thing, _("Global amplification")); + gtk_widget_show(thing); + db_id = g_signal_connect(thing, "value-changed", + G_CALLBACK(spin_db_changed), adj_amplification); + g_signal_connect(adj_amplification, "value_changed", + G_CALLBACK(gui_adj_amplification_changed), thing); + + thing = gtk_label_new(_("dB")); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); + gtk_widget_show(thing); /* The notebook */ @@ -2276,113 +3225,158 @@ gtk_box_pack_start(GTK_BOX(mainvbox), notebook, TRUE, TRUE, 0); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); gtk_widget_show(notebook); - gtk_container_border_width(GTK_CONTAINER(notebook), 0); - gtk_signal_connect(GTK_OBJECT(notebook), "switch_page", - GTK_SIGNAL_FUNC(notebook_page_switched), NULL); + gtk_container_set_border_width(GTK_CONTAINER(notebook), 0); + g_signal_connect(notebook, "switch_page", + G_CALLBACK(notebook_page_switched), NULL); fileops_page_create(GTK_NOTEBOOK(notebook)); tracker_page_create(GTK_NOTEBOOK(notebook)); + g_signal_connect(tracker, "ctrl_scroll", + G_CALLBACK(scroll_songpos), NULL); instrument_page_create(GTK_NOTEBOOK(notebook)); sample_editor_page_create(GTK_NOTEBOOK(notebook)); modinfo_page_create(GTK_NOTEBOOK(notebook)); // Activate tracker page - gtk_notebook_set_page(GTK_NOTEBOOK(notebook), - 1); + gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), + 1); notebook_current_page = 1; /* Status Bar */ -#define WELCOME_MESSAGE _("Welcome to SoundTracker!") - -#ifdef USE_GNOME - dockitem = gnome_dock_item_new("Status Bar", (GNOME_DOCK_ITEM_BEH_EXCLUSIVE | GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL)); - gnome_app_add_dock_item(GNOME_APP(mainwindow), GNOME_DOCK_ITEM(dockitem), GNOME_DOCK_BOTTOM, 0, 0, 0); - gtk_widget_show(dockitem); - hbox = gtk_hbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(hbox), 2); - gtk_container_add(GTK_CONTAINER(dockitem), hbox); + gtk_container_set_border_width(GTK_CONTAINER(hbox), 2); + gtk_box_pack_start(GTK_BOX(mainvbox), hbox, FALSE, TRUE, 0); gtk_widget_show(hbox); - status_bar = gnome_appbar_new (FALSE, TRUE, GNOME_PREFERENCES_NEVER); - gtk_widget_show (status_bar); - gtk_box_pack_start (GTK_BOX (hbox), status_bar, TRUE, TRUE, 0); - gtk_widget_set_usize (status_bar, 300 , 20); /* so that it doesn't vanish when undocked */ - - thing = gtk_frame_new (NULL); - gtk_widget_show (thing); - gtk_box_pack_start (GTK_BOX (hbox), thing, FALSE, FALSE, 0); - gtk_widget_set_usize (thing, 48, 20); - gtk_frame_set_shadow_type (GTK_FRAME (thing), GTK_SHADOW_IN); - - st_clock = gtk_clock_new (GTK_CLOCK_INCREASING); - gtk_widget_show (st_clock); - gtk_container_add (GTK_CONTAINER (thing), st_clock); - gtk_widget_set_usize (st_clock, 48, 20); - gtk_clock_set_format (GTK_CLOCK (st_clock), _("%M:%S")); - gtk_clock_set_seconds(GTK_CLOCK (st_clock), 0); - - gnome_appbar_set_status(GNOME_APPBAR(status_bar), WELCOME_MESSAGE); -#else - thing = gtk_hbox_new(FALSE, 1); - gtk_box_pack_start(GTK_BOX(mainvbox), thing, FALSE, TRUE, 0); + thing = gtk_frame_new(NULL); gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(hbox), thing, TRUE, TRUE, 0); + gtk_frame_set_shadow_type(GTK_FRAME(thing), GTK_SHADOW_IN); - status_bar = gtk_statusbar_new(); - gtk_box_pack_start(GTK_BOX (thing), status_bar, TRUE, TRUE, 0); + snprintf(buf, sizeof(buf), _("Welcome to %s!"), PACKAGE_NAME); + status_bar = gtk_label_new(NULL); + gui_statusbar_update_message(buf, FALSE); + gtk_misc_set_alignment(GTK_MISC(status_bar), 0.0, 0.5); + gtk_misc_set_padding(GTK_MISC(status_bar), 4, 0); gtk_widget_show(status_bar); - gtk_widget_set_usize(status_bar, -2, 20); + gtk_container_add(GTK_CONTAINER(thing), status_bar); + + thing = gtk_frame_new(NULL); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + gtk_frame_set_shadow_type(GTK_FRAME(thing), GTK_SHADOW_IN); + + st_clock = clock_new(); + gtk_widget_show(st_clock); + gtk_container_add(GTK_CONTAINER(thing), st_clock); + gtk_widget_set_size_request(st_clock, 48, 20); + clock_set_format(CLOCK(st_clock), _("%M:%S")); + clock_set_seconds(CLOCK(st_clock), 0); + + rcmgr = gtk_recent_manager_get_default(); + recent = gtk_recent_chooser_menu_new_for_manager(rcmgr); + gtk_recent_chooser_menu_set_show_numbers(GTK_RECENT_CHOOSER_MENU(recent), TRUE); + gtk_recent_chooser_set_local_only(GTK_RECENT_CHOOSER(recent), TRUE); + gtk_recent_chooser_set_limit(GTK_RECENT_CHOOSER(recent), 10); + gtk_recent_chooser_set_show_tips(GTK_RECENT_CHOOSER(recent), TRUE); + gtk_recent_chooser_set_sort_type(GTK_RECENT_CHOOSER(recent), GTK_RECENT_SORT_MRU); + rcfilter = gtk_recent_filter_new(); + gtk_recent_filter_add_application(rcfilter, PACKAGE); + gtk_recent_chooser_set_filter(GTK_RECENT_CHOOSER(recent), rcfilter); + thing = gui_get_widget(gui_builder, "recent_item", XML_FILE); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(thing), recent); + g_signal_connect(recent, "item_activated", G_CALLBACK(recent_selected), NULL); - statusbar_context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(status_bar), "ST Statusbar"); - gtk_statusbar_push(GTK_STATUSBAR(status_bar), statusbar_context_id, WELCOME_MESSAGE); -#endif - /* capture all key presses */ gtk_widget_add_events(GTK_WIDGET(mainwindow), GDK_KEY_RELEASE_MASK); - gtk_signal_connect(GTK_OBJECT(mainwindow), "key_press_event", GTK_SIGNAL_FUNC(keyevent), (gpointer)1); - gtk_signal_connect(GTK_OBJECT(mainwindow), "key_release_event", GTK_SIGNAL_FUNC(keyevent), (gpointer)0); + g_signal_connect(mainwindow, "key-press-event", G_CALLBACK(keyevent), GINT_TO_POINTER(1)); + g_signal_connect(mainwindow, "key_release_event", G_CALLBACK(keyevent), GINT_TO_POINTER(0)); + + /* This structure should be placed after all GUI construction to make all pointers + to the file operation objects correctly initialized */ + struct menu_callback cb[] = { + { "file_open", fileops_open_dialog, loadmod }, + { "file_save_as", fileops_open_dialog, savemod }, +#if USE_SNDFILE || AUDIOFILE_VERSION + { "file_save_wav", fileops_open_dialog, renderwav }, +#endif + { "file_save_xm", fileops_open_dialog, savexm }, + { "module_clear_all", menubar_clear_clicked, GINT_TO_POINTER(1) }, + { "module_clear_patterns", menubar_clear_clicked, GINT_TO_POINTER(0) }, + { "edit_cut", menubar_handle_cutcopypaste, GINT_TO_POINTER(0) }, + { "edit_copy", menubar_handle_cutcopypaste, GINT_TO_POINTER(1) }, + { "edit_paste", menubar_handle_cutcopypaste, GINT_TO_POINTER(2) }, + { "edit_track_increment_cmd", menubar_handle_edit_menu, GINT_TO_POINTER(0) }, + { "edit_track_decrement_cmd", menubar_handle_edit_menu, GINT_TO_POINTER(1) }, + { "popup_increment_cmd", menubar_handle_edit_menu, GINT_TO_POINTER(0) }, + { "popup_decrement_cmd", menubar_handle_edit_menu, GINT_TO_POINTER(1) }, + { "edit_selection_transpose_up", menubar_handle_edit_menu, GINT_TO_POINTER(2) }, + { "edit_selection_transpose_down", menubar_handle_edit_menu, GINT_TO_POINTER(3) }, + { "edit_selection_transpose_12up", menubar_handle_edit_menu, GINT_TO_POINTER(4) }, + { "edit_selection_transpose_12down", menubar_handle_edit_menu, GINT_TO_POINTER(5) }, + { "pattern_load", fileops_open_dialog, loadpat }, + { "pattern_save", fileops_open_dialog, savepat }, + { "track_current_permanent", menubar_toggle_perm_wrapper, GINT_TO_POINTER(0) }, + { "track_all_permanent", menubar_toggle_perm_wrapper, GINT_TO_POINTER(1) }, + { "instrument_load", fileops_open_dialog, loadinstr }, + { "instrument_save", fileops_open_dialog, saveinstr }, + { NULL } + }; - if(argc == 2) { - gui_load_xm(argv[1]); + /* All widgets and main data structures are created, now it's possible to connect signals */ + gtk_builder_connect_signals(gui_builder, tracker); + history_init(gui_builder); + + for (i = 0; cb[i].widget_name; i++) { + GtkWidget* w = gui_get_widget(gui_builder, cb[i].widget_name, XML_FILE); + + if (w) + g_signal_connect_swapped(w, "activate", G_CALLBACK(cb[i].fn), cb[i].data); + } + + if (argc == 2) { + gchar* utfname = gui_filename_to_utf8(argv[1]); + if (utfname) { + if (!gui_load_xm(utfname, argv[1])) + gui_new_xm(); + g_free(utfname); + } } else { - gui_new_xm(); + gui_new_xm(); } menubar_init_prefs(); - - gtk_widget_show (mainwindow); - - if(!keys_init()) { - return 0; - } - - if(gui_splash_window) { - if(!gui_settings.gui_disable_splash && ( -#ifndef NO_GDK_PIXBUF - gui_splash_logo || -#endif - tips_dialog_show_tips)) { - gdk_window_raise(gui_splash_window->window); -// gtk_window_set_transient_for(GTK_WINDOW(gui_splash_window), GTK_WINDOW(mainwindow)); -// (doesn't do anything on WindowMaker) - gui_splash_set_label(_("Ready."), TRUE); -// gdk_window_hide(gui_splash_window->window); -// gdk_window_show(gui_splash_window->window); -#ifndef NO_GDK_PIXBUF - if(gui_splash_logo) { - gtk_widget_add_events(gui_splash_logo_area, - GDK_BUTTON_PRESS_MASK); - gtk_signal_connect (GTK_OBJECT (gui_splash_logo_area), "button_press_event", - GTK_SIGNAL_FUNC (gui_splash_close), - NULL); - } -#endif - gtk_widget_set_sensitive(gui_splash_close_button, TRUE); - } else { - gui_splash_close(); - } + fileops_page_post_create(); + gtk_widget_realize(mainwindow); + di_init_display(mainwindow); + + colors_init(mainwindow, COLORS_GET_PREFS); + gtk_window_set_icon_from_file(GTK_WINDOW(mainwindow), DATADIR "/" PACKAGE "/soundtracker-icon.png", NULL); + gtk_widget_show(mainwindow); + + if (!keys_init()) { + return 0; + } + + if (gui_splash_window) { + if (!gui_settings.gui_disable_splash && (gui_splash_logo || tips_dialog_show_tips)) { + gdk_window_raise(gui_splash_window->window); + gui_splash_set_label(_("Ready."), TRUE); + if (gui_splash_logo) { + gtk_widget_add_events(gui_splash_logo_area, + GDK_BUTTON_PRESS_MASK); + g_signal_connect(gui_splash_logo_area, "button_press_event", + G_CALLBACK(gui_splash_close), + NULL); + } + gtk_widget_set_sensitive(gui_splash_close_button, TRUE); + } else { + gui_splash_close(); + } } + gui_unset_focus(); + g_object_unref(gui_builder); return 1; } diff -Nru soundtracker-0.6.8/app/gui.h soundtracker-1.0.2~pre2/app/gui.h --- soundtracker-0.6.8/app/gui.h 2006-02-25 12:12:12.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/gui.h 2021-02-06 10:41:46.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - main user interface handling (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,17 +22,18 @@ #ifndef _GUI_H #define _GUI_H -#include +#include + #include "gui-subs.h" -#include "audio.h" +#include "xm.h" -struct STSample; +#define XML_FILE DATADIR "/" PACKAGE "/" PACKAGE ".xml" /* values for gui_playing_mode */ enum { PLAYING_SONG = 1, PLAYING_PATTERN, - PLAYING_NOTE, /* is overridden by PLAYING_SONG / PLAYING_PATTERN */ + PLAYING_NOTE, /* is overridden by PLAYING_SONG / PLAYING_PATTERN */ }; extern int gui_playing_mode; /* one of the above or 0 */ @@ -48,69 +49,132 @@ NOTEBOOK_PAGE_MODULE_INFO }; +typedef enum { + GUI_PIXMAP_PLAY = 0, + GUI_PIXMAP_PLAY_CUR, + GUI_PIXMAP_STOP, + GUI_PIXMAP_LOCK, + GUI_PIXMAP_PLAY_FROM, + GUI_PIXMAP_PLAY_BLOCK, + GUI_PIXMAP_LOOP, + GUI_PIXMAP_LAST +} GuiPixmap; + extern int notebook_current_page; /* one of the above */ #define GUI_ENABLED (gui_playing_mode != PLAYING_SONG && gui_playing_mode != PLAYING_PATTERN) #define GUI_EDITING (GTK_TOGGLE_BUTTON(editing_toggle)->active) -extern GtkWidget *editing_toggle; +extern GtkWidget* editing_toggle; extern GtkWidget *gui_curins_name, *gui_cursmpl_name; -extern GtkWidget *mainwindow; +extern GtkWidget* mainwindow; -extern void show_editmode_status (void); +extern void show_editmode_status(void); -int gui_splash (int argc, char *argv[]); -int gui_final (int argc, char *argv[]); +int gui_splash(void); +int gui_final(int argc, char* argv[]); -void gui_playlist_initialize (void); +void gui_playlist_initialize(void); -void gui_play_note (int channel, - int note); -void gui_play_note_full (unsigned channel, - unsigned note, - struct STSample *sample, - guint32 offset, - guint32 count); -void gui_play_note_keyoff (int channel); - -void gui_play_stop (void); -void gui_start_sampling (void); -void gui_stop_sampling (void); - -void gui_get_text_entry (int length, - void(*changedfunc)(), - GtkWidget **widget); - -void gui_go_to_fileops_page (void); - -void gui_set_current_instrument (int); -void gui_set_current_sample (int); -void gui_set_current_pattern (int); -void gui_update_pattern_data (void); - -int gui_get_current_instrument (void); -int gui_get_current_sample (void); -int gui_get_current_pattern (void); - -int gui_get_current_jump_value (void); -int gui_get_current_octave_value (void); -void gui_set_jump_value (int value); - -void gui_update_player_pos (const audio_player_pos *p); -void gui_clipping_indicator_update (double songtime); - -void gui_init_xm (int new_xm); -void gui_free_xm (void); -void gui_new_xm (void); -void gui_load_xm (const char *filename); - -void gui_direction_clicked (GtkWidget *widget, - gpointer data); -void gui_accidentals_clicked (GtkWidget *widget, - gpointer data); - -void gui_shrink_pattern (void); -void gui_expand_pattern (void); -void play_song (void); +void gui_play_note(int channel, + int note, + gboolean all); +void gui_play_note_full(unsigned channel, + unsigned note, + STSample* sample, + guint32 offset, + guint32 count, + gboolean use_all_channels); +gboolean gui_play_note_no_repeat(guint32 keyval, + gint modifiers, + gboolean pressed, + STSample* sample, + gint start, gint length, + gint channel, + gboolean full, + gboolean* is_note, + gboolean use_all_channels); +void gui_play_note_keyoff(int channel); +void gui_stop_note(int channel); + +void gui_play_stop(void); +void gui_play_block(void); +void gui_play_current_pattern_row(void); + +void gui_go_to_page(gint page); +static inline void gui_go_to_fileops_page(void) +{ + gui_go_to_page(NOTEBOOK_PAGE_FILE); +} + +void gui_block_smplname_entry(gboolean block); +void gui_block_instrname_entry(gboolean block); + +void gui_set_current_instrument(int); +void gui_set_current_sample(int); +void gui_set_current_pattern(int, gboolean); +void gui_set_current_position(int n); +void gui_update_pattern_data(void); + +int gui_get_current_instrument(void); +int gui_get_current_sample(void); +int gui_get_current_pattern(void); +int gui_get_current_position(void); + +int gui_get_current_jump_value(void); +int gui_get_current_octave_value(void); +void gui_set_jump_value(int value); + +void gui_update_player_pos(const gdouble time, + const gint songpos, + const gint patno, + const gint patpos, + const gint tempo, + const gint bpm); +void gui_clipping_indicator_update(const gboolean status); + +void gui_init_xm(int new_xm, gboolean updatechspin); +void gui_free_xm(void); +void gui_new_xm(void); + +void gui_direction_clicked(GtkWidget* widget, + gpointer data); +void gui_accidentals_clicked(GtkWidget* widget, + gpointer data); + +void gui_shrink_pattern(void); +void gui_expand_pattern(void); + +void gui_save_current(void); + +void gui_update_title(const gchar* filename); +void gui_reset_title(void); +void gui_offset_current_instrument(int offset); +void gui_offset_current_sample(int offset); + +void gui_statusbar_update(int message, + gboolean force_gui_update); +void gui_statusbar_update_message(gchar* message, + gboolean force_update); +void gui_statusbar_update_message_high(gchar* message); +void gui_statusbar_restore_base_message(void); + +static inline void +gui_unset_focus(void) +{ + gtk_window_set_focus(GTK_WINDOW(mainwindow), NULL); +} + +GtkWidget* gui_get_pixmap(GuiPixmap); + +void gui_log_pattern(XMPattern* pattern, const gchar* title, const gint pat, + gint len, gint alloc_len); + +gboolean +gui_handle_standard_keys(int shift, + int ctrl, + int alt, + guint32 keyval, + gint hwcode); #endif /* _GUI_H */ diff -Nru soundtracker-0.6.8/app/gui-settings.c soundtracker-1.0.2~pre2/app/gui-settings.c --- soundtracker-0.6.8/app/gui-settings.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/gui-settings.c 2021-02-13 21:17:07.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GUI configuration dialog * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,648 +21,847 @@ #include -#include - +#include #include -#ifdef USE_GNOME -#include -#endif +#include -#include "i18n.h" -#include "gui.h" +#include "colors.h" +#include "extspinbutton.h" #include "gui-settings.h" #include "gui-subs.h" +#include "gui.h" +#include "instrument-editor.h" #include "preferences.h" +#include "sample-editor.h" #include "scope-group.h" #include "track-editor.h" -#include "extspinbutton.h" #include "tracker-settings.h" -gui_prefs gui_settings = { - "---0000000", - 1, - 0, - 1, - 16, - 8, - - 0, - 0, - - 1, - 0, +#define SECTION "settings" +#define SECTION_ALWAYS "settings-always" - 1, - 0, - 0, +gui_prefs gui_settings; - 0, - 1, +extern ScopeGroup* scopegroup; - TRUE,/* sharps or flats */ - FALSE, - - 50, - 40, - 500000, - - -666, - 0, - 0, - 0, - - TRUE, - 0, - - "~/", - "~/", - "~/", - "~/", - "~/", - "~/", - "~/", - "~/", - - "rm", - "unzip", - "lha", - "zcat", - "bunzip2" -}; - -static GtkWidget *configwindow = NULL; -static GtkWidget *ts_box = NULL; - -static void prefs_scopesfreq_changed (int value); -static void prefs_trackerfreq_changed (int value); - -static gui_subs_slider prefs_scopesfreq_slider = { - N_("Scopes Frequency"), 1, 80, prefs_scopesfreq_changed -}; -static gui_subs_slider prefs_trackerfreq_slider = { - N_("Tracker Frequency"), 1, 80, prefs_trackerfreq_changed -}; +static GtkWidget *vol_sym_check, *tone_porta_m_check, *vol_dec_check; static void -gui_settings_close_requested (void) +prefs_scopesfreq_changed(GtkSpinButton *spin) { -/* I needed to change this code because I use some object from gui settings - window in the other place and these objects must not be destroyed. (yaliaev) - gtk_container_remove(GTK_CONTAINER(ts_box), trackersettings); - gtk_widget_destroy(configwindow); -*/ - gdk_window_hide(configwindow->window); -// configwindow = NULL; + gui_settings.scopes_update_freq = gtk_spin_button_get_value_as_int(spin); + scope_group_set_update_freq(scopegroup, gui_settings.scopes_update_freq); } static void -prefs_scopesfreq_changed (int value) +prefs_trackerfreq_changed(GtkSpinButton *spin) { - extern ScopeGroup *scopegroup; - gui_settings.scopes_update_freq = value; - scope_group_set_update_freq(scopegroup, value); + gui_settings.tracker_update_freq = gtk_spin_button_get_value_as_int(spin); + tracker_set_update_freq(gui_settings.tracker_update_freq); } static void -prefs_trackerfreq_changed (int value) +gui_settings_double_changed(GtkSpinButton *spin, gdouble* val) { - gui_settings.tracker_update_freq = value; - tracker_set_update_freq(value); + *val = gtk_spin_button_get_value(spin); } static void -gui_settings_hexmode_toggled (GtkWidget *widget) +gui_settings_int_changed(GtkSpinButton *spin, gint* val) { - int o = gui_settings.tracker_hexmode; - if(o != (gui_settings.tracker_hexmode = GTK_TOGGLE_BUTTON(widget)->active)) { - gtk_widget_queue_resize(GTK_WIDGET(tracker)); - } + *val = gtk_spin_button_get_value_as_int(spin); } static void -gui_settings_upcase_toggled (GtkWidget *widget) +gui_settings_asyncedit_toggled(GtkWidget* widget) { - int o = gui_settings.tracker_upcase; - if(o != (gui_settings.tracker_upcase = GTK_TOGGLE_BUTTON(widget)->active)) { - gtk_widget_queue_resize(GTK_WIDGET(tracker)); - } + gui_play_stop(); + gui_settings.asynchronous_editing = GTK_TOGGLE_BUTTON(widget)->active; } static void -gui_settings_asyncedit_toggled (GtkWidget *widget) +gui_settings_trypoly_toggled(GtkWidget* widget, GtkWidget* repeat) { gui_play_stop(); - gui_settings.asynchronous_editing = GTK_TOGGLE_BUTTON(widget)->active; + gui_settings.try_polyphony = GTK_TOGGLE_BUTTON(widget)->active; + gtk_widget_set_sensitive(repeat, gui_settings.try_polyphony); } static void -gui_settings_tempo_bpm_update_toggled (GtkWidget *widget) +gui_settings_misc_toggled(GtkWidget* widget, gboolean* var) { - int o = gui_settings.tempo_bpm_update; - if(o != (gui_settings.tempo_bpm_update = GTK_TOGGLE_BUTTON(widget)->active)) { - gtk_widget_queue_resize(GTK_WIDGET(tracker)); - } + *var = GTK_TOGGLE_BUTTON(widget)->active; } static void -gui_settings_auto_switch_toggled (GtkWidget *widget) +gui_settings_redraw_toggled(GtkWidget* widget, gboolean* var) { - int o = gui_settings.auto_switch; - if(o != (gui_settings.auto_switch = GTK_TOGGLE_BUTTON(widget)->active)) { - gtk_widget_queue_resize(GTK_WIDGET(tracker)); - } + *var = GTK_TOGGLE_BUTTON(widget)->active; + tracker_redraw(tracker); } static void -gui_settings_save_geometry_toggled (GtkWidget *widget) +gui_settings_ft2vol_toggled(GtkWidget* widget, gboolean* var) { - int o = gui_settings.save_geometry; - if(o != (gui_settings.save_geometry = GTK_TOGGLE_BUTTON(widget)->active)) { - gtk_widget_queue_resize(GTK_WIDGET(tracker)); - } + gboolean is_active = GTK_TOGGLE_BUTTON(widget)->active; + + *var = is_active; + gtk_widget_set_sensitive(vol_sym_check, is_active); + gtk_widget_set_sensitive(tone_porta_m_check, is_active); + gtk_widget_set_sensitive(vol_dec_check, is_active); + tracker_redraw(tracker); } static void -gui_settings_scopebufsize_changed (GtkSpinButton *spin) +gui_settings_volsym_toggled(GtkWidget* widget, gboolean* var) { - double n = gtk_spin_button_get_value_as_float(spin); + gboolean is_active = GTK_TOGGLE_BUTTON(widget)->active; - gui_settings.scopes_buffer_size = n * 1000000; + *var = is_active; + gtk_widget_set_sensitive(tone_porta_m_check, is_active); + tracker_redraw(tracker); } static void -gui_settings_bh_toggled (GtkWidget *widget) +gui_settings_scopebufsize_changed(GtkSpinButton* spin) { - gui_settings.bh = GTK_TOGGLE_BUTTON(widget)->active; - tracker_redraw (tracker); + double n = gtk_spin_button_get_value(spin); + + gui_settings.scopes_buffer_size = n * 1000000; } static void -gui_settings_perm_toggled (GtkWidget *widget) +gui_settings_clavierfont_changed(GtkFontButton* fb) { - gui_settings.store_perm = GTK_TOGGLE_BUTTON(widget)->active; + gui_settings.clavier_font = gtk_font_button_get_font_name(fb); + instrument_editor_update_clavier(gui_settings.clavier_font); } -void -gui_settings_highlight_rows_changed (GtkSpinButton *spin) +void gui_settings_highlight_rows_changed(GtkSpinButton* spin) { int n = gtk_spin_button_get_value_as_int(spin); gui_settings.highlight_rows_n = n; - if(gui_settings.highlight_rows) - tracker_redraw(tracker); + if (gui_settings.highlight_rows) + tracker_redraw(tracker); } -void -gui_settings_highlight_rows_minor_changed (GtkSpinButton *spin) +void gui_settings_highlight_rows_minor_changed(GtkSpinButton* spin) { int n = gtk_spin_button_get_value_as_int(spin); gui_settings.highlight_rows_minor_n = n; - if(gui_settings.highlight_rows) - tracker_redraw(tracker); + if (gui_settings.highlight_rows) + tracker_redraw(tracker); } static void -gui_settings_tracker_line_note_modified(GtkEntry *entry) +gui_settings_tracker_line_note_modified(GtkEntry* entry) { - gchar *text = gtk_entry_get_text(entry); + gchar* text = g_strdup(gtk_entry_get_text(entry)); int i; - for(i=0 ; i<3 ; i++) { - if(!text[i]) { + for (i = 0; i < 3; i++) { + if (!text[i]) { text[i] = ' '; - text[i+1] = 0; + text[i + 1] = 0; } } text[3] = 0; - if(strncmp(gui_settings.tracker_line_format, text, 3)) { - strncpy(gui_settings.tracker_line_format, text, 3); - tracker_redraw(tracker); + if (strncmp(gui_settings.tracker_line_format, text, 3)) { + strncpy(gui_settings.tracker_line_format, text, 3); + tracker_redraw(tracker); } + g_free(text); } static void -gui_settings_tracker_line_ins_modified(GtkEntry *entry) +gui_settings_tracker_line_ins_modified(GtkEntry* entry) { - gchar *text = gtk_entry_get_text(entry); + gchar* text = g_strdup(gtk_entry_get_text(entry)); int i; - for(i=0 ; i<2 ; i++) { - if(!text[i]) { + for (i = 0; i < 2; i++) { + if (!text[i]) { text[i] = ' '; - text[i+1] = 0; + text[i + 1] = 0; } } text[2] = 0; - if(strncmp(gui_settings.tracker_line_format+3, text, 2)) { - strncpy(gui_settings.tracker_line_format+3, text, 2); - tracker_redraw(tracker); + if (strncmp(gui_settings.tracker_line_format + 3, text, 2)) { + strncpy(gui_settings.tracker_line_format + 3, text, 2); + tracker_redraw(tracker); } + g_free(text); } static void -gui_settings_tracker_line_vol_modified(GtkEntry *entry) +gui_settings_tracker_line_vol_modified(GtkEntry* entry) { - gchar *text = gtk_entry_get_text(entry); + gchar* text = g_strdup(gtk_entry_get_text(entry)); int i; - for(i=0 ; i<2 ; i++) { - if(!text[i]) { + for (i = 0; i < 2; i++) { + if (!text[i]) { text[i] = ' '; - text[i+1] = 0; + text[i + 1] = 0; } } text[2] = 0; - if(strncmp(gui_settings.tracker_line_format+5, text, 2)) { - strncpy(gui_settings.tracker_line_format+5, text, 2); - tracker_redraw(tracker); + if (strncmp(gui_settings.tracker_line_format + 5, text, 2)) { + strncpy(gui_settings.tracker_line_format + 5, text, 2); + tracker_redraw(tracker); } + g_free(text); } static void -gui_settings_tracker_line_effect_modified(GtkEntry *entry, GdkEventKey *event) +gui_settings_tracker_line_effect_modified(GtkEntry* entry, GdkEventKey* event) { - gchar *text = gtk_entry_get_text(entry); + gchar* text = g_strdup(gtk_entry_get_text(entry)); int i; - for(i=0 ; i<3 ; i++) { - if(!text[i]) { + for (i = 0; i < 3; i++) { + if (!text[i]) { text[i] = ' '; - text[i+1] = 0; + text[i + 1] = 0; } } text[3] = 0; - if(strncmp(gui_settings.tracker_line_format+7, text, 3)) { - strncpy(gui_settings.tracker_line_format+7, text, 3); - tracker_redraw(tracker); + if (strncmp(gui_settings.tracker_line_format + 7, text, 3)) { + strncpy(gui_settings.tracker_line_format + 7, text, 3); + tracker_redraw(tracker); } + g_free(text); +} + +static void +gui_settings_set_scopes_mode(GtkToggleButton* button, gpointer data) +{ + if (gtk_toggle_button_get_active(button)) { + SampleDisplayMode i = GPOINTER_TO_INT(data); + + gui_settings.scopes_mode = i; + scope_group_set_mode(scopegroup, i); + } +} + +static void +gui_settings_set_selection_mode(GtkComboBox* combo) +{ + gui_settings.selection_mode = gtk_combo_box_get_active(combo); +} + +static void +gui_settings_set_editor_mode(GtkToggleButton* button, gpointer data) +{ + if (gtk_toggle_button_get_active(button)) { + SampleDisplayMode i = GPOINTER_TO_INT(data); + + gui_settings.editor_mode = i; + sample_editor_set_mode(SAMPLE_EDITOR_DISPLAY_EDITOR, i); + } +} + +static void +gui_settings_set_sampling_mode(GtkToggleButton* button, gpointer data) +{ + if (gtk_toggle_button_get_active(button)) { + SampleDisplayMode i = GPOINTER_TO_INT(data); + + gui_settings.editor_mode = i; + sample_editor_set_mode(SAMPLE_EDITOR_DISPLAY_SAMPLING, i); + } +} + +static void +modes_radio_create(GtkWidget* table, + GtkWidget** array, + const guint column, + void (*sigfunc)(GtkToggleButton*, gpointer), + SampleDisplayMode mode) +{ + guint i; + GtkWidget* thing; + + for (i = 0; i < SAMPLE_DISPLAY_MODE_LAST; i++) { + GtkWidget* alignment; + + alignment = gtk_alignment_new(0.5, 0.5, 0.0, 0.0); + thing = array[i] = + gtk_radio_button_new(i == 0 ? NULL : gtk_radio_button_get_group(GTK_RADIO_BUTTON(thing))); + gtk_container_add(GTK_CONTAINER(alignment), thing); + gtk_table_attach_defaults(GTK_TABLE(table), alignment, column, column + 1, i + 1, i + 2); + if (i == mode) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), TRUE); + g_signal_connect(thing, "clicked", G_CALLBACK(sigfunc), GINT_TO_POINTER(i)); + } +} + +static void +fonts_dialog(GtkWidget* window) +{ + static GtkWidget* dialog = NULL; + GtkWidget *mainbox, *thing; + + if (!dialog) { + gchar* buf; + + buf = g_strdup_printf(_("%s fonts configuration"), PACKAGE_NAME); + dialog = gtk_dialog_new_with_buttons(buf, GTK_WINDOW(window), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); + g_free(buf); + gui_dialog_connect(dialog, NULL); + mainbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + + /* The tracker widget settings */ + g_object_ref(G_OBJECT(trackersettings)); + gtk_box_pack_start(GTK_BOX(mainbox), trackersettings, TRUE, TRUE, 0); + + thing = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 4); + + gtk_widget_show_all(dialog); + } else + gtk_window_present(GTK_WINDOW(dialog)); } -void -gui_settings_dialog (void) +void gui_settings_dialog(void) { - GtkWidget *mainbox, *mainhbox, *thing, *box1, *hbox, *vbox1; - GtkTooltips *tooltips; + static GtkWidget* configwindow = NULL; + static GtkWidget *scopes_radio[SAMPLE_DISPLAY_MODE_LAST], + *editor_radio[SAMPLE_DISPLAY_MODE_LAST], + *sampling_radio[SAMPLE_DISPLAY_MODE_LAST]; + + static gchar *sel_mode[] = {N_("Classic ST"), N_("FT2"), N_("Mixed")}; + + GtkWidget *mainbox, *sw, *thing, *thing1, *box1, *vbox1, *spin, *table; + GtkListStore* list_store; + GtkTreeIter iter; + GtkAllocation all; + PangoContext *context; + PangoLayout *layout; gchar stmp[5]; + gint wdth, hght; + guint i; - if(configwindow != NULL) { - if (!gdk_window_is_visible(configwindow->window)) - gdk_window_show(configwindow->window); - gdk_window_raise(configwindow->window); - return; - } - -#ifdef USE_GNOME - configwindow = gnome_app_new("SoundTracker", _("GUI Configuration")); -#else - configwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(configwindow), _("GUI Configuration")); -#endif - gtk_signal_connect (GTK_OBJECT (configwindow), "delete_event", - GTK_SIGNAL_FUNC (gui_settings_close_requested), NULL); -// gtk_window_set_policy(GTK_WINDOW(configwindow), FALSE, FALSE, FALSE); - - mainbox = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(mainbox), 4); -#ifdef USE_GNOME - gnome_app_set_contents(GNOME_APP(configwindow), mainbox); -#else - gtk_container_add(GTK_CONTAINER(configwindow), mainbox); -#endif - gtk_widget_show(mainbox); - - mainhbox = gtk_hbox_new(FALSE, 4); - gtk_box_pack_start(GTK_BOX(mainbox), mainhbox, TRUE, TRUE, 0); - gtk_widget_show(mainhbox); + if (configwindow != NULL) { + gtk_window_present(GTK_WINDOW(configwindow)); + return; + } + + configwindow = gtk_dialog_new_with_buttons(_("GUI Configuration"), GTK_WINDOW(mainwindow), 0, + GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); + gui_dialog_connect(configwindow, NULL); + gui_dialog_adjust(configwindow, GTK_RESPONSE_CLOSE); + mainbox = gtk_dialog_get_content_area(GTK_DIALOG(configwindow)); + + sw = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_box_pack_start(GTK_BOX(mainbox), sw, TRUE, TRUE, 0); vbox1 = gtk_vbox_new(FALSE, 2); - gtk_box_pack_start(GTK_BOX(mainhbox), vbox1, FALSE, TRUE, 0); - gtk_widget_show(vbox1); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), vbox1); + gtk_viewport_set_shadow_type(GTK_VIEWPORT(gtk_bin_get_child(GTK_BIN(sw))), GTK_SHADOW_NONE); - tooltips = gtk_tooltips_new(); - gtk_object_set_data(GTK_OBJECT(configwindow), "tooltips", tooltips); - - thing = gui_subs_create_slider(&prefs_scopesfreq_slider); + thing = gui_labelled_spin_button_new(_("Tracker Frequency"), 1, 80, + &spin, prefs_trackerfreq_changed, NULL, FALSE, NULL); gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), gui_settings.tracker_update_freq); + + thing = gui_labelled_spin_button_new(_("Scopes Frequency"), 1, 80, + &spin, prefs_scopesfreq_changed, NULL, FALSE, NULL); + gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), gui_settings.scopes_update_freq); + + thing = gtk_label_new(_("Sample displays' mode")); + gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); + table = gtk_table_new(3, 4, TRUE); + thing = gtk_label_new(_("Scopes")); + gtk_table_attach_defaults(GTK_TABLE(table), thing, 1, 2, 0, 1); + thing = gtk_label_new(_("Smpl. Ed.")); + gtk_table_attach_defaults(GTK_TABLE(table), thing, 2, 3, 0, 1); + thing = gtk_label_new(_("Sampling")); + gtk_table_attach_defaults(GTK_TABLE(table), thing, 3, 4, 0, 1); + thing = gtk_label_new(_("Strobo")); + gtk_widget_set_tooltip_text(thing, + _("Fast, but not so much accurate method for waveforms' drawing")); + gtk_table_attach_defaults(GTK_TABLE(table), thing, 0, 1, 1, 2); + thing = gtk_label_new(_("Minmax")); + gtk_widget_set_tooltip_text(thing, + _("More realistic waveform drawing method with higher CPU load")); + gtk_table_attach_defaults(GTK_TABLE(table), thing, 0, 1, 2, 3); + + modes_radio_create(table, scopes_radio, 1, gui_settings_set_scopes_mode, gui_settings.scopes_mode); + modes_radio_create(table, editor_radio, 2, gui_settings_set_editor_mode, gui_settings.editor_mode); + modes_radio_create(table, sampling_radio, 3, gui_settings_set_sampling_mode, gui_settings.sampling_mode); + + gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, TRUE, 0); + + box1 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox1), box1, FALSE, TRUE, 0); - thing = gui_subs_create_slider(&prefs_trackerfreq_slider); + thing = gtk_label_new(_("Scopes buffer size [MB]")); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, FALSE, 0); + + thing = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new((double)gui_settings.scopes_buffer_size / 1000000, 0.5, 5.0, 0.1, 1.0, 0.0)), 0, 0, FALSE); + gtk_box_pack_end(GTK_BOX(box1), thing, FALSE, FALSE, 0); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(thing), 1); + g_signal_connect(thing, "value-changed", + G_CALLBACK(gui_settings_scopebufsize_changed), NULL); + + thing = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); thing = gtk_check_button_new_with_label(_("Hexadecimal row numbers")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), gui_settings.tracker_hexmode); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.tracker_hexmode); gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(gui_settings_hexmode_toggled), NULL); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_redraw_toggled), &gui_settings.tracker_hexmode); thing = gtk_check_button_new_with_label(_("Use upper case letters for hex numbers")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), gui_settings.tracker_upcase); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.tracker_upcase); + gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_redraw_toggled), &gui_settings.tracker_upcase); + + thing = gtk_check_button_new_with_label(_("Use note name B instead of H")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.bh); gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(gui_settings_upcase_toggled), NULL); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_redraw_toggled), &gui_settings.bh); + + thing = gtk_check_button_new_with_label(_("FT2-like volume column")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.tracker_ft2_volume); + gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_ft2vol_toggled), &gui_settings.tracker_ft2_volume); + + vol_sym_check = thing = gtk_check_button_new_with_label(_("Use symbols in the volume column")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.tracker_ft2_wide); + gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_volsym_toggled), &gui_settings.tracker_ft2_wide); + + tone_porta_m_check = thing = gtk_check_button_new_with_label(_("Leave Tone Porta as symbol \"m\"")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.tracker_ft2_tpm); + gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_redraw_toggled), &gui_settings.tracker_ft2_tpm); + + vol_dec_check = thing = gtk_check_button_new_with_label(_("Decimal volume representation")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.tracker_vol_dec); + gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_redraw_toggled), &gui_settings.tracker_vol_dec); thing = gtk_check_button_new_with_label(_("Asynchronous (IT-style) pattern editing")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), gui_settings.asynchronous_editing); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.asynchronous_editing); gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(gui_settings_asyncedit_toggled), NULL); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_asyncedit_toggled), NULL); + + thing = gtk_check_button_new_with_label(_("Polyphonic try (non-editing) mode")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.try_polyphony); + gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); + + thing1 = gtk_check_button_new_with_label(_("Repeat same note on different channels")); + gtk_widget_set_sensitive(thing1, gui_settings.try_polyphony); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing1), gui_settings.repeat_same_note); + gtk_box_pack_start(GTK_BOX(vbox1), thing1, FALSE, TRUE, 0); + g_signal_connect(thing1, "toggled", + G_CALLBACK(gui_settings_misc_toggled), &gui_settings.repeat_same_note); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_trypoly_toggled), thing1); + + thing = gtk_check_button_new_with_label(_("Record keyreleases")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.insert_noteoff); + gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_misc_toggled), &gui_settings.insert_noteoff); + + thing = gtk_check_button_new_with_label(_("Record precise timings")); + gtk_widget_set_tooltip_text(thing, + _("Use FXes to record note press/release timings with tick accuracy")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.precise_timing); + gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_misc_toggled), &gui_settings.precise_timing); + + box1 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox1), box1, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Human-made delay compensation [s]")); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, FALSE, 0); + + thing = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(gui_settings.delay_comp, + 0.0, 1.0, 0.01, 0.1, 0.0)), 0, 0, FALSE); + gtk_box_pack_end(GTK_BOX(box1), thing, FALSE, FALSE, 0); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(thing), 2); + g_signal_connect(thing, "value-changed", + G_CALLBACK(gui_settings_double_changed), &gui_settings.delay_comp); thing = gtk_check_button_new_with_label(_("Fxx command updates Tempo/BPM sliders")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), gui_settings.tempo_bpm_update); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.tempo_bpm_update); gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(gui_settings_tempo_bpm_update_toggled), NULL); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_misc_toggled), &gui_settings.tempo_bpm_update); - thing = gtk_check_button_new_with_label(_("Switch to tracker after loading/saving")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), gui_settings.auto_switch); + thing = gtk_check_button_new_with_label(_("Emulate FastTracker Rxx bug")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.rxx_bug_emu); gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(gui_settings_auto_switch_toggled), NULL); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_misc_toggled), &gui_settings.rxx_bug_emu); - thing = gtk_check_button_new_with_label(_("Save window geometry on exit")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), gui_settings.save_geometry); + thing = gtk_check_button_new_with_label(_("Use filter effect (Qxx/Zxx)")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.use_filter); gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(gui_settings_save_geometry_toggled), NULL); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_misc_toggled), &gui_settings.use_filter); - thing = gtk_check_button_new_with_label(_("Use note name B instead of H")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), gui_settings.bh); + thing = gtk_check_button_new_with_label(_("Automatically add file extensions")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.add_extension); gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(gui_settings_bh_toggled), NULL); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_misc_toggled), &gui_settings.add_extension); - thing = gtk_check_button_new_with_label(_("Save and restore permanent channels")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), gui_settings.store_perm); + thing = gtk_check_button_new_with_label(_("Switch to tracker after loading/saving")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.auto_switch); + gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_misc_toggled), &gui_settings.auto_switch); + + thing = gtk_check_button_new_with_label(_("Save window geometry on exit")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.save_geometry); gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(gui_settings_perm_toggled), NULL); + g_signal_connect(thing, "toggled", + G_CALLBACK(gui_settings_misc_toggled), &gui_settings.save_geometry); - gui_subs_set_slider_value(&prefs_scopesfreq_slider, gui_settings.scopes_update_freq); - gui_subs_set_slider_value(&prefs_trackerfreq_slider, gui_settings.tracker_update_freq); + thing = gtk_check_button_new_with_label(_("Save and restore permanent channels")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), gui_settings.store_perm); + gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); + g_signal_connect(G_OBJECT(thing), "toggled", + G_CALLBACK(gui_settings_misc_toggled), &gui_settings.store_perm); box1 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box1); gtk_box_pack_start(GTK_BOX(vbox1), box1, FALSE, TRUE, 0); - thing = gtk_label_new(_("Scopes buffer size [MB]")); - gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - add_empty_hbox(box1); - thing = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new((double)gui_settings.scopes_buffer_size / 1000000, 0.5, 5.0, 0.1, 1.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_spin_button_set_digits(GTK_SPIN_BUTTON(thing), 1); - gtk_signal_connect(GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(gui_settings_scopebufsize_changed), NULL); + thing = gtk_label_new(_("* Undo pool size [MB]")); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, FALSE, 0); + + thing = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(gui_settings.undo_size, + 1.0, 100.0, 1.0, 10.0, 0.0)), 0, 0, FALSE); + gtk_box_pack_end(GTK_BOX(box1), thing, FALSE, FALSE, 0); + g_signal_connect(thing, "value-changed", + G_CALLBACK(gui_settings_int_changed), &gui_settings.undo_size); + + box1 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox1), box1, FALSE, FALSE, 0); + gtk_widget_set_tooltip_text(box1, + _("Classis ST: only Ctrl + B to start/stop marking a block;\n" + "FT2: marking by SHIFT + arrows;\n" + "Mixed: marking is started by SHIFT + arrows,\nstopped by Ctrl + B.\n" + "In the FT2 and Mixed modes Ctrl + B\ncan also be used to start marking.")); + + thing = gtk_label_new(_("Selection mode")); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, FALSE, 0); + + list_store = gtk_list_store_new(1, G_TYPE_STRING); + for (i = 0; i < SELECTION_LAST; i++) { + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, 0, _(sel_mode[i]), -1); + } + thing = gui_combo_new(list_store); + gtk_combo_box_set_active(GTK_COMBO_BOX(thing), gui_settings.selection_mode); + gtk_box_pack_end(GTK_BOX(box1), thing, FALSE, FALSE, 0); + g_signal_connect(thing, "changed", G_CALLBACK(gui_settings_set_selection_mode), NULL); thing = gtk_hseparator_new(); - gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(vbox1), thing, FALSE, TRUE, 0); /* Track line format */ box1 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box1); - gtk_box_pack_start(GTK_BOX(vbox1), box1, FALSE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(vbox1), box1, FALSE, TRUE, 0); thing = gtk_label_new(_("Track line format:")); gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); thing = gtk_entry_new(); - gtk_widget_set_usize(thing, 13*3, thing->requisition.height); + + context = gtk_widget_create_pango_context(thing); + layout = pango_layout_new(context); + pango_layout_set_font_description(layout, gtk_widget_get_style(thing)->font_desc); + /* With an extra symbol the width value becomes more appropriate */ + pango_layout_set_text(layout, "----", -1); + pango_layout_get_pixel_size(layout, &wdth, &hght); + gtk_widget_set_size_request(thing, wdth, -1); + gtk_entry_set_max_length((GtkEntry*)thing, 3); strncpy(stmp, gui_settings.tracker_line_format, 3); stmp[3] = 0; gtk_entry_set_text((GtkEntry*)thing, stmp); gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(gui_settings_tracker_line_note_modified), 0); + g_signal_connect(thing, "changed", + G_CALLBACK(gui_settings_tracker_line_note_modified), 0); thing = gtk_entry_new(); - gtk_widget_set_usize(thing, 13*2, thing->requisition.height); + pango_layout_set_text(layout, "000", -1); + pango_layout_get_pixel_size(layout, &wdth, &hght); + gtk_widget_set_size_request(thing, wdth, -1); gtk_entry_set_max_length((GtkEntry*)thing, 2); - strncpy(stmp, gui_settings.tracker_line_format+3, 2); + strncpy(stmp, gui_settings.tracker_line_format + 3, 2); stmp[2] = 0; gtk_entry_set_text((GtkEntry*)thing, stmp); gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(gui_settings_tracker_line_ins_modified), 0); + g_signal_connect(thing, "changed", + G_CALLBACK(gui_settings_tracker_line_ins_modified), 0); thing = gtk_entry_new(); - gtk_widget_set_usize(thing, 13*2, thing->requisition.height); + pango_layout_set_text(layout, "000", -1); + pango_layout_get_pixel_size(layout, &wdth, &hght); + gtk_widget_set_size_request(thing, wdth, -1); gtk_entry_set_max_length((GtkEntry*)thing, 2); - strncpy(stmp, gui_settings.tracker_line_format+5, 2); + strncpy(stmp, gui_settings.tracker_line_format + 5, 2); stmp[2] = 0; gtk_entry_set_text((GtkEntry*)thing, stmp); gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(gui_settings_tracker_line_vol_modified), 0); + g_signal_connect(thing, "changed", + G_CALLBACK(gui_settings_tracker_line_vol_modified), 0); thing = gtk_entry_new(); - gtk_widget_set_usize(thing, 13*3, thing->requisition.height); + pango_layout_set_text(layout, "0000", -1); + pango_layout_get_pixel_size(layout, &wdth, &hght); + gtk_widget_set_size_request(thing, wdth, -1); + g_object_unref(layout); + g_object_unref(context); + gtk_entry_set_max_length((GtkEntry*)thing, 3); - strncpy(stmp, gui_settings.tracker_line_format+7, 3); + strncpy(stmp, gui_settings.tracker_line_format + 7, 3); stmp[3] = 0; gtk_entry_set_text((GtkEntry*)thing, stmp); gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(gui_settings_tracker_line_effect_modified), 0); - - thing = gtk_vseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainhbox), thing, FALSE, TRUE, 0); - - /* The tracker widget settings */ - ts_box = vbox1 = gtk_vbox_new(FALSE, 2); - gtk_box_pack_start(GTK_BOX(mainhbox), vbox1, TRUE, TRUE, 0); - gtk_widget_show(vbox1); - - gtk_object_ref(GTK_OBJECT(trackersettings)); - gtk_box_pack_start(GTK_BOX(vbox1), trackersettings, TRUE, TRUE, 0); - gtk_widget_show(trackersettings); + g_signal_connect(thing, "changed", + G_CALLBACK(gui_settings_tracker_line_effect_modified), 0); + + thing1 = gtk_hbox_new(TRUE, 2); + gtk_box_pack_start(GTK_BOX(vbox1), thing1, FALSE, TRUE, 0); + /* Tracker colors configuration dialog */ + thing = gtk_button_new_with_label(_("Color scheme")); + gtk_widget_set_tooltip_text(thing, _("Tracker colors configuration")); + gtk_box_pack_start(GTK_BOX(thing1), thing, TRUE, TRUE, 0); + g_signal_connect_swapped(thing, "clicked", + G_CALLBACK(colors_dialog), configwindow); + + /* Tracker fonts configuration dialog */ + thing = gtk_button_new_with_label(_("Tracker fonts")); + gtk_widget_set_tooltip_text(thing, _("Tracker fonts configuration")); + gtk_box_pack_start(GTK_BOX(thing1), thing, TRUE, TRUE, 0); + g_signal_connect_swapped(thing, "clicked", + G_CALLBACK(fonts_dialog), configwindow); + + box1 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox1), box1, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Clavier font")); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, FALSE, 0); + + thing = gtk_font_button_new_with_font(gui_settings.clavier_font); + gtk_box_pack_end(GTK_BOX(box1), thing, FALSE, FALSE, 0); + g_signal_connect(thing, "font-set", + G_CALLBACK(gui_settings_clavierfont_changed), NULL); + + thing = gtk_label_new(_("* Restart SoundTracker to actualize settings marked with asterisk")); + gtk_misc_set_alignment(GTK_MISC(thing), 0.0, 0.5); + gtk_box_pack_end(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - /* The button area */ thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 4); - hbox = gtk_hbutton_box_new (); - gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbox), 4); - gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END); - gtk_box_pack_start (GTK_BOX (mainbox), hbox, - FALSE, FALSE, 0); - gtk_widget_show (hbox); - -#ifdef USE_GNOME - thing = gnome_stock_button (GNOME_STOCK_BUTTON_CLOSE); -#else - thing = gtk_button_new_with_label (_("Close")); -#endif - GTK_WIDGET_SET_FLAGS(thing, GTK_CAN_DEFAULT); - gtk_window_set_default(GTK_WINDOW(configwindow), thing); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC (gui_settings_close_requested), NULL); - gtk_box_pack_start (GTK_BOX (hbox), thing, FALSE, FALSE, 0); - gtk_widget_show (thing); - - - gtk_widget_show (configwindow); -} - -void -gui_settings_load_config (void) -{ - prefs_node *f; - - f = prefs_open_read("settings"); - if(f) { - prefs_get_int(f, "st-window-x", &gui_settings.st_window_x); - prefs_get_int(f, "st-window-y", &gui_settings.st_window_y); - prefs_get_int(f, "st-window-w", &gui_settings.st_window_w); - prefs_get_int(f, "st-window-h", &gui_settings.st_window_h); - - prefs_get_int(f, "gui-use-hexadecimal-numbers", &gui_settings.tracker_hexmode); - prefs_get_int(f, "gui-use-upper-case", &gui_settings.tracker_upcase); - prefs_get_int(f, "gui-advance-cursor-in-fx-columns", &gui_settings.advance_cursor_in_fx_columns); - prefs_get_int(f, "gui-asynchronous-editing", &gui_settings.asynchronous_editing); - prefs_get_string(f, "gui-tracker-line-format", gui_settings.tracker_line_format); - prefs_get_int(f, "gui-tempo-bpm-update", &gui_settings.tempo_bpm_update); - prefs_get_int(f, "gui-auto-switch", &gui_settings.auto_switch); - prefs_get_int(f, "gui-display-scopes", &gui_settings.gui_display_scopes); - prefs_get_int(f, "gui-use-backing-store", &gui_settings.gui_use_backing_store); - prefs_get_int(f, "tracker-highlight-rows", &gui_settings.highlight_rows); - prefs_get_int(f, "tracker-highlight-rows-n", &gui_settings.highlight_rows_n); - prefs_get_int(f, "tracker-highlight-rows-minor-n", &gui_settings.highlight_rows_minor_n); - prefs_get_int(f, "save-geometry", &gui_settings.save_geometry); - prefs_get_int(f, "save-settings-on-exit", &gui_settings.save_settings_on_exit); - prefs_get_int(f, "tracker-update-frequency", &gui_settings.tracker_update_freq); - prefs_get_int(f, "scopes-update-frequency", &gui_settings.scopes_update_freq); - prefs_get_int(f, "scopes-buffer-size", &gui_settings.scopes_buffer_size); - prefs_get_int(f, "sharp", &gui_settings.sharp); - prefs_get_int(f, "bh", &gui_settings.bh); - prefs_get_int(f, "store-permanent", &gui_settings.store_perm); - - if(gui_settings.store_perm) - prefs_get_int(f, "permanent-channels", &gui_settings.permanent_channels); - - prefs_close(f); - } - - f = prefs_open_read("settings-always"); - if(f) { - prefs_get_string(f, "loadmod-path", gui_settings.loadmod_path); - prefs_get_string(f, "savemod-path", gui_settings.savemod_path); - prefs_get_string(f, "savemodaswav-path", gui_settings.savemodaswav_path); - prefs_get_string(f, "savesongasxm-path", gui_settings.savesongasxm_path); - prefs_get_string(f, "loadsmpl-path", gui_settings.loadsmpl_path); - prefs_get_string(f, "savesmpl-path", gui_settings.savesmpl_path); - prefs_get_string(f, "loadinstr-path", gui_settings.loadinstr_path); - prefs_get_string(f, "saveinstr-path", gui_settings.saveinstr_path); - prefs_get_string(f, "loadpat-path", gui_settings.loadpat_path); - prefs_get_string(f, "savepat-path", gui_settings.savepat_path); - - prefs_get_string(f, "rm-path", gui_settings.rm_path); - prefs_get_string(f, "unzip-path", gui_settings.unzip_path); - prefs_get_string(f, "lha-path", gui_settings.lha_path); - prefs_get_string(f, "gz-path", gui_settings.gz_path); - prefs_get_string(f, "bz2-path", gui_settings.bz2_path); - - prefs_get_int(f, "gui-disable-splash", &gui_settings.gui_disable_splash); - - prefs_close(f); - } -} - -void -gui_settings_save_config (void) -{ - prefs_node *f; - - f = prefs_open_write("settings"); - if(!f) - return; - - if(gui_settings.save_geometry) { - gdk_window_get_size (mainwindow->window, - &gui_settings.st_window_w, - &gui_settings.st_window_h); - gdk_window_get_root_origin (mainwindow->window, - &gui_settings.st_window_x, - &gui_settings.st_window_y); - } - - prefs_put_int(f, "st-window-x", gui_settings.st_window_x); - prefs_put_int(f, "st-window-y", gui_settings.st_window_y); - prefs_put_int(f, "st-window-w", gui_settings.st_window_w); - prefs_put_int(f, "st-window-h", gui_settings.st_window_h); - - prefs_put_int(f, "gui-use-hexadecimal-numbers", gui_settings.tracker_hexmode); - prefs_put_int(f, "gui-use-upper-case", gui_settings.tracker_upcase); - prefs_put_int(f, "gui-advance-cursor-in-fx-columns", gui_settings.advance_cursor_in_fx_columns); - prefs_put_int(f, "gui-asynchronous-editing", gui_settings.asynchronous_editing); - prefs_put_string(f, "gui-tracker-line-format", gui_settings.tracker_line_format); - prefs_put_int(f, "gui-tempo-bpm-update", gui_settings.tempo_bpm_update); - prefs_put_int(f, "gui-auto-switch", gui_settings.auto_switch); - prefs_put_int(f, "gui-display-scopes", gui_settings.gui_display_scopes); - prefs_put_int(f, "gui-use-backing-store", gui_settings.gui_use_backing_store); - prefs_put_int(f, "tracker-highlight-rows", gui_settings.highlight_rows); - prefs_put_int(f, "tracker-highlight-rows-n", gui_settings.highlight_rows_n); - prefs_put_int(f, "tracker-highlight-rows-minor-n", gui_settings.highlight_rows_minor_n); - prefs_put_int(f, "save-geometry", gui_settings.save_geometry); - prefs_put_int(f, "save-settings-on-exit", gui_settings.save_settings_on_exit); - prefs_put_int(f, "tracker-update-frequency", gui_settings.tracker_update_freq); - prefs_put_int(f, "scopes-update-frequency", gui_settings.scopes_update_freq); - prefs_put_int(f, "scopes-buffer-size", gui_settings.scopes_buffer_size); - prefs_put_int(f, "sharp", gui_settings.sharp); - prefs_put_int(f, "bh", gui_settings.bh); - prefs_put_int(f, "store-permanent", gui_settings.store_perm); - - if(gui_settings.store_perm) - prefs_put_int(f, "permanent-channels", gui_settings.permanent_channels); - - prefs_close(f); -} - -void -gui_settings_save_config_always (void) -{ - prefs_node *f; - - f = prefs_open_write("settings-always"); - if(!f) - return; - - prefs_put_string(f, "loadmod-path", gui_settings.loadmod_path); - prefs_put_string(f, "savemod-path", gui_settings.savemod_path); - prefs_put_string(f, "savemodaswav-path", gui_settings.savemodaswav_path); - prefs_put_string(f, "savesongasxm-path", gui_settings.savesongasxm_path); - prefs_put_string(f, "loadsmpl-path", gui_settings.loadsmpl_path); - prefs_put_string(f, "savesmpl-path", gui_settings.savesmpl_path); - prefs_put_string(f, "loadinstr-path", gui_settings.loadinstr_path); - prefs_put_string(f, "saveinstr-path", gui_settings.saveinstr_path); - prefs_put_string(f, "loadpat-path", gui_settings.loadpat_path); - prefs_put_string(f, "savepat-path", gui_settings.savepat_path); - - prefs_put_string(f, "rm-path", gui_settings.rm_path); - prefs_put_string(f, "unzip-path", gui_settings.unzip_path); - prefs_put_string(f, "lha-path", gui_settings.lha_path); - prefs_put_string(f, "gz-path", gui_settings.gz_path); - prefs_put_string(f, "bz2-path", gui_settings.bz2_path); + gtk_widget_show_all(configwindow); + /* Some compromise to find optimal settings window size */ + gtk_widget_get_allocation(vbox1, &all); + hght = gdk_screen_get_height(gdk_screen_get_default()); + gtk_widget_set_size_request(sw, -1, + MIN(all.height, hght - 100)); + gtk_window_set_position(GTK_WINDOW(configwindow), GTK_WIN_POS_CENTER_ALWAYS); +} + +void gui_settings_load_config(void) +{ + gui_settings.st_window_x = prefs_get_int(SECTION, "st-window-x", -666); + gui_settings.st_window_y = prefs_get_int(SECTION, "st-window-y", 0); + gui_settings.st_window_w = prefs_get_int(SECTION, "st-window-w", 0); + gui_settings.st_window_h = prefs_get_int(SECTION, "st-window-h", 0); + + gui_settings.tracker_hexmode = prefs_get_bool(SECTION, "gui-use-hexadecimal-numbers", TRUE); + gui_settings.tracker_upcase = prefs_get_bool(SECTION, "gui-use-upper-case", FALSE); + gui_settings.tracker_ft2_volume = prefs_get_bool(SECTION, "gui-ft2-volume", FALSE); + gui_settings.tracker_ft2_wide = prefs_get_bool(SECTION, "gui-ft2-wide", TRUE); + gui_settings.tracker_ft2_tpm = prefs_get_bool(SECTION, "gui-ft2-tone-porta-m", FALSE); + gui_settings.tracker_vol_dec = prefs_get_bool(SECTION, "gui-volume-decimal", FALSE); + gui_settings.advance_cursor_in_fx_columns = prefs_get_bool(SECTION, "gui-advance-cursor-in-fx-columns", FALSE); + gui_settings.asynchronous_editing = prefs_get_bool(SECTION, "gui-asynchronous-editing", FALSE); + gui_settings.try_polyphony = prefs_get_bool(SECTION, "gui-try-polyphony", TRUE); + gui_settings.repeat_same_note = prefs_get_bool(SECTION, "gui-repeat-same-note", FALSE); + gui_settings.insert_noteoff = prefs_get_bool(SECTION, "gui-insert-noteoff", TRUE); + gui_settings.precise_timing = prefs_get_bool(SECTION, "gui-precise-timing", FALSE); + gui_settings.delay_comp = prefs_get_double(SECTION, "gui-delay-compensation", 0.0); + gui_settings.looped = prefs_get_bool(SECTION, "gui-playback-looped", TRUE); + gui_settings.tracker_line_format = prefs_get_string(SECTION, "gui-tracker-line-format", "---0000000"); + gui_settings.tracker_font = prefs_get_string(SECTION, "tracker-font", ""); + gui_settings.tempo_bpm_update = prefs_get_bool(SECTION, "gui-tempo-bpm-update", TRUE); + gui_settings.rxx_bug_emu = prefs_get_bool(SECTION, "tracker-rxx-bug-emulate", FALSE); + gui_settings.use_filter = prefs_get_bool(SECTION, "player-use-filter", TRUE); + gui_settings.auto_switch = prefs_get_bool(SECTION, "gui-auto-switch", FALSE); + gui_settings.add_extension = prefs_get_bool(SECTION, "gui-add-extension", TRUE); + gui_settings.gui_display_scopes = prefs_get_bool(SECTION, "gui-display-scopes", TRUE); + gui_settings.gui_use_backing_store = prefs_get_bool(SECTION, "gui-use-backing-store", TRUE); + gui_settings.undo_size = prefs_get_int(SECTION, "gui-undo-size", 20); + gui_settings.highlight_rows = prefs_get_bool(SECTION, "tracker-highlight-rows", TRUE); + gui_settings.highlight_rows_n = prefs_get_int(SECTION, "tracker-highlight-rows-n", 16); + gui_settings.highlight_rows_minor_n = prefs_get_int(SECTION, "tracker-highlight-rows-minor-n", 8); + gui_settings.clavier_colors_gtk = prefs_get_bool(SECTION, "clavier-colors-gtk", TRUE); + gui_settings.clavier_font = prefs_get_string(SECTION, "clavier-font", "Monospace 8"); + + gui_settings.save_geometry = prefs_get_bool(SECTION, "save-geometry", TRUE); + gui_settings.save_settings_on_exit = prefs_get_bool(SECTION, "save-settings-on-exit", TRUE); + gui_settings.tracker_update_freq = prefs_get_int(SECTION, "tracker-update-frequency", 50); + gui_settings.scopes_update_freq = prefs_get_int(SECTION, "scopes-update-frequency", 40); + gui_settings.scopes_buffer_size = prefs_get_int(SECTION, "scopes-buffer-size", 500000); + gui_settings.sharp = prefs_get_bool(SECTION, "sharp", TRUE); + gui_settings.bh = prefs_get_bool(SECTION, "bh", FALSE); + gui_settings.store_perm = prefs_get_bool(SECTION, "store-permanent", TRUE); + gui_settings.scopes_mode = prefs_get_int(SECTION, "sample-display-scopes-mode", SAMPLE_DISPLAY_MODE_STROBO); + gui_settings.editor_mode = prefs_get_int(SECTION, "sample-display-editor-mode", SAMPLE_DISPLAY_MODE_STROBO); + gui_settings.sampling_mode = prefs_get_int(SECTION, "sample-display-sampling-mode", SAMPLE_DISPLAY_MODE_STROBO); + gui_settings.selection_mode = prefs_get_int(SECTION, "selection-mode", SELECTION_CLASSIC); + + if (gui_settings.store_perm) + gui_settings.permanent_channels = prefs_get_int(SECTION, "permanent-channels", 0); + + gui_settings.file_out_channels = prefs_get_int(SECTION, "file-channels", 2); + gui_settings.file_out_mixfreq = prefs_get_int(SECTION, "file-mixfreq", 44100); + gui_settings.file_out_resolution = prefs_get_int(SECTION, "file-resolution", 16); + + gui_settings.loadmod_path = prefs_get_string(SECTION_ALWAYS, "loadmod-path", "~"); + gui_settings.savemod_path = prefs_get_string(SECTION_ALWAYS, "savemod-path", "~"); + gui_settings.savemodaswav_path = prefs_get_string(SECTION_ALWAYS, "savemodaswav-path", "~"); + gui_settings.savesongasxm_path = prefs_get_string(SECTION_ALWAYS, "savesongasxm-path", "~"); + gui_settings.loadsmpl_path = prefs_get_string(SECTION_ALWAYS, "loadsmpl-path", "~"); + gui_settings.savesmpl_path = prefs_get_string(SECTION_ALWAYS, "savesmpl-path", "~"); + gui_settings.loadinstr_path = prefs_get_string(SECTION_ALWAYS, "loadinstr-path", "~"); + gui_settings.saveinstr_path = prefs_get_string(SECTION_ALWAYS, "saveinstr-path", "~"); + gui_settings.loadpat_path = prefs_get_string(SECTION_ALWAYS, "loadpat-path", "~"); + gui_settings.savepat_path = prefs_get_string(SECTION_ALWAYS, "savepat-path", "~"); + + gui_settings.rm_path = prefs_get_string(SECTION_ALWAYS, "rm-path", "rm"); + gui_settings.unzip_path = prefs_get_string(SECTION_ALWAYS, "unzip-path", "unzip"); + gui_settings.lha_path = prefs_get_string(SECTION_ALWAYS, "lha-path", "lha"); + gui_settings.gz_path = prefs_get_string(SECTION_ALWAYS, "gz-path", "zcat"); + gui_settings.bz2_path = prefs_get_string(SECTION_ALWAYS, "bz2-path", "bunzip2"); + + gui_settings.gui_disable_splash = prefs_get_bool(SECTION_ALWAYS, "gui-disable-splash", FALSE); +} + +void gui_settings_save_config(void) +{ + if (gui_settings.save_geometry) { + GtkAllocation alloc; + + gtk_widget_get_allocation(mainwindow, &alloc); + gui_settings.st_window_w = alloc.width; + gui_settings.st_window_h = alloc.height; + gdk_window_get_root_origin(mainwindow->window, + &gui_settings.st_window_x, + &gui_settings.st_window_y); + } + + prefs_put_int(SECTION, "st-window-x", gui_settings.st_window_x); + prefs_put_int(SECTION, "st-window-y", gui_settings.st_window_y); + prefs_put_int(SECTION, "st-window-w", gui_settings.st_window_w); + prefs_put_int(SECTION, "st-window-h", gui_settings.st_window_h); + + prefs_put_bool(SECTION, "gui-use-hexadecimal-numbers", gui_settings.tracker_hexmode); + prefs_put_bool(SECTION, "gui-use-upper-case", gui_settings.tracker_upcase); + prefs_put_bool(SECTION, "gui-ft2-volume", gui_settings.tracker_ft2_volume); + prefs_put_bool(SECTION, "gui-ft2-wide", gui_settings.tracker_ft2_wide); + prefs_put_bool(SECTION, "gui-ft2-tone-porta-m", gui_settings.tracker_ft2_tpm); + prefs_put_bool(SECTION, "gui-volume-decimal", gui_settings.tracker_vol_dec); + prefs_put_bool(SECTION, "gui-advance-cursor-in-fx-columns", gui_settings.advance_cursor_in_fx_columns); + prefs_put_bool(SECTION, "gui-asynchronous-editing", gui_settings.asynchronous_editing); + prefs_put_bool(SECTION, "gui-try-polyphony", gui_settings.try_polyphony); + prefs_put_bool(SECTION, "gui-repeat-same-note", gui_settings.repeat_same_note); + prefs_put_bool(SECTION, "gui-insert-noteoff", gui_settings.insert_noteoff); + prefs_put_bool(SECTION, "gui-precise-timing", gui_settings.precise_timing); + prefs_put_double(SECTION, "gui-delay-compensation", gui_settings.delay_comp); + prefs_put_bool(SECTION, "gui-playback-looped", gui_settings.looped); + prefs_put_string(SECTION, "gui-tracker-line-format", gui_settings.tracker_line_format); + prefs_put_string(SECTION, "tracker-font", gui_settings.tracker_font); + prefs_put_bool(SECTION, "gui-tempo-bpm-update", gui_settings.tempo_bpm_update); + prefs_put_bool(SECTION, "tracker-rxx-bug-emulate", gui_settings.rxx_bug_emu); + prefs_put_bool(SECTION, "player-use-filter", gui_settings.use_filter); + prefs_put_bool(SECTION, "gui-auto-switch", gui_settings.auto_switch); + prefs_put_bool(SECTION, "gui-add-extension", gui_settings.add_extension); + prefs_put_bool(SECTION, "gui-display-scopes", gui_settings.gui_display_scopes); + prefs_put_bool(SECTION, "gui-use-backing-store", gui_settings.gui_use_backing_store); + prefs_put_int(SECTION, "gui-undo-size", gui_settings.undo_size); + prefs_put_bool(SECTION, "tracker-highlight-rows", gui_settings.highlight_rows); + prefs_put_int(SECTION, "tracker-highlight-rows-n", gui_settings.highlight_rows_n); + prefs_put_int(SECTION, "tracker-highlight-rows-minor-n", gui_settings.highlight_rows_minor_n); + prefs_put_bool(SECTION, "clavier-colors-gtk", gui_settings.clavier_colors_gtk); + prefs_put_string(SECTION, "clavier-font", gui_settings.clavier_font); + prefs_put_bool(SECTION, "save-geometry", gui_settings.save_geometry); + prefs_put_bool(SECTION, "save-settings-on-exit", gui_settings.save_settings_on_exit); + prefs_put_int(SECTION, "tracker-update-frequency", gui_settings.tracker_update_freq); + prefs_put_int(SECTION, "scopes-update-frequency", gui_settings.scopes_update_freq); + prefs_put_int(SECTION, "scopes-buffer-size", gui_settings.scopes_buffer_size); + prefs_put_bool(SECTION, "sharp", gui_settings.sharp); + prefs_put_bool(SECTION, "bh", gui_settings.bh); + prefs_put_bool(SECTION, "store-permanent", gui_settings.store_perm); + prefs_put_int(SECTION, "sample-display-scopes-mode", gui_settings.scopes_mode); + prefs_put_int(SECTION, "sample-display-editor-mode", gui_settings.editor_mode); + prefs_put_int(SECTION, "sample-display-sampling-mode", gui_settings.sampling_mode); + prefs_put_int(SECTION, "selection-mode", gui_settings.selection_mode); + colors_save(SECTION); + + if (gui_settings.store_perm) + prefs_put_int(SECTION, "permanent-channels", gui_settings.permanent_channels); + + prefs_put_int(SECTION, "file-channels", gui_settings.file_out_channels); + prefs_put_int(SECTION, "file-mixfreq", gui_settings.file_out_mixfreq); + prefs_put_int(SECTION, "file-resolution", gui_settings.file_out_resolution); +} + +void gui_settings_save_config_always(void) +{ + prefs_put_string(SECTION_ALWAYS, "loadmod-path", gui_settings.loadmod_path); + prefs_put_string(SECTION_ALWAYS, "savemod-path", gui_settings.savemod_path); + prefs_put_string(SECTION_ALWAYS, "savemodaswav-path", gui_settings.savemodaswav_path); + prefs_put_string(SECTION_ALWAYS, "savesongasxm-path", gui_settings.savesongasxm_path); + prefs_put_string(SECTION_ALWAYS, "loadsmpl-path", gui_settings.loadsmpl_path); + prefs_put_string(SECTION_ALWAYS, "savesmpl-path", gui_settings.savesmpl_path); + prefs_put_string(SECTION_ALWAYS, "loadinstr-path", gui_settings.loadinstr_path); + prefs_put_string(SECTION_ALWAYS, "saveinstr-path", gui_settings.saveinstr_path); + prefs_put_string(SECTION_ALWAYS, "loadpat-path", gui_settings.loadpat_path); + prefs_put_string(SECTION_ALWAYS, "savepat-path", gui_settings.savepat_path); + + prefs_put_string(SECTION_ALWAYS, "rm-path", gui_settings.rm_path); + prefs_put_string(SECTION_ALWAYS, "unzip-path", gui_settings.unzip_path); + prefs_put_string(SECTION_ALWAYS, "lha-path", gui_settings.lha_path); + prefs_put_string(SECTION_ALWAYS, "gz-path", gui_settings.gz_path); + prefs_put_string(SECTION_ALWAYS, "bz2-path", gui_settings.bz2_path); + + prefs_put_bool(SECTION_ALWAYS, "gui-disable-splash", gui_settings.gui_disable_splash); +} + +void gui_settings_make_path(const gchar* fn, + gchar** store) +{ + gchar* dn = g_path_get_dirname(fn); - prefs_put_int(f, "gui-disable-splash", gui_settings.gui_disable_splash); + if (*store) + g_free(*store); - prefs_close(f); + *store = g_strconcat(dn, "/", NULL); + g_free(dn); } diff -Nru soundtracker-0.6.8/app/gui-settings.h soundtracker-1.0.2~pre2/app/gui-settings.h --- soundtracker-0.6.8/app/gui-settings.h 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/gui-settings.h 2021-02-13 21:17:07.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GUI configuration dialog (header) * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,20 +23,37 @@ #define _ST_GUI_SETTINGS_H #include +#include "sample-display.h" +#include "track-editor.h" typedef struct gui_prefs { - gchar tracker_line_format[10]; + gchar* tracker_line_format; + gchar* tracker_font; gboolean tracker_hexmode; gboolean tracker_upcase; + gboolean tracker_ft2_volume; + gboolean tracker_ft2_wide; + gboolean tracker_ft2_tpm; + gboolean tracker_vol_dec; gboolean highlight_rows; int highlight_rows_n; int highlight_rows_minor_n; + gboolean clavier_colors_gtk; + const gchar* clavier_font; gboolean advance_cursor_in_fx_columns; gboolean asynchronous_editing; + gboolean try_polyphony; + gboolean repeat_same_note; + gboolean insert_noteoff; + gboolean precise_timing; + gboolean looped; gboolean tempo_bpm_update; + gboolean rxx_bug_emu; + gboolean use_filter; gboolean auto_switch; + gboolean add_extension; gboolean gui_display_scopes; gboolean gui_disable_splash; @@ -51,44 +68,55 @@ int tracker_update_freq; int scopes_update_freq; int scopes_buffer_size; + gdouble delay_comp; int st_window_x; int st_window_y; int st_window_w; int st_window_h; - + gboolean store_perm; guint32 permanent_channels; + gint undo_size; - gchar loadmod_path[128]; - gchar savemod_path[128]; - gchar savemodaswav_path[128]; - gchar savesongasxm_path[128]; - gchar loadsmpl_path[128]; - gchar savesmpl_path[128]; - gchar loadinstr_path[128]; - gchar saveinstr_path[128]; - gchar loadpat_path[128]; - gchar savepat_path[128]; - - gchar rm_path[128]; - gchar unzip_path[128]; - gchar lha_path[128]; - gchar gz_path[128]; - gchar bz2_path[128]; + SampleDisplayMode scopes_mode, editor_mode, sampling_mode; + SelectionMode selection_mode; + gchar* loadmod_path; + gchar* savemod_path; + gchar* savemodaswav_path; + gchar* savesongasxm_path; + gchar* loadsmpl_path; + gchar* savesmpl_path; + gchar* loadinstr_path; + gchar* saveinstr_path; + gchar* loadpat_path; + gchar* savepat_path; + + gchar* rm_path; + gchar* unzip_path; + gchar* lha_path; + gchar* gz_path; + gchar* bz2_path; + + guint file_out_channels; + guint file_out_mixfreq; + guint file_out_resolution; } gui_prefs; extern gui_prefs gui_settings; -void gui_settings_dialog (void); +void gui_settings_dialog(void); + +void gui_settings_load_config(void); +void gui_settings_save_config(void); +void gui_settings_save_config_always(void); -void gui_settings_load_config (void); -void gui_settings_save_config (void); -void gui_settings_save_config_always (void); +void gui_settings_highlight_rows_changed(GtkSpinButton* spin); +void gui_settings_highlight_rows_minor_changed(GtkSpinButton* spin); -void gui_settings_highlight_rows_changed (GtkSpinButton *spin); -void gui_settings_highlight_rows_minor_changed (GtkSpinButton *spin); +void gui_settings_make_path(const gchar* fn, + gchar** store); #define ASYNCEDIT (gui_settings.asynchronous_editing) #endif /* _ST_GUI_SETTINGS_H */ diff -Nru soundtracker-0.6.8/app/gui-subs.c soundtracker-1.0.2~pre2/app/gui-subs.c --- soundtracker-0.6.8/app/gui-subs.c 2003-05-18 14:56:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/gui-subs.c 2020-11-27 16:30:50.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GUI support routines * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,613 +21,689 @@ #include +#include +#include #include -#include "i18n.h" -#include "gui.h" -#include "gui-subs.h" -#include "extspinbutton.h" +#include +#include -static const char *status_messages[] = { - N_("Ready."), - N_("Playing song..."), - N_("Playing pattern..."), - N_("Loading module..."), - N_("Module loaded."), - N_("Saving module..."), - N_("Module saved."), - N_("Loading sample..."), - N_("Sample loaded."), - N_("Saving sample..."), - N_("Sample saved."), - N_("Loading instrument..."), - N_("Instrument loaded."), - N_("Saving instrument..."), - N_("Instrument saved."), - N_("Saving song..."), - N_("Song saved."), -}; - -static GtkWidget *aacdialog = NULL; -static void(*aaccallback)(gint,gpointer); -static gpointer aaccallbackdata; +#include "extspinbutton.h" +#include "gui-subs.h" +#include "gui.h" -void -statusbar_update (int message, gboolean force_update) -{ -#ifdef USE_GNOME - gnome_appbar_set_status(GNOME_APPBAR(status_bar), _(status_messages[message])); -#else - gtk_statusbar_pop(GTK_STATUSBAR(status_bar), statusbar_context_id); - gtk_statusbar_push(GTK_STATUSBAR(status_bar), statusbar_context_id, _(status_messages[message])); -#endif - /* Take care here... GUI callbacks can be called at this point. */ - if(force_update) { - while (gtk_events_pending()) - gtk_main_iteration(); - } -} +const gint SIZES_MENU_TOOLBOX[] = {16, 22, 0}; +const gint SIZES_MENU[] = {16, 0}; -int -find_current_toggle (GtkWidget **widgets, int count) +int find_current_toggle(GtkWidget** widgets, int count) { int i; for (i = 0; i < count; i++) { - if(GTK_TOGGLE_BUTTON(*widgets++)->active) { - return i; - } + if (GTK_TOGGLE_BUTTON(*widgets++)->active) { + return i; + } } return -1; } -void -add_empty_hbox (GtkWidget *tobox) +void add_empty_hbox(GtkWidget* tobox) { - GtkWidget *thing = gtk_hbox_new (FALSE, 0); - gtk_widget_show (thing); - gtk_box_pack_start (GTK_BOX (tobox), thing, TRUE, TRUE, 0); + GtkWidget* thing = gtk_hbox_new(FALSE, 0); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(tobox), thing, TRUE, TRUE, 0); } -void -add_empty_vbox (GtkWidget *tobox) +void add_empty_vbox(GtkWidget* tobox) { - GtkWidget *thing = gtk_vbox_new (FALSE, 0); - gtk_widget_show (thing); - gtk_box_pack_start (GTK_BOX (tobox), thing, TRUE, TRUE, 0); + GtkWidget* thing = gtk_vbox_new(FALSE, 0); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(tobox), thing, TRUE, TRUE, 0); } -void -make_radio_group_full (const char **labels, - GtkWidget *tobox, - GtkWidget **saveptr, - gint t1, - gint t2, - void (*sigfunc) (void), - gpointer data) -{ - GtkWidget *thing = NULL; - - while (*labels) { - thing = gtk_radio_button_new_with_label ((thing - ? gtk_radio_button_group (GTK_RADIO_BUTTON (thing)) - : 0), - gettext(*labels++)); - *saveptr++ = thing; - gtk_widget_show (thing); - gtk_box_pack_start (GTK_BOX (tobox), thing, t1, t2, 0); - if(sigfunc) { - gtk_signal_connect (GTK_OBJECT (thing), "clicked", (GtkSignalFunc) sigfunc, data); - } +void make_radio_group_full_num(const char* labels[], + GtkWidget* tobox, + GtkWidget* saveptr[], + gint t1, + gint t2, + void (*sigfunc)(void), + gpointer data, + gboolean end, + guint num) +{ + guint i; + GtkWidget* thing = NULL; + + for(i = 0; i < num; i++) { + thing = gtk_radio_button_new_with_label((thing + ? gtk_radio_button_get_group(GTK_RADIO_BUTTON(thing)) + : NULL), + gettext(labels[end ? num - i - 1: i])); + saveptr[end ? num - i - 1: i] = thing; + gtk_widget_show(thing); + (end ? gtk_box_pack_end : gtk_box_pack_start)(GTK_BOX(tobox), thing, t1, t2, 0); + if (sigfunc) { + g_signal_connect(thing, "clicked", G_CALLBACK(sigfunc), data); + } } } -void -make_radio_group (const char **labels, GtkWidget *tobox, - GtkWidget **saveptr, gint t1, gint t2, - void (*sigfunc) (void)) -{ - make_radio_group_full(labels, tobox, saveptr, t1, t2, sigfunc, NULL); -} - GtkWidget* -make_labelled_radio_group_box_full (const char *title, - const char **labels, - GtkWidget **saveptr, - void (*sigfunc) (void), - gpointer data) +make_labelled_radio_group_box_full_num(const char* title, + const char* labels[], + GtkWidget* saveptr[], + void (*sigfunc)(), + gpointer data, + guint num) { GtkWidget *box, *thing; box = gtk_hbox_new(FALSE, 4); - + thing = gtk_label_new(title); gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(box), thing, FALSE, TRUE, 0); - - make_radio_group_full(labels, box, saveptr, FALSE, TRUE, sigfunc, data); + + make_radio_group_full_num(labels, box, saveptr, FALSE, TRUE, sigfunc, data, FALSE, num); return box; } GtkWidget* -make_labelled_radio_group_box (const char *title, - const char **labels, - GtkWidget **saveptr, - void (*sigfunc) (void)) -{ - return make_labelled_radio_group_box_full(title, labels, saveptr, sigfunc, NULL); -} - -void -gui_put_labelled_spin_button (GtkWidget *destbox, - const char *title, - int min, - int max, - GtkWidget **spin, - void(*callback)(), - void *callbackdata) +gui_labelled_spin_button_new(const char* title, + int min, + int max, + GtkWidget** spin, + void (*callback)(), + void* callbackdata, + gboolean in_mainwindow, + gint* handler_id) { GtkWidget *hbox, *thing; hbox = gtk_hbox_new(FALSE, 4); - gtk_box_pack_start(GTK_BOX(destbox), hbox, FALSE, TRUE, 0); gtk_widget_show(hbox); thing = gtk_label_new(title); gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - add_empty_hbox(hbox); - - *spin = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(min, min, max, 1.0, 5.0, 0.0)), 0, 0); - gtk_box_pack_start(GTK_BOX(hbox), *spin, FALSE, TRUE, 0); + *spin = extspinbutton_new(GTK_ADJUSTMENT(gtk_adjustment_new(min, min, max, 1.0, 5.0, 0.0)), 0, 0, in_mainwindow); + gtk_box_pack_end(GTK_BOX(hbox), *spin, FALSE, TRUE, 0); gtk_widget_show(*spin); - gtk_signal_connect(GTK_OBJECT(*spin), "changed", - GTK_SIGNAL_FUNC(callback), callbackdata); + if (callback) { + gint tmp_id = g_signal_connect(*spin, "value-changed", + G_CALLBACK(callback), callbackdata); + + if (handler_id) + *handler_id = tmp_id; + } + + return hbox; +} + +GtkWidget* +gui_subs_create_slider_full(const gchar* title, + const gdouble min, + const gdouble max, + void (*changedfunc)(), + GtkAdjustment** adj, + gboolean in_mainwindow, + gint* tag) +{ + GtkWidget *thing, *box; + gint id; + + box = gtk_hbox_new(FALSE, 4); + + thing = gtk_label_new(title); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box), thing, FALSE, TRUE, 0); + + *adj = GTK_ADJUSTMENT(gtk_adjustment_new(min, min, max, 1.0, (max - min) / 10.0, 0.0)); + thing = gtk_hscale_new(*adj); + gtk_scale_set_draw_value(GTK_SCALE(thing), FALSE); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box), thing, TRUE, TRUE, 0); + + thing = extspinbutton_new(*adj, 0.0, 0, in_mainwindow); + gtk_box_pack_start(GTK_BOX(box), thing, FALSE, TRUE, 0); + gtk_widget_show(thing); + + id = g_signal_connect(*adj, "value_changed", + G_CALLBACK(changedfunc), NULL); + if (tag) + *tag = id; + + return box; +} + +GtkWidget* +gui_stringlist_in_scrolled_window(const int n, const gchar* const* tp, GtkWidget* hbox, gboolean expandfill) +{ + GType* types; + GtkWidget* list; + guint i; + + types = g_new(GType, n); + for (i = 0; i < n; i++) + types[i] = G_TYPE_STRING; + list = gui_list_in_scrolled_window(n, tp, hbox, types, NULL, NULL, GTK_SELECTION_BROWSE, expandfill, expandfill); + g_free(types); + return list; +} + +inline void +gui_list_clear(GtkWidget* list) +{ + gtk_list_store_clear(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list)))); +} + +inline void +gui_list_clear_with_model(GtkTreeModel* model) +{ + gtk_list_store_clear(GTK_LIST_STORE(model)); +} + +GtkTreeModel* +gui_list_freeze(GtkWidget* list) +{ + GtkTreeModel* model; + + model = gtk_tree_view_get_model(GTK_TREE_VIEW(list)); + g_object_ref(model); + gtk_tree_view_set_model(GTK_TREE_VIEW(list), NULL); + + return model; +} + +void gui_list_thaw(GtkWidget* list, GtkTreeModel* model) +{ + gtk_tree_view_set_model(GTK_TREE_VIEW(list), model); + g_object_unref(model); +} + +static gboolean hover_changed(GtkTreeView* widget, GdkEvent* event, gpointer data) +{ + gboolean is_hover = data != NULL; + gtk_tree_view_set_hover_selection(widget, is_hover); + return FALSE; +} + +GtkWidget* +gui_list_in_scrolled_window_full(const int n, const gchar* const* tp, GtkWidget* hbox, + GType* types, const gfloat* alignments, const gboolean* expands, + GtkSelectionMode mode, gboolean expand, gboolean fill, GtkWidget** scrolledwindow, + GtkPolicyType hpolicy, GtkPolicyType vpolicy) +{ + GtkWidget* list; + GtkWidget* sw; + guint i; + GtkListStore* list_store; + GtkTreeViewColumn* column; + GtkCellRenderer* renderer; + GtkTreeSelection* sel; + + list_store = gtk_list_store_newv(n, types); + list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store)); + for (i = 0; i < n; i++) { + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes(_(tp[i]), renderer, "text", i, NULL); + if (alignments) { + g_object_set(G_OBJECT(renderer), "xalign", alignments[i], NULL); + gtk_tree_view_column_set_alignment(column, alignments[i]); + } + g_object_set(G_OBJECT(renderer), "ypad", 0, NULL); + if (expands) + gtk_tree_view_column_set_expand(column, expands[i]); + gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); + } + + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); + gtk_tree_selection_set_mode(sel, mode); + + sw = gtk_scrolled_window_new(NULL, NULL); + if (scrolledwindow) + *scrolledwindow = sw; + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), hpolicy, vpolicy); + gtk_container_add(GTK_CONTAINER(sw), list); + + /* Making the pointer following the cursor when the button is pressed (like in gtk+-1) */ + /* TODO: enabling autoscrolling when the pointer is moved up/down */ + g_signal_connect(list, "button-press-event", G_CALLBACK(hover_changed), GINT_TO_POINTER(TRUE)); + g_signal_connect(list, "button-release-event", G_CALLBACK(hover_changed), NULL); + g_signal_connect(list, "leave-notify-event", G_CALLBACK(hover_changed), NULL); + + gtk_box_pack_start(GTK_BOX(hbox), sw, expand, fill, 0); + /* According to Gtk+ documentation this is not recommended but lists are not strippy by default...*/ + gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(list), TRUE); + + return list; +} + +void gui_list_handle_selection(GtkWidget* list, GCallback handler, gpointer data) +{ + GtkTreeSelection* sel; + + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); + g_signal_connect_after(sel, "changed", handler, data); +} + +gint gui_list_get_selection_index(GtkTreeSelection* sel) +{ + GtkTreeModel* mdl; + GtkTreeIter iter; + gchar* str; + + if (gtk_tree_selection_get_selected(sel, &mdl, &iter)) { + gint row = atoi(str = gtk_tree_model_get_string_from_iter(mdl, &iter)); + g_free(str); + + return row; + } else + return -1; +} + +void gui_string_list_set_text(GtkWidget* list, guint row, guint col, const gchar* string) +{ + GtkTreeIter iter; + GtkListStore* list_store; + + if (gui_list_get_iter(row, list_store = GUI_GET_LIST_STORE(list), &iter)) + gtk_list_store_set(list_store, &iter, col, string, -1); +} + +void gui_list_select(GtkWidget* list, guint row, gboolean use_align, gfloat align) +{ + gchar* path_string; + GtkTreePath* path; + GtkTreeIter iter; + GtkTreeSelection* sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); + + if (!gui_list_get_iter(row, GUI_GET_LIST_STORE(list), &iter)) + return; + gtk_tree_selection_select_iter(sel, &iter); + path_string = g_strdup_printf("%u", row); + path = gtk_tree_path_new_from_string(path_string); + gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(list), path, NULL, + use_align, align, 0.0); + + g_free(path_string); + gtk_tree_path_free(path); } GtkWidget* -file_selection_create (const gchar *title, - void(*clickfunc)()) +gui_button(GtkWidget* win, char* stock, + void* callback, gpointer userdata, GtkWidget* box) { - GtkWidget *window; + GtkWidget* button; + + button = gtk_button_new_from_stock(stock); + g_signal_connect(button, "clicked", + G_CALLBACK(callback), userdata); + gtk_widget_show(button); + + if (box) + gtk_container_add(GTK_CONTAINER(box), button); - window = gtk_file_selection_new (title); - gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE); - - gtk_signal_connect(GTK_OBJECT (window), "destroy", - GTK_SIGNAL_FUNC(gtk_main_quit), - NULL); - gtk_signal_connect(GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button), - "clicked", GTK_SIGNAL_FUNC(clickfunc), - window); - - gtk_signal_connect(GTK_OBJECT (window), "delete_event", - GTK_SIGNAL_FUNC(gtk_widget_hide), - window); - gtk_signal_connect_object(GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button), - "clicked", GTK_SIGNAL_FUNC(gtk_widget_hide), - GTK_OBJECT (window)); + return button; +} + +void gui_message_dialog(GtkWidget** dialog, const gchar* text, GtkMessageType type, const gchar* title, gboolean need_update) +{ + if (!*dialog) { + *dialog = gtk_message_dialog_new(GTK_WINDOW(mainwindow), GTK_DIALOG_MODAL, type, + GTK_BUTTONS_CLOSE, "%s", text); + gtk_window_set_title(GTK_WINDOW(*dialog), _(title)); + } else if (need_update) { + gtk_message_dialog_set_markup(GTK_MESSAGE_DIALOG(*dialog), text); + } - return window; + gtk_dialog_run(GTK_DIALOG(*dialog)); + gtk_widget_hide(*dialog); } void -file_selection_save_path (const gchar *fn, - gchar *store) +gui_errno_dialog(GtkWidget *parent, const gchar *text, const int err) { - gchar *dn = g_dirname(fn); + gchar *buf = g_strdup_printf("%s: %s", text, g_strerror(err)); + static GtkWidget *dialog = NULL; - strncpy(store, dn, 127); - strncat(store, "/", 127); + if (!dialog) { + dialog = gtk_message_dialog_new(GTK_WINDOW(parent), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, "%s", buf); + gtk_window_set_title(GTK_WINDOW(dialog), _("Error!")); + } else + gtk_message_dialog_set_markup(GTK_MESSAGE_DIALOG(dialog), buf); - g_free(dn); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_hide(dialog); + g_free(buf); } -/* Return TRUE if there is a non-empty basename in the given - * filename. */ gboolean -file_selection_is_valid (const gchar *fn) +gui_ok_cancel_modal(GtkWidget* parent, const gchar* text) { - gchar *basename = g_basename(fn); + gint response; + static GtkWidget* dialog = NULL; + + if (!dialog) { + dialog = gtk_message_dialog_new(GTK_WINDOW(parent), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL, + NULL); + gtk_window_set_title(GTK_WINDOW(dialog), _("Question")); + } + gtk_message_dialog_set_markup(GTK_MESSAGE_DIALOG(dialog), text); + response = gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_hide(dialog); - return basename != NULL && strlen(basename) > 0; + return (response == GTK_RESPONSE_OK); } -static void -gui_subs_slider_update_1 (GtkWidget *w, - gui_subs_slider *s) +void gui_oom_error(void) { - int v = s->adjustment1->value; - gtk_adjustment_set_value(s->adjustment2, v); - if(!s->update_without_signal) { - s->changedfunc(v); + static GtkWidget* dialog = NULL; + gui_error_dialog(&dialog, _("Out of memory error!"), FALSE); +} + +FILE* +gui_fopen(const gchar* name, const gchar* utf_name, const gchar* mode) +{ + FILE* f; + + errno = 0; + f = fopen(name, mode); + if (!f) { + gchar *buf = g_strdup_printf("Error while opening file %s", utf_name); + + gui_errno_dialog(mainwindow, buf, errno); + g_free(buf); } + + return f; } -static void -gui_subs_slider_update_2 (GtkSpinButton *spin, - gui_subs_slider *s) +gchar* +gui_filename_from_utf8(const gchar* old_name) { - int v = gtk_spin_button_get_value_as_int(spin); - if(s->type == GUI_SUBS_SLIDER_WITH_HSCALE) { - if(v != s->adjustment1->value) { - /* the 'if' is only needed for gtk+-1.0 */ - gtk_adjustment_set_value(s->adjustment1, v); - } + GtkWidget* dialog; + + GError* error = NULL; + gchar* name = g_filename_from_utf8(old_name, -1, NULL, NULL, &error); + + if (!name) { + dialog = gtk_message_dialog_new(GTK_WINDOW(mainwindow), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, + _("An error occured when filename character set conversion:\n%s\n" + "The file operation probably failed."), + error->message); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + g_error_free(error); } - if(!s->update_without_signal) { - s->changedfunc(v); + + return name; +} + +gchar* +gui_filename_to_utf8(const gchar* old_name) +{ + GtkWidget* dialog; + + GError* error = NULL; + gchar* name = g_filename_to_utf8(old_name, -1, NULL, NULL, &error); + + if (!name) { + dialog = gtk_message_dialog_new(GTK_WINDOW(mainwindow), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, + _("An error occured when filename character set conversion:\n%s\n" + "The file operation probably failed."), + error->message); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + g_error_free(error); } + + return name; } -GtkWidget * -gui_subs_create_slider (gui_subs_slider *s) +GtkWidget* +gui_combo_new(GtkListStore* ls) { - GtkWidget *thing, *box; + GtkWidget* thing; + GtkCellRenderer* cell; - box = gtk_hbox_new(FALSE, 4); + thing = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ls)); + g_object_unref(ls); - thing = gtk_label_new(gettext(s->title)); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box), thing, FALSE, TRUE, 0); + cell = gtk_cell_renderer_text_new(); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(thing), cell, TRUE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(thing), cell, "text", 0, NULL); + + return thing; +} + +GtkBuilder* gui_builder_from_file(const gchar* name, const struct menu_callback cb[]) +{ + GtkBuilder* builder = gtk_builder_new(); + GError* error = NULL; + guint i; - if(s->type == GUI_SUBS_SLIDER_WITH_HSCALE) { - s->adjustment1 = GTK_ADJUSTMENT(gtk_adjustment_new(s->min, s->min, s->max, 1, (s->max - s->min) / 10, 0)); - s->slider = gtk_hscale_new(s->adjustment1); - gtk_scale_set_draw_value(GTK_SCALE(s->slider), FALSE); - gtk_widget_show(s->slider); - gtk_box_pack_start(GTK_BOX(box), s->slider, TRUE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT(s->adjustment1), "value_changed", - GTK_SIGNAL_FUNC(gui_subs_slider_update_1), s); - } else { - add_empty_hbox(box); + if (!gtk_builder_add_from_file(builder, name, &error)) { + g_critical(_("%s.\nLoading widgets' description from %s file failed!\n"), + error->message, name); + g_error_free(error); + return NULL; } - s->adjustment2 = GTK_ADJUSTMENT(gtk_adjustment_new(s->min, s->min, s->max, 1, (s->max - s->min) / 10, 0)); - thing = extspinbutton_new(s->adjustment2, 0, 0); - gtk_box_pack_start(GTK_BOX(box), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "changed", - GTK_SIGNAL_FUNC(gui_subs_slider_update_2), s); + if (cb) + for (i = 0; cb[i].widget_name; i++) { + GtkWidget* w = GTK_WIDGET(gtk_builder_get_object(builder, cb[i].widget_name)); + + if (w) + g_signal_connect_swapped(w, "activate", G_CALLBACK(cb[i].fn), cb[i].data); + } - s->update_without_signal = FALSE; + return builder; +} - return box; +gboolean +gui_delete_noop(void) +{ + /* For dialogs, Response callback already hides this window */ + return TRUE; } -void -gui_subs_set_slider_value (gui_subs_slider *s, - int v) +void gui_dialog_adjust(GtkWidget* dialog, gint default_id) { - gtk_adjustment_set_value(s->adjustment2, v); + gtk_container_set_border_width(GTK_CONTAINER(dialog), 4); + gtk_dialog_set_default_response(GTK_DIALOG(dialog), default_id); } -int -gui_subs_get_slider_value (gui_subs_slider *s) +void gui_set_escape_close(GtkWidget* window) { - return s->adjustment2->value; + GtkAccelGroup* group = gtk_accel_group_new(); + GClosure* closure = g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide), window, NULL); + + gtk_accel_group_connect(group, GDK_Escape, 0, 0, closure); + gtk_window_add_accel_group(GTK_WINDOW(window), group); } -void -gui_update_spin_adjustment (GtkSpinButton *spin, - int min, - int max) -{ - GtkAdjustment* adj; - int p; - - adj = gtk_spin_button_get_adjustment(spin); - p = adj->value; - if(p < min) - p = min; - else if(p > max) - p = max; - - /* p+1 and the extra set_value is required due to a bug in gtk+ */ - adj = GTK_ADJUSTMENT(gtk_adjustment_new(p+1, min, max, 1, 1, 0)); - gtk_spin_button_set_adjustment(spin, adj); /* old adjustment is freed automagically */ - gtk_adjustment_set_value(adj, p); +typedef struct _compare_data { + guint value; + gint number; +} compare_data; + +static gboolean +compare_func(GtkTreeModel* model, GtkTreePath* path, GtkTreeIter* iter, gpointer data) +{ + compare_data* cmp_data = (compare_data*)data; + guint cur_val; + + gtk_tree_model_get(model, iter, 0, &cur_val, -1); + + if (cur_val == cmp_data->value) { + gint* indices = gtk_tree_path_get_indices(path); + + cmp_data->number = indices[0]; + return TRUE; /* The desired element is found */ + } + + return FALSE; } -void -gui_update_range_adjustment (GtkRange *range, - int pos, - int upper, - int window, - void(*func)()) -{ - GtkAdjustment* adj; - - adj = gtk_range_get_adjustment(range); - if(adj->upper != upper || adj->page_size != window) { - /* pos+1 and the extra set_value is required due to a bug in gtk 1.0.4 */ - adj = GTK_ADJUSTMENT(gtk_adjustment_new(pos+1, 0, upper, 1, window-2, window)); - gtk_range_set_adjustment(range, adj); /* old adjustment is freed automagically */ - gtk_adjustment_set_value(adj, pos); - gtk_signal_connect(GTK_OBJECT(adj), "value_changed", GTK_SIGNAL_FUNC(func), NULL); - } else { - if((int)(adj->value) != pos) - gtk_adjustment_set_value(adj, pos); +gboolean +gui_set_active_combo_item(GtkWidget* combobox, GtkTreeModel* model, guint item) +{ + compare_data cmp_data; + + cmp_data.value = item; + cmp_data.number = -1; + gtk_tree_model_foreach(model, compare_func, &cmp_data); + + if (cmp_data.number >= 0) { + gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), cmp_data.number); + return TRUE; } + + return FALSE; } -void -gui_hang_tooltip (GtkWidget *widget, const gchar *text) +typedef struct _str_cmp_data { + const gchar* str; + gboolean success; + GtkComboBoxText* combobox; +} str_cmp_data; + +static gboolean +str_cmp_func(GtkTreeModel* model, GtkTreePath* path, GtkTreeIter* iter, gpointer data) +{ + gchar* item_str = NULL; + str_cmp_data* scd = (str_cmp_data*)data; + + gtk_tree_model_get(model, iter, 0, &item_str, -1); + if (!item_str) + return TRUE; /* Aborting due to error */ + + if (!g_ascii_strcasecmp(item_str, scd->str)) { + scd->success = TRUE; + gtk_combo_box_set_active_iter(GTK_COMBO_BOX(scd->combobox), iter); + g_free(item_str); + return TRUE; + } + + g_free(item_str); + return FALSE; +} + +void gui_combo_box_prepend_text_or_set_active(GtkComboBoxText* combobox, const gchar* text, gboolean force_active) { - GtkTooltips *tips = NULL; - - if(!tips) { - tips = gtk_tooltips_new(); - } - gtk_tooltips_set_tip(tips, widget, text, NULL); -} - -// Stolen from testgtk.c and modified -GtkWidget * -gui_build_option_menu (OptionMenuItem items[], - gint num_items, - gint history) -{ - GtkWidget *omenu; - GtkWidget *menu; - GtkWidget *menu_item; - GSList *group; - gint i; - - omenu = gtk_option_menu_new (); - - menu = gtk_menu_new (); - group = NULL; - - for (i = 0; i < num_items; i++) - { - menu_item = gtk_radio_menu_item_new_with_label (group, items[i].name); - gtk_signal_connect (GTK_OBJECT (menu_item), "activate", - (GtkSignalFunc) items[i].func, GINT_TO_POINTER(i)); - group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); - gtk_menu_append (GTK_MENU (menu), menu_item); - if (i == history) - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE); - gtk_widget_show (menu_item); - } - - gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu); - gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history); - - return omenu; -} - -// Create CList in scrolled window, show and add to box -GtkWidget * -gui_clist_in_scrolled_window (int n, - gchar **tp, - GtkWidget *hbox) -{ - GtkWidget *list; - GtkWidget *sw; - list = gtk_clist_new_with_titles(n, tp); - sw = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_clist_set_shadow_type(GTK_CLIST(list), GTK_SHADOW_ETCHED_IN); - gtk_container_add(GTK_CONTAINER(sw), list); - gtk_widget_show(sw); - gtk_box_pack_start(GTK_BOX(hbox), sw, TRUE, TRUE, 0); - gtk_widget_show(list); - return list; + str_cmp_data scd; + + GtkTreeModel* model = gtk_combo_box_get_model(GTK_COMBO_BOX(combobox)); + + scd.str = text; + scd.success = FALSE; + scd.combobox = combobox; + gtk_tree_model_foreach(model, str_cmp_func, &scd); + + if (!scd.success) { + gtk_combo_box_text_prepend_text(combobox, text); + if (force_active) + gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0); + } } -GtkWidget * -gui_button (GtkWidget * win, char *stock, char *labeltext, - void *callback, gpointer userdata, GtkWidget * box) -{ - GtkWidget *button, *label, *hbox; -#ifdef USE_GNOME - GtkWidget *pixmap; -#endif - - hbox = gtk_hbox_new (0, 0); - gtk_widget_show (hbox); - - button = gtk_button_new (); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (callback), userdata); - gtk_widget_show (button); - -#ifdef USE_GNOME - if (stock) - { - pixmap = gnome_stock_pixmap_widget_at_size (win, stock, 12, 14); - gtk_container_add (GTK_CONTAINER (hbox), pixmap); - gtk_widget_show (pixmap); - } -#endif - - if (labeltext) - { - label = gtk_label_new (labeltext); - gtk_container_add (GTK_CONTAINER (hbox), label); - gtk_widget_show (label); - } - gtk_container_add (GTK_CONTAINER (button), hbox); - if (box) - gtk_container_add (GTK_CONTAINER (box), button); - - return button; -} - -static void -aacdialog_close (gpointer data) -{ - gtk_widget_destroy(aacdialog); - aacdialog = NULL; - - aaccallback((gint)data, aaccallbackdata); +gint gui_get_text_entry(int length, + void (*changedfunc)(), + GtkWidget** widget) +{ + GtkWidget* thing; + + thing = gtk_entry_new(); + gtk_entry_set_max_length(GTK_ENTRY(thing), length); + + *widget = thing; + + return g_signal_connect(thing, "changed", + G_CALLBACK(changedfunc), NULL); } -void -gui_yes_no_cancel_modal (GtkWidget *window, - const gchar *text, - void (*callback)(gint, gpointer), - gpointer data) -{ - GtkWidget *label, *button; - - g_return_if_fail(aacdialog == NULL); - - aaccallback = callback; - aaccallbackdata = data; - - aacdialog = gtk_dialog_new(); - gtk_window_position (GTK_WINDOW(aacdialog), GTK_WIN_POS_CENTER); - gtk_window_set_title(GTK_WINDOW(aacdialog), _("Question")); - gtk_window_set_modal(GTK_WINDOW(aacdialog), TRUE); - gtk_window_set_transient_for(GTK_WINDOW(aacdialog), GTK_WINDOW(window)); - - label = gtk_label_new(text); - gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(aacdialog)->vbox), 10); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(aacdialog)->vbox), label, TRUE, TRUE, 10); - gtk_widget_show(label); - - button = gtk_button_new_with_label (_("Yes")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG(aacdialog)->action_area), button, TRUE, TRUE, 10); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (aacdialog_close), (gpointer)0); - gtk_widget_grab_default (button); - gtk_widget_show (button); - - button = gtk_button_new_with_label (_("No")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG(aacdialog)->action_area), button, TRUE, TRUE, 10); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (aacdialog_close), (gpointer)1); - gtk_widget_show (button); - - button = gtk_button_new_with_label (_("Cancel")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG(aacdialog)->action_area), button, TRUE, TRUE, 10); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (aacdialog_close), (gpointer)2); - gtk_widget_show (button); - - gtk_widget_show(aacdialog); -} - - -#ifndef USE_GNOME - -static GtkWidget *cdialog = NULL; -static void(*ccallback)(gint,gpointer); -static gpointer ccallbackdata; - -static void -cdialog_close (gpointer data) -{ - gtk_widget_destroy(cdialog); - cdialog = NULL; - - ccallback(GPOINTER_TO_INT(data), ccallbackdata); +GtkWidget* +gui_get_widget(GtkBuilder *builder, const gchar* name, const gchar* file) +{ + GtkWidget* w = GTK_WIDGET(gtk_builder_get_object(builder, name)); + + if (!w) + g_critical(_("GUI creation error: Widget '%s' is not found in %s file."), name, file); + + return w; } -static void -dialog_close (gpointer data) +static gboolean +call_menu(GtkWidget* widget, GdkEventButton* event, GtkMenu* menu) { - gtk_widget_destroy(data); + if (event->button == 3) { + gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event->button, event->time); + return TRUE; + } + + return FALSE; } -void -gnome_app_ok_cancel_modal (GtkWidget *window, - const gchar *text, - void (*callback)(gint, gpointer), - gpointer data) -{ - GtkWidget *label, *button; - - g_return_if_fail(cdialog == NULL); - - ccallback = callback; - ccallbackdata = data; - - cdialog = gtk_dialog_new(); - gtk_window_position (GTK_WINDOW(cdialog), GTK_WIN_POS_CENTER); - gtk_window_set_title(GTK_WINDOW(cdialog), _("Question")); - gtk_window_set_modal(GTK_WINDOW(cdialog), TRUE); - gtk_window_set_transient_for(GTK_WINDOW(cdialog), GTK_WINDOW(window)); - - label = gtk_label_new(text); - gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(cdialog)->vbox), 10); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(cdialog)->vbox), label, TRUE, TRUE, 10); - gtk_widget_show(label); - - button = gtk_button_new_with_label ("Ok"); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG(cdialog)->action_area), button, TRUE, TRUE, 10); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (cdialog_close), (gpointer)0); - gtk_widget_grab_default (button); - gtk_widget_show (button); - - button = gtk_button_new_with_label (_("Cancel")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG(cdialog)->action_area), button, TRUE, TRUE, 10); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (cdialog_close), (gpointer)1); - gtk_widget_show (button); - - gtk_widget_show(cdialog); +void gui_popup_menu_attach(GtkWidget* menu, GtkWidget* widget, gpointer* user_data) +{ + gtk_menu_attach_to_widget(GTK_MENU(menu), widget, NULL); + g_signal_connect(menu, "deactivate", G_CALLBACK(gtk_widget_hide), NULL); + g_signal_connect(widget, "button-press-event", G_CALLBACK(call_menu), menu); } void -gnome_warning_dialog (gchar *text) +gui_get_pixel_size(GtkWidget* w, const char* text, gint* width, gint* height) { - GtkWidget *label, *button; - GtkWidget *dialog; + PangoContext* context = gtk_widget_create_pango_context(w); + PangoLayout* layout = pango_layout_new(context); + + pango_layout_set_font_description(layout, w->style->font_desc); + pango_layout_set_text(layout, text, -1); + pango_layout_get_pixel_size(layout, width, height); - dialog = gtk_dialog_new(); - gtk_window_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); - gtk_window_set_title(GTK_WINDOW(dialog), _("Warning")); - - label = gtk_label_new(text); - gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 10); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, 10); - gtk_widget_show(label); - - button = gtk_button_new_with_label ("Ok"); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 10); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (dialog_close), (gpointer)dialog); - gtk_widget_grab_default (button); - gtk_widget_show (button); - - gtk_widget_show(dialog); + g_object_unref(layout); + g_object_unref(context); } -void -gnome_error_dialog (gchar *text) +GdkPixbuf* +gui_pixbuf_new_from_file(const gchar* path) { - GtkWidget *label, *button; - GtkWidget *dialog; + GError* error = NULL; + GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, &error); + + if (error) { + static GtkWidget *error_dialog = NULL; + + gui_error_dialog(&error_dialog, error->message, TRUE); + g_error_free(error); + pixbuf = NULL; + } - dialog = gtk_dialog_new(); - gtk_window_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); - gtk_window_set_title(GTK_WINDOW(dialog), _("Error!")); - - label = gtk_label_new(text); - gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 10); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, 10); - gtk_widget_show(label); - - button = gtk_button_new_with_label ("Ok"); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 10); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (dialog_close), (gpointer)dialog); - gtk_widget_grab_default (button); - gtk_widget_show (button); - - gtk_widget_show(dialog); + return pixbuf; } -#endif /* USE_GNOME */ +void +gui_add_icons(const icon_set* icons) +{ + gint i; + + for (i = 0; icons[i].gui_name; i++) { + gint j; + + for (j = 0; icons[i].sizes[j]; j++) { + gchar *icon_path = g_strdup_printf(DATADIR "/" PACKAGE "/%s-%i.png", + icons[i].file_name, icons[i].sizes[j]); + GdkPixbuf* pixbuf = gui_pixbuf_new_from_file(icon_path); + + g_free(icon_path); + if (pixbuf) { + gtk_icon_theme_add_builtin_icon(icons[i].gui_name, gdk_pixbuf_get_width(pixbuf), pixbuf); + g_object_unref(G_OBJECT(pixbuf)); + } + } + } +} diff -Nru soundtracker-0.6.8/app/gui-subs.h soundtracker-1.0.2~pre2/app/gui-subs.h --- soundtracker-0.6.8/app/gui-subs.h 2003-05-18 14:35:30.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/gui-subs.h 2020-11-27 16:30:50.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GUI support routines (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -45,124 +45,252 @@ STATUS_SONG_SAVED, }; -extern guint statusbar_context_id; -extern GtkWidget *status_bar; -extern GtkWidget *st_clock; - -void statusbar_update (int message, - gboolean force_gui_update); - -GtkWidget* file_selection_create (const gchar *title, - void(*clickfunc)()); -void file_selection_save_path (const gchar *fn, - gchar *store); -/* Return TRUE if there is a non-empty basename in the given filename */ -gboolean file_selection_is_valid (const gchar *fn); - -int find_current_toggle (GtkWidget **widgets, - int count); - -void add_empty_hbox (GtkWidget *tobox); -void add_empty_vbox (GtkWidget *tobox); - -void make_radio_group (const char **labels, - GtkWidget *tobox, - GtkWidget **saveptr, - gint t1, - gint t2, - void (*sigfunc) (void)); -void make_radio_group_full (const char **labels, - GtkWidget *tobox, - GtkWidget **saveptr, - gint t1, - gint t2, - void (*sigfunc) (void), - gpointer data); -GtkWidget* make_labelled_radio_group_box (const char *title, - const char **labels, - GtkWidget **saveptr, - void (*sigfunc) (void)); -GtkWidget* make_labelled_radio_group_box_full (const char *title, - const char **labels, - GtkWidget **saveptr, - void (*sigfunc) (void), - gpointer data); - -void gui_put_labelled_spin_button (GtkWidget *destbox, - const char *title, - int min, - int max, - GtkWidget **spin, - void(*callback)(), - void *callbackdata); -void gui_update_spin_adjustment (GtkSpinButton *spin, - int min, - int max); -void gui_update_range_adjustment (GtkRange *range, - int pos, - int upper, - int window, - void(*func)()); -void gui_hang_tooltip (GtkWidget *widget, const gchar *text); - -typedef enum { - GUI_SUBS_SLIDER_WITH_HSCALE = 0, - GUI_SUBS_SLIDER_SPIN_ONLY -} gui_subs_slider_type; - -typedef struct gui_subs_slider { - const char *title; - int min, max; - void (*changedfunc)(int value); - gui_subs_slider_type type; - GtkAdjustment *adjustment1, *adjustment2; - GtkWidget *slider, *spin; - gboolean update_without_signal; -} gui_subs_slider; - -GtkWidget * gui_subs_create_slider (gui_subs_slider *s); - -void gui_subs_set_slider_value (gui_subs_slider *s, - int v); - -int gui_subs_get_slider_value (gui_subs_slider *s); - -typedef struct OptionMenuItem { - const gchar *name; - GtkSignalFunc func; -} OptionMenuItem; - -GtkWidget * gui_build_option_menu (OptionMenuItem items[], - gint num_items, - gint history); - -GtkWidget * gui_clist_in_scrolled_window (int n, - gchar **tp, - GtkWidget *hbox); - -GtkWidget * gui_button (GtkWidget * win, - char *stock, - char *labeltext, - void *callback, - gpointer userdata, - GtkWidget *box); - -void -gui_yes_no_cancel_modal (GtkWidget *window, - const gchar *text, - void (*callback)(gint, gpointer), - gpointer data); -#ifndef USE_GNOME - -#define GNOME_APP(x) x - -void gnome_app_ok_cancel_modal (GtkWidget *window, - const gchar *text, - void (*callback)(gint, gpointer), - gpointer data); -void gnome_warning_dialog (gchar *text); -void gnome_error_dialog (gchar *text); +struct menu_callback { + const gchar* widget_name; + void (*fn)(); + gpointer data; +}; + +extern const gint SIZES_MENU_TOOLBOX[]; +extern const gint SIZES_MENU[]; -#endif +typedef struct +{ + const gchar *gui_name, *file_name; + const gint* sizes; /* 0-terminated */ +} icon_set; + +int find_current_toggle(GtkWidget** widgets, + int count); + +void add_empty_hbox(GtkWidget* tobox); +void add_empty_vbox(GtkWidget* tobox); + +void make_radio_group_full_num(const char* labels[], + GtkWidget* tobox, + GtkWidget* saveptr[], + gint t1, + gint t2, + void (*sigfunc)(), + gpointer data, + gboolean end, + guint num); + +#define make_radio_group_full_ext(labels, tobox, saveptr, t1, t2, sigfunc, data, end) \ +make_radio_group_full_num(labels, tobox, saveptr, t1, t2, sigfunc, data, end, sizeof(labels) / sizeof(labels[0])) + +#define make_radio_group_full(labels, tobox, saveptr, t1, t2, sigfunc, data) \ +make_radio_group_full_num(labels, tobox, saveptr, t1, t2, sigfunc, data, FALSE, sizeof(labels) / sizeof(labels[0])) + +#define make_radio_group(labels, tobox, saveptr, t1, t2, sigfunc) \ +make_radio_group_full_num(labels, tobox, saveptr, t1, t2, sigfunc, NULL, FALSE, sizeof(labels) / sizeof(labels[0])) + +GtkWidget* +make_labelled_radio_group_box_full_num(const char* title, + const char* labels[], + GtkWidget* saveptr[], + void (*sigfunc)(), + gpointer data, + guint num); + +#define make_labelled_radio_group_box_full(title, labels, saveptr, sigfunc, data) \ +make_labelled_radio_group_box_full_num(title, labels, saveptr, sigfunc, data, sizeof(labels) / sizeof(labels[0])) + +#define make_labelled_radio_group_box(title, labels, saveptr, sigfunc) \ +make_labelled_radio_group_box_full_num(title, labels, saveptr, sigfunc, NULL, sizeof(labels) / sizeof(labels[0])) + +GtkWidget* +gui_labelled_spin_button_new(const char* title, + int min, + int max, + GtkWidget** spin, + void (*callback)(), + void* callbackdata, + gboolean in_mainwindow, + gint* handler_id); + +static inline gint +gui_put_labelled_spin_button(GtkWidget* destbox, + const char* title, + int min, + int max, + GtkWidget** spin, + void (*callback)(), + void* callbackdata, + gboolean in_mainwindow) +{ + gint handler_id; + GtkWidget *hbox = gui_labelled_spin_button_new(title, min, max, spin, + callback, callbackdata, in_mainwindow, &handler_id); + + gtk_box_pack_start(GTK_BOX(destbox), hbox, FALSE, TRUE, 0); + return handler_id; +} + +static inline void +gui_set_radio_active(GtkWidget** radiobutton, guint i) +{ + if (gtk_widget_is_sensitive(radiobutton[i])) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radiobutton[i]), TRUE); +} + +GtkWidget* +gui_subs_create_slider_full(const gchar* title, + const gdouble min, + const gdouble max, + void (*changedfunc)(), + GtkAdjustment** adj, + gboolean in_mainwindow, + gint* tag); + +static inline GtkWidget* +gui_subs_create_slider(const gchar* title, + const gdouble min, + const gdouble max, + void (*changedfunc)(), + GtkAdjustment** adj, + gboolean in_mainwindow) +{ + return gui_subs_create_slider(title, min, max, changedfunc, adj, in_mainwindow); +} + +GtkWidget* gui_combo_new(GtkListStore* ls); + +gboolean gui_set_active_combo_item(GtkWidget* combobox, + GtkTreeModel* model, + guint item); + +void gui_combo_box_prepend_text_or_set_active(GtkComboBoxText* combobox, + const gchar* text, + gboolean force_active); + +GtkWidget* gui_list_in_scrolled_window_full(const int n, + const gchar* const* tp, + GtkWidget* hbox, + GType* types, + const gfloat* alignments, + const gboolean* expands, + GtkSelectionMode mode, + gboolean expand, + gboolean fill, + GtkWidget** scrolledwindow, + GtkPolicyType hpolicy, + GtkPolicyType vpolicy); + +static inline GtkWidget* gui_list_in_scrolled_window(const int n, + const gchar* const* tp, + GtkWidget* hbox, + GType* types, + const gfloat* alignments, + const gboolean* expands, + GtkSelectionMode mode, + gboolean expand, + gboolean fill) +{ + return gui_list_in_scrolled_window_full(n, tp, hbox, types, + alignments, expands, mode, expand, fill, NULL, + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); +} + +GtkWidget* gui_stringlist_in_scrolled_window(const int n, + const gchar* const* tp, + GtkWidget* hbox, gboolean expandfill); + +void gui_list_clear(GtkWidget* list); +void gui_list_clear_with_model(GtkTreeModel* model); +GtkTreeModel* gui_list_freeze(GtkWidget* list); +void gui_list_thaw(GtkWidget* list, + GtkTreeModel* model); + +#define GUI_GET_LIST_STORE(list) GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list))) + +void gui_list_handle_selection(GtkWidget* list, + GCallback handler, + gpointer data); +gint gui_list_get_selection_index(GtkTreeSelection* sel); + +static inline gboolean +gui_list_get_iter(guint n, GtkListStore* tree_model, GtkTreeIter* iter) +{ + gchar* path; + gboolean result; + + path = g_strdup_printf("%u", n); + result = gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(tree_model), iter, path); + g_free(path); + return result; +} + +void gui_string_list_set_text(GtkWidget* list, + guint row, + guint col, + const gchar* string); + +void gui_list_select(GtkWidget* list, + guint row, + gboolean use_align, + gfloat align); + +GtkWidget* gui_button(GtkWidget* win, + char* stock, + void* callback, + gpointer userdata, + GtkWidget* box); + +gboolean gui_delete_noop(void); +void gui_set_escape_close(GtkWidget* window); +gboolean gui_ok_cancel_modal(GtkWidget* window, const gchar* text); +void gui_errno_dialog (GtkWidget* window, const gchar* text, const int err); +void gui_message_dialog(GtkWidget** dialog, const gchar* text, GtkMessageType type, const gchar* title, gboolean need_update); +#define gui_warning_dialog(dialog, text, need_update) gui_message_dialog(dialog, text, GTK_MESSAGE_WARNING, N_("Warning"), need_update) +#define gui_error_dialog(dialog, text, need_update) gui_message_dialog(dialog, text, GTK_MESSAGE_ERROR, N_("Error!"), need_update) +#define gui_info_dialog(dialog, text, need_update) gui_message_dialog(dialog, text, GTK_MESSAGE_INFO, N_("Information"), need_update) +void gui_dialog_adjust(GtkWidget* dialog, gint default_id); +FILE* gui_fopen(const gchar* name, const gchar* utf_name, const gchar* mode); +void gui_oom_error(void); + +static inline void +gui_dialog_connect(GtkWidget* dialog, GCallback resp_cb) +{ + g_signal_connect(dialog, "delete_event", + G_CALLBACK(gui_delete_noop), NULL); + g_signal_connect(dialog, "response", + resp_cb ? resp_cb : G_CALLBACK(gtk_widget_hide), NULL); +} + +static inline void +gui_dialog_connect_data(GtkWidget* dialog, GCallback resp_cb, gpointer data) +{ + g_signal_connect(dialog, "delete_event", + G_CALLBACK(gui_delete_noop), NULL); + g_signal_connect(dialog, "response", + resp_cb ? resp_cb : G_CALLBACK(gtk_widget_hide), data); +} + +gchar* gui_filename_to_utf8(const gchar* old_name); +gchar* gui_filename_from_utf8(const gchar* old_name); + +GtkBuilder* gui_builder_from_file(const gchar* name, const struct menu_callback cb[]); + +gint gui_get_text_entry(int length, + void (*changedfunc)(), + GtkWidget** widget); +GtkWidget* gui_get_widget(GtkBuilder *builder, const gchar* name, const gchar* file); +void gui_popup_menu_attach(GtkWidget* menu, GtkWidget* widget, gpointer* user_data); +void gui_get_pixel_size(GtkWidget* w, const char* text, gint* width, gint* height); +GdkPixbuf* gui_pixbuf_new_from_file(const gchar* path); +/* icon_set should be NULL-terminated */ +void gui_add_icons(const icon_set* icons); + +static inline void +_gui_block_signals(GObject* objs[], const gint tags[], const gint number, gboolean block) +{ + gint i; + + for (i = 0; i < number; i++) + (block ? g_signal_handler_block : g_signal_handler_unblock)(objs[i], tags[i]); +} +#define gui_block_signals(objs, tags, block)\ + _gui_block_signals((GObject **)objs, tags, sizeof(objs) / sizeof(objs[0]), block) #endif /* _GUI_SUBS_H */ diff -Nru soundtracker-0.6.8/app/history.c soundtracker-1.0.2~pre2/app/history.c --- soundtracker-0.6.8/app/history.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/history.c 2021-02-23 17:47:24.000000000 +0000 @@ -0,0 +1,567 @@ + +/* + * The Real SoundTracker - User activity history + * + * Copyright (C) 2019-2021 Yury Aliaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include + +#include "gui-settings.h" +#include "gui.h" +#include "history.h" + +typedef struct { + HistoryActionType type; + const gchar* title; + gint page, ins, smp, pos, pat; + gint extra_flags; + union { + gpointer arg_pointer; + gint iarg; + } arg; + gsize arg_size; + void (*undo_func)(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data); + void (*cleanup_func)(gpointer arg); + gpointer data; +} Action; + +static GQueue historique = G_QUEUE_INIT; +static GList *current = NULL, *saved = NULL; + +static GtkWidget *undo_menu, *redo_menu; + +static gsize free_size = -1; +static gboolean force_modified = FALSE, in_history = FALSE; +gboolean history_skip = FALSE; + +static void +update_menus(void) +{ + Action* element; + GList* prev; + gchar* label; + + if (current) { + element = current->data; + label = g_strdup_printf("%s: %s", _("_Undo"), element->title); + gtk_menu_item_set_label(GTK_MENU_ITEM(undo_menu), label); + g_free(label); + } else + gtk_menu_item_set_label(GTK_MENU_ITEM(undo_menu), _("_Undo")); + gtk_widget_set_sensitive(undo_menu, current != NULL); + + prev = current ? current->prev : historique.tail; + if (prev) { + element = prev->data; + label = g_strdup_printf("%s: %s", _("_Redo"), element->title); + gtk_menu_item_set_label(GTK_MENU_ITEM(redo_menu), label); + g_free(label); + } else + gtk_menu_item_set_label(GTK_MENU_ITEM(redo_menu), _("_Redo")); + gtk_widget_set_sensitive(redo_menu, prev != NULL); +} + +void +history_init(GtkBuilder* bd) +{ + free_size = gui_settings.undo_size << 20; + + undo_menu = gui_get_widget(bd, "edit_undo", XML_FILE); + gtk_widget_set_sensitive(undo_menu, FALSE); + redo_menu = gui_get_widget(bd, "edit_redo", XML_FILE); + gtk_widget_set_sensitive(redo_menu, FALSE); +} + +void +history_clear(const gboolean set_modified) +{ + Action* element; + + for (element = g_queue_pop_head(&historique); + element; + element = g_queue_pop_head(&historique)) { + if (element->type == HISTORY_ACTION_POINTER) { + if (element->cleanup_func) + element->cleanup_func(element->arg.arg_pointer); + g_free(element->arg.arg_pointer); + } + g_free(element); + } + current = NULL; + saved = NULL; + force_modified = set_modified; + free_size = gui_settings.undo_size << 20; + + update_menus(); + gui_update_title(NULL); +} + +void +history_save(void) +{ + saved = current; + force_modified = FALSE; + gui_update_title(NULL); +} + +gboolean +history_get_modified(void) +{ + return force_modified || saved != current; +} + +static void +undo_redo_common(Action* element, const gboolean redo) +{ + in_history = TRUE; + + if (element->page != -1) + gui_go_to_page(element->page); + if (element->ins != -1) + gui_set_current_instrument(element->ins); + if (element->smp != -1) + gui_set_current_sample(element->smp); + if (element->pos != -1) + gui_set_current_position(element->pos); + if (element->pat != -1) + gui_set_current_pattern(element->pat, TRUE); + + /* We need all idle functions to do their work before + changing some values */ + while (gtk_events_pending()) + gtk_main_iteration(); + + switch(element->type) { + case HISTORY_ACTION_POINTER: + case HISTORY_ACTION_POINTER_NOFREE: + element->undo_func(element->ins, element->smp, redo, element->arg.arg_pointer, element->data); + break; + case HISTORY_ACTION_INT: + element->undo_func(element->ins, element->smp, redo, &(element->arg.iarg), element->data); + break; + default: + g_assert_not_reached(); + } + update_menus(); + gui_update_title(NULL); + + in_history = FALSE; +} + +void +history_undo(void) +{ + Action* element; + + if (!current) + return; + + element = current->data; + current = current->next; + undo_redo_common(element, FALSE); +} + +void +history_redo(void) +{ + if (current) { + if (!current->prev) + return; + current = current->prev; + } else { + if (!historique.tail) + return; + current = historique.tail; + } + + undo_redo_common(current->data, TRUE); +} + +static void +selection_changed(GtkTreeSelection* sel, gint* current_row) +{ + gint row = gui_list_get_selection_index(sel); + + if (row < *current_row) { + for(; row < *current_row; (*current_row)--) + history_undo(); + } else if (row > *current_row) { + for(; row > *current_row; (*current_row)++) + history_redo(); + } +} + +void +history_show_dialog(void) +{ + static GtkWidget *dialog = NULL, *history_list; + static GtkListStore* ls; + static GtkTreeSelection* sel; + static gint tag, current_row; + GtkTreeIter iter, sel_iter; + GtkTreeModel* tm; + GList* l; + gint i; + const gchar* titles[] = {N_("Operation"), N_("Saved")}; + GType types[] = {G_TYPE_STRING, G_TYPE_STRING}; + const gfloat alignments[] = {0.0, 0.5}; + const gboolean expands[] = {FALSE, FALSE}; + + if (!dialog) { + dialog = gtk_dialog_new_with_buttons(_("Undo History"), GTK_WINDOW(mainwindow), + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); + gui_dialog_connect(dialog, NULL); + gui_dialog_adjust(dialog, GTK_RESPONSE_CLOSE); + + history_list = gui_list_in_scrolled_window_full(2, titles, + gtk_dialog_get_content_area(GTK_DIALOG(dialog)), + types, alignments, expands, GTK_SELECTION_BROWSE, TRUE, TRUE, + NULL, GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(history_list)); + ls = GUI_GET_LIST_STORE(history_list); + tag = g_signal_connect_after(sel, "changed", + G_CALLBACK(selection_changed), ¤t_row); + + gtk_widget_set_size_request(history_list, -1, 100); + gtk_widget_show_all(dialog); + } + + g_signal_handler_block(G_OBJECT(sel), tag); + gui_list_clear(history_list); + tm = gui_list_freeze(history_list); + gtk_list_store_append(ls, &iter); + gtk_list_store_set(ls, &iter, 0, "[Initial State]", + 1, (saved == NULL && !force_modified) ? "*" : "", -1); + if (!current) { + sel_iter = iter; + current_row = 0; + } + for (i = 1, l = historique.tail; l; l = l->prev, i++) { + gtk_list_store_append(ls, &iter); + gtk_list_store_set(ls, &iter, 0, ((Action *)l->data)->title, + 1, (saved == l && !force_modified) ? "*" : "", -1); + if (l == current) { + sel_iter = iter; + current_row = i; + } + } + gui_list_thaw(history_list, tm); + + gtk_tree_selection_select_iter(sel, &sel_iter); + gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(history_list), + gtk_tree_model_get_path(tm, &sel_iter), NULL, TRUE, 0.5, 0.5); + g_signal_handler_unblock(G_OBJECT(sel), tag); + + gtk_window_present(GTK_WINDOW(dialog)); +} + +gboolean +history_test_collate(HistoryActionType type, + const gint flags, + gpointer data) +{ + gint ins, smp, pos, pat; + Action* element; + + if (historique.head != current) + return FALSE; + element = g_queue_peek_head(&historique); + if (!element) + return FALSE; + + /* After the saved state we have to begin a new operation */ + if (current == saved) + return FALSE; + + ins = (flags & HISTORY_FLAG_LOG_INS) ? gui_get_current_instrument() : -1; + smp = (flags & HISTORY_FLAG_LOG_SMP) ? gui_get_current_sample() : -1; + pos = (flags & HISTORY_FLAG_LOG_POS) ? gui_get_current_position() : -1; + pat = (flags & HISTORY_FLAG_LOG_PAT) ? gui_get_current_pattern() : -1; + if (element->type == type && element->data == data && + element->ins == ins && element->smp == smp && + element->pos == pos && element->pat == pat && + element->extra_flags == (flags & HISTORY_EXTRA_FLAGS_MASK)) + return TRUE; + + return FALSE; +} + +HistoryStatus +history_log_action_full(HistoryActionType type, + const gchar* title, + const gint flags, + void (*undo_func)(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data), + void (*cleanup_func)(gpointer arg), + gpointer data, + gsize arg_size, ...) /* The last argument can have various type */ +{ + Action* element; + va_list ap; + gboolean collatable = flags & HISTORY_FLAG_COLLATABLE; + gint ins, smp, pos, pat; + + /* Sanity check to make debugging easier */ + g_assert(history_check_size(arg_size)); + + if (history_skip || in_history) + return HISTORY_STATUS_OK; + + /* Current state is not the history head. + Elements newer than current state should be removed */ + while (historique.head != current) { + /* Only the newest action in the list can be collated with the current one */ + collatable = FALSE; + if (historique.head == saved) { + /* Saved state is lost */ + saved = NULL; + force_modified = TRUE; + } + element = g_queue_pop_head(&historique); + free_size += element->arg_size; + if (element->type == HISTORY_ACTION_POINTER) { + if (element->cleanup_func) + element->cleanup_func(element->arg.arg_pointer); + g_free(element->arg.arg_pointer); + } + g_free(element); + } + + ins = (flags & HISTORY_FLAG_LOG_INS) ? gui_get_current_instrument() : -1; + smp = (flags & HISTORY_FLAG_LOG_SMP) ? gui_get_current_sample() : -1; + pos = (flags & HISTORY_FLAG_LOG_POS) ? gui_get_current_position() : -1; + if (flags & HISTORY_FLAG_FORCE_PAT) + pat = flags & HISTORY_FLAG_PARAMETER_MASK; + else + pat = (flags & HISTORY_FLAG_LOG_PAT) ? gui_get_current_pattern() : -1; + element = g_queue_peek_head(&historique); + if (collatable && element && current != saved) + if (element->type == type && element->data == data && + element->ins == ins && element->smp == smp && + element->pos == pos && element->pat == pat && + element->extra_flags == (flags & HISTORY_EXTRA_FLAGS_MASK)) + /* Collation, nothing to do */ + return HISTORY_STATUS_COLLATED; + + if (arg_size > gui_settings.undo_size << 20) { + /* Argument is too big, undo is not possible. + Caller must check size before logging to avoid this case + otherwise argument has to be freed */ + force_modified = TRUE; + return HISTORY_STATUS_NOMEM; + } + /* Freeing oldest elements if necessary */ + while (free_size < arg_size) { + if (historique.tail == saved) + /* Saved state is lost */ + saved = NULL; + /* If saved state has already been NULL (initial state), it + anyway will be lost if any tail element will be deleted */ + if (!saved) + force_modified = TRUE; + + element = g_queue_pop_tail(&historique); + free_size += element->arg_size; + if (element->type == HISTORY_ACTION_POINTER) { + if (element->cleanup_func) + element->cleanup_func(element->arg.arg_pointer); + g_free(element->arg.arg_pointer); + } + g_free(element); + } + + element = g_new(Action, 1); + element->type = type; + element->title = title; + element->extra_flags = flags & HISTORY_EXTRA_FLAGS_MASK; + if (flags & HISTORY_FLAG_FORCE_PAGE) + element->page = flags & HISTORY_FLAG_PARAMETER_MASK; + else + element->page = (flags & HISTORY_FLAG_LOG_PAGE) ? notebook_current_page : -1; + element->ins = ins; + element->smp = smp; + element->pos = pos; + element->pat = pat; + + va_start(ap, arg_size); + switch (type) { + case HISTORY_ACTION_POINTER: + case HISTORY_ACTION_POINTER_NOFREE: + element->arg.arg_pointer = va_arg(ap, gpointer); + break; + case HISTORY_ACTION_INT: + element->arg.iarg = va_arg(ap, gint); + break; + default: + g_assert_not_reached(); + } + va_end(ap); + + element->arg_size = arg_size; + element->undo_func = undo_func; + element->cleanup_func = cleanup_func; + element->data = data; + g_queue_push_head(&historique, element); + free_size -= element->arg_size; + + current = historique.head; + update_menus(); + gui_update_title(NULL); + return HISTORY_STATUS_OK; +} + +gboolean +history_check_size(gsize size) +{ + return size <= gui_settings.undo_size << 20; +} + +gboolean +_history_query_irreversible(GtkWidget *parent, const gchar* message) +{ + gboolean res = gui_ok_cancel_modal(parent, _(message)); + + if (res) { + /* Provided that some irreversible action will be done. + Since this point all previous changes cannot be reverted. */ + history_clear(TRUE); + } + + return res; +} + +/* Most often used logging and undo/redo functions */ + +static void +spin_button_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + gint tmp_value; + gint* value = arg; + + g_assert(GTK_IS_SPIN_BUTTON(data)); + + tmp_value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data)); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(data), *value); + *value = tmp_value; +} + +void +history_log_spin_button(GtkSpinButton* sb, + const gchar* title, + const gint flags, + const gint prev_value) +{ + history_log_action(HISTORY_ACTION_INT, title, flags | HISTORY_FLAG_COLLATABLE, spin_button_undo, + sb, 0, prev_value); +} + +static void +toggle_button_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + gboolean tmp_value; + gboolean* value = arg; + + g_assert(GTK_IS_TOGGLE_BUTTON(data)); + + tmp_value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data), *value); + *value = tmp_value; +} + +void +history_log_toggle_button(GtkToggleButton* tb, + const gchar* title, + const gint flags, + const gboolean prev_value) +{ + history_log_action(HISTORY_ACTION_INT, title, flags, toggle_button_undo, + tb, 0, prev_value); +} + +struct EntryArg { + gint maxlen; + gchar data[1]; +}; + +static void +entry_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + gchar* tmp_value; + struct EntryArg* ea = arg; + + g_assert(GTK_IS_ENTRY(data)); + + tmp_value = alloca(ea->maxlen); + strncpy(tmp_value, gtk_entry_get_text(GTK_ENTRY(data)), ea->maxlen); + gtk_entry_set_text(GTK_ENTRY(data), ea->data); + strncpy(ea->data, tmp_value, ea->maxlen); +} + +void +history_log_entry(GtkEntry* en, + const gchar* title, + const gint maxlen, + const gint flags, + const gchar* prev_value) +{ + const gsize arg_size = sizeof(struct EntryArg) + sizeof(gchar) * maxlen - 1; + struct EntryArg* arg; + + if (history_test_collate(HISTORY_ACTION_POINTER, flags, en)) + return; + + arg = g_malloc(arg_size); + arg->maxlen = maxlen; + strncpy(arg->data, prev_value, maxlen); + history_log_action(HISTORY_ACTION_POINTER, title, flags, entry_undo, + en, arg_size, arg); +} + +static void +radio_group_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + gint *index = arg; + GtkWidget** buttons = data; + gint tmp_value = find_current_toggle(buttons, *index >> 16); + + g_assert(GTK_IS_TOGGLE_BUTTON(buttons[0])); + + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(buttons[*index & 0xffff]), TRUE); + *index = (*index & 0xffff0000) | tmp_value; +} + +void +history_log_radio_group(GtkWidget** group, + const gchar* title, + const gint flags, + const gint prev_value, + const gint number) +{ + history_log_action(HISTORY_ACTION_INT, title, flags, + /* I (yaliaev) don't want to allocate devoted argument in heap, so + I store 2 integers just inside the history queue provided that + we have less than 2^16 radio buttons in a group :-) */ + radio_group_undo, group, 0, prev_value | number << 16); +} diff -Nru soundtracker-0.6.8/app/history.h soundtracker-1.0.2~pre2/app/history.h --- soundtracker-0.6.8/app/history.h 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/history.h 2021-02-06 10:46:40.000000000 +0000 @@ -0,0 +1,116 @@ + +/* + * The Real SoundTracker - User activity history (header) + * + * Copyright (C) 2019, 2020 Yury Aliaev + * Copyright (C) 1998-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +typedef enum { + HISTORY_ACTION_POINTER, + HISTORY_ACTION_POINTER_NOFREE, /* Don't free argument on history record removal */ + HISTORY_ACTION_INT +} HistoryActionType; + +typedef enum { + HISTORY_STATUS_OK, + HISTORY_STATUS_COLLATED, + HISTORY_STATUS_NOMEM +} HistoryStatus; + +enum { + HISTORY_FLAG_COLLATABLE = 1 << 8, /* 8 lowest bits for parameter given through flags */ + HISTORY_FLAG_LOG_PAGE = 1 << 9, + HISTORY_FLAG_LOG_INS = 1 << 10, + HISTORY_FLAG_LOG_SMP = 1 << 11, + HISTORY_FLAG_LOG_POS = 1 << 12, + HISTORY_FLAG_LOG_PAT = 1 << 13, + HISTORY_FLAG_FORCE_PAT = 1 << 14, /* Mutually exclusive with _FORCE_PAGE */ + HISTORY_FLAG_FORCE_PAGE = 1 << 15 +}; + +#define HISTORY_FLAG_LOG_ALL (HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | HISTORY_FLAG_LOG_SMP) +#define HISTORY_SET_PAGE(page) (HISTORY_FLAG_FORCE_PAGE | page) +#define HISTORY_SET_PAT(pat) (HISTORY_FLAG_FORCE_PAT | pat) +/* Extra flags can be used for distinguishing between similarly looking actions */ +#define HISTORY_EXTRA_FLAGS_MASK 0xffff0000 +#define HISTORY_FLAG_PARAMETER_MASK 0xff +#define HISTORY_EXTRA_FLAGS(flags) (flags << 16) + +extern gboolean history_skip; + +void history_init(GtkBuilder* bd); +void history_clear(const gboolean set_modified); +void history_save(void); +gboolean history_get_modified(void); +gboolean history_check_size(gsize size); +gboolean _history_query_irreversible(GtkWidget *parent, const gchar* message); + +static inline gboolean +history_query_oversized(GtkWidget *parent) { + return _history_query_irreversible(parent, + N_("The operation requres too much memory.\nYou will not be able to undo it.\n" + "Do you want to continue?")); +} + +static inline gboolean +history_query_irreversible(GtkWidget *parent) { + return _history_query_irreversible(parent, + N_("You are about to do some irreversible action.\nYou will not be able to undo it.\n" + "Do you want to continue?")); +} + +/* Checks if the specified action can be collated with the previous logged one */ +gboolean history_test_collate(HistoryActionType type, + const gint flags, + gpointer data); + +HistoryStatus history_log_action_full(HistoryActionType type, + const gchar* title, + const gint flags, + void (*undo_func)(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data), + void (*cleanup_func)(gpointer arg), + gpointer data, + gsize arg_size, ...); /* The last argument can have various type */ +#define history_log_action(type, title, flags, undo_func, data, arg_size, arg)\ + history_log_action_full(type, title, flags, undo_func, NULL, data, arg_size, arg) + +/* Convenience function for most common actions */ +void history_log_spin_button(GtkSpinButton* sb, + const gchar* title, + const gint flags, /* Collatable is ignored (always TRUE) */ + const gint prev_value); + +void history_log_entry(GtkEntry* en, + const gchar* title, + const gint maxlen, + const gint flags, /* Also always collatable */ + const gchar* prev_value); + +void history_log_toggle_button(GtkToggleButton* tb, + const gchar* title, + const gint flags, + const gboolean prev_value); + +void history_log_radio_group(GtkWidget** group, + const gchar* title, + const gint flags, + const gint prev_value, + const gint number); diff -Nru soundtracker-0.6.8/app/i18n.h soundtracker-1.0.2~pre2/app/i18n.h --- soundtracker-0.6.8/app/i18n.h 2006-01-15 15:54:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/i18n.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ - -#ifndef _ST_I18N_H -#define _ST_I18N_H - -#include - -#if defined(USE_GNOME) - -#include - -#else - -#ifndef _ -#if defined(ENABLE_NLS) -# include "gettext.h" -# define _(x) gettext(x) -# ifdef gettext_noop -# define N_(String) gettext_noop (String) -# else -# define N_(String) (String) -# endif -#else -# define N_(String) (String) -# define _(x) (x) -# define gettext(x) (x) -#endif -#endif - -#endif /* USE_GNOME */ - -#endif /* _ST_I18N_H */ diff -Nru soundtracker-0.6.8/app/instrument-editor.c soundtracker-1.0.2~pre2/app/instrument-editor.c --- soundtracker-0.6.8/app/instrument-editor.c 2004-01-11 15:19:55.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/instrument-editor.c 2020-11-27 16:30:50.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - instrument editor * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,215 +21,381 @@ #include -#ifndef USE_GNOME +#include #include -#endif +#include -#include "i18n.h" -#include "instrument-editor.h" +#include "clavier.h" #include "envelope-box.h" -#include "xm.h" -#include "st-subs.h" -#include "gui.h" +#include "errors.h" +#include "extspinbutton.h" +#include "file-operations.h" +#include "gui-settings.h" #include "gui-subs.h" +#include "gui.h" +#include "history.h" +#include "instrument-editor.h" #include "keys.h" -#include "track-editor.h" -#include "clavier.h" -#include "errors.h" +#include "module-info.h" #include "sample-editor.h" +#include "st-subs.h" +#include "track-editor.h" #include "tracker.h" -#include "gui-settings.h" -#include "module-info.h" -#include "file-operations.h" +#include "xm.h" + +file_op *saveinstr, *loadinstr; + +struct InstrumentEditor { + gboolean full; + guint idle_handler; +}; + +static GtkWidget *volenv, *panenv, *disableboxes[5]; +static GtkWidget* instrument_editor_vibtype_w; +static GtkWidget* clavier; +static GtkWidget* curnote_label; +static GtkAdjustment* instrument_page_adj[4]; +static GObject* setting_objs[5]; +static gint tags[5]; + +static STInstrument *current_instrument, *tmp_instrument = NULL, *tmp_instr2 = NULL; +static gint current_instrument_number = 0; -static GtkWidget *volenv, *panenv, *disableboxes[4]; -static GtkWidget *instrument_editor_vibtype_w[4]; -static GtkWidget *clavier; -static GtkWidget *curnote_label; +static void +adjustment_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + gint tmp_value; + gint* value = arg; + + g_assert(GTK_IS_ADJUSTMENT(data)); + + tmp_value = rint(gtk_adjustment_get_value(GTK_ADJUSTMENT(data))); + gtk_adjustment_set_value(GTK_ADJUSTMENT(data), *value); + *value = tmp_value; +} -static STInstrument *current_instrument, *tmp_instrument = NULL; +static inline void +log_adjustment(GtkAdjustment* adj, + const gchar* title, + const gint prev_value) +{ + history_log_action(HISTORY_ACTION_INT, title, + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | HISTORY_FLAG_COLLATABLE, + adjustment_undo, adj, 0, prev_value); +} static void -instrument_page_volfade_changed (int value) +instrument_page_volfade_changed(GtkAdjustment *adj) { - current_instrument->volfade = value; - xm_set_modified(1); + log_adjustment(adj, _("Volume Fadeout changing"), current_instrument->volfade); + current_instrument->volfade = rint(gtk_adjustment_get_value(adj)); } static void -instrument_page_vibspeed_changed (int value) +instrument_page_vibspeed_changed(GtkAdjustment *adj) { - current_instrument->vibrate = value; - xm_set_modified(1); + log_adjustment(adj, _("Vibrato Speed changing"), current_instrument->vibrate); + current_instrument->vibrate = rint(gtk_adjustment_get_value(adj)); } static void -instrument_page_vibdepth_changed (int value) +instrument_page_vibdepth_changed(GtkAdjustment *adj) { - current_instrument->vibdepth = value; - xm_set_modified(1); + log_adjustment(adj, _("Vibrato Depth changing"), current_instrument->vibdepth); + current_instrument->vibdepth = rint(gtk_adjustment_get_value(adj)); } static void -instrument_page_vibsweep_changed (int value) +instrument_page_vibsweep_changed(GtkAdjustment *adj) { - current_instrument->vibsweep = value; - xm_set_modified(1); + log_adjustment(adj, _("Vibrato Sweep changing"), current_instrument->vibsweep); + current_instrument->vibsweep = rint(gtk_adjustment_get_value(adj)); } -static gui_subs_slider instrument_page_sliders[] = { - { N_("VolFade"), 0, 0xfff, instrument_page_volfade_changed }, - { N_("VibSpeed"), 0, 0x3f, instrument_page_vibspeed_changed }, - { N_("VibDepth"), 0, 0xf, instrument_page_vibdepth_changed }, - { N_("VibSweep"), 0, 0xff, instrument_page_vibsweep_changed }, -}; +static void +combo_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + gint tmp_value; + gint* value = arg; + + g_assert(GTK_IS_COMBO_BOX(data)); + + tmp_value = gtk_combo_box_get_active(GTK_COMBO_BOX(data)); + gtk_combo_box_set_active(GTK_COMBO_BOX(data), *value); + *value = tmp_value; +} static void -instrument_editor_vibtype_changed (void) +instrument_editor_vibtype_changed(GtkComboBox* combo) { - current_instrument->vibtype = find_current_toggle(instrument_editor_vibtype_w, 4); - xm_set_modified(1); + gint type = gtk_combo_box_get_active(combo); + + if (current_instrument->vibtype != type) { + history_log_action(HISTORY_ACTION_INT, _("Vibrato Type changing"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | HISTORY_FLAG_COLLATABLE, + combo_undo, combo, 0, current_instrument->vibtype); + current_instrument->vibtype = type; + } } -static gint -instrument_editor_clavierkey_press_event (GtkWidget *widget, - gint key, - gpointer data) +static void +sample_map_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) { - current_instrument->samplemap[key] = gui_get_current_sample(); - clavier_press(CLAVIER(clavier), key); + const gsize smap_size = sizeof(current_instrument->samplemap); + gint8* tmp_mem = alloca(smap_size); + + memcpy(tmp_mem, data, smap_size); + memcpy(data, arg, smap_size); + memcpy(arg, tmp_mem, smap_size); + + /* Current instrument should already be set by operations history services */ + gtk_widget_queue_draw(clavier); +} + +static gint +instrument_editor_clavierkey_press_event(GtkWidget* widget, + gint key, + gint button, + gpointer data) +{ + if (button == 3) { + if (!history_test_collate(HISTORY_ACTION_POINTER, + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS, current_instrument->samplemap)) { + const gsize smap_size = sizeof(current_instrument->samplemap); + gint8* smap = g_malloc(smap_size); + + memcpy(smap, current_instrument->samplemap, smap_size); + history_log_action(HISTORY_ACTION_POINTER, _("Sample map modification"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | HISTORY_FLAG_COLLATABLE, + sample_map_undo, current_instrument->samplemap, smap_size, smap); + } + current_instrument->samplemap[key] = gui_get_current_sample(); + gtk_widget_queue_draw(clavier); + } else { + track_editor_do_the_note_key(key - 12 * gui_get_current_octave_value(), TRUE, 0, 0, TRUE); + clavier_press(CLAVIER(clavier), key); + } return FALSE; } static void -instrument_editor_init_samplemap (void) +instrument_editor_init_samplemap(void) { int key; int sample = gui_get_current_sample(); - for(key = 0; key < sizeof(current_instrument->samplemap) / sizeof(current_instrument->samplemap[0]); key++) { - current_instrument->samplemap[key] = sample; + for (key = 0; key < ARRAY_SIZE(current_instrument->samplemap); key++) { + current_instrument->samplemap[key] = sample; } clavier_set_key_labels(CLAVIER(clavier), current_instrument->samplemap); } static gint -instrument_editor_clavierkey_release_event (GtkWidget *widget, - gint key, - gpointer data) -{ - clavier_release(CLAVIER(clavier), key); +instrument_editor_clavierkey_release_event(GtkWidget* widget, + gint key, + gint button, + gpointer data) +{ + if (button != 3) { + track_editor_do_the_note_key(key - 12 * gui_get_current_octave_value(), FALSE, 0, 0, TRUE); + clavier_release(CLAVIER(clavier), key); + } return FALSE; } static gint -instrument_editor_clavierkey_enter_event (GtkWidget *widget, - gint key, - gpointer data) +instrument_editor_clavierkey_enter_event(GtkWidget* widget, + gint key, + gpointer data) { - int index = (gui_settings.sharp ? 0 : 1) + (gui_settings.bh ? 2 : 0); - gtk_label_set_text(GTK_LABEL(curnote_label), notenames[index][key]); + gtk_label_set_text(GTK_LABEL(curnote_label), tracker_get_note_name(key)); return FALSE; } static gint -instrument_editor_clavierkey_leave_event (GtkWidget *widget, - gint key, - gpointer data) +instrument_editor_clavierkey_leave_event(GtkWidget* widget, + gint key, + gpointer data) { gtk_label_set_text(GTK_LABEL(curnote_label), NULL); return FALSE; } -static void -instrument_editor_load_instrument (gchar *fn) +static gboolean +alloc_instr(STInstrument** instr) { - STInstrument *instr = current_instrument; - FILE *f; + if (!*instr) + *instr = g_new0(STInstrument, 1); - g_assert(instr != NULL); + if (!*instr) { + gui_oom_error(); + return FALSE; + } - // Instead of locking the instrument and samples, we simply stop playing. - gui_play_stop(); + st_clean_instrument(*instr, NULL); + return TRUE; +} - f = fopen(fn, "rb"); - if(f) { - statusbar_update(STATUS_LOADING_INSTRUMENT, TRUE); - xm_load_xi(instr, f); - statusbar_update(STATUS_INSTRUMENT_LOADED, FALSE); - fclose(f); - } else { - error_error(_("Can't open file.")); - } +static void +instrument_total_undo(const gint ins, const gint smp, const gboolean redo, + gpointer saved, gpointer current) +{ + if (!alloc_instr(&tmp_instr2)) + return; - current_instrument = NULL; - instrument_editor_set_instrument(instr); - sample_editor_set_sample(&instr->samples[0]); + gui_play_stop(); + st_copy_instrument(saved, tmp_instr2); + st_copy_instrument(current, saved); + st_copy_instrument(tmp_instr2, current); + /* With some possible overhead, but in some cases + we need to update not only the current instrument */ + modinfo_update_all(); + instrument_editor_update(FALSE); + sample_editor_set_sample(&((STInstrument *)current)->samples[gui_get_current_sample()]); } static void -instrument_editor_save_instrument (gchar *fn) +instrument_deallocate(gpointer data) { - STInstrument *instr = current_instrument; - FILE *f; + STInstrument* arg = data; + gint i; - g_assert(instr != NULL); + for (i = 0; i < ST_NUM_SAMPLES(arg); i++) + if (arg->samples[i].sample.data) + g_free(arg->samples[i].sample.data); +} - f = fopen(fn, "wb"); - if(f) { - statusbar_update(STATUS_SAVING_INSTRUMENT, TRUE); - xm_save_xi(instr, f); - statusbar_update(STATUS_INSTRUMENT_SAVED, FALSE); - fclose(f); - } else { - error_error(_("Can't open file.")); - } +gboolean +instrument_editor_check_and_log_instrument(STInstrument* instr, + const gchar* title, + const gint flags, + gsize i_size) +{ + if (!i_size) + i_size = st_get_instrument_size(instr); + if (history_check_size(i_size)) { + /* Undo is possible */ + STInstrument* arg = NULL; + + if (!alloc_instr(&arg)) + return FALSE; + /* Storing old instrument somewhere and take it for logging */ + st_copy_instrument(instr, arg); + history_log_action_full(HISTORY_ACTION_POINTER, _(title), flags, + instrument_total_undo, instrument_deallocate, instr, i_size, arg); + } else if (!history_query_oversized(mainwindow)) + /* User rejected to continue without undo */ + return FALSE; + + return TRUE; } -void -instrument_editor_clear_current_instrument (void) +static void +instrument_editor_load_instrument(const gchar* fn, const gchar* localname) { + STInstrument* instr = current_instrument; + FILE* f; + gboolean modified = FALSE; + + g_assert(instr != NULL); + + // Instead of locking the instrument and samples, we simply stop playing. gui_play_stop(); - st_clean_instrument(current_instrument, NULL); + /* Some overhead (load to temporary than copy) but we're now at the safe + side that the existing instrument would not be overwritten if the + instrument being loaded is bad. */ + + if (!alloc_instr(&tmp_instr2)) + return; + + f = gui_fopen(localname, fn, "rb"); + if (f) { + gui_statusbar_update(STATUS_LOADING_INSTRUMENT, TRUE); + if (xm_load_xi(tmp_instr2, f)) { + gui_statusbar_update(STATUS_INSTRUMENT_LOADED, FALSE); + modified = TRUE; + } else + gui_statusbar_update(STATUS_IDLE, FALSE); + fclose(f); + } - instrument_editor_update(); - sample_editor_update(); - modinfo_update_all(); + if (modified) { + /* We take care about both the new and old instruments */ + if (instrument_editor_check_and_log_instrument(instr, N_("Instrument loading"), + HISTORY_SET_PAGE(NOTEBOOK_PAGE_INSTRUMENT_EDITOR) | HISTORY_FLAG_LOG_INS | HISTORY_EXTRA_FLAGS(0), + MAX(st_get_instrument_size(instr), st_get_instrument_size(tmp_instr2)))) { + st_copy_instrument(tmp_instr2, instr); + instrument_editor_update(TRUE); + sample_editor_set_sample(&instr->samples[gui_get_current_sample()]); + } + } } static void -instrument_editor_file_selected (GtkWidget *w, - GtkFileSelection *fs) +instrument_editor_save_instrument(const gchar* fn, gchar* localname) { - gchar *fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs)); + STInstrument* instr = current_instrument; + FILE* f; + + g_assert(instr != NULL); - gtk_widget_hide(GTK_WIDGET(fs)); + f = gui_fopen(localname, fn, "wb"); - if(!file_selection_is_valid(fn)) { - /* No file was actually selected. */ - gnome_error_dialog(_("No file selected.")); - return; + if (f) { + gui_statusbar_update(STATUS_SAVING_INSTRUMENT, TRUE); + if (xm_save_xi(instr, f)) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Saving instrument failed."), FALSE); + gui_statusbar_update(STATUS_IDLE, FALSE); + } else + gui_statusbar_update(STATUS_INSTRUMENT_SAVED, FALSE); + fclose(f); } +} - if(fs == GTK_FILE_SELECTION(fileops_dialogs[DIALOG_LOAD_INSTRUMENT])) { - file_selection_save_path(fn, gui_settings.loadinstr_path); - instrument_editor_load_instrument(fn); - } else { - file_selection_save_path(fn, gui_settings.saveinstr_path); - instrument_editor_save_instrument(fn); +gboolean instrument_editor_clear_current_instrument(void) +{ + /* Deleting the same instrument twice makes no sence, but we should be + at the safe side and skip senseless action */ + if (history_test_collate(HISTORY_ACTION_POINTER, + HISTORY_FLAG_LOG_INS | HISTORY_EXTRA_FLAGS(1), current_instrument)) + return FALSE; + + if (gui_ok_cancel_modal(mainwindow, + _("Clear current instrument?"))) { + if (instrument_editor_check_and_log_instrument(current_instrument, N_("Instrument clearing"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | + HISTORY_FLAG_COLLATABLE | HISTORY_EXTRA_FLAGS(1), 0)) { + gui_play_stop(); + + st_clean_instrument(current_instrument, NULL); + + instrument_editor_update(TRUE); + sample_editor_update(); + } } + return TRUE; } -void -instrument_page_create (GtkNotebook *nb) +void instrument_page_create(GtkNotebook* nb) { - GtkWidget *mainbox, *vbox, *thing, *box, *box2, *box3, *box4, *frame; - static const char *vibtypelabels[] = { N_("Sine"), N_("Square"), N_("Saw Down"), N_("Saw Up"), NULL }; + GtkWidget *mainbox, *vbox, *thing, *box, *box2, *box3, *box4, *frame, *table; + GtkListStore* list_store; + GtkTreeIter iter; + guint i; + static const char* vibtypelabels[] = { N_("Sine"), N_("Square"), N_("Saw Down"), N_("Saw Up"), NULL }; + + static const gchar* xi_f[] = { N_("FastTracker instruments (*.xi)"), "*.[xX][iI]", NULL }; + static const gchar** formats[] = { xi_f, NULL }; mainbox = gtk_vbox_new(FALSE, 4); - gtk_container_border_width(GTK_CONTAINER(mainbox), 10); + gtk_container_set_border_width(GTK_CONTAINER(mainbox), 10); gtk_notebook_append_page(nb, mainbox, gtk_label_new(_("Instrument Editor"))); gtk_widget_show(mainbox); @@ -255,7 +421,6 @@ gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - box = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(mainbox), box, FALSE, TRUE, 0); gtk_widget_show(box); @@ -264,21 +429,24 @@ gtk_box_pack_start(GTK_BOX(box), box2, TRUE, TRUE, 0); gtk_widget_show(box2); - fileops_dialogs[DIALOG_LOAD_INSTRUMENT] = file_selection_create(_("Load Instrument..."), instrument_editor_file_selected); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_LOAD_INSTRUMENT]), gui_settings.loadinstr_path); - fileops_dialogs[DIALOG_SAVE_INSTRUMENT] = file_selection_create(_("Save Instrument..."), instrument_editor_file_selected); + loadinstr = fileops_dialog_create(DIALOG_LOAD_INSTRUMENT, _("Load Instrument"), + &gui_settings.loadinstr_path, instrument_editor_load_instrument, TRUE, FALSE, formats, + N_("Load instrument in the current instrument slot"), NULL); + saveinstr = fileops_dialog_create(DIALOG_SAVE_INSTRUMENT, _("Save Instrument"), + &gui_settings.saveinstr_path, instrument_editor_save_instrument, TRUE, TRUE, formats, + N_("Save the current instrument"), "xi"); thing = gtk_button_new_with_label(_("Load XI")); gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(fileops_open_dialog), (void*)DIALOG_LOAD_INSTRUMENT); + g_signal_connect_swapped(thing, "clicked", + G_CALLBACK(fileops_open_dialog), loadinstr); disableboxes[3] = thing = gtk_button_new_with_label(_("Save XI")); gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(fileops_open_dialog), (void*)DIALOG_SAVE_INSTRUMENT); + g_signal_connect_swapped(thing, "clicked", + G_CALLBACK(fileops_open_dialog), saveinstr); thing = gtk_vseparator_new(); gtk_box_pack_start(GTK_BOX(box), thing, FALSE, TRUE, 0); @@ -286,36 +454,61 @@ disableboxes[1] = box2 = gtk_vbox_new(TRUE, 2); gtk_box_pack_start(GTK_BOX(box), box2, TRUE, TRUE, 0); - gtk_widget_show(box2); box3 = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0); - gtk_widget_show(box3); + thing = gtk_label_new(_("Volume Fadeout")); + gtk_box_pack_start(GTK_BOX(box3),thing, FALSE, FALSE, 0); + setting_objs[0] = G_OBJECT(gtk_adjustment_new(0, 0, 0xfff, 1.0, 400.0, 0.0)); + instrument_page_adj[0] = GTK_ADJUSTMENT(setting_objs[0]); + thing = extspinbutton_new(instrument_page_adj[0], 0.0, 0, TRUE); + gtk_box_pack_end(GTK_BOX(box3),thing, FALSE, FALSE, 0); + thing = gtk_hscale_new(instrument_page_adj[0]); + gtk_scale_set_draw_value(GTK_SCALE(thing), FALSE); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + gtk_widget_show_all(box2); + tags[0] = g_signal_connect(instrument_page_adj[0], "value_changed", + G_CALLBACK(instrument_page_volfade_changed), NULL); - add_empty_hbox(box3); - thing = make_labelled_radio_group_box(_("Vibrato Type:"), vibtypelabels, instrument_editor_vibtype_w, instrument_editor_vibtype_changed); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - thing = gui_subs_create_slider(&instrument_page_sliders[0]); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); + thing = gtk_vseparator_new(); + gtk_box_pack_start(GTK_BOX(box), thing, FALSE, TRUE, 0); gtk_widget_show(thing); - add_empty_hbox(box3); + + disableboxes[4] = table = gtk_table_new(2, 2, TRUE); + gtk_table_set_row_spacings(GTK_TABLE(table), 2); + gtk_table_set_col_spacings(GTK_TABLE(table), 8); + gtk_box_pack_start(GTK_BOX(box), table, TRUE, TRUE, 0); box3 = gtk_hbox_new(FALSE, 4); - gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0); - gtk_widget_show(box3); + gtk_table_attach_defaults(GTK_TABLE(table), box3, 0, 1, 0, 1); - add_empty_hbox(box3); - thing = gui_subs_create_slider(&instrument_page_sliders[1]); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - thing = gui_subs_create_slider(&instrument_page_sliders[2]); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - thing = gui_subs_create_slider(&instrument_page_sliders[3]); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - add_empty_hbox(box3); + thing = gtk_label_new(_("Vibrato:")); + gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, FALSE, 0); + list_store = gtk_list_store_new(1, G_TYPE_STRING); + for (i = 0; vibtypelabels[i] != NULL; i++) { + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, 0, _(vibtypelabels[i]), -1); + } + instrument_editor_vibtype_w = thing = gui_combo_new(list_store); + setting_objs[4] = G_OBJECT(thing); + tags[4] = g_signal_connect(thing, "changed", G_CALLBACK(instrument_editor_vibtype_changed), NULL); + gtk_box_pack_end(GTK_BOX(box3), thing, FALSE, TRUE, 0); + thing = gtk_label_new(_("Type")); + gtk_box_pack_end(GTK_BOX(box3), thing, FALSE, FALSE, 0); + thing = gui_subs_create_slider_full(_("Speed"), 0, 0x3f, + instrument_page_vibspeed_changed, &instrument_page_adj[1], TRUE, &tags[1]); + gtk_table_attach_defaults(GTK_TABLE(table), thing, 1, 2, 0, 1); + setting_objs[1] = G_OBJECT(instrument_page_adj[1]); + + thing = gui_subs_create_slider_full(_("Depth"), 0, 0xf, + instrument_page_vibdepth_changed, &instrument_page_adj[2], TRUE, &tags[2]); + gtk_table_attach_defaults(GTK_TABLE(table), thing, 0, 1, 1, 2); + setting_objs[2] = G_OBJECT(instrument_page_adj[2]); + thing = gui_subs_create_slider_full(_("Sweep"), 0, 0xff, + instrument_page_vibsweep_changed, &instrument_page_adj[3], TRUE, &tags[3]); + gtk_table_attach_defaults(GTK_TABLE(table), thing, 1, 2, 1, 2); + gtk_widget_show_all(table); + setting_objs[3] = G_OBJECT(instrument_page_adj[3]); thing = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); @@ -335,29 +528,26 @@ gtk_widget_show(box); gtk_box_pack_start(GTK_BOX(box3), box, TRUE, TRUE, 0); - clavier = clavier_new(); + clavier = clavier_new(gui_settings.clavier_font); gtk_widget_show(clavier); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(box), clavier); - gtk_drawing_area_size (GTK_DRAWING_AREA (clavier), 96 * 7, 50); + gtk_widget_set_size_request(clavier, NUM_NOTES * 7, 50); - clavier_set_clavier_type(CLAVIER(clavier), CLAVIER_TYPE_SEQUENCER); clavier_set_range(CLAVIER(clavier), 0, 95); - clavier_set_show_middle_c(CLAVIER(clavier), FALSE); - clavier_set_show_transpose(CLAVIER(clavier), FALSE); - gtk_signal_connect (GTK_OBJECT (clavier), "clavierkey_press", - GTK_SIGNAL_FUNC (instrument_editor_clavierkey_press_event), - NULL); - gtk_signal_connect (GTK_OBJECT (clavier), "clavierkey_release", - GTK_SIGNAL_FUNC (instrument_editor_clavierkey_release_event), - NULL); - gtk_signal_connect (GTK_OBJECT (clavier), "clavierkey_enter", - GTK_SIGNAL_FUNC (instrument_editor_clavierkey_enter_event), - NULL); - gtk_signal_connect (GTK_OBJECT (clavier), "clavierkey_leave", - GTK_SIGNAL_FUNC (instrument_editor_clavierkey_leave_event), - NULL); + g_signal_connect(clavier, "clavierkey_press", + G_CALLBACK(instrument_editor_clavierkey_press_event), + NULL); + g_signal_connect(clavier, "clavierkey_release", + G_CALLBACK(instrument_editor_clavierkey_release_event), + NULL); + g_signal_connect(clavier, "clavierkey_enter", + G_CALLBACK(instrument_editor_clavierkey_enter_event), + NULL); + g_signal_connect(clavier, "clavierkey_leave", + G_CALLBACK(instrument_editor_clavierkey_leave_event), + NULL); box3 = gtk_vbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0); @@ -370,14 +560,14 @@ gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); gtk_box_pack_start(GTK_BOX(box3), frame, FALSE, TRUE, 0); gtk_widget_show(frame); box4 = gtk_vbox_new(FALSE, 2); gtk_widget_show(box4); - gtk_container_add (GTK_CONTAINER(frame), box4); - gtk_container_border_width(GTK_CONTAINER(box4), 4); + gtk_container_add(GTK_CONTAINER(frame), box4); + gtk_container_set_border_width(GTK_CONTAINER(box4), 4); curnote_label = thing = gtk_label_new(""); gtk_widget_show(thing); @@ -386,99 +576,157 @@ thing = gtk_button_new_with_label(_("Initialize")); gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC(instrument_editor_init_samplemap), NULL); + g_signal_connect(thing, "clicked", + G_CALLBACK(instrument_editor_init_samplemap), NULL); add_empty_vbox(box3); add_empty_vbox(mainbox); } -void -instrument_editor_copy_instrument (STInstrument *instr) +void instrument_editor_copy_instrument(STInstrument* instr) { - if (tmp_instrument == NULL) - tmp_instrument = calloc(1, sizeof(STInstrument)); + if (!alloc_instr(&tmp_instrument)) + return; st_copy_instrument(instr, tmp_instrument); } -void -instrument_editor_cut_instrument (STInstrument *instr) +void instrument_editor_cut_instrument(STInstrument* instr) { - instrument_editor_copy_instrument(instr); - st_clean_instrument(instr, NULL); + if (instrument_editor_check_and_log_instrument(instr, N_("Instrument cutting"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | HISTORY_EXTRA_FLAGS(2), 0)) { + instrument_editor_copy_instrument(instr); + st_clean_instrument(instr, NULL); + } } -void -instrument_editor_paste_instrument (STInstrument *instr) +void instrument_editor_paste_instrument(STInstrument* instr) { if (tmp_instrument == NULL) - return; - st_copy_instrument(tmp_instrument, instr); + return; + + if (instrument_editor_check_and_log_instrument(instr, N_("Instrument pasting"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | HISTORY_EXTRA_FLAGS(3), + MAX(st_get_instrument_size(instr), st_get_instrument_size(tmp_instrument)))) + st_copy_instrument(tmp_instrument, instr); } -void -instrument_editor_set_instrument (STInstrument *i) +void instrument_editor_set_instrument(STInstrument* i, const gint ins) { current_instrument = i; + current_instrument_number = ins; - instrument_editor_update(); + instrument_editor_update(FALSE); } STInstrument* -instrument_editor_get_instrument (void) +instrument_editor_get_instrument(void) { return current_instrument; } +void instrument_editor_xcopy_instruments(STInstrument* src_instr, + STInstrument* dst_instr, + gboolean xchg) +{ + if (xchg) { + /* Both instruments are in the module -- no need to arrange special + place to storing some of them */ + history_log_action(HISTORY_ACTION_POINTER_NOFREE, _("Instruments exchanging"), + HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | HISTORY_EXTRA_FLAGS(5), + instrument_total_undo, dst_instr, 0, src_instr); + st_copy_instrument(dst_instr, tmp_instr2); + } else { + if (!instrument_editor_check_and_log_instrument(dst_instr, + N_("Instrument copying"), HISTORY_FLAG_LOG_PAGE | HISTORY_FLAG_LOG_INS | HISTORY_EXTRA_FLAGS(4), + MAX(st_get_instrument_size(dst_instr), st_get_instrument_size(src_instr)))) + return; + } + + st_copy_instrument(src_instr, dst_instr); + if (xchg) + st_copy_instrument(tmp_instr2, src_instr); +} + gboolean -instrument_editor_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval, - gboolean pressed) +instrument_editor_handle_keys(int shift, + int ctrl, + int alt, + guint32 keyval, + gboolean pressed) { int i; - i = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); - if(i != -1 && KEYS_MEANING_TYPE(i) == KEYS_MEANING_NOTE) { - track_editor_do_the_note_key(i, pressed, keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); - return TRUE; + i = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt), -1); + if (i != -1 && KEYS_MEANING_TYPE(i) == KEYS_MEANING_NOTE) { + gboolean real_press = track_editor_do_the_note_key(i, pressed, keyval, + ENCODE_MODIFIERS(shift, ctrl, alt), TRUE); + if (real_press) + (pressed ? clavier_press : clavier_release) + (CLAVIER(clavier), i + 12 * gui_get_current_octave_value()); + return TRUE; } return FALSE; } -void -instrument_editor_update (void) +static gboolean +instrument_editor_update_idle_function(struct InstrumentEditor *ie) { - int o, n, m = xm_get_modified(); + gint n; + gboolean o = current_instrument != NULL && st_instrument_num_samples(current_instrument) > 0; - o = current_instrument != NULL && st_instrument_num_samples(current_instrument) > 0; - for(n = 0; n < 4; n++) { - gtk_widget_set_sensitive(disableboxes[n], o); - } + for (n = 0; n < ARRAY_SIZE(disableboxes); n++) + gtk_widget_set_sensitive(disableboxes[n], o); + + if (!o) { + envelope_box_set_envelope(ENVELOPE_BOX(volenv), NULL); + envelope_box_set_envelope(ENVELOPE_BOX(panenv), NULL); + clavier_set_key_labels(CLAVIER(clavier), NULL); + } else { + envelope_box_set_envelope(ENVELOPE_BOX(volenv), ¤t_instrument->vol_env); + envelope_box_set_envelope(ENVELOPE_BOX(panenv), ¤t_instrument->pan_env); - if(current_instrument) - gtk_entry_set_text(GTK_ENTRY(gui_curins_name), current_instrument->name); + gui_block_signals(setting_objs, tags, TRUE); + gtk_adjustment_set_value(instrument_page_adj[0], current_instrument->volfade); + gtk_adjustment_set_value(instrument_page_adj[1], current_instrument->vibrate); + gtk_adjustment_set_value(instrument_page_adj[2], current_instrument->vibdepth); + gtk_adjustment_set_value(instrument_page_adj[3], current_instrument->vibsweep); + gtk_combo_box_set_active(GTK_COMBO_BOX(instrument_editor_vibtype_w), current_instrument->vibtype); + gui_block_signals(setting_objs, tags, FALSE); - if(!o) { - envelope_box_set_envelope(ENVELOPE_BOX(volenv), NULL); - envelope_box_set_envelope(ENVELOPE_BOX(panenv), NULL); - clavier_set_key_labels(CLAVIER(clavier), NULL); - return; + clavier_set_key_labels(CLAVIER(clavier), current_instrument->samplemap); } - envelope_box_set_envelope(ENVELOPE_BOX(volenv), ¤t_instrument->vol_env); - envelope_box_set_envelope(ENVELOPE_BOX(panenv), ¤t_instrument->pan_env); + if (ie->full) + modinfo_update_instrument(current_instrument_number); - gui_subs_set_slider_value(&instrument_page_sliders[0], current_instrument->volfade); - gui_subs_set_slider_value(&instrument_page_sliders[1], current_instrument->vibrate); - gui_subs_set_slider_value(&instrument_page_sliders[2], current_instrument->vibdepth); - gui_subs_set_slider_value(&instrument_page_sliders[3], current_instrument->vibsweep); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(instrument_editor_vibtype_w[current_instrument->vibtype]), TRUE); + ie->idle_handler = 0; + return FALSE; +} - clavier_set_key_labels(CLAVIER(clavier), current_instrument->samplemap); +void +instrument_editor_update(gboolean full) +{ + static struct InstrumentEditor ie = {0}; - xm_set_modified(m); + ie.full = full; + + if (current_instrument){ + gui_block_instrname_entry(TRUE); /* Preventing callback when changing instrument name entry */ + gtk_entry_set_text(GTK_ENTRY(gui_curins_name), current_instrument->utf_name); + gui_block_instrname_entry(FALSE); + } + + if (!ie.idle_handler) { + ie.idle_handler = g_idle_add((GSourceFunc)instrument_editor_update_idle_function, + &ie); + g_assert(ie.idle_handler != 0); + } +} + +void +instrument_editor_update_clavier(const gchar* font) +{ + clavier_set_font(CLAVIER(clavier), font); } diff -Nru soundtracker-0.6.8/app/instrument-editor.h soundtracker-1.0.2~pre2/app/instrument-editor.h --- soundtracker-0.6.8/app/instrument-editor.h 2004-01-11 15:19:55.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/instrument-editor.h 2020-11-08 18:12:54.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - instrument editor (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,20 +26,29 @@ #include "xm.h" -void instrument_page_create (GtkNotebook *nb); -gboolean instrument_editor_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval, - gboolean pressed); - -void instrument_editor_set_instrument (STInstrument *); -STInstrument* instrument_editor_get_instrument (void); -void instrument_editor_update (void); /* instrument data has changed, redraw */ -void instrument_editor_clear_current_instrument (void); - -void instrument_editor_cut_instrument (STInstrument *instr); -void instrument_editor_copy_instrument (STInstrument *instr); -void instrument_editor_paste_instrument (STInstrument *instr); +void instrument_page_create(GtkNotebook* nb); +gboolean instrument_editor_handle_keys(int shift, + int ctrl, + int alt, + guint32 keyval, + gboolean pressed); + +void instrument_editor_set_instrument(STInstrument*, const gint ins); +STInstrument* instrument_editor_get_instrument(void); +void instrument_editor_update(gboolean full); /* instrument data has changed, redraw */ +gboolean instrument_editor_clear_current_instrument(void); +void instrument_editor_update_clavier(const gchar* font); + +void instrument_editor_cut_instrument(STInstrument* instr); +void instrument_editor_copy_instrument(STInstrument* instr); +void instrument_editor_paste_instrument(STInstrument* instr); +void instrument_editor_xcopy_instruments(STInstrument* src_instr, + STInstrument* dst_instr, + gboolean xchg); + +gboolean instrument_editor_check_and_log_instrument(STInstrument* instr, + const gchar* title, + const gint flags, + gsize i_size); #endif /* _INSTRUMENT_EDITOR_H */ diff -Nru soundtracker-0.6.8/app/keys.c soundtracker-1.0.2~pre2/app/keys.c --- soundtracker-0.6.8/app/keys.c 2004-01-04 16:01:50.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/keys.c 2021-02-01 20:01:20.000000000 +0000 @@ -6,7 +6,7 @@ * it's the solution I've come up with after nearly three years of * experimentation... * - * Copyright (C) 1997-2001 Michael Krause + * Copyright (C) 1997-2019 Michael Krause * Copyright (C) 2000 Fabian Giesen (Win32 stuff) * * This program is free software; you can redistribute it and/or modify @@ -28,173 +28,191 @@ #if !defined(_WIN32) -#include #include -#include +#include #include +#include -#include -#include #include "X11/Xlib.h" #include +#include +#include +#include -#include #include -#ifdef USE_GNOME -#include -#endif +#include +#include -#include "i18n.h" -#include "keys.h" +#include "gui-settings.h" #include "gui-subs.h" #include "gui.h" -#include "gui-settings.h" -#include "menubar.h" +#include "keys.h" #include "preferences.h" +#include "st-subs.h" + +static Display* x_display; -enum { BLACK, WHITE }; +enum { BLACK, + WHITE }; #define NONE_TEXT _("") +#define SECTION "keyboard" -static GtkWidget *configwindow = NULL, - *cw_clist, +static GtkWidget *cw_list, *cw_explabel, *cw_explabel2, *cw_combo, *cw_modtoggles[3], *cw_lb1, *cw_lb2, *cw_label3; +static GtkListStore* ls; static int cw_currentgroup = -1, - cw_currentkey = -1, - cw_combostrings = -1; + cw_currentkey = -1; typedef struct keys_key { - char *title; - char *explanation; - gboolean allkeys; - int meaning; + gchar* title; + gchar* explanation; + gint meaning; KeySym xkeysym; - int xkeycode; - int modifiers; + gint xkeycode; + gint hwcode; + guint modifiers; + gchar* local_title; } keys_key; static keys_key keys1[] = { - { "UC-0", NULL, 0, 12, 0, 0 }, - { "UC#0", NULL, 0, 13, 0, 0 }, - { "UD-0", NULL, 0, 14, 0, 0 }, - { "UD#0", NULL, 0, 15, 0, 0 }, - { "UE-0", NULL, 0, 16, 0, 0 }, - { "UF-0", NULL, 0, 17, 0, 0 }, - { "UF#0", NULL, 0, 18, 0, 0 }, - { "UG-0", NULL, 0, 19, 0, 0 }, - { "UG#0", NULL, 0, 20, 0, 0 }, - { "UA-0", NULL, 0, 21, 0, 0 }, - { "UA#0", NULL, 0, 22, 0, 0 }, - { "UH-0", NULL, 0, 23, 0, 0 }, - { "UC-1", NULL, 0, 24, 0, 0 }, - { "UC#1", NULL, 0, 25, 0, 0 }, - { "UD-1", NULL, 0, 26, 0, 0 }, - { "UD#1", NULL, 0, 27, 0, 0 }, - { "UE-1", NULL, 0, 28, 0, 0 }, - { "UF-1", NULL, 0, 29, 0, 0 }, - { "UF#1", NULL, 0, 30, 0, 0 }, - { "UG-1", NULL, 0, 31, 0, 0 }, + { "UC-0", NULL, 12, 0, 0, -1}, + { "UC#0", NULL, 13, 0, 0, -1 }, + { "UD-0", NULL, 14, 0, 0, -1 }, + { "UD#0", NULL, 15, 0, 0, -1 }, + { "UE-0", NULL, 16, 0, 0, -1 }, + { "UF-0", NULL, 17, 0, 0, -1 }, + { "UF#0", NULL, 18, 0, 0, -1 }, + { "UG-0", NULL, 19, 0, 0, -1 }, + { "UG#0", NULL, 20, 0, 0, -1 }, + { "UA-0", NULL, 21, 0, 0, -1 }, + { "UA#0", NULL, 22, 0, 0, -1 }, + { "UH-0", NULL, 23, 0, 0, -1 }, + { "UC-1", NULL, 24, 0, 0, -1 }, + { "UC#1", NULL, 25, 0, 0, -1 }, + { "UD-1", NULL, 26, 0, 0, -1 }, + { "UD#1", NULL, 27, 0, 0, -1 }, + { "UE-1", NULL, 28, 0, 0, -1 }, + { "UF-1", NULL, 29, 0, 0, -1 }, + { "UF#1", NULL, 30, 0, 0, -1 }, + { "UG-1", NULL, 31, 0, 0, -1 }, { NULL } }; static keys_key keys2[] = { - { "LC-0", NULL, 0, 0, 0, 0 }, - { "LC#0", NULL, 0, 1, 0, 0 }, - { "LD-0", NULL, 0, 2, 0, 0 }, - { "LD#0", NULL, 0, 3, 0, 0 }, - { "LE-0", NULL, 0, 4, 0, 0 }, - { "LF-0", NULL, 0, 5, 0, 0 }, - { "LF#0", NULL, 0, 6, 0, 0 }, - { "LG-0", NULL, 0, 7, 0, 0 }, - { "LG#0", NULL, 0, 8, 0, 0 }, - { "LA-0", NULL, 0, 9, 0, 0 }, - { "LA#0", NULL, 0, 10, 0, 0 }, - { "LH-0", NULL, 0, 11, 0, 0 }, - { "LC-1", NULL, 0, 12, 0, 0 }, - { "LC#1", NULL, 0, 13, 0, 0 }, - { "LD-1", NULL, 0, 14, 0, 0 }, - { "LD#1", NULL, 0, 15, 0, 0 }, - { "LE-1", NULL, 0, 16, 0, 0 }, + { "LC-0", NULL, 0, 0, 0, -1 }, + { "LC#0", NULL, 1, 0, 0, -1 }, + { "LD-0", NULL, 2, 0, 0, -1 }, + { "LD#0", NULL, 3, 0, 0, -1 }, + { "LE-0", NULL, 4, 0, 0, -1 }, + { "LF-0", NULL, 5, 0, 0, -1 }, + { "LF#0", NULL, 6, 0, 0, -1 }, + { "LG-0", NULL, 7, 0, 0, -1 }, + { "LG#0", NULL, 8, 0, 0, -1 }, + { "LA-0", NULL, 9, 0, 0, -1 }, + { "LA#0", NULL, 10, 0, 0, -1 }, + { "LH-0", NULL, 11, 0, 0, -1 }, + { "LC-1", NULL, 12, 0, 0, -1 }, + { "LC#1", NULL, 13, 0, 0, -1 }, + { "LD-1", NULL, 14, 0, 0, -1 }, + { "LD#1", NULL, 15, 0, 0, -1 }, + { "LE-1", NULL, 16, 0, 0, -1 }, { NULL } }; -static keys_key keys3[3+32+1] = { /* 3 fixed entries, +#define TYPE_FUNC KEYS_MEANING_TYPE_MAKE(KEYS_MEANING_FUNC) +static keys_key keys3[1 + KEY_LAST + 32 + 1] = { + /* KeyOff, KEY_LAST fixed entries, 32 dynamically generated ones (see keys_generate_channel_explanations()), 1 NULL terminator */ - { "KOFF", N_("The key that inserts the special keyoff note for FastTracker modules."), - 0, KEYS_MEANING_TYPE_MAKE(KEYS_MEANING_KEYOFF), 0, 0 }, - { "JMP+", N_("The key that increases \"jump\" value."), - 0, KEYS_MEANING_TYPE_MAKE(KEYS_MEANING_FUNC), 0, 0 }, - { "JMP-", N_("The key that decreases \"jump\" value."), - 0, KEYS_MEANING_TYPE_MAKE(KEYS_MEANING_FUNC) + 1, 0, 0 }, + { N_("KOFF"), N_("The key that inserts the special keyoff note for FastTracker modules"), + KEYS_MEANING_TYPE_MAKE(KEYS_MEANING_KEYOFF), 0, 0, -1, 0 }, + { N_("JMP+"), N_("The key that increases \"jump\" value"), + KEY_JMP_PLUS + TYPE_FUNC, '`', 0, -1, 0 }, + { N_("JMP-"), N_("The key that decreases \"jump\" value"), + KEY_JMP_MINUS + TYPE_FUNC, '~', 0, -1, ENCODE_MODIFIERS(1, 0, 0) }, + { N_("PlayMod"), N_("Play module"), + KEY_PLAY_SNG + TYPE_FUNC, GDK_Control_R, 0, -1, 0 }, + { N_("RecMod"), N_("Play module + recording"), + KEY_REC_SNG + TYPE_FUNC, GDK_Control_R, 0, -1, ENCODE_MODIFIERS(1, 0, 0) }, + { N_("PlayPat"), N_("Play pattern"), + KEY_PLAY_PAT + TYPE_FUNC, GDK_Alt_R, 0, -1, 0 }, + { N_("RecPat"), N_("Play pattern + recording"), + KEY_REC_PAT + TYPE_FUNC, GDK_Meta_R, 0, -1, ENCODE_MODIFIERS(1, 0, 0) }, + { N_("PlayCur"), N_("Play module from cursor"), + KEY_PLAY_CUR + TYPE_FUNC, GDK_Mode_switch, 0, -1, 0 }, + { N_("RecCur"), N_("Play module from cursor + recording"), + KEY_REC_CUR + TYPE_FUNC, GDK_Multi_key, 0, -1, ENCODE_MODIFIERS(1, 0, 0) }, + { N_("PlayRow"), N_("Play current pattern row"), + KEY_PLAY_ROW + TYPE_FUNC, GDK_Menu, 0, -1, 0 }, + { N_("PlayBlk"), N_("Play selected block"), + KEY_PLAY_BLK + TYPE_FUNC, GDK_Menu, 0, -1, ENCODE_MODIFIERS(1, 0, 0) }, + { N_("SmpTgle"), N_("Toggle sampling"), + KEY_SMP_TOGGLE + TYPE_FUNC, GDK_Return, 0, -1, 0 } }; typedef struct keys_group { - const char *title; - const char *explanation; - keys_key *keys; - keys_key *keys_edit; + const char* title; + const char* explanation; + keys_key* keys; + keys_key* keys_edit; } keys_group; static keys_group groups[] = { { N_("Upper Octave Keys..."), - N_("These are the keys on the upper half of the keyboard. " - "The c key is normally the key to the right of the TAB key. " - "The rest of the keys should be ordered in a piano keyboard fashion, including " - "the number keys row above."), - keys1 - }, + N_("These are the keys on the upper half of the keyboard. " + "The c key is normally the key to the right of the TAB key. " + "The rest of the keys should be ordered in a piano keyboard fashion, including " + "the number keys row above."), + keys1 }, { N_("Lower Octave Keys..."), - N_("These are the keys on the lower half of the keyboard. " - "The c key is normally the first character key to the right of the left Shift key. " - "The rest of the keys should be ordered in a piano keyboard fashion, including " - "the row above."), - keys2 - }, + N_("These are the keys on the lower half of the keyboard. " + "The c key is normally the first character key to the right of the left Shift key. " + "The rest of the keys should be ordered in a piano keyboard fashion, including " + "the row above."), + keys2 }, { N_("Other Keys..."), - N_("Various other keys"), - keys3 - } + N_("Various other keys"), + keys3 } }; -#define NUM_KEY_GROUPS (sizeof(groups) / sizeof(groups[0])) +#define NUM_KEY_GROUPS ARRAY_SIZE(groups) typedef struct xkey { - gchar *xname; + gchar* xname; KeySym xkeysym; } xkey; -static xkey *xkeymap; +static xkey* xkeymap; static int xkeymaplen; static int symspercode; static int xmin; -// The first list does not contain modifier keys, the second one does! -static GList *xkeys[2]; +static gchar** keyname; static int capturing = 0, capturing_all; static gint -keys_keys_array_length (keys_key *keys) +keys_keys_array_length(keys_key* keys) { int i = 0; - while((keys++)->title) - i++; + while ((keys++)->title) + i++; return i; } -static keys_key * -keys_duplicate_keys_array (keys_key *keys) +static keys_key* +keys_duplicate_keys_array(keys_key* keys) { int l = keys_keys_array_length(keys); - keys_key *copy; + keys_key* copy; copy = g_new(keys_key, l + 1); memcpy(copy, keys, l * sizeof(keys_key)); @@ -204,128 +222,167 @@ } static void -keys_initialize_editing (void) +keys_initialize_editing(void) { int i; - for(i = 0; i < NUM_KEY_GROUPS; i++) { - groups[i].keys_edit = keys_duplicate_keys_array(groups[i].keys); - g_assert(groups[i].keys_edit != NULL); + for (i = 0; i < NUM_KEY_GROUPS; i++) { + groups[i].keys_edit = keys_duplicate_keys_array(groups[i].keys); + g_assert(groups[i].keys_edit != NULL); } } static void -keys_finish_editing (void) +keys_finish_editing(void) { int i; - for(i = 0; i < NUM_KEY_GROUPS; i++) { - g_free(groups[i].keys_edit); - groups[i].keys_edit = NULL; + for (i = 0; i < NUM_KEY_GROUPS; i++) { + g_free(groups[i].keys_edit); + groups[i].keys_edit = NULL; } } static void -keys_apply (void) +keys_apply(void) { int i; - for(i = 0; i < NUM_KEY_GROUPS; i++) { - g_assert(groups[i].keys_edit != NULL); - g_assert(groups[i].keys != NULL); - memcpy(groups[i].keys, groups[i].keys_edit, keys_keys_array_length(groups[i].keys) * sizeof(keys_key)); + for (i = 0; i < NUM_KEY_GROUPS; i++) { + g_assert(groups[i].keys_edit != NULL); + g_assert(groups[i].keys != NULL); + memcpy(groups[i].keys, groups[i].keys_edit, keys_keys_array_length(groups[i].keys) * sizeof(keys_key)); } } static void -keys_cancel (void) +keys_lb_switch(int enablebuttons) { - gtk_widget_destroy(configwindow); - configwindow = NULL; - keys_finish_editing(); + if (enablebuttons) { + gtk_widget_show(cw_lb1); + gtk_widget_show(cw_lb2); + gtk_widget_hide(cw_label3); + } else { + gtk_widget_hide(cw_lb1); + gtk_widget_hide(cw_lb2); + gtk_widget_show(cw_label3); + } } static void -keys_ok (void) +stop_learning(void) { - keys_apply(); - keys_cancel(); + if (capturing) { + capturing = capturing_all = 0; + keys_lb_switch(1); + } } -static gboolean -keys_encode_assignment (gchar *string, - int modifiers, - int xkeysym) +static void +keys_response(GtkWidget* dialog, gint response, gpointer data) { - int k; + stop_learning(); - *string = 0; + switch (response) { + case GTK_RESPONSE_APPLY: + keys_apply(); + break; + case GTK_RESPONSE_OK: + keys_apply(); + default: + gtk_widget_hide(dialog); + keys_finish_editing(); + break; + } +} - if(xkeysym != 0) { - if(modifiers & 1) - strcat(string, "Shift+"); - if(modifiers & 2) - strcat(string, "Ctrl+"); - if(modifiers & 4) - strcat(string, "Meta+"); - - for(k = 0; k < xkeymaplen; k++) { - if(xkeymap[k].xname && xkeymap[k].xkeysym == xkeysym) { - strcat(string, xkeymap[k].xname); - return TRUE; - } - } +static gboolean +keys_encode_assignment(gchar** line, + guint modifiers, + gint xkeysym, + gint hwcode) +{ + if (xkeysym != 0) { + guint k; + + for (k = 0; k < xkeymaplen; k++) { + if (xkeymap[k].xname && xkeymap[k].xkeysym == xkeysym) { + gchar* newline = g_strdup_printf("%s%s%s%s", + modifiers & 1 ? "Shift+" : "", + modifiers & 2 ? "Ctrl+" : "", + modifiers & 4 ? "Meta+" : "", + xkeymap[k].xname); + if (hwcode == -1) + *line = newline; + else { + *line = g_strdup_printf("%s %d", newline, hwcode); + g_free(newline); + } + return TRUE; + } + } } - strcat(string, NONE_TEXT); + *line = g_strdup_printf(NONE_TEXT); return FALSE; } -static int -keys_decode_assignment (gchar *code, - int *keysym, - int *keycode, - int *mod) +static gboolean +keys_decode_assignment(gchar* code, + KeySym* keysym, + gint* keycode, + guint* mod, + gint* hwcode) { int k; + gchar** name_hwcode; + gboolean retcode = FALSE; // Decode modifiers from assignment string *mod = 0; - while(1) { - if(!strncasecmp("shift+", code, 6)) { - code += 6; - *mod |= 1; - } else if(!strncasecmp("ctrl+", code, 5)) { - code += 5; - *mod |= 2; - } else if(!strncasecmp("meta+", code, 5)) { - code += 5; - *mod |= 4; - } else { - break; - } + while (1) { + if (!strncasecmp("shift+", code, 6)) { + code += 6; + *mod |= 1; + } else if (!strncasecmp("ctrl+", code, 5)) { + code += 5; + *mod |= 2; + } else if (!strncasecmp("meta+", code, 5)) { + code += 5; + *mod |= 4; + } else { + break; + } } + name_hwcode = g_strsplit(code, " ", 2); + // Search for X key description and return appropriate KeySym - for(k = 0; k < xkeymaplen; k++) { - if(xkeymap[k].xname && !strcmp(xkeymap[k].xname, code)) { - *keycode = xmin + k / symspercode; - *keysym = xkeymap[k].xkeysym; - return 1; - } + for (k = 0; k < xkeymaplen; k++) { + if (xkeymap[k].xname && !strcmp(xkeymap[k].xname, name_hwcode[0])) { + *keycode = xmin + k / symspercode; + *keysym = xkeymap[k].xkeysym; + if (name_hwcode[1] != NULL) + *hwcode = atoi(name_hwcode[1]); + retcode = TRUE; + break; + } } - return 0; + g_strfreev(name_hwcode); + return retcode; } static void -keys_key_group_changed (void *a, - void *b) +keys_key_group_changed(GtkComboBox* w) { - unsigned n = GPOINTER_TO_INT(b); - keys_key *kpt; - gchar string[128]; - gchar * insertbuf[2] = { NULL, string }; + GtkListStore* list_store = GUI_GET_LIST_STORE(cw_list); + GtkTreeIter iter; + GtkTreeModel* model; + + guint n = gtk_combo_box_get_active(w); + keys_key* kpt; + gchar* line; g_assert(n < NUM_KEY_GROUPS); cw_currentgroup = -1; @@ -333,160 +390,170 @@ // Set explanation gtk_label_set_text(GTK_LABEL(cw_explabel), gettext(groups[n].explanation)); - gtk_clist_clear(GTK_CLIST(cw_clist)); - gtk_clist_freeze(GTK_CLIST(cw_clist)); - for(kpt = groups[n].keys_edit; kpt->title; kpt++) { - insertbuf[0] = (gchar*)gettext(kpt->title); - keys_encode_assignment(string, kpt->modifiers, kpt->xkeysym); - gtk_clist_append(GTK_CLIST(cw_clist), insertbuf); + model = gui_list_freeze(cw_list); + gui_list_clear_with_model(model); + for (kpt = groups[n].keys_edit; kpt->title; kpt++) { + keys_encode_assignment(&line, kpt->modifiers, kpt->xkeysym, -1); + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, 0, + kpt->local_title ? kpt->local_title : _(kpt->title), + 1, line, -1); + g_free(line); } - gtk_clist_thaw(GTK_CLIST(cw_clist)); + gui_list_thaw(cw_list, model); cw_currentgroup = n; - gtk_clist_select_row(GTK_CLIST(cw_clist), 0, 0); + gui_list_select(cw_list, 0, FALSE, 0.0); } static void -keys_clist_select (GtkCList *list, - gint row, - gint column) +keys_list_select(GtkTreeSelection* sel) { - gchar *code; - int mod, i, h; - - if(cw_currentgroup == -1) - return; - - cw_currentkey = -1; - - // Set explanation - gtk_label_set_text(GTK_LABEL(cw_explabel2), gettext(groups[cw_currentgroup].keys_edit[row].explanation)); + GtkTreeModel* mdl; + GtkTreeIter iter; + gchar* str; + gint row; + + static gboolean needs_set = TRUE; + + stop_learning(); + + if (gtk_tree_selection_get_selected(sel, &mdl, &iter)) { + guint code, h; + gchar* active = NULL; + int mod, i; + + row = atoi(str = gtk_tree_model_get_string_from_iter(mdl, &iter)); + g_free(str); + + if (cw_currentgroup == -1) + return; + + cw_currentkey = -1; + + // Set explanation + gtk_label_set_text(GTK_LABEL(cw_explabel2), gettext(groups[cw_currentgroup].keys_edit[row].explanation)); + + // Find active combo box entry + code = 0; + h = groups[cw_currentgroup].keys_edit[row].xkeysym; + for (i = 0; h != 0 && i < xkeymaplen; i++) { + if (xkeymap[i].xkeysym == h) { + active = xkeymap[i].xname; + break; + } + } + + // Set combo box list + for (i = 0; i <= xkeymaplen && keyname[i]; i++) { + if (needs_set) { + gtk_list_store_append(ls, &iter); + gtk_list_store_set(ls, &iter, 0, keyname[i], -1); + } + if (active && !strcmp(active, keyname[i])) + code = i; + } + + if (needs_set) + needs_set = FALSE; + + gtk_combo_box_set_active(GTK_COMBO_BOX(cw_combo), code); + + // Set modifier toggles + mod = groups[cw_currentgroup].keys_edit[row].modifiers; + for (i = 0; i <= 2; i++) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cw_modtoggles[i]), mod & (1 << i)); + } - // Set combo box list - if(cw_combostrings != (0)) { - cw_combostrings = (0); - gtk_combo_set_popdown_strings(GTK_COMBO(cw_combo), xkeys[cw_combostrings]); - } - - // Set modifier toggles - mod = groups[cw_currentgroup].keys_edit[row].modifiers; - for(i = 0; i <= 2; i++) { - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(cw_modtoggles[i]), mod & (1 << i)); - } - - // Set combo box entry - code = NONE_TEXT; - h = groups[cw_currentgroup].keys_edit[row].xkeysym; - for(i = 0; h != 0 && i < xkeymaplen; i++) { - if(xkeymap[i].xkeysym == h) { - code = xkeymap[i].xname; - break; - } - } - gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(cw_combo)->entry), code); - - cw_currentkey = row; + cw_currentkey = row; + } } static void -keys_assignment_changed (void) +keys_assignment_changed(void) { - gchar string[128] = ""; + gchar* line; int i, keysym; - if(cw_currentgroup == -1 || cw_currentkey == -1) - return; + if (cw_currentgroup == -1 || cw_currentkey == -1) + return; groups[cw_currentgroup].keys_edit[cw_currentkey].modifiers = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cw_modtoggles[0])) - + 2 * gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cw_modtoggles[1])) - + 4 * gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cw_modtoggles[2])); + + 2 * gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cw_modtoggles[1])) + + 4 * gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cw_modtoggles[2])); keysym = 0; - for(i = 0; i < xkeymaplen; i++) { - if(xkeymap[i].xname && !strcmp(xkeymap[i].xname, gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(cw_combo)->entry)))) { - keysym = xkeymap[i].xkeysym; - break; - } + for (i = 0; i < xkeymaplen; i++) { + if (xkeymap[i].xname && !strcmp(xkeymap[i].xname, keyname[gtk_combo_box_get_active(GTK_COMBO_BOX(cw_combo))])) { + keysym = xkeymap[i].xkeysym; + break; + } } groups[cw_currentgroup].keys_edit[cw_currentkey].xkeysym = keysym; - keys_encode_assignment(string, - groups[cw_currentgroup].keys_edit[cw_currentkey].modifiers, - keysym); - gtk_clist_set_text(GTK_CLIST(cw_clist), cw_currentkey, 1, string); -} - -static void -keys_lb_switch (int enablebuttons) -{ - if(enablebuttons) { - gtk_widget_show(cw_lb1); - gtk_widget_show(cw_lb2); - gtk_widget_hide(cw_label3); - } else { - gtk_widget_hide(cw_lb1); - gtk_widget_hide(cw_lb2); - gtk_widget_show(cw_label3); - } + keys_encode_assignment(&line, + groups[cw_currentgroup].keys_edit[cw_currentkey].modifiers, + keysym, -1); + gui_string_list_set_text(cw_list, cw_currentkey, 1, line); + g_free(line); } -static int -keys_buttonevent (GtkWidget *widget, - GdkEventKey *event) +static inline gboolean +is_modifier_key(int keysym) { - if(capturing) { - capturing = capturing_all = 0; - keys_lb_switch(1); - } - return 1; + /* Regard only left group of modifiers. Hint: all codes from the right group are even */ + return IsModifierKey(keysym) && (keysym & 1); } -static int -keys_keyevent (GtkWidget *widget, - GdkEventKey *event) +static gboolean +keys_keyevent(GtkWidget* widget, + GdkEventKey* event) { int keysym = event->keyval; - int mod; - gchar string[128]; - if(capturing && !IsModifierKey(keysym)) { - mod = ((event->state & GDK_SHIFT_MASK) != 0) - + 2 * ((event->state & GDK_CONTROL_MASK) != 0) - + 4 * ((event->state & GDK_MOD1_MASK) != 0); - - /* If this doesn't succeed, the keymap contains logical errors */ - g_assert(keys_encode_assignment(string, mod, keysym)); - - groups[cw_currentgroup].keys_edit[cw_currentkey].xkeysym = keysym; - groups[cw_currentgroup].keys_edit[cw_currentkey].modifiers = mod; - - gtk_clist_set_text(GTK_CLIST(cw_clist), cw_currentkey, 1, string); - - if(capturing_all) { - int nextkey = cw_currentkey + 1; - if(groups[cw_currentgroup].keys_edit[nextkey].title) { - gtk_clist_select_row(GTK_CLIST(cw_clist), nextkey, 0); - gtk_clist_moveto(GTK_CLIST(cw_clist), nextkey, 0, 0.5, 0.0); - } else { - keys_clist_select(GTK_CLIST(cw_clist), cw_currentkey, 0); - capturing = capturing_all = 0; - keys_lb_switch(1); - } - } else { - keys_clist_select(GTK_CLIST(cw_clist), cw_currentkey, 0); - capturing = capturing_all = 0; - keys_lb_switch(1); - } + if (capturing && !is_modifier_key(keysym)) { + int mod; + gchar* line; + + mod = ((event->state & GDK_SHIFT_MASK) != 0) + + 2 * ((event->state & GDK_CONTROL_MASK) != 0) + + 4 * ((event->state & GDK_MOD1_MASK) != 0); + + /* If this doesn't succeed, the keymap contains logical errors */ + g_assert(keys_encode_assignment(&line, mod, keysym, -1)); + + groups[cw_currentgroup].keys_edit[cw_currentkey].xkeysym = keysym; + groups[cw_currentgroup].keys_edit[cw_currentkey].hwcode = event->hardware_keycode; + groups[cw_currentgroup].keys_edit[cw_currentkey].modifiers = mod; + + gui_string_list_set_text(cw_list, cw_currentkey, 1, line); + g_free(line); + + if (capturing_all) { + int nextkey = cw_currentkey + 1; + if (groups[cw_currentgroup].keys_edit[nextkey].title) { + gui_list_select(cw_list, nextkey, TRUE, 0.5); + } else { + keys_list_select(gtk_tree_view_get_selection(GTK_TREE_VIEW(cw_list))); + capturing = capturing_all = 0; + keys_lb_switch(1); + } + } else { + keys_list_select(gtk_tree_view_get_selection(GTK_TREE_VIEW(cw_list))); + capturing = capturing_all = 0; + keys_lb_switch(1); + } - gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_press_event"); + g_signal_stop_emission_by_name(G_OBJECT(widget), "key_press_event"); + return TRUE; } - return 1; + return FALSE; } static void -keys_learn_key_clicked (void) +keys_learn_key_clicked(void) { capturing = 1; capturing_all = 0; @@ -494,387 +561,276 @@ } static void -keys_learn_all_keys_clicked (void) +keys_learn_all_keys_clicked(void) { capturing = 1; capturing_all = 1; - gtk_clist_select_row(GTK_CLIST(cw_clist), 0, 0); - gtk_clist_moveto(GTK_CLIST(cw_clist), 0, 0, 0.5, 0.0); + gui_list_select(cw_list, 0, TRUE, 0.5); keys_lb_switch(0); } -void -keys_dialog (void) +void keys_dialog(void) { - GtkWidget *mainbox, *box1, *box2, *box3, *box4, *thing, *frame, *hbox; - OptionMenuItem menu1[NUM_KEY_GROUPS]; + static GtkWidget* configwindow = NULL; + + GtkWidget *mainbox, *box1, *box2, *box3, *box4, *thing, *frame, *gc; int i; - gchar *listtitles[2] = { - _("Function"), - _("Assignment") + const gchar* listtitles[2] = { + N_("Function"), + N_("Assignment") }; - if(configwindow != NULL) { - gdk_window_raise(configwindow->window); - return; - } - -#ifdef USE_GNOME - configwindow = gnome_app_new("SoundTracker", _("Keyboard Configuration")); -#else - configwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(configwindow), _("Keyboard Configuration")); -#endif - gtk_signal_connect (GTK_OBJECT (configwindow), "delete_event", - GTK_SIGNAL_FUNC (keys_cancel), NULL); - - mainbox = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(mainbox), 4); -#ifdef USE_GNOME - gnome_app_set_contents(GNOME_APP(configwindow), mainbox); -#else - gtk_container_add(GTK_CONTAINER(configwindow), mainbox); -#endif - gtk_widget_show(mainbox); + if (configwindow != NULL) { + gtk_window_present(GTK_WINDOW(configwindow)); + keys_initialize_editing(); + return; + } + + configwindow = gtk_dialog_new_with_buttons(_("Keyboard Configuration"), GTK_WINDOW(mainwindow), 0, + GTK_STOCK_OK, GTK_RESPONSE_OK, + GTK_STOCK_APPLY, GTK_RESPONSE_APPLY, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); + gui_dialog_adjust(configwindow, GTK_RESPONSE_OK); + gui_dialog_connect(configwindow, G_CALLBACK(keys_response)); + + mainbox = gtk_dialog_get_content_area(GTK_DIALOG(configwindow)); keys_initialize_editing(); capturing = 0; capturing_all = 0; + ls = gtk_list_store_new(1, G_TYPE_STRING); + // Key Group Selector - for(i = 0; i < NUM_KEY_GROUPS; i++) { - menu1[i].name = gettext(groups[i].title); - menu1[i].func = keys_key_group_changed; - } - thing = gui_build_option_menu(menu1, NUM_KEY_GROUPS, 0); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 0); + for (i = 0; i < NUM_KEY_GROUPS; i++) { + GtkTreeIter iter; + gtk_list_store_append(ls, &iter); + gtk_list_store_set(ls, &iter, 0, _(groups[i].title), -1); + } + gc = gui_combo_new(ls); + gtk_box_pack_start(GTK_BOX(mainbox), gc, FALSE, FALSE, 0); + gtk_combo_box_set_active(GTK_COMBO_BOX(gc), 0); + g_signal_connect(gc, "changed", + G_CALLBACK(keys_key_group_changed), NULL); + gtk_widget_show(gc); box1 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box1); - gtk_box_pack_start(GTK_BOX(mainbox), box1, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(mainbox), box1, TRUE, TRUE, 4); // List at the left side of the window - thing = gui_clist_in_scrolled_window(2, listtitles, box1); - gtk_clist_set_selection_mode(GTK_CLIST(thing), GTK_SELECTION_BROWSE); - gtk_clist_column_titles_passive(GTK_CLIST(thing)); - gtk_clist_set_column_justification(GTK_CLIST(thing), 0, GTK_JUSTIFY_LEFT); - gtk_clist_set_column_justification(GTK_CLIST(thing), 1, GTK_JUSTIFY_LEFT); - gtk_widget_set_usize(thing, 200, 50); - gtk_signal_connect_after(GTK_OBJECT(thing), "select_row", - GTK_SIGNAL_FUNC(keys_clist_select), NULL); - cw_clist = thing; - + thing = gui_stringlist_in_scrolled_window(2, listtitles, box1, FALSE); + gtk_widget_set_size_request(thing, 200, 50); + gui_list_handle_selection(thing, G_CALLBACK(keys_list_select), NULL); + cw_list = thing; box2 = gtk_vbox_new(FALSE, 2); - gtk_widget_show(box2); gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0); // Explaining Text frame = gtk_frame_new(_("Key Group Explanation")); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0); box4 = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(box4), 4); + gtk_container_set_border_width(GTK_CONTAINER(box4), 4); gtk_container_add(GTK_CONTAINER(frame), box4); - gtk_widget_show(box4); cw_explabel = gtk_label_new(""); - gtk_widget_show(cw_explabel); gtk_label_set_justify(GTK_LABEL(cw_explabel), GTK_JUSTIFY_FILL); gtk_label_set_line_wrap(GTK_LABEL(cw_explabel), TRUE); gtk_box_pack_start(GTK_BOX(box4), cw_explabel, TRUE, TRUE, 0); - // Explaining Text frame = gtk_frame_new(_("Key Explanation")); - gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(box2), frame, TRUE, TRUE, 0); box4 = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(box4), 4); + gtk_container_set_border_width(GTK_CONTAINER(box4), 4); gtk_container_add(GTK_CONTAINER(frame), box4); - gtk_widget_show(box4); cw_explabel2 = gtk_label_new(""); - gtk_widget_show(cw_explabel2); gtk_label_set_justify(GTK_LABEL(cw_explabel2), GTK_JUSTIFY_FILL); gtk_label_set_line_wrap(GTK_LABEL(cw_explabel2), TRUE); gtk_box_pack_start(GTK_BOX(box4), cw_explabel2, TRUE, TRUE, 0); - // Key Selection Combo Box - cw_combo = gtk_combo_new(); - cw_combostrings = -1; - gtk_widget_show(cw_combo); - gtk_box_pack_start(GTK_BOX(box2), cw_combo, FALSE, FALSE, 0); - gtk_combo_set_case_sensitive(GTK_COMBO(cw_combo), TRUE); - gtk_combo_set_value_in_list(GTK_COMBO(cw_combo), TRUE, TRUE); - gtk_signal_connect(GTK_OBJECT(GTK_COMBO(cw_combo)->entry), "changed", - GTK_SIGNAL_FUNC(keys_assignment_changed), NULL); + ls = gtk_list_store_new(1, G_TYPE_STRING); + cw_combo = gui_combo_new(ls); + /* To set appropriate style property */ + gtk_widget_set_name(cw_combo, "keyconfig_combo"); + gtk_box_pack_start(GTK_BOX(box2), cw_combo, FALSE, FALSE, 4); + g_signal_connect(cw_combo, "changed", + G_CALLBACK(keys_assignment_changed), NULL); // Modifier Group box3 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box3); gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, FALSE, 0); thing = gtk_label_new(_("Modifiers:")); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, FALSE, 0); - add_empty_hbox(box3); - - thing = cw_modtoggles[0] = gtk_check_button_new_with_label("Shift"); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(keys_assignment_changed), NULL); + thing = cw_modtoggles[2] = gtk_check_button_new_with_label("Meta"); + gtk_box_pack_end(GTK_BOX(box3), thing, FALSE, FALSE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(keys_assignment_changed), NULL); thing = cw_modtoggles[1] = gtk_check_button_new_with_label("Ctrl"); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(keys_assignment_changed), NULL); - - thing = cw_modtoggles[2] = gtk_check_button_new_with_label("Meta"); - gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(keys_assignment_changed), NULL); + gtk_box_pack_end(GTK_BOX(box3), thing, FALSE, FALSE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(keys_assignment_changed), NULL); + thing = cw_modtoggles[0] = gtk_check_button_new_with_label("Shift"); + gtk_box_pack_end(GTK_BOX(box3), thing, FALSE, FALSE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(keys_assignment_changed), NULL); // Learn-Buttons cw_lb1 = thing = gtk_button_new_with_label(_("Learn selected key")); - gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC(keys_learn_key_clicked), NULL); + g_signal_connect(thing, "clicked", + G_CALLBACK(keys_learn_key_clicked), NULL); cw_lb2 = thing = gtk_button_new_with_label(_("Learn all keys")); - gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC(keys_learn_all_keys_clicked), NULL); + g_signal_connect(thing, "clicked", + G_CALLBACK(keys_learn_all_keys_clicked), NULL); + + thing = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 4); + + gtk_widget_show_all(mainbox); cw_label3 = gtk_label_new(_("Please press the desired key combination!\nClick into left list to cancel")); gtk_label_set_justify(GTK_LABEL(cw_label3), GTK_JUSTIFY_CENTER); gtk_box_pack_start(GTK_BOX(box2), cw_label3, TRUE, TRUE, 0); + keys_key_group_changed(GTK_COMBO_BOX(gc)); + keys_list_select(gtk_tree_view_get_selection(GTK_TREE_VIEW(cw_list))); - keys_key_group_changed(NULL, (void*)0); - keys_clist_select(GTK_CLIST(cw_clist), 0, 0); - - gtk_signal_connect(GTK_OBJECT(configwindow), "key_press_event", - GTK_SIGNAL_FUNC(keys_keyevent), NULL); - gtk_signal_connect(GTK_OBJECT(configwindow), "button_press_event", - GTK_SIGNAL_FUNC(keys_buttonevent), NULL); - - - /* The button area */ - thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - - hbox = gtk_hbutton_box_new (); - gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbox), 4); - gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END); -// gtk_button_box_set_child_ipadding (GTK_BUTTON_BOX(hbox), 30, 0); - gtk_box_pack_start (GTK_BOX (mainbox), hbox, - FALSE, FALSE, 0); - gtk_widget_show (hbox); - -#ifdef USE_GNOME - thing = gnome_stock_button (GNOME_STOCK_BUTTON_OK); -#else - thing = gtk_button_new_with_label (_ ("Ok")); -#endif - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC (keys_ok), NULL); - gtk_box_pack_start (GTK_BOX (hbox), thing, FALSE, FALSE, 0); - gtk_widget_show (thing); - -#ifdef USE_GNOME - thing = gnome_stock_button (GNOME_STOCK_BUTTON_APPLY); -#else - thing = gtk_button_new_with_label (_ ("Apply")); -#endif - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC (keys_apply), NULL); - gtk_box_pack_start (GTK_BOX (hbox), thing, FALSE, FALSE, 0); - gtk_widget_show (thing); - -#ifdef USE_GNOME - thing = gnome_stock_button (GNOME_STOCK_BUTTON_CANCEL); -#else - thing = gtk_button_new_with_label (_ ("Cancel")); -#endif - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC (keys_cancel), NULL); - gtk_box_pack_start (GTK_BOX (hbox), thing, FALSE, FALSE, 0); - gtk_widget_show (thing); + g_signal_connect(configwindow, "key_press_event", + G_CALLBACK(keys_keyevent), NULL); - gtk_widget_show (configwindow); + gtk_widget_show(configwindow); } static void -chop (gchar *str) -{ - str[strlen(str)-1] = 0; -} - -static int -keys_load_config (void) +keys_load_config(void) { - char buf[256]; - FILE *f; - prefs_node *p; - int r = 0; - int g; - keys_key *k; - int keysym, keycode, mod; - - p = prefs_open_read("keyboard"); - if(!p) { - return 0; - } - - f = prefs_get_file_pointer(p); - - // Oh, oh, oh my god... goto is sooo evil :) - while(!feof(f)) { - clearerr(f); - if(!fgets(buf, 256, f)) { - if(ferror(f)) { - goto err; - } else break; - } - chop(buf); - for(g = 0; g < NUM_KEY_GROUPS; g++) { - for(k = groups[g].keys; k->title; k++) { - if(!strcmp(k->title, buf)) { - if(!fgets(buf, 256, f)) - goto err; - chop(buf); - if(keys_decode_assignment(buf, &keysym, &keycode, &mod)) { - k->xkeycode = keycode; - k->xkeysym = keysym; - k->modifiers = mod; - } else { - fprintf(stderr, "*** Can't find key '%s'\n", buf); - } - goto break2; - } - } - } - gnome_warning_dialog(_("The keyboard configuration file is defective.\nPlease use the Keyboard Configuration dialog.")); - return 0; - break2: - continue; /* nonsense, but the easiest way to avoid gcc 3.2+ warnings */ - } - r = 1; - - err: - prefs_close(p); - return r; -} - -int -keys_save_config (void) -{ - char buf[256]; - FILE *f; - prefs_node *p; - int g; - keys_key *k; - - p = prefs_open_write("keyboard"); - if(!p) { - return 0; - } - - f = prefs_get_file_pointer(p); - - for(g = 0; g < NUM_KEY_GROUPS; g++) { - for(k = groups[g].keys; k->title; k++) { - if(k->xkeysym != 0) { - keys_encode_assignment(buf, k->modifiers, k->xkeysym); - fprintf(f, "%s\n%s\n", k->title, buf); - } - } + gchar **titles = NULL, **values = NULL; + gsize length, i; + guint g; + keys_key* k; + gboolean processed; + + length = prefs_get_pairs(SECTION, &titles, &values); + for (i = 0; i < length; i++) { + processed = FALSE; + for (g = 0; g < NUM_KEY_GROUPS && !processed; g++) { + for (k = groups[g].keys; k->title; k++) { + if (!strcmp(k->title, titles[i])) { + if (!keys_decode_assignment(values[i], + &k->xkeysym, &k->xkeycode, &k->modifiers, &k->hwcode)) { + fprintf(stderr, "*** Can't find key '%s'; removed\n", values[i]); + prefs_remove_key(SECTION, titles[i]); + } + processed = TRUE; + break; + } + } + } + /* Leave keys with unknown functions as is, maybe this config is sent us from future :-) */ + } + + g_strfreev(titles); + g_strfreev(values); + return; +} + +void keys_save_config(void) +{ + gchar* buf; + guint g; + keys_key* k; + + for (g = 0; g < NUM_KEY_GROUPS; g++) { + for (k = groups[g].keys; k->title; k++) { + if (k->xkeysym != 0) { + if (keys_encode_assignment(&buf, k->modifiers, k->xkeysym, k->hwcode)) + prefs_put_string(SECTION, k->title, buf); + g_free(buf); + } + } } - - prefs_close(p); - return 1; } static int -find_keysym (KeySym k) +find_keysym(KeySym k) { int i; - for(i = 0; i < xkeymaplen; i++) { - if(xkeymap[i].xname && xkeymap[i].xkeysym == k) - return i; + for (i = 0; i < xkeymaplen; i++) { + if (xkeymap[i].xname && xkeymap[i].xkeysym == k) + return i; } return -1; } static int -keys_try_automatic_config (KeySym first, - int key_offset, - int count, - int note_offset, - int color, - keys_key *nk) +keys_try_automatic_config(KeySym first, + int key_offset, + int count, + int note_offset, + int color, + keys_key* nk) { int key; key = find_keysym(first); - if(key == -1) - return 0; + if (key == -1) + return 0; key += key_offset * symspercode; - while(count) { - if(key < 0 || key >= xkeymaplen) - return 0; - - g_assert(nk->meaning == note_offset); - nk->xkeysym = xkeymap[key].xkeysym; - nk->xkeycode = xmin + key / symspercode; - nk->modifiers = 0; - - if(color == WHITE) { - switch(note_offset % 12) { - case 4: case 11: - note_offset += 1; - nk += 1; - break; - default: - note_offset += 2; - nk += 2; - break; - } - key += 1 * symspercode; - } else { - switch(note_offset % 12) { - case 3: case 10: - note_offset += 3; - nk += 3; - key += 2 * symspercode; - break; - default: - note_offset += 2; - nk += 2; - key += 1 * symspercode; - break; - } - } + while (count) { + if (key < 0 || key >= xkeymaplen) + return 0; + + g_assert(nk->meaning == note_offset); + nk->xkeysym = xkeymap[key].xkeysym; + nk->xkeycode = xmin + key / symspercode; + nk->modifiers = 0; + + if (color == WHITE) { + switch (note_offset % 12) { + case 4: + case 11: + note_offset += 1; + nk += 1; + break; + default: + note_offset += 2; + nk += 2; + break; + } + key += 1 * symspercode; + } else { + switch (note_offset % 12) { + case 3: + case 10: + note_offset += 3; + nk += 3; + key += 2 * symspercode; + break; + default: + note_offset += 2; + nk += 2; + key += 1 * symspercode; + break; + } + } - count--; + count--; } return 1; @@ -882,76 +838,68 @@ /* This function tries to assign channel mute key combinations automatically */ static int -keys_ch_try_automatic_config (KeySym first, - int key_offset, - int count, - keys_key *nk, - int modifiers) +keys_ch_try_automatic_config(KeySym first, + int key_offset, + int count, + keys_key* nk, + int modifiers) { int key; key = find_keysym(first); - if(key == -1) - return 0; + if (key == -1) + return 0; key += key_offset * symspercode; - while(count) { - if(key < 0 || key >= xkeymaplen) - return 0; - - nk->xkeysym = xkeymap[key].xkeysym; - nk->xkeycode = xmin + key / symspercode; - nk->modifiers = modifiers; + while (count) { + if (key < 0 || key >= xkeymaplen) + return 0; + + nk->xkeysym = xkeymap[key].xkeysym; + nk->xkeycode = xmin + key / symspercode; + nk->modifiers = modifiers; - nk += 1; - key += 1 * symspercode; + nk += 1; + key += 1 * symspercode; - count--; + count--; } return 1; } static int -keys_qsort_compare_func (const void *string1, - const void *string2) +keys_qsort_compare_func(const void* string1, + const void* string2) { - const char *s1 = *(char **) string1; - const char *s2 = *(char **) string2; + const char* s1 = *(char**)string1; + const char* s2 = *(char**)string2; - return strcmp (s1, s2); + if (!s1) + return -1; + return strcmp(s1, s2); } static void -keys_make_xkeys (void) +keys_make_xkeys(void) { - gchar **keyname; - int mode; int i, k; - keyname = g_new(gchar*, xkeymaplen); + keyname = g_new0(gchar*, xkeymaplen + 1); - for(mode = 0; mode <= 1; mode++) { - for(i = 0, k = 0; i < xkeymaplen; i++) { - if(xkeymap[i].xname && (mode == 1 || !IsModifierKey(xkeymap[i].xkeysym))) { - keyname[k] = xkeymap[i].xname; - k++; - } - } - - qsort(keyname, k, sizeof(char *), keys_qsort_compare_func); - - xkeys[mode] = g_list_append (NULL, NONE_TEXT); - for(i = 0; i < k; i++) - xkeys[mode] = g_list_append(xkeys[mode], keyname[i]); + for (i = 0, k = 1; i < xkeymaplen; i++) { + if (xkeymap[i].xname && !is_modifier_key(xkeymap[i].xkeysym)) + keyname[k++] = xkeymap[i].xname; } - g_free(keyname); + qsort(keyname, k, sizeof(char*), keys_qsort_compare_func); + + keyname[0] = NONE_TEXT; } static void -keys_fixup_xkeymap (void) +keys_fixup_xkeymap(void) { /* The problem are custom keymaps that contain lines such as: keycode 0x18 = Q @@ -964,136 +912,143 @@ KeySym k1, k2; gchar a[2] = { 0, 0 }; - if(symspercode < 2) - return; + if (symspercode < 2) + return; - for(i = 0; i < xkeymaplen / symspercode; i++) { - k1 = xkeymap[i * symspercode + 0].xkeysym; - k2 = xkeymap[i * symspercode + 1].xkeysym; - - if(k2 == 0) { - if(k1 >= 'A' && k1 <= 'Z') { - fprintf(stderr, "*** keys_fixup_xkeymap: %c -> ", (int)k1); - k2 = k1; - k1 += 'a' - 'A'; - fprintf(stderr, "%c %c\n", (int)k1, (int)k2); - - a[0] = k1; - xkeymap[i * symspercode + 1].xname = xkeymap[i * symspercode + 0].xname; - xkeymap[i * symspercode + 0].xname = g_strdup(a); - - xkeymap[i * symspercode + 0].xkeysym = k1; - xkeymap[i * symspercode + 1].xkeysym = k2; - } - } + for (i = 0; i < xkeymaplen / symspercode; i++) { + k1 = xkeymap[i * symspercode + 0].xkeysym; + k2 = xkeymap[i * symspercode + 1].xkeysym; + + if (k2 == 0) { + if (k1 >= 'A' && k1 <= 'Z') { + fprintf(stderr, "*** keys_fixup_xkeymap: %c -> ", (int)k1); + k2 = k1; + k1 += 'a' - 'A'; + fprintf(stderr, "%c %c\n", (int)k1, (int)k2); + + a[0] = k1; + xkeymap[i * symspercode + 1].xname = xkeymap[i * symspercode + 0].xname; + xkeymap[i * symspercode + 0].xname = g_strdup(a); + + xkeymap[i * symspercode + 0].xkeysym = k1; + xkeymap[i * symspercode + 1].xkeysym = k2; + } + } } } /* This function fills title and explanation fields of channel selecting key combinations */ static void -keys_generate_channel_explanations (keys_key *array, - int count) +keys_generate_channel_explanations(keys_key* array, + int count) { int i = 0; - for(i = 0; i < count; i++, array++) { - array->title = g_strdup_printf(_("CH%02d"), i + 1); - array->explanation = g_strdup_printf(_("Fast jump to channel %d"), i + 1); - array->meaning = KEYS_MEANING_TYPE_MAKE(KEYS_MEANING_CH) + i; + for (i = 0; i < count; i++) { + array[i].title = g_strdup_printf("CH%02d", i + 1); + array[i].local_title = g_strdup_printf(_("CH%02d"), i + 1); + array[i].explanation = g_strdup_printf(_("Fast jump to channel %d"), i + 1); + array[i].meaning = KEYS_MEANING_TYPE_MAKE(KEYS_MEANING_CH) + i; + array[i].hwcode = -1; } } -int -keys_init (void) +int keys_init(void) { + static GtkWidget* dialog = NULL; int max; - KeySym *servsyms; + KeySym* servsyms; int i, j; + GdkDisplay* st_gdk_display = gdk_display_get_default(); - if(!gdk_display) { - fprintf(stderr, "gdk_display is NULL.\n"); - return 0; + if (!st_gdk_display) { + fprintf(stderr, "Can't open GDK display.\n"); + return 0; } - XDisplayKeycodes(GDK_DISPLAY(), &xmin, &max); - if(xmin < 8 || max > 255) { - fprintf(stderr, "Sorry, insane X keycode numbers (min/max out of range).\n"); - return 0; + x_display = GDK_DISPLAY_XDISPLAY(st_gdk_display); + + XDisplayKeycodes(x_display, &xmin, &max); + if (xmin < 8 || max > 255) { + fprintf(stderr, "Sorry, insane X keycode numbers (min/max out of range).\n"); + return 0; } - servsyms = XGetKeyboardMapping(GDK_DISPLAY(), xmin, max-xmin+1, &symspercode); - if(!servsyms) { - fprintf(stderr, "Can't retrieve X keyboard mapping.\n"); - return 0; + servsyms = XGetKeyboardMapping(x_display, xmin, max - xmin + 1, &symspercode); + if (!servsyms) { + fprintf(stderr, "Can't retrieve X keyboard mapping.\n"); + return 0; } - if(symspercode < 1) { - fprintf(stderr, "Sorry, can't handle your X keyboard (symspercode < 1).\n"); - return 0; + if (symspercode < 1) { + fprintf(stderr, "Sorry, can't handle your X keyboard (symspercode < 1).\n"); + return 0; } xkeymaplen = symspercode * (max - xmin + 1); xkeymap = g_new(xkey, xkeymaplen); - for(i = 0; i < xkeymaplen; i++) { - char *name = XKeysymToString(servsyms[i]); + for (i = 0; i < xkeymaplen; i++) { + char* name = XKeysymToString(servsyms[i]); - xkeymap[i].xname = NULL; - xkeymap[i].xkeysym = 0; + xkeymap[i].xname = NULL; + xkeymap[i].xkeysym = 0; - if(name) { - // Test if this key has already been stored - for(j = 0; j < i; j++) { - if(xkeymap[j].xname && !strcmp(xkeymap[j].xname, name)) { - break; - } - } - if(j == i) { - // No, add it - xkeymap[i].xname = g_strdup(name); - xkeymap[i].xkeysym = servsyms[i]; - } - } + if (name) { + // Test if this key has already been stored + for (j = 0; j < i; j++) { + if (xkeymap[j].xname && !strcmp(xkeymap[j].xname, name)) { + break; + } + } + if (j == i) { + // No, add it + xkeymap[i].xname = g_strdup(name); + xkeymap[i].xkeysym = servsyms[i]; + } + } } XFree(servsyms); keys_fixup_xkeymap(); keys_make_xkeys(); - keys_generate_channel_explanations(keys3 + 3, 32); - keys3[sizeof(keys3)/sizeof(keys3[0]) - 1].title = NULL; + keys_generate_channel_explanations(keys3 + KEY_LAST + 1, 32); + keys3[ARRAY_SIZE(keys3) - 1].title = NULL; - if(!keys_load_config()) { - if(!keys_try_automatic_config('e', -2, 12, 12, WHITE, keys1) - || !keys_try_automatic_config('x', -1, 10, 0, WHITE, keys2) - || !keys_try_automatic_config('2', 0, 8, 13, BLACK, keys1 + 1) - || !keys_try_automatic_config('s', 0, 7, 1, BLACK, keys2 + 1) - || !keys_ch_try_automatic_config ('E', -2, 8, keys3 + 3, ENCODE_MODIFIERS(1, 0, 0)) - || !keys_ch_try_automatic_config ('S', -1, 8, keys3 + 11, ENCODE_MODIFIERS(1, 0, 0)) - || !keys_ch_try_automatic_config ('E', -2, 8, keys3 + 19, ENCODE_MODIFIERS(1, 1, 0)) - || !keys_ch_try_automatic_config ('S', -1, 8, keys3 + 27, ENCODE_MODIFIERS(1, 1, 0))) { - // Automatic key configuration unsuccessful. Popup requester. - gnome_warning_dialog(_("Automatic key configuration unsuccessful.\nPlease use the Keyboard Configuration dialog\n" - "in the Settings menu.")); - } + /* First try automatic config to obtain defaults and than overwrite with user-defined values */ + if (!keys_try_automatic_config('e', -2, 12, 12, WHITE, keys1) + || !keys_try_automatic_config('x', -1, 10, 0, WHITE, keys2) + || !keys_try_automatic_config('2', 0, 8, 13, BLACK, keys1 + 1) + || !keys_try_automatic_config('s', 0, 7, 1, BLACK, keys2 + 1) + || !keys_ch_try_automatic_config('E', -2, 8, keys3 + KEY_LAST + 1, ENCODE_MODIFIERS(1, 0, 0)) + || !keys_ch_try_automatic_config('S', -1, 8, keys3 + KEY_LAST + 1 + 8, ENCODE_MODIFIERS(1, 0, 0)) + || !keys_ch_try_automatic_config('E', -2, 8, keys3 + KEY_LAST + 1 + 16, ENCODE_MODIFIERS(1, 0, 1)) + || !keys_ch_try_automatic_config('S', -1, 8, keys3 + KEY_LAST + 1 + 24, ENCODE_MODIFIERS(1, 0, 1))) { + // Automatic key configuration unsuccessful. Popup requester. + gui_warning_dialog(&dialog, _("Automatic key configuration unsuccessful.\nPlease use the Keyboard Configuration dialog\n" + "in the Settings menu."), + FALSE); } - + keys_load_config(); + return 1; } guint32 -keys_get_key_meaning (guint32 keysym, - int modifiers) +keys_get_key_meaning(guint32 keysym, + guint modifiers, gint hwcode) { int g; - keys_key *k; + keys_key* k; - for(g = 0; g < NUM_KEY_GROUPS; g++) { - for(k = groups[g].keys; k->title; k++) { - if(k->xkeysym == keysym && k->modifiers == modifiers) { - return k->meaning; - } - } + for (g = 0; g < NUM_KEY_GROUPS; g++) { + for (k = groups[g].keys; k->title; k++) { + if (k->xkeysym == keysym && k->modifiers == modifiers && + (hwcode == -1 || k->hwcode == -1 || k->hwcode == hwcode)) { + return k->meaning; + } + } } return -1; @@ -1102,20 +1057,20 @@ /* Yeah! Let's fake around X's stupid auto-repeat! X sends a KeyRelease before the KeyPress event of an auto-repeat. */ gboolean -keys_is_key_pressed (guint32 keysym, - int modifiers) +keys_is_key_pressed(guint32 keysym, + int modifiers) { int g; - keys_key *k; + keys_key* k; char array[32]; - for(g = 0; g < NUM_KEY_GROUPS; g++) { - for(k = groups[g].keys; k->title; k++) { - if(k->xkeysym == keysym && k->modifiers == modifiers) { - XQueryKeymap(GDK_DISPLAY(), array); - return 0 != (array[k->xkeycode / 8] & (1 << (k->xkeycode % 8))); - } - } + for (g = 0; g < NUM_KEY_GROUPS; g++) { + for (k = groups[g].keys; k->title; k++) { + if (k->xkeysym == keysym && k->modifiers == modifiers) { + XQueryKeymap(x_display, array); + return 0 != (array[k->xkeycode / 8] & (1 << (k->xkeycode % 8))); + } + } } return FALSE; @@ -1123,55 +1078,49 @@ #else /* !defined(_WIN32) */ -#include #include -#include +#include #include +#include -#include //#include //#include "X11/Xlib.h" //#include -#include #include +#include +#include -#include "i18n.h" -#include "keys.h" #include "gui-subs.h" #include "gui.h" -#include "menubar.h" +#include "keys.h" #include "preferences.h" -char *lowkey="<>aAyYsSxXcCfFvVgGbBhHnNmMkK,;lL.:"; +char* lowkey = "<>aAyYsSxXcCfFvVgGbBhHnNmMkK,;lL.:"; -void -keys_dialog (void) +void keys_dialog(void) { } -int -keys_save_config (void) +void keys_save_config(void) { - return 1; } -int -keys_init (void) +int keys_init(void) { return 1; } guint32 -keys_get_key_meaning (guint32 keysym, - int modifiers) +keys_get_key_meaning(guint32 keysym, + guint modifiers, gint hwcode) { - char *c; + char* c; - for (c=lowkey; *c; c++) - if (*c==keysym) - return (c-lowkey)>>1; + for (c = lowkey; *c; c++) + if (*c == keysym) + return (c - lowkey) >> 1; return -1; } @@ -1179,8 +1128,8 @@ /* Yeah! Let's fake around X's stupid auto-repeat! X sends a KeyRelease before the KeyPress event of an auto-repeat. */ gboolean -keys_is_key_pressed (guint32 keysym, - int modifiers) +keys_is_key_pressed(guint32 keysym, + int modifiers) { return FALSE; } diff -Nru soundtracker-0.6.8/app/keys.h soundtracker-1.0.2~pre2/app/keys.h --- soundtracker-0.6.8/app/keys.h 2003-05-24 11:58:34.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/keys.h 2021-02-01 20:01:20.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - X keyboard handling (header) * - * Copyright (C) 1997-2001 Michael Krause + * Copyright (C) 1997-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,32 +24,45 @@ #include -int -keys_init (void); +int keys_init(void); guint32 -keys_get_key_meaning (guint32 keysym, - int modifier); // modifier is 1 shift, 2 ctrl, 4 meta +keys_get_key_meaning(guint32 keysym, + guint modifier, /* modifier is 1 shift, 2 ctrl, 4 meta */ + gint hwcode); #define KEYS_MEANING_TYPE(x) (x >> 16) #define KEYS_MEANING_TYPE_MAKE(x) (x << 16) #define KEYS_MEANING_VALUE(x) (x & 0xFFFF) -#define KEYS_MEANING_NOTE 0 +#define KEYS_MEANING_NOTE 0 #define KEYS_MEANING_KEYOFF 1 -#define KEYS_MEANING_FUNC 2 -#define KEYS_MEANING_CH 3 +#define KEYS_MEANING_FUNC 2 +#define KEYS_MEANING_CH 3 #define ENCODE_MODIFIERS(shift, ctrl, alt) (1 * (shift != 0) + 2 * (ctrl != 0) + 4 * (alt != 0)) -void -keys_dialog (void); +enum { + KEY_JMP_PLUS = 0, + KEY_JMP_MINUS, + KEY_PLAY_SNG, + KEY_REC_SNG, + KEY_PLAY_PAT, + KEY_REC_PAT, + KEY_PLAY_CUR, + KEY_REC_CUR, + KEY_PLAY_ROW, + KEY_PLAY_BLK, + KEY_SMP_TOGGLE, + KEY_LAST /* Must be the last element */ +}; -int -keys_save_config (void); +void keys_dialog(void); + +void keys_save_config(void); gboolean -keys_is_key_pressed (guint32 keysym, - int modifiers); +keys_is_key_pressed(guint32 keysym, + int modifiers); #endif /* _NOTEKEYS_H */ diff -Nru soundtracker-0.6.8/app/main.c soundtracker-1.0.2~pre2/app/main.c --- soundtracker-0.6.8/app/main.c 2006-02-25 13:02:27.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/main.c 2021-02-13 21:00:49.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - main program * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,94 +24,85 @@ #include #include +#include +#include #include #include -#include -#include "i18n.h" -#include "gui.h" -#include "xm.h" #include "audio.h" -#include "keys.h" -#include "gui-settings.h" #include "audioconfig.h" +#include "file-operations.h" +#include "gui-settings.h" +#include "gui.h" +#include "history.h" +#include "keys.h" +#include "midi-settings.h" +#include "midi.h" +#include "preferences.h" #include "tips-dialog.h" -#include "menubar.h" #include "track-editor.h" -#include "midi.h" -#include "midi-settings.h" -#include "file-operations.h" +#include "xm.h" #include #include -XM *xm = NULL; -int pipea[2], pipeb[2]; +XM* xm = NULL; +#ifndef DEBUG static void -sigsegv_handler (int parameter) +sigsegv_handler(int parameter) { signal(SIGSEGV, SIG_DFL); - if(xm != NULL) { - int retval = XM_Save(xm, "crash-save.xm", FALSE); - printf("*** SIGSEGV caught.\n*** Saved current XM to 'crash-save.xm' in current directory.\n (status %d)\n", retval); - exit(1); + if (xm != NULL) { + gboolean is_error = XM_Save(xm, "crash-save.xm", "crash-save.xm", FALSE); + printf("*** SIGSEGV caught.\n*** Saved current XM to 'crash-save.xm' in current directory.\n (%s)\n", is_error ? "failed" : "succeed"); + exit(1); } } +#endif -int -main (int argc, - char *argv[]) +int main(int argc, + char* argv[]) { - extern void - driver_out_dummy, driver_in_dummy, + extern st_driver + driver_out_dummy, + driver_in_dummy, #ifdef DRIVER_OSS - driver_out_oss, driver_in_oss, + driver_out_oss, driver_in_oss, #endif #ifdef DRIVER_ALSA - driver_out_alsa, driver_in_alsa, -#endif -#ifdef DRIVER_ALSA_050 - driver_out_alsa2, driver_in_alsa2, -#endif -#ifdef DRIVER_ESD - driver_out_esd, + driver_out_alsa1x, driver_in_alsa1x, #endif #ifdef DRIVER_SGI - driver_out_irix, + driver_out_irix, #endif #ifdef DRIVER_JACK - driver_out_jack, + driver_out_jack, driver_in_jack, #endif #ifdef DRIVER_SUN - driver_out_sun, driver_in_sun, + driver_out_sun, driver_in_sun, #endif -#ifdef DRIVER_SDL - driver_out_sdl, +#ifdef DRIVER_PULSE + driver_out_pulse, #endif -#if USE_SNDFILE || !defined (NO_AUDIOFILE) -// driver_out_file, +#ifdef DRIVER_SDL + driver_out_sdl, #endif #if 0 driver_out_test, #endif #if defined(_WIN32) - driver_out_dsound, + driver_out_dsound, #endif - mixer_kbfloat, - mixer_integer32; - - g_thread_init(NULL); - - if(pipe(pipea) || pipe(pipeb)) { - fprintf(stderr, "Cränk. Can't pipe().\n"); - return 1; - } + mixer_kbfloat, + mixer_integer32; - if(!audio_init(pipea[0], pipeb[1])) { - fprintf(stderr, "Can't init audio thread.\n"); - return 1; + /* Preventing any logging during initialization */ + history_skip = TRUE; + if (!audio_init()) { + fprintf(stderr, "Can't init audio thread.\n"); + return 1; } /* In case we run setuid root, the main thread must not have root @@ -121,10 +112,10 @@ /* These aren't in the header files, so we prototype them here. */ { - int setresuid(uid_t ruid, uid_t euid, uid_t suid); - int setresgid(gid_t rgid, gid_t egid, gid_t sgid); - setresuid(getuid(), getuid(), getuid()); - setresgid(getgid(), getgid(), getgid()); + int setresuid(uid_t ruid, uid_t euid, uid_t suid); + int setresgid(gid_t rgid, gid_t egid, gid_t sgid); + setresuid(getuid(), getuid(), getuid()); + setresgid(getgid(), getgid(), getgid()); } #else seteuid(getuid()); @@ -132,25 +123,31 @@ #endif #if ENABLE_NLS - gtk_set_locale(); bindtextdomain(PACKAGE, LOCALEDIR); + bind_textdomain_codeset(PACKAGE, "UTF-8"); textdomain(PACKAGE); #endif + gtk_init(&argc, &argv); + prefs_init(); tips_dialog_load_settings(); - if(!gui_splash(argc, argv)) { - fprintf(stderr, "GUI Initialization failed.\n"); - return 1; + if (!gui_splash()) { + fprintf(stderr, "GUI Initialization failed.\n"); + return 1; } - audio_ctlpipe = pipea[1]; - audio_backpipe = pipeb[0]; + /* To decrease distance between list rows */ + gtk_rc_parse_string("style \"compact\" { GtkTreeView::vertical-separator = 0 }\n" + "class \"GtkTreeView\" style \"compact\"\n" + /* To cause keycodes to be displayed as list */ + "style \"list\" {GtkComboBox::appears-as-list = 1}\n" + "widget \"*.keyconfig_combo\" style \"list\""); mixers = g_list_append(mixers, - &mixer_kbfloat); + &mixer_kbfloat); mixers = g_list_append(mixers, - &mixer_integer32); + &mixer_integer32); #if 0 drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], @@ -159,74 +156,64 @@ #ifdef DRIVER_OSS drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], - &driver_out_oss); + &driver_out_oss); drivers[DRIVER_INPUT] = g_list_append(drivers[DRIVER_INPUT], - &driver_in_oss); + &driver_in_oss); #endif #ifdef DRIVER_SGI drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], - &driver_out_irix); + &driver_out_irix); #endif #ifdef DRIVER_JACK drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], - &driver_out_jack); + &driver_out_jack); + drivers[DRIVER_INPUT] = g_list_append(drivers[DRIVER_INPUT], + &driver_in_jack); #endif #ifdef DRIVER_SUN drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], - &driver_out_sun); + &driver_out_sun); drivers[DRIVER_INPUT] = g_list_append(drivers[DRIVER_INPUT], - &driver_in_sun); + &driver_in_sun); #endif #ifdef _WIN32 drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], - &driver_out_dsound); + &driver_out_dsound); #endif #ifdef DRIVER_ALSA drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], - &driver_out_alsa); - drivers[DRIVER_INPUT] = g_list_append(drivers[DRIVER_INPUT], - &driver_in_alsa); -#endif - -#ifdef DRIVER_ALSA_050 - drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], - &driver_out_alsa2); + &driver_out_alsa1x); drivers[DRIVER_INPUT] = g_list_append(drivers[DRIVER_INPUT], - &driver_in_alsa2); + &driver_in_alsa1x); #endif #ifdef DRIVER_ESD drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], - &driver_out_esd); + &driver_out_esd); #endif #ifdef DRIVER_SDL drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], - &driver_out_sdl); + &driver_out_sdl); #endif -#if USE_SNDFILE || !defined (NO_AUDIOFILE) -/* drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], - &driver_out_file); - - This driver is not being added to the list because it's rather special - in that it takes a filename argument each time it's called.. need to - think about better integration perhaps. -*/ +#ifdef DRIVER_PULSE + drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], + &driver_out_pulse); #endif - if(g_list_length(drivers[DRIVER_OUTPUT]) == 0) { - drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], - &driver_out_dummy); + if (g_list_length(drivers[DRIVER_OUTPUT]) == 0) { + drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], + &driver_out_dummy); } - if(g_list_length(drivers[DRIVER_INPUT]) == 0) { - drivers[DRIVER_INPUT] = g_list_append(drivers[DRIVER_INPUT], - &driver_in_dummy); + if (g_list_length(drivers[DRIVER_INPUT]) == 0) { + drivers[DRIVER_INPUT] = g_list_append(drivers[DRIVER_INPUT], + &driver_in_dummy); } g_assert(g_list_length(mixers) >= 1); @@ -235,38 +222,41 @@ gui_settings_load_config(); audioconfig_load_mixer_config(); // in case gui_init already loads a module - if(gui_final(argc, argv)) { - audioconfig_load_config(); - track_editor_load_config(); -#if defined(DRIVER_ALSA_050) || defined(DRIVER_ALSA_09x) - midi_load_config(); - midi_init(); -#endif - - signal(SIGSEGV, sigsegv_handler); - - gtk_main(); - - gui_play_stop(); /* so that audio driver is shut down correctly. */ - - menubar_write_accels(); - - if(gui_settings.save_settings_on_exit) { - keys_save_config(); - gui_settings_save_config(); - audioconfig_save_config(); - } - - gui_settings_save_config_always(); - tips_dialog_save_settings(); - track_editor_save_config(); -#if defined(DRIVER_ALSA_050) || defined(DRIVER_ALSA_09x) - midi_save_config(); -#endif - fileops_tmpclean(); - return 0; + if (gui_final(argc, argv)) { + audioconfig_load_config(); + track_editor_load_config(); +#if defined(DRIVER_ALSA) + midi_load_config(); + midi_init(); +#endif +#ifndef DEBUG + signal(SIGSEGV, sigsegv_handler); +#endif + history_skip = FALSE; + gtk_main(); + + gui_play_stop(); /* so that audio driver is shut down correctly. */ + + if (gui_settings.save_settings_on_exit) { + keys_save_config(); + gui_settings_save_config(); + audioconfig_save_config(); + } + gui_settings_save_config_always(); + tips_dialog_save_settings(); + track_editor_save_config(); +#if defined(DRIVER_ALSA) + midi_save_config(); + midi_fini(); +#endif + prefs_save(); + prefs_close(); + + fileops_tmpclean(); + audioconfig_shutdown(); /* Closing all opened drivers */ + return 0; } else { - fprintf(stderr, "GUI Initialization failed.\n"); - return 1; + fprintf(stderr, "GUI Initialization failed.\n"); + return 1; } } diff -Nru soundtracker-0.6.8/app/main.h soundtracker-1.0.2~pre2/app/main.h --- soundtracker-0.6.8/app/main.h 2001-01-03 13:24:09.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/main.h 2019-04-15 17:45:04.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - main program (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,10 +22,8 @@ #ifndef _MAIN_H #define _MAIN_H -#include - #include "xm.h" -extern XM *xm; +extern XM* xm; #endif /* _MAIN_H */ diff -Nru soundtracker-0.6.8/app/Makefile.am soundtracker-1.0.2~pre2/app/Makefile.am --- soundtracker-0.6.8/app/Makefile.am 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/Makefile.am 2020-09-15 17:39:05.000000000 +0000 @@ -3,11 +3,16 @@ bin_PROGRAMS = soundtracker soundtracker_SOURCES = \ + audio-subs.c audio-subs.h \ audio.c audio.h \ audioconfig.c audioconfig.h \ cheat-sheet.c cheat-sheet.h \ clavier.c clavier.h \ - driver.h driver-in.h driver-out.h \ + clock.c clock.h \ + colors.c colors.h \ + customdrawing.c customdrawing.h \ + draw-interlayer.c draw-interlayer.h \ + driver.h \ endian-conv.c endian-conv.h \ envelope-box.c envelope-box.h \ errors.c errors.h \ @@ -17,12 +22,13 @@ gui-settings.c gui-settings.h \ gui-subs.c gui-subs.h \ gui.c gui.h \ - gettext.h i18n.h \ + history.c history.h \ instrument-editor.c instrument-editor.h \ keys.c keys.h \ main.c main.h \ + marshal.c marshal.h\ menubar.c menubar.h \ - mixer.h \ + midi-settings.c mixer.h \ module-info.c module-info.h \ playlist.c playlist.h \ poll.c poll.h \ @@ -30,34 +36,27 @@ recode.c recode.h \ sample-display.c sample-display.h \ sample-editor.c sample-editor.h \ + scalablepic.c scalablepic.h \ scope-group.c scope-group.h \ st-subs.c st-subs.h \ time-buffer.c time-buffer.h \ tips-dialog.c tips-dialog.h \ + tracer.c tracer.h \ track-editor.c track-editor.h \ tracker.c tracker.h \ tracker-settings.c tracker-settings.h \ transposition.c transposition.h \ xm.c xm.h \ - xm-player.c xm-player.h \ - tracer.c tracer.h + xm-player.c xm-player.h -if !NO_GDK_PIXBUF - soundtracker_SOURCES += scalablepic.c scalablepic.h -endif - -if DRIVER_ALSA_050 - soundtracker_SOURCES += midi-050.c midi-utils-050.c midi-settings-050.c \ - midi.h midi-settings.h midi-utils.h -endif - -if DRIVER_ALSA_09x - soundtracker_SOURCES += midi-09x.c midi-utils-09x.c midi-settings-09x.c \ +if DRIVER_ALSA + soundtracker_SOURCES += midi.c midi-utils.c \ midi.h midi-settings.h midi-utils.h endif -soundtracker_LDADD = drivers/libdrivers.a mixers/libmixers.a ${ST_S_JACK_LIBS} +soundtracker_LDADD = drivers/libdrivers.a mixers/libmixers.a +if SUID_ROOT install-exec-local: case `uname` in \ OpenBSD) \ @@ -81,10 +80,24 @@ @echo "*** if this is a multi-user machine. See file INSTALL." @echo "***" @echo "" +endif + +marshal.h: marshal.list + glib-genmarshal --header --prefix=__marshal marshal.list > marshal.h + +marshal.c: marshal.list + glib-genmarshal --body --prefix=__marshal marshal.list > marshal.c + +playlist.c: marshal.h + +sample-display.c: marshal.h + +clavier.c: marshal.h + +tracker.c: marshal.h +AM_CPPFLAGS = -DLOCALEDIR=\"$(datadir)/locale\" -DDATADIR=\"$(datadir)\" -stdir = $(datadir)/soundtracker +EXTRA_DIST = marshal.list -#INCLUDES = -DDATADIR=\"$(stdir)\" \ -# -DLOCALEDIR=\"$(datadir)/locale\" -INCLUDES = -DLOCALEDIR=\"$(datadir)/locale\" +CLEANFILES = marshal.c marshal.h diff -Nru soundtracker-0.6.8/app/Makefile.in soundtracker-1.0.2~pre2/app/Makefile.in --- soundtracker-0.6.8/app/Makefile.in 2006-02-25 13:37:15.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/Makefile.in 2021-02-26 19:46:41.000000000 +0000 @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.7.9 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 -# Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,16 +14,67 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. - +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -35,28 +86,179 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : +build_triplet = @build@ host_triplet = @host@ -@NO_GDK_PIXBUF_FALSE@am__append_1 = scalablepic.c scalablepic.h -@DRIVER_ALSA_050_TRUE@am__append_2 = midi-050.c midi-utils-050.c midi-settings-050.c \ -@DRIVER_ALSA_050_TRUE@ midi.h midi-settings.h midi-utils.h - -@DRIVER_ALSA_09x_TRUE@am__append_3 = midi-09x.c midi-utils-09x.c midi-settings-09x.c \ -@DRIVER_ALSA_09x_TRUE@ midi.h midi-settings.h midi-utils.h +bin_PROGRAMS = soundtracker$(EXEEXT) +@DRIVER_ALSA_TRUE@am__append_1 = midi.c midi-utils.c \ +@DRIVER_ALSA_TRUE@ midi.h midi-settings.h midi-utils.h +subdir = app +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am__soundtracker_SOURCES_DIST = audio-subs.c audio-subs.h audio.c \ + audio.h audioconfig.c audioconfig.h cheat-sheet.c \ + cheat-sheet.h clavier.c clavier.h clock.c clock.h colors.c \ + colors.h customdrawing.c customdrawing.h draw-interlayer.c \ + draw-interlayer.h driver.h endian-conv.c endian-conv.h \ + envelope-box.c envelope-box.h errors.c errors.h event-waiter.c \ + event-waiter.h extspinbutton.c extspinbutton.h \ + file-operations.c file-operations.h gui-settings.c \ + gui-settings.h gui-subs.c gui-subs.h gui.c gui.h history.c \ + history.h instrument-editor.c instrument-editor.h keys.c \ + keys.h main.c main.h marshal.c marshal.h menubar.c menubar.h \ + midi-settings.c mixer.h module-info.c module-info.h playlist.c \ + playlist.h poll.c poll.h preferences.c preferences.h recode.c \ + recode.h sample-display.c sample-display.h sample-editor.c \ + sample-editor.h scalablepic.c scalablepic.h scope-group.c \ + scope-group.h st-subs.c st-subs.h time-buffer.c time-buffer.h \ + tips-dialog.c tips-dialog.h tracer.c tracer.h track-editor.c \ + track-editor.h tracker.c tracker.h tracker-settings.c \ + tracker-settings.h transposition.c transposition.h xm.c xm.h \ + xm-player.c xm-player.h midi.c midi-utils.c midi.h \ + midi-settings.h midi-utils.h +@DRIVER_ALSA_TRUE@am__objects_1 = midi.$(OBJEXT) midi-utils.$(OBJEXT) +am_soundtracker_OBJECTS = audio-subs.$(OBJEXT) audio.$(OBJEXT) \ + audioconfig.$(OBJEXT) cheat-sheet.$(OBJEXT) clavier.$(OBJEXT) \ + clock.$(OBJEXT) colors.$(OBJEXT) customdrawing.$(OBJEXT) \ + draw-interlayer.$(OBJEXT) endian-conv.$(OBJEXT) \ + envelope-box.$(OBJEXT) errors.$(OBJEXT) event-waiter.$(OBJEXT) \ + extspinbutton.$(OBJEXT) file-operations.$(OBJEXT) \ + gui-settings.$(OBJEXT) gui-subs.$(OBJEXT) gui.$(OBJEXT) \ + history.$(OBJEXT) instrument-editor.$(OBJEXT) keys.$(OBJEXT) \ + main.$(OBJEXT) marshal.$(OBJEXT) menubar.$(OBJEXT) \ + midi-settings.$(OBJEXT) module-info.$(OBJEXT) \ + playlist.$(OBJEXT) poll.$(OBJEXT) preferences.$(OBJEXT) \ + recode.$(OBJEXT) sample-display.$(OBJEXT) \ + sample-editor.$(OBJEXT) scalablepic.$(OBJEXT) \ + scope-group.$(OBJEXT) st-subs.$(OBJEXT) time-buffer.$(OBJEXT) \ + tips-dialog.$(OBJEXT) tracer.$(OBJEXT) track-editor.$(OBJEXT) \ + tracker.$(OBJEXT) tracker-settings.$(OBJEXT) \ + transposition.$(OBJEXT) xm.$(OBJEXT) xm-player.$(OBJEXT) \ + $(am__objects_1) +soundtracker_OBJECTS = $(am_soundtracker_OBJECTS) +soundtracker_DEPENDENCIES = drivers/libdrivers.a mixers/libmixers.a +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(soundtracker_SOURCES) +DIST_SOURCES = $(am__soundtracker_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +ARFLAGS = @ARFLAGS@ AUDIOFILE_CFLAGS = @AUDIOFILE_CFLAGS@ -AUDIOFILE_CONFIG = @AUDIOFILE_CONFIG@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +CANVAS_CFLAGS = @CANVAS_CFLAGS@ +CANVAS_LIBS = @CANVAS_LIBS@ CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ @@ -64,45 +266,26 @@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DRIVER_ALSA_050_FALSE = @DRIVER_ALSA_050_FALSE@ -DRIVER_ALSA_050_TRUE = @DRIVER_ALSA_050_TRUE@ -DRIVER_ALSA_09x_FALSE = @DRIVER_ALSA_09x_FALSE@ -DRIVER_ALSA_09x_TRUE = @DRIVER_ALSA_09x_TRUE@ -DRIVER_ALSA_FALSE = @DRIVER_ALSA_FALSE@ -DRIVER_ALSA_TRUE = @DRIVER_ALSA_TRUE@ -DRIVER_ESD_FALSE = @DRIVER_ESD_FALSE@ -DRIVER_ESD_TRUE = @DRIVER_ESD_TRUE@ -DRIVER_IRIX_FALSE = @DRIVER_IRIX_FALSE@ -DRIVER_IRIX_TRUE = @DRIVER_IRIX_TRUE@ -DRIVER_JACK_FALSE = @DRIVER_JACK_FALSE@ -DRIVER_JACK_TRUE = @DRIVER_JACK_TRUE@ -DRIVER_OSS_FALSE = @DRIVER_OSS_FALSE@ -DRIVER_OSS_TRUE = @DRIVER_OSS_TRUE@ -DRIVER_SDL_FALSE = @DRIVER_SDL_FALSE@ -DRIVER_SDL_TRUE = @DRIVER_SDL_TRUE@ -DRIVER_SUN_FALSE = @DRIVER_SUN_FALSE@ -DRIVER_SUN_TRUE = @DRIVER_SUN_TRUE@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ESD_CFLAGS = @ESD_CFLAGS@ -ESD_CONFIG = @ESD_CONFIG@ -ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ -GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ -GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@ -GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ -GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ @@ -112,278 +295,212 @@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ -MKINSTALLDIRS = @MKINSTALLDIRS@ +MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ -NO_ASM_FALSE = @NO_ASM_FALSE@ -NO_ASM_TRUE = @NO_ASM_TRUE@ -NO_GDK_PIXBUF_FALSE = @NO_GDK_PIXBUF_FALSE@ -NO_GDK_PIXBUF_TRUE = @NO_GDK_PIXBUF_TRUE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ +PULSE_CFLAGS = @PULSE_CFLAGS@ +PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ -ST_S_JACK_INCLUDES = @ST_S_JACK_INCLUDES@ -ST_S_JACK_LIBS = @ST_S_JACK_LIBS@ -USE_GNOME_FALSE = @USE_GNOME_FALSE@ -USE_GNOME_TRUE = @USE_GNOME_TRUE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ -gnomepath = @gnomepath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ +mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ +sedpath = @sedpath@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ -target = @target@ target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ SUBDIRS = drivers mixers - -bin_PROGRAMS = soundtracker - -soundtracker_SOURCES = \ - audio.c audio.h \ - audioconfig.c audioconfig.h \ - cheat-sheet.c cheat-sheet.h \ - clavier.c clavier.h \ - driver.h driver-in.h driver-out.h \ - endian-conv.c endian-conv.h \ - envelope-box.c envelope-box.h \ - errors.c errors.h \ - event-waiter.c event-waiter.h \ - extspinbutton.c extspinbutton.h \ - file-operations.c file-operations.h \ - gui-settings.c gui-settings.h \ - gui-subs.c gui-subs.h \ - gui.c gui.h \ - gettext.h i18n.h \ - instrument-editor.c instrument-editor.h \ - keys.c keys.h \ - main.c main.h \ - menubar.c menubar.h \ - mixer.h \ - module-info.c module-info.h \ - playlist.c playlist.h \ - poll.c poll.h \ - preferences.c preferences.h \ - recode.c recode.h \ - sample-display.c sample-display.h \ - sample-editor.c sample-editor.h \ - scope-group.c scope-group.h \ - st-subs.c st-subs.h \ - time-buffer.c time-buffer.h \ - tips-dialog.c tips-dialog.h \ - track-editor.c track-editor.h \ - tracker.c tracker.h \ - tracker-settings.c tracker-settings.h \ - transposition.c transposition.h \ - xm.c xm.h \ - xm-player.c xm-player.h \ - tracer.c tracer.h\ -$(am__append_1) $(am__append_2) $(am__append_3) - -soundtracker_LDADD = drivers/libdrivers.a mixers/libmixers.a ${ST_S_JACK_LIBS} - -stdir = $(datadir)/soundtracker - -#INCLUDES = -DDATADIR=\"$(stdir)\" \ -# -DLOCALEDIR=\"$(datadir)/locale\" -INCLUDES = -DLOCALEDIR=\"$(datadir)/locale\" -subdir = app -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -bin_PROGRAMS = soundtracker$(EXEEXT) -PROGRAMS = $(bin_PROGRAMS) - -am__soundtracker_SOURCES_DIST = audio.c audio.h audioconfig.c \ - audioconfig.h cheat-sheet.c cheat-sheet.h clavier.c clavier.h \ - driver.h driver-in.h driver-out.h endian-conv.c endian-conv.h \ +soundtracker_SOURCES = audio-subs.c audio-subs.h audio.c audio.h \ + audioconfig.c audioconfig.h cheat-sheet.c cheat-sheet.h \ + clavier.c clavier.h clock.c clock.h colors.c colors.h \ + customdrawing.c customdrawing.h draw-interlayer.c \ + draw-interlayer.h driver.h endian-conv.c endian-conv.h \ envelope-box.c envelope-box.h errors.c errors.h event-waiter.c \ event-waiter.h extspinbutton.c extspinbutton.h \ file-operations.c file-operations.h gui-settings.c \ - gui-settings.h gui-subs.c gui-subs.h gui.c gui.h gettext.h \ - i18n.h instrument-editor.c instrument-editor.h keys.c keys.h \ - main.c main.h menubar.c menubar.h mixer.h module-info.c \ - module-info.h playlist.c playlist.h poll.c poll.h preferences.c \ - preferences.h recode.c recode.h sample-display.c \ - sample-display.h sample-editor.c sample-editor.h scope-group.c \ + gui-settings.h gui-subs.c gui-subs.h gui.c gui.h history.c \ + history.h instrument-editor.c instrument-editor.h keys.c \ + keys.h main.c main.h marshal.c marshal.h menubar.c menubar.h \ + midi-settings.c mixer.h module-info.c module-info.h playlist.c \ + playlist.h poll.c poll.h preferences.c preferences.h recode.c \ + recode.h sample-display.c sample-display.h sample-editor.c \ + sample-editor.h scalablepic.c scalablepic.h scope-group.c \ scope-group.h st-subs.c st-subs.h time-buffer.c time-buffer.h \ - tips-dialog.c tips-dialog.h track-editor.c track-editor.h \ - tracker.c tracker.h tracker-settings.c tracker-settings.h \ - transposition.c transposition.h xm.c xm.h xm-player.c \ - xm-player.h tracer.c tracer.h scalablepic.c scalablepic.h \ - midi-050.c midi-utils-050.c midi-settings-050.c midi.h \ - midi-settings.h midi-utils.h midi-09x.c midi-utils-09x.c \ - midi-settings-09x.c -@NO_GDK_PIXBUF_FALSE@am__objects_1 = scalablepic.$(OBJEXT) -@DRIVER_ALSA_050_TRUE@am__objects_2 = midi-050.$(OBJEXT) \ -@DRIVER_ALSA_050_TRUE@ midi-utils-050.$(OBJEXT) \ -@DRIVER_ALSA_050_TRUE@ midi-settings-050.$(OBJEXT) -@DRIVER_ALSA_09x_TRUE@am__objects_3 = midi-09x.$(OBJEXT) \ -@DRIVER_ALSA_09x_TRUE@ midi-utils-09x.$(OBJEXT) \ -@DRIVER_ALSA_09x_TRUE@ midi-settings-09x.$(OBJEXT) -am_soundtracker_OBJECTS = audio.$(OBJEXT) audioconfig.$(OBJEXT) \ - cheat-sheet.$(OBJEXT) clavier.$(OBJEXT) endian-conv.$(OBJEXT) \ - envelope-box.$(OBJEXT) errors.$(OBJEXT) event-waiter.$(OBJEXT) \ - extspinbutton.$(OBJEXT) file-operations.$(OBJEXT) \ - gui-settings.$(OBJEXT) gui-subs.$(OBJEXT) gui.$(OBJEXT) \ - instrument-editor.$(OBJEXT) keys.$(OBJEXT) main.$(OBJEXT) \ - menubar.$(OBJEXT) module-info.$(OBJEXT) playlist.$(OBJEXT) \ - poll.$(OBJEXT) preferences.$(OBJEXT) recode.$(OBJEXT) \ - sample-display.$(OBJEXT) sample-editor.$(OBJEXT) \ - scope-group.$(OBJEXT) st-subs.$(OBJEXT) time-buffer.$(OBJEXT) \ - tips-dialog.$(OBJEXT) track-editor.$(OBJEXT) tracker.$(OBJEXT) \ - tracker-settings.$(OBJEXT) transposition.$(OBJEXT) xm.$(OBJEXT) \ - xm-player.$(OBJEXT) tracer.$(OBJEXT) $(am__objects_1) \ - $(am__objects_2) $(am__objects_3) -soundtracker_OBJECTS = $(am_soundtracker_OBJECTS) -soundtracker_DEPENDENCIES = drivers/libdrivers.a mixers/libmixers.a -soundtracker_LDFLAGS = - -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/audio.Po ./$(DEPDIR)/audioconfig.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/cheat-sheet.Po ./$(DEPDIR)/clavier.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/endian-conv.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/envelope-box.Po ./$(DEPDIR)/errors.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/event-waiter.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/extspinbutton.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/file-operations.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/gui-settings.Po ./$(DEPDIR)/gui-subs.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/gui.Po ./$(DEPDIR)/instrument-editor.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/keys.Po ./$(DEPDIR)/main.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/menubar.Po ./$(DEPDIR)/midi-050.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/midi-09x.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/midi-settings-050.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/midi-settings-09x.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/midi-utils-050.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/midi-utils-09x.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/module-info.Po ./$(DEPDIR)/playlist.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/poll.Po ./$(DEPDIR)/preferences.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/recode.Po ./$(DEPDIR)/sample-display.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/sample-editor.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/scalablepic.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/scope-group.Po ./$(DEPDIR)/st-subs.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/time-buffer.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/tips-dialog.Po ./$(DEPDIR)/tracer.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/track-editor.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/tracker-settings.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/tracker.Po ./$(DEPDIR)/transposition.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/xm-player.Po ./$(DEPDIR)/xm.Po -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -DIST_SOURCES = $(am__soundtracker_SOURCES_DIST) - -RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ - ps-recursive install-info-recursive uninstall-info-recursive \ - all-recursive install-data-recursive install-exec-recursive \ - installdirs-recursive install-recursive uninstall-recursive \ - check-recursive installcheck-recursive -DIST_COMMON = $(srcdir)/Makefile.in Makefile.am -DIST_SUBDIRS = $(SUBDIRS) -SOURCES = $(soundtracker_SOURCES) - + tips-dialog.c tips-dialog.h tracer.c tracer.h track-editor.c \ + track-editor.h tracker.c tracker.h tracker-settings.c \ + tracker-settings.h transposition.c transposition.h xm.c xm.h \ + xm-player.c xm-player.h $(am__append_1) +soundtracker_LDADD = drivers/libdrivers.a mixers/libmixers.a +AM_CPPFLAGS = -DLOCALEDIR=\"$(datadir)/locale\" -DDATADIR=\"$(datadir)\" +EXTRA_DIST = marshal.list +CLEANFILES = marshal.c marshal.h all: all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj -$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu app/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) -binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu app/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu app/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(bindir) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \ - $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \ - else :; fi; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ - rm -f $(DESTDIR)$(bindir)/$$f; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) -soundtracker$(EXEEXT): $(soundtracker_OBJECTS) $(soundtracker_DEPENDENCIES) + +soundtracker$(EXEEXT): $(soundtracker_OBJECTS) $(soundtracker_DEPENDENCIES) $(EXTRA_soundtracker_DEPENDENCIES) @rm -f soundtracker$(EXEEXT) - $(LINK) $(soundtracker_LDFLAGS) $(soundtracker_OBJECTS) $(soundtracker_LDADD) $(LIBS) + $(AM_V_CCLD)$(LINK) $(soundtracker_OBJECTS) $(soundtracker_LDADD) $(LIBS) mostlyclean-compile: - -rm -f *.$(OBJEXT) core *.core + -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio-subs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audioconfig.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cheat-sheet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clavier.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colors.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/customdrawing.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/draw-interlayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/endian-conv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/envelope-box.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Po@am__quote@ @@ -393,16 +510,15 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui-settings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui-subs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/history.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/instrument-editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keys.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/marshal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/menubar.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi-050.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi-09x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi-settings-050.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi-settings-09x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi-utils-050.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi-utils-09x.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi-settings.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi-utils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module-info.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/playlist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poll.Po@am__quote@ @@ -424,39 +540,39 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xm.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ -@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ -@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ -@am__fastdepCC_TRUE@ fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ -@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ -@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ -@am__fastdepCC_TRUE@ fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` -uninstall-info-am: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @set fnord $$MAKEFLAGS; amf=$$2; \ +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ @@ -464,152 +580,129 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @set fnord $$MAKEFLAGS; amf=$$2; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ETAGS = etags -ETAGSFLAGS = - -CTAGS = ctags -CTAGSFLAGS = - -tags: TAGS +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ here=`pwd`; \ - if (etags --etags-include --version) >/dev/null 2>&1; then \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ + empty_fix=.; \ else \ include_option=--include; \ + empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ - test -f $$subdir/TAGS && \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$tags$$unique" \ - || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique - -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - -top_distdir = .. -distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkinstalldirs) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ - test -d $(distdir)/$$subdir \ - || mkdir $(distdir)/$$subdir \ - || exit 1; \ - (cd $$subdir && \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" \ - distdir=../$(distdir)/$$subdir \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ @@ -619,8 +712,9 @@ all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: - $(mkinstalldirs) $(DESTDIR)$(bindir) - + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive @@ -631,20 +725,28 @@ installcheck: installcheck-recursive install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi mostlyclean-generic: clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: - -rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." +@SUID_ROOT_FALSE@install-exec-local: clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic mostlyclean-am @@ -659,18 +761,40 @@ dvi-am: +html: html-recursive + +html-am: + info: info-recursive info-am: install-data-am: +install-dvi: install-dvi-recursive + +install-dvi-am: + install-exec-am: install-binPROGRAMS install-exec-local +install-html: install-html-recursive + +install-html-am: + install-info: install-info-recursive +install-info-am: + install-man: +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -690,52 +814,66 @@ ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-info-am +uninstall-am: uninstall-binPROGRAMS -uninstall-info: uninstall-info-recursive +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-binPROGRAMS clean-generic cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-exec-local install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-binPROGRAMS + +.PRECIOUS: Makefile + + +@SUID_ROOT_TRUE@install-exec-local: +@SUID_ROOT_TRUE@ case `uname` in \ +@SUID_ROOT_TRUE@ OpenBSD) \ +@SUID_ROOT_TRUE@ chown root.wheel $(bindir)/soundtracker; \ +@SUID_ROOT_TRUE@ ;; \ +@SUID_ROOT_TRUE@ NetBSD) \ +@SUID_ROOT_TRUE@ chown root.wheel $(bindir)/soundtracker; \ +@SUID_ROOT_TRUE@ ;; \ +@SUID_ROOT_TRUE@ Darwin) \ +@SUID_ROOT_TRUE@ chown root:admin $(bindir)/soundtracker; \ +@SUID_ROOT_TRUE@ ;; \ +@SUID_ROOT_TRUE@ *) \ +@SUID_ROOT_TRUE@ chown root:root $(bindir)/soundtracker; \ +@SUID_ROOT_TRUE@ ;; \ +@SUID_ROOT_TRUE@ esac +@SUID_ROOT_TRUE@ chmod +s $(bindir)/soundtracker +@SUID_ROOT_TRUE@ @echo "" +@SUID_ROOT_TRUE@ @echo "***" +@SUID_ROOT_TRUE@ @echo "*** Installing SoundTracker suid root." +@SUID_ROOT_TRUE@ @echo "*** This improves sound responsivity, but may be a security risk" +@SUID_ROOT_TRUE@ @echo "*** if this is a multi-user machine. See file INSTALL." +@SUID_ROOT_TRUE@ @echo "***" +@SUID_ROOT_TRUE@ @echo "" + +marshal.h: marshal.list + glib-genmarshal --header --prefix=__marshal marshal.list > marshal.h + +marshal.c: marshal.list + glib-genmarshal --body --prefix=__marshal marshal.list > marshal.c + +playlist.c: marshal.h + +sample-display.c: marshal.h + +clavier.c: marshal.h + +tracker.c: marshal.h -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ - clean-binPROGRAMS clean-generic clean-recursive ctags \ - ctags-recursive distclean distclean-compile distclean-generic \ - distclean-recursive distclean-tags distdir dvi dvi-am \ - dvi-recursive info info-am info-recursive install install-am \ - install-binPROGRAMS install-data install-data-am \ - install-data-recursive install-exec install-exec-am \ - install-exec-local install-exec-recursive install-info \ - install-info-am install-info-recursive install-man \ - install-recursive install-strip installcheck installcheck-am \ - installdirs installdirs-am installdirs-recursive \ - maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-recursive pdf pdf-am \ - pdf-recursive ps ps-am ps-recursive tags tags-recursive \ - uninstall uninstall-am uninstall-binPROGRAMS uninstall-info-am \ - uninstall-info-recursive uninstall-recursive - - -install-exec-local: - case `uname` in \ - OpenBSD) \ - chown root.wheel $(bindir)/soundtracker; \ - ;; \ - NetBSD) \ - chown root.wheel $(bindir)/soundtracker; \ - ;; \ - Darwin) \ - chown root:admin $(bindir)/soundtracker; \ - ;; \ - *) \ - chown root:root $(bindir)/soundtracker; \ - ;; \ - esac - chmod +s $(bindir)/soundtracker - @echo "" - @echo "***" - @echo "*** Installing SoundTracker suid root." - @echo "*** This improves sound responsivity, but may be a security risk" - @echo "*** if this is a multi-user machine. See file INSTALL." - @echo "***" - @echo "" # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru soundtracker-0.6.8/app/marshal.list soundtracker-1.0.2~pre2/app/marshal.list --- soundtracker-0.6.8/app/marshal.list 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/marshal.list 2020-01-10 18:46:46.000000000 +0000 @@ -0,0 +1,2 @@ +VOID:INT,INT +VOID:INT,INT,INT,INT diff -Nru soundtracker-0.6.8/app/menubar.c soundtracker-1.0.2~pre2/app/menubar.c --- soundtracker-0.6.8/app/menubar.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/menubar.c 2021-02-13 21:09:25.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GUI (menu bar) * - * Copyright (C) 1999-2003 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,899 +21,594 @@ #include -#include - -#ifndef USE_GNOME -#include "X11/Xlib.h" #include -#endif +#include -#include "i18n.h" -#include "menubar.h" -#include "gui.h" +#include +#include + +#include "audioconfig.h" +#include "cheat-sheet.h" +#include "extspinbutton.h" +#include "file-operations.h" +#include "gui-settings.h" #include "gui-subs.h" -#include "main.h" -#include "st-subs.h" +#include "gui.h" +#include "history.h" +#include "instrument-editor.h" #include "keys.h" +#include "main.h" +#include "menubar.h" +#include "midi-settings.h" #include "module-info.h" #include "preferences.h" +#include "sample-editor.h" #include "scope-group.h" -#include "track-editor.h" -#include "audioconfig.h" -#include "gui-settings.h" +#include "st-subs.h" #include "tips-dialog.h" -#include "transposition.h" -#include "cheat-sheet.h" -#include "file-operations.h" -#include "instrument-editor.h" +#include "track-editor.h" #include "tracker-settings.h" -#include "midi-settings.h" -#include "sample-editor.h" - -#ifdef USE_GNOME -#include -#else -static GtkItemFactory *item_factory; -static GtkAccelGroup *accel_group; -static GtkItemFactoryEntry *menubar_gtk_items = NULL; -#endif - -static gboolean mark_mode_toggle_ignore = FALSE; - -extern ScopeGroup *scopegroup; +#include "transposition.h" -#ifndef USE_GNOME -static GtkWidget *about = NULL; +extern GtkBuilder *gui_builder; -static void -about_close (void) -{ - gtk_widget_destroy(about); - about = NULL; -} -#endif +static GtkWidget* mark_mode; -static void -about_dialog (void) -{ -#ifdef USE_GNOME - const gchar *authors[] = {"Michael Krause ", NULL}; - GtkWidget *about = gnome_about_new("SoundTracker", - VERSION, - "Copyright (C) 1998-2003 Michael Krause", - authors, - "Includes OpenCP player from Niklas Beisert and Tammo Hinrichs.", - NULL); - gtk_widget_show (about); -#else - GtkWidget *label, *button; - - if(about) - gtk_widget_destroy(about); - - about = gtk_dialog_new(); - gtk_window_position (GTK_WINDOW(about), GTK_WIN_POS_CENTER); - gtk_window_set_title(GTK_WINDOW(about), "About SoundTracker"); - - label = gtk_label_new("SoundTracker " VERSION "\n\nCopyright (C) 1998-2003 Michael Krause\n" - "\n\nIncludes OpenCP player from Niklas Beisert and Tammo Hinrichs."); - gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(about)->vbox), 10); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(about)->vbox), label, TRUE, TRUE, 10); - gtk_widget_show(label); - - button = gtk_button_new_with_label (_("Ok")); - GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG(about)->action_area), button, TRUE, TRUE, 10); - gtk_signal_connect_object (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (about_close), 0); - gtk_widget_grab_default (button); - gtk_widget_show (button); - - gtk_widget_show(about); -#endif -} +static gboolean mark_mode_toggle_ignore = FALSE; -static void -menubar_clear_callback (gint reply, - gpointer data) -{ - if(reply == 0) { - if(GPOINTER_TO_INT(data) == 0) { - gui_free_xm(); - gui_new_xm(); - xm->modified = 0; - } else { - gui_play_stop(); - st_clean_song(xm); - gui_init_xm(1); - xm->modified = 0; - } - } -} +extern ScopeGroup* scopegroup; -static void -menubar_clear_clicked (void *a, - gpointer b) +void about_dialog(void) { - if(xm->modified) { - gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), - _("Are you sure you want to do this?\nAll changes will be lost!"), - menubar_clear_callback, - b); + const gchar* const authors[] = { + "Michael Krause ", + "Yury Aliaev ", + "Jon Forsberg ", + "Arthibus Gissehel ", + "Stefan Hager ", + "Maik Naeher ", + "Darin Ohashi ", + "Michael Schwendt ", + "Erik Thiele ", + "Kai Vehmanen ", + "Yuuki Ninomiya ", + "Martin Andersson ", + "Conrad Parker ", + "Tomasz Maka ", + "Nicolas Leveille ", + "Jason Nunn ", + "Luc Tanguay ", + "Tijs van Bakel ", + "Olivier Glorieux ", + "Rikard Bosnjakovic ", + "Fabian Giesen ", + "Felix Bohmann ", + "Aki Kemppainen ", + "Mardy ", + "Thomas Uwe Gruettmueller ", + "Wilbern Cobb ", + "Erik de Castro Lopo ", + "Anthony Van Groningen ", + "Henri Jylkk\303\244 ", + "Frank Knappe ", + "Mathias Meyer ", + "David Binderman ", + "Jaan Pullerits ", + "Olivier Guilyardi ", + "Markku Reunanen ", + "Miroslav Shatlev ", + "Frank Haferkorn ", + "St\303\251phane K. ", + "Matthew Berardi ", + "Bernardo Innocenti ", + NULL }; + const gchar translators[] = "Colin Marquardt \nThomas R. Koll \n" + "Atsushi Yamagata \nYuuki Ninomiya \n" + "Junichi Uekawa \nYuri Bongiorno \n" + "Zbigniew Chyla \n" + "German Jose Gomez Garcia \n" + "Vicente E. Llorens \nMichael Shigorin \n" + "Yury Aliaev \nMichel Robitaille \n" + "europeen \nMatej Erman \n" + "Xos\303\251 Anxo Pereira Torreiro \nChristian Rose \n" + "Denis Lackovic \nKeld Simonsen \n" + "Petter Johan Olsen \nAndrej Kacian \n" + "Steven Michael Murphy \nAysun Kiran \n" + "Clytie Siddall "; + + gchar *license = g_strdup_printf(_("%s is free software: you can redistribute it and/or modify it under the terms " + "of the GNU General Public License as published by the Free Software Foundation; either version 2 " + "of the License, or (at your option) any later version.\n\n" + "%s is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the " + "implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General " + "Public License for more details.\n\n" + "You should have received a copy of the GNU General Public License along with %s" + ". If not, see: http://www.gnu.org/licenses/"), PACKAGE_NAME, PACKAGE_NAME, PACKAGE_NAME); + + gtk_show_about_dialog(GTK_WINDOW(mainwindow), "program_name", PACKAGE_NAME, "version", VERSION, + "authors", authors, "license", license, "wrap-license", TRUE, "copyright", + _("\302\251 1998-2019 Michael Krause\n\302\251 2020 Yury Aliaev\n" + "\n\nIncludes OpenCP player from Niklas Beisert and Tammo Hinrichs."), + "translator-credits", translators, + NULL); + g_free(license); +} + +static void +menubar_clear(gboolean all) +{ + if (all) { + gui_free_xm(); + gui_new_xm(); } else { - menubar_clear_callback(0, b); + gui_play_stop(); + st_clean_song(xm); + gui_init_xm(1, TRUE); } + history_clear(FALSE); + gui_reset_title(); } -static void -menubar_quit_requested_callback (gint reply, - gpointer data) +void menubar_clear_clicked(gpointer b) { - if(reply == 0) { - gtk_main_quit(); - } -} - -void -menubar_quit_requested (void) -{ - if(xm->modified) { - gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), - _("Are you sure you want to quit?\nAll changes will be lost!"), - menubar_quit_requested_callback, - 0); + if (history_get_modified()) { + if (gui_ok_cancel_modal((mainwindow), + _("Are you sure you want to do this? All changes will be lost.\n" + "You even will not be able to revert your action!"))) + menubar_clear(GPOINTER_TO_INT(b)); } else { - menubar_quit_requested_callback(0, NULL); + menubar_clear(GPOINTER_TO_INT(b)); } } -/* Arghl. When will I be able to make GNOME a requirement such as GTK+? */ - -#ifdef USE_GNOME -#define _FUNCMACRO_(name) name (GtkWidget *widget) -#else -#define _FUNCMACRO_(name) name (void *dummy, void *dummy2, GtkWidget *widget) -#endif - -static void -_FUNCMACRO_(menubar_backing_store_toggled) +void menubar_backing_store_toggled(GtkCheckMenuItem* widget) { - gui_settings.gui_use_backing_store = GTK_CHECK_MENU_ITEM(widget)->active; + gui_settings.gui_use_backing_store = gtk_check_menu_item_get_active(widget); tracker_set_backing_store(tracker, gui_settings.gui_use_backing_store); } -static void -_FUNCMACRO_(menubar_scopes_toggled) +void menubar_scopes_toggled(GtkCheckMenuItem* widget) { - gui_settings.gui_display_scopes = GTK_CHECK_MENU_ITEM(widget)->active; + gui_settings.gui_display_scopes = gtk_check_menu_item_get_active(widget); scope_group_enable_scopes(scopegroup, gui_settings.gui_display_scopes); } -static void -_FUNCMACRO_(menubar_splash_toggled) +void menubar_splash_toggled(GtkCheckMenuItem* widget) { - gui_settings.gui_disable_splash = GTK_CHECK_MENU_ITEM(widget)->active; + gui_settings.gui_disable_splash = gtk_check_menu_item_get_active(widget); } -static void -_FUNCMACRO_(menubar_mark_mode_toggled) +void menubar_mark_mode_toggled(GtkCheckMenuItem* widget) { - if(!mark_mode_toggle_ignore) { - gboolean state = GTK_CHECK_MENU_ITEM(widget)->active; - tracker_mark_selection(tracker, state); + if (!mark_mode_toggle_ignore) { + gboolean state = gtk_check_menu_item_get_active(widget); + tracker_mark_selection(tracker, state); } } -static void -_FUNCMACRO_(menubar_save_settings_on_exit_toggled) +void menubar_save_settings_on_exit_toggled(GtkCheckMenuItem* widget) { - gui_settings.save_settings_on_exit = GTK_CHECK_MENU_ITEM(widget)->active; + gui_settings.save_settings_on_exit = gtk_check_menu_item_get_active(widget); } -static void -menubar_save_settings_now (void) +void menubar_save_settings_now(void) { gui_settings_save_config(); keys_save_config(); audioconfig_save_config(); trackersettings_write_settings(); -#if (defined(DRIVER_ALSA_050) || defined(DRIVER_ALSA_09x)) && defined(USE_GNOME) +#if defined(DRIVER_ALSA_MIDI) midi_save_config(); #endif + prefs_save(); } -static void -menubar_handle_cutcopypaste (void *p, guint a) -{ - Tracker *t = tracker; - int ci = gui_get_current_instrument() - 1; - STInstrument *curins = &xm->instruments[ci]; - - switch(a){ - case 0: //Cut - switch(notebook_current_page){ - case NOTEBOOK_PAGE_TRACKER: - track_editor_cut_selection(t); - break; - case NOTEBOOK_PAGE_INSTRUMENT_EDITOR: - case NOTEBOOK_PAGE_MODULE_INFO: - instrument_editor_cut_instrument(curins); - xm_set_modified(1); - instrument_editor_update(); - sample_editor_update(); - modinfo_update_instrument(ci); - break; - case NOTEBOOK_PAGE_SAMPLE_EDITOR: - sample_editor_copy_cut_common(TRUE, TRUE); - xm_set_modified(1); - break; - } - break; - case 1: //Copy - switch(notebook_current_page){ - case NOTEBOOK_PAGE_TRACKER: - track_editor_copy_selection(t); - break; - case NOTEBOOK_PAGE_INSTRUMENT_EDITOR: - case NOTEBOOK_PAGE_MODULE_INFO: - instrument_editor_copy_instrument(curins); - break; - case NOTEBOOK_PAGE_SAMPLE_EDITOR: - sample_editor_copy_cut_common(TRUE, FALSE); - break; - } - break; - case 2: //Paste - switch(notebook_current_page){ - case NOTEBOOK_PAGE_TRACKER: - track_editor_paste_selection(t); - break; - case NOTEBOOK_PAGE_INSTRUMENT_EDITOR: - case NOTEBOOK_PAGE_MODULE_INFO: - instrument_editor_paste_instrument(curins); - xm_set_modified(1); - instrument_editor_update(); - sample_editor_update(); - modinfo_update_instrument(ci); - break; - case NOTEBOOK_PAGE_SAMPLE_EDITOR: - sample_editor_paste_clicked(); - xm_set_modified(1); - break; - } - break; - } -} - -static void -menubar_handle_edit_menu (void *p, - guint a) +void menubar_handle_cutcopypaste(gpointer a) { - Tracker *t = tracker; + static const gchar* signals[] = { "cut-clipboard", "copy-clipboard", "paste-clipboard" }; - static void (* const functions[]) (Tracker *) = { - track_editor_cut_pattern, // 0 - track_editor_copy_pattern, // 1 - track_editor_paste_pattern, // 2 - track_editor_cut_track, // 3 - track_editor_copy_track, // 4 - track_editor_paste_track, // 5 - track_editor_insert_track, // 6 - track_editor_delete_track, // 7 - track_editor_interpolate_fx, // 8 - track_editor_clear_mark_selection, // 9 - track_editor_cut_selection, // 10 - track_editor_copy_selection, // 11 - track_editor_paste_selection, // 12 - track_editor_kill_notes_track, // 13 - NULL, // 14 - NULL, // 15 - NULL, // 16 - NULL, // 17 - NULL, // 18 - NULL, // 19 - }; - -#ifdef USE_GNOME - GtkWidget *active; - GtkMenu *menu = (GtkMenu *)a; - /* Check if it's call from popup */ - if(a > sizeof(functions)/sizeof(functions[0]) && GTK_IS_WIDGET(menu)) { - /* Get active menu */ - active = gtk_object_get_data (GTK_OBJECT (menu), "gnome_popup_menu_active_item"); - /* Get user_data for this menu */ - a = (gint)gtk_object_get_data (GTK_OBJECT (active), GNOMEUIINFO_KEY_UIDATA); - } -#endif + Tracker* t = tracker; - switch(a) { - case 14: - track_editor_cmd_mvalue(t, TRUE); /* increment CMD value */ + STInstrument* curins = &xm->instruments[gui_get_current_instrument() - 1]; + GtkWidget* focus_widget = GTK_WINDOW(mainwindow)->focus_widget; + gint i = GPOINTER_TO_INT(a); + + if (GTK_IS_ENTRY(focus_widget)) { + g_signal_emit_by_name(focus_widget, signals[i], NULL); + return; + } + + switch (i) { + case 0: //Cut + switch (notebook_current_page) { + case NOTEBOOK_PAGE_TRACKER: + if (GUI_EDITING) + track_editor_cut_selection(NULL, t); + break; + case NOTEBOOK_PAGE_INSTRUMENT_EDITOR: + case NOTEBOOK_PAGE_MODULE_INFO: + instrument_editor_cut_instrument(curins); + instrument_editor_update(TRUE); + sample_editor_update(); + break; + case NOTEBOOK_PAGE_SAMPLE_EDITOR: + sample_editor_copy_cut_common(TRUE, TRUE); + break; + } break; - case 15: - track_editor_cmd_mvalue(t, FALSE); /* decrement CMD value */ + case 1: //Copy + switch (notebook_current_page) { + case NOTEBOOK_PAGE_TRACKER: + track_editor_copy_selection(NULL, t); + break; + case NOTEBOOK_PAGE_INSTRUMENT_EDITOR: + case NOTEBOOK_PAGE_MODULE_INFO: + instrument_editor_copy_instrument(curins); + break; + case NOTEBOOK_PAGE_SAMPLE_EDITOR: + sample_editor_copy_cut_common(TRUE, FALSE); + break; + } break; - case 16: - transposition_transpose_selection(t, +1); - break; - case 17: - transposition_transpose_selection(t, -1); - break; - case 18: - transposition_transpose_selection(t, +12); - break; - case 19: - transposition_transpose_selection(t, -12); - break; - - default: - functions[a](t); + case 2: //Paste + switch (notebook_current_page) { + case NOTEBOOK_PAGE_TRACKER: + if (GUI_EDITING) + track_editor_paste_selection(NULL, t, TRUE); + break; + case NOTEBOOK_PAGE_INSTRUMENT_EDITOR: + case NOTEBOOK_PAGE_MODULE_INFO: + instrument_editor_paste_instrument(curins); + instrument_editor_update(TRUE); + sample_editor_update(); + break; + case NOTEBOOK_PAGE_SAMPLE_EDITOR: + sample_editor_paste_clicked(); + break; + } break; } } -static void -menubar_settings_tracker_next_font (void) +void menubar_handle_edit_menu(gpointer a) +{ + if (GUI_EDITING) { + Tracker* t = tracker; + + switch (GPOINTER_TO_INT(a)) { + case 0: + track_editor_cmd_mvalue(t, TRUE); /* increment CMD value */ + break; + case 1: + track_editor_cmd_mvalue(t, FALSE); /* decrement CMD value */ + break; + case 2: + transposition_transpose_selection(t, +1); + break; + case 3: + transposition_transpose_selection(t, -1); + break; + case 4: + transposition_transpose_selection(t, +12); + break; + case 5: + transposition_transpose_selection(t, -12); + break; + default: + break; + } + } +} + +void menubar_settings_tracker_next_font(void) { trackersettings_cycle_font_forward(TRACKERSETTINGS(trackersettings)); } -static void -menubar_settings_tracker_prev_font (void) +void menubar_settings_tracker_prev_font(void) { trackersettings_cycle_font_backward(TRACKERSETTINGS(trackersettings)); } -static void -menubar_toggle_perm_wrapper (GtkObject *object, gboolean all) +void menubar_toggle_perm_wrapper(gpointer all) { - track_editor_toggle_permanentness(tracker, all); + track_editor_toggle_permanentness(tracker, GPOINTER_TO_INT(all)); } -#ifndef USE_GNOME +void menubar_mute_toggle(void) +{ + scope_group_toggle_channel(scopegroup, tracker->cursor_ch); +} -/* Define GNOME stuff for our GNOME->GtkItemFactory converter. */ +void menubar_solo_channel(void) +{ + scope_group_solo_channel(scopegroup, tracker->cursor_ch); +} -typedef struct GnomeUIInfo { - int type; - gchar *title; - gpointer dummy1; - gpointer func; - gpointer funcparam; - gpointer dummy2; - int dummy3, dummy4; - int shortcut; - int shortcutmod; - gpointer dummy5; - GtkWidget *widget; -} GnomeUIInfo; - -#define GNOME_APP_UI_END 0 -#define GNOME_APP_UI_ITEM 1 -#define GNOME_APP_UI_SEPARATOR 2 -#define GNOME_APP_UI_TOGGLEITEM 3 -#define GNOME_APP_UI_SUBTREE 4 - -#define GNOME_APP_PIXMAP_STOCK 0 -#define GNOME_APP_PIXMAP_NONE 0 - -#define GNOME_STOCK_MENU_OPEN 0 -#define GNOME_STOCK_MENU_SAVE_AS 0 -#define GNOME_STOCK_MENU_QUIT 0 -#define GNOME_STOCK_MENU_NEW 0 -#define GNOME_STOCK_MENU_CUT 0 -#define GNOME_STOCK_MENU_COPY 0 -#define GNOME_STOCK_MENU_PASTE 0 -#define GNOME_STOCK_MENU_PREF 0 -#define GNOME_STOCK_MENU_SAVE 0 -#define GNOME_STOCK_MENU_ABOUT 0 -#define GNOME_STOCK_MENU_BOOK_RED 0 - -#define GNOMEUIINFO_SEPARATOR { GNOME_APP_UI_SEPARATOR, "-", } -#define GNOMEUIINFO_END { GNOME_APP_UI_END, } -#define GNOMEUIINFO_SUBTREE(X,Y) { GNOME_APP_UI_SUBTREE, (X), (Y) } +void menubar_all_channels_on(void) +{ + scope_group_all_channels_on(scopegroup); +} +void menubar_init_prefs() +{ + GtkWidget* display_scopes = gui_get_widget(gui_builder, "settings_display_scopes", XML_FILE); + GtkWidget* backing_store = gui_get_widget(gui_builder, "settings_tracker_flicker_free", XML_FILE); +#if !defined(DRIVER_ALSA) + GtkWidget* settings_midi = gui_get_widget(gui_builder, "settings_midi", XML_FILE); #endif +#if USE_SNDFILE == 0 && !defined(AUDIOFILE_VERSION) + GtkWidget* savewav = gui_get_widget(gui_builder, "file_save_wav", XML_FILE); +#endif + GtkWidget* disable_splash = gui_get_widget(gui_builder, "settings_disable_splash", XML_FILE); + GtkWidget* save_onexit = gui_get_widget(gui_builder, "settings_save_on_exit", XML_FILE); -static GnomeUIInfo file_menu[] = { - { GNOME_APP_UI_ITEM, N_("_Open..."), NULL, fileops_open_dialog, (gpointer)DIALOG_LOAD_MOD, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN, 'O', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("Save _as..."), NULL, fileops_open_dialog, (gpointer)DIALOG_SAVE_MOD, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE_AS, 'A', GDK_CONTROL_MASK, NULL }, - - GNOMEUIINFO_SEPARATOR, - -#define SAVE_MOD_AS_WAV_POSITION 3 - { GNOME_APP_UI_ITEM, N_("Save Module as _WAV..."), NULL, fileops_open_dialog, (gpointer)DIALOG_SAVE_MOD_AS_WAV, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE_AS, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("Save XM without samples..."), NULL, fileops_open_dialog, (gpointer)DIALOG_SAVE_SONG_AS_XM, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE_AS, 0, 0, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("_Quit"), NULL, menubar_quit_requested, NULL, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_QUIT, 'Q', GDK_CONTROL_MASK, NULL }, + mark_mode = gui_get_widget(gui_builder, "edit_selection_mark_mode", XML_FILE); - GNOMEUIINFO_END -}; + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(display_scopes), gui_settings.gui_display_scopes); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(backing_store), gui_settings.gui_use_backing_store); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(disable_splash), gui_settings.gui_disable_splash); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(save_onexit), gui_settings.save_settings_on_exit); -static GnomeUIInfo module_menu[] = { - { GNOME_APP_UI_ITEM, N_("Clear _All"), NULL, menubar_clear_clicked, (gpointer)0, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_NEW, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("Clear _Patterns Only"), NULL, menubar_clear_clicked, (gpointer)1, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_NEW, 0, 0, NULL }, +#if USE_SNDFILE == 0 && !defined(AUDIOFILE_VERSION) + gtk_widget_set_sensitive(savewav, FALSE); +#endif +#if !defined(DRIVER_ALSA) + gtk_widget_set_sensitive(settings_midi, FALSE); +#endif +} - GNOMEUIINFO_SEPARATOR, +void menubar_block_mode_set(const gboolean state, const gboolean ignore) +{ + mark_mode_toggle_ignore = ignore; + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mark_mode), state); + mark_mode_toggle_ignore = FALSE; +} - { GNOME_APP_UI_ITEM, N_("_Optimize Module"), NULL, modinfo_optimize_module, (gpointer)0, NULL, - GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, +static void _menubar_delete_unused_instruments(gboolean ans_ok) +{ + gint i; - GNOMEUIINFO_END -}; + for (i = 0; i < ST_NUM_INSTRUMENTS(xm); i++) { + if (!st_instrument_used_in_song(xm, i + 1) && + /* Don't try to remove already empty instruments */ + st_instrument_num_save_samples(&xm->instruments[i]) != 0 && + //!!! query keep names + xm->instruments[i].utf_name[0] != 0) { + if (!ans_ok) { + if (history_query_irreversible(mainwindow)) + ans_ok = TRUE; + else + return; + } + st_clean_instrument(&xm->instruments[i], NULL); + } + } -static GnomeUIInfo edit_pattern_menu[] = { - { GNOME_APP_UI_ITEM, N_("C_ut"), NULL, menubar_handle_edit_menu, (gpointer)0, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CUT, GDK_F3, GDK_MOD1_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("_Copy"), NULL, menubar_handle_edit_menu, (gpointer)1, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_COPY, GDK_F4, GDK_MOD1_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("_Paste"), NULL, menubar_handle_edit_menu, (gpointer)2, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PASTE, GDK_F5, GDK_MOD1_MASK, NULL }, + if (ans_ok) { + sample_editor_update(); + instrument_editor_update(FALSE); + modinfo_update_all(); + } +} - GNOMEUIINFO_END -}; +void menubar_delete_unused_instruments(void) +{ + _menubar_delete_unused_instruments(FALSE); +} -static GnomeUIInfo edit_track_menu[] = { - { GNOME_APP_UI_ITEM, N_("C_ut"), NULL, menubar_handle_edit_menu, (gpointer)3, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CUT, GDK_F3, GDK_SHIFT_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("_Copy"), NULL, menubar_handle_edit_menu, (gpointer)4, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_COPY, GDK_F4, GDK_SHIFT_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("_Paste"), NULL, menubar_handle_edit_menu, (gpointer)5, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PASTE, GDK_F5, GDK_SHIFT_MASK, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("_Kill notes"), NULL, menubar_handle_edit_menu, (gpointer)13, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_NEW, 'K', GDK_CONTROL_MASK, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("_Insert track"), NULL, menubar_handle_edit_menu, (gpointer)6, NULL, - GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("_Delete track"), NULL, menubar_handle_edit_menu, (gpointer)7, NULL, - GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("Increment cmd value"), NULL, menubar_handle_edit_menu, (gpointer)14, NULL, - GNOME_APP_PIXMAP_NONE, GNOME_STOCK_MENU_NEW, '=', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("Decrement cmd value"), NULL, menubar_handle_edit_menu, (gpointer)15, NULL, - GNOME_APP_PIXMAP_NONE, GNOME_STOCK_MENU_NEW, '-', GDK_CONTROL_MASK, NULL }, +/* Move unused patterns to the end of the pattern space */ +static void _menubar_pack_patterns(gboolean ans_ok) +{ + int i, j, last, used; - GNOMEUIINFO_END -}; + /* Get number of last used pattern and number of used patterns */ + for (i = 0, last = 0, used = 0; i < ST_NUM_PATTERNS(xm); i++) { + if (st_is_pattern_used_in_song(xm, i)) { + last = i; + used++; + } + } -static GnomeUIInfo edit_selection_menu[] = { - { GNOME_APP_UI_TOGGLEITEM, N_("_Mark mode"), NULL, menubar_mark_mode_toggled, NULL, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'B', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("C_lear block marks"), NULL, menubar_handle_edit_menu, (gpointer)9, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'B', GDK_CONTROL_MASK | GDK_SHIFT_MASK, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("_Interpolate effects"), NULL, menubar_handle_edit_menu, (gpointer)8, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'I', GDK_CONTROL_MASK, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("Transpose half-note up"), NULL, menubar_handle_edit_menu, (gpointer)16, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'Q', GDK_MOD1_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("Transpose half-note down"), NULL, menubar_handle_edit_menu, (gpointer)17, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'A', GDK_MOD1_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("Transpose octave up"), NULL, menubar_handle_edit_menu, (gpointer)18, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'Q', GDK_MOD1_MASK | GDK_SHIFT_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("Transpose octave down"), NULL, menubar_handle_edit_menu, (gpointer)19, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'A', GDK_MOD1_MASK | GDK_SHIFT_MASK, NULL }, + if (used <= last) { + if (!ans_ok) + ans_ok = history_query_irreversible(mainwindow); + if (ans_ok) { + /* Put unused patterns to the end */ + for (i = 0; i < used;) + if (!st_is_pattern_used_in_song(xm, i)) { + for (j = i; j < last; j++) + st_exchange_patterns(xm, j, j + 1); + } else { + i++; + } + gui_playlist_initialize(); + } + } +} - GNOMEUIINFO_END +void menubar_pack_patterns(void) +{ + _menubar_pack_patterns(FALSE); +} -}; +/* Clear patterns which are not in the playlist */ +static void _menubar_clear_unused_patterns(gboolean ans_ok) +{ + gint i; -static GnomeUIInfo edit_menu[] = { - { GNOME_APP_UI_ITEM, N_("C_ut"), NULL, menubar_handle_cutcopypaste, (gpointer)0, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CUT, 'X', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("_Copy"), NULL, menubar_handle_cutcopypaste, (gpointer)1, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_COPY, 'C', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("P_aste"), NULL, menubar_handle_cutcopypaste, (gpointer)2, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PASTE, 'V', GDK_CONTROL_MASK, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_TOGGLEITEM, N_("_Jazz Edit Mode"), NULL, track_editor_toggle_jazz_edit, (gpointer)0, NULL, - GNOME_APP_PIXMAP_NONE, 0, ' ', GDK_SHIFT_MASK, NULL }, - - { GNOME_APP_UI_TOGGLEITEM, N_("_Record keyreleases"), NULL, track_editor_toggle_insert_noteoff, - (gpointer)0, NULL, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("Transp_osition..."), NULL, transposition_dialog, (gpointer)0, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'T', GDK_CONTROL_MASK, NULL }, - - GNOMEUIINFO_SEPARATOR, - - GNOMEUIINFO_SUBTREE (N_("_Pattern"), edit_pattern_menu), - GNOMEUIINFO_SUBTREE (N_("_Track"), edit_track_menu), - GNOMEUIINFO_SUBTREE (N_("_Selection"), edit_selection_menu), + for (i = 0; i < ST_NUM_PATTERNS(xm); i++) + if (!st_is_pattern_used_in_song(xm, i) && !st_is_empty_pattern(&xm->patterns[i])) { + if (!ans_ok) { + if (history_query_irreversible(mainwindow)) + ans_ok = TRUE; + else + return; + } + st_clear_pattern(&xm->patterns[i]); + } - GNOMEUIINFO_END -}; + tracker_redraw(tracker); +} -#ifdef USE_GNOME +void menubar_clear_unused_patterns(void) +{ + _menubar_clear_unused_patterns(FALSE); +} -static GnomeUIInfo track_editor_popup_edit_selection_menu[] = { - { GNOME_APP_UI_ITEM, N_("C_lear block marks"), NULL, menubar_handle_edit_menu, (gpointer)9, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'B', GDK_CONTROL_MASK | GDK_SHIFT_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("C_ut"), NULL, menubar_handle_edit_menu, (gpointer)10, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CUT, 'X', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("_Copy"), NULL, menubar_handle_edit_menu, (gpointer)11, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_COPY, 'C', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("_Paste"), NULL, menubar_handle_edit_menu, (gpointer)12, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PASTE, 'V', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("_Interpolate effects"), NULL, menubar_handle_edit_menu, (gpointer)8, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'I', GDK_CONTROL_MASK, NULL }, +/* Optimize -- clear everything unused */ - GNOMEUIINFO_END -}; +void menubar_optimize_module(void) +{ + gchar* infbuf; + int a, b, c, d, e; -GnomeUIInfo track_editor_popup_menu[] = { - GNOMEUIINFO_SUBTREE (N_("_Pattern"), edit_pattern_menu), - GNOMEUIINFO_SUBTREE (N_("_Track"), edit_track_menu), - GNOMEUIINFO_SUBTREE (N_("_Selection"), track_editor_popup_edit_selection_menu), - GNOMEUIINFO_END -}; + d = ST_NUM_PATTERNS(xm); + e = ST_NUM_INSTRUMENTS(xm); + for (a = 0, b = 0, d = 0; a < ST_NUM_PATTERNS(xm); a++) { + if (st_is_pattern_used_in_song(xm, a)) + d++; + else if (!st_is_empty_pattern(&xm->patterns[a])) + b++; + } + for (a = 0, c = 0, e = 0; a < ST_NUM_INSTRUMENTS(xm); a++) { + if (st_instrument_used_in_song(xm, a + 1)) + e++; + else if (st_instrument_num_save_samples(&xm->instruments[a]) != 0 && + //!!! query keep names + xm->instruments[a].utf_name[0] != 0) + c++; + } -#endif + if (b == 0 && c == 0) { + static GtkWidget* dialog = NULL; -static GnomeUIInfo pattern_menu[] = { - { GNOME_APP_UI_ITEM, N_("_Find Unused Pattern"), NULL, modinfo_find_unused_pattern, (gpointer)0, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'F', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("_Copy Current to Unused Pattern"), NULL, modinfo_copy_to_unused_pattern, (gpointer)0, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'G', GDK_CONTROL_MASK, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("C_lear Unused Patterns"), NULL, modinfo_clear_unused_patterns, (gpointer)0, NULL, - GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("_Pack Patterns"), NULL, modinfo_pack_patterns, (gpointer)0, NULL, - GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("_Save Current Pattern"), NULL, fileops_open_dialog, (gpointer)DIALOG_SAVE_PATTERN, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE_AS, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("L_oad Pattern"), NULL, fileops_open_dialog, (gpointer)DIALOG_LOAD_PATTERN, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN, 0, 0, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("Sh_rink Current Pattern"), NULL, gui_shrink_pattern, (gpointer)0, NULL, - GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("_Expand Current Pattern"), NULL, gui_expand_pattern, (gpointer)0, NULL, - GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, + gui_info_dialog(&dialog, _("Nothing to be optimized in this module"), FALSE); + return; + } - GNOMEUIINFO_END -}; + infbuf = g_strdup_printf(_("Unused patterns: %d (used: %d)" + "\nUnused instruments: %d (used: %d)\n\nClear unused and reorder playlist?\n" + "Note that you will not be able to revert this and previous actions!"), + b, d, c, e); -static GnomeUIInfo track_menu[] = { - { GNOME_APP_UI_ITEM, N_("_Toggle Current Channel Permanentness"), NULL, menubar_toggle_perm_wrapper, (gpointer)FALSE, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'P', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("Toggle _All Channels Permanentness"), NULL, menubar_toggle_perm_wrapper, (gpointer)TRUE, NULL, - GNOME_APP_PIXMAP_NONE, 0, 'P', GDK_CONTROL_MASK | GDK_SHIFT_MASK, NULL }, + if (gui_ok_cancel_modal(mainwindow, infbuf)) { + _menubar_clear_unused_patterns(TRUE); + _menubar_delete_unused_instruments(TRUE); + _menubar_pack_patterns(TRUE); + history_clear(TRUE); + } + g_free(infbuf); +} - GNOMEUIINFO_END +struct vlm { + guchar ins, smp, value; }; +typedef struct { + guint n; + struct vlm volumes[1]; +} AmpAdjArg; -static GnomeUIInfo instrument_menu[] = { - { GNOME_APP_UI_ITEM, N_("_Load XI..."), NULL, fileops_open_dialog, (gpointer)DIALOG_LOAD_INSTRUMENT, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("_Save XI..."), NULL, fileops_open_dialog, (gpointer)DIALOG_SAVE_INSTRUMENT, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE_AS, 0, 0, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("_Clear Current"), NULL, instrument_editor_clear_current_instrument, NULL, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_NEW, 0, 0, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("_Delete Unused Instruments"), NULL, modinfo_delete_unused_instruments, (gpointer)0, NULL, - GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, +static void +amp_adjust_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + XM* my_xm = data; + AmpAdjArg* aaa = arg; + guint i; - GNOMEUIINFO_END -}; + for (i = 0; i < aaa->n; i++) { + STSample* s = &my_xm->instruments[aaa->volumes[i].ins].samples[aaa->volumes[i].smp]; + guchar vol = s->volume; -static GnomeUIInfo settings_tracker_menu[] = { - { GNOME_APP_UI_TOGGLEITEM, N_("_Flicker-free scrolling"), 0, menubar_backing_store_toggled, 0, 0, - GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, - - { GNOME_APP_UI_ITEM, N_("_Previous font"), NULL, menubar_settings_tracker_prev_font, (gpointer)0, NULL, - GNOME_APP_PIXMAP_NONE, 0, GDK_KP_Subtract, GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("_Next font"), NULL, menubar_settings_tracker_next_font, (gpointer)0, NULL, - GNOME_APP_PIXMAP_NONE, 0, GDK_KP_Add, GDK_CONTROL_MASK, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("Change preferred _accidental type"), 0, gui_accidentals_clicked, 0, 0, - GNOME_APP_PIXMAP_NONE, 0, 'S', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("Change effect column editing _direction"), 0, gui_direction_clicked, 0, 0, - GNOME_APP_PIXMAP_NONE, 0, 'D', GDK_CONTROL_MASK, NULL }, + s->volume = aaa->volumes[i].value; + aaa->volumes[i].value = vol; + } + sample_editor_update(); +} - GNOMEUIINFO_END -}; +static void +amp_adjust(GtkWidget* spin, GtkWidget* dialog) +{ + guint i, j, k, n; + gfloat amp = gtk_spin_button_get_value(GTK_SPIN_BUTTON(spin)); + AmpAdjArg* arg; + gsize asize; -// Take care to adjust the indices in menubar_init_prefs() when reordering stuff here! -static GnomeUIInfo settings_menu[] = { - { GNOME_APP_UI_TOGGLEITEM, N_("Display _Oscilloscopes"), 0, menubar_scopes_toggled, 0, 0, - GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, - - GNOMEUIINFO_SUBTREE (N_("_Tracker"), settings_tracker_menu), - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("_Keyboard Configuration..."), NULL, keys_dialog, NULL, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PREF, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("_Audio Configuration..."), NULL, audioconfig_dialog, NULL, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PREF, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("_GUI Configuration..."), NULL, gui_settings_dialog, NULL, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PREF, 0, 0, NULL }, - /* Define a constant for the index of the MIDI settings item. - Will allow to deactivate (grey out) this menu item - if MIDI is not supported. See menubar_create(). */ -#define SETTINGS_MENU_MIDI_INDEX 6 - { GNOME_APP_UI_ITEM, N_("_MIDI Configuration..."), NULL, midi_settings_dialog, NULL, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PREF, 0, 0, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_TOGGLEITEM, N_("Disable splash screen"), 0, menubar_splash_toggled, 0, 0, - GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("_Save Settings now"), NULL, menubar_save_settings_now, NULL, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE, 0, 0, NULL }, - { GNOME_APP_UI_TOGGLEITEM, N_("Save Settings on _Exit"), 0, menubar_save_settings_on_exit_toggled, 0, 0, - GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, + gtk_widget_hide(dialog); - GNOMEUIINFO_END -}; + for (i = 0, n = 0; i < ST_NUM_INSTRUMENTS(xm); i++) + n += st_instrument_num_samples(&xm->instruments[i]); + if (!n) /* Module without samples, nothing to do */ + return; -static GnomeUIInfo help_menu[] = { - { GNOME_APP_UI_ITEM, N_("_About..."), NULL, about_dialog, NULL, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ABOUT, 0, 0, NULL }, - - GNOMEUIINFO_SEPARATOR, - - { GNOME_APP_UI_ITEM, N_("Show _Tips..."), NULL, tips_dialog_open, NULL, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BOOK_RED, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("_XM Effects..."), NULL, cheat_sheet_dialog, NULL, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BOOK_RED, 'H', GDK_CONTROL_MASK, NULL }, + asize = sizeof(AmpAdjArg) + sizeof(struct vlm) * (n - 1); + arg = g_malloc(asize); + arg->n = n; - GNOMEUIINFO_END -}; + for (i = 0, k = 0; i < ST_NUM_INSTRUMENTS(xm); i++) { + STInstrument* instr = &xm->instruments[i]; -static GnomeUIInfo main_menu[] = { - GNOMEUIINFO_SUBTREE (N_("_File"), file_menu), - GNOMEUIINFO_SUBTREE (N_("_Module"), module_menu), - GNOMEUIINFO_SUBTREE (N_("_Edit"), edit_menu), - GNOMEUIINFO_SUBTREE (N_("_Pattern"), pattern_menu), - GNOMEUIINFO_SUBTREE (N_("_Track"), track_menu), - GNOMEUIINFO_SUBTREE (N_("_Instrument"), instrument_menu), - GNOMEUIINFO_SUBTREE (N_("_Settings"), settings_menu), - GNOMEUIINFO_SUBTREE (N_("_Help"), help_menu), - GNOMEUIINFO_END -}; + for (j = 0 ; j < ST_NUM_SAMPLES(instr); j++) { + if (instr->samples[j].sample.length != 0) { + guchar oldvol, newvol; -void -menubar_init_prefs () -{ -#ifndef USE_GNOME - gtk_item_factory_parse_rc(prefs_get_filename("non-gnome-accels")); -#endif - - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(settings_menu[0].widget), gui_settings.gui_display_scopes); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(settings_tracker_menu[0].widget), gui_settings.gui_use_backing_store); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(settings_menu[8].widget), gui_settings.gui_disable_splash); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(settings_menu[10].widget), gui_settings.save_settings_on_exit); - - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(edit_menu[5].widget), TRUE); // Record aftertouch -#if USE_SNDFILE == 0 && defined (NO_AUDIOFILE) - gtk_widget_set_sensitive(file_menu[SAVE_MOD_AS_WAV_POSITION].widget, FALSE); -#endif -#if ! (defined(DRIVER_ALSA_050) || defined(DRIVER_ALSA_09x)) - gtk_widget_set_sensitive(settings_menu[SETTINGS_MENU_MIDI_INDEX].widget, - FALSE); -#endif -} + arg->volumes[k].ins = i; + arg->volumes[k].smp = j; + oldvol = arg->volumes[k++].value = instr->samples[j].volume; + newvol = lrintf((gfloat)instr->samples[j].volume * amp); + if (oldvol && !newvol) + newvol = 1; + instr->samples[j].volume = newvol <= 64 ? newvol : 64; + } + } + } -void -menubar_block_mode_set(gboolean state) -{ - mark_mode_toggle_ignore = TRUE; - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(edit_selection_menu[0].widget), state); - mark_mode_toggle_ignore = FALSE; + history_log_action(HISTORY_ACTION_POINTER, _("Samples' volume adjusting"), + 0, amp_adjust_undo, xm, asize, arg); + sample_editor_update(); } -#ifdef USE_GNOME - -void -menubar_create (GtkWidget *window, GtkWidget *destbox) +static void +amp_response(GtkWidget* dialog, gint resp, GtkWidget* spin) { - gnome_app_create_menus(GNOME_APP(window), main_menu); + if (resp == GTK_RESPONSE_OK) + amp_adjust(spin, dialog); + else + gtk_widget_hide(dialog); } -void -menubar_write_accels () +void menubar_adjust_volumes_dialog(void) { - // GNOME does this for us -} - -#else + static GtkWidget *dialog = NULL, *amp_spin; -/* + if (!dialog) { + GtkWidget *vbox, *mainbox, *thing; + GtkObject* adj; - Coming up is the code that generates the non-GNOME menu bar from the - GNOME menu structure. + dialog = gtk_dialog_new_with_buttons(_("All samples' volume adjusting"), GTK_WINDOW(mainwindow), + GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); - Earlier versions of SoundTracker used an extra array of - GtkItemFactoryEntry's -- problem: the translators had to do double - work, and if some of the entries were not translated (in a new - release, for example), the whole menu bar translation had to be - disabled, because non-translated entries could interfere with - translated ones. + vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + mainbox = gtk_hbox_new(FALSE, 2); + gtk_box_pack_start(GTK_BOX(vbox), mainbox, TRUE, TRUE, 0); - */ + thing = gtk_label_new(_("Amplification")); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 0); -static void -strip_underscores (char *dest, const char *src) -{ - char c; + adj = gtk_adjustment_new(1.0, 0.1, 10.0, 0.1, 1.0, 0.0); + amp_spin = extspinbutton_new(GTK_ADJUSTMENT(adj), 1.0, 1, FALSE); + gtk_box_pack_end(GTK_BOX(mainbox), amp_spin, FALSE, FALSE, 0); + g_signal_connect_after(amp_spin, "activate", + G_CALLBACK(amp_adjust), dialog); - while((c = *src++)) { - if(c != '_') { - *dest++ = c; - } - } - - *dest = '\0'; -} - -/* This function recursively builds an array of GtkItemFactoryEntry's - from the GNOME menu structure. The GtkItemFactoryEntry array is in - the global variable 'menubar_gtk_items'. */ - -static int -menubar_gnome_to_gtk (GnomeUIInfo *gnometree, - int n, - gchar *nameprefix) -{ - gchar buf[256], acc[100]; - char *xname; - - for(; gnometree->type != GNOME_APP_UI_END; gnometree++, n++) { - menubar_gtk_items = g_renew(GtkItemFactoryEntry, menubar_gtk_items, n + 1); - - strcpy(buf, nameprefix); - strcat(buf, "/"); - - acc[0] = 0; - if(gnometree->shortcutmod & GDK_MOD1_MASK) { - strcat(acc, ""); - } - if(gnometree->shortcutmod & GDK_SHIFT_MASK) { - strcat(acc, ""); - } - if(gnometree->shortcutmod & GDK_CONTROL_MASK) { - strcat(acc, ""); - } - if((xname = XKeysymToString(gnometree->shortcut))) { - strcat(acc, xname); - } - menubar_gtk_items[n].accelerator = g_strdup(acc); - - strcat(buf, _(gnometree->title)); - menubar_gtk_items[n].path = g_strdup(buf); - - switch(gnometree->type) { - case GNOME_APP_UI_SUBTREE: - menubar_gtk_items[n].callback = (GtkItemFactoryCallback)gnometree->func; - menubar_gtk_items[n].callback_action = - GPOINTER_TO_UINT(gnometree->funcparam); - menubar_gtk_items[n].item_type = ""; - strip_underscores(buf, buf); - n = menubar_gnome_to_gtk((GnomeUIInfo*)gnometree->dummy1, n + 1, buf) - 1; - break; - case GNOME_APP_UI_ITEM: - menubar_gtk_items[n].callback = (GtkItemFactoryCallback)gnometree->func; - menubar_gtk_items[n].callback_action = - GPOINTER_TO_UINT(gnometree->funcparam); - menubar_gtk_items[n].item_type = NULL; - break; - case GNOME_APP_UI_TOGGLEITEM: - menubar_gtk_items[n].callback = (GtkItemFactoryCallback)gnometree->func; - menubar_gtk_items[n].callback_action = - GPOINTER_TO_UINT(gnometree->funcparam); - menubar_gtk_items[n].item_type = ""; - break; - case GNOME_APP_UI_SEPARATOR: - menubar_gtk_items[n].callback = NULL; - menubar_gtk_items[n].callback_action = 0; - menubar_gtk_items[n].item_type = ""; - break; - default: - break; - } - } - - return n; -} - -/* After generating the GTK+ menu, this function gets GtkWidget - pointers to all the menu items and stores them in the GNOME - array. */ - -static int -menubar_gnome_to_gtk_get_widgets (GnomeUIInfo *gnometree, - int n) -{ - for(; gnometree->type != GNOME_APP_UI_END; gnometree++, n++) { - switch(gnometree->type) { - case GNOME_APP_UI_SUBTREE: - n = menubar_gnome_to_gtk_get_widgets((GnomeUIInfo*)gnometree->dummy1, n+1) - 1; - break; - case GNOME_APP_UI_ITEM: - case GNOME_APP_UI_TOGGLEITEM: - strip_underscores(menubar_gtk_items[n].path, menubar_gtk_items[n].path); - gnometree->widget = gtk_item_factory_get_widget(item_factory, menubar_gtk_items[n].path); - g_free(menubar_gtk_items[n].path); - break; - default: - break; - } - } - - return n; -} - -void -menubar_create (GtkWidget *window, GtkWidget *destbox) -{ - GtkWidget *thing; - int n; - - accel_group = gtk_accel_group_new (); - - item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, - "
", - accel_group); - - n = menubar_gnome_to_gtk(main_menu, 0, ""); - - gtk_item_factory_create_items (item_factory, n, menubar_gtk_items, NULL); - - menubar_gnome_to_gtk_get_widgets(main_menu, 0); - g_free(menubar_gtk_items); - - gtk_accel_group_attach (accel_group, GTK_OBJECT (window)); - - thing = gtk_item_factory_get_widget (item_factory, "
"); - gtk_box_pack_start(GTK_BOX(destbox), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); -} + gui_dialog_connect_data(dialog, G_CALLBACK(amp_response), amp_spin); + gtk_widget_show_all(dialog); + } -void -menubar_write_accels () -{ - gtk_item_factory_dump_rc(prefs_get_filename("non-gnome-accels"), NULL, TRUE); + gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); + gtk_window_present(GTK_WINDOW(dialog)); + gtk_widget_grab_focus(amp_spin); } - -#endif - diff -Nru soundtracker-0.6.8/app/menubar.h soundtracker-1.0.2~pre2/app/menubar.h --- soundtracker-0.6.8/app/menubar.h 2003-08-04 08:59:41.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/menubar.h 2020-01-10 18:46:46.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GUI (menu bar) (header) * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,23 +26,15 @@ #include -void -menubar_create (GtkWidget *window, GtkWidget *destbox); +void menubar_init_prefs(); -void -menubar_quit_requested (void); +void menubar_block_mode_set(const gboolean state, const gboolean ignore); -void -menubar_init_prefs (); +void menubar_clear_clicked(gpointer b); -void -menubar_write_accels (); +void menubar_handle_cutcopypaste(gpointer a); -void -menubar_block_mode_set(gboolean state); - -#ifdef USE_GNOME -extern GnomeUIInfo track_editor_popup_menu[]; -#endif +void menubar_handle_edit_menu(gpointer a); +void menubar_toggle_perm_wrapper(gpointer all); #endif /* ST_MENUBAR_H */ diff -Nru soundtracker-0.6.8/app/midi-050.c soundtracker-1.0.2~pre2/app/midi-050.c --- soundtracker-0.6.8/app/midi-050.c 2003-05-17 11:33:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/midi-050.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,561 +0,0 @@ -/* - * Copyright (C) 2000 Luc Tanguay - * Copyright (C) 1998-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* - * For ALSA driver, we use the ALSA sequencer API (not the rawmidi API). - */ - -#include - -#include -#include -#include -#include "midi.h" -#include "midi-utils.h" -#include "midi-settings.h" -#include "gui.h" -#include "tracker.h" -#include "xm.h" -#include "gui-settings.h" - -/********************************************************* - * Macro to transform a MIDI note (pitch) into a XM note - * and vice versa. - * - * Translation goes like this: - * MIDI XM - * note pitch note - * C-0 12 1 - * B-7 107 96 - * - * i.e. xm_note = midi_pitch - (12+1) - * - * NOTE: C-4 (middle C) is MIDI note 60. - * - * The sustain pedal is used to input XM note off. - ********************************************************/ - -#define midi_note_2_xm_note(inote) ((inote)-12+1) -#define xm_note_2_midi_note(inote) ((inote)-1+12) - -/* Other macros. */ - -#define SND_SEQ_CTRL_SUSTAIN 0x40 -#define MIDI_VELOCITY_MAX 127 - - -extern Tracker *tracker; /* from track-editor.c */ - -/* Handle to sequencer device. */ - -static snd_seq_t *midi_handle = NULL; -static gint midi_file_tag = -1; - -/* Count the number of notes on to later turn them off gracefully...*/ - -static int nb_notes_on = 0; - -/* Local functions prototypes */ - -static void midi_in_cb (gpointer data, int fd, GdkInputCondition condition); -static int set_seq_name( snd_seq_t *handle); -static void close_handle( snd_seq_t *handle); -static void midi_process_note_on( snd_seq_ev_note *pnote); -static void midi_process_controller( snd_seq_ev_ctrl *pcontrol); -static void midi_process_program_change( snd_seq_ev_ctrl *pcontrol); - -/************************************************************************/ - -/*********************************************** - * Create and initialize the MIDI device. - * - * We create a sequencer client and port, - * then connect the kernel client to our user-level client. - * Finally we setup a callback function to handle MIDI events. - */ - -void midi_init() { - int rc; - snd_seq_port_info_t port; - snd_seq_port_subscribe_t sub; - int client; - - - if (midi_handle != NULL ) { - if (IS_MIDI_DEBUG_ON) { - g_print( "Reinitializing MIDI input\n"); - } - - if (midi_file_tag >= 0) { - gdk_input_remove( midi_file_tag); - midi_file_tag = -1; - } - - close_handle( midi_handle); - midi_handle = NULL; - } - - /* Open the sequencer device, in non-block mode. - Don't use O_NONBLOCK here, it crashes the application - as for ALSA 0.5.5. (LT 15-mar-2000) */ - - rc = snd_seq_open( &midi_handle, SND_SEQ_OPEN_IN); - if (rc < 0) { - g_warning( "error opening ALSA MIDI input stream (%s)\n", - snd_strerror(rc)); - return; - } - - /* Set nonblock mode i.e. enable==0. */ - - rc = snd_seq_block_mode( midi_handle, 0); - if (rc < 0) { - close_handle( midi_handle); - midi_handle = NULL; - g_warning( "error disabling sequencer block mode (%s)\n", - snd_strerror(rc)); - return; - } - - /* Get client id. Needed to subscribe to the kernel-level client. */ - - client = snd_seq_client_id( midi_handle); - - if (client < 0) { - close_handle( midi_handle); - midi_handle = NULL; - g_warning( "error naming sequencer client (%s)\n", snd_strerror(client)); - return; - } - - - /* Set client name. Visible with 'cat /proc/asound/seq/clients'. */ - - rc = set_seq_name( midi_handle); - - if (rc < 0) { - close_handle( midi_handle); - midi_handle = NULL; - g_warning( "error naming sequencer client (%s)\n",snd_strerror(rc)); - return; - } - - /* Create a port for our user-level client. */ - - memset( &port, 0, sizeof(port)); - strcpy( port.name, "tracker"); - port.capability = SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_WRITE; - port.capability |= SND_SEQ_PORT_CAP_SUBS_WRITE; /* necessary??? */ - port.type = SND_SEQ_PORT_TYPE_APPLICATION; - - rc = snd_seq_create_port( midi_handle, &port); - - if (rc < 0) { - close_handle( midi_handle); - midi_handle = NULL; - g_warning( "error creating sequencer port (%s)\n", snd_strerror(rc)); - return; - } - - /* Subscribe to the kernel client. */ - - memset( &sub, 0, sizeof(sub)); - sub.sender.client = midi_settings.input.client; - sub.sender.port = midi_settings.input.port; - sub.dest.client = client; - sub.dest.port = port.port; - - rc = snd_seq_subscribe_port( midi_handle, &sub); - - if (rc < 0) { - close_handle( midi_handle); - midi_handle = NULL; - g_warning( "error subscribing to client %d port %d (%s)\n", - sub.sender.client, sub.sender.port, snd_strerror(rc)); - return; - } - - /* Install callback to process MIDI input. */ - - midi_file_tag = gdk_input_add( snd_seq_file_descriptor( midi_handle), - GDK_INPUT_READ, - (GdkInputFunction)midi_in_cb, - midi_handle); - if (midi_file_tag < 0) { - close_handle( midi_handle); - midi_handle = NULL; - - g_warning( "error installing MIDI input callback (%s)\n", - g_strerror(midi_file_tag)); - return; - } - - if (IS_MIDI_DEBUG_ON) { - g_print( "MIDI input initialized\n"); - } - - return; - -} /* midi_init() */ - -/************************************************************************ - ************************* local functions ****************************** - ************************************************************************/ - -/************************************************** - * Callback for MIDI input events. - * - * NOTE: - * before leaving, "data" must be freed. - * It was created in snd_seq_event_input(). - */ - -static void midi_in_cb (gpointer data, int fd, GdkInputCondition condition) -{ - snd_seq_t *handle = (snd_seq_t *)data; - snd_seq_event_t *pev; - int rc; - - /* Perform sanity checks. */ - - if ((int)condition != GDK_INPUT_READ) { - g_print( "wrong condition (%d). %d was expected\n", - condition, GDK_INPUT_READ); - return; - } - - if (handle == NULL) { - g_print( "NULL handle detected\n"); - return; - } - - /* Process MIDI event. Don't forget to free the event after usage. */ - - rc = snd_seq_event_input( handle, &pev); - if (rc < 0) { - g_print("unable to get event"); - return; - } - - switch (pev->type) { - case SND_SEQ_EVENT_NOTEOFF: - /* Simulate a note on event. */ - pev->data.note.velocity = 0; - /* no break here. Go to next case...*/ - case SND_SEQ_EVENT_NOTE: - case SND_SEQ_EVENT_NOTEON: - if (IS_MIDI_DEBUG_ON) { - midi_print_event(pev); - } - midi_process_note_on( &(pev->data.note)); - break; - - case SND_SEQ_EVENT_CONTROLLER: - if (IS_MIDI_DEBUG_ON) { - midi_print_event(pev); - } - midi_process_controller( &(pev->data.control)); - break; - - case SND_SEQ_EVENT_PGMCHANGE: - if (IS_MIDI_DEBUG_ON) { - midi_print_event(pev); - } - midi_process_program_change( &(pev->data.control)); - break; - - default: - if (IS_MIDI_DEBUG_ON) { - /* Some events (like SND_SEQ_EVENT_SENSING) are not printed - by the print_event routine. */ - midi_print_event(pev); - } - break; - } - - rc = snd_seq_free_event( pev); - if (rc < 0) { - g_print("unable to free event"); - return; - } - - return; - -} /* midi_in_cb() */ - -/***************************************** - * Set name of our sequencer client. - */ - -static int set_seq_name(snd_seq_t *handle) -{ - int err; - snd_seq_client_info_t info; - - memset(&info, 0, sizeof(info)); - info.client = snd_seq_client_id(handle); - info.type = USER_CLIENT; - snprintf(info.name, sizeof(info.name), "SoundTracker(%i)", getpid()); - err = snd_seq_set_client_info(handle, &info); - if (err < 0) { - fprintf(stderr, "Set client info error: %s\n", snd_strerror(err)); - return -1; - } - - return 0; - -} /* set_seq_name() */ - -/********************************** - * Close sequencer handle. - */ - -static void close_handle(snd_seq_t *handle) -{ - int rc; - - rc = snd_seq_close( handle); - if (rc < 0) { - g_print( "error closing handle (%s)\n", snd_strerror(rc)); - } - - return; - -} /* close_handle() */ - -/******************************************************* - * Process MIDI program change event. - * Called from the MIDI input callback. - * - * Change the XM instrument. - */ - -static void midi_process_program_change( snd_seq_ev_ctrl *pcontrol) -{ - /* In XM, instrument number is from 1 to 127. - 0 is reserved. */ - - if (pcontrol->value > 0) { - gui_set_current_instrument(pcontrol->value); - } - - if ( 0 ) { - g_print( "program change: param %#x, channel %d, value %#x\n", - pcontrol->param, pcontrol->channel, pcontrol->value); - } - - return; - -} /* midi_process_program_change() */ - -/******************************************************* - * Process MIDI controller event. - * Called from the MIDI input callback. - * - * If we receive Sustain event, transform it into a XM note off. - */ - -static void midi_process_controller( snd_seq_ev_ctrl *pcontrol) -{ - snd_seq_ev_note note; - - - switch (pcontrol->param) { - case SND_SEQ_CTRL_SUSTAIN: - /* Build a pseudo-note. */ - - memset( ¬e, 0, sizeof(note)); - note.note = xm_note_2_midi_note(XM_PATTERN_NOTE_OFF); - if (midi_settings.input.channel_enabled) { - note.channel = pcontrol->channel; - } - - /* Based on MIDI standard, a value less than 63 means - sustain off. */ - - if (pcontrol->value < 63) { - note.velocity = 0; - } else { - note.velocity = MIDI_VELOCITY_MAX; - } - midi_process_note_on( ¬e); - break; - - default: - if ( 0 ) { - g_print( "control event not processed %#x\n", pcontrol->param); - } - break; - } - - return; - -} /* midi_process_controller() */ - - -/******************************************************* - * Process MIDI note ON. - * Called from the MIDI input callback (most of the time). - * - * If the note velocity is 0, just turn off the sound. Don't - * see it as a XM note off event. - * - * We keep track on the number of note ON events. With slow fingers - * on the MIDI controller, it is easy to press a second key before - * releasing the previous one. If we did turned the note off when - * a MIDI note off was received (i.e. when the first finger released - * the first key), we would turn off the sound of the second - * note. With the counter, the note off is done at the right time, - * when the last key is released... - */ - -static void midi_process_note_on( snd_seq_ev_note *pnote) -{ - gint note; - int channel; - int volume; - gboolean note_on = pnote->velocity > 0 ? 1 : 0; - - /* Set local value for channel. */ - - if (midi_settings.input.channel_enabled) { - channel = (int)pnote->channel; - } else { - channel = tracker->cursor_ch; - } - - /* Set local value for volume. */ - /* The value -1 means don't change the volume in the pattern. */ - - if (midi_settings.input.volume_enabled) { - volume = (int)pnote->velocity; - /* Since XM volume range is limited, adjust it here. */ - if (volume < XM_NOTE_VOLUME_MIN) { - volume = XM_NOTE_VOLUME_MIN; - } else if (volume > XM_NOTE_VOLUME_MAX) { - volume = XM_NOTE_VOLUME_MAX; - } - } else { - volume = -1; - } - - /* Perform some validation on the event. - - is the note a valid XM note ? - - is the channel in the valid range of channels ? - */ - - note = midi_note_2_xm_note(pnote->note); - - if (note != XM_PATTERN_NOTE_OFF && (note < XM_PATTERN_NOTE_MIN || note > XM_PATTERN_NOTE_MAX)) { - g_print("note out of range\n"); - return; - } - - if (channel > tracker->num_channels) { - g_warning( "Channel out of range"); - return; - } - - if ( 0 ) { - g_print( "note %d velocity %d channel %d, xmnote %d\n", - pnote->note, pnote->velocity, - channel, - note); - } - - /* If necessary, jump to channel */ - - if (tracker->cursor_ch != channel) { - int diff = channel - tracker->cursor_ch; - - /*g_warning("MIDI channel and current channel are not the same..."); */ - - tracker_step_cursor_channel( tracker, diff); - } - - /* Play the note. Record it if we're in the track editor. */ - - if ( note_on ) { - int row; - XMNote *xmnote; - - /* Increment the number of notes on. */ - - nb_notes_on++; - - /* Play the note in the channel specified by the MIDI channel. */ - - gui_play_note( channel, note); - - /* Give warning when MIDI channel and cursor channel are different. */ - - if(tracker->cursor_ch != channel) { - g_warning( "MIDI channel and current channel are not the same..."); - } - - /* Edit track if: - 1- we're in the track editor tab, - 2- edit mode is active... - */ - - if ( !GUI_EDITING || notebook_current_page != NOTEBOOK_PAGE_TRACKER) { - return; - } - - /* Current position in channel. */ - - row = tracker->patpos; - - /* Get and set current XM note pitch. */ - - xmnote = &(tracker->curpattern->channels[channel][row]); - - xmnote->note = note; - xmnote->instrument = gui_get_current_instrument(); - if ( volume >= 0 ) { - xmnote->volume = volume; - } - - /* Redraw screen and if not in ASYNCEDIT mode, - jump to next position in the channel. */ - - tracker_redraw_current_row(tracker); - if (!ASYNCEDIT) { - tracker_step_cursor_row(tracker, gui_get_current_jump_value()); - } - - /* Don't forget: the XM has been changed... */ - - xm_set_modified(1); - - } else { - /* Decrement the number of note on. - If it is 0, then turn the note off in the track (channel). */ - - nb_notes_on--; - - if (nb_notes_on <= 0) { - gui_play_note_keyoff( channel); - nb_notes_on = 0; - } - } - - return; - -} /* midi_process_note_on() */ diff -Nru soundtracker-0.6.8/app/midi-09x.c soundtracker-1.0.2~pre2/app/midi-09x.c --- soundtracker-0.6.8/app/midi-09x.c 2005-05-07 11:29:05.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/midi-09x.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,646 +0,0 @@ -/* - * Copyright (C) 2000 Luc Tanguay - * Copyright (C) 1998-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/* - * For ALSA driver, we use the ALSA sequencer API (not the rawmidi API). - */ - -#include - -#include -#include -#include -#include -#include "midi.h" -#include "midi-utils.h" -#include "midi-settings.h" -#include "gui.h" -#include "tracker.h" -#include "xm.h" -#include "gui-settings.h" - -/********************************************************* - * Macro to transform a MIDI note (pitch) into a XM note - * and vice versa. - * - * Translation goes like this: - * MIDI XM - * note pitch note - * C-0 12 1 - * B-7 107 96 - * - * i.e. xm_note = midi_pitch - (12+1) - * - * NOTE: C-4 (middle C) is MIDI note 60. - * - * The sustain pedal is used to input XM note off. - ********************************************************/ - -#define midi_note_2_xm_note(inote) ((inote)-12+1) -#define xm_note_2_midi_note(inote) ((inote)-1+12) - -/* Other macros. */ - -#define SND_SEQ_CTRL_SUSTAIN 0x40 -#define MIDI_VELOCITY_MAX 127 - - -extern Tracker *tracker; /* from track-editor.c */ - -/* Handle to sequencer device. */ - -static snd_seq_t *midi_handle = NULL; -static gint midi_file_tag = -1; -static GIOChannel *midi_channel; - -/* Count the number of notes on to later turn them off gracefully...*/ - -static int nb_notes_on = 0; - -/* Local functions prototypes */ - -static void close_handle( snd_seq_t *handle); -static void midi_process_note_on( snd_seq_ev_note_t *pnote); -static void midi_process_controller( snd_seq_ev_ctrl_t *pcontrol); -static void midi_process_program_change( snd_seq_ev_ctrl_t *pcontrol); -static gint midi_get_fd( snd_seq_t *handle); -static gint midi_add_to_main_loop( snd_seq_t *handle); - -gboolean midi_channel_ready( GIOChannel *src, GIOCondition cond, gpointer data); -void midi_channel_destroy( gpointer data); - - -/******************************************************************* - * Called when the IO channel associated with - * the MIDI handle is destroyed. - */ - -void midi_channel_destroy( gpointer data) -{ - if (IS_MIDI_DEBUG_ON) { - g_print( "MIDI IO channel destroyed...\n"); - } -} - -/******************************************************************* - * Get file descriptor of MIDI seq. handle. - * Returns -1 on error. - */ - -static gint -midi_get_fd( snd_seq_t *seq_handle) -{ - int npfd; - struct pollfd *pfd; - int rc; - - - g_return_val_if_fail( seq_handle != NULL, -1); - - npfd = snd_seq_poll_descriptors_count(seq_handle, POLLIN); - - if (IS_MIDI_DEBUG_ON) { - g_message("Number of FDs = %d\n", npfd); - } - - if ( npfd != 1 ) { - g_warning("Number of FDs is not 1...\n"); - return -1; - } - - pfd = (struct pollfd *)alloca(npfd * sizeof(struct pollfd)); - rc = snd_seq_poll_descriptors(seq_handle, pfd, npfd, POLLIN); - if ( rc != 1 ) { - g_warning("Number of FDs retrieved is not 1...\n"); - } - - return pfd->fd; -} - -/**************************************************** - * Hook up the MIDI sequencer to GTK main loop. - */ - -static gint midi_add_to_main_loop( snd_seq_t *handle) -{ - gint fd; - int rc; - - - /* Get the file descriptor associated with the seq. - * Will be used to let GDK monitor MIDI input. - */ - - fd = midi_get_fd( midi_handle); - if (IS_MIDI_DEBUG_ON) { - g_print("FD = %d\n", fd); - } - - /* Install callback to process MIDI input. */ - - midi_channel = g_io_channel_unix_new(fd); - - g_io_add_watch_full( midi_channel, - G_PRIORITY_HIGH, - G_IO_IN|G_IO_ERR|G_IO_HUP, - midi_channel_ready, - midi_handle, /*user data */ - midi_channel_destroy); - - /* Filter some MIDI events... - * Let pass only interessting events... - */ - - rc = 0; - rc = rc + snd_seq_set_client_event_filter( midi_handle, SND_SEQ_EVENT_NOTE); - rc = rc + snd_seq_set_client_event_filter( midi_handle, SND_SEQ_EVENT_NOTEON); - rc = rc + snd_seq_set_client_event_filter( midi_handle, SND_SEQ_EVENT_NOTEOFF); - rc = rc + snd_seq_set_client_event_filter( midi_handle, SND_SEQ_EVENT_CONTROLLER); - rc = rc + snd_seq_set_client_event_filter( midi_handle, SND_SEQ_EVENT_PGMCHANGE); - - if (rc != 0) { - g_print("Unable to set event filter(s) on MIDI input stream...\n"); - } - - return 0; -} - -/*********************************************** - * Create and initialize the MIDI device. - * - * We create a sequencer client and port, - * then connect the kernel client to our user-level client. - * Finally we setup a callback function to handle MIDI events. - */ - -void midi_init() { - int rc; - snd_seq_port_subscribe_t *port_sub = NULL; - int client; - int port; - char *str = NULL; - - - /* Close handle if already opened. - * Stop monitoring MIDI file descriptor. - */ - - if (midi_handle != NULL ) { - if (IS_MIDI_DEBUG_ON) { - g_print( "Reinitializing MIDI input\n"); - } - - if (midi_file_tag >= 0) { - gdk_input_remove( midi_file_tag); - midi_file_tag = -1; - } - - close_handle( midi_handle); - midi_handle = NULL; - } - - /* Open the sequencer device, in non-block mode. */ - - rc = snd_seq_open( &midi_handle, "default", SND_SEQ_OPEN_INPUT, 0); - - if (rc < 0) { - g_warning( "error opening ALSA MIDI input stream (%s)\n", snd_strerror(rc)); - return; - } - - /* Get the client number of the sequencer client. - Will be used to connect ST and the kernel-level sequencer device. - Without this, we would need an external program like aconnect to - connect ST and the sequencer device. */ - - client = snd_seq_client_id( midi_handle); - - if (IS_MIDI_DEBUG_ON) { - g_print("Soundtracker client id : %d\n", client); - } - - if (client < 0) { - close_handle( midi_handle); - g_warning("Get client info error: %s\n", snd_strerror(rc)); - return; - } - - /* Set client name. Visible with 'cat /proc/asound/seq/clients'. */ - - str = g_strdup_printf("SoundTracker-%d", getpid()); - rc = snd_seq_set_client_name(midi_handle, str); - if (rc < 0) { - close_handle( midi_handle); - g_warning("Set client info error: %s\n", snd_strerror(rc)); - return; - } - - /* Create a port for our user-level client. - * The port number will be the destination port - * when we subscribe to the ALSA seq. - */ - - str = g_strdup_printf("SoundTracker-%d-%d", getpid(), 0 /* port number */); - port = snd_seq_create_simple_port( midi_handle, str, - SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE, - SND_SEQ_PORT_TYPE_APPLICATION); - - if (port < 0) { - close_handle( midi_handle); - midi_handle = NULL; - g_warning( "error creating sequencer port (%s)\n", snd_strerror(port)); - return; - } - - /* If auto-connect is enabled, - subscribe to the kernel-level client. - The kernel-level client is specified in the MIDI configuration - dialog. - If auto-connect is disabled, the user will have to connect - soundtracker MIDI port with kernel MIDI port by another mean, - e.g. aconnect. - */ - - if (midi_settings.input.auto_connect == 1) { - snd_seq_addr_t sub_addr; /* don't need to malloc this struct. */ - - - /* Allocate port_sub on stack. Don't need to 'free'. */ - - snd_seq_port_subscribe_alloca(&port_sub); - - /* First, set the sender info. The sender is the own - * who emits MIDI data i.e. the ALSA driver in this case. - */ - - sub_addr.client = midi_settings.input.client; - sub_addr.port = midi_settings.input.port; - - if (IS_MIDI_DEBUG_ON) { - g_print("Kernel client : %d\n", midi_settings.input.client); - g_print("Kernel port : %d\n", midi_settings.input.port); - } - - snd_seq_port_subscribe_set_sender(port_sub, &sub_addr); - - /* Second, set the destination i.e. Soundtracker. */ - - sub_addr.client = client; - sub_addr.port = port; - snd_seq_port_subscribe_set_dest(port_sub, &sub_addr); - - rc = snd_seq_subscribe_port( midi_handle, port_sub); - if (rc < 0) { - close_handle( midi_handle); - midi_handle = NULL; - g_warning( "error subscribing sequencer port (%s)\n", snd_strerror(rc)); - return; - } - } - - midi_file_tag = midi_add_to_main_loop( midi_handle); - - if (midi_file_tag < 0) { - close_handle( midi_handle); - midi_handle = NULL; - - g_warning( "error installing MIDI input callback (%s)\n", - g_strerror(midi_file_tag)); - return; - } - - if (IS_MIDI_DEBUG_ON) { - g_print( "MIDI input initialized\n"); - } - - return; - -} /* midi_init() */ - -/************************************************** - * Callback for MIDI input events. - * - * NOTE: - * before leaving, "data" must be freed. - * It was created in snd_seq_event_input(). - */ - -gboolean midi_channel_ready( GIOChannel *channel, GIOCondition cond, gpointer data) -{ - snd_seq_t *handle = (snd_seq_t *)data; - snd_seq_event_t *ev; - int rc; - - if (cond != G_IO_IN) { - g_print( "MIDI IO channel condition not G_IO_IN.\n"); - return FALSE; - } - - g_return_val_if_fail( handle != NULL, FALSE); - - do { - /* Process MIDI event. Don't forget to free the event after usage. */ - - rc = snd_seq_event_input( handle, &ev); - if (rc < 0) { - g_print("unable to get event"); - return TRUE; - } - - switch (ev->type) { - case SND_SEQ_EVENT_NOTEOFF: - /* Simulate a note on event. */ - ev->data.note.velocity = 0; - /* no break here. Go to next case...*/ - case SND_SEQ_EVENT_NOTE: - case SND_SEQ_EVENT_NOTEON: - if (IS_MIDI_DEBUG_ON) { - midi_print_event(ev); - } - midi_process_note_on( &(ev->data.note)); - break; - - case SND_SEQ_EVENT_CONTROLLER: - if (IS_MIDI_DEBUG_ON) { - midi_print_event(ev); - } - midi_process_controller( &(ev->data.control)); - break; - - case SND_SEQ_EVENT_PGMCHANGE: - if (IS_MIDI_DEBUG_ON) { - midi_print_event(ev); - } - midi_process_program_change( &(ev->data.control)); - break; - - default: - if (IS_MIDI_DEBUG_ON) { - /* Some events (like SND_SEQ_EVENT_SENSING) are not printed - by the print_event routine. */ - midi_print_event(ev); - } - break; - } - - snd_seq_free_event(ev); - - } while (snd_seq_event_input_pending(handle,0) > 0); - - return TRUE; -} - - -/********************************** - * Close sequencer handle. - */ - -static void close_handle(snd_seq_t *handle) -{ - int rc; - - rc = snd_seq_close( handle); - if (rc < 0) { - g_print( "error closing handle (%s)\n", snd_strerror(rc)); - } - - return; - -} /* close_handle() */ - -/******************************************************* - * Process MIDI program change event. - * Called from the MIDI input callback. - * - * Change the XM instrument. - */ - -static void midi_process_program_change( snd_seq_ev_ctrl_t *pcontrol) -{ - /* In XM, instrument number is from 1 to 127. - 0 is reserved. */ - - if (pcontrol->value > 0) { - gui_set_current_instrument(pcontrol->value); - } - - if ( 0 ) { - g_print( "program change: param %#x, channel %d, value %#x\n", - pcontrol->param, pcontrol->channel, pcontrol->value); - } - - return; - -} /* midi_process_program_change() */ - -/******************************************************* - * Process MIDI controller event. - * Called from the MIDI input callback. - * - * If we receive Sustain event, transform it into a XM note off. - */ - -static void midi_process_controller( snd_seq_ev_ctrl_t *pcontrol) -{ - snd_seq_ev_note_t note; - - - switch (pcontrol->param) { - case SND_SEQ_CTRL_SUSTAIN: - /* Build a pseudo-note. */ - - memset( ¬e, 0, sizeof(note)); - note.note = xm_note_2_midi_note(XM_PATTERN_NOTE_OFF); - if (midi_settings.input.channel_enabled) { - note.channel = pcontrol->channel; - } - - /* Based on MIDI standard, a value less than 63 means - sustain off. */ - - if (pcontrol->value < 63) { - note.velocity = 0; - } else { - note.velocity = MIDI_VELOCITY_MAX; - } - midi_process_note_on( ¬e); - break; - - default: - if ( 0 ) { - g_print( "control event not processed %#x\n", pcontrol->param); - } - break; - } - - return; - -} /* midi_process_controller() */ - - -/******************************************************* - * Process MIDI note ON. - * Called from the MIDI input callback (most of the time). - * - * If the note velocity is 0, just turn off the sound. Don't - * see it as a XM note off event. - * - * We keep track on the number of note ON events. With slow fingers - * on the MIDI controller, it is easy to press a second key before - * releasing the previous one. If we did turned the note off when - * a MIDI note off was received (i.e. when the first finger released - * the first key), we would turn off the sound of the second - * note. With the counter, the note off is done at the right time, - * when the last key is released... - */ - -static void midi_process_note_on( snd_seq_ev_note_t *pnote) -{ - gint note; - int channel; - int volume; - gboolean note_on = pnote->velocity > 0 ? 1 : 0; - - /* Set local value for channel. */ - - if (midi_settings.input.channel_enabled) { - channel = (int)pnote->channel; - } else { - channel = tracker->cursor_ch; - } - - /* Set local value for volume. */ - /* The value -1 means don't change the volume in the pattern. */ - - if (midi_settings.input.volume_enabled) { - volume = (int)pnote->velocity; - /* Since XM volume range is limited, adjust it here. */ - if (volume < XM_NOTE_VOLUME_MIN) { - volume = XM_NOTE_VOLUME_MIN; - } else if (volume > XM_NOTE_VOLUME_MAX) { - volume = XM_NOTE_VOLUME_MAX; - } - } else { - volume = -1; - } - - /* Perform some validation on the event. - - is the note a valid XM note ? - - is the channel in the valid range of channels ? - */ - - note = midi_note_2_xm_note(pnote->note); - - if (note != XM_PATTERN_NOTE_OFF && (note < XM_PATTERN_NOTE_MIN || note > XM_PATTERN_NOTE_MAX)) { - g_print("note out of range\n"); - return; - } - - if (channel > tracker->num_channels) { - g_warning( "Channel out of range"); - return; - } - - if ( 0 ) { - g_print( "note %d velocity %d channel %d, xmnote %d\n", - pnote->note, pnote->velocity, - channel, - note); - } - - /* If necessary, jump to channel */ - - if (tracker->cursor_ch != channel) { - int diff = channel - tracker->cursor_ch; - - /*g_warning("MIDI channel and current channel are not the same..."); */ - - tracker_step_cursor_channel( tracker, diff); - } - - /* Play the note. Record it if we're in the track editor. */ - - if ( note_on ) { - int row; - XMNote *xmnote; - - /* Increment the number of notes on. */ - - nb_notes_on++; - - /* Play the note in the channel specified by the MIDI channel. */ - - gui_play_note( channel, note); - - /* Give warning when MIDI channel and cursor channel are different. */ - - if(tracker->cursor_ch != channel) { - g_warning( "MIDI channel and current channel are not the same..."); - } - - /* Edit track if: - 1- we're in the track editor tab, - 2- edit mode is active... - */ - - if ( !GUI_EDITING || notebook_current_page != NOTEBOOK_PAGE_TRACKER) { - return; - } - - /* Current position in channel. */ - - row = tracker->patpos; - - /* Get and set current XM note pitch. */ - - xmnote = &(tracker->curpattern->channels[channel][row]); - - xmnote->note = note; - xmnote->instrument = gui_get_current_instrument(); - if ( volume >= 0 ) { - xmnote->volume = volume; - } - - /* Redraw screen and if not in ASYNCEDIT mode, - jump to next position in the channel. */ - - tracker_redraw_current_row(tracker); - if (!ASYNCEDIT) { - tracker_step_cursor_row(tracker, gui_get_current_jump_value()); - } - - /* Don't forget: the XM has been changed... */ - - xm_set_modified(1); - - } else { - /* Decrement the number of note on. - If it is 0, then turn the note off in the track (channel). */ - - nb_notes_on--; - - if (nb_notes_on <= 0) { - gui_play_note_keyoff( channel); - nb_notes_on = 0; - } - } - - return; - -} /* midi_process_note_on() */ diff -Nru soundtracker-0.6.8/app/midi.c soundtracker-1.0.2~pre2/app/midi.c --- soundtracker-0.6.8/app/midi.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/midi.c 2021-02-15 18:21:45.000000000 +0000 @@ -0,0 +1,650 @@ +/* + * Copyright (C) 2000 Luc Tanguay + * Copyright (C) 1998-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/* + * For ALSA driver, we use the ALSA sequencer API (not the rawmidi API). + */ + +#include + +#include +#include + +#include + +#include "gui-settings.h" +#include "gui.h" +#include "history.h" +#include "midi-settings.h" +#include "midi-utils.h" +#include "midi.h" +#include "tracker.h" +#include "xm.h" + +/********************************************************* + * Macro to transform a MIDI note (pitch) into a XM note + * and vice versa. + * + * Translation goes like this: + * MIDI XM + * note pitch note + * C-0 12 1 + * B-7 107 96 + * + * i.e. xm_note = midi_pitch - (12+1) + * + * NOTE: C-4 (middle C) is MIDI note 60. + * + * The sustain pedal is used to input XM note off. + ********************************************************/ + +#define midi_note_2_xm_note(inote) ((inote)-12 + 1) +#define xm_note_2_midi_note(inote) ((inote)-1 + 12) + +/* Other macros. */ + +#define SND_SEQ_CTRL_SUSTAIN 0x40 +#define MIDI_VELOCITY_MAX 127 + +extern Tracker* tracker; /* from track-editor.c */ + +/* Handle to sequencer device. */ + +static snd_seq_t* midi_handle = NULL; +static gint midi_file_tag = -1; +static GIOChannel* midi_channel; + +/* Count the number of notes on to later turn them off gracefully...*/ + +static int nb_notes_on = 0; + +/* Local functions prototypes */ + +static void close_handle(snd_seq_t* handle); +static void midi_process_note_on(snd_seq_ev_note_t* pnote); +static void midi_process_controller(snd_seq_ev_ctrl_t* pcontrol); +static void midi_process_program_change(snd_seq_ev_ctrl_t* pcontrol); +static gint midi_get_fd(snd_seq_t* handle); +static gint midi_add_to_main_loop(snd_seq_t* handle); + +gboolean midi_channel_ready(GIOChannel* src, GIOCondition cond, gpointer data); +void midi_channel_destroy(gpointer data); + +/******************************************************************* + * Called when the IO channel associated with + * the MIDI handle is destroyed. + */ + +void midi_channel_destroy(gpointer data) +{ + if (IS_MIDI_DEBUG_ON) { + g_print("MIDI IO channel destroyed...\n"); + } +} + +/******************************************************************* + * Get file descriptor of MIDI seq. handle. + * Returns -1 on error. + */ + +static gint +midi_get_fd(snd_seq_t* seq_handle) +{ + int npfd; + struct pollfd* pfd; + int rc; + + g_return_val_if_fail(seq_handle != NULL, -1); + + npfd = snd_seq_poll_descriptors_count(seq_handle, POLLIN); + + if (IS_MIDI_DEBUG_ON) { + g_message("Number of FDs = %d\n", npfd); + } + + if (npfd != 1) { + g_warning("Number of FDs is not 1...\n"); + return -1; + } + + pfd = (struct pollfd*)alloca(npfd * sizeof(struct pollfd)); + rc = snd_seq_poll_descriptors(seq_handle, pfd, npfd, POLLIN); + if (rc != 1) { + g_warning("Number of FDs retrieved is not 1...\n"); + } + + return pfd->fd; +} + +/**************************************************** + * Hook up the MIDI sequencer to GTK main loop. + */ + +static gint midi_add_to_main_loop(snd_seq_t* handle) +{ + gint fd, rc, retcode; + + /* Get the file descriptor associated with the seq. + * Will be used to let GDK monitor MIDI input. + */ + + fd = midi_get_fd(midi_handle); + if (IS_MIDI_DEBUG_ON) { + g_print("FD = %d\n", fd); + } + + /* Install callback to process MIDI input. */ + + midi_channel = g_io_channel_unix_new(fd); + + retcode = g_io_add_watch_full(midi_channel, + G_PRIORITY_HIGH, + G_IO_IN | G_IO_ERR | G_IO_HUP, + midi_channel_ready, + midi_handle, /*user data */ + midi_channel_destroy); + + /* Filter some MIDI events... + * Let pass only interessting events... + */ + + rc = 0; + rc = rc + snd_seq_set_client_event_filter(midi_handle, SND_SEQ_EVENT_NOTE); + rc = rc + snd_seq_set_client_event_filter(midi_handle, SND_SEQ_EVENT_NOTEON); + rc = rc + snd_seq_set_client_event_filter(midi_handle, SND_SEQ_EVENT_NOTEOFF); + rc = rc + snd_seq_set_client_event_filter(midi_handle, SND_SEQ_EVENT_CONTROLLER); + rc = rc + snd_seq_set_client_event_filter(midi_handle, SND_SEQ_EVENT_PGMCHANGE); + + if (rc != 0) { + g_print("Unable to set event filter(s) on MIDI input stream...\n"); + } + + return retcode; +} + +/*********************************************** + * Create and initialize the MIDI device. + * + * We create a sequencer client and port, + * then connect the kernel client to our user-level client. + * Finally we setup a callback function to handle MIDI events. + */ + +static void +midi_warning(const gchar* format, int rc) +{ + gchar* converted; + + converted = g_locale_to_utf8(snd_strerror(rc), -1, NULL, NULL, NULL); + g_warning(gettext(format), converted); + g_free(converted); +} + +void midi_init() +{ + int rc; + snd_seq_port_subscribe_t* port_sub = NULL; + int client; + int port; + char* str = NULL; + + /* Close handle if already opened. + * Stop monitoring MIDI file descriptor. + */ + + if (midi_handle != NULL) { + if (IS_MIDI_DEBUG_ON) { + g_print("Reinitializing MIDI input\n"); + } + + if (midi_file_tag >= 0) { + g_source_remove(midi_file_tag); + midi_file_tag = -1; + } + + close_handle(midi_handle); + midi_handle = NULL; + } + + /* Open the sequencer device, in non-block mode. */ + + rc = snd_seq_open(&midi_handle, "default", SND_SEQ_OPEN_INPUT, 0); + + if (rc < 0) { + midi_warning(N_("error opening ALSA MIDI input stream (%s)\n"), rc); + return; + } + + /* Get the client number of the sequencer client. + Will be used to connect ST and the kernel-level sequencer device. + Without this, we would need an external program like aconnect to + connect ST and the sequencer device. */ + + client = snd_seq_client_id(midi_handle); + + if (IS_MIDI_DEBUG_ON) { + g_print("Soundtracker client id : %d\n", client); + } + + if (client < 0) { + close_handle(midi_handle); + midi_warning(N_("Get client info error: %s\n"), rc); + return; + } + + /* Set client name. Visible with 'cat /proc/asound/seq/clients'. */ + + str = g_strdup_printf("%s-%d", PACKAGE_NAME, getpid()); + rc = snd_seq_set_client_name(midi_handle, str); + g_free(str); + if (rc < 0) { + close_handle(midi_handle); + midi_warning(N_("Set client info error: %s\n"), rc); + return; + } + + /* Create a port for our user-level client. + * The port number will be the destination port + * when we subscribe to the ALSA seq. + */ + + str = g_strdup_printf("%s-%d-%d", PACKAGE_NAME, getpid(), 0 /* port number */); + port = snd_seq_create_simple_port(midi_handle, str, + SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE, + SND_SEQ_PORT_TYPE_APPLICATION); + g_free(str); + + if (port < 0) { + close_handle(midi_handle); + midi_handle = NULL; + midi_warning(N_("error creating sequencer port (%s)\n"), port); + return; + } + + /* If auto-connect is enabled, + subscribe to the kernel-level client. + The kernel-level client is specified in the MIDI configuration + dialog. + If auto-connect is disabled, the user will have to connect + soundtracker MIDI port with kernel MIDI port by another mean, + e.g. aconnect. + */ + + if (midi_settings.input.auto_connect == 1) { + snd_seq_addr_t sub_addr; /* don't need to malloc this struct. */ + + /* Allocate port_sub on stack. Don't need to 'free'. */ + + snd_seq_port_subscribe_alloca(&port_sub); + + /* First, set the sender info. The sender is the own + * who emits MIDI data i.e. the ALSA driver in this case. + */ + + sub_addr.client = midi_settings.input.client; + sub_addr.port = midi_settings.input.port; + + if (IS_MIDI_DEBUG_ON) { + g_print("Kernel client : %d\n", midi_settings.input.client); + g_print("Kernel port : %d\n", midi_settings.input.port); + } + + snd_seq_port_subscribe_set_sender(port_sub, &sub_addr); + + /* Second, set the destination i.e. Soundtracker. */ + + sub_addr.client = client; + sub_addr.port = port; + snd_seq_port_subscribe_set_dest(port_sub, &sub_addr); + + rc = snd_seq_subscribe_port(midi_handle, port_sub); + if (rc < 0) { + close_handle(midi_handle); + midi_handle = NULL; + midi_warning(N_("error subscribing sequencer port (%s)\n"), rc); + return; + } + } + + midi_file_tag = midi_add_to_main_loop(midi_handle); + + if (midi_file_tag < 0) { + close_handle(midi_handle); + midi_handle = NULL; + + g_warning("error installing MIDI input callback (%s)\n", + g_strerror(midi_file_tag)); + return; + } + + if (IS_MIDI_DEBUG_ON) { + g_print("MIDI input initialized\n"); + } + + return; + +} /* midi_init() */ + +/* It's better to close handle, as Valgring advices */ +void midi_fini(void) +{ + close_handle(midi_handle); +} + +/************************************************** + * Callback for MIDI input events. + * + * NOTE: + * before leaving, "data" must be freed. + * It was created in snd_seq_event_input(). + */ + +gboolean midi_channel_ready(GIOChannel* channel, GIOCondition cond, gpointer data) +{ + snd_seq_t* handle = (snd_seq_t*)data; + snd_seq_event_t* ev; + int rc; + + if (cond != G_IO_IN) { + g_print("MIDI IO channel condition not G_IO_IN.\n"); + return FALSE; + } + + g_return_val_if_fail(handle != NULL, FALSE); + + do { + /* Process MIDI event. Don't forget to free the event after usage. */ + + rc = snd_seq_event_input(handle, &ev); + if (rc < 0) { + g_print("unable to get event"); + return TRUE; + } + + switch (ev->type) { + case SND_SEQ_EVENT_NOTEOFF: + /* Simulate a note on event. */ + ev->data.note.velocity = 0; + /* no break here. Go to next case...*/ + case SND_SEQ_EVENT_NOTE: + case SND_SEQ_EVENT_NOTEON: + if (IS_MIDI_DEBUG_ON) { + midi_print_event(ev); + } + midi_process_note_on(&(ev->data.note)); + break; + + case SND_SEQ_EVENT_CONTROLLER: + if (IS_MIDI_DEBUG_ON) { + midi_print_event(ev); + } + midi_process_controller(&(ev->data.control)); + break; + + case SND_SEQ_EVENT_PGMCHANGE: + if (IS_MIDI_DEBUG_ON) { + midi_print_event(ev); + } + midi_process_program_change(&(ev->data.control)); + break; + + default: + if (IS_MIDI_DEBUG_ON) { + /* Some events (like SND_SEQ_EVENT_SENSING) are not printed + by the print_event routine. */ + midi_print_event(ev); + } + break; + } + + snd_seq_free_event(ev); + + } while (snd_seq_event_input_pending(handle, 0) > 0); + + return TRUE; +} + +/********************************** + * Close sequencer handle. + */ + +static void close_handle(snd_seq_t* handle) +{ + int rc; + + rc = snd_seq_close(handle); + if (rc < 0) { + midi_warning(N_("error closing handle (%s)\n"), rc); + } + + return; + +} /* close_handle() */ + +/******************************************************* + * Process MIDI program change event. + * Called from the MIDI input callback. + * + * Change the XM instrument. + */ + +static void midi_process_program_change(snd_seq_ev_ctrl_t* pcontrol) +{ + /* In XM, instrument number is from 1 to 127. + 0 is reserved. */ + + if (pcontrol->value > 0) { + gui_set_current_instrument(pcontrol->value); + } + + if (0) { + g_print("program change: param %#x, channel %d, value %#x\n", + pcontrol->param, pcontrol->channel, pcontrol->value); + } + + return; + +} /* midi_process_program_change() */ + +/******************************************************* + * Process MIDI controller event. + * Called from the MIDI input callback. + * + * If we receive Sustain event, transform it into a XM note off. + */ + +static void midi_process_controller(snd_seq_ev_ctrl_t* pcontrol) +{ + snd_seq_ev_note_t note; + + switch (pcontrol->param) { + case SND_SEQ_CTRL_SUSTAIN: + /* Build a pseudo-note. */ + + memset(¬e, 0, sizeof(note)); + note.note = xm_note_2_midi_note(XM_PATTERN_NOTE_OFF); + if (midi_settings.input.channel_enabled) { + note.channel = pcontrol->channel; + } + + /* Based on MIDI standard, a value less than 63 means + sustain off. */ + + if (pcontrol->value < 63) { + note.velocity = 0; + } else { + note.velocity = MIDI_VELOCITY_MAX; + } + midi_process_note_on(¬e); + break; + + default: + if (0) { + g_print("control event not processed %#x\n", pcontrol->param); + } + break; + } + + return; + +} /* midi_process_controller() */ + +/******************************************************* + * Process MIDI note ON. + * Called from the MIDI input callback (most of the time). + * + * If the note velocity is 0, just turn off the sound. Don't + * see it as a XM note off event. + * + * We keep track on the number of note ON events. With slow fingers + * on the MIDI controller, it is easy to press a second key before + * releasing the previous one. If we did turned the note off when + * a MIDI note off was received (i.e. when the first finger released + * the first key), we would turn off the sound of the second + * note. With the counter, the note off is done at the right time, + * when the last key is released... + */ + +static void midi_process_note_on(snd_seq_ev_note_t* pnote) +{ + gint note; + int channel; + int volume; + gboolean note_on = pnote->velocity > 0 ? 1 : 0; + + /* Set local value for channel. */ + + if (midi_settings.input.channel_enabled) { + channel = (int)pnote->channel; + } else { + channel = tracker->cursor_ch; + } + + /* Set local value for volume. */ + /* The value -1 means don't change the volume in the pattern. */ + + if (midi_settings.input.volume_enabled) { + volume = (int)pnote->velocity; + /* Since XM volume range is limited, adjust it here. */ + if (volume < XM_NOTE_VOLUME_MIN) { + volume = XM_NOTE_VOLUME_MIN; + } else if (volume > XM_NOTE_VOLUME_MAX) { + volume = XM_NOTE_VOLUME_MAX; + } + } else { + volume = -1; + } + + /* Perform some validation on the event. + - is the note a valid XM note ? + - is the channel in the valid range of channels ? + */ + + note = midi_note_2_xm_note(pnote->note); + + if (note != XM_PATTERN_NOTE_OFF && (note < XM_PATTERN_NOTE_MIN || note > XM_PATTERN_NOTE_MAX)) { + g_print("note out of range\n"); + return; + } + + if (channel > tracker->num_channels) { + g_warning("Channel out of range"); + return; + } + + if (0) { + g_print("note %d velocity %d channel %d, xmnote %d\n", + pnote->note, pnote->velocity, + channel, + note); + } + + /* If necessary, jump to channel */ + + if (tracker->cursor_ch != channel) + tracker_set_cursor_channel(tracker, channel); + + /* Play the note. Record it if we're in the track editor. */ + + if (note_on) { + gint row, jump; + XMNote* xmnote; + + /* Increment the number of notes on. */ + + nb_notes_on++; + + /* Play the note in the channel specified by the MIDI channel. */ + + gui_play_note(channel, note, FALSE); + + /* Give warning when MIDI channel and cursor channel are different. */ + + if (tracker->cursor_ch != channel) { + g_warning("MIDI channel and current channel are not the same..."); + } + + /* Edit track if: + 1- we're in the track editor tab, + 2- edit mode is active... + */ + + if (!GUI_EDITING || notebook_current_page != NOTEBOOK_PAGE_TRACKER) { + return; + } + + /* Current position in channel. */ + + row = tracker->patpos; + + /* Get and set current XM note pitch. */ + + track_editor_log_note(tracker, N_("MIDI input"), -1, channel, row, + HISTORY_SET_PAGE(NOTEBOOK_PAGE_TRACKER)); + xmnote = &(tracker->curpattern->channels[channel][row]); + + xmnote->note = note; + xmnote->instrument = gui_get_current_instrument(); + if (volume >= 0) { + xmnote->volume = volume; + } + + /* Redraw screen and if not in ASYNCEDIT mode, + jump to next position in the channel. */ + + jump = gui_get_current_jump_value(); + if (!ASYNCEDIT && jump) + tracker_step_cursor_row(tracker, jump); + else + tracker_redraw_current_row(tracker); + } else { + /* Decrement the number of note on. + If it is 0, then turn the note off in the track (channel). */ + + nb_notes_on--; + + if (nb_notes_on <= 0) { + gui_play_note_keyoff(channel); + nb_notes_on = 0; + } + } + + return; + +} /* midi_process_note_on() */ diff -Nru soundtracker-0.6.8/app/midi.h soundtracker-1.0.2~pre2/app/midi.h --- soundtracker-0.6.8/app/midi.h 2006-01-15 14:55:45.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/midi.h 2019-04-15 17:45:04.000000000 +0000 @@ -1,6 +1,6 @@ /* * Copyright (C) 2000 Luc Tanguay - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,26 +20,9 @@ #ifndef _MIDI_H #define _MIDI_H -#include - -#if defined(DRIVER_ALSA_050) || defined(DRIVER_ALSA_09x) - -#if defined(DRIVER_ALSA_050) -#include -#else -#include -#if SND_LIB_MAJOR==1 -# define ALSA_PCM_OLD_HW_PARAMS_API -#endif -#include -#endif - -/*** Structures ***/ - /* Function prototypes */ -void midi_init (void); - -#endif +void midi_init(void); +void midi_fini(void); #endif /* _MIDI_H */ diff -Nru soundtracker-0.6.8/app/midi-settings-050.c soundtracker-1.0.2~pre2/app/midi-settings-050.c --- soundtracker-0.6.8/app/midi-settings-050.c 2003-04-11 23:38:29.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/midi-settings-050.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,683 +0,0 @@ -/* -*- Mode: C; tab-width: 3; indent-tabs-mode: nil -*- - * Copyright (C) 2000 Luc Tanguay - * Copyright (C) 1998-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#include - -#if !(defined(DRIVER_ALSA_050) || defined(DRIVER_ALSA_09x)) - -/* - * To allow proper linking of menubar.o, - * define rudimentary midi_settings_dialog(). - * The menu should be inactive when ALSA is not supported. - * See menubar_create() in menubar.c. - */ - -void -midi_settings_dialog (void) -{ - g_warning("MIDI Settings dialog not allowed\n"); -} - -#else - -#if defined(DRIVER_ALSA_050) - -#ifdef USE_GNOME -#include -#endif - -#include "i18n.h" -#include "gui.h" -#include "preferences.h" -#include "gui-subs.h" -#include "midi-settings.h" -#include "midi.h" - -/* Define value for notebook pages border width */ - -#define PAGE_BORDER_WIDTH 6 - -/* Macro to check if debug is activated */ - -#define IS_MIDI_DEBUG_ON (midi_settings.misc.debug_level > (MIDI_DEBUG_OFF)) - -/******************************************************************/ -/* Global variables. */ - -/* MIDI preferences default values - * and keys in the preferences file. - */ - -midi_prefs midi_settings = { - /* MIDI input parameters */ - { - 64, /* key=input-client */ - 0, /* key=input-port */ - 0, /* key=input-channel-enabled */ - 1 /* key=input-volume-enabled */ - }, - /* MIDI output parameters */ - { - 128, /* key=output-client */ - 0 /* key=output-port */ - }, - /* MIDI misc. parameters */ - { - MIDI_DEBUG_OFF /* key=debug-level */ - } -}; - -/* Page numbers for the MIDI settings notebook. */ -/* Depends on the order the pages are added to the notebook. */ -/* See create_midi_notebook(). */ - -enum MidiSettingsPage { - MIDI_SETTINGS_INPUT_PAGE = 0, -// MIDI_SETTINGS_OUTPUT_PAGE, /* future plan... */ - MIDI_SETTINGS_MISC_PAGE, - MIDI_SETTINGS_COUNT_OF_PAGES -}; - -/****************************************************/ -/* Local variables */ - -/* MIDI Dialog Box */ - -static GtkWidget* midi_dialog = NULL; -static GtkWidget* midi_notebook = NULL; - -/* - Variables with prefix "mi" are related to MIDI Input settings. - Variables with prefix "mo" are related to MIDI Output settings. - Variables with prefix "mm" are related to MIDI Misc settings. -*/ - -static GtkWidget *mi_spin_client = NULL; -static GtkWidget *mi_spin_port = NULL; -static GtkWidget *mm_spin_debug = NULL; - -/* For each, keep a flag to know if the page has changed. - Will be queried when the dialog is close. */ - -static gboolean midi_settings_changed[MIDI_SETTINGS_COUNT_OF_PAGES]; - -/* - * New settings set by the user thru the dialog box. - * Must be reset whenever the dialog is called. - * - * User actions will modify the values in this structure. - * Allow us to detect which values, if any, were modified, - * and then take appropriate actions (for exemple to reinitialize the - * MIDI input interface if the input client number has changed). - */ - -static midi_prefs new_midi_settings; - -/* Local functions prototypes */ - -static void dialog_apply_callback (GtkWidget *notebook); -static void dialog_cancel_callback(void); -static void dialog_okay_callback(void); -static void reset_page_changed_flags(void); - -/************************************************************************/ - -/***************************************************** - * Load MIDI configuration parameters. - */ - -void -midi_load_config (void) -{ - prefs_node *f; - - - f = prefs_open_read("midi"); - - if (f) { - - prefs_get_int(f, "debug-level", - &midi_settings.misc.debug_level); - /* Validate debug level */ - if ( midi_settings.misc.debug_level < 0) { - midi_settings.misc.debug_level = MIDI_DEBUG_OFF; - } else if (midi_settings.misc.debug_level > MIDI_DEBUG_HIGHEST) { - midi_settings.misc.debug_level = MIDI_DEBUG_HIGHEST; - } - - prefs_get_int(f, "input-client", - &midi_settings.input.client); - prefs_get_int(f, "input-port", - &midi_settings.input.port); - prefs_get_int(f, "input-channel-enabled", - &midi_settings.input.channel_enabled); - prefs_get_int(f, "input-volume-enabled", - &midi_settings.input.volume_enabled); - - prefs_get_int(f, "output-client", - &midi_settings.output.client); - prefs_get_int(f, "output-port", - &midi_settings.output.port); - - prefs_close(f); - } - -} /* midi_load_config() */ - -/***************************************************** - * Save MIDI configuration parameters. - */ - -void -midi_save_config (void) -{ - prefs_node *f; - - f = prefs_open_write("midi"); - if(!f) - return; - - if (IS_MIDI_DEBUG_ON) { - g_print( "MIDI settings saved to file\n"); - } - - prefs_put_int(f, "debug-level", midi_settings.misc.debug_level); - - prefs_put_int(f, "input-client", midi_settings.input.client); - prefs_put_int(f, "input-port", midi_settings.input.port); - prefs_put_int(f, "input-channel-enabled", midi_settings.input.channel_enabled); - prefs_put_int(f, "input-volume-enabled", midi_settings.input.volume_enabled); - - prefs_put_int(f, "output-client", midi_settings.output.client); - prefs_put_int(f, "output-port", midi_settings.output.port); - - prefs_close(f); - -} /* midi_save_config() */ - -/*************************************************************************** - * MIDI configuration dialog functions. - **************************************************************************/ - -/**************************************** - * MIDI dialog box callbacks. - */ - -/* - Process the cancel event. -*/ - -static void -dialog_cancel_callback(void) -{ - /* Just close the dialog box (discard any changes). */ - - if (midi_notebook != NULL) { - gtk_widget_destroy(midi_notebook); - midi_notebook = NULL; - } - - if (midi_dialog != NULL ) { - gtk_widget_destroy(midi_dialog); - midi_dialog = NULL; - } - -} - -/* - Process the Ok event. -*/ - -static void -dialog_okay_callback(void) -{ - int page_num; - - /* - * For each page, set the notebook page to it and then call - * the Apply callback. - */ - - for (page_num = 0; page_num < MIDI_SETTINGS_COUNT_OF_PAGES; page_num++ ) { - if (IS_MIDI_DEBUG_ON) { - g_print( "MIDI page %d changed: %d\n", - page_num, midi_settings_changed[page_num]); - } - - gtk_notebook_set_page( GTK_NOTEBOOK(midi_notebook), page_num); - dialog_apply_callback( midi_notebook); - } - - /* Close the dialog by calling the Cancel callback. */ - - dialog_cancel_callback(); -} - -/* - Process the "apply" event. - Apply the changes of the current page of the notebook if it has changed. -*/ - -static void -dialog_apply_callback (GtkWidget *notebook) -{ - gboolean reinit_midi = FALSE; - int page_num = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)); - - if ( midi_settings_changed[page_num] == FALSE ) { - if (IS_MIDI_DEBUG_ON) { - g_print("No changes to apply for page #%d\n", page_num); - } - - return; - } - - - switch (page_num){ - case MIDI_SETTINGS_INPUT_PAGE: - - if (IS_MIDI_DEBUG_ON) { - g_print( "new input settings: auto %d volume %d channel %d client %d port %d\n", - new_midi_settings.input.auto_connect, - new_midi_settings.input.volume_enabled, - new_midi_settings.input.channel_enabled, - new_midi_settings.input.client, - new_midi_settings.input.port); - } - - /* - If the user changed the input client or port, - we need to reinitialize the MIDI channel. - */ - - if ( new_midi_settings.input.auto_connect != midi_settings.input.auto_connect - || new_midi_settings.input.client != midi_settings.input.client - || new_midi_settings.input.port != midi_settings.input.port) { - reinit_midi = TRUE; - } - - /* Copy the new settings into the settings structure. */ - - midi_settings.input = new_midi_settings.input; - - if ( reinit_midi ) { - midi_init(); - } - - break; - -#if 0 - case MIDI_SETTINGS_OUTPUT_PAGE: - if (IS_MIDI_DEBUG_ON) { - g_print( "new output settings: client %d port %d\n", - new_midi_settings.output.client, - new_midi_settings.output.port); - } - - break; -#endif - - case MIDI_SETTINGS_MISC_PAGE: - - if (IS_MIDI_DEBUG_ON) { - g_print( "new misc settings: debug %d\n", - new_midi_settings.misc.debug_level); - } - - /* Copy the new settings into the settings structure. */ - - midi_settings.misc = new_midi_settings.misc; - - break; - - default: - g_warning("MIDI Settings: unknown page\n"); - } - - /* Prepare for next call. */ - - midi_settings_changed[page_num] = FALSE; - -} /* dialog_apply_callback() */ - -/************************************************************************ - * MIDI Input settings dialog box functions. - */ - -static void -input_auto_connect_toggled( GtkWidget *window) -{ - /* If auto-connect is disabled, - make "client" and "port" inactive. - */ - - if ( new_midi_settings.input.auto_connect ) { - new_midi_settings.input.auto_connect = 0; - gtk_widget_set_sensitive( mi_spin_client, FALSE); - gtk_widget_set_sensitive( mi_spin_port, FALSE); - } else { - /* If auto-connect is enabled, - make "client" and "port" active. - */ - - new_midi_settings.input.auto_connect = 1; - gtk_widget_set_sensitive( mi_spin_client, TRUE); - gtk_widget_set_sensitive( mi_spin_port, TRUE); - } - - midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; - -} - -static void -input_volume_toggled( GtkWidget *window) -{ - if ( new_midi_settings.input.volume_enabled ) { - new_midi_settings.input.volume_enabled = 0; - } else { - new_midi_settings.input.volume_enabled = 1; - } - - midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; - -} - -static void -input_channel_toggled( GtkWidget *window) -{ - if ( new_midi_settings.input.channel_enabled ) { - new_midi_settings.input.channel_enabled = 0; - } else { - new_midi_settings.input.channel_enabled = 1; - } - - midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; - -} - -static void -input_client_changed( GtkWidget *widget, GtkSpinButton **pspin) -{ - new_midi_settings.input.client = gtk_spin_button_get_value_as_int(*pspin); - gtk_spin_button_set_value( GTK_SPIN_BUTTON(*pspin), - new_midi_settings.input.client); - - midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; - -} - -static void -input_port_changed( GtkWidget *widget, GtkSpinButton **pspin) -{ - new_midi_settings.input.port = gtk_spin_button_get_value_as_int(*pspin); - gtk_spin_button_set_value( GTK_SPIN_BUTTON(*pspin), - new_midi_settings.input.port); - - midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; - -} - -/************************************************************************ - * MIDI Misc settings dialog box functions. - */ - -static void -misc_debug_changed( GtkWidget *widget, GtkSpinButton **pspin) -{ - new_midi_settings.misc.debug_level =gtk_spin_button_get_value_as_int(*pspin); - gtk_spin_button_set_value( GTK_SPIN_BUTTON(*pspin), - new_midi_settings.misc.debug_level); - - midi_settings_changed[MIDI_SETTINGS_MISC_PAGE] = TRUE; - -} - -/********************************************************************** - * Utility functions. - */ - -/* - * reset_page_changed_flags() - * - * Called after the creation of the notebook since by setting the value - * in some fields marks the page has being CHANGED which it is not - * true. Only when a user changes something from the GUI that the page - * should be flagged as CHANGED. - */ - -static void reset_page_changed_flags(void) -{ - int i; - - for ( i = 0; i < MIDI_SETTINGS_COUNT_OF_PAGES; i++) { - midi_settings_changed[i] = FALSE; - } -} - -/*********************************************************************** - Create the MIDI notebook. Called from the MIDI Settings dialog box. - Gets a copy of the current MIDI settings to set initial state - of the different controls inside the notebook pages. -*/ - -static GtkWidget* -create_midi_notebook( GtkDialog* dialog, midi_prefs settings) -{ - GtkWidget *notebook; - GtkWidget *page; - GtkWidget *thing; - - - notebook = gtk_notebook_new(); - - /*****************************************************************/ - /* Create the Input page */ - - page = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(page), PAGE_BORDER_WIDTH); - - thing = gtk_check_button_new_with_label(_("Auto connect")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), - settings.input.auto_connect); - gtk_box_pack_start(GTK_BOX(page), thing, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(input_auto_connect_toggled), NULL); - - thing = gtk_check_button_new_with_label(_("Volume")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), - settings.input.volume_enabled); - gtk_box_pack_start(GTK_BOX(page), thing, FALSE, TRUE, 0); - - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(input_volume_toggled), NULL); - - thing = gtk_check_button_new_with_label(_("Channel")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), - settings.input.channel_enabled); - gtk_box_pack_start(GTK_BOX(page), thing, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(input_channel_toggled), NULL); - - /* Create the spin button for the input client number. */ - - gui_put_labelled_spin_button(page, _("Client number"), 0, 255, - &mi_spin_client, input_client_changed, - &mi_spin_client); - /* Calling the next function sets the CHANGED flag - for the input page. Needs to be reset before leaving this call. */ - gtk_spin_button_set_value( GTK_SPIN_BUTTON(mi_spin_client), - settings.input.client); - - /* Create the spin button for the input port number. */ - - gui_put_labelled_spin_button(page, _("Port number"), 0, 255, - &mi_spin_port, input_port_changed, - &mi_spin_port); - /* Calling the next function sets the CHANGED flag - for the input page. Needs to be reset before leaving this call. */ - gtk_spin_button_set_value( GTK_SPIN_BUTTON(mi_spin_port), - settings.input.port); - - /* If auto-connect is disabled, "client" and "port" must be inactive. */ - - if (settings.input.auto_connect == 0) { - gtk_widget_set_sensitive( mi_spin_client, FALSE); - gtk_widget_set_sensitive( mi_spin_port, FALSE); - } - - /* Add the MIDI Input settings page to the notebook.*/ - - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), - page, gtk_label_new(_("Input"))); - -#if 0 /* mkrause 20020516 */ - /*****************************************************************/ - /* Create the Output page */ - - page = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(page), PAGE_BORDER_WIDTH); - - thing = gtk_label_new(_("For future development")); - gtk_box_pack_start(GTK_BOX(page), thing, FALSE, TRUE, 0); - - /* Add the MIDI Output settings page to the notebook.*/ - - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), - page, gtk_label_new(_("Output"))); -#endif - - /*****************************************************************/ - /* Create the Misc page */ - - page = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(page), PAGE_BORDER_WIDTH); - - /* Create the spin button for the debug level. */ - - gui_put_labelled_spin_button(page, _("Debug level"), MIDI_DEBUG_OFF, - MIDI_DEBUG_HIGHEST - 1, - &mm_spin_debug, misc_debug_changed, - &mm_spin_debug); - /* Calling the next function sets the CHANGED flag - for the misc. page. Needs to be reset before leaving this call. */ - gtk_spin_button_set_value( GTK_SPIN_BUTTON(mm_spin_debug), - settings.misc.debug_level); - - /* Add the MIDI Misc settings page to the notebook.*/ - - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), - page, gtk_label_new(_("Misc"))); - - /* For all the pages, set the "changed" flag to FALSE. - This is done here because setting some fields in pages - to their default values will have flagged the pages - as being "changed". */ - - reset_page_changed_flags(); - - /* That's it */ - - return notebook; - -} /* create_midi_notebook() */ - -/****************************************** - * MIDI Settings dialog box. - * Use a GtkNotebook with page #1 is for input settings, - * and page #2 is for output settings (for future enhancements). - */ - -void -midi_settings_dialog (void) -{ - GtkWidget *okay_button; - GtkWidget *apply_button; - GtkWidget *cancel_button; - - /* If dialog already created, just raise it. */ - - if ( midi_dialog != NULL) { - gdk_window_raise(midi_dialog->window); - return; - } - - /* Begins with current MIDI settings. */ - - new_midi_settings = midi_settings; - - /* Create the dialog box. - The action area will contain 3 buttons: Ok, Apply and Cancel. - The top area will contain a notebook. */ - - midi_dialog = gtk_dialog_new(); - gtk_window_set_title( GTK_WINDOW( midi_dialog), _("MIDI Configuration")); - - /* Create the buttons. */ - - okay_button = gtk_button_new_with_label( _("Ok")); - apply_button = gtk_button_new_with_label( _("Apply")); - cancel_button = gtk_button_new_with_label( _("Cancel")); - - /* Add buttons to action area. */ - - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(midi_dialog)->action_area), - okay_button); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(midi_dialog)->action_area), - apply_button); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(midi_dialog)->action_area), - cancel_button); - - /* Create the notebook (if necessary). */ - - if (midi_notebook == NULL) { - midi_notebook = create_midi_notebook(GTK_DIALOG(midi_dialog), - new_midi_settings); - } - - /* Connect dialog/notebook callbacks. */ - - gtk_signal_connect_object( GTK_OBJECT( okay_button), - "clicked", - GTK_SIGNAL_FUNC (dialog_okay_callback), - 0); - gtk_signal_connect_object( GTK_OBJECT( apply_button), - "clicked", - GTK_SIGNAL_FUNC (dialog_apply_callback), - GTK_OBJECT(midi_notebook)); - gtk_signal_connect_object( GTK_OBJECT( cancel_button), - "clicked", - GTK_SIGNAL_FUNC (dialog_cancel_callback), - 0); - - /* Add the notebook to the upper part of the dialog box. */ - /* To access the notebook from the dialog box object: - g_list_first(gtk_container_children(midi_dialog->vbox)) - */ - - gtk_container_add( GTK_CONTAINER(GTK_DIALOG(midi_dialog)->vbox), - GTK_WIDGET(midi_notebook)); - - gtk_widget_show_all (midi_dialog); - -} /* midi_settings_dialog() */ - -#endif /* defined(DRIVER_ALSA_050) */ -#endif /* !(defined(DRIVER_ALSA_050) || defined(DRIVER_ALSA_09x))*/ diff -Nru soundtracker-0.6.8/app/midi-settings-09x.c soundtracker-1.0.2~pre2/app/midi-settings-09x.c --- soundtracker-0.6.8/app/midi-settings-09x.c 2003-04-12 22:02:47.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/midi-settings-09x.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,686 +0,0 @@ -/* -*- Mode: C; tab-width: 3; indent-tabs-mode: nil -*- - * Copyright (C) 2000 Luc Tanguay - * Copyright (C) 1998-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#if !(defined(DRIVER_ALSA_050) || defined(DRIVER_ALSA_09x)) - -#include - -/* - * To allow proper linking of menubar.o, - * define rudimentary midi_settings_dialog(). - * The menu should be inactive when ALSA is not supported. - * See menubar_create() in menubar.c. - */ - -void -midi_settings_dialog (void) -{ - g_warning("MIDI Settings dialog not allowed\n"); -} - -#else - -#if defined(DRIVER_ALSA_09x) - -#ifdef USE_GNOME -#include -#endif - -#include "i18n.h" -#include "gui.h" -#include "preferences.h" -#include "gui-subs.h" -#include "midi-settings.h" -#include "midi.h" - -/* Define value for notebook pages border width */ - -#define PAGE_BORDER_WIDTH 6 - -/* Macro to check if debug is activated */ - -#define IS_MIDI_DEBUG_ON (midi_settings.misc.debug_level > (MIDI_DEBUG_OFF)) - -/******************************************************************/ -/* Global variables. */ - -/* MIDI preferences default values - * and keys in the preferences file. - */ - -midi_prefs midi_settings = { - /* MIDI input parameters */ - { - 1, /* key=input-auto-connect */ - 64, /* key=input-client */ - 0, /* key=input-port */ - 0, /* key=input-channel-enabled */ - 1 /* key=input-volume-enabled */ - }, - /* MIDI output parameters */ - { - 128, /* key=output-client */ - 0 /* key=output-port */ - }, - /* MIDI misc. parameters */ - { - MIDI_DEBUG_OFF /* key=debug-level */ - } -}; - -/* Page numbers for the MIDI settings notebook. */ -/* Depends on the order the pages are added to the notebook. */ -/* See create_midi_notebook(). */ - -enum MidiSettingsPage { - MIDI_SETTINGS_INPUT_PAGE = 0, -// MIDI_SETTINGS_OUTPUT_PAGE, /* future plan... */ - MIDI_SETTINGS_MISC_PAGE, - MIDI_SETTINGS_COUNT_OF_PAGES -}; - -/****************************************************/ -/* Local variables */ - -/* MIDI Dialog Box */ - -static GtkWidget* midi_dialog = NULL; -static GtkWidget* midi_notebook = NULL; - -/* - Variables with prefix "mi" are related to MIDI Input settings. - Variables with prefix "mo" are related to MIDI Output settings. - Variables with prefix "mm" are related to MIDI Misc settings. -*/ - -static GtkWidget *mi_spin_client = NULL; -static GtkWidget *mi_spin_port = NULL; -static GtkWidget *mm_spin_debug = NULL; - -/* For each, keep a flag to know if the page has changed. - Will be queried when the dialog is close. */ - -static gboolean midi_settings_changed[MIDI_SETTINGS_COUNT_OF_PAGES]; - -/* - * New settings set by the user thru the dialog box. - * Must be reset whenever the dialog is called. - * - * User actions will modify the values in this structure. - * Allow us to detect which values, if any, were modified, - * and then take appropriate actions (for exemple to reinitialize the - * MIDI input interface if the input client number has changed). - */ - -static midi_prefs new_midi_settings; - -/* Local functions prototypes */ - -static void dialog_apply_callback (GtkWidget *notebook); -static void dialog_cancel_callback(void); -static void dialog_okay_callback(void); -static void reset_page_changed_flags(void); - -/************************************************************************/ - -/***************************************************** - * Load MIDI configuration parameters. - */ - -void -midi_load_config (void) -{ - prefs_node *f; - - - f = prefs_open_read("midi"); - - if (f) { - - prefs_get_int(f, "debug-level", - &midi_settings.misc.debug_level); - /* Validate debug level */ - if ( midi_settings.misc.debug_level < 0) { - midi_settings.misc.debug_level = MIDI_DEBUG_OFF; - } else if (midi_settings.misc.debug_level > MIDI_DEBUG_HIGHEST) { - midi_settings.misc.debug_level = MIDI_DEBUG_HIGHEST; - } - - prefs_get_int(f, "input-auto-connect", - &midi_settings.input.auto_connect); - prefs_get_int(f, "input-client", - &midi_settings.input.client); - prefs_get_int(f, "input-port", - &midi_settings.input.port); - prefs_get_int(f, "input-channel-enabled", - &midi_settings.input.channel_enabled); - prefs_get_int(f, "input-volume-enabled", - &midi_settings.input.volume_enabled); - - prefs_get_int(f, "output-client", - &midi_settings.output.client); - prefs_get_int(f, "output-port", - &midi_settings.output.port); - - prefs_close(f); - } - -} /* midi_load_config() */ - -/***************************************************** - * Save MIDI configuration parameters. - */ - -void -midi_save_config (void) -{ - prefs_node *f; - - f = prefs_open_write("midi"); - if(!f) - return; - - if (IS_MIDI_DEBUG_ON) { - g_print( "MIDI settings saved to file\n"); - } - - prefs_put_int(f, "debug-level", midi_settings.misc.debug_level); - - prefs_put_int(f, "input-auto-connect", midi_settings.input.auto_connect); - prefs_put_int(f, "input-client", midi_settings.input.client); - prefs_put_int(f, "input-port", midi_settings.input.port); - prefs_put_int(f, "input-channel-enabled", midi_settings.input.channel_enabled); - prefs_put_int(f, "input-volume-enabled", midi_settings.input.volume_enabled); - - prefs_put_int(f, "output-client", midi_settings.output.client); - prefs_put_int(f, "output-port", midi_settings.output.port); - - prefs_close(f); - -} /* midi_save_config() */ - -/*************************************************************************** - * MIDI configuration dialog functions. - **************************************************************************/ - -/**************************************** - * MIDI dialog box callbacks. - */ - -/* - Process the cancel event. -*/ - -static void -dialog_cancel_callback(void) -{ - /* Just close the dialog box (discard any changes). */ - - if (midi_notebook != NULL) { - gtk_widget_destroy(midi_notebook); - midi_notebook = NULL; - } - - if (midi_dialog != NULL ) { - gtk_widget_destroy(midi_dialog); - midi_dialog = NULL; - } - -} - -/* - Process the Ok event. -*/ - -static void -dialog_okay_callback(void) -{ - int page_num; - - /* - * For each page, set the notebook page to it and then call - * the Apply callback. - */ - - for (page_num = 0; page_num < MIDI_SETTINGS_COUNT_OF_PAGES; page_num++ ) { - if (IS_MIDI_DEBUG_ON) { - g_print( "MIDI page %d changed: %d\n", - page_num, midi_settings_changed[page_num]); - } - - gtk_notebook_set_page( GTK_NOTEBOOK(midi_notebook), page_num); - dialog_apply_callback( midi_notebook); - } - - /* Close the dialog by calling the Cancel callback. */ - - dialog_cancel_callback(); -} - -/* - Process the "apply" event. - Apply the changes of the current page of the notebook if it has changed. -*/ - -static void -dialog_apply_callback (GtkWidget *notebook) -{ - gboolean reinit_midi = FALSE; - int page_num = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)); - - if ( midi_settings_changed[page_num] == FALSE ) { - if (IS_MIDI_DEBUG_ON) { - g_print("No changes to apply for page #%d\n", page_num); - } - - return; - } - - - switch (page_num){ - case MIDI_SETTINGS_INPUT_PAGE: - - if (IS_MIDI_DEBUG_ON) { - g_print( "new input settings: volume %d channel %d client %d port %d\n", - new_midi_settings.input.volume_enabled, - new_midi_settings.input.channel_enabled, - new_midi_settings.input.client, - new_midi_settings.input.port); - } - - /* - If the user changed the input client or port, - we need to reinitialize the MIDI channel. - The auto_connect feature does not need to reinit. the MIDI channel. - */ - - if ( new_midi_settings.input.client != midi_settings.input.client - || new_midi_settings.input.port != midi_settings.input.port) { - reinit_midi = TRUE; - } - - /* Copy the new settings into the settings structure. */ - - midi_settings.input = new_midi_settings.input; - - if ( reinit_midi ) { - midi_init(); - } - - break; - -#if 0 - case MIDI_SETTINGS_OUTPUT_PAGE: - if (IS_MIDI_DEBUG_ON) { - g_print( "new output settings: client %d port %d\n", - new_midi_settings.output.client, - new_midi_settings.output.port); - } - - break; -#endif - - case MIDI_SETTINGS_MISC_PAGE: - - if (IS_MIDI_DEBUG_ON) { - g_print( "new misc settings: debug %d\n", - new_midi_settings.misc.debug_level); - } - - /* Copy the new settings into the settings structure. */ - - midi_settings.misc = new_midi_settings.misc; - - break; - - default: - g_warning("MIDI Settings: unknown page\n"); - } - - /* Prepare for next call. */ - - midi_settings_changed[page_num] = FALSE; - -} /* dialog_apply_callback() */ - -/************************************************************************ - * MIDI Input settings dialog box functions. - */ - -static void -input_auto_connect_toggled( GtkWidget *window) -{ - /* If auto-connect is disabled, - make "client" and "port" inactive. - */ - - if ( new_midi_settings.input.auto_connect ) { - new_midi_settings.input.auto_connect = 0; - gtk_widget_set_sensitive( mi_spin_client, FALSE); - gtk_widget_set_sensitive( mi_spin_port, FALSE); - } else { - /* If auto-connect is enabled, - make "client" and "port" active. - */ - - new_midi_settings.input.auto_connect = 1; - gtk_widget_set_sensitive( mi_spin_client, TRUE); - gtk_widget_set_sensitive( mi_spin_port, TRUE); - } - - midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; - -} - -static void -input_volume_toggled( GtkWidget *window) -{ - if ( new_midi_settings.input.volume_enabled ) { - new_midi_settings.input.volume_enabled = 0; - } else { - new_midi_settings.input.volume_enabled = 1; - } - - midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; - -} - -static void -input_channel_toggled( GtkWidget *window) -{ - if ( new_midi_settings.input.channel_enabled ) { - new_midi_settings.input.channel_enabled = 0; - } else { - new_midi_settings.input.channel_enabled = 1; - } - - midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; - -} - -static void -input_client_changed( GtkWidget *widget, GtkSpinButton **pspin) -{ - new_midi_settings.input.client = gtk_spin_button_get_value_as_int(*pspin); - gtk_spin_button_set_value( GTK_SPIN_BUTTON(*pspin), - new_midi_settings.input.client); - - midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; - -} - -static void -input_port_changed( GtkWidget *widget, GtkSpinButton **pspin) -{ - new_midi_settings.input.port = gtk_spin_button_get_value_as_int(*pspin); - gtk_spin_button_set_value( GTK_SPIN_BUTTON(*pspin), - new_midi_settings.input.port); - - midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; - -} - -/************************************************************************ - * MIDI Misc settings dialog box functions. - */ - -static void -misc_debug_changed( GtkWidget *widget, GtkSpinButton **pspin) -{ - new_midi_settings.misc.debug_level =gtk_spin_button_get_value_as_int(*pspin); - gtk_spin_button_set_value( GTK_SPIN_BUTTON(*pspin), - new_midi_settings.misc.debug_level); - - midi_settings_changed[MIDI_SETTINGS_MISC_PAGE] = TRUE; - -} - -/********************************************************************** - * Utility functions. - */ - -/* - * reset_page_changed_flags() - * - * Called after the creation of the notebook since by setting the value - * in some fields marks the page has being CHANGED which it is not - * true. Only when a user changes something from the GUI that the page - * should be flagged as CHANGED. - */ - -static void reset_page_changed_flags(void) -{ - int i; - - for ( i = 0; i < MIDI_SETTINGS_COUNT_OF_PAGES; i++) { - midi_settings_changed[i] = FALSE; - } -} - -/*********************************************************************** - Create the MIDI notebook. Called from the MIDI Settings dialog box. - Gets a copy of the current MIDI settings to set initial state - of the different controls inside the notebook pages. -*/ - -static GtkWidget* -create_midi_notebook( GtkDialog* dialog, midi_prefs settings) -{ - GtkWidget *notebook; - GtkWidget *page; - GtkWidget *thing; - - - notebook = gtk_notebook_new(); - - /*****************************************************************/ - /* Create the Input page */ - - page = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(page), PAGE_BORDER_WIDTH); - - thing = gtk_check_button_new_with_label(_("Auto connect")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), - settings.input.auto_connect); - gtk_box_pack_start(GTK_BOX(page), thing, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(input_auto_connect_toggled), NULL); - - thing = gtk_check_button_new_with_label(_("Volume")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), - settings.input.volume_enabled); - gtk_box_pack_start(GTK_BOX(page), thing, FALSE, TRUE, 0); - - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(input_volume_toggled), NULL); - - thing = gtk_check_button_new_with_label(_("Channel")); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thing), - settings.input.channel_enabled); - gtk_box_pack_start(GTK_BOX(page), thing, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(input_channel_toggled), NULL); - - /* Create the spin button for the input client number. */ - - gui_put_labelled_spin_button(page, _("Client number"), 0, 255, - &mi_spin_client, input_client_changed, - &mi_spin_client); - /* Calling the next function sets the CHANGED flag - for the input page. Needs to be reset before leaving this call. */ - gtk_spin_button_set_value( GTK_SPIN_BUTTON(mi_spin_client), - settings.input.client); - - /* Create the spin button for the input port number. */ - - gui_put_labelled_spin_button(page, _("Port number"), 0, 255, - &mi_spin_port, input_port_changed, - &mi_spin_port); - /* Calling the next function sets the CHANGED flag - for the input page. Needs to be reset before leaving this call. */ - gtk_spin_button_set_value( GTK_SPIN_BUTTON(mi_spin_port), - settings.input.port); - - /* If auto-connect is disabled, "client" and "port" must be inactive. */ - - if (settings.input.auto_connect == 0) { - gtk_widget_set_sensitive( mi_spin_client, FALSE); - gtk_widget_set_sensitive( mi_spin_port, FALSE); - } - - /* Add the MIDI Input settings page to the notebook.*/ - - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), - page, gtk_label_new(_("Input"))); - -#if 0 /* mkrause 20020516 */ - /*****************************************************************/ - /* Create the Output page */ - - page = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(page), PAGE_BORDER_WIDTH); - - thing = gtk_label_new(_("For future development")); - gtk_box_pack_start(GTK_BOX(page), thing, FALSE, TRUE, 0); - - /* Add the MIDI Output settings page to the notebook.*/ - - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), - page, gtk_label_new(_("Output"))); -#endif - - /*****************************************************************/ - /* Create the Misc page */ - - page = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(page), PAGE_BORDER_WIDTH); - - /* Create the spin button for the debug level. */ - - gui_put_labelled_spin_button(page, _("Debug level"), MIDI_DEBUG_OFF, - MIDI_DEBUG_HIGHEST - 1, - &mm_spin_debug, misc_debug_changed, - &mm_spin_debug); - /* Calling the next function sets the CHANGED flag - for the misc. page. Needs to be reset before leaving this call. */ - gtk_spin_button_set_value( GTK_SPIN_BUTTON(mm_spin_debug), - settings.misc.debug_level); - - /* Add the MIDI Misc settings page to the notebook.*/ - - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), - page, gtk_label_new(_("Misc"))); - - /* For all the pages, set the "changed" flag to FALSE. - This is done here because setting some fields in pages - to their default values will have flagged the pages - as being "changed". */ - - reset_page_changed_flags(); - - /* That's it */ - - return notebook; - -} /* create_midi_notebook() */ - -/****************************************** - * MIDI Settings dialog box. - * Use a GtkNotebook with page #1 is for input settings, - * and page #2 is for output settings (for future enhancements). - */ - -void -midi_settings_dialog (void) -{ - GtkWidget *okay_button; - GtkWidget *apply_button; - GtkWidget *cancel_button; - - /* If dialog already created, just raise it. */ - - if ( midi_dialog != NULL) { - gdk_window_raise(midi_dialog->window); - return; - } - - /* Begins with current MIDI settings. */ - - new_midi_settings = midi_settings; - - /* Create the dialog box. - The action area will contain 3 buttons: Ok, Apply and Cancel. - The top area will contain a notebook. */ - - midi_dialog = gtk_dialog_new(); - gtk_window_set_title( GTK_WINDOW( midi_dialog), _("MIDI Configuration")); - - /* Create the buttons. */ - - okay_button = gtk_button_new_with_label( _("Ok")); - apply_button = gtk_button_new_with_label( _("Apply")); - cancel_button = gtk_button_new_with_label( _("Cancel")); - - /* Add buttons to action area. */ - - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(midi_dialog)->action_area), - okay_button); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(midi_dialog)->action_area), - apply_button); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(midi_dialog)->action_area), - cancel_button); - - /* Create the notebook (if necessary). */ - - if (midi_notebook == NULL) { - midi_notebook = create_midi_notebook(GTK_DIALOG(midi_dialog), - new_midi_settings); - } - - /* Connect dialog/notebook callbacks. */ - - gtk_signal_connect_object( GTK_OBJECT( okay_button), - "clicked", - GTK_SIGNAL_FUNC (dialog_okay_callback), - 0); - gtk_signal_connect_object( GTK_OBJECT( apply_button), - "clicked", - GTK_SIGNAL_FUNC (dialog_apply_callback), - GTK_OBJECT(midi_notebook)); - gtk_signal_connect_object( GTK_OBJECT( cancel_button), - "clicked", - GTK_SIGNAL_FUNC (dialog_cancel_callback), - 0); - - /* Add the notebook to the upper part of the dialog box. */ - /* To access the notebook from the dialog box object: - g_list_first(gtk_container_children(midi_dialog->vbox)) - */ - - gtk_container_add( GTK_CONTAINER(GTK_DIALOG(midi_dialog)->vbox), - GTK_WIDGET(midi_notebook)); - - gtk_widget_show_all (midi_dialog); - -} /* midi_settings_dialog() */ - -#endif /* defined(DRIVER_ALSA_09x) */ -#endif /* !(defined(DRIVER_ALSA_050) || defined(DRIVER_ALSA_09x))*/ diff -Nru soundtracker-0.6.8/app/midi-settings.c soundtracker-1.0.2~pre2/app/midi-settings.c --- soundtracker-0.6.8/app/midi-settings.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/midi-settings.c 2019-07-18 19:57:04.000000000 +0000 @@ -0,0 +1,551 @@ +/* -*- Mode: C; tab-width: 3; indent-tabs-mode: nil -*- + * Copyright (C) 2000 Luc Tanguay + * Copyright (C) 1998-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include + +/* + * To allow proper linking of menubar.o, + * define rudimentary midi_settings_dialog(). + * The menu should be inactive when ALSA is not supported. + * See menubar_create() in menubar.c. + */ + +#ifndef DRIVER_ALSA + +void midi_settings_dialog(void) +{ + g_warning("MIDI Settings dialog not allowed\n"); +} + +#else + +#include + +#include "gui-subs.h" +#include "gui.h" +#include "midi-settings.h" +#include "midi.h" +#include "preferences.h" + +/* Define value for notebook pages border width */ + +#define PAGE_BORDER_WIDTH 6 + +/* Macro to check if debug is activated */ + +#define IS_MIDI_DEBUG_ON (midi_settings.misc.debug_level > (MIDI_DEBUG_OFF)) + +/******************************************************************/ +/* Global variables. */ + +midi_prefs midi_settings; + +/* Page numbers for the MIDI settings notebook. */ +/* Depends on the order the pages are added to the notebook. */ +/* See create_midi_notebook(). */ + +enum MidiSettingsPage { + MIDI_SETTINGS_INPUT_PAGE = 0, + // MIDI_SETTINGS_OUTPUT_PAGE, /* future plan... */ + MIDI_SETTINGS_MISC_PAGE, + MIDI_SETTINGS_COUNT_OF_PAGES +}; + +/****************************************************/ +/* Local variables */ + +/* + Variables with prefix "mi" are related to MIDI Input settings. + Variables with prefix "mo" are related to MIDI Output settings. + Variables with prefix "mm" are related to MIDI Misc settings. +*/ + +static GtkWidget* mi_spin_client = NULL; +static GtkWidget* mi_spin_port = NULL; +static GtkWidget* mm_spin_debug = NULL; + +/* For each, keep a flag to know if the page has changed. + Will be queried when the dialog is close. */ + +static gboolean midi_settings_changed[MIDI_SETTINGS_COUNT_OF_PAGES]; + +/* + * New settings set by the user thru the dialog box. + * Must be reset whenever the dialog is called. + * + * User actions will modify the values in this structure. + * Allow us to detect which values, if any, were modified, + * and then take appropriate actions (for exemple to reinitialize the + * MIDI input interface if the input client number has changed). + */ + +static midi_prefs new_midi_settings; + +/* Local functions prototypes */ + +static void dialog_apply(gint page_num); +static void reset_page_changed_flags(void); + +/************************************************************************/ + +/***************************************************** + * Load MIDI configuration parameters. + */ + +#define SECTION "midi" + +void midi_load_config(void) +{ + midi_settings.misc.debug_level = prefs_get_int(SECTION, "debug-level", MIDI_DEBUG_OFF); + /* Validate debug level */ + if (midi_settings.misc.debug_level < 0) { + midi_settings.misc.debug_level = MIDI_DEBUG_OFF; + } else if (midi_settings.misc.debug_level > MIDI_DEBUG_HIGHEST) { + midi_settings.misc.debug_level = MIDI_DEBUG_HIGHEST; + } + + midi_settings.input.auto_connect = prefs_get_bool(SECTION, "input-auto-connect", TRUE); + midi_settings.input.client = prefs_get_int(SECTION, "input-client", 0); + midi_settings.input.port = prefs_get_int(SECTION, "input-port", 0); + midi_settings.input.channel_enabled = prefs_get_int(SECTION, "input-channel-enabled", 0); + midi_settings.input.volume_enabled = prefs_get_int(SECTION, "input-volume-enabled", 0); + midi_settings.output.client = prefs_get_int(SECTION, "output-client", 0); + midi_settings.output.port = prefs_get_int(SECTION, "output-port", 0); +} /* midi_load_config() */ + +/***************************************************** + * Save MIDI configuration parameters. + */ + +void midi_save_config(void) +{ + if (IS_MIDI_DEBUG_ON) { + g_print("MIDI settings saved to file\n"); + } + + prefs_put_int(SECTION, "debug-level", midi_settings.misc.debug_level); + + prefs_put_bool(SECTION, "input-auto-connect", midi_settings.input.auto_connect); + prefs_put_int(SECTION, "input-client", midi_settings.input.client); + prefs_put_int(SECTION, "input-port", midi_settings.input.port); + prefs_put_int(SECTION, "input-channel-enabled", midi_settings.input.channel_enabled); + prefs_put_int(SECTION, "input-volume-enabled", midi_settings.input.volume_enabled); + + prefs_put_int(SECTION, "output-client", midi_settings.output.client); + prefs_put_int(SECTION, "output-port", midi_settings.output.port); +} /* midi_save_config() */ + +/*************************************************************************** + * MIDI configuration dialog functions. + **************************************************************************/ + +/**************************************** + * MIDI dialog box callback. + */ + +static void +dialog_response(GtkWidget* dialog, gint response, GtkWidget* midi_notebook) +{ + int page_num; + + switch (response) { + case GTK_RESPONSE_APPLY: + page_num = gtk_notebook_get_current_page(GTK_NOTEBOOK(midi_notebook)); + + if (midi_settings_changed[page_num] == FALSE) { + if (IS_MIDI_DEBUG_ON) { + g_print("No changes to apply for page #%d\n", page_num); + } + + return; + } + dialog_apply(page_num); + break; + case GTK_RESPONSE_OK: + /* + * For each page, set the notebook page to it and then call + * the Apply callback. + */ + + for (page_num = 0; page_num < MIDI_SETTINGS_COUNT_OF_PAGES; page_num++) { + if (IS_MIDI_DEBUG_ON) { + g_print("MIDI page %d changed: %d\n", + page_num, midi_settings_changed[page_num]); + } + + dialog_apply(page_num); + } + default: + gtk_widget_hide(dialog); + } +} + +static void +dialog_apply(gint page_num) +{ + gboolean reinit_midi = FALSE; + + switch (page_num) { + case MIDI_SETTINGS_INPUT_PAGE: + + if (IS_MIDI_DEBUG_ON) { + g_print("new input settings: volume %d channel %d client %d port %d\n", + new_midi_settings.input.volume_enabled, + new_midi_settings.input.channel_enabled, + new_midi_settings.input.client, + new_midi_settings.input.port); + } + + /* + If the user changed the input client or port, + we need to reinitialize the MIDI channel. + The auto_connect feature does not need to reinit. the MIDI channel. + */ + + if (new_midi_settings.input.client != midi_settings.input.client + || new_midi_settings.input.port != midi_settings.input.port) { + reinit_midi = TRUE; + } + + /* Copy the new settings into the settings structure. */ + + midi_settings.input = new_midi_settings.input; + + if (reinit_midi) { + midi_init(); + } + + break; + +#if 0 + case MIDI_SETTINGS_OUTPUT_PAGE: + if (IS_MIDI_DEBUG_ON) { + g_print("new output settings: client %d port %d\n", + new_midi_settings.output.client, + new_midi_settings.output.port); + } + + break; +#endif + + case MIDI_SETTINGS_MISC_PAGE: + + if (IS_MIDI_DEBUG_ON) { + g_print("new misc settings: debug %d\n", + new_midi_settings.misc.debug_level); + } + + /* Copy the new settings into the settings structure. */ + + midi_settings.misc = new_midi_settings.misc; + + break; + + default: + g_warning("MIDI Settings: unknown page\n"); + } + + /* Prepare for next call. */ + midi_settings_changed[page_num] = FALSE; +} /* dialog_apply() */ + +/************************************************************************ + * MIDI Input settings dialog box functions. + */ + +static void +input_auto_connect_toggled(GtkWidget* window) +{ + /* If auto-connect is disabled, + make "client" and "port" inactive. + */ + + if (new_midi_settings.input.auto_connect) { + new_midi_settings.input.auto_connect = 0; + gtk_widget_set_sensitive(mi_spin_client, FALSE); + gtk_widget_set_sensitive(mi_spin_port, FALSE); + } else { + /* If auto-connect is enabled, + make "client" and "port" active. + */ + + new_midi_settings.input.auto_connect = 1; + gtk_widget_set_sensitive(mi_spin_client, TRUE); + gtk_widget_set_sensitive(mi_spin_port, TRUE); + } + + midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; +} + +static void +input_volume_toggled(GtkWidget* window) +{ + if (new_midi_settings.input.volume_enabled) { + new_midi_settings.input.volume_enabled = 0; + } else { + new_midi_settings.input.volume_enabled = 1; + } + + midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; +} + +static void +input_channel_toggled(GtkWidget* window) +{ + if (new_midi_settings.input.channel_enabled) { + new_midi_settings.input.channel_enabled = 0; + } else { + new_midi_settings.input.channel_enabled = 1; + } + + midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; +} + +static void +input_client_changed(GtkWidget* widget, GtkSpinButton** pspin) +{ + new_midi_settings.input.client = gtk_spin_button_get_value_as_int(*pspin); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(*pspin), + new_midi_settings.input.client); + + midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; +} + +static void +input_port_changed(GtkWidget* widget, GtkSpinButton** pspin) +{ + new_midi_settings.input.port = gtk_spin_button_get_value_as_int(*pspin); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(*pspin), + new_midi_settings.input.port); + + midi_settings_changed[MIDI_SETTINGS_INPUT_PAGE] = TRUE; +} + +/************************************************************************ + * MIDI Misc settings dialog box functions. + */ + +static void +misc_debug_changed(GtkWidget* widget, GtkSpinButton** pspin) +{ + new_midi_settings.misc.debug_level = gtk_spin_button_get_value_as_int(*pspin); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(*pspin), + new_midi_settings.misc.debug_level); + + midi_settings_changed[MIDI_SETTINGS_MISC_PAGE] = TRUE; +} + +/********************************************************************** + * Utility functions. + */ + +/* + * reset_page_changed_flags() + * + * Called after the creation of the notebook since by setting the value + * in some fields marks the page has being CHANGED which it is not + * true. Only when a user changes something from the GUI that the page + * should be flagged as CHANGED. + */ + +static void reset_page_changed_flags(void) +{ + int i; + + for (i = 0; i < MIDI_SETTINGS_COUNT_OF_PAGES; i++) { + midi_settings_changed[i] = FALSE; + } +} + +/*********************************************************************** + Create the MIDI notebook. Called from the MIDI Settings dialog box. + Gets a copy of the current MIDI settings to set initial state + of the different controls inside the notebook pages. +*/ + +static GtkWidget* +create_midi_notebook(midi_prefs settings) +{ + GtkWidget* notebook; + GtkWidget* page; + GtkWidget* thing; + + notebook = gtk_notebook_new(); + + /*****************************************************************/ + /* Create the Input page */ + + page = gtk_vbox_new(FALSE, 2); + gtk_container_set_border_width(GTK_CONTAINER(page), PAGE_BORDER_WIDTH); + + thing = gtk_check_button_new_with_label(_("Auto connect")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), + settings.input.auto_connect); + gtk_box_pack_start(GTK_BOX(page), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(input_auto_connect_toggled), NULL); + + thing = gtk_check_button_new_with_label(_("Volume")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), + settings.input.volume_enabled); + gtk_box_pack_start(GTK_BOX(page), thing, FALSE, TRUE, 0); + + g_signal_connect(thing, "toggled", + G_CALLBACK(input_volume_toggled), NULL); + + thing = gtk_check_button_new_with_label(_("Channel")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), + settings.input.channel_enabled); + gtk_box_pack_start(GTK_BOX(page), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "toggled", + G_CALLBACK(input_channel_toggled), NULL); + + /* Create the spin button for the input client number. */ + + gui_put_labelled_spin_button(page, _("Client number"), 0, 255, + &mi_spin_client, input_client_changed, + &mi_spin_client, + FALSE); + /* Calling the next function sets the CHANGED flag + for the input page. Needs to be reset before leaving this call. */ + gtk_spin_button_set_value(GTK_SPIN_BUTTON(mi_spin_client), + settings.input.client); + + /* Create the spin button for the input port number. */ + + gui_put_labelled_spin_button(page, _("Port number"), 0, 255, + &mi_spin_port, input_port_changed, + &mi_spin_port, + FALSE); + /* Calling the next function sets the CHANGED flag + for the input page. Needs to be reset before leaving this call. */ + gtk_spin_button_set_value(GTK_SPIN_BUTTON(mi_spin_port), + settings.input.port); + + /* If auto-connect is disabled, "client" and "port" must be inactive. */ + + if (settings.input.auto_connect == 0) { + gtk_widget_set_sensitive(mi_spin_client, FALSE); + gtk_widget_set_sensitive(mi_spin_port, FALSE); + } + + /* Add the MIDI Input settings page to the notebook.*/ + + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), + page, gtk_label_new(_("Input"))); + +#if 0 /* mkrause 20020516 */ + /*****************************************************************/ + /* Create the Output page */ + + page = gtk_vbox_new(FALSE, 2); + gtk_container_set_border_width(GTK_CONTAINER(page), PAGE_BORDER_WIDTH); + + thing = gtk_label_new(_("For future development")); + gtk_box_pack_start(GTK_BOX(page), thing, FALSE, TRUE, 0); + + /* Add the MIDI Output settings page to the notebook.*/ + + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), + page, gtk_label_new(_("Output"))); +#endif + + /*****************************************************************/ + /* Create the Misc page */ + + page = gtk_vbox_new(FALSE, 2); + gtk_container_set_border_width(GTK_CONTAINER(page), PAGE_BORDER_WIDTH); + + /* Create the spin button for the debug level. */ + + gui_put_labelled_spin_button(page, _("Debug level"), MIDI_DEBUG_OFF, + MIDI_DEBUG_HIGHEST - 1, + &mm_spin_debug, misc_debug_changed, + &mm_spin_debug, + FALSE); + /* Calling the next function sets the CHANGED flag + for the misc. page. Needs to be reset before leaving this call. */ + gtk_spin_button_set_value(GTK_SPIN_BUTTON(mm_spin_debug), + settings.misc.debug_level); + + /* Add the MIDI Misc settings page to the notebook.*/ + + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), + page, gtk_label_new(_("Misc"))); + + /* For all the pages, set the "changed" flag to FALSE. + This is done here because setting some fields in pages + to their default values will have flagged the pages + as being "changed". */ + + reset_page_changed_flags(); + + /* That's it */ + + return notebook; + +} /* create_midi_notebook() */ + +/****************************************** + * MIDI Settings dialog box. + * Use a GtkNotebook with page #1 is for input settings, + * and page #2 is for output settings (for future enhancements). + */ + +void midi_settings_dialog(void) +{ + static GtkWidget *midi_dialog = NULL, *midi_notebook; + + /* If dialog already created, just raise it. */ + + if (midi_dialog != NULL) { + gtk_window_present(GTK_WINDOW(midi_dialog)); + return; + } + + /* Begins with current MIDI settings. */ + + new_midi_settings = midi_settings; + + /* Create the dialog box. + The action area will contain 3 buttons: Ok, Apply and Cancel. + The top area will contain a notebook. */ + + midi_dialog = gtk_dialog_new_with_buttons(_("MIDI Configuration"), GTK_WINDOW(mainwindow), 0, + GTK_STOCK_OK, GTK_RESPONSE_OK, + GTK_STOCK_APPLY, GTK_RESPONSE_APPLY, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); + + gui_dialog_adjust(midi_dialog, GTK_RESPONSE_OK); + /* Create the notebook (if necessary). */ + midi_notebook = create_midi_notebook(new_midi_settings); + + /* Connect dialog/notebook callbacks. */ + gui_dialog_connect_data(midi_dialog, G_CALLBACK(dialog_response), midi_notebook); + + /* Add the notebook to the upper part of the dialog box. */ + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(midi_dialog))), + midi_notebook, FALSE, TRUE, 0); + + gtk_widget_show_all(midi_dialog); + +} /* midi_settings_dialog() */ +#endif /* DRIVER_ALSA */ diff -Nru soundtracker-0.6.8/app/midi-settings.h soundtracker-1.0.2~pre2/app/midi-settings.h --- soundtracker-0.6.8/app/midi-settings.h 2003-05-24 11:48:03.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/midi-settings.h 2019-04-15 17:45:04.000000000 +0000 @@ -1,6 +1,6 @@ /* * Copyright (C) 2000 Luc Tanguay - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,7 +22,7 @@ #include -#if defined(DRIVER_ALSA_050) || defined(DRIVER_ALSA_09x) +#if defined(DRIVER_ALSA) #include @@ -41,38 +41,38 @@ /* Debug level */ enum { - MIDI_DEBUG_OFF = 0, - MIDI_DEBUG_BASIC = 1, - MIDI_DEBUG_HIGHEST + MIDI_DEBUG_OFF = 0, + MIDI_DEBUG_BASIC = 1, + MIDI_DEBUG_HIGHEST }; /* Input preferences (mostly ALSA specifics) */ typedef struct { - gboolean auto_connect; - gint client; - gint port; - gboolean channel_enabled; - gboolean volume_enabled; + gboolean auto_connect; + gint client; + gint port; + gboolean channel_enabled; + gboolean volume_enabled; } midi_input_prefs; /* Output preferences (mostly ALSA specifics) */ typedef struct { - gint client; - gint port; + gint client; + gint port; } midi_output_prefs; /* Misc. preferences */ typedef struct { - gint debug_level; /* one of the MIDI_DEBUG_... enum value */ + gint debug_level; /* one of the MIDI_DEBUG_... enum value */ } midi_misc_prefs; typedef struct { - midi_input_prefs input; - midi_output_prefs output; - midi_misc_prefs misc; + midi_input_prefs input; + midi_output_prefs output; + midi_misc_prefs misc; } midi_prefs; /* Exported variables */ diff -Nru soundtracker-0.6.8/app/midi-utils-050.c soundtracker-1.0.2~pre2/app/midi-utils-050.c --- soundtracker-0.6.8/app/midi-utils-050.c 2003-04-11 23:38:29.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/midi-utils-050.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,465 +0,0 @@ -/* - * Copyright (C) 2000 Luc Tanguay - * Copyright (C) 1998-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#if defined(DRIVER_ALSA_050) - -#include -#include "midi-utils.h" -#include "midi-settings.h" - -/* Global variables. */ - -/* Local variables */ - -/* Next array taken from alsa-lib-0.5.5/test/seq-decode.c */ - -static char *event_names[256] = { - /* 0 */ "System", - /* 1 */ "Result", - /* 2 */ "Reserved 2", - /* 3 */ "Reserved 3", - /* 4 */ "Reserved 4", - /* 5 */ "Note", - /* 6 */ "Note On", - /* 7 */ "Note Off", - /* 8 */ "Key Pressure", - /* 9 */ "Reserved 9", - /* 10 */ "Controller", - /* 11 */ "Program Change", - /* 12 */ "Channel Pressure", - /* 13 */ "Pitchbend", - /* 14 */ "Control14", - /* 15 */ "Nonregparam", - /* 16 */ "Regparam", - /* 17 */ "Reserved 17", - /* 18 */ "Reserved 18", - /* 19 */ "Reserved 19", - /* 20 */ "Song Position", - /* 21 */ "Song Select", - /* 22 */ "Qframe", - /* 23 */ "SMF Time Signature", - /* 24 */ "SMF Key Signature", - /* 25 */ "Reserved 25", - /* 26 */ "Reserved 26", - /* 27 */ "Reserved 27", - /* 28 */ "Reserved 28", - /* 29 */ "Reserved 29", - /* 30 */ "Start", - /* 31 */ "Continue", - /* 32 */ "Stop", - /* 33 */ "Set Position Tick", - /* 34 */ "Set Position Time", - /* 35 */ "Tempo", - /* 36 */ "Clock", - /* 37 */ "Tick", - /* 38 */ "Reserved 38", - /* 39 */ "Reserved 39", - /* 40 */ "Tune Request", - /* 41 */ "Reset", - /* 42 */ "Active Sensing", - /* 43 */ "Reserved 43", - /* 44 */ "Reserved 44", - /* 45 */ "Reserved 45", - /* 46 */ "Reserved 46", - /* 47 */ "Reserved 47", - /* 48 */ "Reserved 48", - /* 49 */ "Reserved 49", - /* 50 */ "Echo", - /* 51 */ "OSS", - /* 52 */ "Reserved 52", - /* 53 */ "Reserved 53", - /* 54 */ "Reserved 54", - /* 55 */ "Reserved 55", - /* 56 */ "Reserved 56", - /* 57 */ "Reserved 57", - /* 58 */ "Reserved 58", - /* 59 */ "Reserved 59", - /* 60 */ "Client Start", - /* 61 */ "Client Exit", - /* 62 */ "Client Change", - /* 63 */ "Port Start", - /* 64 */ "Port Exit", - /* 65 */ "Port Change", - /* 66 */ "Port Subscribed", - /* 67 */ "Port Used", - /* 68 */ "Port Unsubscribed", - /* 69 */ "Port Unused", - /* 70 */ "Sample", - /* 71 */ "Sample Cluster", - /* 72 */ "Sample Start", - /* 73 */ "Sample Stop", - /* 74 */ "Sample Freq", - /* 75 */ "Sample Volume", - /* 76 */ "Sample Loop", - /* 77 */ "Sample Position", - /* 78 */ "Sample Private1", - /* 79 */ "Reserved 79", - /* 80 */ "Reserved 80", - /* 81 */ "Reserved 81", - /* 82 */ "Reserved 82", - /* 83 */ "Reserved 83", - /* 84 */ "Reserved 84", - /* 85 */ "Reserved 85", - /* 86 */ "Reserved 86", - /* 87 */ "Reserved 87", - /* 88 */ "Reserved 88", - /* 89 */ "Reserved 89", - /* 90 */ "User 0", - /* 91 */ "User 1", - /* 92 */ "User 2", - /* 93 */ "User 3", - /* 94 */ "User 4", - /* 95 */ "User 5", - /* 96 */ "User 6", - /* 97 */ "User 7", - /* 98 */ "User 8", - /* 99 */ "User 9", - /* 100 */ "Instr Begin", - /* 101 */ "Instr End", - /* 102 */ "Instr Info", - /* 103 */ "Instr Info Result", - /* 104 */ "Instr Finfo", - /* 105 */ "Instr Finfo Result", - /* 106 */ "Instr Reset", - /* 107 */ "Instr Status", - /* 108 */ "Instr Status Result", - /* 109 */ "Instr Put", - /* 110 */ "Instr Get", - /* 111 */ "Instr Get Result", - /* 112 */ "Instr Free", - /* 113 */ "Instr List", - /* 114 */ "Instr List Result", - /* 115 */ "Instr Cluster", - /* 116 */ "Instr Cluster Get", - /* 117 */ "Instr Cluster Result", - /* 118 */ "Instr Change", - /* 119 */ "Reserved 119", - /* 120 */ "Reserved 120", - /* 121 */ "Reserved 121", - /* 122 */ "Reserved 122", - /* 123 */ "Reserved 123", - /* 124 */ "Reserved 124", - /* 125 */ "Reserved 125", - /* 126 */ "Reserved 126", - /* 127 */ "Reserved 127", - /* 128 */ "Reserved 128", - /* 129 */ "Reserved 129", - /* 130 */ "Sysex", - /* 131 */ "Bounce", - /* 132 */ "Reserved 132", - /* 133 */ "Reserved 133", - /* 134 */ "Reserved 134", - /* 135 */ "User Var0", - /* 136 */ "User Var1", - /* 137 */ "User Var2", - /* 138 */ "User Var3", - /* 139 */ "User Var4", - /* 140 */ "IPC Shm", - /* 141 */ "Reserved 141", - /* 142 */ "Reserved 142", - /* 143 */ "Reserved 143", - /* 144 */ "Reserved 144", - /* 145 */ "User IPC0", - /* 146 */ "User IPC1", - /* 147 */ "User IPC2", - /* 148 */ "User IPC3", - /* 149 */ "User IPC4", - /* 150 */ "Reserved 150", - /* 151 */ "Reserved 151", - /* 152 */ "Reserved 152", - /* 153 */ "Reserved 153", - /* 154 */ "Reserved 154", - /* 155 */ "Reserved 155", - /* 156 */ "Reserved 156", - /* 157 */ "Reserved 157", - /* 158 */ "Reserved 158", - /* 159 */ "Reserved 159", - /* 160 */ "Reserved 160", - /* 161 */ "Reserved 161", - /* 162 */ "Reserved 162", - /* 163 */ "Reserved 163", - /* 164 */ "Reserved 164", - /* 165 */ "Reserved 165", - /* 166 */ "Reserved 166", - /* 167 */ "Reserved 167", - /* 168 */ "Reserved 168", - /* 169 */ "Reserved 169", - /* 170 */ "Reserved 170", - /* 171 */ "Reserved 171", - /* 172 */ "Reserved 172", - /* 173 */ "Reserved 173", - /* 174 */ "Reserved 174", - /* 175 */ "Reserved 175", - /* 176 */ "Reserved 176", - /* 177 */ "Reserved 177", - /* 178 */ "Reserved 178", - /* 179 */ "Reserved 179", - /* 180 */ "Reserved 180", - /* 181 */ "Reserved 181", - /* 182 */ "Reserved 182", - /* 183 */ "Reserved 183", - /* 184 */ "Reserved 184", - /* 185 */ "Reserved 185", - /* 186 */ "Reserved 186", - /* 187 */ "Reserved 187", - /* 188 */ "Reserved 188", - /* 189 */ "Reserved 189", - /* 190 */ "Reserved 190", - /* 191 */ "Reserved 191", - /* 192 */ "Reserved 192", - /* 193 */ "Reserved 193", - /* 194 */ "Reserved 194", - /* 195 */ "Reserved 195", - /* 196 */ "Reserved 196", - /* 197 */ "Reserved 197", - /* 198 */ "Reserved 198", - /* 199 */ "Reserved 199", - /* 200 */ "Reserved 200", - /* 201 */ "Reserved 201", - /* 202 */ "Reserved 202", - /* 203 */ "Reserved 203", - /* 204 */ "Reserved 204", - /* 205 */ "Reserved 205", - /* 206 */ "Reserved 206", - /* 207 */ "Reserved 207", - /* 208 */ "Reserved 208", - /* 209 */ "Reserved 209", - /* 210 */ "Reserved 210", - /* 211 */ "Reserved 211", - /* 212 */ "Reserved 212", - /* 213 */ "Reserved 213", - /* 214 */ "Reserved 214", - /* 215 */ "Reserved 215", - /* 216 */ "Reserved 216", - /* 217 */ "Reserved 217", - /* 218 */ "Reserved 218", - /* 219 */ "Reserved 219", - /* 220 */ "Reserved 220", - /* 221 */ "Reserved 221", - /* 222 */ "Reserved 222", - /* 223 */ "Reserved 223", - /* 224 */ "Reserved 224", - /* 225 */ "Reserved 225", - /* 226 */ "Reserved 226", - /* 227 */ "Reserved 227", - /* 228 */ "Reserved 228", - /* 229 */ "Reserved 229", - /* 230 */ "Reserved 230", - /* 231 */ "Reserved 231", - /* 232 */ "Reserved 232", - /* 233 */ "Reserved 233", - /* 234 */ "Reserved 234", - /* 235 */ "Reserved 235", - /* 236 */ "Reserved 236", - /* 237 */ "Reserved 237", - /* 238 */ "Reserved 238", - /* 239 */ "Reserved 239", - /* 240 */ "Reserved 240", - /* 241 */ "Reserved 241", - /* 242 */ "Reserved 242", - /* 243 */ "Reserved 243", - /* 244 */ "Reserved 244", - /* 245 */ "Reserved 245", - /* 246 */ "Reserved 246", - /* 247 */ "Reserved 247", - /* 248 */ "Reserved 248", - /* 249 */ "Reserved 249", - /* 250 */ "Reserved 250", - /* 251 */ "Reserved 251", - /* 252 */ "Reserved 252", - /* 253 */ "Reserved 253", - /* 254 */ "Reserved 254", - /* 255 */ "None" -}; - -/* Local functions prototypes */ - -/************************************************************************/ - -/*********************************************** - * Print MIDI event. - * Adapted from alsa-lib-0.5.5/test/seq-decode.c. - * - * Level of details is determined by debug_level (see midi-settings.h). - */ - -void midi_print_event(snd_seq_event_t *ev) -{ - if (ev->type == SND_SEQ_EVENT_SENSING) { - return; - } - - g_print("EVENT>>>"); - - if (midi_settings.misc.debug_level > MIDI_DEBUG_BASIC) { - - g_print(" Type = %d, flags = 0x%x", ev->type, ev->flags); - - switch (ev->flags & SND_SEQ_TIME_STAMP_MASK) { - case SND_SEQ_TIME_STAMP_TICK: - g_print(", time = %d ticks", ev->time.tick); - break; - - case SND_SEQ_TIME_STAMP_REAL: - g_print(", time = %d.%09d", - (int)ev->time.time.tv_sec, - (int)ev->time.time.tv_nsec); - break; - } - - g_print("\nSource = %d.%d, dest = %d.%d, queue = %d\n", - ev->source.client, - ev->source.port, - ev->dest.client, - ev->dest.port, - ev->queue); - } - - g_print(" \"%s\"", event_names[ev->type]); - - /* decode actual event data... */ - - switch (ev->type) { - case SND_SEQ_EVENT_NOTE: - g_print("; ch=%d, note=%d, velocity=%d, off_velocity=%d, duration=%d\n", - ev->data.note.channel, - ev->data.note.note, - ev->data.note.velocity, - ev->data.note.off_velocity, - ev->data.note.duration); - break; - - case SND_SEQ_EVENT_NOTEON: - g_print("; ch=%d, note ON=%d, velocity=%d\n", - ev->data.note.channel, - ev->data.note.note, - ev->data.note.velocity); - break; - - case SND_SEQ_EVENT_NOTEOFF: - g_print("; ch=%d, note OFF=%d, velocity=%d\n", - ev->data.note.channel, - ev->data.note.note, - ev->data.note.velocity); - break; - - case SND_SEQ_EVENT_KEYPRESS: - g_print("; ch=%d, keypress=%d, velocity=%d\n", - ev->data.note.channel, - ev->data.note.note, - ev->data.note.velocity); - break; - - case SND_SEQ_EVENT_CONTROLLER: - g_print("; ch=%d, param=%i, value=%i\n", - ev->data.control.channel, - ev->data.control.param, - ev->data.control.value); - break; - - case SND_SEQ_EVENT_PGMCHANGE: - g_print("; ch=%d, program=%i\n", - ev->data.control.channel, - ev->data.control.value); - break; - - case SND_SEQ_EVENT_CHANPRESS: - case SND_SEQ_EVENT_PITCHBEND: - g_print("; ch=%d, value=%i\n", - ev->data.control.channel, - ev->data.control.value); - break; - - case SND_SEQ_EVENT_SYSEX: - { - unsigned char *sysex = (unsigned char *) ev + sizeof(snd_seq_event_t); - int c; - - g_print("; len=%d [", ev->data.ext.len); - - for (c = 0; c < ev->data.ext.len; c++) { - g_print("%02x%s", sysex[c], c < ev->data.ext.len - 1 ? ":" : ""); - } - g_print("]\n"); - } - break; - - case SND_SEQ_EVENT_QFRAME: - g_print("; frame = %i\n", ev->data.control.value); - break; - - case SND_SEQ_EVENT_CLOCK: - case SND_SEQ_EVENT_START: - case SND_SEQ_EVENT_CONTINUE: - case SND_SEQ_EVENT_STOP: - g_print("; queue = %i\n", ev->data.queue.queue); - break; - - case SND_SEQ_EVENT_SENSING: - g_print("\n"); - break; - - case SND_SEQ_EVENT_ECHO: - { - int i; - - g_print("; "); - for (i = 0; i < 8; i++) { - g_print("%02i%s", ev->data.raw8.d[i], i < 7 ? ":" : "\n"); - } - } - break; - - case SND_SEQ_EVENT_CLIENT_START: - case SND_SEQ_EVENT_CLIENT_EXIT: - case SND_SEQ_EVENT_CLIENT_CHANGE: - g_print("; client = %i\n", ev->data.addr.client); - break; - - case SND_SEQ_EVENT_PORT_START: - case SND_SEQ_EVENT_PORT_EXIT: - case SND_SEQ_EVENT_PORT_CHANGE: - case SND_SEQ_EVENT_PORT_SUBSCRIBED: - case SND_SEQ_EVENT_PORT_USED: - case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: - case SND_SEQ_EVENT_PORT_UNUSED: - g_print("; client = %i, port = %i\n", - ev->data.addr.client, ev->data.addr.port); - break; - - default: - g_print("; not implemented\n"); - } - - - switch (ev->flags & SND_SEQ_EVENT_LENGTH_MASK) { - case SND_SEQ_EVENT_LENGTH_FIXED: - return; /* sizeof(snd_seq_event_t);*/ - - case SND_SEQ_EVENT_LENGTH_VARIABLE: - return; /* sizeof(snd_seq_event_t) + ev->data.ext.len; */ - } - - return; - -} /* midi_print_event() */ - -#endif /* defined(DRIVER_ALSA_050) */ diff -Nru soundtracker-0.6.8/app/midi-utils-09x.c soundtracker-1.0.2~pre2/app/midi-utils-09x.c --- soundtracker-0.6.8/app/midi-utils-09x.c 2003-04-11 23:38:29.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/midi-utils-09x.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,463 +0,0 @@ -/* - * Copyright (C) 2000 Luc Tanguay - * Copyright (C) 1998-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#if defined(DRIVER_ALSA_09x) - -#include -#include "midi-utils.h" -#include "midi-settings.h" - -/* Global variables. */ - -/* Local variables */ - -/* Next array taken from alsa-lib-0.5.5/test/seq-decode.c */ - -static char *event_names[256] = { - /* 0 */ "System", - /* 1 */ "Result", - /* 2 */ "Reserved 2", - /* 3 */ "Reserved 3", - /* 4 */ "Reserved 4", - /* 5 */ "Note", - /* 6 */ "Note On", - /* 7 */ "Note Off", - /* 8 */ "Key Pressure", - /* 9 */ "Reserved 9", - /* 10 */ "Controller", - /* 11 */ "Program Change", - /* 12 */ "Channel Pressure", - /* 13 */ "Pitchbend", - /* 14 */ "Control14", - /* 15 */ "Nonregparam", - /* 16 */ "Regparam", - /* 17 */ "Reserved 17", - /* 18 */ "Reserved 18", - /* 19 */ "Reserved 19", - /* 20 */ "Song Position", - /* 21 */ "Song Select", - /* 22 */ "Qframe", - /* 23 */ "SMF Time Signature", - /* 24 */ "SMF Key Signature", - /* 25 */ "Reserved 25", - /* 26 */ "Reserved 26", - /* 27 */ "Reserved 27", - /* 28 */ "Reserved 28", - /* 29 */ "Reserved 29", - /* 30 */ "Start", - /* 31 */ "Continue", - /* 32 */ "Stop", - /* 33 */ "Set Position Tick", - /* 34 */ "Set Position Time", - /* 35 */ "Tempo", - /* 36 */ "Clock", - /* 37 */ "Tick", - /* 38 */ "Reserved 38", - /* 39 */ "Reserved 39", - /* 40 */ "Tune Request", - /* 41 */ "Reset", - /* 42 */ "Active Sensing", - /* 43 */ "Reserved 43", - /* 44 */ "Reserved 44", - /* 45 */ "Reserved 45", - /* 46 */ "Reserved 46", - /* 47 */ "Reserved 47", - /* 48 */ "Reserved 48", - /* 49 */ "Reserved 49", - /* 50 */ "Echo", - /* 51 */ "OSS", - /* 52 */ "Reserved 52", - /* 53 */ "Reserved 53", - /* 54 */ "Reserved 54", - /* 55 */ "Reserved 55", - /* 56 */ "Reserved 56", - /* 57 */ "Reserved 57", - /* 58 */ "Reserved 58", - /* 59 */ "Reserved 59", - /* 60 */ "Client Start", - /* 61 */ "Client Exit", - /* 62 */ "Client Change", - /* 63 */ "Port Start", - /* 64 */ "Port Exit", - /* 65 */ "Port Change", - /* 66 */ "Port Subscribed", - /* 67 */ "Port Used", - /* 68 */ "Port Unsubscribed", - /* 69 */ "Port Unused", - /* 70 */ "Sample", - /* 71 */ "Sample Cluster", - /* 72 */ "Sample Start", - /* 73 */ "Sample Stop", - /* 74 */ "Sample Freq", - /* 75 */ "Sample Volume", - /* 76 */ "Sample Loop", - /* 77 */ "Sample Position", - /* 78 */ "Sample Private1", - /* 79 */ "Reserved 79", - /* 80 */ "Reserved 80", - /* 81 */ "Reserved 81", - /* 82 */ "Reserved 82", - /* 83 */ "Reserved 83", - /* 84 */ "Reserved 84", - /* 85 */ "Reserved 85", - /* 86 */ "Reserved 86", - /* 87 */ "Reserved 87", - /* 88 */ "Reserved 88", - /* 89 */ "Reserved 89", - /* 90 */ "User 0", - /* 91 */ "User 1", - /* 92 */ "User 2", - /* 93 */ "User 3", - /* 94 */ "User 4", - /* 95 */ "User 5", - /* 96 */ "User 6", - /* 97 */ "User 7", - /* 98 */ "User 8", - /* 99 */ "User 9", - /* 100 */ "Instr Begin", - /* 101 */ "Instr End", - /* 102 */ "Instr Info", - /* 103 */ "Instr Info Result", - /* 104 */ "Instr Finfo", - /* 105 */ "Instr Finfo Result", - /* 106 */ "Instr Reset", - /* 107 */ "Instr Status", - /* 108 */ "Instr Status Result", - /* 109 */ "Instr Put", - /* 110 */ "Instr Get", - /* 111 */ "Instr Get Result", - /* 112 */ "Instr Free", - /* 113 */ "Instr List", - /* 114 */ "Instr List Result", - /* 115 */ "Instr Cluster", - /* 116 */ "Instr Cluster Get", - /* 117 */ "Instr Cluster Result", - /* 118 */ "Instr Change", - /* 119 */ "Reserved 119", - /* 120 */ "Reserved 120", - /* 121 */ "Reserved 121", - /* 122 */ "Reserved 122", - /* 123 */ "Reserved 123", - /* 124 */ "Reserved 124", - /* 125 */ "Reserved 125", - /* 126 */ "Reserved 126", - /* 127 */ "Reserved 127", - /* 128 */ "Reserved 128", - /* 129 */ "Reserved 129", - /* 130 */ "Sysex", - /* 131 */ "Bounce", - /* 132 */ "Reserved 132", - /* 133 */ "Reserved 133", - /* 134 */ "Reserved 134", - /* 135 */ "User Var0", - /* 136 */ "User Var1", - /* 137 */ "User Var2", - /* 138 */ "User Var3", - /* 139 */ "User Var4", - /* 140 */ "IPC Shm", - /* 141 */ "Reserved 141", - /* 142 */ "Reserved 142", - /* 143 */ "Reserved 143", - /* 144 */ "Reserved 144", - /* 145 */ "User IPC0", - /* 146 */ "User IPC1", - /* 147 */ "User IPC2", - /* 148 */ "User IPC3", - /* 149 */ "User IPC4", - /* 150 */ "Reserved 150", - /* 151 */ "Reserved 151", - /* 152 */ "Reserved 152", - /* 153 */ "Reserved 153", - /* 154 */ "Reserved 154", - /* 155 */ "Reserved 155", - /* 156 */ "Reserved 156", - /* 157 */ "Reserved 157", - /* 158 */ "Reserved 158", - /* 159 */ "Reserved 159", - /* 160 */ "Reserved 160", - /* 161 */ "Reserved 161", - /* 162 */ "Reserved 162", - /* 163 */ "Reserved 163", - /* 164 */ "Reserved 164", - /* 165 */ "Reserved 165", - /* 166 */ "Reserved 166", - /* 167 */ "Reserved 167", - /* 168 */ "Reserved 168", - /* 169 */ "Reserved 169", - /* 170 */ "Reserved 170", - /* 171 */ "Reserved 171", - /* 172 */ "Reserved 172", - /* 173 */ "Reserved 173", - /* 174 */ "Reserved 174", - /* 175 */ "Reserved 175", - /* 176 */ "Reserved 176", - /* 177 */ "Reserved 177", - /* 178 */ "Reserved 178", - /* 179 */ "Reserved 179", - /* 180 */ "Reserved 180", - /* 181 */ "Reserved 181", - /* 182 */ "Reserved 182", - /* 183 */ "Reserved 183", - /* 184 */ "Reserved 184", - /* 185 */ "Reserved 185", - /* 186 */ "Reserved 186", - /* 187 */ "Reserved 187", - /* 188 */ "Reserved 188", - /* 189 */ "Reserved 189", - /* 190 */ "Reserved 190", - /* 191 */ "Reserved 191", - /* 192 */ "Reserved 192", - /* 193 */ "Reserved 193", - /* 194 */ "Reserved 194", - /* 195 */ "Reserved 195", - /* 196 */ "Reserved 196", - /* 197 */ "Reserved 197", - /* 198 */ "Reserved 198", - /* 199 */ "Reserved 199", - /* 200 */ "Reserved 200", - /* 201 */ "Reserved 201", - /* 202 */ "Reserved 202", - /* 203 */ "Reserved 203", - /* 204 */ "Reserved 204", - /* 205 */ "Reserved 205", - /* 206 */ "Reserved 206", - /* 207 */ "Reserved 207", - /* 208 */ "Reserved 208", - /* 209 */ "Reserved 209", - /* 210 */ "Reserved 210", - /* 211 */ "Reserved 211", - /* 212 */ "Reserved 212", - /* 213 */ "Reserved 213", - /* 214 */ "Reserved 214", - /* 215 */ "Reserved 215", - /* 216 */ "Reserved 216", - /* 217 */ "Reserved 217", - /* 218 */ "Reserved 218", - /* 219 */ "Reserved 219", - /* 220 */ "Reserved 220", - /* 221 */ "Reserved 221", - /* 222 */ "Reserved 222", - /* 223 */ "Reserved 223", - /* 224 */ "Reserved 224", - /* 225 */ "Reserved 225", - /* 226 */ "Reserved 226", - /* 227 */ "Reserved 227", - /* 228 */ "Reserved 228", - /* 229 */ "Reserved 229", - /* 230 */ "Reserved 230", - /* 231 */ "Reserved 231", - /* 232 */ "Reserved 232", - /* 233 */ "Reserved 233", - /* 234 */ "Reserved 234", - /* 235 */ "Reserved 235", - /* 236 */ "Reserved 236", - /* 237 */ "Reserved 237", - /* 238 */ "Reserved 238", - /* 239 */ "Reserved 239", - /* 240 */ "Reserved 240", - /* 241 */ "Reserved 241", - /* 242 */ "Reserved 242", - /* 243 */ "Reserved 243", - /* 244 */ "Reserved 244", - /* 245 */ "Reserved 245", - /* 246 */ "Reserved 246", - /* 247 */ "Reserved 247", - /* 248 */ "Reserved 248", - /* 249 */ "Reserved 249", - /* 250 */ "Reserved 250", - /* 251 */ "Reserved 251", - /* 252 */ "Reserved 252", - /* 253 */ "Reserved 253", - /* 254 */ "Reserved 254", - /* 255 */ "None" -}; - -/* Local functions prototypes */ - -/************************************************************************/ - -/*********************************************** - * Print MIDI event. - * Adapted from alsa-lib-0.5.5/test/seq-decode.c. - * - * Level of details is determined by debug_level (see midi-settings.h). - */ - -void midi_print_event(snd_seq_event_t *ev) -{ - if (ev->type == SND_SEQ_EVENT_SENSING) { - return; - } - - g_print("EVENT>>>"); - - if (midi_settings.misc.debug_level > MIDI_DEBUG_BASIC) { - - g_print(" Type = %d, flags = 0x%x", ev->type, ev->flags); - - switch (ev->flags & SND_SEQ_TIME_STAMP_MASK) { - case SND_SEQ_TIME_STAMP_TICK: - g_print(", time = %d ticks", ev->time.tick); - break; - - case SND_SEQ_TIME_STAMP_REAL: - g_print(", time = %d.%09d", - (int)ev->time.time.tv_sec, - (int)ev->time.time.tv_nsec); - break; - } - - g_print("\nSource = %d.%d, dest = %d.%d, queue = %d\n", - ev->source.client, - ev->source.port, - ev->dest.client, - ev->dest.port, - ev->queue); - } - - g_print(" \"%s\"", event_names[ev->type]); - - /* decode actual event data... */ - - switch (ev->type) { - case SND_SEQ_EVENT_NOTE: - g_print("; ch=%d, note=%d, velocity=%d, off_velocity=%d, duration=%d\n", - ev->data.note.channel, - ev->data.note.note, - ev->data.note.velocity, - ev->data.note.off_velocity, - ev->data.note.duration); - break; - - case SND_SEQ_EVENT_NOTEON: - g_print("; ch=%d, note ON=%d, velocity=%d\n", - ev->data.note.channel, - ev->data.note.note, - ev->data.note.velocity); - break; - - case SND_SEQ_EVENT_NOTEOFF: - g_print("; ch=%d, note OFF=%d, velocity=%d\n", - ev->data.note.channel, - ev->data.note.note, - ev->data.note.velocity); - break; - - case SND_SEQ_EVENT_KEYPRESS: - g_print("; ch=%d, keypress=%d, velocity=%d\n", - ev->data.note.channel, - ev->data.note.note, - ev->data.note.velocity); - break; - - case SND_SEQ_EVENT_CONTROLLER: - g_print("; ch=%d, param=%i, value=%i\n", - ev->data.control.channel, - ev->data.control.param, - ev->data.control.value); - break; - - case SND_SEQ_EVENT_PGMCHANGE: - g_print("; ch=%d, program=%i\n", - ev->data.control.channel, - ev->data.control.value); - break; - - case SND_SEQ_EVENT_CHANPRESS: - case SND_SEQ_EVENT_PITCHBEND: - g_print("; ch=%d, value=%i\n", - ev->data.control.channel, - ev->data.control.value); - break; - - case SND_SEQ_EVENT_SYSEX: - { - unsigned char *sysex = (unsigned char *) ev + sizeof(snd_seq_event_t); - int c; - - g_print("; len=%d [", ev->data.ext.len); - - for (c = 0; c < ev->data.ext.len; c++) { - g_print("%02x%s", sysex[c], c < ev->data.ext.len - 1 ? ":" : ""); - } - g_print("]\n"); - } - break; - - case SND_SEQ_EVENT_QFRAME: - g_print("; frame = %i\n", ev->data.control.value); - break; - - case SND_SEQ_EVENT_CLOCK: - case SND_SEQ_EVENT_START: - case SND_SEQ_EVENT_CONTINUE: - case SND_SEQ_EVENT_STOP: - g_print("; queue = %i\n", ev->data.queue.queue); - break; - - case SND_SEQ_EVENT_SENSING: - g_print("\n"); - break; - - case SND_SEQ_EVENT_ECHO: - { - int i; - - g_print("; "); - for (i = 0; i < 8; i++) { - g_print("%02i%s", ev->data.raw8.d[i], i < 7 ? ":" : "\n"); - } - } - break; - - case SND_SEQ_EVENT_CLIENT_START: - case SND_SEQ_EVENT_CLIENT_EXIT: - case SND_SEQ_EVENT_CLIENT_CHANGE: - g_print("; client = %i\n", ev->data.addr.client); - break; - - case SND_SEQ_EVENT_PORT_START: - case SND_SEQ_EVENT_PORT_EXIT: - case SND_SEQ_EVENT_PORT_CHANGE: - case SND_SEQ_EVENT_PORT_SUBSCRIBED: - case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: - g_print("; client = %i, port = %i\n", - ev->data.addr.client, ev->data.addr.port); - break; - - default: - g_print("; not implemented\n"); - } - - - switch (ev->flags & SND_SEQ_EVENT_LENGTH_MASK) { - case SND_SEQ_EVENT_LENGTH_FIXED: - return; /* sizeof(snd_seq_event_t);*/ - - case SND_SEQ_EVENT_LENGTH_VARIABLE: - return; /* sizeof(snd_seq_event_t) + ev->data.ext.len; */ - } - - return; - -} /* midi_print_event() */ - -#endif /* defined(DRIVER_ALSA_09x) */ diff -Nru soundtracker-0.6.8/app/midi-utils.c soundtracker-1.0.2~pre2/app/midi-utils.c --- soundtracker-0.6.8/app/midi-utils.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/midi-utils.c 2019-04-15 17:45:04.000000000 +0000 @@ -0,0 +1,455 @@ +/* + * Copyright (C) 2000 Luc Tanguay + * Copyright (C) 1998-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include + +#include "midi-settings.h" +#include "midi-utils.h" + +/* Global variables. */ + +/* Local variables */ + +/* Next array taken from alsa-lib-0.5.5/test/seq-decode.c */ + +static char* event_names[256] = { + /* 0 */ "System", + /* 1 */ "Result", + /* 2 */ "Reserved 2", + /* 3 */ "Reserved 3", + /* 4 */ "Reserved 4", + /* 5 */ "Note", + /* 6 */ "Note On", + /* 7 */ "Note Off", + /* 8 */ "Key Pressure", + /* 9 */ "Reserved 9", + /* 10 */ "Controller", + /* 11 */ "Program Change", + /* 12 */ "Channel Pressure", + /* 13 */ "Pitchbend", + /* 14 */ "Control14", + /* 15 */ "Nonregparam", + /* 16 */ "Regparam", + /* 17 */ "Reserved 17", + /* 18 */ "Reserved 18", + /* 19 */ "Reserved 19", + /* 20 */ "Song Position", + /* 21 */ "Song Select", + /* 22 */ "Qframe", + /* 23 */ "SMF Time Signature", + /* 24 */ "SMF Key Signature", + /* 25 */ "Reserved 25", + /* 26 */ "Reserved 26", + /* 27 */ "Reserved 27", + /* 28 */ "Reserved 28", + /* 29 */ "Reserved 29", + /* 30 */ "Start", + /* 31 */ "Continue", + /* 32 */ "Stop", + /* 33 */ "Set Position Tick", + /* 34 */ "Set Position Time", + /* 35 */ "Tempo", + /* 36 */ "Clock", + /* 37 */ "Tick", + /* 38 */ "Reserved 38", + /* 39 */ "Reserved 39", + /* 40 */ "Tune Request", + /* 41 */ "Reset", + /* 42 */ "Active Sensing", + /* 43 */ "Reserved 43", + /* 44 */ "Reserved 44", + /* 45 */ "Reserved 45", + /* 46 */ "Reserved 46", + /* 47 */ "Reserved 47", + /* 48 */ "Reserved 48", + /* 49 */ "Reserved 49", + /* 50 */ "Echo", + /* 51 */ "OSS", + /* 52 */ "Reserved 52", + /* 53 */ "Reserved 53", + /* 54 */ "Reserved 54", + /* 55 */ "Reserved 55", + /* 56 */ "Reserved 56", + /* 57 */ "Reserved 57", + /* 58 */ "Reserved 58", + /* 59 */ "Reserved 59", + /* 60 */ "Client Start", + /* 61 */ "Client Exit", + /* 62 */ "Client Change", + /* 63 */ "Port Start", + /* 64 */ "Port Exit", + /* 65 */ "Port Change", + /* 66 */ "Port Subscribed", + /* 67 */ "Port Used", + /* 68 */ "Port Unsubscribed", + /* 69 */ "Port Unused", + /* 70 */ "Sample", + /* 71 */ "Sample Cluster", + /* 72 */ "Sample Start", + /* 73 */ "Sample Stop", + /* 74 */ "Sample Freq", + /* 75 */ "Sample Volume", + /* 76 */ "Sample Loop", + /* 77 */ "Sample Position", + /* 78 */ "Sample Private1", + /* 79 */ "Reserved 79", + /* 80 */ "Reserved 80", + /* 81 */ "Reserved 81", + /* 82 */ "Reserved 82", + /* 83 */ "Reserved 83", + /* 84 */ "Reserved 84", + /* 85 */ "Reserved 85", + /* 86 */ "Reserved 86", + /* 87 */ "Reserved 87", + /* 88 */ "Reserved 88", + /* 89 */ "Reserved 89", + /* 90 */ "User 0", + /* 91 */ "User 1", + /* 92 */ "User 2", + /* 93 */ "User 3", + /* 94 */ "User 4", + /* 95 */ "User 5", + /* 96 */ "User 6", + /* 97 */ "User 7", + /* 98 */ "User 8", + /* 99 */ "User 9", + /* 100 */ "Instr Begin", + /* 101 */ "Instr End", + /* 102 */ "Instr Info", + /* 103 */ "Instr Info Result", + /* 104 */ "Instr Finfo", + /* 105 */ "Instr Finfo Result", + /* 106 */ "Instr Reset", + /* 107 */ "Instr Status", + /* 108 */ "Instr Status Result", + /* 109 */ "Instr Put", + /* 110 */ "Instr Get", + /* 111 */ "Instr Get Result", + /* 112 */ "Instr Free", + /* 113 */ "Instr List", + /* 114 */ "Instr List Result", + /* 115 */ "Instr Cluster", + /* 116 */ "Instr Cluster Get", + /* 117 */ "Instr Cluster Result", + /* 118 */ "Instr Change", + /* 119 */ "Reserved 119", + /* 120 */ "Reserved 120", + /* 121 */ "Reserved 121", + /* 122 */ "Reserved 122", + /* 123 */ "Reserved 123", + /* 124 */ "Reserved 124", + /* 125 */ "Reserved 125", + /* 126 */ "Reserved 126", + /* 127 */ "Reserved 127", + /* 128 */ "Reserved 128", + /* 129 */ "Reserved 129", + /* 130 */ "Sysex", + /* 131 */ "Bounce", + /* 132 */ "Reserved 132", + /* 133 */ "Reserved 133", + /* 134 */ "Reserved 134", + /* 135 */ "User Var0", + /* 136 */ "User Var1", + /* 137 */ "User Var2", + /* 138 */ "User Var3", + /* 139 */ "User Var4", + /* 140 */ "IPC Shm", + /* 141 */ "Reserved 141", + /* 142 */ "Reserved 142", + /* 143 */ "Reserved 143", + /* 144 */ "Reserved 144", + /* 145 */ "User IPC0", + /* 146 */ "User IPC1", + /* 147 */ "User IPC2", + /* 148 */ "User IPC3", + /* 149 */ "User IPC4", + /* 150 */ "Reserved 150", + /* 151 */ "Reserved 151", + /* 152 */ "Reserved 152", + /* 153 */ "Reserved 153", + /* 154 */ "Reserved 154", + /* 155 */ "Reserved 155", + /* 156 */ "Reserved 156", + /* 157 */ "Reserved 157", + /* 158 */ "Reserved 158", + /* 159 */ "Reserved 159", + /* 160 */ "Reserved 160", + /* 161 */ "Reserved 161", + /* 162 */ "Reserved 162", + /* 163 */ "Reserved 163", + /* 164 */ "Reserved 164", + /* 165 */ "Reserved 165", + /* 166 */ "Reserved 166", + /* 167 */ "Reserved 167", + /* 168 */ "Reserved 168", + /* 169 */ "Reserved 169", + /* 170 */ "Reserved 170", + /* 171 */ "Reserved 171", + /* 172 */ "Reserved 172", + /* 173 */ "Reserved 173", + /* 174 */ "Reserved 174", + /* 175 */ "Reserved 175", + /* 176 */ "Reserved 176", + /* 177 */ "Reserved 177", + /* 178 */ "Reserved 178", + /* 179 */ "Reserved 179", + /* 180 */ "Reserved 180", + /* 181 */ "Reserved 181", + /* 182 */ "Reserved 182", + /* 183 */ "Reserved 183", + /* 184 */ "Reserved 184", + /* 185 */ "Reserved 185", + /* 186 */ "Reserved 186", + /* 187 */ "Reserved 187", + /* 188 */ "Reserved 188", + /* 189 */ "Reserved 189", + /* 190 */ "Reserved 190", + /* 191 */ "Reserved 191", + /* 192 */ "Reserved 192", + /* 193 */ "Reserved 193", + /* 194 */ "Reserved 194", + /* 195 */ "Reserved 195", + /* 196 */ "Reserved 196", + /* 197 */ "Reserved 197", + /* 198 */ "Reserved 198", + /* 199 */ "Reserved 199", + /* 200 */ "Reserved 200", + /* 201 */ "Reserved 201", + /* 202 */ "Reserved 202", + /* 203 */ "Reserved 203", + /* 204 */ "Reserved 204", + /* 205 */ "Reserved 205", + /* 206 */ "Reserved 206", + /* 207 */ "Reserved 207", + /* 208 */ "Reserved 208", + /* 209 */ "Reserved 209", + /* 210 */ "Reserved 210", + /* 211 */ "Reserved 211", + /* 212 */ "Reserved 212", + /* 213 */ "Reserved 213", + /* 214 */ "Reserved 214", + /* 215 */ "Reserved 215", + /* 216 */ "Reserved 216", + /* 217 */ "Reserved 217", + /* 218 */ "Reserved 218", + /* 219 */ "Reserved 219", + /* 220 */ "Reserved 220", + /* 221 */ "Reserved 221", + /* 222 */ "Reserved 222", + /* 223 */ "Reserved 223", + /* 224 */ "Reserved 224", + /* 225 */ "Reserved 225", + /* 226 */ "Reserved 226", + /* 227 */ "Reserved 227", + /* 228 */ "Reserved 228", + /* 229 */ "Reserved 229", + /* 230 */ "Reserved 230", + /* 231 */ "Reserved 231", + /* 232 */ "Reserved 232", + /* 233 */ "Reserved 233", + /* 234 */ "Reserved 234", + /* 235 */ "Reserved 235", + /* 236 */ "Reserved 236", + /* 237 */ "Reserved 237", + /* 238 */ "Reserved 238", + /* 239 */ "Reserved 239", + /* 240 */ "Reserved 240", + /* 241 */ "Reserved 241", + /* 242 */ "Reserved 242", + /* 243 */ "Reserved 243", + /* 244 */ "Reserved 244", + /* 245 */ "Reserved 245", + /* 246 */ "Reserved 246", + /* 247 */ "Reserved 247", + /* 248 */ "Reserved 248", + /* 249 */ "Reserved 249", + /* 250 */ "Reserved 250", + /* 251 */ "Reserved 251", + /* 252 */ "Reserved 252", + /* 253 */ "Reserved 253", + /* 254 */ "Reserved 254", + /* 255 */ "None" +}; + +/* Local functions prototypes */ + +/************************************************************************/ + +/*********************************************** + * Print MIDI event. + * Adapted from alsa-lib-0.5.5/test/seq-decode.c. + * + * Level of details is determined by debug_level (see midi-settings.h). + */ + +void midi_print_event(snd_seq_event_t* ev) +{ + if (ev->type == SND_SEQ_EVENT_SENSING) { + return; + } + + g_print("EVENT>>>"); + + if (midi_settings.misc.debug_level > MIDI_DEBUG_BASIC) { + + g_print(" Type = %d, flags = 0x%x", ev->type, ev->flags); + + switch (ev->flags & SND_SEQ_TIME_STAMP_MASK) { + case SND_SEQ_TIME_STAMP_TICK: + g_print(", time = %d ticks", ev->time.tick); + break; + + case SND_SEQ_TIME_STAMP_REAL: + g_print(", time = %d.%09d", + (int)ev->time.time.tv_sec, + (int)ev->time.time.tv_nsec); + break; + } + + g_print("\nSource = %d.%d, dest = %d.%d, queue = %d\n", + ev->source.client, + ev->source.port, + ev->dest.client, + ev->dest.port, + ev->queue); + } + + g_print(" \"%s\"", event_names[ev->type]); + + /* decode actual event data... */ + + switch (ev->type) { + case SND_SEQ_EVENT_NOTE: + g_print("; ch=%d, note=%d, velocity=%d, off_velocity=%d, duration=%d\n", + ev->data.note.channel, + ev->data.note.note, + ev->data.note.velocity, + ev->data.note.off_velocity, + ev->data.note.duration); + break; + + case SND_SEQ_EVENT_NOTEON: + g_print("; ch=%d, note ON=%d, velocity=%d\n", + ev->data.note.channel, + ev->data.note.note, + ev->data.note.velocity); + break; + + case SND_SEQ_EVENT_NOTEOFF: + g_print("; ch=%d, note OFF=%d, velocity=%d\n", + ev->data.note.channel, + ev->data.note.note, + ev->data.note.velocity); + break; + + case SND_SEQ_EVENT_KEYPRESS: + g_print("; ch=%d, keypress=%d, velocity=%d\n", + ev->data.note.channel, + ev->data.note.note, + ev->data.note.velocity); + break; + + case SND_SEQ_EVENT_CONTROLLER: + g_print("; ch=%d, param=%i, value=%i\n", + ev->data.control.channel, + ev->data.control.param, + ev->data.control.value); + break; + + case SND_SEQ_EVENT_PGMCHANGE: + g_print("; ch=%d, program=%i\n", + ev->data.control.channel, + ev->data.control.value); + break; + + case SND_SEQ_EVENT_CHANPRESS: + case SND_SEQ_EVENT_PITCHBEND: + g_print("; ch=%d, value=%i\n", + ev->data.control.channel, + ev->data.control.value); + break; + + case SND_SEQ_EVENT_SYSEX: { + unsigned char* sysex = (unsigned char*)ev + sizeof(snd_seq_event_t); + int c; + + g_print("; len=%d [", ev->data.ext.len); + + for (c = 0; c < ev->data.ext.len; c++) { + g_print("%02x%s", sysex[c], c < ev->data.ext.len - 1 ? ":" : ""); + } + g_print("]\n"); + } break; + + case SND_SEQ_EVENT_QFRAME: + g_print("; frame = %i\n", ev->data.control.value); + break; + + case SND_SEQ_EVENT_CLOCK: + case SND_SEQ_EVENT_START: + case SND_SEQ_EVENT_CONTINUE: + case SND_SEQ_EVENT_STOP: + g_print("; queue = %i\n", ev->data.queue.queue); + break; + + case SND_SEQ_EVENT_SENSING: + g_print("\n"); + break; + + case SND_SEQ_EVENT_ECHO: { + int i; + + g_print("; "); + for (i = 0; i < 8; i++) { + g_print("%02i%s", ev->data.raw8.d[i], i < 7 ? ":" : "\n"); + } + } break; + + case SND_SEQ_EVENT_CLIENT_START: + case SND_SEQ_EVENT_CLIENT_EXIT: + case SND_SEQ_EVENT_CLIENT_CHANGE: + g_print("; client = %i\n", ev->data.addr.client); + break; + + case SND_SEQ_EVENT_PORT_START: + case SND_SEQ_EVENT_PORT_EXIT: + case SND_SEQ_EVENT_PORT_CHANGE: + case SND_SEQ_EVENT_PORT_SUBSCRIBED: + case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: + g_print("; client = %i, port = %i\n", + ev->data.addr.client, ev->data.addr.port); + break; + + default: + g_print("; not implemented\n"); + } + + switch (ev->flags & SND_SEQ_EVENT_LENGTH_MASK) { + case SND_SEQ_EVENT_LENGTH_FIXED: + return; /* sizeof(snd_seq_event_t);*/ + + case SND_SEQ_EVENT_LENGTH_VARIABLE: + return; /* sizeof(snd_seq_event_t) + ev->data.ext.len; */ + } + + return; + +} /* midi_print_event() */ diff -Nru soundtracker-0.6.8/app/midi-utils.h soundtracker-1.0.2~pre2/app/midi-utils.h --- soundtracker-0.6.8/app/midi-utils.h 2006-01-15 14:55:29.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/midi-utils.h 2019-04-15 17:45:04.000000000 +0000 @@ -1,6 +1,6 @@ /* * Copyright (C) 2000 Luc Tanguay - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,21 +20,8 @@ #ifndef _MIDI_UTILS_H #define _MIDI_UTILS_H -#include - -#if defined(DRIVER_ALSA_050) || defined(DRIVER_ALSA_09x) - -#if defined(DRIVER_ALSA_050) -#include -#else -#include -#if SND_LIB_MAJOR==1 -# define ALSA_PCM_OLD_HW_PARAMS_API -#endif #include -#endif -void midi_print_event(snd_seq_event_t *ev); +void midi_print_event(snd_seq_event_t* ev); -#endif #endif /* _MIDI_UTILS_H */ diff -Nru soundtracker-0.6.8/app/mixer.h soundtracker-1.0.2~pre2/app/mixer.h --- soundtracker-0.6.8/app/mixer.h 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixer.h 2020-01-10 18:46:46.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Mixer module definitions * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,91 +25,91 @@ #include typedef struct st_mixer_sample_info { - guint32 looptype; /* see ST_MIXER_SAMPLE_LOOPTYPE_ defines below */ - guint32 length; /* length in samples, not in bytes */ - guint32 loopstart; /* offset in samples, not in bytes */ - guint32 loopend; /* offset to first sample not being played */ - gint16 *data; /* pointer to sample data */ - GMutex *lock; + guint32 looptype; /* see ST_MIXER_SAMPLE_LOOPTYPE_ defines below */ + guint32 length; /* length in samples, not in bytes */ + guint32 loopstart; /* offset in samples, not in bytes */ + guint32 loopend; /* offset to first sample not being played */ + gint16* data; /* pointer to sample data */ + GMutex lock; } st_mixer_sample_info; /* values for st_mixer_sample_info.looptype */ -#define ST_MIXER_SAMPLE_LOOPTYPE_NONE 0 -#define ST_MIXER_SAMPLE_LOOPTYPE_AMIGA 1 -#define ST_MIXER_SAMPLE_LOOPTYPE_PINGPONG 2 +#define ST_MIXER_SAMPLE_LOOPTYPE_NONE 0 +#define ST_MIXER_SAMPLE_LOOPTYPE_AMIGA 1 +#define ST_MIXER_SAMPLE_LOOPTYPE_PINGPONG 2 typedef struct st_mixer_channel_status { - st_mixer_sample_info *current_sample; + st_mixer_sample_info* current_sample; guint32 current_position; } st_mixer_channel_status; typedef struct st_mixer { - const char *id; - const char *description; + const char* id; + const char* description; /* set number of channels to be mixed */ - void (*setnumch) (int numchannels); + void (*setnumch)(int numchannels); /* notify sample update (sample must be locked by caller!) */ - void (*updatesample) (st_mixer_sample_info *si); + void (*updatesample)(st_mixer_sample_info* si); /* set mixer output format -- signed 16 or 8 (in machine endianness) */ - gboolean (*setmixformat) (int format); + gboolean (*setmixformat)(int format); /* toggle stereo mixing -- interleaved left / right samples */ - gboolean (*setstereo) (int on); + gboolean (*setstereo)(int on); /* set mixing frequency */ - void (*setmixfreq) (guint16 frequency); + void (*setmixfreq)(guint32 frequency); /* set final amplification factor (0.0 = mute ... 1.0 = normal ... +inf = REAL LOUD! :D)*/ - void (*setampfactor) (float amplification); + void (*setampfactor)(float amplification); /* returns true if last mix() call had to clip the signal */ - gboolean (*getclipflag) (void); + gboolean (*getclipflag)(void); /* reset internal playing state */ - void (*reset) (void); + void (*reset)(void); /* play sample from the beginning, initialize nothing else */ - void (*startnote) (int channel, st_mixer_sample_info *si); + void (*startnote)(int channel, st_mixer_sample_info* si); /* stop note */ - void (*stopnote) (int channel); + void (*stopnote)(int channel); /* set curent sample play position */ - void (*setsmplpos) (int channel, guint32 offset); + void (*setsmplpos)(int channel, guint32 offset); /* set curent sample play end position */ - void (*setsmplend) (int channel, guint32 offset); + void (*setsmplend)(int channel, guint32 offset); /* set replay frequency (Hz) */ - void (*setfreq) (int channel, float frequency); + void (*setfreq)(int channel, float frequency); /* set sample volume (0.0 ... 1.0) */ - void (*setvolume) (int channel, float volume); + void (*setvolume)(int channel, float volume); /* set sample panning (-1.0 ... +1.0) */ - void (*setpanning) (int channel, float panning); + void (*setpanning)(int channel, float panning); /* set channel filter cutoff frequency (-1.0 for off, or 0.0 ... +1.0) */ - void (*setchcutoff) (int channel, float freq); + void (*setchcutoff)(int channel, float freq); /* set channel filter resonance (0.0 ... +1.0) */ - void (*setchreso) (int channel, float reso); + void (*setchreso)(int channel, float reso); /* do the mix, return pointer to end of dest */ - void* (*mix) (void *dest, guint32 count, gint16 *scopebufs[], int scopebuf_offset); + void* (*mix)(void* dest, guint32 count, gint16* scopebufs[], int scopebuf_offset); /* get status information */ - void (*dumpstatus) (st_mixer_channel_status array[]); - + void (*dumpstatus)(st_mixer_channel_status array[]); + /* load channel settings from tracer */ - void (*loadchsettings) (int channel); + void (*loadchsettings)(int channel); guint32 max_sample_length; - struct st_mixer *next; + struct st_mixer* next; } st_mixer; typedef enum { @@ -122,4 +122,18 @@ ST_MIXER_FORMAT_STEREO = 16, } STMixerFormat; +static const guint res[] = { 1, 2, 2, 1, 2, 2, 1, 1 }; /* In bytes, first and last ones for safety */ + +static inline guint +mixer_get_resolution(STMixerFormat f) +{ + return res[f & 0x7]; +} + +static inline guint +mixer_is_format_stereo(STMixerFormat f) +{ + return (f & ST_MIXER_FORMAT_STEREO) ? 1 : 0; +} + #endif /* _MIXER_H */ diff -Nru soundtracker-0.6.8/app/mixers/integer32-asm.h soundtracker-1.0.2~pre2/app/mixers/integer32-asm.h --- soundtracker-0.6.8/app/mixers/integer32-asm.h 2001-01-03 13:24:11.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/integer32-asm.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ - -/* - * The Real SoundTracker - Assembly routines for the mixer (header) - * - * Copyright (C) 1999-2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef _ST_MIXERASM_H -#define _ST_MIXERASM_H - -#include - -gint32 mixerasm_stereo_16_scopes (gint32 current, // 8 - gint32 increment, // 12 - gint16 *data, // 16 - gint32 *mixed, // 20 - gint16 *scopedata, // 24 - guint32 volume, // 28 - guint32 leftvol, // 32 - guint32 rightvol, // 36 - guint32 count); // 40 - -gint32 mixerasm_mono_16_scopes (gint32 current, // 8 - gint32 increment, // 12 - gint16 *data, // 16 - gint32 *mixed, // 20 - gint16 *scopedata, // 24 - guint32 volume, // 28 - guint32 count); // 32 - -gint32 mixerasm_stereo_16(gint32 current, // 8 - gint32 increment, // 12 - gint16 *data, // 16 - gint32 *mixed, // 20 - guint32 leftvol, // 24 - guint32 rightvol, // 28 - guint32 count); // 32 - -gint32 mixerasm_mono_16(gint32 current, // 8 - gint32 increment, // 12 - gint16 *data, // 16 - gint32 *mixed, // 20 - guint32 volume, // 24 - guint32 count); // 28 - -#endif /* _ST_MIXERASM_H */ diff -Nru soundtracker-0.6.8/app/mixers/integer32-asm.S soundtracker-1.0.2~pre2/app/mixers/integer32-asm.S --- soundtracker-0.6.8/app/mixers/integer32-asm.S 2002-08-17 16:11:49.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/integer32-asm.S 1970-01-01 00:00:00.000000000 +0000 @@ -1,234 +0,0 @@ - -/* - * The Real SoundTracker - Assembly routines for the mixer (header) - * - * Copyright (C) 1999 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - -------------------------------------------------------------------------- - - The first code ever that I've written in i386 Assembly. It's not been - optimized for pairing / pipelining, and it's only marginally faster than - the C version on my K6-2 @400 (12-13% instead of 14% CPU usage with - astaris.xm -- stereo_16_scopes, that is). - - -------------------------------------------------------------------------- - */ - -#ifndef _C_LABEL -# ifdef __ELF__ -# define _C_LABEL(x) x -# else -# define _C_LABEL(x) _ ## x -# endif -#endif -#undef GLOBAL -#define GLOBAL(x) .globl _C_LABEL(x); _C_LABEL(x): - -#if defined(__i386__) - -#define ACCURACY 12 - -.text - - GLOBAL(mixerasm_stereo_16_scopes) - pushl %ebp - movl %esp,%ebp - - pushl %edi - pushl %esi - pushl %ebx - pushl %ecx - pushl %edx - - movl 8(%ebp),%eax # eax = fixed-point sample position - movl 16(%ebp),%esi # esi = source sample data - movl 20(%ebp),%ecx # ecx = destination mixed data (32bit) - movl 24(%ebp),%edi # edi = destination scope data (8bit) - movl 40(%ebp),%esp # esp = loop counter - # ebx, edx = working registers -.0: - movl %eax,%ebx # Get sample into edx - sarl $ACCURACY,%ebx - movswl (%esi,%ebx,2),%edx - - imull 28(%ebp),%edx # Apply volume - - movl %edx,%ebx # left channel - imull 32(%ebp),%ebx - sarl $6,%ebx - addl %ebx,(%ecx) - - movl %edx, %ebx # right channel - imull 36(%ebp),%ebx - sarl $6,%ebx - addl %ebx,4(%ecx) - sarl $6,%edx - - addl $8,%ecx # (increment mixed data pointer) - movw %dx,(%edi) # Store scope data - addl 12(%ebp),%eax # (increment sample position pointer) - - lea 2(%edi),%edi # (increment scope data pointer) - - decl %esp # loop - jnz .0 - - lea -20(%ebp),%esp - - popl %edx - popl %ecx - popl %ebx - popl %esi - popl %edi - - leave - ret - - GLOBAL(mixerasm_mono_16_scopes) - pushl %ebp - movl %esp,%ebp - - pushl %edi - pushl %esi - pushl %ebx - pushl %ecx - pushl %edx - - movl 8(%ebp),%eax # eax = fixed-point sample position - movl 16(%ebp),%esi # esi = source sample data - movl 20(%ebp),%ecx # ecx = destination mixed data (32bit) - movl 24(%ebp),%edi # edi = destination scope data (8bit) - movl 32(%ebp),%esp # esp = loop counter - movl 28(%ebp),%ebx # ebx = volume - # edx = working register -.1: - movl %eax,%edx # Get sample into edx - sarl $ACCURACY,%edx - movswl (%esi,%edx,2),%edx - - imull %ebx,%edx # Apply volume - addl %edx,(%ecx) - - sarl $6,%edx - movw %dx,(%edi) # Store scope data - lea 2(%edi),%edi # (increment scope data pointer) - - addl $4,%ecx - addl 12(%ebp),%eax # (increment sample position pointer) - - decl %esp # loop - jnz .1 - - lea -20(%ebp),%esp - - popl %edx - popl %ecx - popl %ebx - popl %esi - popl %edi - - leave - ret - - GLOBAL(mixerasm_stereo_16) - pushl %ebp - movl %esp,%ebp - - pushl %edi - pushl %esi - pushl %ebx - pushl %ecx - pushl %edx - - movl 8(%ebp),%eax # eax = fixed-point sample position - movl 12(%ebp),%ecx # ecx = increment - movl 16(%ebp),%esi # esi = source sample data - movl 20(%ebp),%edi # edi = destination mixed data (32bit) - movl 32(%ebp),%esp # esp = loop counter - # ebx, edx = working registers -.2: - movl %eax,%ebx # Get sample into edx - sarl $ACCURACY,%ebx - movswl (%esi,%ebx,2),%edx - movl %edx,%ebx - - imull 24(%ebp),%ebx # left channel - imull 28(%ebp),%edx # right channel - sarl $6,%ebx - sarl $6,%edx - addl %ebx,(%edi) - addl %edx,4(%edi) - - addl $8,%edi # (increment mixed data pointer) - addl %ecx,%eax # (increment sample position pointer) - - decl %esp # loop - jnz .2 - - lea -20(%ebp),%esp - - popl %edx - popl %ecx - popl %ebx - popl %esi - popl %edi - - leave - ret - - GLOBAL(mixerasm_mono_16) - pushl %ebp - movl %esp,%ebp - - pushl %edi - pushl %esi - pushl %ebx - pushl %ecx - pushl %edx - - movl 8(%ebp),%eax # eax = fixed-point sample position - movl 12(%ebp),%ecx # ecx = increment - movl 16(%ebp),%esi # esi = source sample data - movl 20(%ebp),%edi # edi = destination mixed data (32bit) - movl 28(%ebp),%esp # esp = loop counter - movl 24(%ebp),%ebx # ebx = volume - # edx = working register -.3: - movl %eax,%edx # Get sample into edx - sarl $ACCURACY,%edx - movswl (%esi,%edx,2),%edx - - imull %ebx,%edx # Apply volume - addl %ecx,%eax # (increment sample position pointer) - addl %edx,(%edi) - addl $4,%edi - - decl %esp # loop - jnz .3 - - lea -20(%ebp),%esp - - popl %edx - popl %ecx - popl %ebx - popl %esi - popl %edi - - leave - ret - -#endif /* defined(__i386__) */ diff -Nru soundtracker-0.6.8/app/mixers/integer32.c soundtracker-1.0.2~pre2/app/mixers/integer32.c --- soundtracker-0.6.8/app/mixers/integer32.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/integer32.c 2019-04-15 17:45:04.000000000 +0000 @@ -3,7 +3,7 @@ * The Real SoundTracker - Basic 32bit integers mixer. Probably the * worst which you can come up with. * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,57 +22,47 @@ #include -#include -#include +#include #include +#include +#include #include "mixer.h" -#include "i18n.h" #include "tracer.h" -#if defined(__i386__) && !defined(NO_ASM) -#define MIX_ASM 1 -#else -#undef MIX_ASM -#endif - -#ifdef MIX_ASM -#include "integer32-asm.h" -#endif - static int num_channels, mixfreq, amp = 8; -static gint32 *mixbuf = NULL; +static gint32* mixbuf = NULL; static int mixbufsize = 0, clipflag; static int stereo; typedef struct integer32_channel { - st_mixer_sample_info *sample; + st_mixer_sample_info* sample; - void *data; /* copy of sample->data */ - guint32 length; /* length of sample (converted) */ - guint32 playend; /* for a forced premature end of the sample */ - - int running; /* this channel is active */ - guint32 current; /* current playback position in sample (converted) */ - guint32 speed; /* sample playback speed (converted) */ - - guint32 loopstart; /* loop start (converted) */ - guint32 loopend; /* loop end (converted) */ - int loopflags; /* 0 none, 1 forward, 2 pingpong */ - int direction; /* current pingpong direction (+1 forward, -1 backward) */ + void* data; /* copy of sample->data */ + guint32 length; /* length of sample (converted) */ + guint32 playend; /* for a forced premature end of the sample */ + + int running; /* this channel is active */ + guint32 current; /* current playback position in sample (converted) */ + guint32 speed; /* sample playback speed (converted) */ + + guint32 loopstart; /* loop start (converted) */ + guint32 loopend; /* loop end (converted) */ + int loopflags; /* 0 none, 1 forward, 2 pingpong */ + int direction; /* current pingpong direction (+1 forward, -1 backward) */ - int volume; /* 0..64 */ - float panning; /* -1.0 .. +1.0 */ + int volume; /* 0..64 */ + float panning; /* -1.0 .. +1.0 */ } integer32_channel; static integer32_channel channels[32]; -#define ACCURACY 12 /* accuracy of the fixed point stuff, ALSO HARDCODED in the assembly routines!! */ +#define ACCURACY 12 /* accuracy of the fixed point stuff, ALSO HARDCODED in the assembly routines!! */ -#define MAX_SAMPLE_LENGTH ((1 << (32 - ACCURACY)) - 1) +#define MAX_SAMPLE_LENGTH ((1 << (32 - ACCURACY)) - 1) static void -integer32_setnumch (int n) +integer32_setnumch(int n) { g_assert(n >= 1 && n <= 32); @@ -80,81 +70,81 @@ } static void -integer32_updatesample (st_mixer_sample_info *si) +integer32_updatesample(st_mixer_sample_info* si) { int i; - integer32_channel *c; + integer32_channel* c; + + for (i = 0; i < 32; i++) { + c = &channels[i]; + if (c->sample != si || !c->running) { + continue; + } + + if (c->data != si->data + || c->length != MIN(si->length, MAX_SAMPLE_LENGTH) << ACCURACY + || c->loopflags != si->looptype) { + c->running = 0; + } - for(i = 0; i < 32; i++) { - c = &channels[i]; - if(c->sample != si || !c->running) { - continue; - } - - if(c->data != si->data - || c->length != MIN(si->length, MAX_SAMPLE_LENGTH) << ACCURACY - || c->loopflags != si->looptype) { - c->running = 0; - } - - /* No relevant data has changed. Don't stop the sample, but update + /* No relevant data has changed. Don't stop the sample, but update our local loop data instead. */ - c->loopstart = MIN(si->loopstart, MAX_SAMPLE_LENGTH) << ACCURACY; - c->loopend = MIN(si->loopend, MAX_SAMPLE_LENGTH) << ACCURACY; - c->loopflags = si->looptype; - if(c->loopflags != ST_MIXER_SAMPLE_LOOPTYPE_NONE) { - // we can be more clever here... - c->current = c->loopstart; - c->direction = 1; - } + c->loopstart = MIN(si->loopstart, MAX_SAMPLE_LENGTH) << ACCURACY; + c->loopend = MIN(si->loopend, MAX_SAMPLE_LENGTH) << ACCURACY; + c->loopflags = si->looptype; + if (c->loopflags != ST_MIXER_SAMPLE_LOOPTYPE_NONE) { + // we can be more clever here... + c->current = c->loopstart; + c->direction = 1; + } } } static gboolean -integer32_setmixformat (int format) +integer32_setmixformat(int format) { - if(format != 16) - return FALSE; + if (format != 16) + return FALSE; return TRUE; } static gboolean -integer32_setstereo (int on) +integer32_setstereo(int on) { stereo = on; return TRUE; } static void -integer32_setmixfreq (guint16 frequency) +integer32_setmixfreq(guint32 frequency) { mixfreq = frequency; } static void -integer32_setampfactor (float amplification) +integer32_setampfactor(float amplification) { amp = 8 * amplification; } static gboolean -integer32_getclipflag (void) +integer32_getclipflag(void) { return clipflag; } static void -integer32_reset (void) +integer32_reset(void) { memset(channels, 0, sizeof(channels)); } static void -integer32_startnote (int channel, - st_mixer_sample_info *s) +integer32_startnote(int channel, + st_mixer_sample_info* s) { - integer32_channel *c = &channels[channel]; + integer32_channel* c = &channels[channel]; c->sample = s; c->data = s->data; @@ -170,310 +160,266 @@ } static void -integer32_stopnote (int channel) +integer32_stopnote(int channel) { - integer32_channel *c = &channels[channel]; + integer32_channel* c = &channels[channel]; c->running = 0; } static void -integer32_setsmplpos (int channel, - guint32 offset) +integer32_setsmplpos(int channel, + guint32 offset) { - integer32_channel *c = &channels[channel]; + integer32_channel* c = &channels[channel]; - if(offset < c->length >> ACCURACY) { - c->current = offset << ACCURACY; - c->direction = 1; + if (offsetlength>> ACCURACY) { + c->current = offset << ACCURACY; + c->direction = 1; } else { - c->running = 0; + c->running = 0; } } static void -integer32_setsmplend (int channel, - guint32 offset) +integer32_setsmplend(int channel, + guint32 offset) { - integer32_channel *c = &channels[channel]; + integer32_channel* c = &channels[channel]; - if(c->current != 0 || offset < c->length >> ACCURACY) { - c->playend = MIN(offset, MAX_SAMPLE_LENGTH) << ACCURACY; + if (c->current != 0 || offsetlength>> ACCURACY) { + c->playend = MIN(offset, MAX_SAMPLE_LENGTH) << ACCURACY; } } static void -integer32_setfreq (int channel, - float frequency) +integer32_setfreq(int channel, + float frequency) { - integer32_channel *c = &channels[channel]; + integer32_channel* c = &channels[channel]; - if(frequency > (0x7fffffff >> ACCURACY)) { - frequency = (0x7fffffff >> ACCURACY); + if (frequency > (0x7fffffff >> ACCURACY)) { + frequency = (0x7fffffff >> ACCURACY); } c->speed = frequency * (1 << ACCURACY) / mixfreq; - if(c->speed == 0) { - c->speed = 1; + if (c->speed == 0) { + c->speed = 1; } } static void -integer32_setvolume (int channel, - float volume) +integer32_setvolume(int channel, + float volume) { - integer32_channel *c = &channels[channel]; + integer32_channel* c = &channels[channel]; c->volume = 64 * volume; } static void -integer32_setpanning (int channel, - float panning) +integer32_setpanning(int channel, + float panning) { - integer32_channel *c = &channels[channel]; + integer32_channel* c = &channels[channel]; c->panning = panning; } -static void * -integer32_mix (void *dest, - guint32 count, - gint16 *scopebufs[], - int scopebuf_offset) +static void* +integer32_mix(void* dest, + guint32 count, + gint16* scopebufs[], + int scopebuf_offset) { int todo; int i, j, t, *m, v; - integer32_channel *c; + integer32_channel* c; int done; int offs2end, oflcnt, looplen; - gint16 *sndbuf; - gint16 *scopedata = NULL; + gint16* sndbuf; + gint16* scopedata = NULL; int vl = 0; int vr = 0; - gint16 *data; -#ifndef MIX_ASM + gint16* data; int s, val; -#endif - if((stereo + 1) * count > mixbufsize) { - g_free(mixbuf); - mixbuf = g_new(gint32, (stereo + 1) * count); - mixbufsize = (stereo + 1) * count; + if ((stereo + 1) * count > mixbufsize) { + g_free(mixbuf); + mixbuf = g_new(gint32, (stereo + 1) * count); + mixbufsize = (stereo + 1) * count; } memset(mixbuf, 0, (stereo + 1) * 4 * count); - for(i = 0; i < num_channels; i++) { - c = &channels[i]; - t = count; - m = mixbuf; - v = c->volume; - - if(scopebufs) - scopedata = scopebufs[i] + scopebuf_offset; - - if(!c->running) { - if(scopebufs) - memset(scopedata, 0, 2 * count); - continue; - } - - g_assert(c->sample->lock); - g_mutex_lock(c->sample->lock); - - while(t) { - /* Check how much of the sample we can fill in one run */ - if(c->loopflags && c->playend == 0) { - looplen = c->loopend - c->loopstart; - g_assert(looplen > 0); - if(c->loopflags == ST_MIXER_SAMPLE_LOOPTYPE_AMIGA) { - offs2end = c->loopend - c->current; - if(offs2end <= 0) { - oflcnt = - offs2end / looplen; - offs2end += oflcnt * looplen; - c->current = c->loopstart - offs2end; - offs2end = c->loopend - c->current; - } - } else /* if(c->loopflags == ST_MIXER_SAMPLE_LOOPTYPE_PINGPONG) */ { - if(c->direction == 1) - offs2end = c->loopend - c->current; - else - offs2end = c->current - c->loopstart; - - if(offs2end <= 0) { - oflcnt = - offs2end / looplen; - offs2end += oflcnt * looplen; - if((oflcnt && 1) ^ (c->direction == -1)) { - c->current = c->loopstart - offs2end; - offs2end = c->loopend - c->current; - c->direction = 1; - } else { - c->current = c->loopend + offs2end; - if(c->current == c->loopend) - c->current--; - offs2end = c->current - c->loopstart; - c->direction = -1; - } - } - } - g_assert(offs2end >= 0); - done = offs2end / c->speed + 1; - } else /* if(c->loopflags == LOOP_NO) */ { - done = ((c->playend ? c->playend : c->length) - c->current) / c->speed; - if(!done) { - c->running = 0; - break; - } - } - - g_assert(done > 0); - - if(done > t) - done = t; - t -= done; - - g_assert(c->current >= 0 && (c->current >> ACCURACY) < c->length); - - if(stereo) { - vl = 64 - ((c->panning + 1.0) * 32); - vr = (c->panning + 1.0) * 32; - } - - /* This one does the actual mixing */ - data = c->data; - if(scopebufs) { - if(stereo) { -#ifdef MIX_ASM - j = mixerasm_stereo_16_scopes(c->current, c->speed * c->direction, - data, m, scopedata, - v, vl, vr, - done); - - m += 2 * done; - scopedata += done; -#else - for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { - val = v * data[j >> ACCURACY]; - *m++ += vl * val >> 6; - *m++ += vr * val >> 6; - *scopedata++ = val >> 6; - } -#endif - } else { -#ifdef MIX_ASM - j = mixerasm_mono_16_scopes(c->current, c->speed * c->direction, - data, m, scopedata, - v, - done); - - m += done; - scopedata += done; -#else - for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { - val = v * data[j >> ACCURACY]; - *m++ += val; - *scopedata++ = val >> 6; - } -#endif - } - } else { - if(stereo) { - vl *= v; - vr *= v; -#ifdef MIX_ASM - j = mixerasm_stereo_16(c->current, c->speed * c->direction, - data, m, - vl, vr, - done); - - m += 2 * done; - scopedata += done; -#else - for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { - val = data[j >> ACCURACY]; - *m++ += vl * val >> 6; - *m++ += vr * val >> 6; - } -#endif - } else { -#ifdef MIX_ASM - j = mixerasm_mono_16(c->current, c->speed * c->direction, - data, m, - v, - done); - - m += done; - scopedata += done; -#else - for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { - val = v * data[j >> ACCURACY]; - *m++ += val; - } -#endif - } - } + for (i = 0; i < num_channels; i++) { + c = &channels[i]; + t = count; + m = mixbuf; + v = c->volume; + + if (scopebufs) + scopedata = scopebufs[i] + scopebuf_offset; + + if (!c->running) { + if (scopebufs) + memset(scopedata, 0, 2 * count); + continue; + } + + g_mutex_lock(&c->sample->lock); + + while (t) { + /* Check how much of the sample we can fill in one run */ + if (c->loopflags && c->playend == 0) { + looplen = c->loopend - c->loopstart; + g_assert(looplen > 0); + if (c->loopflags == ST_MIXER_SAMPLE_LOOPTYPE_AMIGA) { + offs2end = c->loopend - c->current; + if (offs2end <= 0) { + oflcnt = -offs2end / looplen; + offs2end += oflcnt * looplen; + c->current = c->loopstart - offs2end; + offs2end = c->loopend - c->current; + } + } else /* if(c->loopflags == ST_MIXER_SAMPLE_LOOPTYPE_PINGPONG) */ { + if (c->direction == 1) + offs2end = c->loopend - c->current; + else + offs2end = c->current - c->loopstart; + + if (offs2end <= 0) { + oflcnt = -offs2end / looplen; + offs2end += oflcnt * looplen; + if ((oflcnt && 1) ^ (c->direction == -1)) { + c->current = c->loopstart - offs2end; + offs2end = c->loopend - c->current; + c->direction = 1; + } else { + c->current = c->loopend + offs2end; + if (c->current == c->loopend) + c->current--; + offs2end = c->current - c->loopstart; + c->direction = -1; + } + } + } + g_assert(offs2end >= 0); + done = offs2end / c->speed + 1; + } else /* if(c->loopflags == LOOP_NO) */ { + done = ((c->playend ? c->playend : c->length) - c->current) / c->speed; + if (!done) { + c->running = 0; + break; + } + } + + g_assert(done > 0); + + if (done > t) + done = t; + t -= done; + + g_assert(c->current >= 0 && (c->current >> ACCURACY) < c->length); + + if (stereo) { + vl = 64 - ((c->panning + 1.0) * 32); + vr = (c->panning + 1.0) * 32; + } + + /* This one does the actual mixing */ + data = c->data; + if (scopebufs) { + if (stereo) { + for (j = c->current, s = c->speed * c->direction; done; done--, j += s) { + val = v * data[j >> ACCURACY]; + *m++ += vl * val >> 6; + *m++ += vr * val >> 6; + *scopedata++ = val >> 6; + } + } else { + for (j = c->current, s = c->speed * c->direction; done; done--, j += s) { + val = v * data[j >> ACCURACY]; + *m++ += val; + *scopedata++ = val >> 6; + } + } + } else { + if (stereo) { + vl *= v; + vr *= v; + for (j = c->current, s = c->speed * c->direction; done; done--, j += s) { + val = data[j >> ACCURACY]; + *m++ += vl * val >> 6; + *m++ += vr * val >> 6; + } + } else { + for (j = c->current, s = c->speed * c->direction; done; done--, j += s) { + val = v * data[j >> ACCURACY]; + *m++ += val; + } + } + } - c->current = j; - } + c->current = j; + } - g_mutex_unlock(c->sample->lock); + g_mutex_unlock(&c->sample->lock); } /* modules with many channels get additional amplification here */ t = (4 * log(num_channels) / log(4)) * 64 * 8; - for(sndbuf = dest, clipflag = 0, todo = 0; todo < (stereo + 1) * count; todo++) { - gint32 a, b; + for (sndbuf = dest, clipflag = 0, todo = 0; todo < (stereo + 1) * count; todo++) { + gint32 a, b; - a = mixbuf[todo]; - a *= amp; /* amplify */ - a /= t; - - b = CLAMP(a, -32768, 32767); - if(a != b) { - clipflag = 1; - } + a = mixbuf[todo]; + a *= amp; /* amplify */ + a /= t; + + b = CLAMP(a, -32768, 32767); + if (a != b) { + clipflag = 1; + } - *sndbuf++ = b; + *sndbuf++ = b; } return dest + (stereo + 1) * 2 * count; } -void -integer32_dumpstatus (st_mixer_channel_status array[]) +void integer32_dumpstatus(st_mixer_channel_status array[]) { int i; - for(i = 0; i < 32; i++) { - if(channels[i].running) { - array[i].current_sample = channels[i].sample; - array[i].current_position = channels[i].current >> ACCURACY; - } else { - array[i].current_sample = NULL; - } + for (i = 0; i < 32; i++) { + if (channels[i].running) { + array[i].current_sample = channels[i].sample; + array[i].current_position = channels[i].current >> ACCURACY; + } else { + array[i].current_sample = NULL; + } } } static void -integer32_loadchsettings (int ch) +integer32_loadchsettings(int ch) { - tracer_channel *tch; - integer32_channel *c; + tracer_channel* tch; + integer32_channel* c; guint64 tmp64; g_assert(ch < num_channels); - + tch = tracer_return_channel(ch); c = &channels[ch]; c->sample = tch->sample; c->data = tch->data; - if (tch->sample){ - c->loopflags = tch->sample->looptype; - c->loopstart = MIN(tch->sample->loopstart, MAX_SAMPLE_LENGTH) << ACCURACY; - c->loopend = MIN(tch->sample->loopend, MAX_SAMPLE_LENGTH) << ACCURACY; + if (tch->sample) { + c->loopflags = tch->sample->looptype; + c->loopstart = MIN(tch->sample->loopstart, MAX_SAMPLE_LENGTH) << ACCURACY; + c->loopend = MIN(tch->sample->loopend, MAX_SAMPLE_LENGTH) << ACCURACY; } c->length = MIN(tch->length, MAX_SAMPLE_LENGTH) << ACCURACY; c->volume = tch->volume * 64; @@ -484,7 +430,7 @@ c->current = MIN(tmp64, MAX_SAMPLE_LENGTH << ACCURACY); tmp64 = (((guint64)tch->freqw << 32) + tch->freqf) >> (32 - ACCURACY); c->speed = MIN(tmp64, MAX_SAMPLE_LENGTH << ACCURACY); - + c->running = tch->flags & TR_FLAG_SAMPLE_RUNNING; } diff -Nru soundtracker-0.6.8/app/mixers/kbfloat.c soundtracker-1.0.2~pre2/app/mixers/kbfloat.c --- soundtracker-0.6.8/app/mixers/kbfloat.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/kbfloat.c 2021-02-06 10:29:09.000000000 +0000 @@ -0,0 +1,867 @@ + +/* + * The Real SoundTracker - Cubically interpolating mixing routines + * with IT style filter support + * + * Copyright (C) 2001-2019 Michael Krause + * Copyright (C) 1999-2000 Tammo Hinrichs + + * Despite its name, this mixer can run on every platform. + + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include +#include +#include +#include +#include + +#include "kbfloat-core.h" +#include "mixer.h" +#include "tracer.h" +#include "st-subs.h" + +static int num_channels, mixfreq; +static float fmixfreq; +static int clipflag; + +static float* kb_x86_tempbuf = NULL; +static int kb_x86_tempbufsize = 0; + +static float kb_x86_amplification = 0.25; + +float kb_x86_ct0[256]; +float kb_x86_ct1[256]; +float kb_x86_ct2[256]; +float kb_x86_ct3[256]; + +typedef struct kb_x86_channel { + st_mixer_sample_info* sample; + + void* data; // for updatesample() to see if sample has changed + int looptype; + guint32 length; + + guint32 flags; // see below + float volume; // 0.0 ... 1.0 + float panning; // 0.0 ... 1.0 + int direction; // +1 for forward, -1 for backward + guint32 playend; // for a forced premature end of the sample + + float volleft; // left volume (1.0 = no change) + float volright; // rite volume (1.0 = no change) + + guint32 ramp_num_samples; // number of mixer output samples during which ramping is active + float rampleft; // left volramp (delta_vol per sample) + float rampright; // rite volramp (delta_vol per sample) + float rampdestleft; // ramp destination volume left + float rampdestright; // ramp destination volume right + + guint32 positionw; // current sample position (whole part of 32.32) + guint32 positionf; // current sample position (fractional part of 32.32) + guint32 freqw; // frequency (whole part of 32.32) + guint32 freqf; // frequency (fractional part of 32.32) + + float ffreq; // filter frequency (0<=x<=1) + float freso; // filter resonance (0<=x<1) + float fl1; // filter lp buffer + float fb1; // filter bp buffer + gboolean filter_on; +} kb_x86_channel; + +#define KB_FLAG_LOOP_UNIDIRECTIONAL 1 +#define KB_FLAG_LOOP_BIDIRECTIONAL 2 +#define KB_FLAG_SAMPLE_RUNNING 4 +#define KB_FLAG_JUST_STARTED 8 +#define KB_FLAG_UPPER_ACTIVE 16 +#define KB_FLAG_STOP_AFTER_VOLRAMP 32 +#define KB_FLAG_DO_SAMPLE_START_DECLICK 64 + +// This is an artificial limit. The code can do more channels. +static kb_x86_channel channels[2 * 32]; + +// Number of samples the mixer needs in advance +#define KB_X86_SAMPLE_PADDING 3 + +// A ramp from 32768 to 0 should take RAMP_MAX_DURATION seconds +#define RAMP_MAX_DURATION 0.001 + +static void +kb_x86_setnumch(int n) +{ + g_assert(n >= 1 && n <= 32); + + num_channels = n; +} + +/* This is just a quick hack to implement sample-change declicking + without coding full virtual channel support. But this will come + sooner or later so that hack is only temporary. + + It works like this: When a sample is stopped and a new one is + immediately started, there usually results a little click. In order + to avoid it, we let the old sample continue, but start a quick + volume downramp on it towards 0 (so that the click gets a linear + ramp and it's not that disturbing). It's obvious that for the time + of the volume ramp, we need to store the kb_x86_channel data blocks + of both the old channel and the new channel. Because of this, our + channels[] array is twice as large, and in the lower copy, the + KB_FLAG_UPPER_ACTIVE flag is active when the upper copy is the + one with the currently running main sample and the lower copy is + only the fading out old sample. + + Alle Klarheiten beseitigt? :-) As I said before, full + virtual-channel support will make this superfluous. +*/ +static kb_x86_channel* +kb_x86_get_channel_struct(int channel) +{ + kb_x86_channel* c = &channels[channel]; + + if (c->flags & KB_FLAG_UPPER_ACTIVE) { + c = &channels[channel + 32]; + } + + return c; +} + +static void +kb_x86_updatesample(st_mixer_sample_info* si) +{ + int i; + kb_x86_channel* c; + + for (i = 0; i < 2 * 32; i++) { + c = &channels[i]; + + if (c->sample != si || !(c->flags & KB_FLAG_SAMPLE_RUNNING)) { + continue; + } + + if (c->data != si->data + || c->length != si->length + || c->looptype != si->looptype) { + c->flags &= ~KB_FLAG_SAMPLE_RUNNING; + continue; + } + + /* No relevant data has changed. Don't stop the sample, but update + our local loop data instead. */ + c->looptype = si->looptype; + if (c->looptype != ST_MIXER_SAMPLE_LOOPTYPE_NONE) { + if (c->positionw < si->loopstart) { + c->positionw = si->loopstart; + c->positionf = 0x7fffffff; + } else if (c->positionw >= si->loopend) { + c->positionw = si->loopend - 1; + c->positionf = 0x7fffffff; + } + } + } +} + +static gboolean +kb_x86_setmixformat(int format) +{ + if (format != 16) + return FALSE; + + return TRUE; +} + +static gboolean +kb_x86_setstereo(int on) +{ + if (!on) + return FALSE; + + return TRUE; +} + +static void +kb_x86_setmixfreq(guint32 frequency) +{ + mixfreq = frequency; + fmixfreq = 48000.0 / (float)mixfreq; +} + +static void +kb_x86_setampfactor(float amplification) +{ + kb_x86_amplification = 0.25 * amplification; +} + +static gboolean +kb_x86_getclipflag(void) +{ + return clipflag; +} + +static void +kb_x86_reset(void) +{ + int i; + + memset(channels, 0, sizeof(channels)); + clipflag = 0; + + for (i = 0; i < 256; i++) { + float x1 = i / 256.0; + float x2 = x1 * x1; + float x3 = x1 * x1 * x1; + kb_x86_ct0[i] = -0.5 * x3 + x2 - 0.5 * x1; + kb_x86_ct1[i] = 1.5 * x3 - 2.5 * x2 + 1; + kb_x86_ct2[i] = -1.5 * x3 + 2 * x2 + 0.5 * x1; + kb_x86_ct3[i] = 0.5 * x3 - 0.5 * x2; + } +} + +static void +kb_x86_startnote(int channel, + st_mixer_sample_info* s) +{ + kb_x86_channel* c = kb_x86_get_channel_struct(channel); + + c->flags &= KB_FLAG_UPPER_ACTIVE; + + c->sample = s; + + // The following three for update_sample() + c->data = s->data; + c->length = s->length; + c->looptype = s->looptype; + + c->positionw = 0; + c->positionf = 0; + c->playend = 0; + if (s->looptype == ST_MIXER_SAMPLE_LOOPTYPE_AMIGA) { + c->flags |= KB_FLAG_LOOP_UNIDIRECTIONAL; + } else if (s->looptype == ST_MIXER_SAMPLE_LOOPTYPE_PINGPONG) { + c->flags |= KB_FLAG_LOOP_BIDIRECTIONAL; + } + c->direction = 1; + c->ramp_num_samples = 0; + c->freso = 0.0; + c->ffreq = fmixfreq; + c->filter_on = FALSE; + c->fl1 = 0.0; + c->fb1 = 0.0; + c->flags |= KB_FLAG_SAMPLE_RUNNING | KB_FLAG_JUST_STARTED; +} + +static void +kb_x86_stopnote(int channel) +{ + kb_x86_channel* c = &channels[channel]; + kb_x86_channel* current_used_chan = kb_x86_get_channel_struct(channel); + + if (current_used_chan->flags & KB_FLAG_SAMPLE_RUNNING) { + if (current_used_chan != c) { + c->flags &= ~KB_FLAG_UPPER_ACTIVE; + } else { + c->flags |= KB_FLAG_UPPER_ACTIVE; + } + + c = current_used_chan; + + c->flags |= KB_FLAG_STOP_AFTER_VOLRAMP; + + c->ramp_num_samples = RAMP_MAX_DURATION * mixfreq; + if (c->ramp_num_samples == 0) { + c->ramp_num_samples = 1; + } + c->rampdestleft = 0; + c->rampdestright = 0; + c->rampleft = (c->rampdestleft - c->volleft) / c->ramp_num_samples; + c->rampright = (c->rampdestright - c->volright) / c->ramp_num_samples; + } +} + +static void +kb_x86_setsmplpos(int channel, + guint32 offset) +{ + kb_x86_channel* c = kb_x86_get_channel_struct(channel); + + if (c->sample && c->flags != 0) { + if (offset < c->sample->length) { + c->positionw = offset; + c->positionf = 0; + c->direction = 1; + + if (c->flags & KB_FLAG_JUST_STARTED && offset > 0) { + /* User has used 9xx command - declick sample start */ + c->flags |= KB_FLAG_DO_SAMPLE_START_DECLICK; + } + } else { + c->flags &= KB_FLAG_UPPER_ACTIVE; + } + } +} + +static void +kb_x86_setsmplend(int channel, + guint32 offset) +{ + kb_x86_channel* c = kb_x86_get_channel_struct(channel); + + if (c->sample && c->flags != 0) { + if (c->positionw != 0 || offset < c->sample->length) { + // only end if the selection is not the whole sample + c->playend = offset; + } + } +} + +static void +kb_x86_setfreq(int channel, + float frequency) +{ + kb_x86_channel* c = kb_x86_get_channel_struct(channel); + + frequency /= mixfreq; + + c->freqw = (guint32)floor(frequency); + c->freqf = (guint32)((frequency - c->freqw) * 4294967296.0 /* this is pow(2,32) */); +} + +static void +kb_x86_redo_vol_fields(kb_x86_channel* c) +{ + c->rampdestleft = c->volume * (1.0 - c->panning); + c->rampdestright = c->volume * c->panning; + g_assert(c->rampdestleft >= 0.0 && c->rampdestleft <= 1.0); + g_assert(c->rampdestright >= 0.0 && c->rampdestright <= 1.0); + + if (c->flags & KB_FLAG_JUST_STARTED) { + c->volleft = c->rampdestleft; + c->volright = c->rampdestright; + } else { + c->ramp_num_samples = RAMP_MAX_DURATION * mixfreq; + if (c->ramp_num_samples == 0) { + c->ramp_num_samples = 1; + } + c->rampleft = (c->rampdestleft - c->volleft) / c->ramp_num_samples; + c->rampright = (c->rampdestright - c->volright) / c->ramp_num_samples; + } +} + +static void +kb_x86_setvolume(int channel, + float volume) +{ + kb_x86_channel* c = kb_x86_get_channel_struct(channel); + + c->volume = volume; + kb_x86_redo_vol_fields(c); +} + +static void +kb_x86_setpanning(int channel, + float panning) +{ + kb_x86_channel* c = kb_x86_get_channel_struct(channel); + + c->panning = 0.5 * (panning + 1.0); + kb_x86_redo_vol_fields(c); +} + +static void +kb_x86_setchcutoff(int channel, + float freq) +{ + kb_x86_channel* c = kb_x86_get_channel_struct(channel); + + if (freq < 0.0) { + c->ffreq = fmixfreq; + c->freso = 0.0; + c->filter_on = FALSE; + } else { + g_assert(0.0 <= freq); + g_assert(freq <= 1.0); + c->ffreq = freq * fmixfreq; + c->filter_on = TRUE; + } +} + +static void +kb_x86_setchreso(int channel, + float reso) +{ + kb_x86_channel* c = kb_x86_get_channel_struct(channel); + + g_assert(0.0 <= reso); + g_assert(reso <= 1.0); + c->freso = reso; +} + +#if defined(DEBUG_BUFFER) +static void +kb_x86_debug_dump_buffer(gint16* buffer, + int count) +{ + int i; + + printf("{ "); + for (i = 0; i < count; i++) { + if (i > 0) { + printf(", "); + } + printf("%d", buffer[i]); + } + printf(" }\n"); +} +#endif + +static void +kb_x86_call_mixer(kb_x86_channel* ch, + kb_x86_mixer_data* md, + gboolean forward) +{ + if (!forward) { + md->flags |= KB_X86_MIXER_FLAGS_BACKWARD; + } + kbasm_mix(md); + ch->volleft = md->volleft; + ch->volright = md->volright; +} + +static guint32 +kb_x86_mix_sub(kb_x86_channel* ch, + guint32 num_samples_left, + gboolean volramping, + float* mixbuf, + gint16* scopebuf) +{ + kb_x86_mixer_data md; + + const gboolean loopit = (ch->playend == 0) && (ch->flags & (KB_FLAG_LOOP_UNIDIRECTIONAL | KB_FLAG_LOOP_BIDIRECTIONAL)); + const gboolean gonnapingpong = loopit && (ch->flags & KB_FLAG_LOOP_BIDIRECTIONAL); + + const gint64 lstart64 = ((guint64)ch->sample->loopstart) << 32; + const gint32 pos = ch->positionw; + const gint64 freq64 = (((guint64)ch->freqw) << 32) + (guint64)ch->freqf; + const gint64 pos64 = ((guint64)(ch->positionw) << 32) + (guint64)ch->positionf; + const gint32 ende = (ch->playend != 0) ? (ch->playend) : (loopit ? ch->sample->loopend : ch->length); + const gint64 ende64 = (guint64)ende << 32; + + int num_samples; + + /* Initalize the data array for the assembly subroutines. */ + md.volleft = ch->volleft; + md.volright = ch->volright; + if (!volramping) { + md.volrampl = 0; + md.volrampr = 0; + } else { + md.volrampl = ch->rampleft; + md.volrampr = ch->rampright; + } + md.positionf = ch->positionf; + if (ch->direction == 1) { + md.freqi = ch->freqw; + md.freqf = ch->freqf; + } else { + gint64 freq64_ = -freq64; + md.freqi = freq64_ >> 32; + md.freqf = freq64_ & 0xffffffff; + } + md.mixbuffer = mixbuf; + md.scopebuf = scopebuf; + md.freso = ch->freso; + md.ffreq = ch->ffreq; + md.fl1 = ch->fl1; + md.fb1 = ch->fb1; + md.flags = (ch->filter_on) ? KB_X86_MIXER_FLAGS_FILTERED : 0; + + if (md.scopebuf) { + md.flags |= KB_X86_MIXER_FLAGS_SCOPES; + } + if (volramping) { + md.flags |= KB_X86_MIXER_FLAGS_VOLRAMP; + } + + if ((ch->direction == 1 && pos >= ende - KB_X86_SAMPLE_PADDING) + || (ch->direction == -1 && pos < (gint32)(ch->sample->loopstart + KB_X86_SAMPLE_PADDING))) { + /* This is the dangerous case. We are near one of the ends of + a loop or sample (we might even have crossed it + already!). We have to take care of handling the looping and + perhaps we also have to prepare a mirror copy of the sample + values located around the loop incontinuity so that the + assembly routines don't use illegal values when + interpolating. */ + gint16 buffer[KB_X86_SAMPLE_PADDING + 1]; + unsigned int i; + gint32 j; + gint16* bufferpt; + + /* First check if we're completely out of bounds, that means + for example: not just slightly before the end of the loop, + but way behind it. */ + if (gonnapingpong) { + /* The pingpong loop case. Care is taken to take into + account extremely short loops with extremly high + frequencies. */ + gboolean touched = FALSE; + gint64 mypos64 = ((guint64)(ch->positionw) << 32) + (guint64)ch->positionf; + gint64 lend64 = (((guint64)ch->sample->loopend) << 32) - 1; + + while (1) { + if (ch->direction == 1 && mypos64 >= lend64) { + ch->direction = -1; + mypos64 -= lend64; + mypos64 *= -1; + mypos64 += lend64; + touched = TRUE; + } else if (ch->direction == -1 && mypos64 < lstart64) { + ch->direction = +1; + mypos64 -= lstart64; + mypos64 *= -1; + mypos64 += lstart64; + touched = TRUE; + } else { + break; + } + } + + if (touched) { + /* We've been really out of bounds. Start all over. */ + ch->positionf = (guint32)(mypos64 & 0xffffffff); /* just the lower 32 bits */ + ch->positionw = (guint32)(mypos64 >> 32); /* just the upper 32 bits */ + return 0; + } + } else if (loopit) { + /* The unidirectional ("Amiga") loop case. */ + gboolean touched = FALSE; + guint32 looplen = ch->sample->loopend - ch->sample->loopstart; + + while (ch->positionw >= ch->sample->loopend) { + ch->positionw -= looplen; + touched = TRUE; + } + + if (touched) { + /* We've been out of bounds. Start all over. */ + return 0; + } + } else { + if (ch->positionw >= ende) { + /* A sample without loop has just ended. */ + ch->flags &= KB_FLAG_UPPER_ACTIVE; + return num_samples_left; + } + } + + /* The following code is concerned with doing the fake sample + stuff for correct handling of the loop incontinuities. */ + if (loopit || gonnapingpong) { + g_assert(pos < ch->sample->loopend); + } + + if (gonnapingpong) { + int dir, bufferfilldir; + + dir = bufferfilldir = ch->direction; + bufferpt = buffer; + if (ch->direction == -1) { + bufferpt += ARRAY_SIZE(buffer) - 1; + } + for (i = 0, j = pos; i < ARRAY_SIZE(buffer); i++) { + *bufferpt = ((gint16*)ch->sample->data)[j]; + if (dir == +1) { + if (++j >= ch->sample->loopend) { + dir = -1; + j--; + } + } else { + if (--j < (gint32)ch->sample->loopstart) { + j++; + dir = +1; + } + } + bufferpt += bufferfilldir; + } + } else { + for (i = 0, j = pos; i < ARRAY_SIZE(buffer); i++) { + buffer[i] = ((gint16*)ch->sample->data)[j]; + if (++j >= ende) { + if (loopit) { + j -= (ch->sample->loopend - ch->sample->loopstart); + } else { + j--; + } + } + } + } + + num_samples = 1; + md.numsamples = 1; + if (ch->direction == 1) { + md.positioni = buffer; + kb_x86_call_mixer(ch, &md, TRUE); + ch->positionw = md.positioni - buffer + pos; + } else { + md.positioni = buffer + (ARRAY_SIZE(buffer) - 1); + kb_x86_call_mixer(ch, &md, FALSE); + ch->positionw = md.positioni - (buffer + (ARRAY_SIZE(buffer) - 1)) + pos; + } + + ch->positionf = md.positionf; + ch->volleft = md.volleft; + ch->volright = md.volright; + ch->fl1 = md.fl1; + ch->fb1 = md.fb1; + + return num_samples; + } else { + /* That we've reached this point means that the current sample + position is in an area of the sample that's not near the + start nor the end, which in turn means that we don't have + to create auxiliary arrays to prevent the mixer routine + from accessing invalid data beyond the end of the sample. + + Now calculate how far we can go on like this until we hit a + dangerous area. */ + if (ch->direction == 1) { + const guint64 wieweit64 = pos64 + freq64 * num_samples_left; + const guint32 wieweit = wieweit64 >> 32; + + if (wieweit >= ende - KB_X86_SAMPLE_PADDING) { + /* oh, sorry - we need to truncate mixing length this + time. calculate exactly how many samples we can + still render in one run until we hit a dangerous + area. */ + num_samples = (ende64 - ((guint64)KB_X86_SAMPLE_PADDING << 32) - pos64 + (freq64 - 1)) / freq64; + g_assert(num_samples > 0); + g_assert(pos64 + freq64 * num_samples >= ende64 - ((guint64)KB_X86_SAMPLE_PADDING << 32)); + g_assert(pos64 + freq64 * (num_samples - 1) < ende64 - ((guint64)KB_X86_SAMPLE_PADDING << 32)); + num_samples = MIN(num_samples_left, num_samples); + } else { + /* no problem, we can render the full buffer without + problems in one run. */ + num_samples = num_samples_left; + } + + md.positioni = (gint16*)ch->sample->data + pos; + md.numsamples = num_samples; + kb_x86_call_mixer(ch, &md, TRUE); + } else { + /* The same stuff, only for backwards direction */ + const gint64 wieweit64 = pos64 - freq64 * num_samples_left; + const gint32 wieweit = wieweit64 >> 32; + + if (wieweit < (gint32)(ch->sample->loopstart + KB_X86_SAMPLE_PADDING)) { + num_samples = 1 + (pos64 - (((guint64)KB_X86_SAMPLE_PADDING + ch->sample->loopstart) << 32)) / freq64; + g_assert(num_samples > 0); + g_assert(pos64 - freq64 * (gint64)(num_samples) < ((gint64)(ch->sample->loopstart + KB_X86_SAMPLE_PADDING) << 32)); + g_assert(pos64 - freq64 * (gint64)(num_samples - 1) >= ((gint64)(ch->sample->loopstart + KB_X86_SAMPLE_PADDING) << 32)); + num_samples = MIN(num_samples_left, num_samples); + } else { + num_samples = num_samples_left; + } + + md.positioni = (gint16*)ch->sample->data + pos; + md.numsamples = num_samples; + kb_x86_call_mixer(ch, &md, FALSE); + } + + ch->positionw = md.positioni - (gint16*)ch->sample->data; + ch->positionf = md.positionf; + ch->volleft = md.volleft; + ch->volright = md.volright; + ch->fl1 = md.fl1; + ch->fb1 = md.fb1; + + return num_samples; + } +} + +static void* +kb_x86_mix(void* dest, + guint32 count, + gint16* scopebufs[], + int scopebuf_offset) +{ + int chnr; + + if (count > kb_x86_tempbufsize) { + free(kb_x86_tempbuf); + kb_x86_tempbufsize = count; + kb_x86_tempbuf = malloc(2 * sizeof(float) * kb_x86_tempbufsize); + } + + memset(kb_x86_tempbuf, 0, 2 * sizeof(float) * count); + + for (chnr = 0; chnr < 2 * 32; chnr++) { + kb_x86_channel* ch = channels + chnr; + float* tempbuf = kb_x86_tempbuf; + int num_samples_left = count; + gint16* scopedata = NULL; + + if ((chnr & 31) >= num_channels) + continue; + + if (scopebufs && (chnr < 32 || (channels[chnr - 32].flags & KB_FLAG_UPPER_ACTIVE))) { + scopedata = scopebufs[chnr & 31] + scopebuf_offset; + } + + if (!(ch->flags & KB_FLAG_SAMPLE_RUNNING)) { + if (scopedata) { + memset(scopedata, 0, 2 * num_samples_left); + } + continue; + } + + if (ch->flags & KB_FLAG_JUST_STARTED) { + if (ch->flags & KB_FLAG_DO_SAMPLE_START_DECLICK) { + ch->ramp_num_samples = RAMP_MAX_DURATION * mixfreq; + if (ch->ramp_num_samples == 0) { + ch->ramp_num_samples = 1; + } + ch->volleft = 0.0; + ch->volright = 0.0; + ch->rampleft = (ch->rampdestleft - ch->volleft) / ch->ramp_num_samples; + ch->rampright = (ch->rampdestright - ch->volright) / ch->ramp_num_samples; + } + + ch->flags &= ~KB_FLAG_JUST_STARTED; + } + + g_mutex_lock(&ch->sample->lock); + + while (num_samples_left && (ch->flags & KB_FLAG_SAMPLE_RUNNING)) { + int num_samples = 0; + gboolean vol_ramping = (ch->ramp_num_samples != 0); + int max_samples_this_time = vol_ramping ? MIN(ch->ramp_num_samples, num_samples_left) : num_samples_left; + + num_samples = kb_x86_mix_sub(ch, + max_samples_this_time, vol_ramping, + tempbuf, scopedata); + + if (vol_ramping) { + ch->ramp_num_samples -= num_samples; + if (ch->ramp_num_samples == 0) { + /* Volume ramping finished. */ + ch->volleft = ch->rampdestleft; + ch->volright = ch->rampdestright; + if (ch->flags & KB_FLAG_STOP_AFTER_VOLRAMP) { + /* This was only a declicking channel. Stop sample. */ + ch->flags &= KB_FLAG_UPPER_ACTIVE; + } + } + } + + num_samples_left -= num_samples; + tempbuf += (num_samples * 2); + if (scopedata) { + scopedata += num_samples; + } + } + + g_mutex_unlock(&ch->sample->lock); + } + + clipflag = kbasm_post_mixing(kb_x86_tempbuf, (gint16*)dest, count, kb_x86_amplification); + + return dest + count * 2 * 2; +} + +void kb_x86_dumpstatus(st_mixer_channel_status array[]) +{ + int i; + gint32 pos; + + for (i = 0; i < 32; i++) { + kb_x86_channel* c = kb_x86_get_channel_struct(i); + + if (c->flags & KB_FLAG_SAMPLE_RUNNING) { + array[i].current_sample = c->sample; + pos = c->positionw; + if (pos < 0) { + pos = 0; + } else if (pos >= c->sample->length) { + pos = c->sample->length - 1; + } + array[i].current_position = pos; + } else { + array[i].current_sample = NULL; + } + } +} + +static void +kb_x86_loadchsettings(int ch) +{ + tracer_channel* tch; + kb_x86_channel* kbch; + + g_assert(ch < num_channels); + + tch = tracer_return_channel(ch); + kbch = kb_x86_get_channel_struct(ch); + + kbch->sample = tch->sample; + kbch->data = tch->data; + kbch->looptype = tch->looptype; + kbch->length = tch->length; + kbch->volume = tch->volume; + kbch->panning = tch->panning; + kbch->direction = tch->direction; + kbch->playend = tch->playend; + kbch->positionw = tch->positionw; + kbch->positionf = tch->positionf; + kbch->freqw = tch->freqw; + kbch->freqf = tch->freqf; + kbch->ffreq = tch->ffreq; + kbch->freso = tch->freso; + kbch->filter_on = tch->filter_on; + + kbch->flags = (kbch->flags & KB_FLAG_UPPER_ACTIVE) | KB_FLAG_JUST_STARTED | ((tch->flags & TR_FLAG_LOOP_UNIDIRECTIONAL) ? KB_FLAG_LOOP_UNIDIRECTIONAL : 0) | ((tch->flags & TR_FLAG_LOOP_BIDIRECTIONAL) ? KB_FLAG_LOOP_BIDIRECTIONAL : 0) | ((tch->flags & TR_FLAG_SAMPLE_RUNNING) ? KB_FLAG_SAMPLE_RUNNING : 0); + + kb_x86_redo_vol_fields(kbch); +} + +st_mixer mixer_kbfloat = { + "kbfloat", + N_("High-quality FPU mixer, cubic interpolation, IT filters, unlimited length samples"), + + kb_x86_setnumch, + kb_x86_updatesample, + kb_x86_setmixformat, + kb_x86_setstereo, + kb_x86_setmixfreq, + kb_x86_setampfactor, + kb_x86_getclipflag, + kb_x86_reset, + kb_x86_startnote, + kb_x86_stopnote, + kb_x86_setsmplpos, + kb_x86_setsmplend, + kb_x86_setfreq, + kb_x86_setvolume, + kb_x86_setpanning, + kb_x86_setchcutoff, + kb_x86_setchreso, + kb_x86_mix, + kb_x86_dumpstatus, + kb_x86_loadchsettings, + + 0x7fffffff, + + NULL +}; diff -Nru soundtracker-0.6.8/app/mixers/kbfloat-core.c soundtracker-1.0.2~pre2/app/mixers/kbfloat-core.c --- soundtracker-0.6.8/app/mixers/kbfloat-core.c 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/kbfloat-core.c 2019-04-15 17:45:04.000000000 +0000 @@ -0,0 +1,389 @@ + +/* + * The Real SoundTracker - Cubically interpolating mixing routines + * with IT style filter support + * + * Non-optimized C, translated from Tammo's original i386 assembly code. + * + * Copyright (C) 2001-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include "kbfloat-core.h" + +gboolean +kbasm_post_mixing(float* tempbuf, + gint16* outbuf, + unsigned n, + float amp) +{ + gboolean clipped = FALSE; + + n *= 2; + + while (n--) { + float a = *tempbuf++ * amp; + if (a < -32768.0) { + a = -32768.0; + clipped = TRUE; + } + if (a > 32767.0) { + a = 32767.0; + clipped = TRUE; + } + *outbuf++ = (gint16)a; + } + + return clipped; +} + +#define CUBICMIXER_COMMON_HEAD \ + gint16* positioni = data->positioni; \ + guint32 positionf = data->positionf; \ + float* mixbuffer = data->mixbuffer; \ + float fl1 = data->fl1; \ + float fb1 = data->fb1; \ + float voll = data->volleft; \ + float volr = data->volright; \ + unsigned n = data->numsamples; + +#define CUBICMIXER_COMMON_LOOP_START \ + while (n--) { \ + float s0; \ + guint32 positionf_new; + +#define CUBICMIXER_LOOP_FORWARD \ + s0 = positioni[0] * kb_x86_ct0[positionf >> 24]; \ + s0 += positioni[1] * kb_x86_ct1[positionf >> 24]; \ + s0 += positioni[2] * kb_x86_ct2[positionf >> 24]; \ + s0 += positioni[3] * kb_x86_ct3[positionf >> 24]; + +#define CUBICMIXER_LOOP_BACKWARD \ + s0 = positioni[0] * kb_x86_ct0[-positionf >> 24]; \ + s0 += positioni[-1] * kb_x86_ct1[-positionf >> 24]; \ + s0 += positioni[-2] * kb_x86_ct2[-positionf >> 24]; \ + s0 += positioni[-3] * kb_x86_ct3[-positionf >> 24]; + +#define CUBICMIXER_ADVANCE_POINTER \ + positionf_new = positionf + data->freqf; \ + if (positionf_new < positionf) { \ + positioni++; \ + } \ + positionf = positionf_new; \ + positioni += data->freqi; + +#define CUBICMIXER_FILTER \ + fb1 = data->freso * fb1 + data->ffreq * (s0 - fl1); \ + fl1 += data->ffreq * fb1; \ + s0 = fl1; + +#define CUBICMIXER_SCOPES \ + *scopebuf++ = (gint16)(s0 * (voll + volr)); + +#define CUBICMIXER_WRITE_OUT \ + *mixbuffer++ += s0 * voll; \ + *mixbuffer++ += s0 * volr; + +#define CUBICMIXER_VOLRAMP \ + voll += data->volrampl; \ + volr += data->volrampr; + +#define CUBICMIXER_COMMON_FOOT \ + data->volleft = voll; \ + data->volright = volr; \ + data->positioni = positioni; \ + data->positionf = positionf; \ + data->mixbuffer = mixbuffer; \ + data->fl1 = fl1; \ + data->fb1 = fb1; + +/* --- 0 --- */ +static void +kbfloat_mix_cubic_noscopes_unfiltered_forward_noramp(kb_x86_mixer_data* data){ + CUBICMIXER_COMMON_HEAD + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_FORWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_WRITE_OUT +} + +CUBICMIXER_COMMON_FOOT +} + +static void +kbfloat_mix_cubic_noscopes_unfiltered_backward_noramp(kb_x86_mixer_data* data){ + CUBICMIXER_COMMON_HEAD + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_BACKWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_WRITE_OUT +} + +CUBICMIXER_COMMON_FOOT +} + +static void +kbfloat_mix_cubic_noscopes_filtered_forward_noramp(kb_x86_mixer_data* data){ + CUBICMIXER_COMMON_HEAD + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_FORWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_FILTER + CUBICMIXER_WRITE_OUT +} + +CUBICMIXER_COMMON_FOOT +} + +static void +kbfloat_mix_cubic_noscopes_filtered_backward_noramp(kb_x86_mixer_data* data){ + CUBICMIXER_COMMON_HEAD + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_BACKWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_FILTER + CUBICMIXER_WRITE_OUT +} + +CUBICMIXER_COMMON_FOOT +} + +/* --- 4 --- */ +static void +kbfloat_mix_cubic_scopes_unfiltered_forward_noramp(kb_x86_mixer_data* data) +{ + CUBICMIXER_COMMON_HEAD + gint16* scopebuf = data->scopebuf; + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_FORWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_SCOPES + CUBICMIXER_WRITE_OUT +} + +CUBICMIXER_COMMON_FOOT +} + +static void +kbfloat_mix_cubic_scopes_unfiltered_backward_noramp(kb_x86_mixer_data* data) +{ + CUBICMIXER_COMMON_HEAD + gint16* scopebuf = data->scopebuf; + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_BACKWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_SCOPES + CUBICMIXER_WRITE_OUT +} + +CUBICMIXER_COMMON_FOOT +} + +static void +kbfloat_mix_cubic_scopes_filtered_forward_noramp(kb_x86_mixer_data* data) +{ + CUBICMIXER_COMMON_HEAD + gint16* scopebuf = data->scopebuf; + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_FORWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_FILTER + CUBICMIXER_SCOPES + CUBICMIXER_WRITE_OUT +} + +CUBICMIXER_COMMON_FOOT +} + +static void +kbfloat_mix_cubic_scopes_filtered_backward_noramp(kb_x86_mixer_data* data) +{ + CUBICMIXER_COMMON_HEAD + gint16* scopebuf = data->scopebuf; + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_BACKWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_FILTER + CUBICMIXER_SCOPES + CUBICMIXER_WRITE_OUT +} + +CUBICMIXER_COMMON_FOOT +} + +/* --- 8 --- */ +static void +kbfloat_mix_cubic_noscopes_unfiltered_forward(kb_x86_mixer_data* data){ + CUBICMIXER_COMMON_HEAD + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_FORWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_WRITE_OUT + CUBICMIXER_VOLRAMP +} + +CUBICMIXER_COMMON_FOOT +} + +static void +kbfloat_mix_cubic_noscopes_unfiltered_backward(kb_x86_mixer_data* data){ + CUBICMIXER_COMMON_HEAD + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_BACKWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_WRITE_OUT + CUBICMIXER_VOLRAMP +} + +CUBICMIXER_COMMON_FOOT +} + +static void +kbfloat_mix_cubic_noscopes_filtered_forward(kb_x86_mixer_data* data){ + CUBICMIXER_COMMON_HEAD + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_FORWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_FILTER + CUBICMIXER_WRITE_OUT + CUBICMIXER_VOLRAMP +} + +CUBICMIXER_COMMON_FOOT +} + +static void +kbfloat_mix_cubic_noscopes_filtered_backward(kb_x86_mixer_data* data){ + CUBICMIXER_COMMON_HEAD + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_BACKWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_FILTER + CUBICMIXER_WRITE_OUT + CUBICMIXER_VOLRAMP +} + +CUBICMIXER_COMMON_FOOT +} + +/* --- 12 --- */ +static void +kbfloat_mix_cubic_scopes_unfiltered_forward(kb_x86_mixer_data* data) +{ + CUBICMIXER_COMMON_HEAD + gint16* scopebuf = data->scopebuf; + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_FORWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_SCOPES + CUBICMIXER_WRITE_OUT + CUBICMIXER_VOLRAMP +} + +CUBICMIXER_COMMON_FOOT +} + +static void +kbfloat_mix_cubic_scopes_unfiltered_backward(kb_x86_mixer_data* data) +{ + CUBICMIXER_COMMON_HEAD + gint16* scopebuf = data->scopebuf; + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_BACKWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_SCOPES + CUBICMIXER_WRITE_OUT + CUBICMIXER_VOLRAMP +} + +CUBICMIXER_COMMON_FOOT +} + +static void +kbfloat_mix_cubic_scopes_filtered_forward(kb_x86_mixer_data* data) +{ + CUBICMIXER_COMMON_HEAD + gint16* scopebuf = data->scopebuf; + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_FORWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_FILTER + CUBICMIXER_SCOPES + CUBICMIXER_WRITE_OUT + CUBICMIXER_VOLRAMP +} + +CUBICMIXER_COMMON_FOOT +} + +static void +kbfloat_mix_cubic_scopes_filtered_backward(kb_x86_mixer_data* data) +{ + CUBICMIXER_COMMON_HEAD + gint16* scopebuf = data->scopebuf; + + CUBICMIXER_COMMON_LOOP_START + CUBICMIXER_LOOP_BACKWARD + CUBICMIXER_ADVANCE_POINTER + CUBICMIXER_FILTER + CUBICMIXER_SCOPES + CUBICMIXER_WRITE_OUT + CUBICMIXER_VOLRAMP +} + +CUBICMIXER_COMMON_FOOT +} + +static void (*kbfloat_mixers[16])(kb_x86_mixer_data*) = { + kbfloat_mix_cubic_noscopes_unfiltered_forward_noramp, + kbfloat_mix_cubic_noscopes_unfiltered_backward_noramp, + kbfloat_mix_cubic_noscopes_filtered_forward_noramp, + kbfloat_mix_cubic_noscopes_filtered_backward_noramp, + kbfloat_mix_cubic_scopes_unfiltered_forward_noramp, + kbfloat_mix_cubic_scopes_unfiltered_backward_noramp, + kbfloat_mix_cubic_scopes_filtered_forward_noramp, + kbfloat_mix_cubic_scopes_filtered_backward_noramp, + kbfloat_mix_cubic_noscopes_unfiltered_forward, + kbfloat_mix_cubic_noscopes_unfiltered_backward, + kbfloat_mix_cubic_noscopes_filtered_forward, + kbfloat_mix_cubic_noscopes_filtered_backward, + kbfloat_mix_cubic_scopes_unfiltered_forward, + kbfloat_mix_cubic_scopes_unfiltered_backward, + kbfloat_mix_cubic_scopes_filtered_forward, + kbfloat_mix_cubic_scopes_filtered_backward +}; + +void kbasm_mix(kb_x86_mixer_data* data) +{ + kbfloat_mixers[data->flags >> 2](data); +} diff -Nru soundtracker-0.6.8/app/mixers/kbfloat-core.h soundtracker-1.0.2~pre2/app/mixers/kbfloat-core.h --- soundtracker-0.6.8/app/mixers/kbfloat-core.h 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/kbfloat-core.h 2019-04-15 17:45:05.000000000 +0000 @@ -0,0 +1,68 @@ + +/* + * The Real SoundTracker - Cubically interpolating mixing routines + * with IT style filter support + * + * Copyright (C) 2001-2019 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef _ST_MIXERASM_H +#define _ST_MIXERASM_H + +#include + +/* The numbers at the end of the lines are structure field offsets on + 32-bit machines: */ + +typedef struct kb_x86_mixer_data { + float volleft; // left volume (1.0=normal) 0 + float volright; // right volume (1.0=normal) 4 + float volrampl; // left volramp (dvol/sample) 8 + float volrampr; // right volramp (dvol/sample) 12 + gint16* positioni; // pointer to sample data 16 + guint32 positionf; // fractional part of pointer 20 + gint32 freqi; // integer part of delta 24 + guint32 freqf; // fractional part of delta 28 + float* mixbuffer; // pointer to destination buffer 32 + guint32 numsamples; // number of samples to render 36 + float lastl; // declick value 40 + float ffreq; // filter frequency (0<=x<=1) 44 + float freso; // filter resonance (0<=x<1) 48 + float fl1; // filter lp buffer 52 + float fb1; // filter bp buffer 56 + gint16* scopebuf; // 60 + guint32 flags; // which mixer to use 64 +} kb_x86_mixer_data; + +#define KB_X86_MIXER_FLAGS_BACKWARD (1 << 2) +#define KB_X86_MIXER_FLAGS_FILTERED (1 << 3) +#define KB_X86_MIXER_FLAGS_SCOPES (1 << 4) +#define KB_X86_MIXER_FLAGS_VOLRAMP (1 << 5) + +void kbasm_mix(kb_x86_mixer_data* data); + +gboolean kbasm_post_mixing(float* mixbuffer, + gint16* outbuffer, + unsigned numsamples, + float amplification); + +extern float kb_x86_ct0[256]; +extern float kb_x86_ct1[256]; +extern float kb_x86_ct2[256]; +extern float kb_x86_ct3[256]; + +#endif /* _ST_MIXERASM_H */ diff -Nru soundtracker-0.6.8/app/mixers/kbfloat-mix.c soundtracker-1.0.2~pre2/app/mixers/kbfloat-mix.c --- soundtracker-0.6.8/app/mixers/kbfloat-mix.c 2002-06-28 12:34:23.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/kbfloat-mix.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,402 +0,0 @@ - -/* - * The Real SoundTracker - Cubically interpolating mixing routines - * with IT style filter support - * - * Very unoptimized portable C version. - * - * Copyright (C) 2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#include "kb-x86-asm.h" - -#if defined(NO_ASM) || defined(NO_GASP) || !defined(__i386__) - -gboolean -kbasm_post_mixing (float *tempbuf, - gint16 *outbuf, - unsigned n, - float amp) -{ - gboolean clipped = FALSE; - - n *= 2; - - while(n--) { - float a = *tempbuf++ * amp; - if(a < -32768.0) { - a = -32768.0; - clipped = TRUE; - } - if(a > 32767.0) { - a = 32767.0; - clipped = TRUE; - } - *outbuf ++= (gint16)a; - } - - return clipped; -} - -#define CUBICMIXER_COMMON_HEAD \ - gint16 *positioni = data->positioni; \ - guint32 positionf = data->positionf; \ - float *mixbuffer = data->mixbuffer; \ - float fl1 = data->fl1; \ - float fb1 = data->fb1; \ - float voll = data->volleft; \ - float volr = data->volright; \ - unsigned n = data->numsamples; - -#define CUBICMIXER_COMMON_LOOP_START \ - while(n--) { \ - float s0; \ - guint32 positionf_new; - -#define CUBICMIXER_LOOP_FORWARD \ - s0 = positioni[0] * kb_x86_ct0[positionf >> 24]; \ - s0 += positioni[1] * kb_x86_ct1[positionf >> 24]; \ - s0 += positioni[2] * kb_x86_ct2[positionf >> 24]; \ - s0 += positioni[3] * kb_x86_ct3[positionf >> 24]; - -#define CUBICMIXER_LOOP_BACKWARD \ - s0 = positioni[0] * kb_x86_ct0[-positionf >> 24]; \ - s0 += positioni[-1] * kb_x86_ct1[-positionf >> 24]; \ - s0 += positioni[-2] * kb_x86_ct2[-positionf >> 24]; \ - s0 += positioni[-3] * kb_x86_ct3[-positionf >> 24]; - -#define CUBICMIXER_ADVANCE_POINTER \ - positionf_new = positionf + data->freqf; \ - if(positionf_new < positionf) { \ - positioni++; \ - } \ - positionf = positionf_new; \ - positioni += data->freqi; - -#define CUBICMIXER_FILTER \ - fb1 = data->freso * fb1 + data->ffreq * (s0 - fl1); \ - fl1 += data->ffreq * fb1; \ - s0 = fl1; - -#define CUBICMIXER_SCOPES \ - *scopebuf++ = (gint16)(s0 * (voll + volr)); - -#define CUBICMIXER_WRITE_OUT \ - *mixbuffer++ += s0 * voll; \ - *mixbuffer++ += s0 * volr; - -#define CUBICMIXER_VOLRAMP \ - voll += data->volrampl; \ - volr += data->volrampr; - -#define CUBICMIXER_COMMON_FOOT \ - data->volleft = voll; \ - data->volright = volr; \ - data->positioni = positioni; \ - data->positionf = positionf; \ - data->mixbuffer = mixbuffer; \ - data->fl1 = fl1; \ - data->fb1 = fb1; - -/* --- 0 --- */ -static void -kbfloat_mix_cubic_noscopes_unfiltered_forward_noramp (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_FORWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_WRITE_OUT - } - - CUBICMIXER_COMMON_FOOT -} - -static void -kbfloat_mix_cubic_noscopes_unfiltered_backward_noramp (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_BACKWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_WRITE_OUT - } - - CUBICMIXER_COMMON_FOOT -} - -static void -kbfloat_mix_cubic_noscopes_filtered_forward_noramp (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_FORWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_FILTER - CUBICMIXER_WRITE_OUT - } - - CUBICMIXER_COMMON_FOOT -} - -static void -kbfloat_mix_cubic_noscopes_filtered_backward_noramp (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_BACKWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_FILTER - CUBICMIXER_WRITE_OUT - } - - CUBICMIXER_COMMON_FOOT -} - -/* --- 4 --- */ -static void -kbfloat_mix_cubic_scopes_unfiltered_forward_noramp (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - gint16 *scopebuf = data->scopebuf; - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_FORWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_SCOPES - CUBICMIXER_WRITE_OUT - } - - CUBICMIXER_COMMON_FOOT -} - -static void -kbfloat_mix_cubic_scopes_unfiltered_backward_noramp (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - gint16 *scopebuf = data->scopebuf; - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_BACKWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_SCOPES - CUBICMIXER_WRITE_OUT - } - - CUBICMIXER_COMMON_FOOT -} - -static void -kbfloat_mix_cubic_scopes_filtered_forward_noramp (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - gint16 *scopebuf = data->scopebuf; - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_FORWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_FILTER - CUBICMIXER_SCOPES - CUBICMIXER_WRITE_OUT - } - - CUBICMIXER_COMMON_FOOT -} - -static void -kbfloat_mix_cubic_scopes_filtered_backward_noramp (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - gint16 *scopebuf = data->scopebuf; - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_BACKWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_FILTER - CUBICMIXER_SCOPES - CUBICMIXER_WRITE_OUT - } - - CUBICMIXER_COMMON_FOOT -} - -/* --- 8 --- */ -static void -kbfloat_mix_cubic_noscopes_unfiltered_forward (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_FORWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_WRITE_OUT - CUBICMIXER_VOLRAMP - } - - CUBICMIXER_COMMON_FOOT -} - -static void -kbfloat_mix_cubic_noscopes_unfiltered_backward (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_BACKWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_WRITE_OUT - CUBICMIXER_VOLRAMP - } - - CUBICMIXER_COMMON_FOOT -} - -static void -kbfloat_mix_cubic_noscopes_filtered_forward (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_FORWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_FILTER - CUBICMIXER_WRITE_OUT - CUBICMIXER_VOLRAMP - } - - CUBICMIXER_COMMON_FOOT -} - -static void -kbfloat_mix_cubic_noscopes_filtered_backward (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_BACKWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_FILTER - CUBICMIXER_WRITE_OUT - CUBICMIXER_VOLRAMP - } - - CUBICMIXER_COMMON_FOOT -} - -/* --- 12 --- */ -static void -kbfloat_mix_cubic_scopes_unfiltered_forward (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - gint16 *scopebuf = data->scopebuf; - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_FORWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_SCOPES - CUBICMIXER_WRITE_OUT - CUBICMIXER_VOLRAMP - } - - CUBICMIXER_COMMON_FOOT -} - -static void -kbfloat_mix_cubic_scopes_unfiltered_backward (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - gint16 *scopebuf = data->scopebuf; - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_BACKWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_SCOPES - CUBICMIXER_WRITE_OUT - CUBICMIXER_VOLRAMP - } - - CUBICMIXER_COMMON_FOOT -} - -static void -kbfloat_mix_cubic_scopes_filtered_forward (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - gint16 *scopebuf = data->scopebuf; - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_FORWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_FILTER - CUBICMIXER_SCOPES - CUBICMIXER_WRITE_OUT - CUBICMIXER_VOLRAMP - } - - CUBICMIXER_COMMON_FOOT -} - -static void -kbfloat_mix_cubic_scopes_filtered_backward (kb_x86_mixer_data *data) -{ - CUBICMIXER_COMMON_HEAD - gint16 *scopebuf = data->scopebuf; - - CUBICMIXER_COMMON_LOOP_START - CUBICMIXER_LOOP_BACKWARD - CUBICMIXER_ADVANCE_POINTER - CUBICMIXER_FILTER - CUBICMIXER_SCOPES - CUBICMIXER_WRITE_OUT - CUBICMIXER_VOLRAMP - } - - CUBICMIXER_COMMON_FOOT -} - -static void (*kbfloat_mixers[16])(kb_x86_mixer_data *) = { - kbfloat_mix_cubic_noscopes_unfiltered_forward_noramp, - kbfloat_mix_cubic_noscopes_unfiltered_backward_noramp, - kbfloat_mix_cubic_noscopes_filtered_forward_noramp, - kbfloat_mix_cubic_noscopes_filtered_backward_noramp, - kbfloat_mix_cubic_scopes_unfiltered_forward_noramp, - kbfloat_mix_cubic_scopes_unfiltered_backward_noramp, - kbfloat_mix_cubic_scopes_filtered_forward_noramp, - kbfloat_mix_cubic_scopes_filtered_backward_noramp, - kbfloat_mix_cubic_noscopes_unfiltered_forward, - kbfloat_mix_cubic_noscopes_unfiltered_backward, - kbfloat_mix_cubic_noscopes_filtered_forward, - kbfloat_mix_cubic_noscopes_filtered_backward, - kbfloat_mix_cubic_scopes_unfiltered_forward, - kbfloat_mix_cubic_scopes_unfiltered_backward, - kbfloat_mix_cubic_scopes_filtered_forward, - kbfloat_mix_cubic_scopes_filtered_backward -}; - -void -kbasm_mix (kb_x86_mixer_data *data) -{ - kbfloat_mixers[data->flags >> 2](data); -} - -#endif diff -Nru soundtracker-0.6.8/app/mixers/kb-x86-asm.h soundtracker-1.0.2~pre2/app/mixers/kb-x86-asm.h --- soundtracker-0.6.8/app/mixers/kb-x86-asm.h 2001-01-03 13:24:11.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/kb-x86-asm.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ - -/* - * The Real SoundTracker - Cubically interpolating mixing routines - * with IT style filter support - * - * Copyright (C) 2001 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef _ST_MIXERASM_H -#define _ST_MIXERASM_H - -#include - -/* The numbers at the end of the lines are structure field offsets on - 32-bit machines: */ - -typedef struct kb_x86_mixer_data { - float volleft; // left volume (1.0=normal) 0 - float volright; // right volume (1.0=normal) 4 - float volrampl; // left volramp (dvol/sample) 8 - float volrampr; // right volramp (dvol/sample) 12 - gint16 *positioni; // pointer to sample data 16 - guint32 positionf; // fractional part of pointer 20 - gint32 freqi; // integer part of delta 24 - guint32 freqf; // fractional part of delta 28 - float *mixbuffer; // pointer to destination buffer 32 - guint32 numsamples; // number of samples to render 36 - float lastl; // declick value 40 - float ffreq; // filter frequency (0<=x<=1) 44 - float freso; // filter resonance (0<=x<1) 48 - float fl1; // filter lp buffer 52 - float fb1; // filter bp buffer 56 - gint16 *scopebuf; // 60 - guint32 flags; // which mixer to use 64 -} kb_x86_mixer_data; - -#define KB_X86_MIXER_FLAGS_BACKWARD (1 << 2) -#define KB_X86_MIXER_FLAGS_FILTERED (1 << 3) -#define KB_X86_MIXER_FLAGS_SCOPES (1 << 4) -#define KB_X86_MIXER_FLAGS_VOLRAMP (1 << 5) - -void kbasm_mix (kb_x86_mixer_data *data); - -gboolean kbasm_post_mixing (float *mixbuffer, - gint16 *outbuffer, - unsigned numsamples, - float amplification); - -extern float kb_x86_ct0[256]; -extern float kb_x86_ct1[256]; -extern float kb_x86_ct2[256]; -extern float kb_x86_ct3[256]; - -#endif /* _ST_MIXERASM_H */ diff -Nru soundtracker-0.6.8/app/mixers/kb-x86-asmIntel.a soundtracker-1.0.2~pre2/app/mixers/kb-x86-asmIntel.a --- soundtracker-0.6.8/app/mixers/kb-x86-asmIntel.a 2000-09-19 15:56:05.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/kb-x86-asmIntel.a 1970-01-01 00:00:00.000000000 +0000 @@ -1,387 +0,0 @@ -; The Real SoundTracker - Cubically interpolating mixing routines -; with IT style filter support -; Version for non-gas assemblers by Fabian Giesen, as of ST v0.5.4. -; -; Copyright (C) 1999-2000 Tammo Hinrichs -; Copyright (C) 2000 Michael Krause -; Copyright (C) 2000 Fabian Giesen -; -; This program is free software; you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation; either version 2 of the License, or -; (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with this program; if not, write to the Free Software -; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -; -; - -section .data - -_volrl dd 0 -_volrr dd 0 -_voll dd 0 -_volr dd 0 -magic1 dd 0 -ebpstore dd 0 -store2 dd 0 -scopebuf dd 0 - -ffreq dd 0.0 -freso dd 0.0 -fl1 dd 0.0 -fb1 dd 0.0 - -minampl dd 0.0001 -cremoveconst dd 0.992 -clampmax dd 32766.0 -clampmin: dd -32767.0 -minuseins: dd -1.0 - -extern _kb_x86_outbuf -extern _kb_x86_tempbuf -extern _kb_x86_nsamples -extern _kb_x86_amplification -extern _kb_x86_ct0 -extern _kb_x86_ct1 -extern _kb_x86_ct2 -extern _kb_x86_ct3 - -section .text - -global _kbasm_prepare_mixer -_kbasm_prepare_mixer: - push ebp - mov ebp, esp - - push eax - - ; nothing happening here right now... - - pop eax - - leave - ret - -global _kbasm_post_mixing -_kbasm_post_mixing: - push ebp - mov ebp, esp - - push ebx - push ecx - push edx - push esi - push edi - - finit - - mov edi,[_kb_x86_outbuf] - mov esi,[_kb_x86_tempbuf] - mov ecx,[_kb_x86_nsamples] - shl ecx,1 ; stereo - - call clipstereo - - pop edi - pop esi - pop edx - pop ecx - pop ebx - - leave - ret - -clipstereo: ; convert/clip samples, 16bit signed - fld dword [_kb_x86_amplification] - fld dword [clampmin] ; (min) (amp) - fld dword [clampmax] ; (max) (min) (amp) - mov bx, 32766 - mov dx, -32767 - mov [ebpstore],ebp - xor ebp,ebp - -.lp: - fld dword [esi] ; (ls) (max) (min) (amp) - fmul st3 - fcom st1 - fnstsw ax - sahf - ja .max - fcom st2 - fstsw ax - sahf - jb .min - fistp word [edi] ; (max) (min) (amp) - -.next: - add esi,4 - add edi,2 - dec ecx - jnz .lp - jmp short .ende - -.max: - fstp st0 ; (max) (min) (amp) - mov [edi], bx - inc ebp - jmp short .next - -.min: - fstp st0 ; (max) (min) (amp) - mov [edi], dx - inc ebp - jmp short .next - -.ende: - mov eax, ebp - mov ebp, [ebpstore] - fstp st0 ; (min) (amp) - fstp st0 ; (amp) - fstp st0 ; - - ret - -global _kbasm_mix -_kbasm_mix: - push ebp - mov ebp, esp - - push eax - push ebx - push ecx - push edx - push esi - push edi - - finit - - mov [ebpstore],ebp - mov ebp,[ebp+8] - - ; Put data into appropriate places for the real mixer subroutine - mov eax,[ebp] - mov ebx,[ebp+4] - mov [_voll],eax - mov [_volr],ebx - mov eax,[ebp+8] - mov ebx,[ebp+12] - mov [_volrl],eax - mov [_volrr],ebx - - mov eax,[ebp+44] - mov [ffreq],eax - mov eax,[ebp+48] - mov [freso],eax - mov eax,[ebp+52] - mov [fl1],eax - mov eax,[ebp+56] - mov [fb1],eax - mov ecx,[ebp+60] - mov [scopebuf],ecx - mov ebx,[ebp+24] ; freqi - mov esi,[ebp+28] ; freqf - mov eax,[ebp+16] ; pointer to sample data - mov edx,[ebp+20] ; sample position (fractional part) - mov edi,[ebp+32] ; destination float buffer - mov ecx,[ebp+36] ; number of samples to mix - - mov ebp,[ebp+64] - add ebp,_kbasm_mixers - mov ebp,[ebp] - call ebp - - ; Update changed values - mov ebp,[ebpstore] - mov ebp,[ebp+8] - - mov [ebp+16],eax ; pointer to sample data - mov [ebp+20],edx ; sample position (fractional part) - mov [ebp+32],edi ; destination float buffer - mov eax,[fl1] - mov [ebp+52],eax - mov eax,[fb1] - mov [ebp+56],eax - - mov eax,[_voll] - mov ebx,[_volr] - mov [ebp],eax - mov [ebp+4],ebx - - mov ebp,[ebpstore] - - pop edi - pop esi - pop edx - pop ecx - pop ebx - pop eax - - leave - ret - -%macro cubicmixer 4 - fld dword [_voll] - fld dword [_volr] - mov ebp,eax - shr ebp,1 - mov eax,edx -%if %3 - neg eax -%endif - shr eax,24 -%if %1 - mov [store2],esp - mov esp,[scopebuf] -%endif - align 16 -%%mixlp: - fild word [ebp*2] - fmul dword [_kb_x86_ct0+eax*4] -%if %3 - fild word [ebp*2-2] - fmul dword [_kb_x86_ct1+eax*4] - fild word [ebp*2-4] - fmul dword [_kb_x86_ct2+eax*4] - fild word [ebp*2-6] -%else - fild word [ebp*2+2] - fmul dword [_kb_x86_ct1+eax*4] - fild word [ebp*2+4] - fmul dword [_kb_x86_ct2+eax*4] - fild word [ebp*2+6] -%endif - fmul dword [_kb_x86_ct3+eax*4] - fxch st2 - faddp st3,st0 - add edx,esi - lea edi,[edi+8] - faddp st2,st0 - adc ebp,ebx - mov eax,edx - faddp st1,st0 -%if %3 - neg eax -%endif -%if %2 - fsub dword [fl1] - fmul dword [ffreq] - fld dword [fb1] - fmul dword [freso] - faddp st1,st0 - fst dword [fb1] - fmul dword [ffreq] - fadd dword [fl1] - fst dword [fl1] -%endif -%if %1 - fld st0 - fmul st2 - fld st1 - fmul st4 - faddp st1,st0 - fistp word [esp] - lea esp,[esp+2] -%endif - shr eax,24 -%if %4 - fld st1 - fld st3 - fmul st2 - fxch st4 - fadd dword [_volrl] - fxch st2 - fmulp st1 - fxch st2 - fadd dword [_volrr] - fxch st3 - fadd dword [edi-8] - fxch st2 - fadd dword [edi-4] - fstp dword [edi-4] - fxch st1 - fstp dword [edi-8] - fxch st1 -%else - fld st2 - fmul st1 - fadd dword [edi-8] - fxch st1 - fmul st2 - fadd dword [edi-4] - fstp dword [edi-4] - fstp dword [edi-8] -%endif - dec ecx - jz %%mixend - jmp %%mixlp -%%mixend: -%if %4 - fstp dword [_volr] - fstp dword [_voll] -%endif - shl ebp,1 - mov eax,ebp -%if %1 - mov esp,[store2] -%endif - ret -%endmacro - -_kbasm_mix_cubic_noscopes_unfiltered_forward_noramp: - cubicmixer 0,0,0,0 -_kbasm_mix_cubic_noscopes_unfiltered_backward_noramp: - cubicmixer 0,0,1,0 -_kbasm_mix_cubic_noscopes_filtered_forward_noramp: - cubicmixer 0,1,0,0 -_kbasm_mix_cubic_noscopes_filtered_backward_noramp: - cubicmixer 0,1,1,0 -_kbasm_mix_cubic_scopes_unfiltered_forward_noramp: - cubicmixer 1,0,0,0 -_kbasm_mix_cubic_scopes_unfiltered_backward_noramp: - cubicmixer 1,0,1,0 -_kbasm_mix_cubic_scopes_filtered_forward_noramp: - cubicmixer 1,1,0,0 -_kbasm_mix_cubic_scopes_filtered_backward_noramp: - cubicmixer 1,1,1,0 -_kbasm_mix_cubic_noscopes_unfiltered_forward: - cubicmixer 0,0,0,1 -_kbasm_mix_cubic_noscopes_unfiltered_backward: - cubicmixer 0,0,1,1 -_kbasm_mix_cubic_noscopes_filtered_forward: - cubicmixer 0,1,0,1 -_kbasm_mix_cubic_noscopes_filtered_backward: - cubicmixer 0,1,1,1 -_kbasm_mix_cubic_scopes_unfiltered_forward: - cubicmixer 1,0,0,1 -_kbasm_mix_cubic_scopes_unfiltered_backward: - cubicmixer 1,0,1,1 -_kbasm_mix_cubic_scopes_filtered_forward: - cubicmixer 1,1,0,1 -_kbasm_mix_cubic_scopes_filtered_backward: - cubicmixer 1,1,1,1 - -section .data -global _kbasm_mixers -_kbasm_mixers: - dd _kbasm_mix_cubic_noscopes_unfiltered_forward_noramp - dd _kbasm_mix_cubic_noscopes_unfiltered_backward_noramp - dd _kbasm_mix_cubic_noscopes_filtered_forward_noramp - dd _kbasm_mix_cubic_noscopes_filtered_backward_noramp - dd _kbasm_mix_cubic_scopes_unfiltered_forward_noramp - dd _kbasm_mix_cubic_scopes_unfiltered_backward_noramp - dd _kbasm_mix_cubic_scopes_filtered_forward_noramp - dd _kbasm_mix_cubic_scopes_filtered_backward_noramp - dd _kbasm_mix_cubic_noscopes_unfiltered_forward - dd _kbasm_mix_cubic_noscopes_unfiltered_backward - dd _kbasm_mix_cubic_noscopes_filtered_forward - dd _kbasm_mix_cubic_noscopes_filtered_backward - dd _kbasm_mix_cubic_scopes_unfiltered_forward - dd _kbasm_mix_cubic_scopes_unfiltered_backward - dd _kbasm_mix_cubic_scopes_filtered_forward - dd _kbasm_mix_cubic_scopes_filtered_backward diff -Nru soundtracker-0.6.8/app/mixers/kb-x86-asm.S soundtracker-1.0.2~pre2/app/mixers/kb-x86-asm.S --- soundtracker-0.6.8/app/mixers/kb-x86-asm.S 2006-01-15 14:16:43.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/kb-x86-asm.S 1970-01-01 00:00:00.000000000 +0000 @@ -1,391 +0,0 @@ - -/* - * The Real SoundTracker - Cubically interpolating mixing routines - * with IT style filter support - * - * Highly optimized i386 version. - * - * Copyright (C) 1999-2000 Tammo Hinrichs - * Copyright (C) 2000 Michael Krause - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#ifndef _C_LABEL -# ifdef __ELF__ -# define _C_LABEL(x) x -# else -# define _C_LABEL(x) _ ## x -# endif -#endif -#undef GLOBAL -#define GLOBAL(x) .globl _C_LABEL(x); _C_LABEL(x): - -#if defined(__i386__) - -.section .data - .align 4 - -_volrl: .long 0 -_volrr: .long 0 -_voll: .long 0 -_volr: .long 0 -magic1: .long 0 -ebpstore: .long 0 -store2: .long 0 -scopebuf: .long 0 - -ffreq: .float 0.0 -freso: .float 0.0 -fl1: .float 0.0 -fb1: .float 0.0 - -.section .rodata - .align 4 -minampl: .float 0.0001 -cremoveconst: .float 0.992 -clampmax: .float 32767.0 -clampmin: .float -32767.0 -minuseins: .float -1.0 - -.text - - GLOBAL(kbasm_post_mixing) - pushl %ebp - movl %esp, %ebp - - pushl %ebx - pushl %ecx - pushl %edx - pushl %esi - pushl %edi - - finit - - movl 8(%ebp),%esi - movl 12(%ebp),%edi - movl 16(%ebp),%ecx - addl %ecx,%ecx // stereo - flds 20(%ebp) // (amp) - - call clipstereo - - popl %edi - popl %esi - popl %edx - popl %ecx - popl %ebx - - leave - ret - -clipstereo: // convert/clip samples, 16bit signed - flds clampmin // (min) (amp) - flds clampmax // (max) (min) (amp) - movw $32767,%bx - movw $-32767,%dx - movl %ebp,ebpstore - xorl %ebp,%ebp - -.lp: - flds (%esi) // (ls) (max) (min) (amp) - fmul %st(3) - fcom %st(1) - fnstsw %ax - sahf - ja .max - fcom %st(2) - fstsw %ax - sahf - jb .min - fistp (%edi) // (max) (min) (amp) -.next: - addl $4,%esi - addl $2,%edi - decl %ecx - jnz .lp - jmp .ende - -.max: - fstp %st // (max) (min) (amp) - movw %bx,(%edi) - incl %ebp - jmp .next -.min: - fstp %st // (max) (min) (amp) - movw %dx,(%edi) - incl %ebp - jmp .next - -.ende: - movl %ebp,%eax - movl ebpstore,%ebp - fstp %st // (min) (amp) - fstp %st // (amp) - fstp %st // - - ret - - GLOBAL(kbasm_mix) - pushl %ebp - movl %esp, %ebp - - pushl %eax - pushl %ebx - pushl %ecx - pushl %edx - pushl %esi - pushl %edi - - finit - - movl %ebp,ebpstore - movl 8(%ebp),%ebp - - // Put data into appropriate places for the real mixer subroutine - movl (%ebp),%eax - movl 4(%ebp),%ebx - movl %eax,_voll - movl %ebx,_volr - movl 8(%ebp),%eax - movl 12(%ebp),%ebx - movl %eax,_volrl - movl %ebx,_volrr - - movl 44(%ebp),%eax - movl %eax,ffreq - movl 48(%ebp),%eax - movl %eax,freso - movl 52(%ebp),%eax - movl %eax,fl1 - movl 56(%ebp),%eax - movl %eax,fb1 - movl 60(%ebp),%ecx - movl %ecx,scopebuf - movl 24(%ebp),%ebx // freqi - movl 28(%ebp),%esi // freqf - movl 16(%ebp),%eax // pointer to sample data - movl 20(%ebp),%edx // sample position (fractional part) - movl 32(%ebp),%edi // destination float buffer - movl 36(%ebp),%ecx // number of samples to mix - - movl 64(%ebp),%ebp - addl $kbasm_mixers,%ebp - movl (%ebp),%ebp - call *%ebp - - // Update changed values - movl ebpstore,%ebp - movl 8(%ebp),%ebp - - movl %eax,16(%ebp) // pointer to sample data - movl %edx,20(%ebp) // sample position (fractional part) - movl %edi,32(%ebp) // destination float buffer - movl fl1,%eax - movl %eax,52(%ebp) - movl fb1,%eax - movl %eax,56(%ebp) - - movl _voll,%eax - movl _volr,%ebx - movl %eax,(%ebp) - movl %ebx,4(%ebp) - - movl ebpstore,%ebp - - popl %edi - popl %esi - popl %edx - popl %ecx - popl %ebx - popl %eax - - leave - ret - - .MACRO CUBICMIXER SCOPES=0, FILTERED=0, BACKWARDS=0, VOLRAMP - flds _voll /* (vl) */ - flds _volr /* (vr) (vl) */ - movl %eax,%ebp - shrl $1,%ebp - movl %edx,%eax - .if \BACKWARDS - negl %eax - .endif - shrl $24,%eax - - .if \SCOPES - movl %esp,store2 - movl scopebuf,%esp - .endif - - .p2align 4,,7 -cubicmixer\@: - fild (,%ebp,2) /* (w0) (vl) */ - fmuls kb_x86_ct0(,%eax,4) /* (w0') (vl) */ - .ifeq \BACKWARDS - fild 2(,%ebp,2) /* (w1) (w0') (vl) */ - fmuls kb_x86_ct1(,%eax,4) /* (w1') (w0') (vl) */ - fild 4(,%ebp,2) /* (w2) (w1') (w0') (vl) */ - fmuls kb_x86_ct2(,%eax,4) /* (w2') (w1') (w0') (vl) */ - fild 6(,%ebp,2) /* (w3) (w2') (w1') (w0') (vl) */ - .else - fild -2(,%ebp,2) /* (w1) (w0') (vl) */ - fmuls kb_x86_ct1(,%eax,4) /* (w1') (w0') (vl) */ - fild -4(,%ebp,2) /* (w2) (w1') (w0') (vl) */ - fmuls kb_x86_ct2(,%eax,4) /* (w2') (w1') (w0') (vl) */ - fild -6(,%ebp,2) /* (w3) (w2') (w1') (w0') (vl) */ - .endif - fmuls kb_x86_ct3(,%eax,4) /* (w3') (w2') (w1') (w0') (vl) */ - fxch %st(2) /* (w1') (w2') (w3') (w0') (vr) (vl) */ - faddp %st,%st(3) /* (w2') (w3') (w0+w1) (vr) (vl) */ - addl %esi,%edx - lea 8(%edi),%edi - faddp %st,%st(2) /* (w2+w3) (w0+w1) (vr) (vl) */ - adcl %ebx,%ebp - movl %edx,%eax - faddp %st,%st(1) /* (val) (vr) (vl) */ - - .if \BACKWARDS - negl %eax - .endif - - .if \FILTERED - /* IT Filter Code */ - /* b=reso*b+freq*(in-l); */ - /* l+=freq*b; */ - fsubs fl1 /* (in-l) .. */ - fmuls ffreq /* (f*(in-l)) .. */ - flds fb1 /* (b) (f*(in-l)) .. */ - fmuls freso /* (r*b) (f*(in-l)) .. */ - faddp %st,%st(1) /* (b') .. */ - fsts fb1 - fmuls ffreq /* (f*b') .. */ - fadds fl1 /* (l') .. */ - fsts fl1 /* (val) (vr) (vl) */ - .endif - - shrl $24,%eax - - .if \SCOPES - /* Scopes */ - fld %st(1) /* (vr) (val) (vr) (vl) */ - fadd %st(3) /* (vr + vl) (val) (vr) (vl) */ - fmul %st(1),%st /* (val * (vr + vl)) (val) (vr) (vl) */ - fistp (%esp) /* (val) (vr) (vl) */ - lea 2(%esp),%esp - .endif - - .if \VOLRAMP - fld %st(1) /* (vr) (val) (vr) (vl) */ - fld %st(3) /* (vl) (vr) (val) (vr) (vl) */ - fmul %st(2),%st /* (left) (vr) (val) (vr) (vl) */ - fxch %st(4) /* (vl) (vr) (val) (vr) (left) */ - fadds _volrl /* (vl') (vr) (val) (vr) (left) */ - fxch %st(2) /* (val) (vr) (vl') (vr) (left) */ - fmulp %st(1) /* (right) (vl') (vr) (left) */ - fxch %st(2) /* (vr) (vl') (right) (left) */ - fadds _volrr /* (vr') (vl') (right) (left) */ - fxch %st(3) /* (left) (vl') (right) (vr') */ - fadds -8(%edi) /* (lfinal) (vl') (right) (vr') */ - fxch %st(2) /* (right) (vl') (lfinal) (vr') */ - fadds -4(%edi) /* (rfinal) (vl') (lfinal) (vr') */ - fstps -4(%edi) /* (vl') (lfinal) (vr') */ - fxch %st(1) /* (lfinal) (vl) (vr) */ - fstps -8(%edi) /* (vl) (vr) */ - fxch %st(1) /* (vr) (vl) */ - .else - fld %st(2) /* (vl) (val) (vr) (vl) */ - fmul %st(1),%st /* (left) (val) (vr) (vl) */ - fadds -8(%edi) /* (lfinal) (val) (vr) (vl) */ - fxch %st(1) /* (val) (lfinal) (vr) (vl) */ - fmul %st(2),%st /* (right) (lfinal) (vr) (vl) */ - fadds -4(%edi) /* (rfinal) (lfinal) (vr) (vl) */ - fstps -4(%edi) /* (lfinal) (vr) (vl) */ - fstps -8(%edi) /* (vr) (vl) */ - .endif - - decl %ecx - jnz cubicmixer\@ - - .if \VOLRAMP - fstps _volr /* (vl) */ - fstps _voll /* - */ - .endif - shll $1,%ebp - movl %ebp,%eax - - .if \SCOPES - movl store2,%esp - .endif - - ret - .ENDM - -kbasm_mix_cubic_noscopes_unfiltered_forward_noramp: - CUBICMIXER 0, 0, 0, 0 -kbasm_mix_cubic_noscopes_unfiltered_backward_noramp: - CUBICMIXER 0, 0, 1, 0 -kbasm_mix_cubic_noscopes_filtered_forward_noramp: - CUBICMIXER 0, 1, 0, 0 -kbasm_mix_cubic_noscopes_filtered_backward_noramp: - CUBICMIXER 0, 1, 1, 0 -kbasm_mix_cubic_scopes_unfiltered_forward_noramp: - CUBICMIXER 1, 0, 0, 0 -kbasm_mix_cubic_scopes_unfiltered_backward_noramp: - CUBICMIXER 1, 0, 1, 0 -kbasm_mix_cubic_scopes_filtered_forward_noramp: - CUBICMIXER 1, 1, 0, 0 -kbasm_mix_cubic_scopes_filtered_backward_noramp: - CUBICMIXER 1, 1, 1, 0 -kbasm_mix_cubic_noscopes_unfiltered_forward: - CUBICMIXER 0, 0, 0, 1 -kbasm_mix_cubic_noscopes_unfiltered_backward: - CUBICMIXER 0, 0, 1, 1 -kbasm_mix_cubic_noscopes_filtered_forward: - CUBICMIXER 0, 1, 0, 1 -kbasm_mix_cubic_noscopes_filtered_backward: - CUBICMIXER 0, 1, 1, 1 -kbasm_mix_cubic_scopes_unfiltered_forward: - CUBICMIXER 1, 0, 0, 1 -kbasm_mix_cubic_scopes_unfiltered_backward: - CUBICMIXER 1, 0, 1, 1 -kbasm_mix_cubic_scopes_filtered_forward: - CUBICMIXER 1, 1, 0, 1 -kbasm_mix_cubic_scopes_filtered_backward: - CUBICMIXER 1, 1, 1, 1 - -.section .data - GLOBAL(kbasm_mixers) - .long kbasm_mix_cubic_noscopes_unfiltered_forward_noramp - .long kbasm_mix_cubic_noscopes_unfiltered_backward_noramp - .long kbasm_mix_cubic_noscopes_filtered_forward_noramp - .long kbasm_mix_cubic_noscopes_filtered_backward_noramp - .long kbasm_mix_cubic_scopes_unfiltered_forward_noramp - .long kbasm_mix_cubic_scopes_unfiltered_backward_noramp - .long kbasm_mix_cubic_scopes_filtered_forward_noramp - .long kbasm_mix_cubic_scopes_filtered_backward_noramp - .long kbasm_mix_cubic_noscopes_unfiltered_forward - .long kbasm_mix_cubic_noscopes_unfiltered_backward - .long kbasm_mix_cubic_noscopes_filtered_forward - .long kbasm_mix_cubic_noscopes_filtered_backward - .long kbasm_mix_cubic_scopes_unfiltered_forward - .long kbasm_mix_cubic_scopes_unfiltered_backward - .long kbasm_mix_cubic_scopes_filtered_forward - .long kbasm_mix_cubic_scopes_filtered_backward - -#endif /* defined(__i386__) */ - - .END diff -Nru soundtracker-0.6.8/app/mixers/kb-x86.c soundtracker-1.0.2~pre2/app/mixers/kb-x86.c --- soundtracker-0.6.8/app/mixers/kb-x86.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/kb-x86.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,869 +0,0 @@ - -/* - * The Real SoundTracker - Cubically interpolating mixing routines - * with IT style filter support - * - * Copyright (C) 2001 Michael Krause - * Copyright (C) 1999-2000 Tammo Hinrichs - - * Despite its name, this mixer can run on every platform. - - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include - -#include -#include -#include -#include - -#include "mixer.h" -#include "kb-x86-asm.h" -#include "i18n.h" -#include "tracer.h" - -static int num_channels, mixfreq; -static int clipflag; - -static float *kb_x86_tempbuf = NULL; -static int kb_x86_tempbufsize = 0; - -static float kb_x86_amplification = 0.25; - -float kb_x86_ct0[256]; -float kb_x86_ct1[256]; -float kb_x86_ct2[256]; -float kb_x86_ct3[256]; - -typedef struct kb_x86_channel { - st_mixer_sample_info *sample; - - void *data; // for updatesample() to see if sample has changed - int looptype; - guint32 length; - - guint32 flags; // see below - float volume; // 0.0 ... 1.0 - float panning; // 0.0 ... 1.0 - int direction; // +1 for forward, -1 for backward - guint32 playend; // for a forced premature end of the sample - - float volleft; // left volume (1.0 = no change) - float volright; // rite volume (1.0 = no change) - - guint32 ramp_num_samples; // number of mixer output samples during which ramping is active - float rampleft; // left volramp (delta_vol per sample) - float rampright; // rite volramp (delta_vol per sample) - float rampdestleft; // ramp destination volume left - float rampdestright; // ramp destination volume right - - guint32 positionw; // current sample position (whole part of 32.32) - guint32 positionf; // current sample position (fractional part of 32.32) - guint32 freqw; // frequency (whole part of 32.32) - guint32 freqf; // frequency (fractional part of 32.32) - - float ffreq; // filter frequency (0<=x<=1) - float freso; // filter resonance (0<=x<1) - float fl1; // filter lp buffer - float fb1; // filter bp buffer -} kb_x86_channel; - -#define KB_FLAG_LOOP_UNIDIRECTIONAL 1 -#define KB_FLAG_LOOP_BIDIRECTIONAL 2 -#define KB_FLAG_SAMPLE_RUNNING 4 -#define KB_FLAG_JUST_STARTED 8 -#define KB_FLAG_UPPER_ACTIVE 16 -#define KB_FLAG_STOP_AFTER_VOLRAMP 32 -#define KB_FLAG_DO_SAMPLE_START_DECLICK 64 - -// This is an artificial limit. The code can do more channels. -static kb_x86_channel channels[2 * 32]; - -// Number of samples the mixer needs in advance -#define KB_X86_SAMPLE_PADDING 3 - -// A ramp from 32768 to 0 should take RAMP_MAX_DURATION seconds -#define RAMP_MAX_DURATION 0.001 - -static void -kb_x86_setnumch (int n) -{ - g_assert(n >= 1 && n <= 32); - - num_channels = n; -} - -/* This is just a quick hack to implement sample-change declicking - without coding full virtual channel support. But this will come - sooner or later so that hack is only temporary. - - It works like this: When a sample is stopped and a new one is - immediately started, there usually results a little click. In order - to avoid it, we let the old sample continue, but start a quick - volume downramp on it towards 0 (so that the click gets a linear - ramp and it's not that disturbing). It's obvious that for the time - of the volume ramp, we need to store the kb_x86_channel data blocks - of both the old channel and the new channel. Because of this, our - channels[] array is twice as large, and in the lower copy, the - KB_FLAG_UPPER_ACTIVE flag is active when the upper copy is the - one with the currently running main sample and the lower copy is - only the fading out old sample. - - Alle Klarheiten beseitigt? :-) As I said before, full - virtual-channel support will make this superfluous. -*/ -static kb_x86_channel * -kb_x86_get_channel_struct (int channel) -{ - kb_x86_channel *c = &channels[channel]; - - if(c->flags & KB_FLAG_UPPER_ACTIVE) { - c = &channels[channel + 32]; - } - - return c; -} - -static void -kb_x86_updatesample (st_mixer_sample_info *si) -{ - int i; - kb_x86_channel *c; - - for(i = 0; i < 2 * 32; i++) { - c = &channels[i]; - - if(c->sample != si || !(c->flags & KB_FLAG_SAMPLE_RUNNING)) { - continue; - } - - if(c->data != si->data - || c->length != si->length - || c->looptype != si->looptype) { - c->flags &= ~KB_FLAG_SAMPLE_RUNNING; - continue; - } - - /* No relevant data has changed. Don't stop the sample, but update - our local loop data instead. */ - c->looptype = si->looptype; - if(c->looptype != ST_MIXER_SAMPLE_LOOPTYPE_NONE) { - if(c->positionw < si->loopstart) { - c->positionw = si->loopstart; - c->positionf = 0x7fffffff; - } else if(c->positionw >= si->loopend) { - c->positionw = si->loopend - 1; - c->positionf = 0x7fffffff; - } - } - } -} - -static gboolean -kb_x86_setmixformat (int format) -{ - if(format != 16) - return FALSE; - - return TRUE; -} - -static gboolean -kb_x86_setstereo (int on) -{ - if(!on) - return FALSE; - - return TRUE; -} - -static void -kb_x86_setmixfreq (guint16 frequency) -{ - mixfreq = frequency; -} - -static void -kb_x86_setampfactor (float amplification) -{ - kb_x86_amplification = 0.25 * amplification; -} - -static gboolean -kb_x86_getclipflag (void) -{ - return clipflag; -} - -static void -kb_x86_reset (void) -{ - int i; - - memset(channels, 0, sizeof(channels)); - clipflag = 0; - - for(i = 0; i < 256; i++) { - float x1 = i / 256.0; - float x2 = x1*x1; - float x3 = x1*x1*x1; - kb_x86_ct0[i] = -0.5*x3 + x2 - 0.5*x1; - kb_x86_ct1[i] = 1.5*x3 - 2.5 * x2+1; - kb_x86_ct2[i] = -1.5*x3 + 2*x2 + 0.5*x1; - kb_x86_ct3[i] = 0.5*x3 - 0.5*x2; - } -} - -static void -kb_x86_startnote (int channel, - st_mixer_sample_info *s) -{ - kb_x86_channel *c = kb_x86_get_channel_struct(channel); - - c->flags &= KB_FLAG_UPPER_ACTIVE; - - c->sample = s; - - // The following three for update_sample() - c->data = s->data; - c->length = s->length; - c->looptype = s->looptype; - - c->positionw = 0; - c->positionf = 0; - c->playend = 0; - if(s->looptype == ST_MIXER_SAMPLE_LOOPTYPE_AMIGA) { - c->flags |= KB_FLAG_LOOP_UNIDIRECTIONAL; - } else if(s->looptype == ST_MIXER_SAMPLE_LOOPTYPE_PINGPONG) { - c->flags |= KB_FLAG_LOOP_BIDIRECTIONAL; - } - c->direction = 1; - c->ramp_num_samples = 0; - c->freso = 0.0; - c->ffreq = 1.0; - c->fl1 = 0.0; - c->fb1 = 0.0; - c->flags |= KB_FLAG_SAMPLE_RUNNING | KB_FLAG_JUST_STARTED; -} - -static void -kb_x86_stopnote (int channel) -{ - kb_x86_channel *c = &channels[channel]; - kb_x86_channel *current_used_chan = kb_x86_get_channel_struct(channel); - - if(current_used_chan->flags & KB_FLAG_SAMPLE_RUNNING) { - if(current_used_chan != c) { - c->flags &= ~KB_FLAG_UPPER_ACTIVE; - } else { - c->flags |= KB_FLAG_UPPER_ACTIVE; - } - - c = current_used_chan; - - c->flags |= KB_FLAG_STOP_AFTER_VOLRAMP; - - c->ramp_num_samples = RAMP_MAX_DURATION * mixfreq; - if(c->ramp_num_samples == 0) { - c->ramp_num_samples = 1; - } - c->rampdestleft = 0; - c->rampdestright = 0; - c->rampleft = (c->rampdestleft - c->volleft) / c->ramp_num_samples; - c->rampright = (c->rampdestright - c->volright) / c->ramp_num_samples; - } -} - -static void -kb_x86_setsmplpos (int channel, - guint32 offset) -{ - kb_x86_channel *c = kb_x86_get_channel_struct(channel); - - if(c->sample && c->flags != 0) { - if(offset < c->sample->length) { - c->positionw = offset; - c->positionf = 0; - c->direction = 1; - - if(c->flags & KB_FLAG_JUST_STARTED && offset > 0) { - /* User has used 9xx command - declick sample start */ - c->flags |= KB_FLAG_DO_SAMPLE_START_DECLICK; - } - } else { - c->flags &= KB_FLAG_UPPER_ACTIVE; - } - } -} - -static void -kb_x86_setsmplend (int channel, - guint32 offset) -{ - kb_x86_channel *c = kb_x86_get_channel_struct(channel); - - if(c->sample && c->flags != 0) { - if(c->positionw != 0 || offset < c->sample->length) { - // only end if the selection is not the whole sample - c->playend = offset; - } - } -} - -static void -kb_x86_setfreq (int channel, - float frequency) -{ - kb_x86_channel *c = kb_x86_get_channel_struct(channel); - - frequency /= mixfreq; - - c->freqw = (guint32)floor(frequency); - c->freqf = (guint32)((frequency - c->freqw) * 4294967296.0 /* this is pow(2,32) */ ); -} - -static void -kb_x86_redo_vol_fields (kb_x86_channel *c) -{ - c->rampdestleft = c->volume * (1.0 - c->panning); - c->rampdestright = c->volume * c->panning; - g_assert(c->rampdestleft >= 0.0 && c->rampdestleft <= 1.0); - g_assert(c->rampdestright >= 0.0 && c->rampdestright <= 1.0); - - if(c->flags & KB_FLAG_JUST_STARTED) { - c->volleft = c->rampdestleft; - c->volright = c->rampdestright; - } else { - c->ramp_num_samples = RAMP_MAX_DURATION * mixfreq; - if(c->ramp_num_samples == 0) { - c->ramp_num_samples = 1; - } - c->rampleft = (c->rampdestleft - c->volleft) / c->ramp_num_samples; - c->rampright = (c->rampdestright - c->volright) / c->ramp_num_samples; - } -} - -static void -kb_x86_setvolume (int channel, - float volume) -{ - kb_x86_channel *c = kb_x86_get_channel_struct(channel); - - c->volume = volume; - kb_x86_redo_vol_fields(c); -} - -static void -kb_x86_setpanning (int channel, - float panning) -{ - kb_x86_channel *c = kb_x86_get_channel_struct(channel); - - c->panning = 0.5 * (panning + 1.0); - kb_x86_redo_vol_fields(c); -} - -static void -kb_x86_setchcutoff (int channel, - float freq) -{ - kb_x86_channel *c = kb_x86_get_channel_struct(channel); - - if(freq < 0.0) { - c->ffreq = 1.0; - c->freso = 0.0; - } else { - g_assert(0.0 <= freq); - g_assert(freq <= 1.0); - c->ffreq = freq; - c->freso = 0.0; - } -} - -static void -kb_x86_setchreso (int channel, - float reso) -{ - kb_x86_channel *c = kb_x86_get_channel_struct(channel); - - g_assert(0.0 <= reso); - g_assert(reso <= 1.0); - c->freso = reso; -} - -#if defined(DEBUG_BUFFER) -static void -kb_x86_debug_dump_buffer (gint16 *buffer, - int count) -{ - int i; - - printf("{ "); - for(i = 0; i < count; i++) { - if(i > 0) { - printf(", "); - } - printf("%d", buffer[i]); - } - printf(" }\n"); -} -#endif - -static void -kb_x86_call_mixer (kb_x86_channel *ch, - kb_x86_mixer_data *md, - gboolean forward) -{ - if(!forward) { - md->flags |= KB_X86_MIXER_FLAGS_BACKWARD; - } - kbasm_mix(md); - ch->volleft = md->volleft; - ch->volright = md->volright; -} - -static guint32 -kb_x86_mix_sub (kb_x86_channel *ch, - guint32 num_samples_left, - gboolean volramping, - float *mixbuf, - gint16 *scopebuf) -{ - kb_x86_mixer_data md; - - const gboolean loopit = (ch->playend == 0) && - (ch->flags & (KB_FLAG_LOOP_UNIDIRECTIONAL | KB_FLAG_LOOP_BIDIRECTIONAL)); - const gboolean gonnapingpong = loopit && (ch->flags & KB_FLAG_LOOP_BIDIRECTIONAL); - - const gint64 lstart64 = ((guint64)ch->sample->loopstart) << 32; - const gint32 pos = ch->positionw; - const gint64 freq64 = (((guint64)ch->freqw) << 32) + (guint64)ch->freqf; - const gint64 pos64 = ((guint64)(ch->positionw) << 32) + (guint64)ch->positionf; - const gint32 ende = (ch->playend != 0) ? (ch->playend) : (loopit ? ch->sample->loopend : ch->length); - const gint64 ende64 = (guint64)ende << 32; - - int num_samples; - - /* Initalize the data array for the assembly subroutines. */ - md.volleft = ch->volleft; - md.volright = ch->volright; - if(!volramping) { - md.volrampl = 0; - md.volrampr = 0; - } else { - md.volrampl = ch->rampleft; - md.volrampr = ch->rampright; - } - md.positionf = ch->positionf; - if(ch->direction == 1) { - md.freqi = ch->freqw; - md.freqf = ch->freqf; - } else { - gint64 freq64_ = -freq64; - md.freqi = freq64_ >> 32; - md.freqf = freq64_ & 0xffffffff; - } - md.mixbuffer = mixbuf; - md.scopebuf = scopebuf; - md.freso = ch->freso; - md.ffreq = ch->ffreq; - md.fl1 = ch->fl1; - md.fb1 = ch->fb1; - md.flags = KB_X86_MIXER_FLAGS_FILTERED; - - if(md.ffreq == 1.0 && md.freso == 0.0) { - md.flags &= ~KB_X86_MIXER_FLAGS_FILTERED; - } - if(md.scopebuf) { - md.flags |= KB_X86_MIXER_FLAGS_SCOPES; - } - if(volramping) { - md.flags |= KB_X86_MIXER_FLAGS_VOLRAMP; - } - - if((ch->direction == 1 && pos >= ende - KB_X86_SAMPLE_PADDING) - || (ch->direction == -1 && pos < (gint32)(ch->sample->loopstart + KB_X86_SAMPLE_PADDING))) { - /* This is the dangerous case. We are near one of the ends of - a loop or sample (we might even have crossed it - already!). We have to take care of handling the looping and - perhaps we also have to prepare a mirror copy of the sample - values located around the loop incontinuity so that the - assembly routines don't use illegal values when - interpolating. */ - gint16 buffer[KB_X86_SAMPLE_PADDING + 1]; - unsigned int i; - gint32 j; - gint16 *bufferpt; - - /* First check if we're completely out of bounds, that means - for example: not just slightly before the end of the loop, - but way behind it. */ - if(gonnapingpong) { - /* The pingpong loop case. Care is taken to take into - account extremely short loops with extremly high - frequencies. */ - gboolean touched = FALSE; - gint64 mypos64 = ((guint64)(ch->positionw) << 32) + (guint64)ch->positionf; - gint64 lend64 = (((guint64)ch->sample->loopend) << 32) - 1; - - while(1) { - if(ch->direction == 1 && mypos64 >= lend64) { - ch->direction = -1; - mypos64 -= lend64; - mypos64 *= -1; - mypos64 += lend64; - touched = TRUE; - } else if(ch->direction == -1 && mypos64 < lstart64) { - ch->direction = +1; - mypos64 -= lstart64; - mypos64 *= -1; - mypos64 += lstart64; - touched = TRUE; - } else { - break; - } - } - - if(touched) { - /* We've been really out of bounds. Start all over. */ - ch->positionf = (guint32)(mypos64 & 0xffffffff); /* just the lower 32 bits */ - ch->positionw = (guint32)(mypos64 >> 32); /* just the upper 32 bits */ - return 0; - } - } else if(loopit) { - /* The unidirectional ("Amiga") loop case. */ - gboolean touched = FALSE; - guint32 looplen = ch->sample->loopend - ch->sample->loopstart; - - while(ch->positionw >= ch->sample->loopend) { - ch->positionw -= looplen; - touched = TRUE; - } - - if(touched) { - /* We've been out of bounds. Start all over. */ - return 0; - } - } else { - if(ch->positionw >= ende) { - /* A sample without loop has just ended. */ - ch->flags &= KB_FLAG_UPPER_ACTIVE; - return num_samples_left; - } - } - - /* The following code is concerned with doing the fake sample - stuff for correct handling of the loop incontinuities. */ - if(loopit || gonnapingpong) { - g_assert(pos < ch->sample->loopend); - } - - if(gonnapingpong) { - int dir, bufferfilldir; - - dir = bufferfilldir = ch->direction; - bufferpt = buffer; - if(ch->direction == -1) { - bufferpt += (sizeof(buffer) / sizeof(buffer[0])) - 1; - } - for(i = 0, j = pos; i < sizeof(buffer) / sizeof(buffer[0]); i++) { - *bufferpt = ((gint16*)ch->sample->data)[j]; - if(dir == +1) { - if(++j >= ch->sample->loopend) { - dir = -1; - j--; - } - } else { - if(--j < (gint32)ch->sample->loopstart) { - j++; - dir = +1; - } - } - bufferpt += bufferfilldir; - } - } else { - for(i = 0, j = pos; i < sizeof(buffer) / sizeof(buffer[0]); i++) { - buffer[i] = ((gint16*)ch->sample->data)[j]; - if(++j >= ende) { - if(loopit) { - j -= (ch->sample->loopend - ch->sample->loopstart); - } else { - j--; - } - } - } - } - - num_samples = 1; - md.numsamples = 1; - if(ch->direction == 1) { - md.positioni = buffer; - kb_x86_call_mixer(ch, &md, TRUE); - ch->positionw = md.positioni - buffer + pos; - } else { - md.positioni = buffer + ((sizeof(buffer) / sizeof(buffer[0])) - 1); - kb_x86_call_mixer(ch, &md, FALSE); - ch->positionw = md.positioni - (buffer + ((sizeof(buffer) / sizeof(buffer[0])) - 1)) + pos; - } - - ch->positionf = md.positionf; - ch->volleft = md.volleft; - ch->volright = md.volright; - ch->fl1 = md.fl1; - ch->fb1 = md.fb1; - - return num_samples; - } else { - /* That we've reached this point means that the current sample - position is in an area of the sample that's not near the - start nor the end, which in turn means that we don't have - to create auxiliary arrays to prevent the mixer routine - from accessing invalid data beyond the end of the sample. - - Now calculate how far we can go on like this until we hit a - dangerous area. */ - if(ch->direction == 1) { - const guint64 wieweit64 = pos64 + freq64 * num_samples_left; - const guint32 wieweit = wieweit64 >> 32; - - if(wieweit >= ende - KB_X86_SAMPLE_PADDING) { - /* oh, sorry - we need to truncate mixing length this - time. calculate exactly how many samples we can - still render in one run until we hit a dangerous - area. */ - num_samples = (ende64 - ((guint64)KB_X86_SAMPLE_PADDING << 32) - pos64 + (freq64 - 1)) / freq64; - g_assert(num_samples > 0); - g_assert(pos64 + freq64 * num_samples >= ende64 - ((guint64)KB_X86_SAMPLE_PADDING << 32)); - g_assert(pos64 + freq64 * (num_samples - 1) < ende64 - ((guint64)KB_X86_SAMPLE_PADDING << 32)); - num_samples = MIN(num_samples_left, num_samples); - } else { - /* no problem, we can render the full buffer without - problems in one run. */ - num_samples = num_samples_left; - } - - md.positioni = (gint16*)ch->sample->data + pos; - md.numsamples = num_samples; - kb_x86_call_mixer(ch, &md, TRUE); - } else { - /* The same stuff, only for backwards direction */ - const gint64 wieweit64 = pos64 - freq64 * num_samples_left; - const gint32 wieweit = wieweit64 >> 32; - - if(wieweit < (gint32)(ch->sample->loopstart + KB_X86_SAMPLE_PADDING)) { - num_samples = 1 + (pos64 - (((guint64)KB_X86_SAMPLE_PADDING + ch->sample->loopstart) << 32)) / freq64; - g_assert(num_samples > 0); - g_assert(pos64 - freq64 * (gint64)(num_samples) < ((gint64)(ch->sample->loopstart + KB_X86_SAMPLE_PADDING) << 32)); - g_assert(pos64 - freq64 * (gint64)(num_samples - 1) >= ((gint64)(ch->sample->loopstart + KB_X86_SAMPLE_PADDING) << 32)); - num_samples = MIN(num_samples_left, num_samples); - } else { - num_samples = num_samples_left; - } - - md.positioni = (gint16*)ch->sample->data + pos; - md.numsamples = num_samples; - kb_x86_call_mixer(ch, &md, FALSE); - } - - ch->positionw = md.positioni - (gint16*)ch->sample->data; - ch->positionf = md.positionf; - ch->volleft = md.volleft; - ch->volright = md.volright; - ch->fl1 = md.fl1; - ch->fb1 = md.fb1; - - return num_samples; - } -} - -static void * -kb_x86_mix (void *dest, - guint32 count, - gint16 *scopebufs[], - int scopebuf_offset) -{ - int chnr; - - if(count > kb_x86_tempbufsize) { - free(kb_x86_tempbuf); - kb_x86_tempbufsize = count; - kb_x86_tempbuf = malloc(2 * sizeof(float) * kb_x86_tempbufsize); - } - - memset(kb_x86_tempbuf, 0, 2 * sizeof(float) * count); - - for(chnr = 0; chnr < 2 * 32; chnr++) { - kb_x86_channel *ch = channels + chnr; - float *tempbuf = kb_x86_tempbuf; - int num_samples_left = count; - gint16 *scopedata = NULL; - - if((chnr & 31) >= num_channels) - continue; - - if(scopebufs && (chnr < 32 || (channels[chnr - 32].flags & KB_FLAG_UPPER_ACTIVE))) { - scopedata = scopebufs[chnr & 31] + scopebuf_offset; - } - - if(!(ch->flags & KB_FLAG_SAMPLE_RUNNING)) { - if(scopedata) { - memset(scopedata, 0, 2 * num_samples_left); - } - continue; - } - - if(ch->flags & KB_FLAG_JUST_STARTED) { - if(ch->flags & KB_FLAG_DO_SAMPLE_START_DECLICK) { - ch->ramp_num_samples = RAMP_MAX_DURATION * mixfreq; - if(ch->ramp_num_samples == 0) { - ch->ramp_num_samples = 1; - } - ch->volleft = 0.0; - ch->volright = 0.0; - ch->rampleft = (ch->rampdestleft - ch->volleft) / ch->ramp_num_samples; - ch->rampright = (ch->rampdestright - ch->volright) / ch->ramp_num_samples; - } - - ch->flags &= ~KB_FLAG_JUST_STARTED; - } - - g_assert(ch->sample->lock); - g_mutex_lock(ch->sample->lock); - - while(num_samples_left && (ch->flags & KB_FLAG_SAMPLE_RUNNING)) { - int num_samples = 0; - gboolean vol_ramping = (ch->ramp_num_samples != 0); - int max_samples_this_time = vol_ramping ? MIN(ch->ramp_num_samples, num_samples_left) : num_samples_left; - - num_samples = kb_x86_mix_sub(ch, - max_samples_this_time, vol_ramping, - tempbuf, scopedata); - - if(vol_ramping) { - ch->ramp_num_samples -= num_samples; - if(ch->ramp_num_samples == 0) { - /* Volume ramping finished. */ - ch->volleft = ch->rampdestleft; - ch->volright = ch->rampdestright; - if(ch->flags & KB_FLAG_STOP_AFTER_VOLRAMP) { - /* This was only a declicking channel. Stop sample. */ - ch->flags &= KB_FLAG_UPPER_ACTIVE; - } - } - } - - num_samples_left -= num_samples; - tempbuf += (num_samples * 2); - if(scopedata) { - scopedata += num_samples; - } - } - - g_mutex_unlock(ch->sample->lock); - } - - clipflag = kbasm_post_mixing(kb_x86_tempbuf, (gint16*)dest, count, kb_x86_amplification); - - return dest + count * 2 * 2; -} - -void -kb_x86_dumpstatus (st_mixer_channel_status array[]) -{ - int i; - gint32 pos; - - for(i = 0; i < 32; i++) { - kb_x86_channel *c = kb_x86_get_channel_struct(i); - - if(c->flags & KB_FLAG_SAMPLE_RUNNING) { - array[i].current_sample = c->sample; - pos = c->positionw; - if(pos < 0) { - pos = 0; - } else if(pos >= c->sample->length) { - pos = c->sample->length - 1; - } - array[i].current_position = pos; - } else { - array[i].current_sample = NULL; - } - } -} - -static void -kb_x86_loadchsettings (int ch) -{ - tracer_channel *tch; - kb_x86_channel *kbch; - - g_assert(ch < num_channels); - - tch = tracer_return_channel(ch); - kbch = kb_x86_get_channel_struct(ch); - - kbch->sample = tch->sample; - kbch->data = tch->data; - kbch->looptype = tch->looptype; - kbch->length = tch->length; - kbch->volume = tch->volume; - kbch->panning = tch->panning; - kbch->direction = tch->direction; - kbch->playend = tch->playend; - kbch->positionw = tch->positionw; - kbch->positionf = tch->positionf; - kbch->freqw = tch->freqw; - kbch->freqf = tch->freqf; - kbch->ffreq = tch->ffreq; - kbch->freso = tch->freso; - - kbch->flags = (kbch->flags & KB_FLAG_UPPER_ACTIVE) | KB_FLAG_JUST_STARTED | - ((tch->flags & TR_FLAG_LOOP_UNIDIRECTIONAL) ? KB_FLAG_LOOP_UNIDIRECTIONAL : 0) | - ((tch->flags & TR_FLAG_LOOP_BIDIRECTIONAL) ? KB_FLAG_LOOP_BIDIRECTIONAL : 0) | - ((tch->flags & TR_FLAG_SAMPLE_RUNNING) ? KB_FLAG_SAMPLE_RUNNING : 0); - - kb_x86_redo_vol_fields(kbch); -} - -st_mixer mixer_kbfloat = { - "kbfloat", - N_("High-quality FPU mixer, cubic interpolation, IT filters, unlimited length samples"), - - kb_x86_setnumch, - kb_x86_updatesample, - kb_x86_setmixformat, - kb_x86_setstereo, - kb_x86_setmixfreq, - kb_x86_setampfactor, - kb_x86_getclipflag, - kb_x86_reset, - kb_x86_startnote, - kb_x86_stopnote, - kb_x86_setsmplpos, - kb_x86_setsmplend, - kb_x86_setfreq, - kb_x86_setvolume, - kb_x86_setpanning, - kb_x86_setchcutoff, - kb_x86_setchreso, - kb_x86_mix, - kb_x86_dumpstatus, - kb_x86_loadchsettings, - - 0x7fffffff, - - NULL -}; diff -Nru soundtracker-0.6.8/app/mixers/Makefile.am soundtracker-1.0.2~pre2/app/mixers/Makefile.am --- soundtracker-0.6.8/app/mixers/Makefile.am 2006-02-25 13:24:43.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/Makefile.am 2018-10-22 16:08:35.000000000 +0000 @@ -1,18 +1,10 @@ -EXTRA_DIST = kb-x86-asm.S kb-x86-asmIntel.a \ - integer32.c integer32-asm.S integer32-asm.h noinst_LIBRARIES = libmixers.a -if NO_ASM MIXERSOURCES = \ integer32.c \ - kb-x86.c kbfloat-mix.c kb-x86-asm.h -else -MIXERSOURCES = \ - integer32.c integer32-asm.S integer32-asm.h \ - kb-x86.c kb-x86-asm.h kb-x86-asm.S -endif + kbfloat.c kbfloat-core.c kbfloat-core.h libmixers_a_SOURCES = $(MIXERSOURCES) -INCLUDES = -I.. +AM_CPPFLAGS = -I.. diff -Nru soundtracker-0.6.8/app/mixers/Makefile.in soundtracker-1.0.2~pre2/app/mixers/Makefile.in --- soundtracker-0.6.8/app/mixers/Makefile.in 2006-02-25 13:37:19.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/mixers/Makefile.in 2021-02-26 19:46:41.000000000 +0000 @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.7.9 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 -# Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,16 +14,67 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. - +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -35,21 +86,101 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : +build_triplet = @build@ host_triplet = @host@ +subdir = app/mixers +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = +libmixers_a_AR = $(AR) $(ARFLAGS) +libmixers_a_LIBADD = +am__objects_1 = integer32.$(OBJEXT) kbfloat.$(OBJEXT) \ + kbfloat-core.$(OBJEXT) +am_libmixers_a_OBJECTS = $(am__objects_1) +libmixers_a_OBJECTS = $(am_libmixers_a_OBJECTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libmixers_a_SOURCES) +DIST_SOURCES = $(libmixers_a_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +ARFLAGS = @ARFLAGS@ AUDIOFILE_CFLAGS = @AUDIOFILE_CFLAGS@ -AUDIOFILE_CONFIG = @AUDIOFILE_CONFIG@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +CANVAS_CFLAGS = @CANVAS_CFLAGS@ +CANVAS_LIBS = @CANVAS_LIBS@ CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ @@ -57,45 +188,26 @@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DRIVER_ALSA_050_FALSE = @DRIVER_ALSA_050_FALSE@ -DRIVER_ALSA_050_TRUE = @DRIVER_ALSA_050_TRUE@ -DRIVER_ALSA_09x_FALSE = @DRIVER_ALSA_09x_FALSE@ -DRIVER_ALSA_09x_TRUE = @DRIVER_ALSA_09x_TRUE@ -DRIVER_ALSA_FALSE = @DRIVER_ALSA_FALSE@ -DRIVER_ALSA_TRUE = @DRIVER_ALSA_TRUE@ -DRIVER_ESD_FALSE = @DRIVER_ESD_FALSE@ -DRIVER_ESD_TRUE = @DRIVER_ESD_TRUE@ -DRIVER_IRIX_FALSE = @DRIVER_IRIX_FALSE@ -DRIVER_IRIX_TRUE = @DRIVER_IRIX_TRUE@ -DRIVER_JACK_FALSE = @DRIVER_JACK_FALSE@ -DRIVER_JACK_TRUE = @DRIVER_JACK_TRUE@ -DRIVER_OSS_FALSE = @DRIVER_OSS_FALSE@ -DRIVER_OSS_TRUE = @DRIVER_OSS_TRUE@ -DRIVER_SDL_FALSE = @DRIVER_SDL_FALSE@ -DRIVER_SDL_TRUE = @DRIVER_SDL_TRUE@ -DRIVER_SUN_FALSE = @DRIVER_SUN_FALSE@ -DRIVER_SUN_TRUE = @DRIVER_SUN_TRUE@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ESD_CFLAGS = @ESD_CFLAGS@ -ESD_CONFIG = @ESD_CONFIG@ -ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ -GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ -GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@ -GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ -GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ @@ -105,279 +217,250 @@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ -MKINSTALLDIRS = @MKINSTALLDIRS@ +MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ -NO_ASM_FALSE = @NO_ASM_FALSE@ -NO_ASM_TRUE = @NO_ASM_TRUE@ -NO_GDK_PIXBUF_FALSE = @NO_GDK_PIXBUF_FALSE@ -NO_GDK_PIXBUF_TRUE = @NO_GDK_PIXBUF_TRUE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ +PULSE_CFLAGS = @PULSE_CFLAGS@ +PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ -ST_S_JACK_INCLUDES = @ST_S_JACK_INCLUDES@ -ST_S_JACK_LIBS = @ST_S_JACK_LIBS@ -USE_GNOME_FALSE = @USE_GNOME_FALSE@ -USE_GNOME_TRUE = @USE_GNOME_TRUE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ -gnomepath = @gnomepath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ +mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ +sedpath = @sedpath@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ -target = @target@ target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -EXTRA_DIST = kb-x86-asm.S kb-x86-asmIntel.a \ - integer32.c integer32-asm.S integer32-asm.h - - +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ noinst_LIBRARIES = libmixers.a -@NO_ASM_FALSE@MIXERSOURCES = \ -@NO_ASM_FALSE@ integer32.c integer32-asm.S integer32-asm.h \ -@NO_ASM_FALSE@ kb-x86.c kb-x86-asm.h kb-x86-asm.S - - -@NO_ASM_TRUE@MIXERSOURCES = \ -@NO_ASM_TRUE@ integer32.c \ -@NO_ASM_TRUE@ kb-x86.c kbfloat-mix.c kb-x86-asm.h - +MIXERSOURCES = \ + integer32.c \ + kbfloat.c kbfloat-core.c kbfloat-core.h libmixers_a_SOURCES = $(MIXERSOURCES) - -INCLUDES = -I.. -subdir = app/mixers -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -LIBRARIES = $(noinst_LIBRARIES) - -libmixers_a_AR = $(AR) cru -libmixers_a_LIBADD = -am__libmixers_a_SOURCES_DIST = integer32.c integer32-asm.S \ - integer32-asm.h kb-x86.c kb-x86-asm.h kb-x86-asm.S \ - kbfloat-mix.c -@NO_ASM_TRUE@am__objects_1 = integer32.$(OBJEXT) kb-x86.$(OBJEXT) \ -@NO_ASM_TRUE@ kbfloat-mix.$(OBJEXT) -@NO_ASM_FALSE@am__objects_1 = integer32.$(OBJEXT) \ -@NO_ASM_FALSE@ integer32-asm.$(OBJEXT) kb-x86.$(OBJEXT) \ -@NO_ASM_FALSE@ kb-x86-asm.$(OBJEXT) -am_libmixers_a_OBJECTS = $(am__objects_1) -libmixers_a_OBJECTS = $(am_libmixers_a_OBJECTS) - -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/integer32.Po ./$(DEPDIR)/kb-x86.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/kbfloat-mix.Po -CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -DIST_SOURCES = $(am__libmixers_a_SOURCES_DIST) -DIST_COMMON = $(srcdir)/Makefile.in Makefile.am -SOURCES = $(libmixers_a_SOURCES) - +AM_CPPFLAGS = -I.. all: all-am .SUFFIXES: -.SUFFIXES: .S .c .o .obj -$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu app/mixers/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) - -AR = ar +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu app/mixers/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu app/mixers/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) -libmixers.a: $(libmixers_a_OBJECTS) $(libmixers_a_DEPENDENCIES) - -rm -f libmixers.a - $(libmixers_a_AR) libmixers.a $(libmixers_a_OBJECTS) $(libmixers_a_LIBADD) - $(RANLIB) libmixers.a + +libmixers.a: $(libmixers_a_OBJECTS) $(libmixers_a_DEPENDENCIES) $(EXTRA_libmixers_a_DEPENDENCIES) + $(AM_V_at)-rm -f libmixers.a + $(AM_V_AR)$(libmixers_a_AR) libmixers.a $(libmixers_a_OBJECTS) $(libmixers_a_LIBADD) + $(AM_V_at)$(RANLIB) libmixers.a mostlyclean-compile: - -rm -f *.$(OBJEXT) core *.core + -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/integer32.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kb-x86.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kbfloat-mix.Po@am__quote@ - -.S.o: - $(CCASCOMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< - -.S.obj: - $(CCASCOMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kbfloat-core.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kbfloat.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ -@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ -@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ -@am__fastdepCC_TRUE@ fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ -@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ -@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ -@am__fastdepCC_TRUE@ fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` -uninstall-info-am: - -ETAGS = etags -ETAGSFLAGS = - -CTAGS = ctags -CTAGSFLAGS = - -tags: TAGS +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$tags$$unique" \ - || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique - -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - -top_distdir = ../.. -distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkinstalldirs) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) - installdirs: install: install-am install-exec: install-exec-am @@ -389,16 +472,22 @@ installcheck: installcheck-am install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi mostlyclean-generic: clean-generic: distclean-generic: - -rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -417,18 +506,40 @@ dvi-am: +html: html-am + +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -448,17 +559,25 @@ ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am + +.PRECIOUS: Makefile -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am info \ - info-am install install-am install-data install-data-am \ - install-exec install-exec-am install-info install-info-am \ - install-man install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ - ps ps-am tags uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru soundtracker-0.6.8/app/module-info.c soundtracker-1.0.2~pre2/app/module-info.c --- soundtracker-0.6.8/app/module-info.c 2003-05-24 11:22:40.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/module-info.c 2021-02-06 10:50:03.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - module info page * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,384 +19,1114 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include +#include +#include +#include +#include #include +#include #include -#include - -#include "i18n.h" -#include "module-info.h" -#include "gui.h" +#include "extspinbutton.h" #include "gui-subs.h" -#include "xm.h" -#include "st-subs.h" -#include "main.h" -#include "sample-editor.h" +#include "gui.h" +#include "history.h" #include "instrument-editor.h" #include "keys.h" +#include "main.h" +#include "module-info.h" +#include "sample-editor.h" +#include "st-subs.h" #include "track-editor.h" +#include "xm.h" -static GtkWidget *ilist, *slist, *songname; +static GtkWidget *ilist, *slist, *ilist2, *slist2, *songname, *sw1, *sw2; static GtkWidget *freqmode_w[2], *ptmode_toggle; -static int curi = 0, curs = 0; +static GtkWidget *ins1_label, *smp1_label, *ins2_label, *smp2_label, *mix_label1, *mix_label2; +static guint curi = 0, curs = 0, desti = 0, dests = 0, mix_prev_note; +static gfloat mixlevel = 50.0; +static gboolean is_tuning = FALSE; + +struct tuner { + GtkWidget *frame, *note_label, *note2_label, *note_spin; + GtkWidget *period_label, *period_label2, *period_spin, *play, *stop; + guint note, mode, period; + gboolean is_ref; + gint timer; + const gchar *label_text; +}; + +static struct tuner *tuning, *ref; + +static STSample prev_sample = {{0}}; +static guint32 prev_alloc_length = 0; + +static const gchar* mode1[] = {N_("Single"), N_("Cyclic"), N_("Keyboard")}; +static const gchar* mode2[] = {N_("Single"), N_("Cyclic"), N_("Coupled")}; +enum { + MODE_SINGLE = 0, + MODE_CYCLIC, + MODE_KEYBOARD, + MODE_COUPLED = MODE_KEYBOARD, + MODE_LAST +}; static void -ptmode_changed (GtkWidget *widget) +ptmode_changed(GtkToggleButton* widget) { - int m = GTK_TOGGLE_BUTTON(widget)->active; - if(xm) { - xm->flags &= ~XM_FLAGS_IS_MOD; - xm->flags |= m * XM_FLAGS_IS_MOD; + if (xm) { + history_log_toggle_button(widget, _("Protracker mode changing"), + HISTORY_FLAG_LOG_PAGE, xm->flags & XM_FLAGS_IS_MOD); + if (gtk_toggle_button_get_active(widget)) + xm->flags |= XM_FLAGS_IS_MOD; + else + xm->flags &= ~XM_FLAGS_IS_MOD; } - xm_set_modified(1); } static void -freqmode_changed (void) +freqmode_changed(GtkToggleButton* widget) { - int m = find_current_toggle(freqmode_w, 2); - if(xm) { - xm->flags &= ~XM_FLAGS_AMIGA_FREQ; - xm->flags |= m * XM_FLAGS_AMIGA_FREQ; - } - xm_set_modified(1); + if (xm && gtk_toggle_button_get_active(widget)) { + gint m = find_current_toggle(freqmode_w, 2); + history_log_radio_group(freqmode_w, _("Frequency mode changing"), + HISTORY_FLAG_LOG_PAGE, (xm->flags & XM_FLAGS_AMIGA_FREQ) != 0 ? 1 : 0, 2); + if (m) + xm->flags |= XM_FLAGS_AMIGA_FREQ; + else + xm->flags &= ~XM_FLAGS_AMIGA_FREQ; + } } static void -songname_changed (GtkEntry *entry) +songname_changed(GtkEntry* entry) { - strncpy(xm->name, gtk_entry_get_text(entry), 20); - xm->name[20] = 0; - xm_set_modified(1); + gchar* term; + + history_log_entry(entry, _("Song name changing"), 20 * 4, + HISTORY_FLAG_LOG_PAGE, xm->utf_name); + g_utf8_strncpy(xm->utf_name, gtk_entry_get_text(entry), 20); + term = g_utf8_offset_to_pointer(xm->utf_name, 21); + term[0] = 0; + xm->needs_conversion = TRUE; } static void -ilist_size_allocate (GtkCList *list) +modinfo_update_all_samples(const gint n, const gboolean second) { - gtk_clist_set_column_width(list, 0, 30); - gtk_clist_set_column_width(list, 2, 30); - gtk_clist_set_column_width(list, 1, list->clist_window_width - 2 * 30 - 2 * 8 - 6); + guint i; + GtkTreeModel* model; + GtkWidget* list = second ? slist2 : slist; + GtkListStore* slist_store = GUI_GET_LIST_STORE(list); + + model = gui_list_freeze(list); + for (i = 0; i < ST_NUM_SAMPLES(&xm->instruments[n]); i++) { + GtkTreeIter iter; + + if (!gui_list_get_iter(i, slist_store, &iter)) + return; /* Some bullshit happens :-/ */ + gtk_list_store_set(slist_store, &iter, 1, + xm->instruments[n].samples[i].utf_name, -1); + } + gui_list_thaw(list, model); } static void -slist_size_allocate (GtkCList *list) +modinfo_update_instrument_full(const gint n, const gboolean second) { - gtk_clist_set_column_width(list, 0, 30); - gtk_clist_set_column_width(list, 1, list->clist_window_width - 30 - 8 - 7); + GtkTreeIter iter; + GtkListStore* list_store = GUI_GET_LIST_STORE(second ? ilist2 : ilist); + + if (!gui_list_get_iter(n, list_store, &iter)) + return; /* Some bullshit happens :-/ */ + gtk_list_store_set(list_store, &iter, 1, xm->instruments[n].utf_name, + 2, st_instrument_num_samples(&xm->instruments[n]), -1); + + if (n == (second ? desti : curi)) + modinfo_update_all_samples(n, second); } static void -ilist_select (GtkCList *list, - gint row, - gint column) -{ - if(row == curi) - return; - curi = row; - gui_set_current_instrument(row + 1); +update_labels(struct tuner* t, + GtkWidget *label, + GtkWidget *mix_label, + const gint n, + const gint ins, + const gint smp) +{ + gchar *buf; + + buf = g_strdup_printf("%i", n); + gtk_label_set_text(GTK_LABEL(label), buf); + g_free(buf); + buf = g_strdup_printf(_("%sIns. %i, Smp. %i"), t->label_text, ins + 1, smp); + gtk_frame_set_label(GTK_FRAME(t->frame), buf); + g_free(buf); + buf = g_strdup_printf(_("I%i, S%i"), ins + 1, smp); + gtk_label_set_text(GTK_LABEL(mix_label), buf); + g_free(buf); } static void -slist_select (GtkCList *list, - gint row, - gint column) +ilist_select(GtkTreeSelection* sel) { - if(row == curs) - return; - curs = row; - gui_set_current_sample(row); + gint row = gui_list_get_selection_index(sel); + + if (row != -1 && row != curi) { + curi = row; + gui_set_current_instrument(row + 1); + update_labels(tuning, ins1_label, mix_label1, row + 1, curi, curs); + } } -void -modinfo_page_create (GtkNotebook *nb) +static void +slist_select(GtkTreeSelection* sel) { - GtkWidget *hbox, *thing, *vbox; - gchar *ititles[3] = { "n", _("Instrument Name"), _("#smpl") }; - gchar *stitles[2] = { "n", _("Sample Name") }; - static const char *freqlabels[] = { N_("Linear"), N_("Amiga"), NULL }; - char buf[5]; - gchar *insertbuf[3] = { buf, "", "0" }; - int i; + gint row = gui_list_get_selection_index(sel); - hbox = gtk_hbox_new(TRUE, 10); - gtk_container_border_width(GTK_CONTAINER(hbox), 10); - gtk_notebook_append_page(nb, hbox, gtk_label_new(_("Module Info"))); - gtk_widget_show(hbox); + if (row != -1 && row != curs) { + curs = row; + gui_set_current_sample(row); + update_labels(tuning, smp1_label, mix_label1, row, curi, curs); + } +} - ilist = gui_clist_in_scrolled_window(3, ititles, hbox); - gtk_clist_set_selection_mode(GTK_CLIST(ilist), GTK_SELECTION_BROWSE); - gtk_clist_column_titles_passive(GTK_CLIST(ilist)); - gtk_clist_set_column_justification(GTK_CLIST(ilist), 0, GTK_JUSTIFY_CENTER); - gtk_clist_set_column_justification(GTK_CLIST(ilist), 1, GTK_JUSTIFY_LEFT); - gtk_clist_set_column_justification(GTK_CLIST(ilist), 2, GTK_JUSTIFY_CENTER); - for(i = 1; i <= 128; i++) { - sprintf(buf, "%d", i); - gtk_clist_append(GTK_CLIST(ilist), insertbuf); - } - gtk_signal_connect_after(GTK_OBJECT(ilist), "size_allocate", - GTK_SIGNAL_FUNC(ilist_size_allocate), NULL); - gtk_signal_connect_after(GTK_OBJECT(ilist), "select_row", - GTK_SIGNAL_FUNC(ilist_select), NULL); +static void +ilist2_select(GtkTreeSelection* sel) +{ + gint row = gui_list_get_selection_index(sel); - vbox = gtk_vbox_new(FALSE, 2); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); - gtk_widget_show(vbox); + if (row != -1 && row != desti) { + desti = row; + modinfo_update_all_samples(row, TRUE); + update_labels(ref, ins2_label, mix_label2, row + 1, desti, dests); + } +} - slist = gui_clist_in_scrolled_window(2, stitles, vbox); - gtk_clist_set_selection_mode(GTK_CLIST(slist), GTK_SELECTION_BROWSE); - gtk_clist_column_titles_passive(GTK_CLIST(slist)); - gtk_clist_set_column_justification(GTK_CLIST(slist), 0, GTK_JUSTIFY_CENTER); - gtk_clist_set_column_justification(GTK_CLIST(slist), 1, GTK_JUSTIFY_LEFT); - for(i = 0; i < 16; i++) { - sprintf(buf, "%d", i); - gtk_clist_append(GTK_CLIST(slist), insertbuf); - } - gtk_signal_connect_after(GTK_OBJECT(slist), "size_allocate", - GTK_SIGNAL_FUNC(slist_size_allocate), NULL); - gtk_signal_connect_after(GTK_OBJECT(slist), "select_row", - GTK_SIGNAL_FUNC(slist_select), NULL); +static void +slist2_select(GtkTreeSelection* sel) +{ + gint row = gui_list_get_selection_index(sel); - hbox = gtk_hbox_new(FALSE, 4); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); - gtk_widget_show(hbox); + if (row != -1 && row != dests) { + dests = row; + update_labels(ref, smp2_label, mix_label2, row, desti, dests); + } +} - thing = gtk_label_new(_("Songname:")); - gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); - gtk_widget_show(thing); +static GtkWidget* +add_label(const gchar* title, + const gchar* value, + const GtkWidget* box) +{ + GtkWidget *box2, *thing, *frame; - gui_get_text_entry(20, songname_changed, &songname); - gtk_box_pack_start(GTK_BOX(hbox), songname, TRUE, TRUE, 0); - gtk_signal_connect_after(GTK_OBJECT(songname), "changed", - GTK_SIGNAL_FUNC(songname_changed), NULL); - gtk_widget_show(songname); + box2 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(box), box2, FALSE, FALSE, 0); - hbox = gtk_hbox_new(FALSE, 4); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); - gtk_widget_show(hbox); + thing = gtk_label_new(_(title)); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); - add_empty_hbox(hbox); - thing = make_labelled_radio_group_box(_("Frequencies:"), freqlabels, freqmode_w, freqmode_changed); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); - add_empty_hbox(hbox); - - ptmode_toggle = gtk_check_button_new_with_label(_("ProTracker Mode")); - gtk_box_pack_start(GTK_BOX(hbox), ptmode_toggle, FALSE, TRUE, 0); - gtk_widget_show(ptmode_toggle); - gtk_signal_connect (GTK_OBJECT(ptmode_toggle), "toggled", - GTK_SIGNAL_FUNC(ptmode_changed), NULL); + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); + gtk_box_pack_end(GTK_BOX(box2), frame, FALSE, FALSE, 0); + gtk_widget_show(frame); - add_empty_hbox(hbox); + thing = gtk_label_new(value); + gtk_misc_set_alignment(GTK_MISC(thing), 1.0, 0.5); + gtk_container_add(GTK_CONTAINER(frame), thing); + return thing; } -void -modinfo_delete_unused_instruments (void) +static void +exp_change(GtkExpander *expndr) { - int i; + is_tuning = gtk_expander_get_expanded(expndr); - for(i = 0; i < sizeof(xm->instruments) / sizeof(xm->instruments[0]); i++) { - if(!st_instrument_used_in_song(xm, i + 1)) { - st_clean_instrument(&xm->instruments[i], NULL); - xm_set_modified(1); - } + (is_tuning ? gtk_widget_show : gtk_widget_hide)(sw1); + (is_tuning ? gtk_widget_show : gtk_widget_hide)(sw2); + if (!is_tuning) { + modinfo_stop_cycling(); + gui_play_stop(); } +} - sample_editor_update(); - instrument_editor_update(); - modinfo_update_all(); +static void +modinfo_xcopy_ins(const gpointer data) +{ + if (curi != desti) { + gint action = GPOINTER_TO_INT(data); + STInstrument* src_ins = &xm->instruments[curi]; + STInstrument* dst_ins = &xm->instruments[desti]; + + /* It's simplier just to stop playing instead of performing some doubtful locks */ + gui_play_stop(); + + instrument_editor_xcopy_instruments(src_ins, dst_ins, action); + if (action) { + instrument_editor_update(FALSE); + sample_editor_update(); + modinfo_update_instrument(curi); + } + modinfo_update_instrument(desti); + } } -gboolean -modinfo_page_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval, - gboolean pressed) +static +void modinfo_update_sample_full(const gint ins, const gint smp, const gboolean second) { - int i; + GtkTreeIter iter; + GtkListStore* list_store = GUI_GET_LIST_STORE(second ? slist2 : slist); + + if (!gui_list_get_iter(smp, list_store, &iter)) + return; /* Some bullshit happens :-/ */ + gtk_list_store_set(list_store, &iter, 1, + xm->instruments[ins].samples[smp].utf_name, -1); +} + +/* Not a simple case. We have to back up both a sample and the + sample map of an instrument using one argument */ +struct Smp_n_MapBackup { + gint ins, smp; /* Destination instrument and sample */ + gint8 samplemap[96]; + STSample sample; + gint16 data[1]; +}; + +static struct Smp_n_MapBackup* +make_sample_copy_arg(const gint ins, const gint smp, const guint32 backup_size) +{ + struct Smp_n_MapBackup* arg; + STInstrument* src_ins = &xm->instruments[ins]; + STSample* src_smp = &src_ins->samples[smp]; + + arg = g_malloc(backup_size); + if (!arg) { + gui_oom_error(); + return NULL; + } - i = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); - if(i != -1 && KEYS_MEANING_TYPE(i) == KEYS_MEANING_NOTE) { - track_editor_do_the_note_key(i, pressed, keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); - return TRUE; + arg->ins = ins; + arg->smp = smp; + memcpy(arg->samplemap, src_ins->samplemap, sizeof(arg->samplemap)); + arg->sample = *src_smp; + if (src_smp->sample.length) + memcpy(arg->data, src_smp->sample.data, src_smp->sample.length * sizeof(arg->data[0])); + + return arg; +} + +static void sample_copy_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + struct Smp_n_MapBackup* bup = arg; + STInstrument* dst_ins = &xm->instruments[bup->ins]; + STSample* dst_smp = &dst_ins->samples[bup->smp]; + gint8* tmp_smap = alloca(sizeof(bup->samplemap)); + const gsize data_length = dst_smp->sample.length * sizeof(dst_smp->sample.data[0]); + gint16* tmp_data = NULL; + STSample tmp_smp; + GMutex tmp_lock; + + if (data_length) { + tmp_data = g_malloc(data_length); + if (!tmp_data) { + gui_oom_error(); + return; + } + memcpy(tmp_data, dst_smp->sample.data, data_length); } + tmp_smp = *dst_smp; + memcpy(tmp_smap, dst_ins->samplemap, sizeof(dst_ins->samplemap)); - return FALSE; + g_mutex_lock(&dst_smp->sample.lock); + tmp_lock = dst_smp->sample.lock; + if (dst_smp->sample.length && dst_smp->sample.data) + g_free(dst_smp->sample.data); + memcpy(dst_ins->samplemap, bup->samplemap, sizeof(dst_ins->samplemap)); + *dst_smp = bup->sample; + if (dst_smp->sample.length) { + dst_smp->sample.data = g_new(gint16, dst_smp->sample.length); + memcpy(dst_smp->sample.data, bup->data, dst_smp->sample.length * sizeof(bup->data[0])); + } else + dst_smp->sample.data = NULL; + dst_smp->sample.lock = tmp_lock; + g_mutex_unlock(&dst_smp->sample.lock); + + bup->sample = tmp_smp; + if (tmp_data) { + memcpy(bup->data, tmp_data, bup->sample.sample.length * sizeof(tmp_data[0])); + g_free(tmp_data); + } + memcpy(bup->samplemap, tmp_smap, sizeof(bup->samplemap)); + + modinfo_update_instrument(bup->ins); } -void -modinfo_update_instrument (int n) +static void +sample_xchg_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + sample_editor_xcopy_samples(arg, data, TRUE); + modinfo_update_instrument_full(ins - 1, FALSE); + modinfo_update_instrument_full(desti, TRUE); +} + +static void +modinfo_xcopy_smp(const gpointer data) { - int i; - GtkCList *list = GTK_CLIST(ilist); - char buf[5]; - - gtk_clist_set_text(list, n, 1, xm->instruments[n].name); - sprintf(buf, "%d", st_instrument_num_samples(&xm->instruments[n])); - gtk_clist_set_text(list, n, 2, buf); - - if(n == curi) { - for(i = 0; i < 16; i++) - modinfo_update_sample(i); + if (curi != desti || curs != dests) { + gint action = GPOINTER_TO_INT(data); + STInstrument* dest_ins = &xm->instruments[desti]; + STInstrument* src_ins = &xm->instruments[curi]; + STSample* dest_smp = &dest_ins->samples[dests]; + STSample* src_smp = &src_ins->samples[curs]; + + if (action) { + history_log_action(HISTORY_ACTION_POINTER_NOFREE, _("Sample exchanging"), + HISTORY_FLAG_LOG_ALL, sample_xchg_undo, src_smp, 0, dest_smp); + } else { + struct Smp_n_MapBackup* arg; + const guint32 data_length = MAX(src_smp->sample.length, dest_smp->sample.length); + const guint32 backup_size = sizeof(struct Smp_n_MapBackup) + + sizeof(arg->data[0]) * (data_length - 1); + + if (history_check_size(backup_size)) { + arg = make_sample_copy_arg(desti, dests, backup_size); + history_log_action(HISTORY_ACTION_POINTER, _("Sample overwriting"), + HISTORY_FLAG_LOG_ALL, sample_copy_undo, NULL, backup_size, arg); + } else if (!history_query_oversized(mainwindow)) + return; + } + + if (st_instrument_num_samples(dest_ins) == 0) { + st_clean_instrument_full(dest_ins, NULL, FALSE); + memset(dest_ins->samplemap, dests, sizeof(dest_ins->samplemap)); + } + if (action && st_instrument_num_samples(src_ins) == 0) { + st_clean_instrument_full(src_ins, NULL, FALSE); + memset(src_ins->samplemap, curs, sizeof(src_ins->samplemap)); + } + sample_editor_xcopy_samples(src_smp, dest_smp, action); + + if (action) { + sample_editor_update(); + instrument_editor_update(TRUE); + } + modinfo_update_instrument(desti); + if (curi == desti) + modinfo_update_sample_full(desti, dests, FALSE); } } -void -modinfo_update_sample (int n) +static void +put_labelled_spin_button(const gchar* title, GtkAdjustment* adj, GtkWidget* box) { - GtkCList *list = GTK_CLIST(slist); + GtkWidget *hbox, *thing; - gtk_clist_set_text(list, n, 1, xm->instruments[curi].samples[n].name); + hbox = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0); + thing = gtk_label_new(title); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + thing = extspinbutton_new(adj, 0, 0, TRUE); + gtk_box_pack_end(GTK_BOX(hbox), thing, FALSE, FALSE, 0); } -void -modinfo_update_all (void) +static void +note_changed(GtkSpinButton* spin, struct tuner* t) { - int i; - int m = xm_get_modified(); + t->note = gtk_spin_button_get_value_as_int(spin); + gtk_label_set_text(GTK_LABEL(t->note_label), tracker_get_note_name(t->note)); +} - for(i = 0; i < 128; i++) - modinfo_update_instrument(i); +static void +mix_prev_note_changed(GtkSpinButton* spin, GtkLabel* label) +{ + mix_prev_note = gtk_spin_button_get_value_as_int(spin); + gtk_label_set_text(label, tracker_get_note_name(mix_prev_note)); +} - gtk_entry_set_text(GTK_ENTRY(songname), xm->name); +static void +period_changed(GtkSpinButton* spin, struct tuner* t) +{ + t->period = lrint(gtk_spin_button_get_value(spin) * 1000.0); +} - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(ptmode_toggle), xm->flags & XM_FLAGS_IS_MOD); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(freqmode_w[xm->flags & XM_FLAGS_AMIGA_FREQ]), TRUE); - xm_set_modified(m); +static void +mode_changed(GtkComboBox* combo, struct tuner* t) +{ + gboolean active; + + t->mode = gtk_combo_box_get_active(combo); + + active = (t->mode == MODE_CYCLIC); + gtk_widget_set_sensitive(t->period_label, active); + gtk_widget_set_sensitive(t->period_spin, active); + gtk_widget_set_sensitive(t->period_label2, active); + + active = !(t->mode == MODE_KEYBOARD); /* == MODE_COUPLED also */ + gtk_widget_set_sensitive(t->play, active); + gtk_widget_set_sensitive(t->stop, active); + if (!t->is_ref) { + gtk_widget_set_sensitive(t->note2_label, active); + gtk_widget_set_sensitive(t->note_spin, active); + } } -void -modinfo_set_current_instrument (int n) +static gboolean +play_note(gpointer data) { - int i; + struct tuner* t = (struct tuner*)data; + + gint ins_num = t->is_ref ? desti : curi; + gint smp_num = t->is_ref ? dests : curs; + STSample* sample = &xm->instruments[ins_num].samples[smp_num]; + + if (!sample) { + t->timer = -1; + return FALSE; + } - g_return_if_fail(n >= 0 && n <= 127); - curi = n; - gtk_clist_select_row(GTK_CLIST(ilist), n, 1); - for(i = 0; i < 16; i++) - modinfo_update_sample(i); + gui_play_note_full(t->is_ref ? 0 : 1, t->note + 1, sample, 0, sample->sample.length, TRUE); + if (!t->is_ref && ref->mode == MODE_COUPLED) { + sample = &xm->instruments[desti].samples[dests]; + if (sample) + gui_play_note_full(0, ref->note + 1, sample, 0, sample->sample.length, FALSE); + } + + return TRUE; } -void -modinfo_set_current_sample (int n) +static void +play_clicked(struct tuner* t) { - g_return_if_fail(n >= 0 && n <= 15); - curs = n; - gtk_clist_select_row(GTK_CLIST(slist), n, 1); + switch (t->mode) { + case MODE_SINGLE: + play_note(t); + break; + case MODE_CYCLIC: + if (t->timer == -1) { + play_note(t); + t->timer = g_timeout_add(t->period, play_note, t); + } + break; + default: + break; + } } -void -modinfo_find_unused_pattern (void) +static void +stop_clicked(struct tuner* t) { - int n = st_find_first_unused_and_empty_pattern(xm); + if (t->timer != -1) { + g_source_remove(t->timer); + t->timer = -1; + } + gui_stop_note(t->is_ref ? 0 : 1); + if (!t->is_ref && ref->mode == MODE_COUPLED) + gui_stop_note(0); +} - printf("%d\n", n); +static struct tuner* +tuner_new(const gboolean is_ref, const gchar* label_text) +{ + struct tuner* t = g_new(struct tuner, 1); - if(n != -1) - gui_set_current_pattern(n); + t->note = 48; + t->mode = 0; + t->period = 1000; + t->is_ref = is_ref; + t->timer = -1; + t->label_text = label_text; + + t->frame = gtk_frame_new(""); + gtk_frame_set_shadow_type(GTK_FRAME(t->frame), GTK_SHADOW_IN); + + return t; } -void -modinfo_copy_to_unused_pattern (void) +static GtkWidget* +tuner_populate(struct tuner* t) { - int n = st_find_first_unused_and_empty_pattern(xm); - int c = gui_get_current_pattern(); + GtkWidget *vbox, *hbox, *thing; + GtkListStore* list_store; + GtkTreeIter iter; + gint i, width, height; - if(n != -1 && !st_is_empty_pattern(&xm->patterns[c])) { - gui_play_stop(); - st_copy_pattern(&xm->patterns[n], &xm->patterns[c]); - xm_set_modified(1); - gui_set_current_pattern(n); + vbox = gtk_vbox_new(TRUE, 2); + hbox = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + t->play = thing = gtk_button_new(); + gtk_container_add(GTK_CONTAINER(thing), gui_get_pixmap(GUI_PIXMAP_PLAY)); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + g_signal_connect_swapped(thing, "clicked", G_CALLBACK(play_clicked), t); + + t->stop = thing = gtk_button_new(); + gtk_container_add(GTK_CONTAINER(thing), gui_get_pixmap(GUI_PIXMAP_STOP)); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + g_signal_connect_swapped(thing, "clicked", G_CALLBACK(stop_clicked), t); + + t->period_label = thing = gtk_label_new(_("Period")); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + gtk_widget_set_sensitive(thing, FALSE); + t->period_label2 = thing = gtk_label_new(_("s")); + gtk_box_pack_end(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + gtk_widget_set_sensitive(thing, FALSE); + t->period_spin = thing = extspinbutton_new( + GTK_ADJUSTMENT(gtk_adjustment_new(1.0, 0.0, 10.0, 0.1, 1.0, 0.0)), + 0.0, 1, TRUE); + gtk_box_pack_end(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + gtk_widget_set_sensitive(thing, FALSE); + g_signal_connect(thing, "value-changed", G_CALLBACK(period_changed), t); + + hbox = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + thing = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + + thing = gtk_label_new(_("Mode")); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + + list_store = gtk_list_store_new(1, G_TYPE_STRING); + for (i = 0; i < MODE_LAST; i++) { + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, 0, _((t->is_ref ? mode2 : mode1)[i]), -1); } + thing = gui_combo_new(list_store); + gtk_combo_box_set_active(GTK_COMBO_BOX(thing), 0); + gtk_box_pack_end(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + g_signal_connect(thing, "changed", G_CALLBACK(mode_changed), t); + + hbox = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + thing = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + + t->note2_label = thing = gtk_label_new(_("Note")); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + + thing = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(thing), GTK_SHADOW_IN); + gtk_box_pack_end(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + t->note_label = gtk_label_new(""); + gui_get_pixel_size(t->note_label, " C#4 ", &width, &height); + gtk_widget_set_size_request(t->note_label, width, -1); + gtk_container_add(GTK_CONTAINER(thing), t->note_label); + + t->note_spin = thing = extspinbutton_new( + GTK_ADJUSTMENT(gtk_adjustment_new(48.0, 0.0, NUM_NOTES - 1, 1.0, 5.0, 0.0)), + 0.0, 0, TRUE); + gtk_box_pack_end(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + g_signal_connect(thing, "value-changed", G_CALLBACK(note_changed), t); + note_changed(GTK_SPIN_BUTTON(thing), t); + + return vbox; } -// Move unused patterns to the end of the pattern space -void -modinfo_pack_patterns (void) +static void +mixlevel_changed(GtkAdjustment* adj) { - int i, j, last, used; + mixlevel = gtk_adjustment_get_value(adj); +} - // Get number of last used pattern and number of used patterns - for(i = 0, last = 0, used = 0; i < sizeof(xm->patterns) / sizeof(xm->patterns[0]); i++) { - if(st_is_pattern_used_in_song(xm, i)) { - last = i; - used++; - } - } +static void +same_sample_warning(void) +{ + static GtkWidget* dialog = NULL; - // Put unused patterns to the end - for(i = 0; i < used; ) { - if(!st_is_pattern_used_in_song(xm, i)) { - for(j = i; j < last; j++) - st_exchange_patterns(xm, j, j + 1); - } else { - i++; - } - } + gui_warning_dialog(&dialog, _("Mixing a sample with itself is not a useful idea..."), FALSE); +} + +static void +mix_samples(const STSample* dst, + STSample* sample, + STSample* sample1, + const guint32 length1, + const guint32 length2, + gfloat mlevel) +{ + guint32 i; + STSample *rest; + + for (i = 0; i < MIN(length1, length2); i++) + dst->sample.data[i] = lrintf((float)sample->sample.data[i] * mlevel / 100.0 + + (float)sample1->sample.data[i] * (100.0 - mlevel) / 100.0); + + if (length1 < length2) { + mlevel = 100.0 - mlevel; + rest = sample1; + } else + rest = sample; - gui_playlist_initialize(); - xm_set_modified(1); + for (; i < MAX(length1, length2); i++) + dst->sample.data[i] = lrintf((float)rest->sample.data[i] * mlevel / 100.0); } -// Put patterns in playback order, move unused patterns to the end of the pattern space -void -modinfo_reorder_patterns (void) +static void +mix_clicked(void) { - modinfo_pack_patterns(); - xm_set_modified(1); + STSample* sample = &xm->instruments[curi].samples[curs]; + STSample* sample1 = &xm->instruments[desti].samples[dests]; + guint32 length1 = sample->sample.length, length2 = sample1->sample.length; + + /* Silently ignore empty samples */ + if ((!sample->sample.data) || (!sample1->sample.data)) + return; + if ((!length1) || (!length2)) + return; + + if (curi == desti && curs == dests) { + same_sample_warning(); + return; + } + + if (!sample_editor_check_and_log_sample(sample, N_("Mixing samples"), + HISTORY_FLAG_LOG_INS | HISTORY_FLAG_LOG_SMP | + HISTORY_SET_PAGE(NOTEBOOK_PAGE_SAMPLE_EDITOR), + MAX(length1, length2))) + return; + + g_mutex_lock(&sample->sample.lock); + if (length1 < length2) { + sample->sample.data = realloc(sample->sample.data, length2 * sizeof(sample->sample.data[0])); + sample->sample.length = length2; + } + mix_samples(sample, sample, sample1, length1, length2, mixlevel); + + g_mutex_unlock(&sample->sample.lock); + sample_editor_update(); } -// Clear patterns which are not in the playlist -void -modinfo_clear_unused_patterns (void) +static void +mixer_preview(void) { - int i; - - for(i = 0; i < sizeof(xm->patterns) / sizeof(xm->patterns[0]); i++) - if(!st_is_pattern_used_in_song(xm, i)) - st_clear_pattern(&xm->patterns[i]); + STSample* sample = &xm->instruments[curi].samples[curs]; + STSample* sample1 = &xm->instruments[desti].samples[dests]; + guint32 length1 = sample->sample.length, length2 = sample1->sample.length, length; + gpointer sampledata; + + /* Silently ignore empty samples */ + if ((!sample->sample.data) || (!sample1->sample.data)) + return; + if ((!length1) || (!length2)) + return; + + if (curi == desti && curs == dests) { + same_sample_warning(); + return; + } + + length = MAX(length1, length2); + /* Indeed, we need to update the sample data only if either a mixlevel or one of the samples + is changed (instrument/sample number or the sample data itself. But tracking the sample + data modifications (by editing, loading new samples / instrumens / module) is rather + complicated. So we update te sample data all the time though... */ + if (!prev_sample.sample.data) { + prev_sample.sample.data = malloc(length * sizeof(sample->sample.data[0])); + prev_alloc_length = length; + } else if (prev_alloc_length < length) { + g_free(prev_sample.sample.data); + prev_sample.sample.data = malloc(length * sizeof(sample->sample.data[0])); + prev_alloc_length = length; + } + + sampledata = prev_sample.sample.data; + memcpy(&prev_sample, sample, sizeof(prev_sample)); + prev_sample.sample.data = sampledata; + mix_samples(&prev_sample, sample, sample1, length1, length2, mixlevel); + prev_sample.sample.length = length; + + gui_play_stop(); + gui_play_note_full(0, mix_prev_note + 1, &prev_sample, 0, prev_sample.sample.length, FALSE); +} + +void modinfo_page_create(GtkNotebook* nb) +{ + GtkWidget *hbox, *thing, *vbox, *expndr, *hbox2, *vbox2, *hbox3, *alignment, *frame, *prev_note_spin; + GtkAdjustment *adj; + GtkListStore* list_store; + GtkTreeIter iter; + GtkTreeModel* model; + const gchar* ititles[3] = { "n", N_("Instrument Name"), N_("#smpl") }; + const gchar* stitles[2] = { "n", N_("Sample Name") }; + GType itypes[3] = { G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT }; + GType stypes[2] = { G_TYPE_INT, G_TYPE_STRING }; + const gfloat ialignments[3] = { 0.5, 0.0, 0.5 }; + const gfloat salignments[2] = { 0.5, 0.0 }; + const gboolean iexpands[3] = { FALSE, TRUE, FALSE }; + const gboolean sexpands[3] = { FALSE, TRUE }; + const gchar* freqlabels[] = { N_("Linear"), N_("Amiga") }; + gint i, width, height; + + vbox = gtk_vbox_new(FALSE, 4); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); + gtk_notebook_append_page(nb, vbox, gtk_label_new(_("Module Info"))); + gtk_widget_show(vbox); + + hbox = gtk_hbox_new(TRUE, 10); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + gtk_widget_show(hbox); + + /* Main instruments and samples lists */ + ilist = gui_list_in_scrolled_window_full(3, ititles, hbox, itypes, ialignments, + iexpands, GTK_SELECTION_BROWSE, TRUE, TRUE, &thing, + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_widget_show_all(thing); + list_store = GUI_GET_LIST_STORE(ilist); + model = gui_list_freeze(ilist); + for (i = 1; i <= ST_NUM_INSTRUMENTS(xm); i++) { + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, 0, i, 1, "", 2, 0, -1); + } + gui_list_thaw(ilist, model); + gui_list_handle_selection(ilist, G_CALLBACK(ilist_select), NULL); + + slist = gui_list_in_scrolled_window_full(2, stitles, hbox, stypes, salignments, + sexpands, GTK_SELECTION_BROWSE, TRUE, TRUE, &thing, + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_widget_show_all(thing); + list_store = GUI_GET_LIST_STORE(slist); + model = gui_list_freeze(slist); + for (i = 0; i < ST_NUM_SAMPLES(&xm->instruments[0]); i++) { + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, 0, i, 1, "", -1); + } + gui_list_thaw(slist, model); + gui_list_handle_selection(slist, G_CALLBACK(slist_select), NULL); + + /* Secondary instruments and samples lists for extended functions */ + ilist2 = gui_list_in_scrolled_window_full(3, ititles, hbox, itypes, ialignments, + iexpands, GTK_SELECTION_BROWSE, TRUE, TRUE, &sw1, + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_widget_show(ilist2); + list_store = GUI_GET_LIST_STORE(ilist2); + model = gui_list_freeze(ilist2); + for (i = 1; i <= ST_NUM_INSTRUMENTS(xm); i++) { + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, 0, i, 1, "", 2, 0, -1); + } + gui_list_thaw(ilist2, model); + gui_list_handle_selection(ilist2, G_CALLBACK(ilist2_select), NULL); + + slist2 = gui_list_in_scrolled_window_full(2, stitles, hbox, stypes, salignments, + sexpands, GTK_SELECTION_BROWSE, TRUE, TRUE, &sw2, + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_widget_show(slist2); + list_store = GUI_GET_LIST_STORE(slist2); + model = gui_list_freeze(slist2); + for (i = 0; i < ST_NUM_SAMPLES(&xm->instruments[0]); i++) { + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, 0, i, 1, "", -1); + } + gui_list_thaw(slist2, model); + gui_list_handle_selection(slist2, G_CALLBACK(slist2_select), NULL); + + /* Module metadata */ + hbox = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - tracker_redraw(tracker); - xm_set_modified(1); + thing = gtk_label_new(_("Songname:")); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); + + gui_get_text_entry(20, songname_changed, &songname); + gtk_box_pack_start(GTK_BOX(hbox), songname, TRUE, TRUE, 0); + + add_empty_hbox(hbox); + thing = make_labelled_radio_group_box(_("Frequencies:"), freqlabels, freqmode_w, freqmode_changed); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); + add_empty_hbox(hbox); + + ptmode_toggle = gtk_check_button_new_with_label(_("ProTracker Mode")); + gtk_box_pack_start(GTK_BOX(hbox), ptmode_toggle, FALSE, TRUE, 0); + gtk_widget_show(ptmode_toggle); + g_signal_connect(ptmode_toggle, "toggled", + G_CALLBACK(ptmode_changed), NULL); + + add_empty_hbox(hbox); + gtk_widget_show_all(hbox); + + thing = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, FALSE, 0); + gtk_widget_show(thing); + + /* Extended editor */ + expndr = gtk_expander_new(_("Extended Instrument/Sample Editor")); + gtk_expander_set_expanded(GTK_EXPANDER(expndr), FALSE); + gtk_box_pack_end(GTK_BOX(vbox), expndr, FALSE, FALSE, 0); + g_signal_connect(expndr, "notify::expanded", G_CALLBACK(exp_change), NULL); + hbox = gtk_hbox_new(FALSE, 4); + gtk_container_add(GTK_CONTAINER(expndr), hbox); + + vbox = gtk_vbox_new(TRUE, 2); + gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); + ins1_label = add_label(N_("Ins. 1"), "1", vbox); + gui_get_pixel_size(ins1_label, "000", &width, &height); + gtk_widget_set_size_request(ins1_label, width, -1); + smp1_label = add_label(N_("Smp. 1"), "0", vbox); + gtk_widget_set_size_request(smp1_label, width, -1); + ins2_label = add_label(N_("Ins. 2"), "1", vbox); + gtk_widget_set_size_request(ins2_label, width, -1); + smp2_label = add_label(N_("Smp. 2"), "0", vbox); + gtk_widget_set_size_request(smp2_label, width, -1); + + thing = gtk_vseparator_new(); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + + vbox = gtk_vbox_new(TRUE, 2); + gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); + + thing = gtk_button_new_with_label(_("I1 => I2")); + gtk_widget_set_tooltip_text(thing, _("Copy Instrument 1 to Instrument 2")); + gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, FALSE, 0); + g_signal_connect_swapped(thing, "clicked", G_CALLBACK(modinfo_xcopy_ins), GINT_TO_POINTER(0)); + + thing = gtk_button_new_with_label(_("I1 <=> I2")); + gtk_widget_set_tooltip_text(thing, _("Exchange Instruments 1 and 2")); + gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, FALSE, 0); + g_signal_connect_swapped(thing, "clicked", G_CALLBACK(modinfo_xcopy_ins), GINT_TO_POINTER(1)); + + thing = gtk_button_new_with_label(_("S1 => S2")); + gtk_widget_set_tooltip_text(thing, _("Copy Sample 1 to Sample 2")); + gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, FALSE, 0); + g_signal_connect_swapped(thing, "clicked", G_CALLBACK(modinfo_xcopy_smp), GINT_TO_POINTER(0)); + + thing = gtk_button_new_with_label(_("S1 <=> S2")); + gtk_widget_set_tooltip_text(thing, _("Exchange Samples 1 and 2")); + gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, FALSE, 0); + g_signal_connect_swapped(thing, "clicked", G_CALLBACK(modinfo_xcopy_smp), GINT_TO_POINTER(1)); + + thing = gtk_vseparator_new(); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + + /* Mixer */ + + vbox = gtk_vbox_new(FALSE, 2); + gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); + thing = gtk_label_new(_("Mixing balance")); + gtk_misc_set_alignment(GTK_MISC(thing), 0.5, 0.5); + gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, TRUE, 0); + + hbox2 = gtk_hbox_new(FALSE, 2); + gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, TRUE, 0); + vbox2 = gtk_vbox_new(FALSE, 2); + gtk_box_pack_start(GTK_BOX(hbox2), vbox2, TRUE, TRUE, 0); + hbox3 = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox2), hbox3, FALSE, TRUE, 0); + + mix_label1 = gtk_label_new(_("I1, S0")); + gtk_box_pack_start(GTK_BOX(hbox3), mix_label1, FALSE, TRUE, 0); + + mix_label2 = gtk_label_new(_("I1, S0")); + gtk_box_pack_end(GTK_BOX(hbox3), mix_label2, FALSE, TRUE, 0); + + adj = GTK_ADJUSTMENT(gtk_adjustment_new(50.0, 0.0, 100.0, 1.0, 10.0, 0.0)); + thing = gtk_hscale_new(adj); + gtk_scale_set_draw_value(GTK_SCALE(thing), FALSE); + gtk_box_pack_start(GTK_BOX(vbox2), thing, FALSE, TRUE, 0); + g_signal_connect(adj, "value-changed", G_CALLBACK(mixlevel_changed), NULL); + + alignment = gtk_alignment_new(0.5, 1.0, 0.0, 0.0); + gtk_box_pack_start(GTK_BOX(hbox2), alignment, FALSE, FALSE, 0); + hbox3 = gtk_hbox_new(FALSE, 2); + gtk_container_add(GTK_CONTAINER(alignment), hbox3); + + thing = extspinbutton_new(adj, 0.0, 0, TRUE); + gtk_box_pack_start(GTK_BOX(hbox3), thing, FALSE, FALSE, 0); + thing = gtk_label_new("%"); + gtk_box_pack_start(GTK_BOX(hbox3), thing, FALSE, FALSE, 0); + + hbox2 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_end(GTK_BOX(vbox), hbox2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Note")); + gtk_widget_set_tooltip_text(thing, _("Note to demonstrate result")); + gtk_box_pack_start(GTK_BOX(hbox2), thing, FALSE, FALSE, 0); + + prev_note_spin = extspinbutton_new( + GTK_ADJUSTMENT(gtk_adjustment_new(48.0, 0.0, NUM_NOTES - 1, 1.0, 5.0, 0.0)), + 0.0, 0, TRUE); + gtk_box_pack_start(GTK_BOX(hbox2), prev_note_spin, FALSE, FALSE, 0); + + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); + gtk_box_pack_start(GTK_BOX(hbox2), frame, FALSE, FALSE, 0); + thing = gtk_label_new(""); + gui_get_pixel_size(thing, " C#4 ", &width, &height); + gtk_widget_set_size_request(thing, width, -1); + gtk_container_add(GTK_CONTAINER(frame), thing); + g_signal_connect(prev_note_spin, "value-changed", G_CALLBACK(mix_prev_note_changed), thing); + mix_prev_note_changed(GTK_SPIN_BUTTON(prev_note_spin), GTK_LABEL(thing)); + + thing = gtk_button_new_with_label(_("Demo")); + gtk_widget_set_tooltip_text(thing, _("Play the mixed sample without module modification")); + gtk_box_pack_start(GTK_BOX(hbox2), thing, TRUE, TRUE, 0); + g_signal_connect(thing, "clicked", G_CALLBACK(mixer_preview), NULL); + + thing = gtk_button_new_with_label(_("Mix!")); + gtk_widget_set_tooltip_text(thing, + _("Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given balance ratio")); + gtk_box_pack_start(GTK_BOX(hbox2), thing, TRUE, TRUE, 0); + g_signal_connect(thing, "clicked", G_CALLBACK(mix_clicked), NULL); + + thing = gtk_vseparator_new(); + gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, FALSE, 0); + + /* Tuning facility, tuning sample */ + tuning = tuner_new(FALSE, _("Tuning: ")); + gtk_box_pack_start(GTK_BOX(hbox), tuning->frame, FALSE, FALSE, 0); + update_labels(tuning, ins1_label, mix_label1, 1, 0, 0); + + hbox2 = gtk_hbox_new(FALSE, 4); + gtk_container_set_border_width(GTK_CONTAINER(hbox2), 4); + gtk_container_add(GTK_CONTAINER(tuning->frame), hbox2); + vbox = gtk_vbox_new(TRUE, 2); + gtk_box_pack_start(GTK_BOX(hbox2), vbox, FALSE, FALSE, 0); + + thing = gtk_hscale_new(sample_editor_get_adjustment(SAMPLE_EDITOR_FINETUNE)); + gtk_scale_set_draw_value(GTK_SCALE(thing), FALSE); + gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, FALSE, 0); + put_labelled_spin_button(_("Finetune"), sample_editor_get_adjustment(SAMPLE_EDITOR_FINETUNE), vbox); + put_labelled_spin_button(_("RelNote"), sample_editor_get_adjustment(SAMPLE_EDITOR_RELNOTE), vbox); + + vbox = tuner_populate(tuning); + gtk_box_pack_start(GTK_BOX(hbox2), vbox, FALSE, FALSE, 0); + + /* Reference sample */ + ref = tuner_new(TRUE, _("Reference: ")); + gtk_box_pack_start(GTK_BOX(hbox), ref->frame, FALSE, FALSE, 0); + + vbox = tuner_populate(ref); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 4); + gtk_container_add(GTK_CONTAINER(ref->frame), vbox); + update_labels(ref, ins2_label, mix_label2, 1, 0, 0); + + gtk_widget_show_all(expndr); } -// Optimize -- clear everything unused +gboolean +modinfo_page_handle_keys(int shift, + int ctrl, + int alt, + guint32 keyval, + gboolean pressed) +{ + gint modifiers = ENCODE_MODIFIERS(shift, ctrl, alt); + gint i = keys_get_key_meaning(keyval, modifiers, -1); + gboolean handled = FALSE, samples_focused; + + if (i != -1 && KEYS_MEANING_TYPE(i) == KEYS_MEANING_NOTE) { + if (tuning->mode == MODE_KEYBOARD && is_tuning) { + STSample* sample = &xm->instruments[curi].samples[curs]; + + handled = gui_play_note_no_repeat(keyval, modifiers, pressed, + sample, 0, sample->sample.length, 1, FALSE, NULL, TRUE); + + /* handled means that it's a real, not fake, keypress and the note is correct */ + if (ref->mode == MODE_COUPLED && handled) { + if (pressed) { + sample = &xm->instruments[desti].samples[dests]; + if (sample) + gui_play_note_full(0, ref->note + 1, sample, 0, sample->sample.length, FALSE); + } else + gui_stop_note(0); + } + } else + track_editor_do_the_note_key(i, pressed, keyval, ENCODE_MODIFIERS(shift, ctrl, alt), TRUE); + return TRUE; + } -static void -modinfo_optimize_module_callback (gint reply, - gpointer data) + if (!pressed) + return FALSE; + + samples_focused = (GTK_WINDOW(mainwindow)->focus_widget == slist); + switch (keyval) { + case GDK_Tab: + case GDK_ISO_Left_Tab: + gtk_window_set_focus(GTK_WINDOW(mainwindow), samples_focused ? ilist : slist); + handled = TRUE; + break; + case GDK_Up: + if (samples_focused) + gui_offset_current_sample(shift ? -4 : -1); + else + gui_offset_current_instrument(shift ? -5 : -1); + handled = TRUE; + break; + case GDK_Down: + if (samples_focused) + gui_offset_current_sample(shift ? 4 : 1); + else + gui_offset_current_instrument(shift ? 5 : 1); + handled = TRUE; + break; + case GDK_Delete: + handled = instrument_editor_clear_current_instrument(); + break; + default: + break; + } + return handled; +} + +void modinfo_stop_cycling(void) { - if(reply == 0) { - modinfo_clear_unused_patterns(); - modinfo_delete_unused_instruments(); - modinfo_reorder_patterns(); - xm_set_modified(1); + if (tuning->timer != -1) { + g_source_remove(tuning->timer); + tuning->timer = -1; + } + if (ref->timer != -1) { + g_source_remove(ref->timer); + ref->timer = -1; } } void -modinfo_optimize_module (void) +modinfo_update_instrument(int n) { - char infbuf[512]; - int a, b, c, d, e; + modinfo_update_instrument_full(n, FALSE); + modinfo_update_instrument_full(n, TRUE); +} - d = sizeof(xm->patterns) / sizeof(xm->patterns[0]); - e = sizeof(xm->instruments) / sizeof(xm->instruments[0]); - for(a = 0, b = 0, c = 0; a < d; a++) { - if(!st_is_pattern_used_in_song(xm, a)) - b++; - - if(aflags & XM_FLAGS_AMIGA_FREQ) != 0 ? 1 : 0; + + for (i = 0; i < ST_NUM_INSTRUMENTS(xm); i++) + modinfo_update_instrument(i); + + gtk_entry_set_text(GTK_ENTRY(songname), xm->utf_name); + + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ptmode_toggle), xm->flags & XM_FLAGS_IS_MOD); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(freqmode_w[freq_index]), TRUE); +} + +void modinfo_set_current_instrument(int n) +{ + g_return_if_fail(n >= 0 && n < ST_NUM_INSTRUMENTS(xm)); + + gui_list_select(ilist, n, FALSE, 0.0); + modinfo_update_all_samples(n, FALSE); +} - gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), - infbuf, modinfo_optimize_module_callback, NULL); +void modinfo_set_current_sample(int n) +{ + g_return_if_fail(n >= 0 && n < ST_NUM_SAMPLES(&xm->instruments[0])); + gui_list_select(slist, n, FALSE, 0.0); } +gint modinfo_get_current_sample(void) +{ + return curs; +} diff -Nru soundtracker-0.6.8/app/module-info.h soundtracker-1.0.2~pre2/app/module-info.h --- soundtracker-0.6.8/app/module-info.h 2001-01-03 13:24:09.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/module-info.h 2020-09-27 15:16:53.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - module info page (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,40 +24,22 @@ #include -void modinfo_page_create (GtkNotebook *nb); +void modinfo_page_create(GtkNotebook* nb); -gboolean modinfo_page_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval, - gboolean pressed); +gboolean modinfo_page_handle_keys(int shift, + int ctrl, + int alt, + guint32 keyval, + gboolean pressed); + +void modinfo_update_instrument(int instr); +void modinfo_update_sample(int sample); +void modinfo_update_all(void); + +void modinfo_set_current_instrument(int); +void modinfo_set_current_sample(int); +gint modinfo_get_current_sample(void); -void modinfo_update_instrument (int instr); -void modinfo_update_sample (int sample); -void modinfo_update_all (void); - -void modinfo_set_current_instrument (int); -void modinfo_set_current_sample (int); - -void -modinfo_delete_unused_instruments (void); - -void -modinfo_find_unused_pattern (void); - -void -modinfo_copy_to_unused_pattern (void); - -void -modinfo_pack_patterns (void); - -void -modinfo_reorder_patterns (void); - -void -modinfo_clear_unused_patterns (void); - -void -modinfo_optimize_module (void); +void modinfo_stop_cycling(void); #endif /* _MODULE_INFO_H */ diff -Nru soundtracker-0.6.8/app/playlist.c soundtracker-1.0.2~pre2/app/playlist.c --- soundtracker-0.6.8/app/playlist.c 2006-01-15 15:17:50.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/playlist.c 2020-09-15 17:39:05.000000000 +0000 @@ -2,8 +2,7 @@ /* * The Real SoundTracker - gtk+ Playlist widget * - * Copyright (C) 1999-2003 Michael Krause - * Copyright (C) 2003 Yury Aliaev + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,17 +20,15 @@ */ #include +#include #include -#include #include #include -#include "i18n.h" - -#include "playlist.h" -#include "gui-subs.h" -#include "gui.h" #include "extspinbutton.h" +#include "gui-subs.h" +#include "marshal.h" +#include "playlist.h" enum { SIG_CURRENT_POSITION_CHANGED, @@ -44,107 +41,106 @@ static guint playlist_signals[LAST_SIGNAL] = { 0 }; static gboolean -label_clicked (GtkWidget *w, GdkEventButton *event, Playlist *p) +scroll_event(GtkWidget* w, GdkEventScroll* event, Playlist* p) +{ + int pos = p->current_position; + + switch (event->direction) { + case GDK_SCROLL_UP: + pos--; + if ((pos >= 0) && (pos) < p->length) + gtk_adjustment_set_value(p->adj_songpos, pos); + return TRUE; + case GDK_SCROLL_DOWN: + pos++; + if ((pos >= 0) && (pos) < p->length) + gtk_adjustment_set_value(p->adj_songpos, pos); + return TRUE; + default: + break; + } + return FALSE; +} + +static gboolean +label_clicked(GtkWidget* w, GdkEventButton* event, Playlist* p) { int i; int pos = p->current_position; - switch (event->button) { - case 1: - // find what label is clicked - for (i = -2; i <= 2; i++) { - if ((p->numlabels[i+2] == GTK_BIN(w)->child) || - (p->patlabels[i+2] == GTK_BIN(w)->child)) { - pos += i; - if ((pos >= 0) && (pos) < p->length) - gtk_adjustment_set_value(GTK_ADJUSTMENT(p->adj_songpos), pos); - return (TRUE); - } - } - break; - case 4: - pos--; - if ((pos >= 0) && (pos) < p->length) - gtk_adjustment_set_value(GTK_ADJUSTMENT(p->adj_songpos), pos); - return (TRUE); - case 5: - pos++; - if ((pos >= 0) && (pos) < p->length) - gtk_adjustment_set_value(GTK_ADJUSTMENT(p->adj_songpos), pos); - return (TRUE); - default: - break; + if (event->button == 1) { + // find what label is clicked + for (i = -2; i <= 2; i++) { + if ((p->numlabels[i + 2] == GTK_BIN(w)->child) || (p->patlabels[i + 2] == GTK_BIN(w)->child)) { + pos += i; + if ((pos >= 0) && (pos) < p->length) + gtk_adjustment_set_value(p->adj_songpos, pos); + return (TRUE); + } + } } return (FALSE); } static void -playlist_update_adjustment (GtkAdjustment *adj, - int min, - int max) -{ - gfloat p; - - p = adj->value; - if(p < min) - p = min; - else if(p > max) - p = max; - - adj->lower = min; - adj->upper = max + 1; - gtk_adjustment_set_value(adj, p); - gtk_adjustment_changed(adj); +playlist_update_adjustment(Playlist* p, + int min, + int max) +{ + gint newpos = CLAMP(p->current_position, min, max); + + g_object_freeze_notify(G_OBJECT(p->adj_songpos)); + gtk_adjustment_set_lower(p->adj_songpos, min); + gtk_adjustment_set_upper(p->adj_songpos, max + 1); + if (newpos != p->current_position) + gtk_adjustment_set_value(p->adj_songpos, newpos); + g_object_thaw_notify(G_OBJECT(p->adj_songpos)); } static void -playlist_draw_contents (Playlist *p) +playlist_draw_contents(Playlist* p) { gint i; - gchar *str; - GtkWidget *thing; + gchar* str; + GtkWidget* thing; g_assert(IS_PLAYLIST(p)); for (i = 0; i <= 4; i++) { - if ((i >= 2 - p->current_position) && - (i <= p->length - p->current_position + 1)) { - thing = p->numlabels[i]; - gtk_label_set_text(GTK_LABEL(thing), str = g_strdup_printf("%.3u", i - 2 + p->current_position)); - g_free(str); - if (i != 2) { - thing = p->patlabels[i]; - gtk_label_set_text(GTK_LABEL(thing), str = g_strdup_printf("%.3u", p->patterns[i - 2 + p->current_position])); - g_free(str); - } - } else { - thing = p->numlabels[i]; - gtk_label_set_text(GTK_LABEL(thing), ""); - thing = p->patlabels[i]; - gtk_label_set_text(GTK_LABEL(thing), ""); - } + if ((i >= 2 - p->current_position) && (i <= p->length - p->current_position + 1)) { + thing = p->numlabels[i]; + gtk_label_set_text(GTK_LABEL(thing), str = g_strdup_printf("%.3u", i - 2 + p->current_position)); + g_free(str); + if (i != 2) { + thing = p->patlabels[i]; + gtk_label_set_text(GTK_LABEL(thing), str = g_strdup_printf("%.3u", p->patterns[i - 2 + p->current_position])); + g_free(str); + } + } else { + thing = p->numlabels[i]; + gtk_label_set_text(GTK_LABEL(thing), ""); + thing = p->patlabels[i]; + gtk_label_set_text(GTK_LABEL(thing), ""); + } } } -void -playlist_freeze (Playlist *p) +void playlist_freeze(Playlist* p) { p->frozen++; } -void -playlist_thaw (Playlist *p) +void playlist_thaw(Playlist* p) { - if(p->frozen) - p->frozen--; - if(!p->frozen) - playlist_draw_contents(p); + if (p->frozen) + p->frozen--; + if (!p->frozen) + playlist_draw_contents(p); } -void -playlist_enable (Playlist *p, - gboolean enable) +void playlist_enable(Playlist* p, + gboolean enable) { gtk_widget_set_sensitive(p->spin_songlength, enable); gtk_widget_set_sensitive(p->spin_songpat, enable); @@ -155,338 +151,329 @@ gtk_widget_set_sensitive(p->dbutton, enable); } -void -playlist_freeze_signals (Playlist *p) +void playlist_freeze_signals(Playlist* p) { p->signals_disabled++; } -void -playlist_thaw_signals (Playlist *p) +void playlist_thaw_signals(Playlist* p) { g_assert(p->signals_disabled > 0); p->signals_disabled--; } -void -playlist_set_length (Playlist *p, int length) +void playlist_set_length(Playlist* p, int length) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_songlength), length); } -int -playlist_get_length (Playlist *p) +int playlist_get_length(Playlist* p) { return p->length; } -void -playlist_set_nth_pattern (Playlist *p, - int pos, - int pat) +void playlist_set_patterns(Playlist* p, guint8* pats) +{ + /* Sizeof to be at the safe side and don't think about the POT entry size */ + memcpy(p->patterns, pats, p->length * sizeof(p->patterns[0])); + + gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_songpat), + p->patterns[p->current_position]); + + if (!p->frozen) + playlist_draw_contents(p); +} + +void playlist_set_nth_pattern(Playlist* p, + int pos, + int pat) { g_assert(pos >= 0 && pos < p->length); g_assert(pat >= p->min_pattern && pat <= p->max_pattern); p->patterns[pos] = pat; - if(pos == p->current_position) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_songpat), pat); + if (pos == p->current_position) { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_songpat), pat); } - - if (!p->frozen) - playlist_draw_contents(p); } -int -playlist_get_nth_pattern (Playlist *p, - int pos) +int playlist_get_nth_pattern(Playlist* p, + int pos) { g_assert(pos >= 0 && pos < p->length); return p->patterns[pos]; } -void -playlist_set_position (Playlist *p, - int pos) +void playlist_set_position(Playlist* p, + int pos) { g_assert(pos >= 0 && pos < p->length); - gtk_adjustment_set_value(GTK_ADJUSTMENT(p->adj_songpos), pos); + gtk_adjustment_set_value(p->adj_songpos, pos); } -int -playlist_get_position (Playlist *p) +int playlist_get_position(Playlist* p) { return p->current_position; } -void -playlist_set_restart_position (Playlist *p, - int pos) +void playlist_set_restart_position(Playlist* p, + int pos) { g_assert(pos >= 0 && pos < p->length); gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_restartpos), pos); } -int -playlist_get_restart_position (Playlist *p) +int playlist_get_restart_position(Playlist* p) { return p->restart_position; } static void -playlist_songpos_changed (GtkAdjustment *adj, - Playlist *p) +playlist_songpos_changed(GtkAdjustment* adj, + Playlist* p) { int newpos; g_assert(IS_PLAYLIST(p)); - /* In gtk+-1.2.10, the GtkAdjustment loses this setting when the - upper value is changed by the program. */ - adj->page_increment = 5.0; - newpos = rint(adj->value); - - if(newpos == p->current_position) - return; + newpos = lrint(gtk_adjustment_get_value(adj)); + if (newpos == p->current_position) + return; p->current_position = newpos; gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_songpat), p->patterns[newpos]); if (!p->frozen) - playlist_draw_contents (p); + playlist_draw_contents(p); - if(!p->signals_disabled) - gtk_signal_emit(GTK_OBJECT(p), - playlist_signals[SIG_CURRENT_POSITION_CHANGED], - newpos); + if (!p->signals_disabled) + g_signal_emit(G_OBJECT(p), + playlist_signals[SIG_CURRENT_POSITION_CHANGED], + 0, newpos); } static void -playlist_songlength_changed (GtkSpinButton *spin, - Playlist *p) +playlist_songlength_changed(GtkSpinButton* spin, + Playlist* p) { int i, newlen; g_assert(IS_PLAYLIST(p)); newlen = gtk_spin_button_get_value_as_int(spin); - - if(newlen == p->length) - return; - - if(newlen > p->alloc_length) { - p->patterns = g_renew(int, p->patterns, newlen); - p->alloc_length = newlen; + + if (newlen == p->length) + return; + + if (newlen > p->alloc_length) { + p->patterns = g_renew(guint8, p->patterns, newlen); + p->alloc_length = newlen; } - if(newlen > p->length) { - for(i = p->length; i < newlen; i++) { - p->patterns[i] = p->patterns[p->length - 1]; - } + if (newlen > p->length) { + for (i = p->length; i < newlen; i++) { + p->patterns[i] = p->patterns[p->length - 1]; + } } p->length = newlen; - playlist_update_adjustment(GTK_ADJUSTMENT(p->adj_songpos), 0, newlen - 1); - gui_update_spin_adjustment(GTK_SPIN_BUTTON(p->spin_restartpos), 0, newlen - 1); - if(!p->frozen) - playlist_draw_contents(p); - if(!p->signals_disabled) - gtk_signal_emit(GTK_OBJECT(p), - playlist_signals[SIG_SONG_LENGTH_CHANGED], - p->length); + playlist_update_adjustment(p, 0, newlen - 1); + playlist_freeze_signals(p); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(p->spin_restartpos), 0, newlen - 1); + playlist_thaw_signals(p); + if (!p->frozen) + playlist_draw_contents(p); + if (!p->signals_disabled) + g_signal_emit(G_OBJECT(p), + playlist_signals[SIG_SONG_LENGTH_CHANGED], + 0, p->length, p->restart_position); } static void -playlist_songpat_changed (GtkSpinButton *spin, - Playlist *p) +playlist_songpat_changed(GtkSpinButton* spin, + Playlist* p) { int n = gtk_spin_button_get_value_as_int(spin); g_assert(IS_PLAYLIST(p)); - if(p->patterns[p->current_position] == n) - return; + if (p->patterns[p->current_position] == n) + return; p->patterns[p->current_position] = n; - if(!p->signals_disabled) - gtk_signal_emit(GTK_OBJECT(p), - playlist_signals[SIG_ENTRY_CHANGED], - p->current_position, n); + if (!p->signals_disabled) + g_signal_emit(G_OBJECT(p), + playlist_signals[SIG_ENTRY_CHANGED], + 0, p->current_position, n); } static void -playlist_restartpos_changed (GtkSpinButton *spin, - Playlist *p) +playlist_restartpos_changed(GtkSpinButton* spin, + Playlist* p) { int n = gtk_spin_button_get_value_as_int(spin); g_assert(IS_PLAYLIST(p)); - /* In gtk+-1.2.10, the GtkAdjustment loses this setting when the - upper value is changed by the program. */ - spin->adjustment->page_increment = 5.0; - - if(p->restart_position == n) - return; + if (p->restart_position == n) + return; p->restart_position = n; - if(!p->signals_disabled) - gtk_signal_emit(GTK_OBJECT(p), - playlist_signals[SIG_RESTART_POSITION_CHANGED], - n); + if (!p->signals_disabled) + g_signal_emit(G_OBJECT(p), + playlist_signals[SIG_RESTART_POSITION_CHANGED], + 0, n); } -void -playlist_insert_pattern (Playlist *p, - int pos, - int pat) +void playlist_insert_pattern(Playlist* p, + int pos, + int pat) { int current_songpos; g_assert(pos >= 0 && pos <= p->length); g_assert(pat >= p->min_pattern && pat <= p->max_pattern); - if(p->length == p->max_length) - return; + if (p->length == p->max_length) + return; - current_songpos = rint(GTK_ADJUSTMENT(p->adj_songpos)->value); + current_songpos = lrint(gtk_adjustment_get_value(p->adj_songpos)); playlist_freeze(p); playlist_freeze_signals(p); gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_songlength), p->length + 1); playlist_thaw_signals(p); - memmove(&p->patterns[pos + 1], &p->patterns[pos], (p->length - 1 - pos) * sizeof(int)); + memmove(&p->patterns[pos + 1], &p->patterns[pos], (p->length - 1 - pos) * sizeof(p->patterns[0])); p->patterns[pos] = pat; - if(pos == current_songpos) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_songpat), p->patterns[pos]); + if (pos == current_songpos) { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_songpat), p->patterns[pos]); } /* This also redraws the playlist */ playlist_thaw(p); - if(!p->signals_disabled) { - /* This also makes gui.c update the playlist copy which is + if (!p->signals_disabled) { + /* This also makes gui.c update the playlist copy which is * held in the global XM structure. */ - gtk_signal_emit(GTK_OBJECT(p), - playlist_signals[SIG_SONG_LENGTH_CHANGED], - p->length); + g_signal_emit(G_OBJECT(p), + playlist_signals[SIG_SONG_LENGTH_CHANGED], + 0, p->length, p->restart_position); } } static void -playlist_insert_clicked (GtkWidget *w, - Playlist *p) +playlist_delete_clicked(GtkWidget* w, + Playlist* p) { int pos; g_assert(IS_PLAYLIST(p)); - if(p->length == p->max_length) - return; + if (p->length == 1) + return; - pos = rint(GTK_ADJUSTMENT(p->adj_songpos)->value); + pos = lrint(gtk_adjustment_get_value(p->adj_songpos)); + memmove(&p->patterns[pos], &p->patterns[pos + 1], (p->length - pos - 1) * sizeof(p->patterns[0])); - playlist_insert_pattern(p, pos, gui_get_current_pattern()); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_songlength), p->length - 1); + + pos = lrint(gtk_adjustment_get_value(p->adj_songpos)); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_songpat), p->patterns[pos]); + if (!p->signals_disabled) + g_signal_emit(G_OBJECT(p), + playlist_signals[SIG_CURRENT_POSITION_CHANGED], + 0, pos); } static void -playlist_delete_clicked (GtkWidget *w, - Playlist *p) +is_realized(GtkWidget* algn, gpointer data) { - int pos; - - g_assert(IS_PLAYLIST(p)); - - if(p->length == 1) - return; - - pos = rint(GTK_ADJUSTMENT(p->adj_songpos)->value); - memmove(&p->patterns[pos], &p->patterns[pos + 1], (p->length - pos - 1) * sizeof(int)); + guint x, y; - gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_songlength), p->length - 1); - - pos = rint(GTK_ADJUSTMENT(p->adj_songpos)->value); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(p->spin_songpat), p->patterns[pos]); - if(!p->signals_disabled) - gtk_signal_emit(GTK_OBJECT(p), - playlist_signals[SIG_ENTRY_CHANGED], - pos, p->patterns[pos]); + gtk_widget_realize(algn); + x = (algn->allocation).width; + y = (algn->allocation).height; + gtk_widget_set_size_request(algn, x, y); } -GtkWidget * -playlist_new (void) -{ - Playlist *p; - GtkWidget *box, *thing, *thing1, *vbox, *frame, *box1, *evbox; - GtkObject *adj; +GtkWidget* +playlist_new(void) +{ + GtkWidget *box, *thing, *thing1, *vbox, *frame, *box1, *evbox, *al; + GtkAdjustment* adj; gint i; - p = gtk_type_new(playlist_get_type()); + Playlist *p = g_object_new(playlist_get_type(), NULL); GTK_BOX(p)->spacing = 2; GTK_BOX(p)->homogeneous = FALSE; vbox = GTK_WIDGET(p); - + box = gtk_hbox_new(FALSE, 2); thing = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(thing), GTK_SHADOW_IN); thing1 = gtk_table_new(2, 5, FALSE); - + /* pattern list view */ - + for (i = 0; i <= 4; i++) - if (i != 2) { - p->numlabels[i] = gtk_label_new (""); - gtk_widget_show(p->numlabels[i]); - evbox = gtk_event_box_new(); - gtk_container_add(GTK_CONTAINER(evbox), p->numlabels[i]); - gtk_widget_show(evbox); - gtk_signal_connect(GTK_OBJECT(evbox), "button_press_event", - GTK_SIGNAL_FUNC(label_clicked), - (gpointer)p); - box1 = gtk_hbox_new (FALSE, 0), - gtk_box_pack_start(GTK_BOX(box1), evbox, FALSE, FALSE, 3); - gtk_widget_show(box1); - gtk_table_attach_defaults (GTK_TABLE(thing1), box1, 0, 1, i, i+1); - - p->patlabels[i] = gtk_label_new(""); - gtk_widget_show(p->patlabels[i]); - evbox = gtk_event_box_new(); - gtk_container_add(GTK_CONTAINER(evbox), p->patlabels[i]); - gtk_widget_show(evbox); - gtk_signal_connect(GTK_OBJECT(evbox), "button_press_event", - GTK_SIGNAL_FUNC(label_clicked), - (gpointer)p); - box1 = gtk_hbox_new (FALSE, 0), - gtk_box_pack_start(GTK_BOX(box1), evbox, FALSE, FALSE, 0); - gtk_widget_show(box1); - gtk_table_attach_defaults(GTK_TABLE(thing1), box1, 1, 2, i, i+1); - } + if (i != 2) { + p->numlabels[i] = gtk_label_new(""); + gtk_widget_show(p->numlabels[i]); + evbox = gtk_event_box_new(); + gtk_container_add(GTK_CONTAINER(evbox), p->numlabels[i]); + gtk_widget_show(evbox); + g_signal_connect(evbox, "button_press_event", + G_CALLBACK(label_clicked), + (gpointer)p); + box1 = gtk_hbox_new(FALSE, 0), + gtk_box_pack_start(GTK_BOX(box1), evbox, FALSE, FALSE, 3); + gtk_widget_show(box1); + gtk_table_attach_defaults(GTK_TABLE(thing1), box1, 0, 1, i, i + 1); + + p->patlabels[i] = gtk_label_new(""); + gtk_widget_show(p->patlabels[i]); + evbox = gtk_event_box_new(); + gtk_container_add(GTK_CONTAINER(evbox), p->patlabels[i]); + gtk_widget_show(evbox); + g_signal_connect(evbox, "button_press_event", + G_CALLBACK(label_clicked), + (gpointer)p); + box1 = gtk_hbox_new(FALSE, 0), + gtk_box_pack_start(GTK_BOX(box1), evbox, FALSE, FALSE, 0); + gtk_widget_show(box1); + gtk_table_attach_defaults(GTK_TABLE(thing1), box1, 1, 2, i, i + 1); + } /* central label */ box1 = gtk_hbox_new(FALSE, 0); p->numlabels[2] = gtk_label_new(""); gtk_widget_show(p->numlabels[2]); - gtk_box_pack_start(GTK_BOX(box1), p->numlabels[2], TRUE, TRUE, 0); + /* a bit trick to keep label size constant */ + al = gtk_alignment_new(0.0, 0.5, 0.0, 0.0); + gtk_container_add(GTK_CONTAINER(al), p->numlabels[2]); + g_signal_connect(al, "realize", G_CALLBACK(is_realized), NULL); + gtk_widget_show(al); + gtk_box_pack_start(GTK_BOX(box1), al, TRUE, TRUE, 0); gtk_widget_show(box1); /* current pattern */ - adj = gtk_adjustment_new((p->patterns)[p->current_position], p->min_pattern, p->max_pattern, 1.0, 5.0, 0.0); - p->spin_songpat = extspinbutton_new(GTK_ADJUSTMENT (adj), 1.0, 0); + adj = GTK_ADJUSTMENT(gtk_adjustment_new((p->patterns)[p->current_position], p->min_pattern, p->max_pattern, 1.0, 5.0, 0.0)); + p->spin_songpat = extspinbutton_new(adj, 1.0, 0, TRUE); extspinbutton_disable_size_hack(EXTSPINBUTTON(p->spin_songpat)); gtk_widget_show(p->spin_songpat); - gtk_signal_connect(GTK_OBJECT(p->spin_songpat), "changed", - GTK_SIGNAL_FUNC(playlist_songpat_changed), - (gpointer)p); + g_signal_connect(p->spin_songpat, "value-changed", + G_CALLBACK(playlist_songpat_changed), + (gpointer)p); gtk_box_pack_end(GTK_BOX(box1), p->spin_songpat, TRUE, TRUE, 0); frame = gtk_frame_new(NULL); @@ -496,13 +483,16 @@ gtk_table_attach_defaults(GTK_TABLE(thing1), frame, 0, 2, 2, 3); gtk_widget_show(thing1); - + evbox = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER(evbox), thing1); gtk_widget_show(evbox); - gtk_signal_connect(GTK_OBJECT(evbox), "button_press_event", - GTK_SIGNAL_FUNC(label_clicked), - (gpointer)p); + g_signal_connect(evbox, "button_press_event", + G_CALLBACK(label_clicked), + (gpointer)p); + g_signal_connect(evbox, "scroll-event", + G_CALLBACK(scroll_event), + (gpointer)p); gtk_container_add(GTK_CONTAINER(thing), evbox); gtk_widget_show(thing); @@ -510,94 +500,79 @@ gtk_widget_show(box); /* scrollbar */ - p->adj_songpos = gtk_adjustment_new(p->current_position, 0.0, p->length, 1.0, 5.0, 1.0); - thing = gtk_vscrollbar_new(GTK_ADJUSTMENT(p->adj_songpos)); + p->adj_songpos = GTK_ADJUSTMENT(gtk_adjustment_new(p->current_position, 0.0, p->length, 1.0, 5.0, 1.0)); + thing = gtk_vscrollbar_new(p->adj_songpos); gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(box), thing, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(p->adj_songpos), "value_changed", - GTK_SIGNAL_FUNC(playlist_songpos_changed), - (gpointer)p); + g_signal_connect(p->adj_songpos, "value_changed", + G_CALLBACK(playlist_songpos_changed), + (gpointer)p); /* buttons */ - thing = gtk_vbox_new(FALSE, 0); + thing = gtk_vbox_new(TRUE, 0); thing1 = p->ibutton = gtk_button_new_with_label(_("Insert")); gtk_widget_show(thing1); - gui_hang_tooltip(thing1, _("Insert pattern that is being edited")); - gtk_box_pack_start(GTK_BOX(thing), thing1, FALSE, FALSE, 0); + gtk_widget_set_tooltip_text(thing1, _("Insert pattern that is being edited")); + gtk_box_pack_start(GTK_BOX(thing), thing1, TRUE, FALSE, 0); gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing1), "clicked", - GTK_SIGNAL_FUNC(playlist_insert_clicked), - (gpointer)p); thing1 = p->dbutton = gtk_button_new_with_label(_("Delete")); gtk_widget_show(thing1); - gui_hang_tooltip(thing1, _("Remove current playlist entry")); - gtk_box_pack_start(GTK_BOX(thing), thing1, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(thing1), "clicked", - GTK_SIGNAL_FUNC(playlist_delete_clicked), - (gpointer)p); - - add_empty_vbox(thing); + gtk_widget_set_tooltip_text(thing1, _("Remove current playlist entry")); + gtk_box_pack_start(GTK_BOX(thing), thing1, TRUE, FALSE, 0); + g_signal_connect(thing1, "clicked", + G_CALLBACK(playlist_delete_clicked), + (gpointer)p); thing1 = p->icbutton = gtk_button_new_with_label(_("Add + Cpy")); gtk_widget_show(thing1); - gui_hang_tooltip(thing1, _("Add a free pattern behind current position, and copy current pattern to it")); - gtk_box_pack_start(GTK_BOX(thing), thing1, FALSE, FALSE, 0); + gtk_widget_set_tooltip_text(thing1, _("Add a free pattern behind current position, and copy current pattern to it")); + gtk_box_pack_start(GTK_BOX(thing), thing1, TRUE, FALSE, 0); thing1 = p->ifbutton = gtk_button_new_with_label(_("Add Free")); gtk_widget_show(thing1); - gui_hang_tooltip(thing1, _("Add a free pattern behind current position")); - gtk_box_pack_start(GTK_BOX(thing), thing1, FALSE, FALSE, 0); + gtk_widget_set_tooltip_text(thing1, _("Add a free pattern behind current position")); + gtk_box_pack_start(GTK_BOX(thing), thing1, TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(box), thing, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), box, FALSE, FALSE, 0); - + /* box with songlen and repstart spinbuttons */ box = gtk_hbox_new(FALSE, 0); thing1 = gtk_label_new(_("Len")); gtk_widget_show(thing1); - gtk_box_pack_start(GTK_BOX(box), thing1, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(box), thing1, FALSE, FALSE, 0); gtk_widget_show(box); - thing1 = gtk_invisible_new(); - gtk_widget_set_usize(thing1, 2, 1); + adj = GTK_ADJUSTMENT(gtk_adjustment_new(p->length, 1.0, p->max_length, 1.0, 5.0, 0.0)); + thing1 = p->spin_songlength = extspinbutton_new(adj, 1.0, 0, TRUE); + extspinbutton_disable_size_hack(EXTSPINBUTTON(thing1)); gtk_widget_show(thing1); - gtk_box_pack_start(GTK_BOX(box), thing1, TRUE, TRUE, 0); + gtk_widget_set_tooltip_text(thing1, _("Song length")); + gtk_box_pack_start(GTK_BOX(box), thing1, FALSE, FALSE, 2); + g_signal_connect(thing1, "value-changed", + G_CALLBACK(playlist_songlength_changed), + (gpointer)p); - adj = gtk_adjustment_new(p->length, 1.0, p->max_length, 1.0, 5.0, 0.0); - thing1 = p->spin_songlength = extspinbutton_new(GTK_ADJUSTMENT(adj), 1.0, 0); + adj = GTK_ADJUSTMENT(gtk_adjustment_new(p->current_position, 0.0, p->length - 1, 1.0, 5.0, 0.0)); + thing1 = p->spin_restartpos = extspinbutton_new(adj, 1.0, 0, TRUE); extspinbutton_disable_size_hack(EXTSPINBUTTON(thing1)); gtk_widget_show(thing1); - gui_hang_tooltip(thing1, _("Song length")); - gtk_box_pack_start(GTK_BOX(box), thing1, TRUE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing1), "changed", - GTK_SIGNAL_FUNC(playlist_songlength_changed), - (gpointer)p); + gtk_widget_set_tooltip_text(thing1, _("Song restart position")); + gtk_box_pack_end(GTK_BOX(box), thing1, FALSE, FALSE, 0); + g_signal_connect(thing1, "value-changed", + G_CALLBACK(playlist_restartpos_changed), + (gpointer)p); thing1 = gtk_label_new(_("Rstrt")); gtk_widget_show(thing1); - gtk_box_pack_start(GTK_BOX(box), thing1, TRUE, TRUE, 0); - - thing1 = gtk_invisible_new(); - gtk_widget_set_usize(thing1, 2, 1); - gtk_widget_show(thing1); - gtk_box_pack_start(GTK_BOX(box), thing1, TRUE, TRUE, 0); - - adj = gtk_adjustment_new(p->current_position, 0.0, p->length - 1, 1.0, 5.0, 0.0); - thing1 = p->spin_restartpos = extspinbutton_new(GTK_ADJUSTMENT(adj), 1.0, 0); - extspinbutton_disable_size_hack(EXTSPINBUTTON(thing1)); - gtk_widget_show(thing1); - gui_hang_tooltip(thing1, _("Song restart position")); - gtk_box_pack_start(GTK_BOX(box), thing1, TRUE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing1), "changed", - GTK_SIGNAL_FUNC(playlist_restartpos_changed), - (gpointer)p); + gtk_box_pack_end(GTK_BOX(box), thing1, FALSE, FALSE, 2); gtk_box_pack_start(GTK_BOX(vbox), box, FALSE, FALSE, 0); - + playlist_draw_contents(p); return GTK_WIDGET(p); @@ -606,44 +581,39 @@ /* --- gtk+ object initialization crap --- */ static void -playlist_class_init (PlaylistClass *class) +playlist_class_init(PlaylistClass* class) { - GtkObjectClass *object_class; + GObjectClass* g_object_class; - object_class = (GtkObjectClass*) class; + g_object_class = (GObjectClass*)class; - playlist_signals[SIG_CURRENT_POSITION_CHANGED] = gtk_signal_new ("current_position_changed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET(PlaylistClass, current_position_changed), - gtk_marshal_NONE__INT, - GTK_TYPE_NONE, 1, - GTK_TYPE_INT); - playlist_signals[SIG_RESTART_POSITION_CHANGED] = gtk_signal_new ("restart_position_changed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET(PlaylistClass, restart_position_changed), - gtk_marshal_NONE__INT, - GTK_TYPE_NONE, 1, - GTK_TYPE_INT); - playlist_signals[SIG_SONG_LENGTH_CHANGED] = gtk_signal_new ("song_length_changed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET(PlaylistClass, song_length_changed), - gtk_marshal_NONE__INT, - GTK_TYPE_NONE, 1, - GTK_TYPE_INT); - playlist_signals[SIG_ENTRY_CHANGED] = gtk_signal_new ("entry_changed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET(PlaylistClass, entry_changed), - gtk_marshal_NONE__INT_INT, - GTK_TYPE_NONE, 2, - GTK_TYPE_INT, - GTK_TYPE_INT); + playlist_signals[SIG_CURRENT_POSITION_CHANGED] = g_signal_new("current_position_changed", + G_TYPE_FROM_CLASS(g_object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(PlaylistClass, current_position_changed), + NULL, NULL, + g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); + playlist_signals[SIG_RESTART_POSITION_CHANGED] = g_signal_new("restart_position_changed", + G_TYPE_FROM_CLASS(g_object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(PlaylistClass, restart_position_changed), + NULL, NULL, + g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); + playlist_signals[SIG_SONG_LENGTH_CHANGED] = g_signal_new("song_length_changed", + G_TYPE_FROM_CLASS(g_object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(PlaylistClass, song_length_changed), + NULL, NULL, + __marshal_VOID__INT_INT, G_TYPE_NONE, 2, + G_TYPE_INT, G_TYPE_INT); + playlist_signals[SIG_ENTRY_CHANGED] = g_signal_new("entry_changed", + G_TYPE_FROM_CLASS(g_object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(PlaylistClass, entry_changed), + NULL, NULL, + __marshal_VOID__INT_INT, G_TYPE_NONE, 2, + G_TYPE_INT, G_TYPE_INT); - gtk_object_class_add_signals(object_class, playlist_signals, LAST_SIGNAL); - class->current_position_changed = NULL; class->restart_position_changed = NULL; class->song_length_changed = NULL; @@ -651,7 +621,7 @@ } static void -playlist_init (Playlist *p) +playlist_init(Playlist* p) { // These presets should probably be configurable via the interface p->max_length = 256; @@ -661,32 +631,11 @@ // A reasonable default playlist p->length = 1; p->alloc_length = 1; - p->patterns = g_new0(int, p->alloc_length); + p->patterns = g_new0(guint8, p->alloc_length); p->current_position = 0; p->restart_position = 0; p->signals_disabled = 0; p->frozen = FALSE; } -guint -playlist_get_type() -{ - static guint playlist_type = 0; - - if (!playlist_type) { - GtkTypeInfo playlist_info = - { - "Playlist", - sizeof(Playlist), - sizeof(PlaylistClass), - (GtkClassInitFunc) playlist_class_init, - (GtkObjectInitFunc) playlist_init, - (GtkArgSetFunc) NULL, - (GtkArgGetFunc) NULL, - }; - - playlist_type = gtk_type_unique (gtk_vbox_get_type (), &playlist_info); - } - - return playlist_type; -} +G_DEFINE_TYPE(Playlist, playlist, GTK_TYPE_VBOX) diff -Nru soundtracker-0.6.8/app/playlist.h soundtracker-1.0.2~pre2/app/playlist.h --- soundtracker-0.6.8/app/playlist.h 2003-08-04 08:45:27.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/playlist.h 2020-09-15 17:39:05.000000000 +0000 @@ -2,8 +2,7 @@ /* * The Real SoundTracker - gtk+ Playlist widget (header) * - * Copyright (C) 1999-2001 Michael Krause - * Copyright (C) 2003 Yury Aliaev + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,21 +25,20 @@ #include #include -#define PLAYLIST(obj) GTK_CHECK_CAST (obj, playlist_get_type (), Playlist) -#define PLAYLIST_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, playlist_get_type (), PlaylistClass) -#define IS_PLAYLIST(obj) GTK_CHECK_TYPE (obj, playlist_get_type ()) +#define PLAYLIST(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, playlist_get_type(), Playlist)) +#define PLAYLIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass)(klass, playlist_get_type(), PlaylistClass)) +#define IS_PLAYLIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, playlist_get_type())) -typedef struct _Playlist Playlist; -typedef struct _PlaylistClass PlaylistClass; +typedef struct _Playlist Playlist; +typedef struct _PlaylistClass PlaylistClass; -struct _Playlist -{ +struct _Playlist { GtkVBox widget; - GtkObject *adj_songpos; + GtkAdjustment* adj_songpos; GtkWidget *spin_songlength, *spin_songpat, *spin_restartpos; GtkWidget *ibutton, *icbutton, *ifbutton, *dbutton; - + GtkWidget *numlabels[5], *patlabels[5]; int max_length; @@ -49,7 +47,7 @@ int length; int alloc_length; - int *patterns; + guint8* patterns; int current_position; int restart_position; @@ -57,38 +55,38 @@ int frozen; }; -struct _PlaylistClass -{ +struct _PlaylistClass { GtkVBoxClass parent_class; - void (*current_position_changed) (Playlist *p, int pos); - void (*restart_position_changed) (Playlist *p, int pos); - void (*song_length_changed) (Playlist *p, int length); - void (*entry_changed) (Playlist *p, int pos, int pat); + void (*current_position_changed)(Playlist* p, int pos); + void (*restart_position_changed)(Playlist* p, int pos); + void (*song_length_changed)(Playlist* p, int length); + void (*entry_changed)(Playlist* p, int pos, int pat); }; -guint playlist_get_type (void); -GtkWidget * playlist_new (void); +GType playlist_get_type(void) G_GNUC_CONST; +GtkWidget* playlist_new(void); -void playlist_freeze (Playlist *p); -void playlist_thaw (Playlist *p); -void playlist_enable (Playlist *p, gboolean enable); +void playlist_freeze(Playlist* p); +void playlist_thaw(Playlist* p); +void playlist_enable(Playlist* p, gboolean enable); -void playlist_freeze_signals (Playlist *p); -void playlist_thaw_signals (Playlist *p); +void playlist_freeze_signals(Playlist* p); +void playlist_thaw_signals(Playlist* p); -void playlist_set_length (Playlist *p, int length); -int playlist_get_length (Playlist *p); +void playlist_set_length(Playlist* p, int length); +int playlist_get_length(Playlist* p); -void playlist_set_nth_pattern (Playlist *p, int pos, int pat); -int playlist_get_nth_pattern (Playlist *p, int pos); +void playlist_set_patterns(Playlist* p, guint8* pats); +void playlist_set_nth_pattern(Playlist* p, int pos, int pat); +int playlist_get_nth_pattern(Playlist* p, int pos); -void playlist_set_position (Playlist *p, int pos); -int playlist_get_position (Playlist *p); +void playlist_set_position(Playlist* p, int pos); +int playlist_get_position(Playlist* p); -void playlist_set_restart_position (Playlist *p, int pos); -int playlist_get_restart_position (Playlist *p); +void playlist_set_restart_position(Playlist* p, int pos); +int playlist_get_restart_position(Playlist* p); -void playlist_insert_pattern (Playlist *p, int pos, int pat); +void playlist_insert_pattern(Playlist* p, int pos, int pat); #endif /* _PLAYLIST_H */ diff -Nru soundtracker-0.6.8/app/poll.c soundtracker-1.0.2~pre2/app/poll.c --- soundtracker-0.6.8/app/poll.c 2003-02-02 14:54:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/poll.c 2019-03-12 11:12:45.000000000 +0000 @@ -40,77 +40,73 @@ or -1 for errors. */ int -poll (fds, nfds, timeout) - struct pollfd *fds; - unsigned int nfds; - int timeout; + poll(fds, nfds, timeout) struct pollfd* fds; +unsigned int nfds; +int timeout; { - struct timeval tv; - fd_set rset, wset, xset; - struct pollfd *f; - int ready; - int maxfd = 0; - - FD_ZERO (&rset); - FD_ZERO (&wset); - FD_ZERO (&xset); - - for (f = fds; f < &fds[nfds]; ++f) - if (f->fd >= 0) - { - if (f->events & POLLIN) - FD_SET (f->fd, &rset); - if (f->events & POLLOUT) - FD_SET (f->fd, &wset); - if (f->events & POLLPRI) - FD_SET (f->fd, &xset); - if (f->fd > maxfd && (f->events & (POLLIN|POLLOUT|POLLPRI))) - maxfd = f->fd; - } - - tv.tv_sec = timeout / 1000; - tv.tv_usec = (timeout % 1000) * 1000; - - ready = select (maxfd + 1, &rset, &wset, &xset, - timeout == -1 ? NULL : &tv); - if (ready > 0) + struct timeval tv; + fd_set rset, wset, xset; + struct pollfd* f; + int ready; + int maxfd = 0; + + FD_ZERO(&rset); + FD_ZERO(&wset); + FD_ZERO(&xset); + for (f = fds; f < &fds[nfds]; ++f) - { - f->revents = 0; - if (f->fd >= 0) - { - if (FD_ISSET (f->fd, &rset)) - f->revents |= POLLIN; - if (FD_ISSET (f->fd, &wset)) - f->revents |= POLLOUT; - if (FD_ISSET (f->fd, &xset)) - f->revents |= POLLPRI; - } - } + if (f->fd >= 0) { + if (f->events & POLLIN) + FD_SET(f->fd, &rset); + if (f->events & POLLOUT) + FD_SET(f->fd, &wset); + if (f->events & POLLPRI) + FD_SET(f->fd, &xset); + if (f->fd > maxfd && (f->events & (POLLIN | POLLOUT | POLLPRI))) + maxfd = f->fd; + } + + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + + ready = select(maxfd + 1, &rset, &wset, &xset, + timeout == -1 ? NULL : &tv); + if (ready > 0) + for (f = fds; f < &fds[nfds]; ++f) { + f->revents = 0; + if (f->fd >= 0) { + if (FD_ISSET(f->fd, &rset)) + f->revents |= POLLIN; + if (FD_ISSET(f->fd, &wset)) + f->revents |= POLLOUT; + if (FD_ISSET(f->fd, &xset)) + f->revents |= POLLPRI; + } + } - return ready; + return ready; } #endif /* !defined(HAVE_SYS_POLL_H) */ #if defined(_WIN32) -#include #include +#include #include -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include "glib.h" -#include #include "poll.h" +#include typedef struct plst { - HANDLE pa, pb; - HANDLE ea, eb; - int cnt; - struct plst *next; + HANDLE pa, pb; + HANDLE ea, eb; + int cnt; + struct plst* next; } plst; -plst *pipelist=0; +plst* pipelist = 0; void pipe_init() { @@ -118,284 +114,248 @@ static void addpipe(HANDLE pa, HANDLE pb, HANDLE ea, HANDLE eb) { - plst *n; + plst* n; - n=g_new(plst, 1); - n->pa=pa; - n->pb=pb; - n->ea=ea; - n->eb=eb; - n->cnt=0; - n->next=pipelist; + n = g_new(plst, 1); + n->pa = pa; + n->pb = pb; + n->ea = ea; + n->eb = eb; + n->cnt = 0; + n->next = pipelist; - pipelist=n; + pipelist = n; } static void delpipe(HANDLE p) { - plst *t, *t2; + plst *t, *t2; - if ((pipelist->pa==p) || (pipelist->pb==p)) - { - g_free(pipelist); - pipelist=0; - return; - } - - for (t=pipelist; t->next; t=t->next) - if (((t2=t->next)->pa==p) || (t->next->pb==p)) - { - t->next=t2->next; - g_free(t2); - return; + if ((pipelist->pa == p) || (pipelist->pb == p)) { + g_free(pipelist); + pipelist = 0; + return; } + + for (t = pipelist; t->next; t = t->next) + if (((t2 = t->next)->pa == p) || (t->next->pb == p)) { + t->next = t2->next; + g_free(t2); + return; + } } -static plst *findpipe(HANDLE p) +static plst* findpipe(HANDLE p) { - plst *t; + plst* t; - for (t=pipelist; t; t=t->next) - if ((t->pa==p) || (t->pb==p)) - return t; + for (t = pipelist; t; t = t->next) + if ((t->pa == p) || (t->pb == p)) + return t; - return 0; + return 0; } -int pipe_open(int *bla) +int pipe_open(int* bla) { - int r; - HANDLE ea, eb; + int r; + HANDLE ea, eb; - r=CreatePipe((PHANDLE) bla, (PHANDLE) bla+1, 0, 0); + r = CreatePipe((PHANDLE)bla, (PHANDLE)bla + 1, 0, 0); - if (r) - { - ea=CreateEvent(0, 0, 1, 0); - eb=CreateEvent(0, 0, 1, 0); - addpipe((HANDLE) bla[0], (HANDLE) bla[1], ea, eb); - } + if (r) { + ea = CreateEvent(0, 0, 1, 0); + eb = CreateEvent(0, 0, 1, 0); + addpipe((HANDLE)bla[0], (HANDLE)bla[1], ea, eb); + } - return r; + return r; } -void pipe_close(int *bla) +void pipe_close(int* bla) { - plst *a; + plst* a; - if ((a=findpipe(bla[0]))) - { - CloseHandle(a->pa); - CloseHandle(a->pb); - CloseHandle(a->ea); - CloseHandle(a->eb); - } + if ((a = findpipe(bla[0]))) { + CloseHandle(a->pa); + CloseHandle(a->pb); + CloseHandle(a->ea); + CloseHandle(a->eb); + } } -int pipe_write(int fd, void *buf, int cnt) +int pipe_write(int fd, void* buf, int cnt) { - DWORD written; - plst *a; + DWORD written; + plst* a; - WriteFile((HANDLE) fd, buf, cnt, &written, 0); - if ((a=findpipe((HANDLE) fd))) - { - SetEvent(a->ea); - a->cnt+=cnt; - - if (!a->cnt) - { - ResetEvent(a->ea); - ResetEvent(a->eb); + WriteFile((HANDLE)fd, buf, cnt, &written, 0); + if ((a = findpipe((HANDLE)fd))) { + SetEvent(a->ea); + a->cnt += cnt; + + if (!a->cnt) { + ResetEvent(a->ea); + ResetEvent(a->eb); + } } - } - return written; + return written; } -int pipe_read(int fd, void *buf, int cnt) +int pipe_read(int fd, void* buf, int cnt) { - DWORD read; - plst *a; + DWORD read; + plst* a; - ReadFile((HANDLE) fd, buf, cnt, &read, 0); - if ((a=findpipe((HANDLE) fd))) - { - SetEvent(a->eb); - a->cnt-=cnt; - - if (!a->cnt) - { - ResetEvent(a->eb); + ReadFile((HANDLE)fd, buf, cnt, &read, 0); + if ((a = findpipe((HANDLE)fd))) { + SetEvent(a->eb); + a->cnt -= cnt; + + if (!a->cnt) { + ResetEvent(a->eb); + } } - } - return read; + return read; } int -poll (fds, nfds, timeout) - struct pollfd *fds; - unsigned int nfds; - int timeout; + poll(fds, nfds, timeout) struct pollfd* fds; +unsigned int nfds; +int timeout; { - HANDLE handles[16]; - GPollFD *f; - DWORD ready; - MSG msg; - UINT timer; - LONG prevcnt; - gint poll_msgs = -1; - gint nhandles = 0; - plst *a=0; - - for (f = fds; f < &fds[nfds]; ++f) - if (f->fd >= 0) - { - if (f->events & G_IO_IN) - if (f->fd == G_WIN32_MSG_HANDLE) - poll_msgs = f - fds; - else - { - /* g_print ("g_poll: waiting for handle %#x\n", f->fd); */ - if ((a=findpipe((HANDLE) f->fd))) - { - if (a->cnt) - { - SetEvent(a->ea); - SetEvent(a->eb); - } + HANDLE handles[16]; + GPollFD* f; + DWORD ready; + MSG msg; + UINT timer; + LONG prevcnt; + gint poll_msgs = -1; + gint nhandles = 0; + plst* a = 0; - handles[nhandles++]=a->ea; - handles[nhandles++]=a->eb; + for (f = fds; f < &fds[nfds]; ++f) + if (f->fd >= 0) { + if (f->events & G_IO_IN) + if (f->fd == G_WIN32_MSG_HANDLE) + poll_msgs = f - fds; + else { + /* g_print ("g_poll: waiting for handle %#x\n", f->fd); */ + if ((a = findpipe((HANDLE)f->fd))) { + if (a->cnt) { + SetEvent(a->ea); + SetEvent(a->eb); + } + + handles[nhandles++] = a->ea; + handles[nhandles++] = a->eb; + } else + handles[nhandles++] = (HANDLE)f->fd; + } } - else - handles[nhandles++] = (HANDLE) f->fd; - } - } - - if (timeout == -1) - timeout = INFINITE; - - if (poll_msgs >= 0) - { - /* Waiting for messages, and maybe events */ - if (nhandles == 0) - { - if (timeout == INFINITE) - { - /* Waiting just for messages, infinite timeout + + if (timeout == -1) + timeout = INFINITE; + + if (poll_msgs >= 0) { + /* Waiting for messages, and maybe events */ + if (nhandles == 0) { + if (timeout == INFINITE) { + /* Waiting just for messages, infinite timeout * -> Use PeekMessage, then WaitMessage */ - /* g_print ("WaitMessage, PeekMessage\n"); */ - if (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)) - ready = WAIT_OBJECT_0; - else if (!WaitMessage ()) - g_warning ("g_poll: WaitMessage failed"); - ready = WAIT_OBJECT_0; - } - else if (timeout == 0) - { - /* Waiting just for messages, zero timeout + /* g_print ("WaitMessage, PeekMessage\n"); */ + if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) + ready = WAIT_OBJECT_0; + else if (!WaitMessage()) + g_warning("g_poll: WaitMessage failed"); + ready = WAIT_OBJECT_0; + } else if (timeout == 0) { + /* Waiting just for messages, zero timeout * -> Use PeekMessage */ - /* g_print ("PeekMessage\n"); */ - if (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)) - ready = WAIT_OBJECT_0; - else - ready = WAIT_TIMEOUT; - } - else - { - /* Waiting just for messages, some timeout + /* g_print ("PeekMessage\n"); */ + if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) + ready = WAIT_OBJECT_0; + else + ready = WAIT_TIMEOUT; + } else { + /* Waiting just for messages, some timeout * -> First try PeekMessage, then set a timer, wait for message, * kill timer, use PeekMessage */ - /* g_print ("PeekMessage\n"); */ - if (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)) - ready = WAIT_OBJECT_0; - else if ((timer = SetTimer (NULL, 0, timeout, NULL)) == 0) - g_warning ("g_poll: SetTimer failed"); - else - { - /* g_print ("WaitMessage\n"); */ - WaitMessage (); - KillTimer (NULL, timer); - if (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)) - ready = WAIT_OBJECT_0; - else - ready = WAIT_TIMEOUT; - } - } - } - else - { - /* Wait for either message or event + /* g_print ("PeekMessage\n"); */ + if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) + ready = WAIT_OBJECT_0; + else if ((timer = SetTimer(NULL, 0, timeout, NULL)) == 0) + g_warning("g_poll: SetTimer failed"); + else { + /* g_print ("WaitMessage\n"); */ + WaitMessage(); + KillTimer(NULL, timer); + if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) + ready = WAIT_OBJECT_0; + else + ready = WAIT_TIMEOUT; + } + } + } else { + /* Wait for either message or event * -> Use MsgWaitForMultipleObjects */ - /* g_print ("MsgWaitForMultipleObjects(%d, %d)\n", nhandles, timeout); */ - ready = MsgWaitForMultipleObjects (nhandles, handles, FALSE, - timeout, QS_ALLINPUT); - /* g_print("=%d\n", ready); */ - if (ready == WAIT_FAILED) - printf("poll: MsgWaitForMultipleObjects failed (%s)\n", g_win32_error_message(GetLastError())); - } - } - else if (nhandles == 0) - { - /* Wait for nothing (huh?) */ - return 0; - } - else - { - /* Wait for just events + /* g_print ("MsgWaitForMultipleObjects(%d, %d)\n", nhandles, timeout); */ + ready = MsgWaitForMultipleObjects(nhandles, handles, FALSE, + timeout, QS_ALLINPUT); + /* g_print("=%d\n", ready); */ + if (ready == WAIT_FAILED) + printf("poll: MsgWaitForMultipleObjects failed (%s)\n", g_win32_error_message(GetLastError())); + } + } else if (nhandles == 0) { + /* Wait for nothing (huh?) */ + return 0; + } else { + /* Wait for just events * -> Use WaitForMultipleObjects */ - /* g_print ("WaitForMultipleObjects(%d, %d)\n", nhandles, timeout); */ + /* g_print ("WaitForMultipleObjects(%d, %d)\n", nhandles, timeout); */ - ready = WaitForMultipleObjects (nhandles, handles, FALSE, timeout); -/* g_print("=%d\n", ready);*/ - if (ready == WAIT_FAILED) - printf("poll: WaitForMultipleObjects failed (%s): %08x\n", g_win32_error_message(GetLastError()), handles[0]); + ready = WaitForMultipleObjects(nhandles, handles, FALSE, timeout); + /* g_print("=%d\n", ready);*/ + if (ready == WAIT_FAILED) + printf("poll: WaitForMultipleObjects failed (%s): %08x\n", g_win32_error_message(GetLastError()), handles[0]); } - for (f = fds; f < &fds[nfds]; ++f) - f->revents = 0; - - if (ready == WAIT_FAILED) - return -1; - else if (poll_msgs >= 0 && ready == WAIT_OBJECT_0 + nhandles) - { - fds[poll_msgs].revents |= G_IO_IN; - } - else if (ready >= WAIT_OBJECT_0 && ready < WAIT_OBJECT_0 + nhandles) for (f = fds; f < &fds[nfds]; ++f) - { - if (!(a=findpipe((HANDLE) f->fd))) - { - if ((f->events & POLLIN) - && f->fd == (gint) handles[ready - WAIT_OBJECT_0]) - { - f->revents |= G_IO_IN; - /* g_print ("event %#x\n", f->fd); */ - ResetEvent((HANDLE) f->fd); - } - } - else - { - if ((f->events & POLLIN) - && (a->ea == handles[ready - WAIT_OBJECT_0] - || a->eb == handles[ready - WAIT_OBJECT_0])) - { - f->revents |= G_IO_IN; + f->revents = 0; + + if (ready == WAIT_FAILED) + return -1; + else if (poll_msgs >= 0 && ready == WAIT_OBJECT_0 + nhandles) { + fds[poll_msgs].revents |= G_IO_IN; + } else if (ready >= WAIT_OBJECT_0 && ready < WAIT_OBJECT_0 + nhandles) + for (f = fds; f < &fds[nfds]; ++f) { + if (!(a = findpipe((HANDLE)f->fd))) { + if ((f->events & POLLIN) + && f->fd == (gint)handles[ready - WAIT_OBJECT_0]) { + f->revents |= G_IO_IN; + /* g_print ("event %#x\n", f->fd); */ + ResetEvent((HANDLE)f->fd); + } + } else { + if ((f->events & POLLIN) + && (a->ea == handles[ready - WAIT_OBJECT_0] + || a->eb == handles[ready - WAIT_OBJECT_0])) { + f->revents |= G_IO_IN; + } } } - } - - if (ready == WAIT_TIMEOUT) - return 0; - else - return 1; + + if (ready == WAIT_TIMEOUT) + return 0; + else + return 1; } #endif /* defined(_WIN32) */ diff -Nru soundtracker-0.6.8/app/poll.h soundtracker-1.0.2~pre2/app/poll.h --- soundtracker-0.6.8/app/poll.h 2003-02-02 14:54:55.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/poll.h 2019-03-12 11:12:45.000000000 +0000 @@ -31,21 +31,20 @@ #else /* Data structure describing a polling request. */ -struct pollfd - { - int fd; /* File descriptor to poll. */ - short int events; /* Types of events poller cares about. */ - short int revents; /* Types of events that actually occurred. */ - }; +struct pollfd { + int fd; /* File descriptor to poll. */ + short int events; /* Types of events poller cares about. */ + short int revents; /* Types of events that actually occurred. */ +}; /* Event types that can be polled for. These bits may be set in `events' to indicate the interesting event types; they will appear in `revents' to indicate the status of the file descriptor. */ -#define POLLIN 01 /* There is data to read. */ -#define POLLPRI 02 /* There is urgent data to read. */ -#define POLLOUT 04 /* Writing now will not block. */ +#define POLLIN 01 /* There is data to read. */ +#define POLLPRI 02 /* There is urgent data to read. */ +#define POLLOUT 04 /* Writing now will not block. */ -int poll(struct pollfd *ufds, unsigned int nfds, int timeout); +int poll(struct pollfd* ufds, unsigned int nfds, int timeout); #endif /* HAVE_POLL */ @@ -54,8 +53,8 @@ void pipe_init(); int pipe_open(); void pipe_close(); -int pipe_write(int fd, void *buf, int cnt); -int pipe_read(int fd, void *buf, int cnt); +int pipe_write(int fd, void* buf, int cnt); +int pipe_read(int fd, void* buf, int cnt); #endif /* defined(_WIN32) */ diff -Nru soundtracker-0.6.8/app/preferences.c soundtracker-1.0.2~pre2/app/preferences.c --- soundtracker-0.6.8/app/preferences.c 2002-02-09 15:59:52.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/preferences.c 2020-01-10 19:20:32.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Preferences handling * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * Copyright (C) 2000 Fabian Giesen * * This program is free software; you can redistribute it and/or modify @@ -24,229 +24,434 @@ #if !defined(_WIN32) -#include -#include -#include - #include -#include -#include -#include -#include -#include -#include +#include -#include "i18n.h" #include "gui-subs.h" #include "preferences.h" -#include "menubar.h" -#include "scope-group.h" -#include "track-editor.h" -#include "errors.h" -struct prefs_node { - gboolean writemode; - FILE *file; -}; - -char * -prefs_get_prefsdir (void) -{ - static char xdir[128]; - struct passwd *pw; - - pw = getpwuid(getuid()); - sprintf(xdir, "%s/.soundtracker", pw->pw_dir); - return(xdir); +static GKeyFile* kf = NULL; +static gchar* config; + +gchar* +prefs_get_prefsdir(void) +{ + static gchar xdir[PATH_MAX]; /* Assume that $HOME is sane */ + const gchar* homedir = g_getenv("HOME"); + + if (!homedir) + homedir = g_get_home_dir(); + sprintf(xdir, "%s/.soundtracker", homedir); + return (xdir); } static void -prefs_check_prefs_dir (void) +prefs_check_prefs_dir(void) { struct stat st; - char *dir = prefs_get_prefsdir(); + static GtkWidget* dialog = NULL; + gchar* dir = prefs_get_prefsdir(); - if(stat(dir, &st) < 0) { - mkdir(dir, S_IRUSR | S_IWUSR | S_IXUSR); - strcat(dir, "/tmp"); - mkdir(dir, S_IRUSR | S_IWUSR | S_IXUSR); - error_warning(_("A directory called '.soundtracker' has been created in your\nhome directory to store configuration files.\n")); + if (stat(dir, &st) < 0) { + mkdir(dir, S_IRUSR | S_IWUSR | S_IXUSR); + strcat(dir, "/tmp"); + mkdir(dir, S_IRUSR | S_IWUSR | S_IXUSR); + gui_info_dialog(&dialog, _("A directory called \".soundtracker\" has been created in your\nhome directory to store configuration files.\n"), FALSE); } } -const char * -prefs_get_filename (const char *name) +gchar* +prefs_get_filename(const gchar* name) { - static char buf[256]; + gchar* buf; prefs_check_prefs_dir(); - sprintf(buf, "%s/%s", prefs_get_prefsdir(), name); + buf = g_strdup_printf("%s/%s", prefs_get_prefsdir(), name); return buf; } -prefs_node * -prefs_open_read (const char *name) +void prefs_init(void) { - prefs_node *p = g_new(prefs_node, 1); - char buf[256]; + GError* error; + + config = prefs_get_filename("config"); + kf = g_key_file_new(); - if(p) { - p->writemode = FALSE; - sprintf(buf, "%s/%s", prefs_get_prefsdir(), name); - p->file = fopen(buf, "rb"); - if(p->file) { - return p; - } - g_free(p); + /* Don't panic, this loop will be executed no more than 2 times */ + while (1) { + error = NULL; + g_key_file_load_from_file(kf, config, G_KEY_FILE_NONE, &error); + if (error) { + if (error->code == G_FILE_ERROR_NOENT) { + gchar* buf = prefs_get_filename("settings"); /* maybe ST-gtk1 configs exist */ + + if (g_file_test(buf, G_FILE_TEST_EXISTS)) { + if (gui_ok_cancel_modal(NULL, _("Would you like to import settings from old version of Soundtracker?"))) { + GError* err = NULL; + + if (!g_spawn_command_line_sync("soundtracker_convert_config -f", NULL, NULL, NULL, &err)) { + gchar* buff = g_strdup_printf(_("An error is occured during converting config:\n%s"), error->message); + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, buff, TRUE); + g_free(buff); + g_error_free(err); + } else { + g_free(buf); + g_error_free(error); + continue; /* Try to load config after the conversion */ + } + } + } + g_free(buf); + } else { + gchar* buf = g_strdup_printf(_("An error is occured during reading or parsing config:\n%s"), error->message); + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, buf, TRUE); + g_free(buf); + } + g_error_free(error); + } + /* The second attempt is not required */ + break; } +} - return NULL; +void prefs_save(void) +{ + gchar* contents; + gsize length; + GError* error = NULL; + + g_assert(kf != NULL); + + contents = g_key_file_to_data(kf, &length, NULL); + g_file_set_contents(config, contents, length, &error); + if (error) { + gchar* buf = g_strdup_printf(_("An error is occured during saving config:\n%s"), error->message); + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, buf, TRUE); + g_free(buf); + g_error_free(error); + } + + g_free(contents); } -prefs_node * -prefs_open_write (const char *name) +void prefs_close(void) { - prefs_node *p = g_new(prefs_node, 1); - char buf[256]; + g_assert(kf != NULL); - if(p) { - p->writemode = TRUE; - prefs_check_prefs_dir(); - sprintf(buf, "%s/%s", prefs_get_prefsdir(), name); - p->file = fopen(buf, "wb"); - if(p->file) { - return p; - } - g_free(p); + g_key_file_free(kf); + kf = NULL; + g_free(config); +} + +gboolean +prefs_remove_key(const gchar* section, const gchar* key) +{ + g_assert(kf != NULL); + + return g_key_file_remove_key(kf, section, key, NULL); +} + +gchar** +prefs_get_str_array(const gchar* section, + const gchar* key, + gsize* length) +{ + gchar** ret; + GError* error = NULL; + + g_assert(kf != NULL); + + ret = g_key_file_get_string_list(kf, section, key, length, &error); + if (error) { + ret = NULL; + g_error_free(error); } - return NULL; + return ret; } -void -prefs_close (prefs_node *f) +gint* prefs_get_int_array(const gchar* section, + const gchar* key, + gsize* length) { - if(f) { - fclose(f->file); - g_free(f); + gint* ret; + GError* error = NULL; + + g_assert(kf != NULL); + + ret = g_key_file_get_integer_list(kf, section, key, length, &error); + if (error) { + ret = NULL; + g_error_free(error); } + + return ret; } -FILE * -prefs_get_file_pointer (prefs_node *p) +gboolean* +prefs_get_bool_array(const gchar* section, + const gchar* key, + gsize* length) { - if(p) { - return p->file; - } else { - return NULL; + gboolean* ret; + GError* error = NULL; + + g_assert(kf != NULL); + + ret = g_key_file_get_boolean_list(kf, section, key, length, &error); + if (error) { + g_error_free(error); + error = NULL; + /* Try to read values as integer list; maybe the config is from elder version */ + ret = (gboolean*)g_key_file_get_integer_list(kf, section, key, length, &error); + if (error) { + ret = NULL; + g_error_free(error); + } } + + return ret; } -static gboolean -prefs_get_line (FILE *f, - const char *key, - char *destbuf, - int destbuflen) -{ - int i; - char readbuf[1024], *p; - - for(i = 0; i < 2; i++) { - // Linear search - while(!feof(f)) { - fgets(readbuf, 1024, f); - p = strchr(readbuf, '='); - if(!p || p == readbuf || p[1] == 0) { - return 0; - } - p[-1] = 0; - if(!strcmp(readbuf, key)) { - strncpy(destbuf, p + 2, destbuflen - 1); - destbuf[destbuflen - 1] = 0; - - if(strlen(destbuf) > 0 && destbuf[strlen(destbuf) - 1] == '\n') - destbuf[strlen(destbuf) - 1] = 0; - - return 1; - } - } +gint prefs_get_int(const gchar* section, + const gchar* key, + const gint dflt) +{ + gint retval; - // Start from the beginning - fseek(f, 0, SEEK_SET); + GError* error = NULL; + + g_assert(kf != NULL); + + retval = g_key_file_get_integer(kf, section, key, &error); + if (error) { + retval = dflt; + g_error_free(error); } - return 0; + return retval; } -gboolean -prefs_get_int (prefs_node *pn, - const char *key, - int *dest) -{ - char buf[21]; - FILE *f; - - if(pn->writemode) - return FALSE; - f = pn->file; - - if(prefs_get_line(f, key, buf, 20)) { - buf[20] = 0; - *dest = atoi(buf); - return 1; +gdouble prefs_get_double(const gchar* section, + const gchar* key, + const gdouble dflt) +{ + gdouble retval; + + GError* error = NULL; + + g_assert(kf != NULL); + + retval = g_key_file_get_double(kf, section, key, &error); + if (error) { + retval = dflt; + g_error_free(error); } - return 0; + return retval; } gboolean -prefs_get_string (prefs_node *pn, - const char *key, - char *dest) -{ - char buf[128]; - FILE *f; - - if(pn->writemode) - return FALSE; - f = pn->file; - - if(prefs_get_line(f, key, buf, 127)) { - buf[127] = 0; - strcpy(dest, buf); - return 1; +prefs_get_bool(const gchar* section, + const gchar* key, + const gboolean dflt) +{ + gboolean retval; + + GError* error = NULL; + + g_assert(kf != NULL); + + retval = g_key_file_get_boolean(kf, section, key, &error); + if (error) { + g_error_free(error); + error = NULL; + /* Try to read values as integer; maybe the config is from elder version */ + retval = g_key_file_get_integer(kf, section, key, &error); + if (error) { + retval = dflt; + g_error_free(error); + } } - return 0; + return retval; } -void -prefs_put_int (prefs_node *pn, - const char *key, - int value) +GdkColor +prefs_get_color(const gchar* section, + const gchar* key, + const GdkColor dflt) { - FILE *f; + gint* retval; + GdkColor ret; + gsize size; + + GError* error = NULL; - if(!pn->writemode) - return; - f = pn->file; + g_assert(kf != NULL); - fprintf(f, "%s = %d\n", key, value); + retval = g_key_file_get_integer_list(kf, section, key, &size, &error); + if (error || size < 3) { + ret.red = dflt.red; + ret.green = dflt.green; + ret.blue = dflt.blue; + g_error_free(error); + } else { + ret.red = retval[0]; + ret.green = retval[1]; + ret.blue = retval[2]; + g_free(retval); + } + + ret.pixel = 0; + return ret; } +gchar* +prefs_get_string(const gchar* section, + const gchar* key, + const gchar* dflt) +{ + gchar* retval; + + GError* error = NULL; + + g_assert(kf != NULL); + + retval = g_key_file_get_string(kf, section, key, &error); + if (error) { + if (dflt) + retval = g_strdup(dflt); + else + retval = NULL; + + g_error_free(error); + } + + return retval; +} + +gsize prefs_get_pairs(const gchar* section, + gchar*** keys, + gchar*** values) +{ + gsize lgth; + guint i; + GError* error = NULL; + gchar **ks, **vs; + + g_assert(kf != NULL); + + ks = g_key_file_get_keys(kf, section, &lgth, &error); + if (error) { + g_error_free(error); + return 0; + } + + vs = g_new0(gchar*, lgth + 1); /* +1 for terminating NULL */ + + for (i = 0; i < lgth; i++) { + vs[i] = g_key_file_get_string(kf, section, ks[i], &error); + if (error) { + g_strfreev(ks); + g_strfreev(vs); + g_error_free(error); + return 0; + } + } + + *keys = ks; + *values = vs; + return lgth; +} + +void prefs_put_int(const gchar* section, + const gchar* key, + const gint value) +{ + g_assert(kf != NULL); + + g_key_file_set_integer(kf, section, key, value); +} + +void prefs_put_double(const gchar* section, + const gchar* key, + const gdouble value) +{ + g_assert(kf != NULL); + + g_key_file_set_double(kf, section, key, value); +} + +void prefs_put_bool(const gchar* section, + const gchar* key, + const gboolean value) +{ + g_assert(kf != NULL); + + g_key_file_set_boolean(kf, section, key, value); +} + +void prefs_put_color(const gchar* section, + const gchar* key, + const GdkColor value) +{ + gint val[3]; + + g_assert(kf != NULL); + + val[0] = value.red; + val[1] = value.green; + val[2] = value.blue; + + g_key_file_set_integer_list(kf, section, key, val, 3); +} + +void prefs_put_string(const gchar* section, + const gchar* key, + const gchar* value) +{ + g_assert(kf != NULL); + + g_key_file_set_string(kf, section, key, value); +} +/* void -prefs_put_string (prefs_node *pn, - const char *key, - const char *value) +prefs_put_str_array (const gchar *section, + const gchar *key, + const gchar * const *value, + gsize length) +{ + g_assert(kf != NULL); + + g_key_file_set_string_list(kf, section, key, value, length); +} +*/ +void prefs_put_int_array(const gchar* section, + const gchar* key, + gint* value, + gsize length) { - FILE *f; + g_assert(kf != NULL); + + g_key_file_set_integer_list(kf, section, key, value, length); +} - if(!pn->writemode) - return; - f = pn->file; +void prefs_put_bool_array(const gchar* section, + const gchar* key, + gboolean* value, + gsize length) +{ + g_assert(kf != NULL); - fprintf(f, "%s = %s\n", key, value); + g_key_file_set_boolean_list(kf, section, key, value, length); } #else /* defined(_WIN32) */ @@ -263,44 +468,40 @@ */ - +#include #include -#include #include +#include #include #include -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include -#include "i18n.h" +#include "errors.h" #include "gui-subs.h" #include "preferences.h" -#include "menubar.h" #include "scope-group.h" #include "track-editor.h" -#include "errors.h" -void * -prefs_open_read (const char *name) +void* prefs_open_read(const char* name) { char buf[256]; HKEY hk; sprintf(buf, "Software/Soundtracker/Soundtracker/%s", name); - while(strchr(buf, '/')) - *strchr(buf, '/')='\\'; + while (strchr(buf, '/')) + *strchr(buf, '/') = '\\'; - if(!RegOpenKeyEx(HKEY_LOCAL_MACHINE, buf, 0, KEY_ALL_ACCESS, &hk)) - hk=0; + if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE, buf, 0, KEY_ALL_ACCESS, &hk)) + hk = 0; - return (void *) hk; + return (void*)hk; } -void * -prefs_open_write (const char *name) +void* prefs_open_write(const char* name) { char buf[256]; HKEY hk; @@ -308,75 +509,69 @@ sprintf(buf, "Software/Soundtracker/Soundtracker/%s", name); - while(strchr(buf, '/')) - *strchr(buf, '/')='\\'; + while (strchr(buf, '/')) + *strchr(buf, '/') = '\\'; if (!RegCreateKeyEx(HKEY_LOCAL_MACHINE, buf, 0, 0, 0, KEY_ALL_ACCESS, 0, &hk, &bla)) - hk=0; + hk = 0; - return (void *) hk; + return (void*)hk; } -void -prefs_close (void *node) +void prefs_close(void* node) { HKEY hk; - hk=(HKEY) node; + hk = (HKEY)node; RegFlushKey(hk); RegCloseKey(hk); } static int -prefs_query_reg (HKEY hk, - const char *key, - char **buf, - DWORD *size, - DWORD *type) -{ - if(RegQueryValueEx(hk, key, 0, type, 0, size)==ERROR_SUCCESS) - { - *buf=(char *) malloc(*size+1); +prefs_query_reg(HKEY hk, + const char* key, + char** buf, + DWORD* size, + DWORD* type) +{ + if (RegQueryValueEx(hk, key, 0, type, 0, size) == ERROR_SUCCESS) { + *buf = (char*)malloc(*size + 1); - if(RegQueryValueEx(hk, key, 0, type, *buf, size)==ERROR_SUCCESS) + if (RegQueryValueEx(hk, key, 0, type, *buf, size) == ERROR_SUCCESS) return 1; - else - { + else { free(*buf); return 0; } - } - else + } else return 0; } static void -prefs_set_reg (HKEY hk, - const char *key, - char *buf, - DWORD size, - DWORD type) +prefs_set_reg(HKEY hk, + const char* key, + char* buf, + DWORD size, + DWORD type) { RegSetValueEx(hk, key, 0, type, buf, size); } gboolean -prefs_get_int (void *f, - const char *key, - int *dest) +prefs_get_int(void* f, + const char* key, + int* dest) { - char *buf; + char* buf; DWORD sz, type; HKEY hk; - hk=(HKEY) f; + hk = (HKEY)f; - if(prefs_query_reg(hk, key, &buf, &sz, &type)) - { - if (type==REG_DWORD) - { - *dest=*((DWORD *) buf); + if (prefs_query_reg(hk, key, &buf, &sz, &type)) { + if (type == REG_DWORD) { + *dest = *((DWORD*)buf); free(buf); return 1; } @@ -386,21 +581,19 @@ } gboolean -prefs_get_string (void *f, - const char *key, - char *dest) +prefs_get_string(void* f, + const char* key, + char* dest) { - char *buf; + char* buf; DWORD sz, type; HKEY hk; - hk=(HKEY) f; + hk = (HKEY)f; - if(prefs_query_reg(hk, key, &buf, &sz, &type)) - { - if (type==REG_SZ) - { - buf[127]=0; + if (prefs_query_reg(hk, key, &buf, &sz, &type)) { + if (type == REG_SZ) { + buf[127] = 0; strcpy(dest, buf); free(buf); return 1; @@ -410,20 +603,18 @@ return 0; } -void -prefs_put_int (void *f, - const char *key, - int value) +void prefs_put_int(void* f, + const char* key, + int value) { - prefs_set_reg((HKEY) f, key, &value, 4, REG_DWORD); + prefs_set_reg((HKEY)f, key, &value, 4, REG_DWORD); } -void -prefs_put_string (void *f, - const char *key, - const char *value) +void prefs_put_string(void* f, + const char* key, + const char* value) { - prefs_set_reg((HKEY) f, key, value, strlen(value+1), REG_SZ); + prefs_set_reg((HKEY)f, key, value, strlen(value + 1), REG_SZ); } #endif /* defined(_WIN32) */ diff -Nru soundtracker-0.6.8/app/preferences.h soundtracker-1.0.2~pre2/app/preferences.h --- soundtracker-0.6.8/app/preferences.h 2002-02-09 15:59:52.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/preferences.h 2020-01-10 19:20:32.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Preferences handling (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,42 +22,79 @@ #ifndef _ST_PREFERENCES_H #define _ST_PREFERENCES_H -#include +#include +#include -#include - -void prefs_page_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval); - -int prefs_fragsize_log2 (int fragsize); - -typedef struct prefs_node prefs_node; - -prefs_node * prefs_open_read (const char *name); -prefs_node * prefs_open_write (const char *name); -void prefs_close (prefs_node *f); - -// Use the following function if you need direct access to the preferences file -// (only directly after opening) -FILE * prefs_get_file_pointer (prefs_node *p); +void prefs_init(void); +void prefs_save(void); +void prefs_close(void); // Returns the file location of a configuration node -char * prefs_get_prefsdir (void); -const char * prefs_get_filename (const char *name); +gchar* prefs_get_prefsdir(void); +gchar* prefs_get_filename(const gchar* name); -void prefs_put_int (prefs_node *f, - const char *key, - int value); -void prefs_put_string (prefs_node *f, - const char *key, - const char *value); -gboolean prefs_get_int (prefs_node *f, - const char *key, - int *dest); -gboolean prefs_get_string (prefs_node *f, - const char *key, - char *dest); +gboolean +prefs_remove_key(const gchar* section, + const gchar* key); + +void prefs_put_int(const gchar* section, + const gchar* key, + const gint value); +void prefs_put_double(const gchar* section, + const gchar* key, + const gdouble value); +void prefs_put_bool(const gchar* section, + const gchar* key, + const gboolean value); +void prefs_put_color(const gchar* section, + const gchar* key, + const GdkColor value); +void prefs_put_string(const gchar* section, + const gchar* key, + const gchar* value); +/* Currently is not needed +void prefs_put_str_array (const gchar *section, + const gchar *key, + const gchar * const *value, + gsize length); +*/ +void prefs_put_int_array(const gchar* section, + const gchar* key, + gint* value, + gsize length); +void prefs_put_bool_array(const gchar* section, + const gchar* key, + gboolean* value, + gsize length); +gint prefs_get_int(const gchar* section, + const gchar* key, + const gint deflt); +gdouble prefs_get_double(const gchar* section, + const gchar* key, + const gdouble deflt); +gboolean prefs_get_bool(const gchar* section, + const gchar* key, + const gboolean deflt); +GdkColor prefs_get_color(const gchar* section, + const gchar* key, + const GdkColor deflt); +gchar* prefs_get_string(const gchar* section, + const gchar* key, + const gchar* deflt); + +/* No default value, return NULL on failure */ +gchar** prefs_get_str_array(const gchar* section, + const gchar* key, + gsize* length); +gint* prefs_get_int_array(const gchar* section, + const gchar* key, + gsize* length); +gboolean* prefs_get_bool_array(const gchar* section, + const gchar* key, + gsize* length); +/* No default value, return 0 on failure */ +gsize prefs_get_pairs(const gchar* section, + gchar*** keys, + gchar*** values); #endif /* _ST_PREFERENCES_H */ diff -Nru soundtracker-0.6.8/app/recode.c soundtracker-1.0.2~pre2/app/recode.c --- soundtracker-0.6.8/app/recode.c 2001-01-03 13:24:09.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/recode.c 2020-01-10 18:46:47.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - DOS Charset recoder * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * The tables have been taken from recode-3.4.1/ibmpc.c: * Copyright (C) 1990, 1993, 1994 Free Software Foundation, Inc. @@ -23,179 +23,125 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include +#include #include "recode.h" +#include "st-subs.h" -static unsigned char ibmpc_convert_rulers[48] = - { - '#', /* 176 */ - '#', /* 177 */ - '#', /* 178 */ - '|', /* 179 */ - '+', /* 180 */ - '|', /* 181 */ - '+', /* 182 */ - '.', /* 183 */ - '.', /* 184 */ - '|', /* 185 */ - '|', /* 186 */ - '.', /* 187 */ - '\'', /* 188 */ - '\'', /* 189 */ - '\'', /* 190 */ - '.', /* 191 */ - '`', /* 192 */ - '+', /* 193 */ - '+', /* 194 */ - '+', /* 195 */ - '-', /* 196 */ - '+', /* 197 */ - '|', /* 198 */ - '+', /* 199 */ - '`', /* 200 */ - '.', /* 201 */ - '=', /* 202 */ - '=', /* 203 */ - '|', /* 204 */ - '=', /* 205 */ - '=', /* 206 */ - '=', /* 207 */ - '+', /* 208 */ - '=', /* 209 */ - '+', /* 210 */ - '`', /* 211 */ - '`', /* 212 */ - '.', /* 213 */ - '.', /* 214 */ - '+', /* 215 */ - '=', /* 216 */ - '\'', /* 217 */ - '.', /* 218 */ - '#', /* 219 */ - '#', /* 220 */ - '#', /* 221 */ - '#', /* 222 */ - '#', /* 223 */ - }; - -typedef struct known_pair KNOWN_PAIR; - -struct known_pair - { - unsigned char left; /* first character in pair */ - unsigned char right; /* second character in pair */ - }; - -/* Data for IBM PC to ISO Latin-1 code conversions. */ - -static KNOWN_PAIR ibmpc_known_pairs[] = - { - { 20, 182}, /* pilcrow sign */ - { 21, 167}, /* section sign */ - - {128, 199}, /* capital letter C with cedilla */ - {129, 252}, /* small letter u with diaeresis */ - {130, 233}, /* small letter e with acute accent */ - {131, 226}, /* small letter a with circumflex accent */ - {132, 228}, /* small letter a with diaeresis */ - {133, 224}, /* small letter a with grave accent */ - {134, 229}, /* small letter a with ring above */ - {135, 231}, /* small letter c with cedilla */ - {136, 234}, /* small letter e with circumflex accent */ - {137, 235}, /* small letter e with diaeresis */ - {138, 232}, /* small letter e with grave accent */ - {139, 239}, /* small letter i with diaeresis */ - {140, 238}, /* small letter i with circumflex accent */ - {141, 236}, /* small letter i with grave accent */ - {142, 196}, /* capital letter A with diaeresis */ - {143, 197}, /* capital letter A with ring above */ - {144, 201}, /* capital letter E with acute accent */ - {145, 230}, /* small ligature a with e */ - {146, 198}, /* capital ligature A with E */ - {147, 244}, /* small letter o with circumblex accent */ - {148, 246}, /* small letter o with diaeresis */ - {149, 242}, /* small letter o with grave accent */ - {150, 251}, /* small letter u with circumflex accent */ - {151, 249}, /* small letter u with grave accent */ - {152, 255}, /* small letter y with diaeresis */ - {153, 214}, /* capital letter O with diaeresis */ - {154, 220}, /* capital letter U with diaeresis */ - {155, 162}, /* cent sign */ - {156, 163}, /* pound sign */ - {157, 165}, /* yen sign */ - - {160, 225}, /* small letter a with acute accent */ - {161, 237}, /* small letter i with acute accent */ - {162, 243}, /* small letter o with acute accent */ - {163, 250}, /* small letter u with acute accent */ - {164, 241}, /* small letter n with tilde */ - {165, 209}, /* capital letter N with tilde */ - {166, 170}, /* feminine ordinal indicator */ - {167, 186}, /* masculine ordinal indicator */ - {168, 191}, /* inverted question mark */ - - {170, 172}, /* not sign */ - {171, 189}, /* vulgar fraction one half */ - {172, 188}, /* vulgar fraction one quarter */ - {173, 161}, /* inverted exclamation mark */ - {174, 171}, /* left angle quotation mark */ - {175, 187}, /* right angle quotation mark */ - - {225, 223}, /* small german letter sharp s */ - - {230, 181}, /* small Greek letter mu micro sign */ - - {241, 177}, /* plus-minus sign */ - - {246, 247}, /* division sign */ - - {248, 176}, /* degree sign */ - - {250, 183}, /* middle dot */ - - {253, 178}, /* superscript two */ - - {255, 160}, /* no-break space */ - }; -#define NUMBER_OF_PAIRS (sizeof (ibmpc_known_pairs) / sizeof (KNOWN_PAIR)) +struct pair { + guchar length; + guchar symbol; + gchar* utf; +}; + +/* Data for FT2 custom encoding to utf-8 code conversions (non-ASCII characters). */ + +static struct pair known_pairs[] = { + /* FT2 encoding table is a bit rearranged for speedup the recoding + First utf8 charachters are placed, than aliases of ASCII characters */ + { 2, 0x01, "\xc3\xb7" }, /* division sign */ + { 2, 0x02, "\xc3\x97" }, /* multiply sign */ + { 3, 0x03, "\xe2\x86\x93" }, /* arrow down */ + { 2, 0x04, "\xc3\xa4" }, /* small letter a with diaeresis */ + { 3, 0x05, "\xe2\x86\x91" }, /* arrow up */ + { 2, 0x06, "\xc3\xa5" }, /* small letter a with a ring above */ + { 3, 0x07, "\xe2\x81\xb0" }, /* digit zero in upper register */ + { 2, 0x08, "\xc2\xb9" }, /* digit one in upper register */ + { 2, 0x09, "\xc2\xb2" }, /* digit two in upper register */ + { 2, 0x0a, "\xc2\xb3" }, /* digit three in upper register */ + { 3, 0x0b, "\xe2\x81\xb4" }, /* digit four in upper register */ + { 3, 0x0c, "\xe2\x81\xb5" }, /* digit five in upper register */ + { 3, 0x0d, "\xe2\x81\xb6" }, /* digit six in upper register */ + { 2, 0x0e, "\xc3\x84" }, /* capital letter A with diaeresis */ + { 2, 0x0f, "\xc3\x85" }, /* capital letter A with a ring above */ + + { 3, 0x10, "\xe2\x81\xb7" }, /* digit seven in upper register */ + { 3, 0x11, "\xe2\x81\xb8" }, /* digit eight in upper register */ + { 3, 0x12, "\xe2\x81\xb9" }, /* digit nine in upper register */ + { 2, 0x14, "\xc3\xb6" }, /* small letter o with diaeresis */ + { 2, 0x19, "\xc3\x96" }, /* capital letter O with diaeresis */ + { 2, 0x1b, "\xc2\xbd" }, /* 1/2 fraction */ + { 3, 0x1c, "\xe2\xac\x86" }, /* bold arrow up */ + { 3, 0x1d, "\xe2\xac\x87" }, /* bold arrow down */ + { 3, 0x1e, "\xe2\xac\x85" }, /* bold arrow left */ + { 3, 0x1f, "\xe2\x9e\xa1" }, /* bold arrow right */ + { 2, 0xff, "\xc2\xa9" }, /* copyright sign */ + + { 1, 0x00, " " }, /* FT2 character table contains TOO MANY spaces */ + { 1, 0x7f, " " }, /* yet another space */ + { 1, 0xfe, " " }, /* yet another space */ + { 1, 0x13, "A" }, + { 1, 0x15, "B" }, + { 1, 0x16, "C" }, + { 1, 0x17, "D" }, + { 1, 0x18, "E" }, + { 1, 0x1a, "F" }, + { 1, 0xa0, "A" }, /* These letters were in slightly different font */ + { 1, 0xa1, "B" }, + { 1, 0xa2, "C" }, + { 1, 0xa3, "D" }, + { 1, 0xa4, "E" }, + { 1, 0xa5, "F" }, + { 0, 0xa6, "" }, /* Something strange, just loose it */ + { 0, 0xa7, "" }, /* Something strange, just loose it */ +}; +#define NUMBER_OF_PAIRS ARRAY_SIZE(known_pairs) +/* Symbols encoded with utf-8 multibyte sequences */ +#define UTF_PAIRS 26 -void -recode_ibmpc_to_latin1 (char *string, int len) +void recode_to_utf(const gchar* src, gchar* dest, guint len) { - guint8 c; - int i; + guint i, j, destptr = 0; - while((c = *string) && len) { - if(c >= 176 && c <= 223) { - c = ibmpc_convert_rulers[c - 176]; - } else { - for(i = 0; i < NUMBER_OF_PAIRS; i++) { - if(ibmpc_known_pairs[i].left == c) { - c = ibmpc_known_pairs[i].right; - break; - } - } - } - *string++ = c; - len--; + for (i = 0; i < len; i++) { + guchar c = src[i]; + + if (c >= 0x20 && c <= 0x7e) + dest[destptr++] = c; + else if (c >= 0xa8 && c <= 0xfd) + dest[destptr++] = c - 128; + else { /* The rest of the charset shall be processed via encoding table */ + if (c >= 0x80 && c <= 0x9f) + c -= 128; + for (j = 0; j < NUMBER_OF_PAIRS; j++) + if (c == known_pairs[j].symbol) { + strncpy(&dest[destptr], known_pairs[j].utf, known_pairs[j].length); + destptr += known_pairs[j].length; + break; + } + if (j == NUMBER_OF_PAIRS) + fprintf(stderr, "muh, code: 0x%x\n", c); /* Something's wrond in the code logick */ + } } + dest[destptr] = 0; /* Null-terminating the resulting utf string */ } -void -recode_latin1_to_ibmpc (char *string, int len) +gboolean +recode_from_utf(const gchar* src, gchar* dest, guint len) { - guint8 c; - int i; - - while((c = *string) && len) { - for(i = 0; i < NUMBER_OF_PAIRS; i++) { - if(ibmpc_known_pairs[i].right == c) { - c = ibmpc_known_pairs[i].left; - break; - } - } - *string++ = c; - len--; + guint i, j, index = 0; + guchar c = src[0]; + gchar* ptr; + gboolean illegal = FALSE; + + memset(dest, 0, len); + ptr = (gchar*)src; + for (i = 0; i < len && c != 0; i++) { + if (c >= 0x20 && c <= 0x7e) { /* ASCII valid for FT2 */ + dest[index++] = c; + } else { + for (j = 0; j < UTF_PAIRS; j++) { + if (!memcmp(known_pairs[j].utf, ptr, known_pairs[j].length)) { + dest[index++] = known_pairs[j].symbol; + break; + } + } + if (j == UTF_PAIRS) + illegal = TRUE; + } + ptr = g_utf8_next_char(ptr); + c = ptr[0]; } + return illegal; } diff -Nru soundtracker-0.6.8/app/recode.h soundtracker-1.0.2~pre2/app/recode.h --- soundtracker-0.6.8/app/recode.h 2001-01-03 13:24:09.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/recode.h 2019-04-15 17:45:05.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - DOS Charset recoder (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * The tables have been taken from recode-3.4.1/ibmpc.c: * Copyright (C) 1990, 1993, 1994 Free Software Foundation, Inc. @@ -26,7 +26,9 @@ #ifndef _RECODE_H #define _RECODE_H -void recode_ibmpc_to_latin1 (char *string, int len); -void recode_latin1_to_ibmpc (char *string, int len); +#include + +gboolean recode_from_utf(const gchar* from, gchar* to, guint len); +void recode_to_utf(const gchar* from, gchar* to, guint len); #endif /* _RECODE_H */ diff -Nru soundtracker-0.6.8/app/sample-display.c soundtracker-1.0.2~pre2/app/sample-display.c --- soundtracker-0.6.8/app/sample-display.c 2002-07-18 17:11:37.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/sample-display.c 2020-10-06 10:04:27.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GTK+ sample display widget * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,21 +22,24 @@ #include #include +#include "colors.h" +#include "marshal.h" #include "sample-display.h" -#include -#include - #define XPOS_TO_OFFSET(x) (s->win_start + ((guint64)(x)) * s->win_length / s->width) #define OFFSET_RANGE(l, x) (x < 0 ? 0 : (x >= l ? l - 1 : x)) -static const int default_colors[] = { - 10, 20, 30, - 230, 230, 230, - 230, 200, 0, - 230, 0, 0, - 60, 60, 140, -}; +/* I (ya) hope that the mixer and system endianesses are consistent + and don't regard (rare?) cases when the system endianess differs + from that of the peripheral HW */ +#ifdef WORDS_BIGENDIAN + #define ST_MIXER_FORMAT_S16 ST_MIXER_FORMAT_S16_BE + #define ST_MIXER_FORMAT_U16 ST_MIXER_FORMAT_U16_BE +#else + #define ST_MIXER_FORMAT_S16 ST_MIXER_FORMAT_S16_LE + #define ST_MIXER_FORMAT_U16 ST_MIXER_FORMAT_U16_LE +#endif + enum { SELECTING_NOTHING = 0, @@ -51,6 +54,7 @@ SIG_SELECTION_CHANGED, SIG_LOOP_CHANGED, SIG_WINDOW_CHANGED, + SIG_POS_CHANGED, LAST_SIGNAL }; @@ -58,113 +62,112 @@ static guint sample_display_signals[LAST_SIGNAL] = { 0 }; -static int sample_display_startoffset_to_xpos (SampleDisplay *s, - int offset); -static gint sample_display_idle_draw_function (SampleDisplay *s); +static int sample_display_startoffset_to_xpos(SampleDisplay* s, + int offset); +static gint sample_display_idle_draw_function(SampleDisplay* s); + +G_DEFINE_TYPE(SampleDisplay, sample_display, custom_drawing_get_type()); + +gint +sample_display_xpos_to_offset(SampleDisplay* s, const gint x) +{ + return XPOS_TO_OFFSET(x); +} static void -sample_display_idle_draw (SampleDisplay *s) +sample_display_idle_draw(SampleDisplay* s) { - if(!s->idle_handler) { - s->idle_handler = gtk_idle_add((GtkFunction)sample_display_idle_draw_function, - (gpointer)s); - g_assert(s->idle_handler != 0); + if (!s->idle_handler) { + s->idle_handler = g_idle_add((GSourceFunc)sample_display_idle_draw_function, + (gpointer)s); + g_assert(s->idle_handler != 0); } } -void -sample_display_enable_zero_line (SampleDisplay *s, - gboolean enable) +void sample_display_enable_zero_line(SampleDisplay* s, + gboolean enable) { s->display_zero_line = enable; - if(s->datalen) { - gtk_widget_queue_draw(GTK_WIDGET(s)); + if (s->datalen) { + gtk_widget_queue_draw(GTK_WIDGET(s)); } } -static void -sample_display_set_data (SampleDisplay *s, - void *data, - int type, - int len, - gboolean copy) +void sample_display_set_mode(SampleDisplay* s, + SampleDisplayMode mode) +{ + s->mode = mode; +} + +/* Len is in samples, not bytes! */ +void sample_display_set_data(SampleDisplay* s, + void* data, + STMixerFormat type, + int len, + gboolean copy) { g_return_if_fail(s != NULL); g_return_if_fail(IS_SAMPLE_DISPLAY(s)); - if(!data || !len) { - s->datalen = 0; + if (!data || !len) { + s->datalen = 0; } else { - if(copy) { - if(s->datacopy) { - if(s->datacopylen < len * type / 8) { - g_free(s->data); - s->data = g_new(gint8, len * type / 8); - s->datacopylen = len * type / 8; - } - } else { - s->data = g_new(gint8, len * type / 8); - s->datacopylen = len * type / 8; - } - g_assert(s->data != NULL); - memcpy(s->data, data, len * type / 8); - s->datalen = len; - } else { - if(s->datacopy) { - g_free(s->data); - } - s->data = data; - s->datalen = len; - } - s->datacopy = copy; - s->datatype = type; + guint byteslen = len << (mixer_get_resolution(type) + mixer_is_format_stereo(type) - 1); + if (copy) { + if (s->datacopy) { + if (s->datacopylen < byteslen) { + g_free(s->data); + s->data = g_new(gint8, byteslen); + s->datacopylen = byteslen; + } + } else { + s->data = g_new(gint8, byteslen); + s->datacopylen = byteslen; + } + g_assert(s->data != NULL); + memcpy(s->data, data, byteslen); + s->datalen = len; + } else { + if (s->datacopy) { + g_free(s->data); + } + s->data = data; + s->datalen = len; + } + s->datacopy = copy; + s->datatype = type; } s->old_mixerpos = -1; s->mixerpos = -1; - + s->win_start = 0; s->win_length = len; - gtk_signal_emit(GTK_OBJECT(s), sample_display_signals[SIG_WINDOW_CHANGED], s->win_start, s->win_start + s->win_length); - + if (s->edit) + g_signal_emit(G_OBJECT(s), sample_display_signals[SIG_WINDOW_CHANGED], 0, s->win_start, s->win_start + s->win_length); + s->sel_start = -1; s->old_ss = s->old_se = -1; s->selecting = 0; - - s->loop_start = -1; - gtk_widget_queue_draw(GTK_WIDGET(s)); -} - -void -sample_display_set_data_16 (SampleDisplay *s, - gint16 *data, - int len, - gboolean copy) -{ - sample_display_set_data(s, data, 16, len, copy); -} + s->loop_start = -1; -void -sample_display_set_data_8 (SampleDisplay *s, - gint8 *data, - int len, - gboolean copy) -{ - sample_display_set_data(s, data, 8, len, copy); + gtk_widget_queue_draw(GTK_WIDGET(s)); } -void -sample_display_set_loop (SampleDisplay *s, - int start, - int end) +void sample_display_set_loop(SampleDisplay* s, + int start, + int end) { g_return_if_fail(s != NULL); g_return_if_fail(IS_SAMPLE_DISPLAY(s)); - if(!s->edit || !IS_INITIALIZED(s)) - return; + if (!s->edit || !IS_INITIALIZED(s)) + return; + + if (s->loop_start == start && s->loop_end == end) + return; g_return_if_fail(start >= -1 && start < s->datalen); g_return_if_fail(end > 0 && end <= s->datalen); @@ -174,19 +177,18 @@ s->loop_end = end; gtk_widget_queue_draw(GTK_WIDGET(s)); - gtk_signal_emit(GTK_OBJECT(s), sample_display_signals[SIG_LOOP_CHANGED], start, end); + g_signal_emit(G_OBJECT(s), sample_display_signals[SIG_LOOP_CHANGED], 0, start, end); } -void -sample_display_set_selection (SampleDisplay *s, - int start, - int end) +void sample_display_set_selection(SampleDisplay* s, + int start, + int end) { g_return_if_fail(s != NULL); g_return_if_fail(IS_SAMPLE_DISPLAY(s)); - if(!s->edit || !IS_INITIALIZED(s)) - return; + if (!s->edit || !IS_INITIALIZED(s)) + return; g_return_if_fail(start >= -1 && start < s->datalen); g_return_if_fail(end >= 1 && end <= s->datalen); @@ -196,85 +198,107 @@ s->sel_end = end; sample_display_idle_draw(s); - gtk_signal_emit(GTK_OBJECT(s), sample_display_signals[SIG_SELECTION_CHANGED], start, end); + g_signal_emit(G_OBJECT(s), sample_display_signals[SIG_SELECTION_CHANGED], 0, start, end); } -void -sample_display_set_mixer_position (SampleDisplay *s, - int offset) +void sample_display_set_mixer_position(SampleDisplay* s, + int offset) { g_return_if_fail(s != NULL); g_return_if_fail(IS_SAMPLE_DISPLAY(s)); - if(!s->edit || !IS_INITIALIZED(s)) - return; + if (!s->edit || !IS_INITIALIZED(s)) + return; - if(offset != s->mixerpos) { - s->mixerpos = offset; - sample_display_idle_draw(s); + if (offset != s->mixerpos) { + s->mixerpos = offset; + sample_display_idle_draw(s); } } -void -sample_display_set_window (SampleDisplay *s, - int start, - int end) +static void +sample_display_set_window_full(SampleDisplay *s, + int start, + int end, + gboolean sig_pos_changed) { g_return_if_fail(s != NULL); g_return_if_fail(IS_SAMPLE_DISPLAY(s)); g_return_if_fail(start >= 0 && start < s->datalen); - g_return_if_fail(end > 0 && end <= s->datalen); - g_return_if_fail(end > start); + g_return_if_fail(end < 0 || (end > 0 && end <= s->datalen)); + g_return_if_fail(end < 0 || end > start); s->win_start = start; - s->win_length = end - start; - gtk_signal_emit(GTK_OBJECT(s), sample_display_signals[SIG_WINDOW_CHANGED], start, end); + if (end > 0) { + s->win_length = end - start; + if (s->edit) + g_signal_emit(G_OBJECT(s), sample_display_signals[SIG_WINDOW_CHANGED], 0, start, end); + } else if (sig_pos_changed) + g_signal_emit(G_OBJECT(s), sample_display_signals[SIG_POS_CHANGED], 0, start); gtk_widget_queue_draw(GTK_WIDGET(s)); } +void +sample_display_set_window(SampleDisplay *s, + int start, + int end) +{ + sample_display_set_window_full(s, start, end, FALSE); +} + static void -sample_display_init_display (SampleDisplay *s, - int w, - int h) +sample_display_init_display(SampleDisplay* s, + int w, + int h) { s->width = w; s->height = h; } static void -sample_display_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) +sample_display_size_allocate(GtkWidget* widget, + GtkAllocation* allocation) { - SampleDisplay *s; + SampleDisplay* s; - g_return_if_fail (widget != NULL); - g_return_if_fail (IS_SAMPLE_DISPLAY (widget)); - g_return_if_fail (allocation != NULL); + g_return_if_fail(widget != NULL); + g_return_if_fail(IS_SAMPLE_DISPLAY(widget)); + g_return_if_fail(allocation != NULL); widget->allocation = *allocation; - if (GTK_WIDGET_REALIZED (widget)) { - s = SAMPLE_DISPLAY (widget); + s = SAMPLE_DISPLAY(widget); - gdk_window_move_resize (widget->window, - allocation->x, allocation->y, - allocation->width, allocation->height); + if (allocation->width > s->seg_allocated) { + s->seg_allocated = allocation->width + (allocation->width >> 1); - sample_display_init_display(s, allocation->width, allocation->height); + if (!s->segments) + s->segments = g_new(DISegment, s->seg_allocated); + else + s->segments = g_renew(DISegment, s->segments, s->seg_allocated); } + + if (gtk_widget_get_realized(widget)) { + gdk_window_move_resize(widget->window, + allocation->x, allocation->y, + allocation->width, allocation->height); + + sample_display_init_display(s, allocation->width, allocation->height); + } + (*GTK_WIDGET_CLASS(sample_display_parent_class)->size_allocate)(widget, allocation); } static void -sample_display_realize (GtkWidget *widget) +sample_display_realize(GtkWidget* widget) { GdkWindowAttr attributes; gint attributes_mask; - SampleDisplay *s; + SampleDisplay* s; - g_return_if_fail (widget != NULL); - g_return_if_fail (IS_SAMPLE_DISPLAY (widget)); + g_return_if_fail(widget != NULL); + g_return_if_fail(IS_SAMPLE_DISPLAY(widget)); - GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + gtk_widget_set_realized(widget, TRUE); s = SAMPLE_DISPLAY(widget); attributes.x = widget->allocation.x; @@ -283,641 +307,802 @@ attributes.height = widget->allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; attributes.window_type = GDK_WINDOW_CHILD; - attributes.event_mask = gtk_widget_get_events (widget) - | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK; + attributes.event_mask = gtk_widget_get_events(widget) + | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK; - attributes.visual = gtk_widget_get_visual (widget); - attributes.colormap = gtk_widget_get_colormap (widget); + attributes.visual = gtk_widget_get_visual(widget); + attributes.colormap = gtk_widget_get_colormap(widget); attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; - widget->window = gdk_window_new (widget->parent->window, &attributes, attributes_mask); + widget->window = gdk_window_new(widget->parent->window, &attributes, attributes_mask); - widget->style = gtk_style_attach (widget->style, widget->window); + widget->style = gtk_style_attach(widget->style, widget->window); - s->bg_gc = gdk_gc_new(widget->window); - s->fg_gc = gdk_gc_new(widget->window); - s->zeroline_gc = gdk_gc_new(widget->window); - gdk_gc_set_foreground(s->bg_gc, &SAMPLE_DISPLAY_CLASS(GTK_OBJECT(widget)->klass)->colors[SAMPLE_DISPLAYCOL_BG]); - gdk_gc_set_foreground(s->fg_gc, &SAMPLE_DISPLAY_CLASS(GTK_OBJECT(widget)->klass)->colors[SAMPLE_DISPLAYCOL_FG]); - gdk_gc_set_foreground(s->zeroline_gc, &SAMPLE_DISPLAY_CLASS(GTK_OBJECT(widget)->klass)->colors[SAMPLE_DISPLAYCOL_ZERO]); - if(s->edit) { - s->loop_gc = gdk_gc_new(widget->window); - s->mixerpos_gc = gdk_gc_new(widget->window); - gdk_gc_set_foreground(s->loop_gc, &SAMPLE_DISPLAY_CLASS(GTK_OBJECT(widget)->klass)->colors[SAMPLE_DISPLAYCOL_LOOP]); - gdk_gc_set_foreground(s->mixerpos_gc, &SAMPLE_DISPLAY_CLASS(GTK_OBJECT(widget)->klass)->colors[SAMPLE_DISPLAYCOL_MIXERPOS]); + if (!s->bg_gc) { + s->bg_gc = colors_get_gc(COLOR_BG); + colors_add_widget(COLOR_BG, widget); + s->fg_gc = colors_get_gc(COLOR_NOTES); + s->zeroline_gc = colors_get_gc(COLOR_ZEROLINE); + if (s->edit) { + s->loop_gc = colors_get_gc(COLOR_CHANNUMS); + s->mixerpos_gc = colors_get_gc(COLOR_MIXERPOS); + } } sample_display_init_display(s, attributes.width, attributes.height); - gdk_window_set_user_data (widget->window, widget); + gdk_window_set_user_data(widget->window, widget); + (*GTK_WIDGET_CLASS(sample_display_parent_class)->realize)(widget); } static void -sample_display_size_request (GtkWidget *widget, - GtkRequisition *requisition) +sample_display_size_request(GtkWidget* widget, + GtkRequisition* requisition) { requisition->width = 10; requisition->height = 32; } -static void -sample_display_draw_data (GdkDrawable *win, - const SampleDisplay *s, - int color, - int x, - int width) +static inline gint32 +normalize(const SampleDisplay* s, + const guint offset, + const gint format) +{ + gint32 c; + const gint sh = s->height; + /* s->datalen is in frames, for stereo formats each frame contains 2 samples */ + const guint efflen = s->datalen << mixer_is_format_stereo(format); + + /* Since format is a constant, this should be expanded to a single case + by compiler optimization */ + switch (format) { + case ST_MIXER_FORMAT_S16: + c = ((gint16*)s->data)[OFFSET_RANGE(efflen, offset)]; + c = ((32767 - c) * sh) >> 16; + break; + case ST_MIXER_FORMAT_U16: + c = ((gint16*)s->data)[OFFSET_RANGE(efflen, offset)]; + c = ((65535 - c) * sh) >> 16; + break; + case ST_MIXER_FORMAT_S8: + c = ((gint8*)s->data)[OFFSET_RANGE(efflen, offset)]; + c = ((127 - c) * sh) >> 8; + break; + case ST_MIXER_FORMAT_U8: + c = ((gint8*)s->data)[OFFSET_RANGE(efflen, offset)]; + c = ((255 - c) * sh) >> 8; + break; + /* Average left and right channels if stereo */ + case ST_MIXER_FORMAT_S16 | ST_MIXER_FORMAT_STEREO: + c = (((gint16*)s->data)[OFFSET_RANGE(efflen, offset)] + + ((gint16*)s->data)[OFFSET_RANGE(efflen, offset + 1)]) >> 1; + c = ((32767 - c) * sh) >> 16; + break; + case ST_MIXER_FORMAT_U16 | ST_MIXER_FORMAT_STEREO: + c = (((gint16*)s->data)[OFFSET_RANGE(efflen, offset)] + + ((gint16*)s->data)[OFFSET_RANGE(efflen, offset + 1)]) >> 1; + c = ((65535 - c) * sh) >> 16; + break; + case ST_MIXER_FORMAT_S8 | ST_MIXER_FORMAT_STEREO: + c = (((gint8*)s->data)[OFFSET_RANGE(efflen, offset)] + + ((gint8*)s->data)[OFFSET_RANGE(efflen, offset + 1)]) >> 1; + c = ((127 - c) * sh) >> 8; + break; + case ST_MIXER_FORMAT_U8 | ST_MIXER_FORMAT_STEREO: + c = (((gint8*)s->data)[OFFSET_RANGE(efflen, offset)] + + ((gint8*)s->data)[OFFSET_RANGE(efflen, offset + 1)]) >> 1; + c = ((255 - c) * sh) >> 8; + break; + default: + c = 0; + } + + return c; +} + +static inline gint +sample_display_prepare_data_strobo_do(const SampleDisplay* s, + gint x, + const gint width, + const gint type) { + guint32 c, d; + guint i; + gint prev_x = (x > 0 ? x - 1 : 0); + const gboolean is_stereo = type & ST_MIXER_FORMAT_STEREO; + + c = normalize(s, + is_stereo ? XPOS_TO_OFFSET(prev_x) << 1 : XPOS_TO_OFFSET(prev_x), + type); + + for (i = 0; i < width; i++, x++, c = d) { + d = normalize(s, + is_stereo ? XPOS_TO_OFFSET(x) << 1 : XPOS_TO_OFFSET(x), + type); + s->segments[i].x1 = x - 1; + s->segments[i].y1 = c; + s->segments[i].x2 = x; + s->segments[i].y2 = d; + } + + return width; +} + +static gint +sample_display_prepare_data_strobo(const SampleDisplay* s, + gint x, + const gint width) +{ + gint nseg = width; + + g_assert(s->segments != NULL); + + switch (s->datatype) { + case ST_MIXER_FORMAT_S16: + sample_display_prepare_data_strobo_do(s, x, width, ST_MIXER_FORMAT_S16); + break; + case ST_MIXER_FORMAT_U16: + sample_display_prepare_data_strobo_do(s, x, width, ST_MIXER_FORMAT_U16); + break; + case ST_MIXER_FORMAT_S8: + sample_display_prepare_data_strobo_do(s, x, width, ST_MIXER_FORMAT_S8); + break; + case ST_MIXER_FORMAT_U8: + sample_display_prepare_data_strobo_do(s, x, width, ST_MIXER_FORMAT_U8); + break; + case ST_MIXER_FORMAT_S16 | ST_MIXER_FORMAT_STEREO: + sample_display_prepare_data_strobo_do(s, x, width, ST_MIXER_FORMAT_S16 | ST_MIXER_FORMAT_STEREO); + break; + case ST_MIXER_FORMAT_U16 | ST_MIXER_FORMAT_STEREO: + sample_display_prepare_data_strobo_do(s, x, width, ST_MIXER_FORMAT_U16 | ST_MIXER_FORMAT_STEREO); + break; + case ST_MIXER_FORMAT_S8 | ST_MIXER_FORMAT_STEREO: + sample_display_prepare_data_strobo_do(s, x, width, ST_MIXER_FORMAT_S8 | ST_MIXER_FORMAT_STEREO); + break; + case ST_MIXER_FORMAT_U8 | ST_MIXER_FORMAT_STEREO: + sample_display_prepare_data_strobo_do(s, x, width, ST_MIXER_FORMAT_U8 | ST_MIXER_FORMAT_STEREO); + break; + default: + nseg = 0; + break; /* Draw nothing on unknown format */ + } + return nseg; +} + +static inline guint +sample_display_prepare_data_minmax_do(const SampleDisplay* s, + gint x, + const gint width, + const gint type) +{ + guint32 i, offs; gint32 c, d; - GdkGC *gc; - const int sh = s->height; + const gboolean is_stereo = type & ST_MIXER_FORMAT_STEREO; - if(width == 0) - return; + offs = XPOS_TO_OFFSET(x); + /* Take the previous offset for consistency */ + offs = (offs == 0 ? 0 : offs - 1); + c = d = normalize(s, is_stereo ? offs << 1 : offs, type); + for (i = 0; i < width; i++, x++) { + gint32 tmp; + guint32 endoffs = XPOS_TO_OFFSET(x + 1); + + for(; offs < endoffs; offs++) { + gint32 curval = normalize(s, is_stereo ? offs << 1 : offs, type); + + if (curval < c) + c = curval; + if (curval > d) + d = curval; + } + + s->segments[i].x1 = x; + s->segments[i].y1 = c; + s->segments[i].x2 = x; + s->segments[i].y2 = d; + + offs = endoffs; + tmp = d + 1; + d = c - 1; + c = tmp; + } + return width; +} + +static guint +sample_display_prepare_data_minmax(const SampleDisplay* s, + gint x, + gint width) +{ + guint nsegs; + + if (s->width >= s->win_length) + return sample_display_prepare_data_strobo(s, x, width); + + switch (s->datatype) { + case ST_MIXER_FORMAT_S16: + nsegs = sample_display_prepare_data_minmax_do(s, x, width, ST_MIXER_FORMAT_S16); + break; + case ST_MIXER_FORMAT_U16: + nsegs = sample_display_prepare_data_minmax_do(s, x, width, ST_MIXER_FORMAT_U16); + break; + case ST_MIXER_FORMAT_S8: + nsegs = sample_display_prepare_data_minmax_do(s, x, width, ST_MIXER_FORMAT_S8); + break; + case ST_MIXER_FORMAT_U8: + nsegs = sample_display_prepare_data_minmax_do(s, x, width, ST_MIXER_FORMAT_U8); + break; + case ST_MIXER_FORMAT_S16 | ST_MIXER_FORMAT_STEREO: + nsegs = sample_display_prepare_data_minmax_do(s, x, width, ST_MIXER_FORMAT_S16 | ST_MIXER_FORMAT_STEREO); + break; + case ST_MIXER_FORMAT_U16 | ST_MIXER_FORMAT_STEREO: + nsegs = sample_display_prepare_data_minmax_do(s, x, width, ST_MIXER_FORMAT_U16 | ST_MIXER_FORMAT_STEREO); + break; + case ST_MIXER_FORMAT_S8 | ST_MIXER_FORMAT_STEREO: + nsegs = sample_display_prepare_data_minmax_do(s, x, width, ST_MIXER_FORMAT_S8 | ST_MIXER_FORMAT_STEREO); + break; + case ST_MIXER_FORMAT_U8 | ST_MIXER_FORMAT_STEREO: + nsegs = sample_display_prepare_data_minmax_do(s, x, width, ST_MIXER_FORMAT_U8 | ST_MIXER_FORMAT_STEREO); + break; + default: + nsegs = 0; + } + return nsegs; +} + +static void +sample_display_draw_data(DIDrawable win, + const SampleDisplay* s, + int color, + int x, + int width) +{ + DIGC gc; + gint nseg; + + if (width == 0) + return; g_return_if_fail(x >= 0); g_return_if_fail(x + width <= s->width); - gdk_draw_rectangle(win, color ? s->fg_gc : s->bg_gc, - TRUE, x, 0, width, s->height); + di_draw_rectangle(win, color ? s->fg_gc : s->bg_gc, + TRUE, x, 0, width, s->height); - if(s->display_zero_line) { - gdk_draw_line(win, s->zeroline_gc, x, s->height / 2, x + width - 1, s->height / 2); + if (s->display_zero_line) { + di_draw_line(win, s->zeroline_gc, x, s->height / 2, x + width - 1, s->height / 2); } gc = color ? s->bg_gc : s->fg_gc; - if(s->datatype == 16) { - c = ((gint16*)s->data)[OFFSET_RANGE(s->datalen, XPOS_TO_OFFSET(x - 1))]; - - while(width >= 0) { - d = ((gint16*)s->data)[OFFSET_RANGE(s->datalen, XPOS_TO_OFFSET(x))]; - gdk_draw_line(win, gc, - x - 1, ((32767 - c) * sh) >> 16, - x, ((32767 - d) * sh) >> 16); - c = d; - x++; - width--; - } - } else { - c = ((gint8*)s->data)[OFFSET_RANGE(s->datalen, XPOS_TO_OFFSET(x - 1))]; - - while(width >= 0) { - d = ((gint8*)s->data)[OFFSET_RANGE(s->datalen, XPOS_TO_OFFSET(x))]; - gdk_draw_line(win, gc, - x - 1, ((127 - c) * sh) >> 8, - x, ((127 - d) * sh) >> 8); - c = d; - x++; - width--; - } + switch(s->mode) { + case SAMPLE_DISPLAY_MODE_STROBO: + nseg = sample_display_prepare_data_strobo(s, x, width); + break; + case SAMPLE_DISPLAY_MODE_MINMAX: + nseg = sample_display_prepare_data_minmax(s, x, width); + break; + default: + nseg = 0; /* Unknown display mode, just draw nothing */ + break; } + di_draw_segments(win, gc, s->segments, nseg); } static int -sample_display_startoffset_to_xpos (SampleDisplay *s, - int offset) +sample_display_startoffset_to_xpos(SampleDisplay* s, + int offset) { gint64 d = offset - s->win_start; - if(d < 0) - return 0; - if(d >= s->win_length) - return s->width; + if (d < 0) + return 0; + if (d >= s->win_length) + return s->width; return d * s->width / s->win_length; } static int -sample_display_endoffset_to_xpos (SampleDisplay *s, - int offset) +sample_display_endoffset_to_xpos(SampleDisplay* s, + int offset) { - if(s->win_length < s->width) { - return sample_display_startoffset_to_xpos(s, offset); + if (s->win_length < s->width) { + return sample_display_startoffset_to_xpos(s, offset); } else { - gint64 d = offset - s->win_start; - int l = (1 - s->win_length) / s->width; + gint64 d = offset - s->win_start; + int l = (1 - s->win_length) / s->width; - /* you get these tests by setting the complete formula below equal to 0 or s->width, respectively, + /* you get these tests by setting the complete formula below equal to 0 or s->width, respectively, and then resolving towards d. */ - if(d < l) - return 0; - if(d > s->win_length + l) - return s->width; + if (d < l) + return 0; + if (d > s->win_length + l) + return s->width; - return (d * s->width + s->win_length - 1) / s->win_length; + return (d * s->width + s->win_length - 1) / s->win_length; } } static void -sample_display_do_marker_line (GdkDrawable *win, - SampleDisplay *s, - int endoffset, - int offset, - int x_min, - int x_max, - GdkGC *gc) +sample_display_do_marker_line(DIDrawable win, + SampleDisplay* s, + int endoffset, + int offset, + int x_min, + int x_max, + DIGC gc) { int x; - if(offset >= s->win_start && offset <= s->win_start + s->win_length) { - if(!endoffset) - x = sample_display_startoffset_to_xpos(s, offset); - else - x = sample_display_endoffset_to_xpos(s, offset); - if(x+3 >= x_min && x-3 < x_max) { - gdk_draw_line(win, gc, - x, 0, - x, s->height); - gdk_draw_rectangle(win, gc, TRUE, - x - 3, 0, 7, 10); - gdk_draw_rectangle(win, gc, TRUE, - x - 3, s->height - 10, 7, 10); - } + if (offset >= s->win_start && offset <= s->win_start + s->win_length) { + if (!endoffset) + x = sample_display_startoffset_to_xpos(s, offset); + else + x = sample_display_endoffset_to_xpos(s, offset); + if (x + 3 >= x_min && x - 3 < x_max) { + di_draw_line(win, gc, x, 0, x, s->height); + di_draw_rectangle(win, gc, TRUE, + x - 3, 0, 7, 10); + di_draw_rectangle(win, gc, TRUE, + x - 3, s->height - 10, 7, 10); + } } } -static void -sample_display_draw_main (GtkWidget *widget, - GdkRectangle *area) -{ - SampleDisplay *s = SAMPLE_DISPLAY(widget); +static gboolean +sample_display_draw_main(GtkWidget* widget, + GdkRectangle* area) +{ + SampleDisplay* s = SAMPLE_DISPLAY(widget); + DIDrawable drw = custom_drawing_get_drawable(CUSTOM_DRAWING(widget)); + GdkEventExpose event; int x, x2; - g_return_if_fail(area->x >= 0); + g_return_val_if_fail(area->x >= 0, FALSE); - if(area->width == 0) - return; + if (area->width == 0) + return FALSE; - if(area->x + area->width > s->width) - return; + if (area->x + area->width > s->width) + return FALSE; - if(!IS_INITIALIZED(s)) { - gdk_draw_rectangle(widget->window, - s->bg_gc, - TRUE, area->x, area->y, area->width, area->height); - gdk_draw_line(widget->window, - s->fg_gc, - area->x, s->height / 2, - area->x + area->width - 1, s->height / 2); + if (!IS_INITIALIZED(s)) { + di_draw_rectangle(drw, s->bg_gc, + TRUE, area->x, area->y, area->width, area->height); + di_draw_line(drw, s->fg_gc, + area->x, s->height / 2, + area->x + area->width - 1, s->height / 2); } else { - const int x_min = area->x; - const int x_max = area->x + area->width; - - if(s->sel_start != -1) { - /* draw the part to the left of the selection */ - x = sample_display_startoffset_to_xpos(s, s->sel_start); - x = MIN(x_max, MAX(x_min, x)); - sample_display_draw_data(widget->window, s, 0, x_min, x - x_min); - - /* draw the selection */ - x2 = sample_display_endoffset_to_xpos(s, s->sel_end); - x2 = MIN(x_max, MAX(x_min, x2)); - sample_display_draw_data(widget->window, s, 1, x, x2 - x); - } else { - /* we don't have a selection */ - x2 = x_min; - } - - /* draw the part to the right of the selection */ - sample_display_draw_data(widget->window, s, 0, x2, x_max - x2); + const int x_min = area->x; + const int x_max = area->x + area->width; - if(s->loop_start != -1) { - sample_display_do_marker_line(widget->window, s, 0, s->loop_start, x_min, x_max, s->loop_gc); - sample_display_do_marker_line(widget->window, s, 1, s->loop_end, x_min, x_max, s->loop_gc); - } - - if(s->mixerpos != -1) { - sample_display_do_marker_line(widget->window, s, 0, s->mixerpos, x_min, x_max, s->mixerpos_gc); - s->old_mixerpos = s->mixerpos; - } - } + if (s->sel_start != -1) { + /* draw the part to the left of the selection */ + x = sample_display_startoffset_to_xpos(s, s->sel_start); + x = MIN(x_max, MAX(x_min, x)); + sample_display_draw_data(drw, s, 0, x_min, x - x_min); + + /* draw the selection */ + x2 = sample_display_endoffset_to_xpos(s, s->sel_end); + x2 = MIN(x_max, MAX(x_min, x2)); + sample_display_draw_data(drw, s, 1, x, x2 - x); + } else { + /* we don't have a selection */ + x2 = x_min; + } + + /* draw the part to the right of the selection */ + sample_display_draw_data(drw, s, 0, x2, x_max - x2); + + if (s->loop_start != -1) { + sample_display_do_marker_line(drw, s, 0, s->loop_start, x_min, x_max, s->loop_gc); + sample_display_do_marker_line(drw, s, 1, s->loop_end, x_min, x_max, s->loop_gc); + } + + if (s->mixerpos != -1) { + sample_display_do_marker_line(drw, s, 0, s->mixerpos, x_min, x_max, s->mixerpos_gc); + s->old_mixerpos = s->mixerpos; + } + } + + event.area = *area; + /* We need to redo explicitly the custom drawing stuff */ + return (*GTK_WIDGET_CLASS(sample_display_parent_class)->expose_event)(widget, &event); } static void -sample_display_draw_update (GtkWidget *widget, - GdkRectangle *area) +sample_display_draw_update(GtkWidget* widget, + GdkRectangle* area) { - SampleDisplay *s = SAMPLE_DISPLAY(widget); + SampleDisplay* s = SAMPLE_DISPLAY(widget); GdkRectangle area2 = { 0, 0, 0, s->height }; int x, i; const int x_min = area->x; const int x_max = area->x + area->width; gboolean special_draw = FALSE; - if(s->mixerpos != s->old_mixerpos) { - /* Redraw area of old position, redraw area of new position. */ - for(i = 0; i < 2; i++) { - if(s->old_mixerpos >= s->win_start && s->old_mixerpos < s->win_start + s->win_length) { - x = sample_display_startoffset_to_xpos(s, s->old_mixerpos); - area2.x = MIN(x_max - 1, MAX(x_min, x - 3)); - area2.width = 7; - if(area2.x + area2.width > x_max) { - area2.width = x_max - area2.x; - } - sample_display_draw_main(widget, &area2); - } - s->old_mixerpos = s->mixerpos; - } - special_draw = TRUE; - } - - if(s->sel_start != s->old_ss || s->sel_end != s->old_se) { - if(s->sel_start == -1 || s->old_ss == -1) { - sample_display_draw_main(widget, area); - } else { - if(s->sel_start < s->old_ss) { - /* repaint left additional side */ - x = sample_display_startoffset_to_xpos(s, s->sel_start); - area2.x = MIN(x_max, MAX(x_min, x)); - x = sample_display_startoffset_to_xpos(s, s->old_ss); - area2.width = MIN(x_max, MAX(x_min, x)) - area2.x; - } else { - /* repaint left removed side */ - x = sample_display_startoffset_to_xpos(s, s->old_ss); - area2.x = MIN(x_max, MAX(x_min, x)); - x = sample_display_startoffset_to_xpos(s, s->sel_start); - area2.width = MIN(x_max, MAX(x_min, x)) - area2.x; - } - sample_display_draw_main(widget, &area2); - - if(s->sel_end < s->old_se) { - /* repaint right removed side */ - x = sample_display_endoffset_to_xpos(s, s->sel_end); - area2.x = MIN(x_max, MAX(x_min, x)); - x = sample_display_endoffset_to_xpos(s, s->old_se); - area2.width = MIN(x_max, MAX(x_min, x)) - area2.x; - } else { - /* repaint right additional side */ - x = sample_display_endoffset_to_xpos(s, s->old_se); - area2.x = MIN(x_max, MAX(x_min, x)); - x = sample_display_endoffset_to_xpos(s, s->sel_end); - area2.width = MIN(x_max, MAX(x_min, x)) - area2.x; - } - sample_display_draw_main(widget, &area2); - } - - s->old_ss = s->sel_start; - s->old_se = s->sel_end; - special_draw = TRUE; - } - - if(!special_draw) { - sample_display_draw_main(widget, area); + if (s->mixerpos != s->old_mixerpos) { + /* Redraw area of old position, redraw area of new position. */ + for (i = 0; i < 2; i++) { + if (s->old_mixerpos >= s->win_start && s->old_mixerpos < s->win_start + s->win_length) { + x = sample_display_startoffset_to_xpos(s, s->old_mixerpos); + area2.x = MIN(x_max - 1, MAX(x_min, x - 3)); + area2.width = 7; + if (area2.x + area2.width > x_max) { + area2.width = x_max - area2.x; + } + sample_display_draw_main(widget, &area2); + } + s->old_mixerpos = s->mixerpos; + } + special_draw = TRUE; + } + + if (s->sel_start != s->old_ss || s->sel_end != s->old_se) { + if (s->sel_start == -1 || s->old_ss == -1) { + sample_display_draw_main(widget, area); + } else { + if (s->sel_start < s->old_ss) { + /* repaint left additional side */ + x = sample_display_startoffset_to_xpos(s, s->sel_start); + area2.x = MIN(x_max, MAX(x_min, x)); + x = sample_display_startoffset_to_xpos(s, s->old_ss); + area2.width = MIN(x_max, MAX(x_min, x)) - area2.x; + } else { + /* repaint left removed side */ + x = sample_display_startoffset_to_xpos(s, s->old_ss); + area2.x = MIN(x_max, MAX(x_min, x)); + x = sample_display_startoffset_to_xpos(s, s->sel_start); + area2.width = MIN(x_max, MAX(x_min, x)) - area2.x; + } + sample_display_draw_main(widget, &area2); + + if (s->sel_end < s->old_se) { + /* repaint right removed side */ + x = sample_display_endoffset_to_xpos(s, s->sel_end); + area2.x = MIN(x_max, MAX(x_min, x)); + x = sample_display_endoffset_to_xpos(s, s->old_se); + area2.width = MIN(x_max, MAX(x_min, x)) - area2.x; + } else { + /* repaint right additional side */ + x = sample_display_endoffset_to_xpos(s, s->old_se); + area2.x = MIN(x_max, MAX(x_min, x)); + x = sample_display_endoffset_to_xpos(s, s->sel_end); + area2.width = MIN(x_max, MAX(x_min, x)) - area2.x; + } + sample_display_draw_main(widget, &area2); + } + + s->old_ss = s->sel_start; + s->old_se = s->sel_end; + special_draw = TRUE; } -} -static void -sample_display_draw (GtkWidget *widget, - GdkRectangle *area) -{ - sample_display_draw_main(widget, area); + if (!special_draw) { + sample_display_draw_main(widget, area); + } } static gint -sample_display_expose (GtkWidget *widget, - GdkEventExpose *event) +sample_display_expose(GtkWidget* widget, + GdkEventExpose* event) { - sample_display_draw_main(widget, &event->area); - return FALSE; + return sample_display_draw_main(widget, &event->area); } static gint -sample_display_idle_draw_function (SampleDisplay *s) +sample_display_idle_draw_function(SampleDisplay* s) { GdkRectangle area = { 0, 0, s->width, s->height }; - if(GTK_WIDGET_MAPPED(GTK_WIDGET(s))) { - sample_display_draw_update(GTK_WIDGET(s), &area); + if (gtk_widget_get_mapped(GTK_WIDGET(s))) { + sample_display_draw_update(GTK_WIDGET(s), &area); } - gtk_idle_remove(s->idle_handler); s->idle_handler = 0; - return TRUE; + return FALSE; } static void -sample_display_handle_motion (SampleDisplay *s, - int x, - int y, - int just_clicked) +sample_display_handle_motion(SampleDisplay* s, + int x, + int y, + int just_clicked) { - int ol, or; + int ol, or ; int ss = s->sel_start, se = s->sel_end; int ls = s->loop_start, le = s->loop_end; - if(!s->selecting) - return; + if (!s->selecting) + return; - if(x < 0) - x = 0; - else if(x >= s->width) - x = s->width - 1; + if (x < 0) + x = 0; + else if (x >= s->width) + x = s->width - 1; ol = XPOS_TO_OFFSET(x); - if(s->win_length < s->width) { - or = XPOS_TO_OFFSET(x) + 1; + if (s->win_length < s->width) { + or = XPOS_TO_OFFSET(x) + 1; } else { - or = XPOS_TO_OFFSET(x + 1); + or = XPOS_TO_OFFSET(x + 1); } g_return_if_fail(ol >= 0 && ol < s->datalen); g_return_if_fail(or > 0 && or <= s->datalen); g_return_if_fail(ol < or); - switch(s->selecting) { + switch (s->selecting) { case SELECTING_SELECTION_START: - if(just_clicked) { - if(ss != -1 && ol < se) { - ss = ol; - } else { - ss = ol; - se = ol + 1; - } - } else { - if(ol < se) { - ss = ol; - } else { - ss = se - 1; - se = or; - s->selecting = SELECTING_SELECTION_END; - } - } - break; + if (just_clicked) { + if (ss != -1 && ol < se) { + ss = ol; + } else { + ss = ol; + se = ol + 1; + } + } else { + if (ol < se) { + ss = ol; + } else { + ss = se - 1; + se = or ; + s->selecting = SELECTING_SELECTION_END; + } + } + break; case SELECTING_SELECTION_END: - if(just_clicked) { - if(ss != -1 && or > ss) { - se = or; - } else { - ss = or - 1; - se = or; - } - } else { - if(or > ss) { - se = or; - } else { - se = ss + 1; - ss = ol; - s->selecting = SELECTING_SELECTION_START; - } - } - break; + if (just_clicked) { + if (ss != -1 && or > ss) { + se = or ; + } else { + ss = or -1; + se = or ; + } + } else { + if (or > ss) { + se = or ; + } else { + se = ss + 1; + ss = ol; + s->selecting = SELECTING_SELECTION_START; + } + } + break; case SELECTING_LOOP_START: - if(ol < s->loop_end) - ls = ol; - else - ls = le - 1; - break; + if (ol < s->loop_end) + ls = ol; + else + ls = le - 1; + break; case SELECTING_LOOP_END: - if(or > s->loop_start) - le = or; - else - le = ls + 1; - break; + if (or > s->loop_start) + le = or ; + else + le = ls + 1; + break; default: - g_assert_not_reached(); - break; + g_assert_not_reached(); + break; } - if(s->sel_start != ss || s->sel_end != se) { - s->sel_start = ss; - s->sel_end = se; - sample_display_idle_draw(s); - gtk_signal_emit(GTK_OBJECT(s), sample_display_signals[SIG_SELECTION_CHANGED], ss, se); - } - - if(s->loop_start != ls || s->loop_end != le) { - s->loop_start = ls; - s->loop_end = le; - sample_display_idle_draw(s); - gtk_signal_emit(GTK_OBJECT(s), sample_display_signals[SIG_LOOP_CHANGED], ls, le); + if (s->sel_start != ss || s->sel_end != se) { + s->sel_start = ss; + s->sel_end = se; + sample_display_idle_draw(s); + g_signal_emit(G_OBJECT(s), sample_display_signals[SIG_SELECTION_CHANGED], 0, ss, se); + } + + if (s->loop_start != ls || s->loop_end != le) { + s->loop_start = ls; + s->loop_end = le; + sample_display_idle_draw(s); + g_signal_emit(G_OBJECT(s), sample_display_signals[SIG_LOOP_CHANGED], 0, ls, le); } } // Handle middle mousebutton display window panning static void -sample_display_handle_motion_2 (SampleDisplay *s, - int x, - int y) +sample_display_handle_motion_2(SampleDisplay* s, + int x, + int y) { int new_win_start = s->selecting_wins0 + (s->selecting_x0 - x) * s->win_length / s->width; new_win_start = CLAMP(new_win_start, 0, s->datalen - s->win_length); - if(new_win_start != s->win_start) { - sample_display_set_window (s, - new_win_start, - new_win_start + s->win_length); + if (new_win_start != s->win_start) { + sample_display_set_window_full(s, new_win_start, -1, TRUE); } } static gint -sample_display_button_press (GtkWidget *widget, - GdkEventButton *event) +sample_display_button_press(GtkWidget* widget, + GdkEventButton* event) { - SampleDisplay *s; + SampleDisplay* s; int x, y; GdkModifierType state; - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (IS_SAMPLE_DISPLAY (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); + g_return_val_if_fail(widget != NULL, FALSE); + g_return_val_if_fail(IS_SAMPLE_DISPLAY(widget), FALSE); + g_return_val_if_fail(event != NULL, FALSE); s = SAMPLE_DISPLAY(widget); - if(!s->edit) - return FALSE; + if (!s->edit) + return FALSE; - if(!IS_INITIALIZED(s)) - return TRUE; + if (!IS_INITIALIZED(s)) + return TRUE; - if(s->selecting && event->button != s->button) { - s->selecting = 0; + if (s->selecting && event->button != s->button) { + s->selecting = 0; } else { - s->button = event->button; - gdk_window_get_pointer (event->window, &x, &y, &state); - if(!(state & GDK_SHIFT_MASK)) { - if(s->button == 1) { - s->selecting = SELECTING_SELECTION_START; - } else if(s->button == 2) { - s->selecting = SELECTING_PAN_WINDOW; - gdk_window_get_pointer (event->window, &s->selecting_x0, NULL, NULL); - s->selecting_wins0 = s->win_start; - } else if(s->button == 3) { - s->selecting = SELECTING_SELECTION_END; - } - } else { - if(s->loop_start != -1) { - if(s->button == 1) { - s->selecting = SELECTING_LOOP_START; - } else if(s->button == 3) { - s->selecting = SELECTING_LOOP_END; - } - } - } - if(!s->selecting) - return TRUE; - if(s->selecting != SELECTING_PAN_WINDOW) - sample_display_handle_motion(s, x, y, 1); + s->button = event->button; + gdk_window_get_pointer(event->window, &x, &y, &state); + if (!(state & GDK_SHIFT_MASK)) { + if (s->button == 1) { + s->selecting = SELECTING_SELECTION_START; + } else if (s->button == 2) { + s->selecting = SELECTING_PAN_WINDOW; + gdk_window_get_pointer(event->window, &s->selecting_x0, NULL, NULL); + s->selecting_wins0 = s->win_start; + } else if (s->button == 3) { + s->selecting = SELECTING_SELECTION_END; + } + } else { + if (s->loop_start != -1) { + if (s->button == 1) { + s->selecting = SELECTING_LOOP_START; + } else if (s->button == 3) { + s->selecting = SELECTING_LOOP_END; + } + } + } + if (!s->selecting) + return TRUE; + if (s->selecting != SELECTING_PAN_WINDOW) + sample_display_handle_motion(s, x, y, 1); } - + return TRUE; } static gint -sample_display_button_release (GtkWidget *widget, - GdkEventButton *event) +sample_display_button_release(GtkWidget* widget, + GdkEventButton* event) { - SampleDisplay *s; + SampleDisplay* s; + + g_return_val_if_fail(widget != NULL, FALSE); + g_return_val_if_fail(IS_SAMPLE_DISPLAY(widget), FALSE); + g_return_val_if_fail(event != NULL, FALSE); - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (IS_SAMPLE_DISPLAY (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - s = SAMPLE_DISPLAY(widget); - if(!s->edit) - return FALSE; + if (!s->edit) + return FALSE; - if(s->selecting && event->button == s->button) { - s->selecting = 0; + if (s->selecting && event->button == s->button) { + s->selecting = 0; } - + return TRUE; } static gint -sample_display_motion_notify (GtkWidget *widget, - GdkEventMotion *event) +sample_display_motion_notify(GtkWidget* widget, + GdkEventMotion* event) { - SampleDisplay *s; + SampleDisplay* s; int x, y; GdkModifierType state; s = SAMPLE_DISPLAY(widget); - if(!s->edit) - return FALSE; + if (!s->edit) + return FALSE; - if(!IS_INITIALIZED(s) || !s->selecting) - return TRUE; + if (!IS_INITIALIZED(s) || !s->selecting) + return TRUE; if (event->is_hint) { - gdk_window_get_pointer (event->window, &x, &y, &state); + gdk_window_get_pointer(event->window, &x, &y, &state); } else { - x = event->x; - y = event->y; - state = event->state; + x = event->x; + y = event->y; + state = event->state; } - if(((state & GDK_BUTTON1_MASK) && s->button == 1) || ((state & GDK_BUTTON3_MASK) && s->button == 3)) { - sample_display_handle_motion(SAMPLE_DISPLAY(widget), x, y, 0); - } else if((state & GDK_BUTTON2_MASK) && s->button == 2) { - sample_display_handle_motion_2(SAMPLE_DISPLAY(widget), x, y); + if (((state & GDK_BUTTON1_MASK) && s->button == 1) || ((state & GDK_BUTTON3_MASK) && s->button == 3)) { + sample_display_handle_motion(SAMPLE_DISPLAY(widget), x, y, 0); + } else if ((state & GDK_BUTTON2_MASK) && s->button == 2) { + sample_display_handle_motion_2(SAMPLE_DISPLAY(widget), x, y); } else { - s->selecting = 0; + s->selecting = 0; } - + return TRUE; } static void -sample_display_class_init (SampleDisplayClass *class) +sample_display_class_init(SampleDisplayClass* class) { - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - int n; - const int *p; - GdkColor *c; + GObjectClass* object_class; + GtkWidgetClass* widget_class; - object_class = (GtkObjectClass*) class; - widget_class = (GtkWidgetClass*) class; + object_class = G_OBJECT_CLASS(class); + widget_class = GTK_WIDGET_CLASS(class); widget_class->realize = sample_display_realize; widget_class->size_allocate = sample_display_size_allocate; widget_class->expose_event = sample_display_expose; - widget_class->draw = sample_display_draw; widget_class->size_request = sample_display_size_request; widget_class->button_press_event = sample_display_button_press; widget_class->button_release_event = sample_display_button_release; widget_class->motion_notify_event = sample_display_motion_notify; - sample_display_signals[SIG_SELECTION_CHANGED] = gtk_signal_new ("selection_changed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET(SampleDisplayClass, selection_changed), - gtk_marshal_NONE__INT_INT, - GTK_TYPE_NONE, 2, - GTK_TYPE_INT, - GTK_TYPE_INT); - sample_display_signals[SIG_LOOP_CHANGED] = gtk_signal_new ("loop_changed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET(SampleDisplayClass, loop_changed), - gtk_marshal_NONE__INT_INT, - GTK_TYPE_NONE, 2, - GTK_TYPE_INT, - GTK_TYPE_INT); - sample_display_signals[SIG_WINDOW_CHANGED] = gtk_signal_new ("window_changed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET(SampleDisplayClass, window_changed), - gtk_marshal_NONE__INT_INT, - GTK_TYPE_NONE, 2, - GTK_TYPE_INT, - GTK_TYPE_INT); + sample_display_signals[SIG_SELECTION_CHANGED] = g_signal_new("selection_changed", + G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(SampleDisplayClass, selection_changed), + NULL, NULL, + __marshal_VOID__INT_INT, + G_TYPE_NONE, 2, + G_TYPE_INT, G_TYPE_INT); + sample_display_signals[SIG_LOOP_CHANGED] = g_signal_new("loop_changed", + G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(SampleDisplayClass, loop_changed), + NULL, NULL, + __marshal_VOID__INT_INT, + G_TYPE_NONE, 2, + G_TYPE_INT, G_TYPE_INT); + sample_display_signals[SIG_WINDOW_CHANGED] = g_signal_new("window_changed", + G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(SampleDisplayClass, window_changed), + NULL, NULL, + __marshal_VOID__INT_INT, + G_TYPE_NONE, 2, + G_TYPE_INT, G_TYPE_INT); + sample_display_signals[SIG_POS_CHANGED] = + g_signal_new ("position_changed", + G_TYPE_FROM_CLASS (object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(SampleDisplayClass, position_changed), + NULL, NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, 1, + G_TYPE_INT); - gtk_object_class_add_signals(object_class, sample_display_signals, LAST_SIGNAL); - class->selection_changed = NULL; class->loop_changed = NULL; class->window_changed = NULL; - - for(n = 0, p = default_colors, c = class->colors; n < SAMPLE_DISPLAYCOL_LAST; n++, c++) { - c->red = *p++ * 65535 / 255; - c->green = *p++ * 65535 / 255; - c->blue = *p++ * 65535 / 255; - c->pixel = (gulong)((c->red & 0xff00)*256 + (c->green & 0xff00) + (c->blue & 0xff00)/256); - gdk_color_alloc(gdk_colormap_get_system(), c); - } + class->position_changed = NULL; } static void -sample_display_init (SampleDisplay *s) +sample_display_init(SampleDisplay* s) { s->idle_handler = 0; -} - -guint -sample_display_get_type (void) -{ - static guint sample_display_type = 0; - - if (!sample_display_type) { - GtkTypeInfo sample_display_info = - { - "SampleDisplay", - sizeof(SampleDisplay), - sizeof(SampleDisplayClass), - (GtkClassInitFunc) sample_display_class_init, - (GtkObjectInitFunc) sample_display_init, - (GtkArgSetFunc) NULL, - (GtkArgGetFunc) NULL, - }; - - sample_display_type = gtk_type_unique (gtk_widget_get_type (), &sample_display_info); - } - - return sample_display_type; + s->bg_gc = NULL; + s->seg_allocated = 0; + s->segments = NULL; } GtkWidget* -sample_display_new (gboolean edit) +sample_display_new(gboolean edit, SampleDisplayMode mode) { - SampleDisplay *s = SAMPLE_DISPLAY(gtk_type_new(sample_display_get_type())); + SampleDisplay* s = SAMPLE_DISPLAY(g_object_new(sample_display_get_type(), NULL)); s->edit = edit; s->datacopy = 0; s->display_zero_line = 0; + s->mode = mode; + di_widget_configure(GTK_WIDGET(s)); return GTK_WIDGET(s); } diff -Nru soundtracker-0.6.8/app/sample-display.h soundtracker-1.0.2~pre2/app/sample-display.h --- soundtracker-0.6.8/app/sample-display.h 2001-01-03 13:24:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/sample-display.h 2020-08-26 19:15:35.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GTK+ sample display widget (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,80 +22,88 @@ #ifndef _SAMPLE_DISPLAY_H #define _SAMPLE_DISPLAY_H -#include -#include - -#define SAMPLE_DISPLAY(obj) GTK_CHECK_CAST (obj, sample_display_get_type (), SampleDisplay) -#define SAMPLE_DISPLAY_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, sample_display_get_type (), SampleDisplayClass) -#define IS_SAMPLE_DISPLAY(obj) GTK_CHECK_TYPE (obj, sample_display_get_type ()) - -typedef struct _SampleDisplay SampleDisplay; -typedef struct _SampleDisplayClass SampleDisplayClass; - -enum { - SAMPLE_DISPLAYCOL_BG, - SAMPLE_DISPLAYCOL_FG, - SAMPLE_DISPLAYCOL_LOOP, - SAMPLE_DISPLAYCOL_MIXERPOS, - SAMPLE_DISPLAYCOL_ZERO, - SAMPLE_DISPLAYCOL_LAST -}; - -struct _SampleDisplay -{ - GtkWidget widget; - int edit; /* enable loop / selection editing */ +#include "mixer.h" +#include "customdrawing.h" +#include "draw-interlayer.h" + +typedef enum { + SAMPLE_DISPLAY_MODE_STROBO = 0, + SAMPLE_DISPLAY_MODE_MINMAX, + SAMPLE_DISPLAY_MODE_LAST +} SampleDisplayMode; + +G_BEGIN_DECLS + +#define TYPE_SAMPLE_DISPLAY (sample_display_get_type()) +#define SAMPLE_DISPLAY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), TYPE_SAMPLE_DISPLAY, SampleDisplay)) +#define SAMPLE_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST(klass, sample_display_get_type(), SampleDisplayClass)) +#define IS_SAMPLE_DISPLAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, sample_display_get_type())) +#define SAMPLE_DISPLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), sample_display_get_type(), SampleDisplayClass)) + +typedef struct _SampleDisplay SampleDisplay; +typedef struct _SampleDisplayClass SampleDisplayClass; + +struct _SampleDisplay { + CustomDrawing widget; + DISegment *segments; + guint seg_allocated; + int edit; /* enable loop / selection editing */ + SampleDisplayMode mode; int width, height; - GdkGC *bg_gc, *fg_gc, *loop_gc, *mixerpos_gc; + DIGC bg_gc, fg_gc, loop_gc, mixerpos_gc; guint idle_handler; - void *data; + void* data; int datalen; int datatype; - gboolean datacopy; /* do we have our own copy */ + gboolean datacopy; /* do we have our own copy */ int datacopylen; int win_start, win_length; - int mixerpos, old_mixerpos; /* current playing offset of the sample */ + int mixerpos, old_mixerpos; /* current playing offset of the sample */ gboolean display_zero_line; - GdkGC *zeroline_gc; + DIGC zeroline_gc; /* selection handling */ - int sel_start, sel_end; /* offsets into the sample data or -1 */ + int sel_start, sel_end; /* offsets into the sample data or -1 */ int old_ss, old_se; - int button; /* button index which started the selection */ + int button; /* button index which started the selection */ int selecting; - int selecting_x0; /* the coordinate where the mouse was clicked */ + int selecting_x0; /* the coordinate where the mouse was clicked */ int selecting_wins0; /* loop points */ - int loop_start, loop_end; /* offsets into the sample data or -1 */ + int loop_start, loop_end; /* offsets into the sample data or -1 */ }; -struct _SampleDisplayClass -{ - GtkWidgetClass parent_class; - - GdkColor colors[SAMPLE_DISPLAYCOL_LAST]; - - void (*selection_changed)(SampleDisplay *s, int start, int end); - void (*loop_changed)(SampleDisplay *s, int start, int end); - void (*window_changed)(SampleDisplay *s, int start, int end); +struct _SampleDisplayClass { + CustomDrawingClass parent_class; + + void (*selection_changed)(SampleDisplay* s, int start, int end); + void (*loop_changed)(SampleDisplay* s, int start, int end); + void (*window_changed)(SampleDisplay* s, int start, int end); + void (*position_changed)(SampleDisplay *s, int pos); }; -guint sample_display_get_type (void); -GtkWidget* sample_display_new (gboolean edit); +GType sample_display_get_type(void) G_GNUC_CONST; +GtkWidget* sample_display_new(gboolean edit, SampleDisplayMode mode); -void sample_display_set_data_16 (SampleDisplay *s, gint16 *data, int len, gboolean copy); -void sample_display_set_data_8 (SampleDisplay *s, gint8 *data, int len, gboolean copy); -void sample_display_set_loop (SampleDisplay *s, int start, int end); -void sample_display_set_selection (SampleDisplay *s, int start, int end); -void sample_display_set_mixer_position (SampleDisplay *s, int offset); -void sample_display_enable_zero_line (SampleDisplay *s, gboolean enable); +void sample_display_set_data(SampleDisplay* s, void* data, STMixerFormat type, int len, gboolean copy); +void sample_display_set_loop(SampleDisplay* s, int start, int end); +void sample_display_set_selection(SampleDisplay* s, int start, int end); +void sample_display_set_mixer_position(SampleDisplay* s, int offset); + +void sample_display_enable_zero_line(SampleDisplay* s, gboolean enable); +void sample_display_set_mode(SampleDisplay* s, SampleDisplayMode mode); + +/* "end" can be negative indicating that the window size is not changed (only start); + also no signal is being emitted in this case */ +void sample_display_set_window(SampleDisplay* s, int start, int end); +gint sample_display_xpos_to_offset(SampleDisplay* s, const gint x); -void sample_display_set_window (SampleDisplay *s, int start, int end); +G_END_DECLS #endif /* _SAMPLE_DISPLAY_H */ diff -Nru soundtracker-0.6.8/app/sample-editor.c soundtracker-1.0.2~pre2/app/sample-editor.c --- soundtracker-0.6.8/app/sample-editor.c 2006-02-25 12:26:05.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/sample-editor.c 2021-02-23 17:47:24.000000000 +0000 @@ -2,7 +2,8 @@ /* * The Real SoundTracker - sample editor * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause + * Copyright (C) 2020, 2021 Yury Aliaev * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,1077 +25,1413 @@ #include #include -#include #include +#include #include #include -#include +#include #include #if USE_SNDFILE #include -#elif !defined (NO_AUDIOFILE) +#elif AUDIOFILE_VERSION #include #endif -#include +#include +#include +#include #include -#ifdef USE_GNOME -#include -#endif -#include "i18n.h" -#include "sample-editor.h" -#include "xm.h" -#include "st-subs.h" -#include "gui.h" +#include "audio.h" +#include "clock.h" +#include "colors.h" +#include "draw-interlayer.h" +#include "endian-conv.h" +#include "errors.h" +#include "file-operations.h" +#include "gui-settings.h" #include "gui-subs.h" +#include "gui.h" +#include "history.h" #include "instrument-editor.h" -#include "sample-display.h" -#include "endian-conv.h" #include "keys.h" -#include "track-editor.h" -#include "errors.h" -#include "time-buffer.h" -#include "audio.h" #include "mixer.h" #include "module-info.h" -#include "file-operations.h" -#include "gui-settings.h" +#include "sample-display.h" +#include "sample-editor.h" +#include "st-subs.h" +#include "time-buffer.h" +#include "track-editor.h" #include "xm.h" // == GUI variables -static STSample *current_sample = NULL; - -static GtkWidget *spin_volume, *spin_panning, *spin_finetune, *spin_relnote; -static GtkWidget *savebutton, *savebutton_rgn; -static SampleDisplay *sampledisplay; -static GtkWidget *sample_editor_hscrollbar; -static GtkWidget *loopradio[3], *resolution_radio[2]; +/* Dimensions and position of the record indicator: + size = MAX(MIN_SIZE, MIN(window_width, window_height) / FRACTION_S) + space between window sides and the indicator is calculated similarly + to that in scope-group.h (with FRACRION_D as FRACTION) */ +static const guint MIN_SIZE = 10, XDISP = 3, YDISP = 3, FRACTION_S = 20, FRACTION_D = 100; + +static STSample *current_sample = NULL, *tmp_sample = NULL; + +static GtkWidget* se_spins[SAMPLE_EDITOR_SPIN_LAST]; +static SampleDisplay* sampledisplay; +static GtkWidget* sample_editor_hscrollbar; +static GtkWidget *loopradio[3], *resolution_radio[2], *record_radio[4]; +#if USE_SNDFILE || AUDIOFILE_VERSION +static GtkWidget *load_radio[4]; +#endif static GtkWidget *spin_loopstart, *spin_loopend; -static GtkWidget *trimdialog = NULL; +static GSList* list_data_sensitive = NULL; -static struct SampleEditor { // simplifies future encapsulation of this into a Gtk+ widget - GtkWidget *label_selection; - GtkWidget *label_length; - gchar label_selection_new_text[64]; - gchar label_length_new_text[64]; - guint idle_handler; - GtkWidget *vertical_boxes[3]; -} sample_editor; -static struct SampleEditor * const se = &sample_editor; +static guint scrollbar_cb_tag; +static gint tags[SAMPLE_EDITOR_SPIN_LAST], tag_loopstart, tag_loopend; -// = Volume ramping dialog - -static GtkWidget *volrampwindow = NULL; -static GtkWidget *sample_editor_volramp_spin_w[2]; -static int sample_editor_volramp_last_values[2] = { 100, 100 }; - -// = Trim dialog +#if USE_SNDFILE || AUDIOFILE_VERSION +static file_op *loadsmp, *savesmp, *savereg; +#endif -static gboolean trimbeg = TRUE; -static gboolean trimend = TRUE; -static gfloat threshold = -50.0; +static gint last_xpos = 0; +static gboolean cursor_in = FALSE; +static gboolean copy_whole_sample = FALSE; -// = Load sample dialog +static GtkWidget* sample_editor_volramp_spin_w[2]; -#if USE_SNDFILE || !defined (NO_AUDIOFILE) enum { MODE_MONO = 0, + MODE_STEREO_MIX, MODE_STEREO_LEFT, MODE_STEREO_RIGHT, - MODE_STEREO_MIX + MODE_STEREO_2 }; -static gboolean wavload_through_library; +#if USE_SNDFILE || AUDIOFILE_VERSION +static GtkWidget* wavload_dialog; -static GtkWidget *wavload_dialog; -static const char *wavload_samplename; +struct wl { + gboolean through_library; + const char* samplename; #if USE_SNDFILE -static SNDFILE *wavload_file; -static SF_INFO wavinfo; -static sf_count_t wavload_frameCount; + SNDFILE* file; + SF_INFO wavinfo; + sf_count_t frameCount; #else -static AFfilehandle wavload_file; -static AFframecount wavload_frameCount; + AFfilehandle file; + AFframecount frameCount; #endif -static int wavload_sampleWidth, wavload_channelCount, wavload_endianness, wavload_unsignedwords; -static long wavload_rate; - -static const gchar *wavload_filename; -static GtkWidget *wavload_raw_resolution_w[2]; -static GtkWidget *wavload_raw_channels_w[2]; -static GtkWidget *wavload_raw_signed_w[2]; -static GtkWidget *wavload_raw_endian_w[2]; -static GtkWidget *wavload_raw_rate; + int sampleWidth, channelCount, endianness, unsignedwords; + long rate; +}; -static gboolean libaf2 = TRUE; +static GtkWidget* wavload_raw_resolution_w[2]; +static GtkWidget* wavload_raw_channels_w[2]; +static GtkWidget* wavload_raw_signed_w[2]; +static GtkWidget* wavload_raw_endian_w[2]; #endif // = Sampler variables -static SampleDisplay *monitorscope; -static GtkWidget *cancelbutton, *okbutton, *startsamplingbutton; - -st_in_driver *sampling_driver = NULL; -void *sampling_driver_object = NULL; - -static GtkWidget *samplingwindow = NULL; - -struct recordbuf { - struct recordbuf *next; - int length; - gint16 data[0]; -}; - -static struct recordbuf *recordbufs, *current; -static const int recordbuflen = 10000; -static int currentoffs; -static int recordedlen, sampling; +static SampleDisplay* monitorscope = NULL; +static DIGC mask_gc, mask_bg_gc, red_circle_gc; +static GtkWidget *clearbutton, *okbutton, *sclock; +static void *monitor_buf = NULL; + +st_driver* sampling_driver = NULL; +void* sampling_driver_object = NULL; + +static GtkWidget* samplingwindow = NULL; + +static STSampleChain *recordbufs, *current = NULL; +static guint recordedlen, rate, toggled_id, monitor_count; +static gboolean sampling, monitoring, has_data; +static STMixerFormat format; // = Editing operations variables -static void *copybuffer = NULL; +static void* copybuffer = NULL; static int copybufferlen; static STSample copybuffer_sampleinfo; // = Realtime stuff -static int update_freq = 50; static int gtktimer = -1; static void sample_editor_ok_clicked(void); -static void sample_editor_start_sampling_clicked(void); -static void sample_editor_spin_volume_changed(GtkSpinButton *spin); -static void sample_editor_spin_panning_changed(GtkSpinButton *spin); -static void sample_editor_spin_finetune_changed(GtkSpinButton *spin); -static void sample_editor_spin_relnote_changed(GtkSpinButton *spin); -static void sample_editor_selection_to_loop_clicked (void); -static void sample_editor_loop_changed(void); -static void sample_editor_display_loop_changed(SampleDisplay *, int start, int end); -static void sample_editor_display_selection_changed(SampleDisplay *, int start, int end); -static void sample_editor_display_window_changed(SampleDisplay *, int start, int end); -static void sample_editor_select_none_clicked(void); -static void sample_editor_select_all_clicked(void); -static void sample_editor_clear_clicked(void); -static void sample_editor_crop_clicked(void); -static void sample_editor_show_all_clicked(void); -static void sample_editor_zoom_in_clicked(void); -static void sample_editor_zoom_out_clicked(void); -static void sample_editor_loopradio_changed(void); -static void sample_editor_resolution_changed(void); -static void sample_editor_monitor_clicked(void); -static void sample_editor_cut_clicked(void); -static void sample_editor_remove_clicked(void); -static void sample_editor_copy_clicked(void); +static void sample_editor_spin_volume_changed(GtkSpinButton* spin); +static void sample_editor_spin_panning_changed(GtkSpinButton* spin); +static void sample_editor_spin_finetune_changed(GtkSpinButton* spin); +static void sample_editor_spin_relnote_changed(GtkSpinButton* spin); +static void sample_editor_loop_changed(GtkSpinButton* spin, gpointer data); +static void sample_editor_display_loop_changed(SampleDisplay*, int start, int end); +static void sample_editor_display_selection_changed(SampleDisplay*, int start, int end); +static void sample_editor_display_window_changed(GtkAdjustment*, int start, int end, SampleDisplay* s); +static void sample_editor_display_position_changed(GtkAdjustment*, int pos); +static void sample_editor_loopradio_changed(GtkToggleButton* tb); void sample_editor_paste_clicked(void); -static void sample_editor_zoom_to_selection_clicked(void); +void sample_editor_zoom_in_clicked(void); +void sample_editor_zoom_out_clicked(void); -#if USE_SNDFILE || !defined (NO_AUDIOFILE) -static void sample_editor_load_wav(void); -static void sample_editor_save_wav(void); -static void sample_editor_save_region_wav(void); +#if USE_SNDFILE || AUDIOFILE_VERSION +static void sample_editor_load_wav(const gchar* name, const gchar* localname); +static void sample_editor_save_wav(const gchar* name, const gchar* localname); +static void sample_editor_save_region_wav(const gchar* name, const gchar* localname); #endif -static void sample_editor_open_volume_ramp_dialog(void); -static void sample_editor_close_volume_ramp_dialog(void); -static void sample_editor_perform_ramp(GtkWidget *w, gpointer data); - -static void sample_editor_reverse_clicked(void); - -static void sample_editor_trim_dialog(void); static void sample_editor_trim(gboolean beg, gboolean end, gfloat threshold); -static void sample_editor_crop(void); -static void sample_editor_delete(STSample *sample,int start, int end); - +static void sample_editor_delete(STSample* sample, int start, int end); + static void -sample_editor_lock_sample (void) +sample_editor_lock_sample(void) { - g_mutex_lock(current_sample->sample.lock); + g_mutex_lock(¤t_sample->sample.lock); } static void -sample_editor_unlock_sample (void) +sample_editor_unlock_sample(void) { - if(gui_playing_mode) { - mixer->updatesample(¤t_sample->sample); + if (gui_playing_mode) { + mixer->updatesample(¤t_sample->sample); } - g_mutex_unlock(current_sample->sample.lock); + g_mutex_unlock(¤t_sample->sample.lock); } void -sample_editor_page_create (GtkNotebook *nb) +sample_editor_update_status(void) { - GtkWidget *box, *thing, *hbox, *vbox, *vbox2, *frame, *box2; - static const char *looplabels[] = { - N_("No loop"), - N_("Amiga"), - N_("PingPong"), - NULL - }; - static const char *resolutionlabels[] = { - N_("8 bits"), - N_("16 bits"), - NULL - }; + if (notebook_current_page == NOTEBOOK_PAGE_SAMPLE_EDITOR) { + static gchar se_status[256]; + gint n; + gint ss = sampledisplay->sel_start; + gint se = sampledisplay->sel_end; + + n = snprintf(se_status, sizeof(se_status), + _("[Length: %i]"), current_sample->sample.length); + if (cursor_in && current_sample->sample.data) + n += snprintf(&se_status[n], sizeof(se_status) - n, + _(" [Position: %i]"), + sample_display_xpos_to_offset(sampledisplay, last_xpos)); + if (ss != -1) + snprintf(&se_status[n], sizeof(se_status) - n, + _(" [Selection: %i \342\200\223 %i (%i discretes)]"), + ss, se, se - ss); + gui_statusbar_update_message_high(se_status); + } +} - box = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(box), 10); - gtk_notebook_append_page(nb, box, gtk_label_new(_("Sample Editor"))); - gtk_widget_show(box); +static gboolean +sample_editor_display_scrolled(GtkAdjustment *adj, + GdkEventScroll *event) +{ + gboolean handled = FALSE; + gdouble value, incr, pincr, lower, upper, psize; + + if (current_sample == NULL || current_sample->sample.data == NULL) + return handled; + if (sampledisplay->win_start == 0 && + sampledisplay->win_length == current_sample->sample.length && + !((event->direction == GDK_SCROLL_DOWN || event->direction == GDK_SCROLL_RIGHT) + && event->state & GDK_CONTROL_MASK)) + return handled; + + value = gtk_adjustment_get_value(adj); + incr = gtk_adjustment_get_step_increment(adj); + pincr = gtk_adjustment_get_page_increment(adj); + psize = gtk_adjustment_get_page_size(adj); + lower = gtk_adjustment_get_lower(adj); + upper = gtk_adjustment_get_upper(adj); + + switch (event->direction) { + case GDK_SCROLL_UP: + case GDK_SCROLL_LEFT: + if (event->state & GDK_CONTROL_MASK) + sample_editor_zoom_out_clicked(); + else { + value -= ((event->state & GDK_SHIFT_MASK) ? pincr : incr); + gtk_adjustment_set_value(adj, CLAMP(value, lower, upper - psize)); + } + handled = TRUE; + break; + case GDK_SCROLL_DOWN: + case GDK_SCROLL_RIGHT: + if (event->state & GDK_CONTROL_MASK) + sample_editor_zoom_in_clicked(); + else { + value += ((event->state & GDK_SHIFT_MASK) ? pincr : incr); + gtk_adjustment_set_value(adj, CLAMP(value, lower, upper - psize)); + } + handled = TRUE; + break; + default: + break; + } - thing = sample_display_new(TRUE); - gtk_box_pack_start(GTK_BOX(box), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "loop_changed", - GTK_SIGNAL_FUNC(sample_editor_display_loop_changed), NULL); - gtk_signal_connect(GTK_OBJECT(thing), "selection_changed", - GTK_SIGNAL_FUNC(sample_editor_display_selection_changed), NULL); - gtk_signal_connect(GTK_OBJECT(thing), "window_changed", - GTK_SIGNAL_FUNC(sample_editor_display_window_changed), NULL); - sampledisplay = SAMPLE_DISPLAY(thing); - sample_display_enable_zero_line(SAMPLE_DISPLAY(thing), TRUE); + last_xpos = event->x; + sample_editor_update_status(); - sample_editor_hscrollbar = gtk_hscrollbar_new(NULL); - gtk_widget_show(sample_editor_hscrollbar); - gtk_box_pack_start(GTK_BOX(box), sample_editor_hscrollbar, FALSE, TRUE, 0); + return handled; +} - hbox = gtk_hbox_new(FALSE, 4); - gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, TRUE, 0); - gtk_widget_show(hbox); +static void +sample_editor_hscrollbar_changed (GtkAdjustment *adj) +{ + sample_display_set_window(sampledisplay, rint(gtk_adjustment_get_value(adj)), -1); +} - se->vertical_boxes[0] = vbox = gtk_vbox_new(FALSE, 2); - gtk_widget_show(vbox); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); - - make_radio_group((const char**)looplabels, vbox, loopradio, FALSE, FALSE, sample_editor_loopradio_changed); - gui_put_labelled_spin_button(vbox, _("Start"), 0, 0, &spin_loopstart, sample_editor_loop_changed, NULL); - gui_put_labelled_spin_button(vbox, _("End"), 0, 0, &spin_loopend, sample_editor_loop_changed, NULL); - sample_editor_loopradio_changed(); +static void +red_circle_realize(GtkWidget* widget, gpointer data) +{ + static gboolean firsttime = TRUE; - thing = gtk_vseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); + if (firsttime) { + mask_gc = di_gc_new(widget->window); + mask_bg_gc = colors_get_gc(COLOR_BLACK); + red_circle_gc = colors_get_gc(COLOR_RED); + } +} - se->vertical_boxes[1] = vbox = gtk_vbox_new(TRUE, 2); - gtk_widget_show(vbox); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); - - gui_put_labelled_spin_button(vbox, _("Volume"), 0, 64, &spin_volume, sample_editor_spin_volume_changed, NULL); - gui_put_labelled_spin_button(vbox, _("Panning"), -128, 127, &spin_panning, sample_editor_spin_panning_changed, NULL); - gui_put_labelled_spin_button(vbox, _("Finetune"), -128, 127, &spin_finetune, sample_editor_spin_finetune_changed, NULL); - make_radio_group((const char**)resolutionlabels, vbox, resolution_radio, FALSE, FALSE, sample_editor_resolution_changed); +static void +red_circle_draw(GtkWidget* widget, GdkRectangle* area, gpointer data) +{ + if (sampling) { + static gint width = -1, height = -1; + static guint oldsize = 0; + static GdkPixmap* red_circle_pm = NULL; + static DIDrawable red_circle_drw; - thing = gtk_vseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); + guint size = MAX(MIN_SIZE, MIN(widget->allocation.width, widget->allocation.height) / FRACTION_S); + guint x0 = widget->allocation.width - XDISP - widget->allocation.width / FRACTION_D - size; + guint y0 = YDISP + widget->allocation.height / FRACTION_D; + GdkRectangle dest_area; + DIDrawable win = custom_drawing_get_drawable(CUSTOM_DRAWING(widget)); - se->vertical_boxes[2] = vbox = gtk_vbox_new(FALSE, 2); - gtk_widget_show(vbox); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); - - /* Sample selection */ - vbox2 = gtk_vbox_new(TRUE, 2); - gtk_widget_show(vbox2); - gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, TRUE, 0); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(vbox2), box2, FALSE, TRUE, 0); + dest_area.x = x0; + dest_area.y = y0; + dest_area.width = size; + dest_area.height = size; - thing = gtk_label_new(_("Selection:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + /* Update number mask if necessary */ + if (widget->allocation.width != width || widget->allocation.height != height || (!red_circle_pm)) { + width = widget->allocation.width; + height = widget->allocation.height; - thing = gtk_button_new_with_label(_("None")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_select_none_clicked), NULL); - gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); + /* The indicator itself is to be redrawn */ + if (!red_circle_pm || oldsize != size) { + oldsize = size; - thing = gtk_button_new_with_label(_("All")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_select_all_clicked), NULL); - gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); + if (red_circle_pm) + g_object_unref(red_circle_pm); + red_circle_pm = gdk_pixmap_new(widget->window, size, size, -1); + red_circle_drw = di_get_drawable(red_circle_pm); - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_box_pack_start (GTK_BOX(vbox2), frame, FALSE, TRUE, 0); - gtk_widget_show (frame); - - se->label_selection = gtk_label_new (""); - gtk_misc_set_alignment (GTK_MISC (se->label_selection), 0.5, 0.5); - gtk_container_add (GTK_CONTAINER (frame), se->label_selection); - gtk_widget_show (se->label_selection); - - /* Sample length */ - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(vbox2), box2, FALSE, TRUE, 0); + di_draw_rectangle(red_circle_drw, mask_bg_gc, TRUE, 0, 0, size, size); + di_draw_arc(red_circle_drw, red_circle_gc, TRUE, 0, 0, size, size, 0, 360 * 64); + } + di_update_mask(widget->window, red_circle_pm, mask_gc, x0, y0, size, size, width, height); + } - thing = gtk_label_new(_("Length:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + if (gdk_rectangle_intersect(area, &dest_area, &dest_area)) + di_draw_drawable(win, mask_gc, red_circle_drw, + dest_area.x - x0, dest_area.y - y0, + dest_area.x, dest_area.y, dest_area.width, dest_area.height); + } +} - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_box_pack_start (GTK_BOX(box2), frame, TRUE, TRUE, 0); - gtk_widget_show (frame); - - se->label_length = gtk_label_new (""); - gtk_misc_set_alignment (GTK_MISC (se->label_length), 0.5, 0.5); - gtk_container_add (GTK_CONTAINER (frame), se->label_length); - gtk_widget_show (se->label_length); - - add_empty_vbox(vbox); - - thing = gtk_button_new_with_label(_("Set as loop")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC( sample_editor_selection_to_loop_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); +static gboolean +sample_display_cursor_motion(GtkWidget* w, GdkEventMotion* event) +{ + g_assert(IS_SAMPLE_DISPLAY(w)); - add_empty_vbox(vbox); + last_xpos = event->x; + sample_editor_update_status(); - gui_put_labelled_spin_button(vbox, _("RelNote"), -128, 127, &spin_relnote, sample_editor_spin_relnote_changed, NULL); + return FALSE; +} - thing = gtk_vseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(hbox), thing, FALSE, TRUE, 0); +static gboolean +sample_display_border_cross(GtkWidget* w, GdkEventCrossing* event, gpointer p) +{ + cursor_in = GPOINTER_TO_INT(p); + last_xpos = event->x; + sample_editor_update_status(); - vbox = gtk_vbox_new(FALSE, 2); - gtk_widget_show(vbox); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); - -#if USE_SNDFILE || !defined (NO_AUDIOFILE) - fileops_dialogs[DIALOG_LOAD_SAMPLE] = file_selection_create(_("Load Sample..."), sample_editor_load_wav); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_LOAD_SAMPLE]), gui_settings.loadsmpl_path); - fileops_dialogs[DIALOG_SAVE_SAMPLE] = file_selection_create(_("Save WAV..."), sample_editor_save_wav); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_SAVE_SAMPLE]), gui_settings.savesmpl_path); - fileops_dialogs[DIALOG_SAVE_RGN_SAMPLE] = file_selection_create(_("Save region as WAV..."), sample_editor_save_region_wav); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_SAVE_RGN_SAMPLE]), gui_settings.savesmpl_path); -#endif - - thing = gtk_button_new_with_label(_("Load Sample")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(fileops_open_dialog), (void*)DIALOG_LOAD_SAMPLE); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); -#if USE_SNDFILE == 0 && defined (NO_AUDIOFILE) - gtk_widget_set_sensitive(thing, 0); + return FALSE; +} + +static void +sample_editor_blocked_set_display_loop(int start, + int end) +{ + g_signal_handlers_block_by_func(G_OBJECT(sampledisplay), G_CALLBACK(sample_editor_display_loop_changed), NULL); + sample_display_set_loop(sampledisplay, start, end); + g_signal_handlers_unblock_by_func(G_OBJECT(sampledisplay), G_CALLBACK(sample_editor_display_loop_changed), NULL); +} + +static void +sample_editor_block_loop_spins(gboolean block) +{ + if (block) { + g_signal_handler_block(G_OBJECT(spin_loopstart), tag_loopstart); + g_signal_handler_block(G_OBJECT(spin_loopend), tag_loopend); + } else { + g_signal_handler_unblock(G_OBJECT(spin_loopstart), tag_loopstart); + g_signal_handler_unblock(G_OBJECT(spin_loopend), tag_loopend); + } +} + +static void +sample_editor_loop_changed(GtkSpinButton* spin, gpointer data) +{ + st_mixer_sample_info *s; + const gint new_v = gtk_spin_button_get_value_as_int(spin); + const gboolean is_end = GPOINTER_TO_INT(data); + guint32* v; + + g_return_if_fail(current_sample != NULL); + g_return_if_fail(current_sample->sample.data != NULL); + + s = ¤t_sample->sample; + v = is_end ? &s->loopend : &s->loopstart; + if (*v == new_v) + return; + + history_log_spin_button(spin, _(is_end ? N_("Sample loop end setting") : N_("Sample loop start setting")), + HISTORY_FLAG_LOG_ALL, *v); + sample_editor_lock_sample(); + *v = new_v; + sample_editor_unlock_sample(); + + if (is_end) + gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin_loopstart), 0, s->length ? new_v - 1 : 0); + else + gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin_loopend), s->length ? new_v + 1 : 1, s->length); + if (current_sample->sample.looptype != ST_MIXER_SAMPLE_LOOPTYPE_NONE) + sample_editor_blocked_set_display_loop(s->loopstart, s->loopend); +} + +static void +sample_editor_resolution_changed(GtkToggleButton* tb) +{ + STSample* sts = current_sample; + gint n, old_v; + + if (!gtk_toggle_button_get_active(tb)) + return; + if (!sts) + return; + n = find_current_toggle(resolution_radio, 2); + old_v = sts->treat_as_8bit ? 0 : 1; + if (n == old_v) + return; + + history_log_radio_group(resolution_radio, _("Sample resolution setting"), + HISTORY_FLAG_LOG_ALL, sts->treat_as_8bit ? 0 : 1, 2); + sts->treat_as_8bit = (n == 0); +} + +void sample_editor_page_create(GtkNotebook* nb) +{ + GtkWidget *box, *thing, *hbox; + GtkAdjustment *adj; + GtkBuilder* builder; + GtkAccelGroup *accel_group; + gint i; + + static const char* looplabels[] = { + N_("No loop"), + N_("Amiga"), + N_("PingPong") + }; + static const char* resolutionlabels[] = { + N_("8 bits"), + N_("16 bits") + }; + +#if USE_SNDFILE || AUDIOFILE_VERSION + static const gchar* aiff_f[] = { N_("Apple/SGI audio (*aif, *.aiff, *.aifc)"), "*.[aA][iI][fF]", "*.[aA][iI][fF][fFcC]", NULL }; + static const gchar* au_f[] = { N_("SUN/NeXT audio (*.au, *.snd)"), "*.[aA][uU]", "*.[sS][nN][dD]", NULL }; + static const gchar* avr_f[] = { N_("Audio Visual Research files (*.avr)"), "*.[aA][vV][rR]", NULL }; + static const gchar* caf_f[] = { N_("Apple Core Audio files (*.caf)"), "*.[cC][aA][fF]", NULL }; + static const gchar* iff_f[] = { N_("Amiga IFF/SV8/SV16 (*.iff)"), "*.[iI][fF][fF]", NULL }; + static const gchar* sf_f[] = { N_("Berkeley/IRCAM/CARL audio (*.sf)"), "*.[sS][fF]", NULL }; + static const gchar* voc_f[] = { N_("Creative Labs audio (*.voc)"), "*.[vV][oO][cC]", NULL }; + static const gchar* wavex_f[] = { N_("Microsoft RIFF/NIST Sphere (*.wav)"), "*.[wW][aA][vV]", NULL }; + static const gchar* flac_f[] = { N_("FLAC lossless audio (*.flac)"), "*.flac", NULL }; + static const gchar* wve_f[] = { N_("Psion audio (*.wve)"), "*.wve", NULL }; + static const gchar* ogg_f[] = { N_("OGG compressed audio (*.ogg, *.vorbis)"), "*.ogg", "*.vorbis", NULL }; + static const gchar* rf64_f[] = { N_("RIFF 64 files (*.rf64)"), "*.rf64", NULL }; + + static const gchar* wav_f[] = { N_("Microsoft RIFF (*.wav)"), "*.[wW][aA][vV]", NULL }; + static const gchar** out_f[] = { wav_f, NULL }; #endif - thing = gtk_button_new_with_label(_("Save WAV")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(fileops_open_dialog), (void*)DIALOG_SAVE_SAMPLE); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); - savebutton = thing; -#if USE_SNDFILE == 0 && defined (NO_AUDIOFILE) - gtk_widget_set_sensitive(thing, 0); +#if USE_SNDFILE + static const gchar* htk_f[] = { N_("HMM Tool Kit files (*.htk)"), "*.[hH][tT][kK]", NULL }; + static const gchar* mat_f[] = { N_("GNU Octave/Matlab files (*.mat)"), "*.[mM][aA][tT]", NULL }; + static const gchar* paf_f[] = { N_("Ensoniq PARIS files (*.paf)"), "*.[pP][aA][fF]", NULL }; + static const gchar* pvf_f[] = { N_("Portable Voice Format files (*.pvf)"), "*.[pP][vV][fF]", NULL }; + static const gchar* raw_f[] = { N_("Headerless raw data (*.raw, *.r8)"), "*.[rR][aA][wW]", "*.[rR]8", NULL }; + static const gchar* sd2_f[] = { N_("Sound Designer II files (*.sd2)"), "*.[sS][dD]2", NULL }; + static const gchar* sds_f[] = { N_("Midi Sample Dump Standard files (*.sds)"), "*.[sS][dD][sS]", NULL }; + static const gchar* w64_f[] = { N_("SoundFoundry WAVE 64 files (*.w64)"), "*.[wW]64", NULL }; + + static const gchar** in_f[] = { aiff_f, au_f, avr_f, caf_f, htk_f, iff_f, mat_f, paf_f, pvf_f, raw_f, sd2_f, sds_f, sf_f, + voc_f, w64_f, wavex_f, flac_f, wve_f, ogg_f, rf64_f, NULL }; #endif - thing = gtk_button_new_with_label(_("Save Region")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(fileops_open_dialog), (void*)DIALOG_SAVE_RGN_SAMPLE); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); - savebutton_rgn = thing; -#if USE_SNDFILE == 0 && defined (NO_AUDIOFILE) - gtk_widget_set_sensitive(thing, 0); +#if !USE_SNDFILE && AUDIOFILE_VERSION + static const gchar* smp_f[] = { N_("Sample Vision files (*.smp)"), "*.[sS][mM][pP]", NULL }; + + static const gchar** in_f[] = { aiff_f, au_f, avr_f, caf_f, iff_f, sf_f, voc_f, wavex_f, smp_f, rf64_f, ogg_f, + wve_f, flac_f, NULL }; #endif - - thing = gtk_button_new_with_label(_("Monitor")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_monitor_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); + const icon_set sample_editor_icons[] = + {{"st-select-all", "select-all", SIZES_MENU_TOOLBOX}, + {"st-select-none", "select-none", SIZES_MENU_TOOLBOX}, + {"st-crop", "crop", SIZES_MENU}, + {NULL}}; - thing = gtk_button_new_with_label(_("Volume Ramp")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_open_volume_ramp_dialog), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); +#if USE_SNDFILE || AUDIOFILE_VERSION + loadsmp = fileops_dialog_create(DIALOG_LOAD_SAMPLE, _("Load Sample"), &gui_settings.loadsmpl_path, sample_editor_load_wav, TRUE, FALSE, in_f, N_("Load sample into the current sample slot"), NULL); + savesmp = fileops_dialog_create(DIALOG_SAVE_SAMPLE, _("Save Sample"), &gui_settings.savesmpl_path, sample_editor_save_wav, TRUE, TRUE, out_f, N_("Save the current sample"), "wav"); + savereg = fileops_dialog_create(DIALOG_SAVE_RGN_SAMPLE, _("Save region as WAV..."), &gui_settings.savesmpl_path, sample_editor_save_region_wav, FALSE, TRUE, out_f, NULL, "wav"); +#endif - thing = gtk_button_new_with_label(_("Trim")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_trim_dialog), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); + gui_add_icons(sample_editor_icons); + box = gtk_vbox_new(FALSE, 2); + gtk_container_set_border_width(GTK_CONTAINER(box), 10); + gtk_notebook_append_page(nb, box, gtk_label_new(_("Sample Editor"))); + gtk_widget_show(box); - vbox = gtk_vbox_new(FALSE, 2); - gtk_widget_show(vbox); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); - - thing = gtk_button_new_with_label(_("Zoom to selection")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_zoom_to_selection_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); +#define S_E_XML DATADIR "/" PACKAGE "/sample-editor.xml" + builder = gui_builder_from_file(S_E_XML, NULL); + thing = gui_get_widget(builder, "sample_editor_menu", S_E_XML); + gtk_box_pack_start(GTK_BOX(box), thing, FALSE, FALSE, 0); + thing = gui_get_widget(builder, "sample_editor_toolbar", S_E_XML); + gtk_box_pack_start(GTK_BOX(box), thing, FALSE, FALSE, 0); + thing = gui_get_widget(builder, "selection_menu", S_E_XML); + list_data_sensitive = g_slist_prepend(list_data_sensitive, thing); + + struct { + const gchar* const title; + guint key; + GdkModifierType mods; + } accel_list[] = { + {"zoom_sel_tbutton", 's', GDK_MOD1_MASK}, + {"show_all_tbutton", '1', GDK_CONTROL_MASK}, + {"zoom_in_tbutton", '=', GDK_CONTROL_MASK}, + {"zoom_out_tbutton", '-', GDK_CONTROL_MASK} + }; - thing = gtk_button_new_with_label(_("Show all")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_show_all_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); + accel_group = gtk_accel_group_new(); + gtk_window_add_accel_group(GTK_WINDOW(mainwindow), accel_group); + for (i = 0; i < sizeof(accel_list) / sizeof(accel_list[0]); i++) + gtk_widget_add_accelerator(gui_get_widget(builder, accel_list[i].title, S_E_XML), + "clicked", accel_group, accel_list[i].key, accel_list[i].mods, 0); - thing = gtk_button_new_with_label(_("Zoom in (+50%)")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_zoom_in_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); +#if USE_SNDFILE || AUDIOFILE_VERSION + thing = gui_get_widget(builder, "save_wav_tbutton", S_E_XML); + list_data_sensitive = g_slist_prepend(list_data_sensitive, thing); gtk_widget_show(thing); + g_signal_connect_swapped(thing, "clicked", + G_CALLBACK(fileops_open_dialog), savesmp); - thing = gtk_button_new_with_label(_("Zoom out (-50%)")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_zoom_out_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); + thing = gui_get_widget(builder, "open_smp_tbutton", S_E_XML); gtk_widget_show(thing); + g_signal_connect_swapped(thing, "clicked", + G_CALLBACK(fileops_open_dialog), loadsmp); - thing = gtk_button_new_with_label(_("Reverse")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_reverse_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); + thing = gui_get_widget(builder, "open_smp", S_E_XML); gtk_widget_show(thing); + g_signal_connect_swapped(thing, "activate", + G_CALLBACK(fileops_open_dialog), loadsmp); - vbox = gtk_vbox_new(FALSE, 2); - gtk_widget_show(vbox); - gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); - - thing = gtk_button_new_with_label(_("Cut")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_cut_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); + thing = gui_get_widget(builder, "save_wav", S_E_XML); gtk_widget_show(thing); + g_signal_connect_swapped(thing, "activate", + G_CALLBACK(fileops_open_dialog), savesmp); - thing = gtk_button_new_with_label(_("Remove")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_remove_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); + list_data_sensitive = g_slist_prepend(list_data_sensitive, thing); + thing = gui_get_widget(builder, "save_reg", S_E_XML); gtk_widget_show(thing); + g_signal_connect_swapped(thing, "activate", + G_CALLBACK(fileops_open_dialog), savereg); - thing = gtk_button_new_with_label(_("Copy")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_copy_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); + list_data_sensitive = g_slist_prepend(list_data_sensitive, thing); + thing = gui_get_widget(builder, "fileop_sep", S_E_XML); gtk_widget_show(thing); +#endif - thing = gtk_button_new_with_label(_("Paste")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_paste_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); + thing = gui_get_widget(builder, "select_all_tbutton", S_E_XML); + list_data_sensitive = g_slist_prepend(list_data_sensitive, thing); + thing = gui_get_widget(builder, "select_none_tbutton", S_E_XML); + list_data_sensitive = g_slist_prepend(list_data_sensitive, thing); - thing = gtk_button_new_with_label(_("Clear Sample")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_clear_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); + thing = sample_display_new(TRUE, gui_settings.editor_mode); + gtk_box_pack_start(GTK_BOX(box), thing, TRUE, TRUE, 0); gtk_widget_show(thing); + g_signal_connect(thing, "loop_changed", + G_CALLBACK(sample_editor_display_loop_changed), NULL); + g_signal_connect(thing, "selection_changed", + G_CALLBACK(sample_editor_display_selection_changed), NULL); + g_signal_connect(thing, "motion_notify_event", + G_CALLBACK(sample_display_cursor_motion), NULL); + gtk_widget_add_events(thing, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); + g_signal_connect(thing, "enter_notify_event", + G_CALLBACK(sample_display_border_cross), GINT_TO_POINTER(TRUE)); + g_signal_connect(thing, "leave_notify_event", + G_CALLBACK(sample_display_border_cross), GINT_TO_POINTER(FALSE)); + sampledisplay = SAMPLE_DISPLAY(thing); + sample_display_enable_zero_line(SAMPLE_DISPLAY(thing), TRUE); + + sample_editor_hscrollbar = gtk_hscrollbar_new(NULL); + adj = gtk_range_get_adjustment(GTK_RANGE(sample_editor_hscrollbar)); + gtk_widget_show(sample_editor_hscrollbar); + gtk_box_pack_start(GTK_BOX(box), sample_editor_hscrollbar, FALSE, TRUE, 0); + scrollbar_cb_tag = g_signal_connect_swapped(sample_editor_hscrollbar, "value-changed", + G_CALLBACK(sample_editor_hscrollbar_changed), adj); + g_signal_connect_swapped(thing, "window_changed", + G_CALLBACK(sample_editor_display_window_changed), adj); + g_signal_connect_swapped(thing, "position_changed", + G_CALLBACK(sample_editor_display_position_changed), adj); + g_signal_connect_swapped(thing, "scroll-event", + G_CALLBACK(sample_editor_display_scrolled), adj); + + hbox = gtk_hbox_new(FALSE, 8); + list_data_sensitive = g_slist_prepend(list_data_sensitive, hbox); + gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 4); + gtk_widget_show(hbox); + + tags[SAMPLE_EDITOR_VOLUME] = gui_put_labelled_spin_button(hbox, _("Volume"), 0, 64, + &se_spins[SAMPLE_EDITOR_VOLUME], sample_editor_spin_volume_changed, NULL, TRUE); + tags[SAMPLE_EDITOR_PANNING] = gui_put_labelled_spin_button(hbox, _("Panning"), -128, 127, + &se_spins[SAMPLE_EDITOR_PANNING], sample_editor_spin_panning_changed, NULL, TRUE); + tags[SAMPLE_EDITOR_FINETUNE] = gui_put_labelled_spin_button(hbox, _("Finetune"), -128, 127, + &se_spins[SAMPLE_EDITOR_FINETUNE], sample_editor_spin_finetune_changed, NULL, TRUE); + tags[SAMPLE_EDITOR_RELNOTE] = gui_put_labelled_spin_button(hbox, _("RelNote"), -128, 127, + &se_spins[SAMPLE_EDITOR_RELNOTE], sample_editor_spin_relnote_changed, NULL, TRUE); + make_radio_group(resolutionlabels, hbox, resolution_radio, FALSE, FALSE, sample_editor_resolution_changed); - thing = gtk_button_new_with_label(_("Crop")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_crop_clicked), NULL); - gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); + thing = gtk_hseparator_new(); gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box), thing, FALSE, TRUE, 0); -#if (USE_SNDFILE || !defined (NO_AUDIOFILE)) && HAVE_DLFCN_H - { // hack, hack - void *handle, *function; -#ifdef DL_LAZY - handle = dlopen(NULL, DL_LAZY); -#else - handle = dlopen(NULL, RTLD_NOW); -#endif - function = dlsym(handle, "afSetVirtualPCMMapping"); - if(function == NULL) { - libaf2 = FALSE; - } - } -#endif + hbox = gtk_hbox_new(FALSE, 8); + list_data_sensitive = g_slist_prepend(list_data_sensitive, hbox); + gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 4); + gtk_widget_show(hbox); + + make_radio_group(looplabels, hbox, loopradio, FALSE, FALSE, sample_editor_loopradio_changed); + tag_loopstart = gui_put_labelled_spin_button(hbox, _("Start"), 0, 0, &spin_loopstart, + sample_editor_loop_changed, GINT_TO_POINTER(FALSE), TRUE); + tag_loopend = gui_put_labelled_spin_button(hbox, _("End"), 0, 0, &spin_loopend, + sample_editor_loop_changed, GINT_TO_POINTER(TRUE), TRUE); + sample_editor_loopradio_changed(GTK_TOGGLE_BUTTON(loopradio[0])); + gtk_builder_connect_signals(builder, NULL); + g_object_unref(builder); } -static void -sample_editor_block_loop_spins (int block) +void +sample_editor_set_mode(SampleEditorDisplay display, SampleDisplayMode mode) { - void (*func) (GtkObject*, GtkSignalFunc, gpointer); + SampleDisplay* disp = (display == SAMPLE_EDITOR_DISPLAY_EDITOR) ? sampledisplay : monitorscope; - func = block ? gtk_signal_handler_block_by_func : gtk_signal_handler_unblock_by_func; - - func(GTK_OBJECT(spin_loopstart), sample_editor_loop_changed, NULL); - func(GTK_OBJECT(spin_loopend), sample_editor_loop_changed, NULL); + if (disp && IS_SAMPLE_DISPLAY(disp)) { + sample_display_set_mode(disp, mode); + gtk_widget_queue_draw(GTK_WIDGET(disp)); + } } static void -sample_editor_blocked_set_loop_spins (int start, - int end) +sample_editor_blocked_set_loop_spins(int start, + int end) { + gdouble min, max; + sample_editor_block_loop_spins(1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_loopstart), start); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_loopend), end); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin_loopstart), 0, end - 1); + gtk_spin_button_get_range(GTK_SPIN_BUTTON(spin_loopend), &min, &max); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin_loopend), start + 1, max); sample_editor_block_loop_spins(0); } -static gint -sample_editor_idle_draw_function (struct SampleEditor *se) +static void +sample_editor_set_sensitive(gboolean sensitive) { - gtk_label_set(GTK_LABEL(se->label_selection), se->label_selection_new_text); - gtk_label_set(GTK_LABEL(se->label_length), se->label_length_new_text); - gtk_idle_remove(se->idle_handler); - se->idle_handler = 0; - return TRUE; + GSList *l = list_data_sensitive; + + for (;l;l = l->next) + gtk_widget_set_sensitive(GTK_WIDGET(l->data), sensitive); } -static void -sample_editor_set_selection_label (int start, - int end) +static gboolean +sample_editor_update_idle_func(guint *handler) { STSample *sts = current_sample; + st_mixer_sample_info *s; - if(start > -1) { - sprintf(se->label_selection_new_text, ("%d - %d"), start, end); - sprintf(se->label_length_new_text, ("%d"), end-start); - } else { - strcpy(se->label_selection_new_text, _("(no selection)")); - sprintf(se->label_length_new_text, ("%d"), sts->sample.length); - } + gui_block_signals(se_spins, tags, TRUE); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(se_spins[SAMPLE_EDITOR_VOLUME]), sts->volume); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(se_spins[SAMPLE_EDITOR_PANNING]), sts->panning - 128); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(se_spins[SAMPLE_EDITOR_FINETUNE]), sts->finetune); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(se_spins[SAMPLE_EDITOR_RELNOTE]), sts->relnote); + gui_block_signals(se_spins, tags, FALSE); - /* Somewhere on the way to gtk+-1.2.10, gtk_label_set_text() has - become incredibly slow. So slow that my computer is overwhelmed - with the frequent calls to this function when one does a - selection with the mouse -- with the consequence that the idle - function updating the visual selection in the sample display - widget is called only very seldom. + s = &sts->sample; - That's why I'm doing the gtk_label_set_text() only if the - computer is idle. */ + sample_editor_block_loop_spins(1); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(loopradio[s->looptype]), TRUE); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin_loopstart), 0, s->length ? s->loopend - 1 : 0); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin_loopend), s->length ? s->loopstart + 1 : 1, s->length); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_loopstart), (s->loopstart)); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_loopend), (s->loopend)); + sample_editor_block_loop_spins(0); - if(!se->idle_handler) { - se->idle_handler = gtk_idle_add((GtkFunction)sample_editor_idle_draw_function, - (gpointer)se); - g_assert(se->idle_handler != 0); + if (s->data) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(resolution_radio[sts->treat_as_8bit ? 0 : 1]), TRUE); + sample_editor_set_sensitive(TRUE); } -} + sample_editor_update_status(); -static void -sample_editor_blocked_set_display_loop (int start, - int end) -{ - gtk_signal_handler_block_by_func(GTK_OBJECT(sampledisplay), GTK_SIGNAL_FUNC(sample_editor_display_loop_changed), NULL); - sample_display_set_loop(sampledisplay, start, end); - gtk_signal_handler_unblock_by_func(GTK_OBJECT(sampledisplay), GTK_SIGNAL_FUNC(sample_editor_display_loop_changed), NULL); + *handler = 0; + return FALSE; } -void -sample_editor_update (void) +void sample_editor_update(void) { - STSample *sts = current_sample; - st_mixer_sample_info *s; - char buf[20]; - int m = xm_get_modified(); + static guint handler = 0; - sample_display_set_data_16(sampledisplay, NULL, 0, FALSE); + STSample* sts = current_sample; - if(!sts || !sts->sample.data) { - gtk_widget_set_sensitive(se->vertical_boxes[0], FALSE); - gtk_widget_set_sensitive(se->vertical_boxes[1], FALSE); - gtk_widget_set_sensitive(se->vertical_boxes[2], FALSE); - gtk_widget_set_sensitive(savebutton, 0); - gtk_widget_set_sensitive(savebutton_rgn, 0); - } + sample_display_set_data(sampledisplay, NULL, ST_MIXER_FORMAT_S16_LE, 0, FALSE); - if(!sts) { - return; - } + if (!sts || !sts->sample.data) + sample_editor_set_sensitive(FALSE); - gtk_entry_set_text(GTK_ENTRY(gui_cursmpl_name), sts->name); - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_volume), sts->volume); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_panning), sts->panning - 128); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_finetune), sts->finetune); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_relnote), sts->relnote); + if (!sts) { + return; + } - s = &sts->sample; + gui_block_smplname_entry(TRUE); /* To prevent the callback */ + gtk_entry_set_text(GTK_ENTRY(gui_cursmpl_name), sts->utf_name); + gui_block_smplname_entry(FALSE); - sprintf(buf, ("%d"), s->length); - gtk_label_set(GTK_LABEL(se->label_length), buf); + if (sts->sample.data) { + sample_display_set_data(sampledisplay, sts->sample.data, ST_MIXER_FORMAT_S16_LE, sts->sample.length, FALSE); - sample_editor_block_loop_spins(1); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(loopradio[s->looptype]), TRUE); - gui_update_spin_adjustment(GTK_SPIN_BUTTON(spin_loopstart), 0, s->length - 1); - gui_update_spin_adjustment(GTK_SPIN_BUTTON(spin_loopend), 1, s->length); - sample_editor_block_loop_spins(0); - sample_editor_blocked_set_loop_spins(s->loopstart, s->loopend); - - sample_editor_set_selection_label(-1, 0); + if (sts->sample.looptype != ST_MIXER_SAMPLE_LOOPTYPE_NONE) + sample_editor_blocked_set_display_loop(sts->sample.loopstart, sts->sample.loopend); + } - if(s->data) { - sample_display_set_data_16(sampledisplay, s->data, s->length, FALSE); + if (!handler) + handler = g_idle_add((GSourceFunc)sample_editor_update_idle_func, &handler); + g_assert(handler != 0); +} - if(s->looptype != ST_MIXER_SAMPLE_LOOPTYPE_NONE) { - sample_editor_blocked_set_display_loop(s->loopstart, s->loopend); - } +void +sample_editor_remove_clicked(void) +{ + sample_editor_copy_cut_common(FALSE, TRUE); +} - gtk_widget_set_sensitive(se->vertical_boxes[0], TRUE); - gtk_widget_set_sensitive(se->vertical_boxes[1], TRUE); - gtk_widget_set_sensitive(se->vertical_boxes[2], TRUE); +void +sample_editor_select_none_clicked(void) +{ + sample_display_set_selection(sampledisplay, -1, 1); +} -#if USE_SNDFILE || !defined (NO_AUDIOFILE) - gtk_widget_set_sensitive(savebutton, 1); - gtk_widget_set_sensitive(savebutton_rgn, 1); -#endif - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(resolution_radio[sts->treat_as_8bit ? 0 : 1]), TRUE); - } +void +sample_editor_select_all_clicked(void) +{ + g_return_if_fail(current_sample != NULL); - xm_set_modified(m); + sample_display_set_selection(sampledisplay, + 0, current_sample->sample.length); } gboolean -sample_editor_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval, - gboolean pressed) +sample_editor_handle_keys(int shift, + int ctrl, + int alt, + guint32 keyval, + gboolean pressed) { - int i; + gboolean is_note = FALSE; int s = sampledisplay->sel_start, e = sampledisplay->sel_end; + int modifiers = ENCODE_MODIFIERS(shift, ctrl, alt); - if(!pressed) - return FALSE; - - if(s == -1) { - s = 0; - e = current_sample->sample.length; - } - - i = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); - if(i != -1 && KEYS_MEANING_TYPE(i) == KEYS_MEANING_NOTE) { - i += 12 * gui_get_current_octave_value() + 1; - if(i < 96 && current_sample != NULL) { - gui_play_note_full(tracker->cursor_ch, i, current_sample, s, e - s); - } - return TRUE; - } + if (s == -1) { + s = 0; + e = current_sample->sample.length; + } + + if (pressed) + switch (keyval) { + case GDK_KEY_Delete: + if (!(shift || alt || ctrl)) { + sample_editor_remove_clicked(); + return TRUE; + } + break; + case 'a': + if (ctrl && !alt) { + sample_editor_select_all_clicked(); + return TRUE; + } + break; + case 'A': + if (ctrl && !alt) { + sample_editor_select_none_clicked(); + return TRUE; + } + break; + default: + break; + } - return FALSE; + gui_play_note_no_repeat(keyval, modifiers, pressed, + current_sample, s, e - s, tracker->cursor_ch, TRUE, &is_note, FALSE); + return is_note; } -void -sample_editor_set_sample (STSample *s) +void sample_editor_set_sample(STSample* s) { current_sample = s; sample_editor_update(); } static void -sample_editor_update_mixer_position (double songtime) +sample_editor_update_mixer_position(double songtime) { - audio_mixer_position *p; + audio_mixer_position* p; int i; - if(songtime >= 0.0 && current_sample && (p = time_buffer_get(audio_mixer_position_tb, songtime))) { - for(i = 0; i < sizeof(p->dump) / sizeof(p->dump[0]); i++) { - if(p->dump[i].current_sample == ¤t_sample->sample) { - sample_display_set_mixer_position(sampledisplay, p->dump[i].current_position); - return; - } - } + if (songtime >= 0.0 && current_sample && (p = time_buffer_get(audio_mixer_position_tb, songtime))) { + for (i = 0; i < ARRAY_SIZE(p->dump); i++) { + if (p->dump[i].current_sample == ¤t_sample->sample) { + sample_display_set_mixer_position(sampledisplay, p->dump[i].current_position); + g_free(p); + return; + } + } + g_free(p); } sample_display_set_mixer_position(sampledisplay, -1); } static gint -sample_editor_update_timeout (gpointer data) +sample_editor_update_timeout(gpointer data) { - double display_songtime = current_driver->get_play_time(current_driver_object); + double display_songtime; - sample_editor_update_mixer_position(display_songtime); + if (current_driver == NULL) + return FALSE; - // Not quite the right place for this, but anyway... - gui_clipping_indicator_update(display_songtime); + display_songtime = current_driver->get_play_time(current_driver_object); + sample_editor_update_mixer_position(display_songtime); return TRUE; } -void -sample_editor_start_updating (void) +void sample_editor_start_updating(void) { - if(gtktimer != -1) - return; + if (gtktimer != -1) + return; - gtktimer = gtk_timeout_add(1000 / update_freq, sample_editor_update_timeout, NULL); + gtktimer = g_timeout_add(1000 / gui_settings.scopes_update_freq, sample_editor_update_timeout, NULL); } -void -sample_editor_stop_updating (void) +void sample_editor_stop_updating(void) { - if(gtktimer == -1) - return; + if (gtktimer == -1) + return; - gtk_timeout_remove(gtktimer); + g_source_remove(gtktimer); gtktimer = -1; - gui_clipping_indicator_update(-1.0); sample_editor_update_mixer_position(-1.0); } static void -sample_editor_spin_volume_changed (GtkSpinButton *spin) +sample_editor_spin_volume_changed(GtkSpinButton* spin) { g_return_if_fail(current_sample != NULL); + history_log_spin_button(spin, _("Sample volume setting"), HISTORY_FLAG_LOG_ALL, + current_sample->volume); current_sample->volume = gtk_spin_button_get_value_as_int(spin); - xm_set_modified(1); } static void -sample_editor_spin_panning_changed (GtkSpinButton *spin) +sample_editor_spin_panning_changed(GtkSpinButton* spin) { g_return_if_fail(current_sample != NULL); - current_sample->panning = gtk_spin_button_get_value_as_int(spin) + 128; - xm_set_modified(1); + if (current_sample->sample.data) { + history_log_spin_button(spin, _("Sample panning setting"), HISTORY_FLAG_LOG_ALL, + current_sample->panning); + current_sample->panning = gtk_spin_button_get_value_as_int(spin) + 128; + } } static void -sample_editor_spin_finetune_changed (GtkSpinButton *spin) +sample_editor_spin_finetune_changed(GtkSpinButton* spin) { - g_return_if_fail(current_sample != NULL); + if (!current_sample) + return; - current_sample->finetune = gtk_spin_button_get_value_as_int(spin); - xm_set_modified(1); + if (current_sample->sample.data) { + history_log_spin_button(spin, _("Sample finetune setting"), HISTORY_FLAG_LOG_ALL, + current_sample->finetune); + current_sample->finetune = gtk_spin_button_get_value_as_int(spin); + } } static void -sample_editor_spin_relnote_changed (GtkSpinButton *spin) +sample_editor_spin_relnote_changed(GtkSpinButton* spin) { - g_return_if_fail(current_sample != NULL); + if (!current_sample) + return; + history_log_spin_button(spin, _("Sample relnote setting"), HISTORY_FLAG_LOG_ALL, + current_sample->relnote); current_sample->relnote = gtk_spin_button_get_value_as_int(spin); - xm_set_modified(1); } +struct LoopArg { + gint start, end, type; +}; + static void -sample_editor_selection_to_loop_clicked (void) +sample_loop_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) { - int s = sampledisplay->sel_start, e = sampledisplay->sel_end; - - g_return_if_fail(current_sample != NULL); - g_return_if_fail(current_sample->sample.data != NULL); + struct LoopArg* la = arg; + STSample* s = data; + gint tmp_val; - if(s == -1) { - return; - } + g_assert(s != NULL); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(loopradio[0]), TRUE); - sample_editor_lock_sample(); - current_sample->sample.loopend = e; - current_sample->sample.loopstart = s; + tmp_val = s->sample.loopstart; + s->sample.loopstart = la->start; + la->start = tmp_val; + tmp_val = s->sample.loopend; + s->sample.loopend = la->end; + la->end = tmp_val; + tmp_val = s->sample.looptype; + s->sample.looptype = la->type; + la->type = tmp_val; sample_editor_unlock_sample(); - sample_editor_blocked_set_loop_spins(s, e); - - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(loopradio[1]), TRUE); - xm_set_modified(1); + sample_editor_update(); } - -static void -sample_editor_loop_changed () +void +sample_editor_selection_to_loop_clicked(void) { - int s = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_loopstart)), - e = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_loopend)); + int s = sampledisplay->sel_start, e = sampledisplay->sel_end; + struct LoopArg* la; g_return_if_fail(current_sample != NULL); g_return_if_fail(current_sample->sample.data != NULL); - g_return_if_fail(current_sample->sample.looptype != ST_MIXER_SAMPLE_LOOPTYPE_NONE); - if(s != current_sample->sample.loopstart || e != current_sample->sample.loopend) { - if(e <= s) { - e = s + 1; - sample_editor_blocked_set_loop_spins(s, e); - } + if (s == -1) { + return; + } - sample_editor_lock_sample(); - current_sample->sample.loopend = e; - current_sample->sample.loopstart = s; - sample_editor_unlock_sample(); + la = g_new(struct LoopArg, 1); + la->start = current_sample->sample.loopstart; + la->end = current_sample->sample.loopend; + la->type = current_sample->sample.looptype; + history_log_action(HISTORY_ACTION_POINTER, _("Sample loop setting"), HISTORY_FLAG_LOG_ALL, + sample_loop_undo, current_sample, sizeof(struct LoopArg), la); - sample_editor_blocked_set_display_loop(s, e); + sample_editor_lock_sample(); + current_sample->sample.loopend = e; + current_sample->sample.loopstart = s; + if (current_sample->sample.looptype == ST_MIXER_SAMPLE_LOOPTYPE_NONE) { + current_sample->sample.looptype = ST_MIXER_SAMPLE_LOOPTYPE_AMIGA; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(loopradio[1]), TRUE); } + sample_editor_unlock_sample(); - xm_set_modified(1); + sample_editor_blocked_set_loop_spins(s, e); + sample_editor_blocked_set_display_loop(s, e); } static void -sample_editor_display_loop_changed (SampleDisplay *sample_display, - int start, - int end) +sample_editor_display_loop_changed(SampleDisplay* sample_display, + int start, + int end) { g_return_if_fail(current_sample != NULL); g_return_if_fail(current_sample->sample.data != NULL); g_return_if_fail(current_sample->sample.looptype != ST_MIXER_SAMPLE_LOOPTYPE_NONE); g_return_if_fail(start < end); - if(start != current_sample->sample.loopstart || end != current_sample->sample.loopend) { - sample_editor_blocked_set_loop_spins(start, end); - - sample_editor_lock_sample(); - current_sample->sample.loopend = end; - current_sample->sample.loopstart = start; - sample_editor_unlock_sample(); - } - - xm_set_modified(1); + if (start != current_sample->sample.loopstart) + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_loopstart), start); + if (end != current_sample->sample.loopend) + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_loopend), end); } static void -sample_editor_select_none_clicked (void) -{ - sample_display_set_selection(sampledisplay, -1, 1); -} - -static void -sample_editor_select_all_clicked (void) -{ - g_return_if_fail(current_sample != NULL); - - sample_display_set_selection(sampledisplay, - 0, current_sample->sample.length); -} - -static void -sample_editor_display_selection_changed (SampleDisplay *sample_display, - int start, - int end) +sample_editor_display_selection_changed(SampleDisplay* sample_display, + int start, + int end) { g_return_if_fail(current_sample != NULL); g_return_if_fail(current_sample->sample.data != NULL); g_return_if_fail(start < end); - sample_editor_set_selection_label(start, end); + sample_editor_update_status(); } static void -sample_editor_hscrollbar_changed (GtkAdjustment *adj) +sample_editor_display_window_changed(GtkAdjustment *adj, + int start, + int end, + SampleDisplay* s) { - sample_display_set_window(sampledisplay, - adj->value, - adj->value + sampledisplay->win_length); + const gint w = end - start; + const gdouble step = (s->width == 0 || s->width >= w ) ? 1.0 : (gdouble)w / (gdouble)s->width; + + if (current_sample == NULL) + return; + + g_signal_handler_block(G_OBJECT(sample_editor_hscrollbar), scrollbar_cb_tag); + gtk_adjustment_configure(adj, start, 0, current_sample->sample.length, + step, w > 2 ? w - 2 : 1, w); + g_signal_handler_unblock(G_OBJECT(sample_editor_hscrollbar), scrollbar_cb_tag); } static void -sample_editor_display_window_changed (SampleDisplay *sample_display, - int start, - int end) +sample_editor_display_position_changed(GtkAdjustment *adj, + int pos) { - if(current_sample == NULL) - return; + if (current_sample == NULL) + return; - gui_update_range_adjustment(GTK_RANGE(sample_editor_hscrollbar), - start, - current_sample->sample.length, - end - start, - sample_editor_hscrollbar_changed); + g_signal_handler_block(G_OBJECT(sample_editor_hscrollbar), scrollbar_cb_tag); + gtk_adjustment_set_value(adj, pos); + g_signal_handler_unblock(G_OBJECT(sample_editor_hscrollbar), scrollbar_cb_tag); } static void -sample_editor_loopradio_changed (void) +sample_editor_loopradio_changed(GtkToggleButton* tb) { - int n = find_current_toggle(loopradio, 3); + gint n; + + if (!gtk_toggle_button_get_active(tb)) + return; + n = find_current_toggle(loopradio, 3); gtk_widget_set_sensitive(spin_loopstart, n != 0); gtk_widget_set_sensitive(spin_loopend, n != 0); - - if(current_sample != NULL) { - if(current_sample->sample.looptype != n) { - sample_editor_lock_sample(); - current_sample->sample.looptype = n; - sample_editor_unlock_sample(); - } - if(n != ST_MIXER_SAMPLE_LOOPTYPE_NONE) { - sample_editor_blocked_set_display_loop(current_sample->sample.loopstart, current_sample->sample.loopend); - } else { - sample_editor_blocked_set_display_loop(-1, 1); - } + if (current_sample != NULL) { + if (current_sample->sample.looptype == n) + return; + + history_log_radio_group(loopradio, _("Sample loop type setting"), + HISTORY_FLAG_LOG_ALL, current_sample->sample.looptype, 3); + sample_editor_lock_sample(); + current_sample->sample.looptype = n; + sample_editor_unlock_sample(); + + if (n != ST_MIXER_SAMPLE_LOOPTYPE_NONE) { + sample_editor_blocked_set_display_loop(current_sample->sample.loopstart, current_sample->sample.loopend); + } else { + sample_editor_blocked_set_display_loop(-1, 1); + } } - - xm_set_modified(1); } +struct SampleBackup { + STSample sample; + gint16 data[1]; +}; + static void -sample_editor_resolution_changed (void) +sample_total_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) { - STSample *sts = current_sample; - st_mixer_sample_info *s; - int n = find_current_toggle(resolution_radio, 2); + STSample *sample = data; + struct SampleBackup *sb = arg; + const gsize data_length = sample->sample.length * sizeof(sample->sample.data[0]); + gint16* tmp_data = NULL; + STSample tmp_smp; + GMutex tmp_lock; + + if (data_length) { + tmp_data = g_malloc(data_length); + if (!tmp_data) { + gui_oom_error(); + return; + } + memcpy(tmp_data, sample->sample.data, data_length); + } + tmp_smp = *sample; - if(!sts) - return; + g_mutex_lock(&sample->sample.lock); + tmp_lock = sample->sample.lock; + if (sample->sample.length && sample->sample.data) + g_free(sample->sample.data); + *sample = sb->sample; + if (sample->sample.length) { + sample->sample.data = g_new(gint16, sample->sample.length); + memcpy(sample->sample.data, sb->data, sample->sample.length * sizeof(sb->data[0])); + } else + sample->sample.data = NULL; + sample->sample.lock = tmp_lock; + g_mutex_unlock(&sample->sample.lock); + + sb->sample = tmp_smp; + if (tmp_data) { + memcpy(sb->data, tmp_data, sb->sample.sample.length * sizeof(tmp_data[0])); + g_free(tmp_data); + } + + if (sample == current_sample) + sample_editor_update(); + modinfo_update_instrument(ins - 1); +} - s = &sts->sample; - if(n == 0 && !sts->treat_as_8bit) { - st_sample_cutoff_lowest_8_bits(s->data, s->length); - } +gboolean +sample_editor_check_and_log_sample(STSample* sample, + const gchar* title, + const gint flags, + const gsize data_length) +{ + const gsize arg_size = ((data_length ? data_length : sample->sample.length) - 1) + * sizeof(sample->sample.data[0]) + sizeof(struct SampleBackup); + + if (history_check_size(arg_size)) { + /* Undo is possible */ + struct SampleBackup* arg = g_malloc(arg_size); + + if (!arg) { + gui_oom_error(); + return FALSE; + } + arg->sample = *sample; + memcpy(arg->data, sample->sample.data, + sample->sample.length * sizeof(sample->sample.data[0])); + history_log_action(HISTORY_ACTION_POINTER, _(title), flags, + sample_total_undo, sample, arg_size, arg); + } else if (!history_query_oversized(mainwindow)) + /* User rejected to continue without undo */ + return FALSE; - sts->treat_as_8bit = (n == 0); + return TRUE; +} + +struct RangeBackup { + gsize start, end; + gint16 data[1]; +}; + +static void +sample_range_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + STSample *sample = data; + struct RangeBackup *rb = arg; + const gsize data_length = (rb->end - rb->start) * sizeof(sample->sample.data[0]); + gint16* tmp_data = g_malloc(data_length); + + if (!tmp_data) { + gui_oom_error(); + return; + } + memcpy(tmp_data, &sample->sample.data[rb->start], data_length); + g_mutex_lock(&sample->sample.lock); + memcpy(&sample->sample.data[rb->start], rb->data, data_length); + g_mutex_unlock(&sample->sample.lock); + memcpy(rb->data, tmp_data, data_length); + + g_free(tmp_data); + if (sample == current_sample) + sample_editor_update(); +} + +static gboolean +sample_editor_check_and_log_range(STSample* sample, + const gchar* title, + const gint flags, + const gsize start, + const gsize end) +{ + const gsize arg_size = (end - start - 1) * sizeof(sample->sample.data[0]) + + sizeof(struct RangeBackup); + + g_assert(end > start); + + if (history_check_size(arg_size)) { + /* Undo is possible */ + struct RangeBackup* arg = g_malloc(arg_size); + + if (!arg) { + gui_oom_error(); + return FALSE; + } + arg->start = start; + arg->end = end; + memcpy(arg->data, &sample->sample.data[start], + (end - start) * sizeof(sample->sample.data[0])); + history_log_action(HISTORY_ACTION_POINTER, _(title), flags, + sample_range_undo, sample, arg_size, arg); + } else if (!history_query_oversized(mainwindow)) + /* User rejected to continue without undo */ + return FALSE; - xm_set_modified(1); + return TRUE; } static void -sample_editor_clear_clicked (void) +sample_editor_do_clear(const gchar* title) { - STInstrument *instr; + STInstrument* instr; + gint nsam; sample_editor_lock_sample(); - st_clean_sample(current_sample, NULL); - instr = instrument_editor_get_instrument(); - if(st_instrument_num_samples(instr) == 0) { - instrument_editor_clear_current_instrument(); + nsam = st_instrument_num_samples(instr); + if (!nsam) /* All samples are empty, nothing to do */ + return; + + if (nsam > 1) { + if (!sample_editor_check_and_log_sample(current_sample, + title, HISTORY_FLAG_LOG_ALL, 0)) + return; } else { - instrument_editor_update(); - sample_editor_update(); - modinfo_update_all(); + if (!instrument_editor_check_and_log_instrument(instr, + title, HISTORY_FLAG_LOG_ALL, 0)) + return; } + st_clean_sample_full(current_sample, NULL, NULL, FALSE); + + if (nsam == 1) /* Was 1 _before_ cleaning */ + st_clean_instrument_full(instr, NULL, FALSE); + + instrument_editor_update(TRUE); + sample_editor_update(); sample_editor_unlock_sample(); +} - xm_set_modified(1); +void +sample_editor_clear_clicked(void) +{ + sample_editor_do_clear(N_("Sample cleaning")); } -static void -sample_editor_crop_clicked (void) +void +sample_editor_crop_clicked(void) { - sample_editor_crop(); + gint l, start = sampledisplay->sel_start, end = sampledisplay->sel_end; + + if (current_sample == NULL || start == -1) + return; + + if (!sample_editor_check_and_log_sample(current_sample, + N_("Sample cropping"), HISTORY_FLAG_LOG_ALL, 0)) + return; + l = current_sample->sample.length; + + sample_editor_lock_sample(); + sample_editor_delete(current_sample, 0, start); + sample_editor_delete(current_sample, end - start, l - start); + sample_editor_unlock_sample(); + + sample_editor_update(); } -static void -sample_editor_show_all_clicked (void) +void +sample_editor_show_all_clicked(void) { - if(current_sample == NULL || current_sample->sample.data == NULL) - return; + if (current_sample == NULL || current_sample->sample.data == NULL) + return; sample_display_set_window(sampledisplay, 0, current_sample->sample.length); } -static void -sample_editor_zoom_in_clicked (void) +void +sample_editor_zoom_in_clicked(void) { int ns = sampledisplay->win_start, - ne = sampledisplay->win_start + sampledisplay->win_length; + ne = sampledisplay->win_start + sampledisplay->win_length; int l; - - if(current_sample == NULL || current_sample->sample.data == NULL) - return; + + if (current_sample == NULL || current_sample->sample.data == NULL) + return; l = sampledisplay->win_length / 4; ns += l; ne -= l; - if(ne <= ns) - ne = ns + 1; + if (ne <= ns) + ne = ns + 1; sample_display_set_window(sampledisplay, ns, ne); } -static void -sample_editor_zoom_out_clicked (void) +void +sample_editor_zoom_out_clicked(void) { int ns = sampledisplay->win_start, - ne = sampledisplay->win_start + sampledisplay->win_length; + ne = sampledisplay->win_start + sampledisplay->win_length; int l; - - if(current_sample == NULL || current_sample->sample.data == NULL) - return; + + if (current_sample == NULL || current_sample->sample.data == NULL) + return; l = sampledisplay->win_length / 2; - if(ns > l) - ns -= l; + if (ns > l) + ns -= l; else - ns = 0; + ns = 0; - if(ne <= current_sample->sample.length - l) - ne += l; + if (ne <= current_sample->sample.length - l) + ne += l; else - ne = current_sample->sample.length; + ne = current_sample->sample.length; sample_display_set_window(sampledisplay, ns, ne); } +void +sample_editor_zoom_to_selection_clicked(void) +{ + gint ss, se, sl; + + if (current_sample == NULL || current_sample->sample.data == NULL || sampledisplay->sel_start == -1) + return; + + sl = current_sample->sample.length; + if (sl <= 2) + return; + + ss = sampledisplay->sel_start; + se = sampledisplay->sel_end; + /* There's no sence in zooming to one sample, but this causes some problems. + In order to avoid this we restrict the minimal zoom size to 2 samples */ + if (se <= ss + 1) + se = ss + 2; + if (se >= sl) { + ss -= (se - sl); + se = sl; + } + + sample_display_set_window(sampledisplay, ss, se); +} + static void -sample_editor_zoom_to_selection_clicked (void) +copy_smp_to_tmp(STSample* smp) { - if(current_sample == NULL || current_sample->sample.data == NULL || sampledisplay->sel_start == -1) - return; - sample_display_set_window(sampledisplay, sampledisplay->sel_start, sampledisplay->sel_end); + if (!tmp_sample) + tmp_sample = g_new0(STSample, 1); + if (!tmp_sample) { + gui_oom_error(); + return; + } + st_copy_sample(smp, tmp_sample); } void -sample_editor_copy_cut_common (gboolean copy, - gboolean spliceout) +sample_editor_xcopy_samples(STSample* src_smp, + STSample* dest_smp, + const gboolean xchg) +{ + if (xchg) { + /* We need a place to store one of the samples during the exchange */ + copy_smp_to_tmp(dest_smp); + } + g_mutex_lock(&dest_smp->sample.lock); + st_copy_sample(src_smp, dest_smp); + g_mutex_unlock(&dest_smp->sample.lock); + if (xchg) { + g_mutex_lock(&src_smp->sample.lock); + st_copy_sample(tmp_sample, src_smp); + g_mutex_unlock(&src_smp->sample.lock); + } +} + +void sample_editor_copy_cut_common(gboolean copy, + gboolean spliceout) { int cutlen, newlen; - gint16 *newsample; - STSample *oldsample = current_sample; + gint16* newsample; + STSample* oldsample = current_sample; int ss = sampledisplay->sel_start, se; - - if(oldsample == NULL || ss == -1) - return; - + + if (oldsample == NULL || oldsample->sample.length == 0) + return; + se = sampledisplay->sel_end; cutlen = se - ss; newlen = oldsample->sample.length - cutlen; - if(copy) { - if(copybuffer) { - free(copybuffer); - copybuffer = NULL; - } - copybufferlen = cutlen; - copybuffer = malloc(copybufferlen * 2); - if(!copybuffer) { - error_error(_("Out of memory for copybuffer.\n")); - } else { - memcpy(copybuffer, - oldsample->sample.data + ss, - cutlen * 2); - } - memcpy(©buffer_sampleinfo, oldsample, sizeof(STSample)); - } - - if(!spliceout) - return; - - if(newlen == 0) { - sample_editor_clear_clicked(); - return; + if (copy) { + if (ss == -1) { /* Whole sample */ + copy_smp_to_tmp(oldsample); + copy_whole_sample = TRUE; + newlen = 0; /* If we will cut sample, cut it all */ + } else { + if (copybuffer) { + free(copybuffer); + copybuffer = NULL; + } + copybufferlen = cutlen; + copybuffer = malloc(copybufferlen * 2); + if (!copybuffer) + gui_oom_error(); + else { + memcpy(copybuffer, + oldsample->sample.data + ss, + cutlen * 2); + } + memcpy(©buffer_sampleinfo, oldsample, sizeof(STSample)); + copy_whole_sample = FALSE; + } + } + + if (!spliceout || ss == -1) + return; + + if (newlen == 0) { + sample_editor_do_clear(N_("Sample cut")); + return; } + if (!sample_editor_check_and_log_sample(current_sample, + N_("Sample cut"), HISTORY_FLAG_LOG_ALL, 0)) + return; + newsample = malloc(newlen * 2); - if(!newsample) - return; + if (!newsample) + return; sample_editor_lock_sample(); memcpy(newsample, - oldsample->sample.data, - ss * 2); + oldsample->sample.data, + ss * 2); memcpy(newsample + ss, - oldsample->sample.data + se, - (oldsample->sample.length - se) * 2); + oldsample->sample.data + se, + (oldsample->sample.length - se) * 2); free(oldsample->sample.data); @@ -1102,190 +1439,285 @@ oldsample->sample.length = newlen; /* Move loop start and end along with splice */ - if(oldsample->sample.loopstart > ss && - oldsample->sample.loopend < se) { - /* loop was wholly within selection -- remove it */ - oldsample->sample.looptype = ST_MIXER_SAMPLE_LOOPTYPE_NONE; - oldsample->sample.loopstart = 0; - oldsample->sample.loopend = 1; + if (oldsample->sample.loopstart > ss && oldsample->sample.loopend < se) { + /* loop was wholly within selection -- remove it */ + oldsample->sample.looptype = ST_MIXER_SAMPLE_LOOPTYPE_NONE; + oldsample->sample.loopstart = 0; + oldsample->sample.loopend = 1; } else { - if(oldsample->sample.loopstart > se) { - /* loopstart was after selection */ - oldsample->sample.loopstart -= (se-ss); - } else if(oldsample->sample.loopstart > ss) { - /* loopstart was within selection */ - oldsample->sample.loopstart = ss; - } - - if(oldsample->sample.loopend > se) { - /* loopend was after selection */ - oldsample->sample.loopend -= (se-ss); - } else if(oldsample->sample.loopend > ss) { - /* loopend was within selection */ - oldsample->sample.loopend = ss; - } + if (oldsample->sample.loopstart > se) { + /* loopstart was after selection */ + oldsample->sample.loopstart -= (se - ss); + } else if (oldsample->sample.loopstart > ss) { + /* loopstart was within selection */ + oldsample->sample.loopstart = ss; + } + + if (oldsample->sample.loopend > se) { + /* loopend was after selection */ + oldsample->sample.loopend -= (se - ss); + } else if (oldsample->sample.loopend > ss) { + /* loopend was within selection */ + oldsample->sample.loopend = ss; + } } st_sample_fix_loop(oldsample); sample_editor_unlock_sample(); sample_editor_set_sample(oldsample); - xm_set_modified(1); } -static void -sample_editor_cut_clicked (void) +void +sample_editor_cut_clicked(void) { sample_editor_copy_cut_common(TRUE, TRUE); } -static void -sample_editor_remove_clicked (void) -{ - sample_editor_copy_cut_common(FALSE, TRUE); -} - -static void -sample_editor_copy_clicked (void) +void +sample_editor_copy_clicked(void) { sample_editor_copy_cut_common(TRUE, FALSE); } static void -sample_editor_init_sample (const char *samplename) +sample_editor_init_sample_full(STSample* sample, const char* samplename) { - STInstrument *instr; + STInstrument* instr; - st_clean_sample(current_sample, NULL); - instr = instrument_editor_get_instrument(); - if(st_instrument_num_samples(instr) == 0) { - st_clean_instrument(instr, samplename); - memset(instr->samplemap, gui_get_current_sample(), sizeof(instr->samplemap)); - } - - st_clean_sample(current_sample, samplename); - - current_sample->volume = 64; - current_sample->finetune = 0; - current_sample->panning = 128; - current_sample->relnote = 0; -} - -void -sample_editor_paste_clicked (void) -{ - gint16 *newsample; - STSample *oldsample = current_sample; - int ss = sampledisplay->sel_start, newlen; - int update_ie = 0; - - if(oldsample == NULL || copybuffer == NULL) - return; - - if(!oldsample->sample.data) { - /* pasting into empty sample */ - sample_editor_lock_sample(); - sample_editor_init_sample(_("")); - oldsample->treat_as_8bit = copybuffer_sampleinfo.treat_as_8bit; - oldsample->volume = copybuffer_sampleinfo.volume; - oldsample->finetune = copybuffer_sampleinfo.finetune; - oldsample->panning = copybuffer_sampleinfo.panning; - oldsample->relnote = copybuffer_sampleinfo.relnote; - sample_editor_unlock_sample(); - ss = 0; - update_ie = 1; + if (st_instrument_num_samples(instr) == 0) { + st_clean_instrument(instr, samplename); + memset(instr->samplemap, gui_get_current_sample(), sizeof(instr->samplemap)); + if (samplename) + st_set_sample_name(sample, samplename); + } else + st_clean_sample(sample, samplename, NULL); + + sample->volume = 64; + sample->finetune = 0; + sample->panning = 128; + sample->relnote = 0; +} + +static inline void +sample_editor_init_sample(const char* samplename) +{ + sample_editor_init_sample_full(current_sample, samplename); +} + +void sample_editor_paste_clicked(void) +{ + gint16* newsample; + STSample* oldsample = current_sample; + gint ss = sampledisplay->sel_start, newlen; + gboolean update_ie = FALSE; + + if (oldsample == NULL) + return; + + if (copy_whole_sample) { + if (!tmp_sample) + return; + + if (!oldsample->sample.data) { + STInstrument* curins = instrument_editor_get_instrument(); + + if (!st_instrument_num_samples(curins)) { + /* pasting into empty instrument; backing up the whole instrument */ + const gsize i_size = sizeof(STInstrument) + copybufferlen * sizeof(oldsample->sample.data[0]); + + if (!instrument_editor_check_and_log_instrument(curins, N_("Sample paste"), + HISTORY_FLAG_LOG_ALL, i_size)) + return; + sample_editor_init_sample(NULL); + } else { + if (!sample_editor_check_and_log_sample(current_sample, + N_("Sample paste"), HISTORY_FLAG_LOG_ALL, tmp_sample->sample.length)) + return; + } + update_ie = TRUE; + } else { + if (!sample_editor_check_and_log_sample(current_sample, + N_("Sample paste"), HISTORY_FLAG_LOG_ALL, + MAX(tmp_sample->sample.length, oldsample->sample.length))) + return; + } + sample_editor_lock_sample(); + st_copy_sample(tmp_sample, oldsample); } else { - if(ss == -1) - return; - } - - newlen = oldsample->sample.length + copybufferlen; - - newsample = malloc(newlen * 2); - if(!newsample) - return; - - sample_editor_lock_sample(); - - memcpy(newsample, - oldsample->sample.data, - ss * 2); - st_convert_sample(copybuffer, - newsample + ss, - 16, - 16, - copybufferlen); - if(oldsample->treat_as_8bit) { - st_sample_cutoff_lowest_8_bits(newsample + ss, - copybufferlen); - } - memcpy(newsample + (ss + copybufferlen), - oldsample->sample.data + ss, - (oldsample->sample.length - ss) * 2); - - free(oldsample->sample.data); + if ((oldsample->sample.data && ss == -1) || copybuffer == NULL) + return; + newlen = oldsample->sample.length + copybufferlen; + + if (!oldsample->sample.data) { + STInstrument* curins = instrument_editor_get_instrument(); + + if (!st_instrument_num_samples(curins)) { + /* pasting into empty instrument; backing up the whole instrument */ + const gsize i_size = sizeof(STInstrument) + copybufferlen * sizeof(oldsample->sample.data[0]); + + if (!instrument_editor_check_and_log_instrument(curins, N_("Sample paste"), + HISTORY_FLAG_LOG_ALL, i_size)) + return; + } else { + if (!sample_editor_check_and_log_sample(current_sample, + N_("Sample paste"), HISTORY_FLAG_LOG_ALL, newlen)) + return; + } + /* pasting into empty sample */ + sample_editor_lock_sample(); + sample_editor_init_sample(_("")); /* Use only charachers from FT2 codeset in the translation! */ + oldsample->treat_as_8bit = copybuffer_sampleinfo.treat_as_8bit; + oldsample->volume = copybuffer_sampleinfo.volume; + oldsample->finetune = copybuffer_sampleinfo.finetune; + oldsample->panning = copybuffer_sampleinfo.panning; + oldsample->relnote = copybuffer_sampleinfo.relnote; + sample_editor_unlock_sample(); + ss = 0; + update_ie = TRUE; + } else { + if (!sample_editor_check_and_log_sample(current_sample, + N_("Sample paste"), HISTORY_FLAG_LOG_ALL, newlen)) + return; + } - oldsample->sample.data = newsample; - oldsample->sample.length = newlen; + newsample = malloc(newlen * 2); + if (!newsample) + return; + + sample_editor_lock_sample(); + + memcpy(newsample, + oldsample->sample.data, + ss * 2); + memcpy(newsample + ss, copybuffer, copybufferlen); + memcpy(newsample + (ss + copybufferlen), + oldsample->sample.data + ss, + (oldsample->sample.length - ss) * 2); + + free(oldsample->sample.data); + + oldsample->sample.data = newsample; + oldsample->sample.length = newlen; + if (oldsample->sample.loopstart >= ss) + oldsample->sample.loopstart += copybufferlen; + if (oldsample->sample.loopend >= ss) + oldsample->sample.loopend += copybufferlen; + } sample_editor_unlock_sample(); sample_editor_update(); - if(update_ie) - instrument_editor_update(); - xm_set_modified(1); + if (update_ie) + instrument_editor_update(TRUE); } - -static void -sample_editor_reverse_clicked (void) +void +sample_editor_reverse_clicked(void) { int ss = sampledisplay->sel_start, se = sampledisplay->sel_end; int i; gint16 *p, *q; + gboolean set_selection = TRUE; - if(!current_sample || ss == -1) { - return; + if (!current_sample) { + return; + } + if (ss == -1) { + ss = 0; + se = current_sample->sample.length; + set_selection = FALSE; } + if (!sample_editor_check_and_log_range(current_sample, + N_("Sample reversing"), HISTORY_FLAG_LOG_ALL, ss, se)) + return; + sample_editor_lock_sample(); p = q = current_sample->sample.data; p += ss; q += se; - for(i = 0; i < (se - ss)/2; i++) { - gint16 t = *p; - *p++ = *--q; - *q = t; + for (i = 0; i < (se - ss) / 2; i++) { + gint16 t = *p; + *p++ = *--q; + *q = t; } - xm_set_modified(1); sample_editor_unlock_sample(); sample_editor_update(); - sample_display_set_selection(sampledisplay, ss, se); + if (set_selection) + sample_display_set_selection(sampledisplay, ss, se); } -#if USE_SNDFILE || !defined (NO_AUDIOFILE) - static void -sample_editor_load_wav_main (int mode) -{ - /* Initialized global variables: +sample_editor_open_stereo_dialog(GtkWidget** window, GtkWidget** buttons, const gchar* text, + const gchar* title) +{ + static const gchar* labels[] = { N_("Mix"), N_("Left"), N_("Right"), N_("2 samples") }; + + if (!*window) { + GtkWidget *thing, *box1; + + *window = gtk_dialog_new_with_buttons(_(title), GTK_WINDOW(mainwindow), GTK_DIALOG_MODAL, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); + gui_dialog_adjust(*window, 2); + box1 = gtk_dialog_get_content_area(GTK_DIALOG(*window)); + gtk_box_set_spacing(GTK_BOX(box1), 2); + + thing = gtk_label_new(text); + gtk_label_set_justify(GTK_LABEL(thing), GTK_JUSTIFY_CENTER); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); + gtk_widget_show(thing); + + make_radio_group(labels, box1, buttons, FALSE, FALSE, NULL); + gtk_widget_set_tooltip_text(buttons[3], _("Put left and right channels into the current sample and the next one")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(buttons[0]), TRUE); + + thing = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); + gtk_widget_show(thing); + } else + gtk_window_present(GTK_WINDOW(*window)); +} + +static gboolean +check_and_log_smp_ins(const gchar* title, + const gint mode, + STSample* cs, + STSample* ns, + const gsize n_sam) +{ + STInstrument* curins = instrument_editor_get_instrument(); - wavload_through_library (TRUE or FALSE) - wavload_samplename (the name the sample is going to get in the XM) - wavload_frameCount (length of the file /stereo /16bits) + if (st_instrument_num_samples(curins) && mode != MODE_STEREO_2) { + /* Only one sample is affected */ + if (!sample_editor_check_and_log_sample(cs, title, + HISTORY_FLAG_LOG_SMP | HISTORY_FLAG_LOG_INS | HISTORY_SET_PAGE(NOTEBOOK_PAGE_SAMPLE_EDITOR), + MAX(cs->sample.length, n_sam))) + return FALSE; + } else { + /* We either load a sample to an empty instrument or overwrite two samples. + The whole instrument is to be backed up */ + const gsize isize1 = st_get_instrument_size(curins); + const gsize isize2 = mode == MODE_STEREO_2 ? isize1 + sizeof(cs->sample.data[0]) * + (2 * n_sam - cs->sample.length - ns->sample.length) + : sizeof(STInstrument) + sizeof(cs->sample.data[0]) * n_sam; + if (!instrument_editor_check_and_log_instrument(curins, title, + HISTORY_FLAG_LOG_SMP | HISTORY_FLAG_LOG_INS | + HISTORY_SET_PAGE(NOTEBOOK_PAGE_SAMPLE_EDITOR), MAX(isize1, isize2))) + return FALSE; + } + return TRUE; +} - with audiofile: - wavload_file; - wavload_sampleWidth, wavload_channelCount; - without audiofile: - wavload_filename; - wavload_sampleWidth, wavload_channelCount; - wavload_endianness, wavload_unsignedwords; - */ +#if USE_SNDFILE || AUDIOFILE_VERSION - void *sbuf, *sbuf_loadto; +static gboolean +sample_editor_load_wav_main(const int mode, FILE* f, struct wl* wavload) +{ + void *sbuf, *sbuf_loadto, *tmp, *sbuf2 = NULL; #if USE_SNDFILE sf_count_t len; #else @@ -1293,525 +1725,457 @@ #endif int i, count; float rate; + STSample* next = NULL; + + if (mode == MODE_STEREO_2) { + gint n_cur; + + if ((n_cur = modinfo_get_current_sample()) == 127) { + static GtkWidget* dialog = NULL; + + gui_warning_dialog(&dialog, _("You have selected the last sample of the instrument, but going " + "to load the second stereo channel to the next sample. Please select " + "a sample slot with lower number or use another loading mode."), + FALSE); + return TRUE; + } + next = &(instrument_editor_get_instrument()->samples[n_cur + 1]); + if (next->sample.length) { + if (!gui_ok_cancel_modal(mainwindow, _("The next sample which is about to be overwritten is not empty!\n" + "Would you like to overwrite it?"))) + return TRUE; + } + } - statusbar_update(STATUS_LOADING_SAMPLE, TRUE); - - len = 2 * wavload_frameCount * wavload_channelCount; - if(!(sbuf = malloc(len))) { - error_error(_("Out of memory for sample data.")); - goto errnobuf; + if (!check_and_log_smp_ins(N_("Sample loading"), mode, current_sample, next, wavload->frameCount)) + return FALSE; + gui_statusbar_update(STATUS_LOADING_SAMPLE, TRUE); + + len = 2 * wavload->frameCount * wavload->channelCount; + if (!(tmp = malloc(len))) { + gui_oom_error(); + goto errnobuf; + } + if (mode == MODE_MONO) + sbuf = tmp; + else if (!(sbuf = malloc(2 * wavload->frameCount))) { + gui_oom_error(); + free(tmp); + goto errnobuf; } - if(wavload_sampleWidth == 16) { - sbuf_loadto = sbuf; + if (wavload->sampleWidth == 16) { + sbuf_loadto = tmp; } else { - sbuf_loadto = sbuf + len / 2; + sbuf_loadto = tmp + len / 2; } - if(wavload_through_library) { + if (wavload->through_library) { #if USE_SNDFILE - if(wavload_frameCount != sf_readf_short(wavload_file, sbuf_loadto, wavload_frameCount)) { + if (wavload->frameCount != sf_readf_short(wavload->file, sbuf_loadto, wavload->frameCount)) { #else - if(wavload_frameCount != afReadFrames(wavload_file, AF_DEFAULT_TRACK, sbuf_loadto, wavload_frameCount)) { + if (wavload->frameCount != afReadFrames(wavload->file, AF_DEFAULT_TRACK, sbuf_loadto, wavload->frameCount)) { #endif - error_error(_("Read error.")); - goto errnodata; - } + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Read error."), FALSE); + goto errnodata; + } } else { - FILE *f = fopen(wavload_filename, "r"); - if(!f) - goto errnodata; - if(wavload_frameCount != fread(sbuf_loadto, - wavload_channelCount * wavload_sampleWidth / 8, - wavload_frameCount, - f)) { - fclose(f); - error_error(_("Read error.")); - goto errnodata; - } - fclose(f); + if (!f) + goto errnodata; + if (wavload->frameCount != fread(sbuf_loadto, wavload->channelCount * wavload->sampleWidth / 8, wavload->frameCount, f)) { + static GtkWidget* dialog = NULL; + + fclose(f); + gui_error_dialog(&dialog, _("Read error."), FALSE); + goto errnodata; + } + } + + if (wavload->sampleWidth == 8) { + if (wavload->through_library || wavload->unsignedwords) { + st_sample_8bit_signed_unsigned(sbuf_loadto, len / 2); + } + st_convert_sample(sbuf_loadto, + tmp, + 8, + 16, + len / 2); + } else { + if (wavload->through_library) { + // I think that is what the virtualByteOrder stuff is for. + // le_16_array_to_host_order(sbuf, len / 2); + } else { +#ifdef WORDS_BIGENDIAN + if (wavload->endianness == 0) { +#else + if (wavload->endianness == 1) { +#endif + byteswap_16_array(tmp, len / 2); + } + if (wavload->unsignedwords) { + st_sample_16bit_signed_unsigned(sbuf_loadto, len / 2); + } + } } sample_editor_lock_sample(); - sample_editor_init_sample(wavload_samplename); + sample_editor_init_sample(wavload->samplename); current_sample->sample.data = sbuf; - current_sample->treat_as_8bit = (wavload_sampleWidth == 8); - current_sample->sample.length = wavload_frameCount; + current_sample->treat_as_8bit = (wavload->sampleWidth == 8); + current_sample->sample.length = wavload->frameCount; // Initialize relnote and finetune such that sample is played in original speed - if(wavload_through_library) { + if (wavload->through_library) { #if USE_SNDFILE - current_sample->treat_as_8bit = ((wavinfo.format & (SF_FORMAT_PCM_S8 | SF_FORMAT_PCM_U8)) != 0); - rate = wavinfo.samplerate; + current_sample->treat_as_8bit = ((wavload->wavinfo.format & (SF_FORMAT_PCM_S8 | SF_FORMAT_PCM_U8)) != 0); + rate = wavload->wavinfo.samplerate; #else - rate = afGetRate(wavload_file, AF_DEFAULT_TRACK); + rate = afGetRate(wavload->file, AF_DEFAULT_TRACK); #endif } else { - rate = wavload_rate; + rate = wavload->rate; } xm_freq_note_to_relnote_finetune(rate, - 4 * 12 + 1, // at C-4 - ¤t_sample->relnote, - ¤t_sample->finetune); - - if(wavload_sampleWidth == 8) { - if(wavload_through_library || wavload_unsignedwords) { - st_sample_8bit_signed_unsigned(sbuf_loadto, len / 2); - } - st_convert_sample(sbuf_loadto, - sbuf, - 8, - 16, - len / 2); - } else { - if(wavload_through_library) { - // I think that is what the virtualByteOrder stuff is for. - // le_16_array_to_host_order(sbuf, len / 2); - } else { -#ifdef WORDS_BIGENDIAN - if(wavload_endianness == 0) { -#else - if(wavload_endianness == 1) { -#endif - byteswap_16_array(sbuf, len / 2); - } - if(wavload_unsignedwords) { - st_sample_16bit_signed_unsigned(sbuf_loadto, len / 2); - } - } - } - - if(mode != MODE_MONO) { - gint16 *a = sbuf, *b = sbuf; - - count = wavload_frameCount; - - /* Code could probably be made shorter. But this is readable. */ - switch(mode) { - case MODE_STEREO_MIX: - for(i = 0; i < count; i++, a+=2, b+=1) - *b = (a[0] + a[1]) / 2; - break; - case MODE_STEREO_LEFT: - for(i = 0; i < count; i++, a+=2, b+=1) - *b = a[0]; - break; - case MODE_STEREO_RIGHT: - for(i = 0; i < count; i++, a+=2, b+=1) - *b = a[1]; - break; - default: - g_assert_not_reached(); - break; - } + 4 * 12 + 1, // at C-4 + ¤t_sample->relnote, + ¤t_sample->finetune); + + if (mode == MODE_STEREO_2) { + if (!(sbuf2 = malloc(2 * wavload->frameCount))) { + gui_oom_error(); + goto errnodata; + } + + g_mutex_lock(&next->sample.lock); + sample_editor_init_sample_full(next, wavload->samplename); + next->sample.data = sbuf2; + next->treat_as_8bit = (wavload->sampleWidth == 8); + next->sample.length = wavload->frameCount; + + xm_freq_note_to_relnote_finetune(rate, + 4 * 12 + 1, // at C-4 + &next->relnote, + &next->finetune); + } + + if (mode != MODE_MONO) { + gint16 *a = tmp, *b = sbuf, *c = sbuf2; + + count = wavload->frameCount; + + /* Code could probably be made shorter. But this is readable. */ + switch (mode) { + case MODE_STEREO_MIX: + for (i = 0; i < count; i++, a += 2, b += 1) + *b = (a[0] + a[1]) / 2; + break; + case MODE_STEREO_2: + for (i = 0; i < count; i++, a += 2, b += 1, c += 1) { + *b = a[0]; + *c = a[1]; + } + break; + case MODE_STEREO_LEFT: + for (i = 0; i < count; i++, a += 2, b += 1) + *b = a[0]; + break; + case MODE_STEREO_RIGHT: + for (i = 0; i < count; i++, a += 2, b += 1) + *b = a[1]; + break; + default: + g_assert_not_reached(); + break; + } } + if (sbuf != tmp) + free(tmp); + if (mode == MODE_STEREO_2) { + if (gui_playing_mode) { + mixer->updatesample(&next->sample); + } + g_mutex_unlock(&next->sample.lock); + } sample_editor_unlock_sample(); - instrument_editor_update(); + instrument_editor_update(TRUE); sample_editor_update(); - xm_set_modified(1); - statusbar_update(STATUS_SAMPLE_LOADED, FALSE); - goto errnobuf; + gui_statusbar_update(STATUS_SAMPLE_LOADED, FALSE); + return FALSE; - errnodata: - statusbar_update(STATUS_IDLE, FALSE); +errnodata: free(sbuf); - errnobuf: - if(wavload_through_library) { -#if USE_SNDFILE - sf_close (wavload_file); -#else - afCloseFile(wavload_file); -#endif - wavload_file = NULL; - } -} - -static void -sample_editor_wavload_dialog_hide (GtkWidget *widget) -{ - gtk_widget_destroy(wavload_dialog); -} - -static void -sample_editor_wavload_dialog_left (GtkWidget *widget) -{ - gtk_widget_destroy(wavload_dialog); - sample_editor_load_wav_main(MODE_STEREO_LEFT); -} - -static void -sample_editor_wavload_dialog_mix (GtkWidget *widget) -{ - gtk_widget_destroy(wavload_dialog); - sample_editor_load_wav_main(MODE_STEREO_MIX); -} - -static void -sample_editor_wavload_dialog_right (GtkWidget *widget) -{ - gtk_widget_destroy(wavload_dialog); - sample_editor_load_wav_main(MODE_STEREO_RIGHT); + if (sbuf != tmp) + free(tmp); +errnobuf: + gui_statusbar_update(STATUS_IDLE, FALSE); + return FALSE; } static void -sample_editor_open_stereowav_dialog (void) +sample_editor_open_stereowav_dialog(FILE* f, struct wl* wavload) { - GtkWidget *window; - GtkWidget *button; - GtkWidget *box1; - GtkWidget *box2; - GtkWidget *separator; - GtkWidget *label; - - window = gtk_window_new (GTK_WINDOW_DIALOG); - - wavload_dialog=window; - - gtk_signal_connect (GTK_OBJECT (window), "delete_event", - GTK_SIGNAL_FUNC (sample_editor_wavload_dialog_hide), NULL); + static GtkWidget* window = NULL; + gboolean replay; + gint response; + gchar* buf; - gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER); - gtk_window_set_title (GTK_WINDOW(window), _("Load stereo sample")); - gtk_window_set_modal(GTK_WINDOW(window), TRUE); - gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(mainwindow)); - - gtk_container_set_border_width (GTK_CONTAINER (window), 10); - - box1 = gtk_vbox_new (FALSE, 2); - - label = gtk_label_new (_("You have selected a stereo sample!\n(SoundTracker can only handle mono samples!)\n\nPlease choose which channel to load:")); - gtk_label_set_justify (GTK_LABEL (label),GTK_JUSTIFY_CENTER); - gtk_box_pack_start (GTK_BOX (box1), label, FALSE, TRUE, 0); - gtk_widget_show (label); - - separator = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5); - gtk_widget_show (separator); - - box2 = gtk_hbox_new(TRUE, 4); - - button = gtk_button_new_with_label (_("Left")); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (sample_editor_wavload_dialog_left), NULL); - gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); - gtk_widget_show (button); - - button = gtk_button_new_with_label (_("Mix")); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (sample_editor_wavload_dialog_mix), NULL); - gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); - gtk_widget_show (button); - - button = gtk_button_new_with_label (_("Right")); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (sample_editor_wavload_dialog_right), NULL); - gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0); - gtk_widget_show (button); + buf = g_strdup_printf(_("You have selected a stereo sample!\n(%s can only handle mono samples!)\n\n" + "Please choose which channel to load:"), PACKAGE_NAME); - gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); - gtk_widget_show (box2); - - separator = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5); - gtk_widget_show (separator); - - button = gtk_button_new_with_label (_("Cancel")); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (sample_editor_wavload_dialog_hide), NULL); - gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0); - gtk_widget_show (button); - - gtk_container_add (GTK_CONTAINER (window), box1); - - gtk_widget_show (box1); - gtk_widget_show (window); -} - -static void -sample_editor_raw_sample_dialog_hide (GtkWidget *widget) -{ - gtk_widget_destroy(wavload_dialog); -} - -static void -sample_editor_raw_sample_dialog_ok (GtkWidget *widget) -{ - wavload_sampleWidth = find_current_toggle(wavload_raw_resolution_w, 2) == 1 ? 16 : 8; - wavload_endianness = find_current_toggle(wavload_raw_endian_w, 2); - wavload_channelCount = find_current_toggle(wavload_raw_channels_w, 2) == 1 ? 2 : 1; - wavload_unsignedwords = find_current_toggle(wavload_raw_signed_w, 2); - wavload_rate = atoi (gtk_entry_get_text(GTK_ENTRY(wavload_raw_rate))); + sample_editor_open_stereo_dialog(&window, load_radio, buf, N_("Stereo sample loading")); + g_free(buf); - gtk_widget_destroy(wavload_dialog); + do { + response = gtk_dialog_run(GTK_DIALOG(window)); - if(wavload_sampleWidth == 16) { - wavload_frameCount /= 2; - } + gtk_widget_hide(window); + if (response != GTK_RESPONSE_OK) + return; - if(wavload_channelCount == 2) { - wavload_frameCount /= 2; - sample_editor_open_stereowav_dialog(); - } else { - sample_editor_load_wav_main(MODE_MONO); - } + response = find_current_toggle(load_radio, 4) + 1; /* +1 since 0 means mono mode */ + replay = sample_editor_load_wav_main(response, f, wavload); + } while (replay); } static void -sample_editor_open_raw_sample_dialog (const gchar *filename) +sample_editor_open_raw_sample_dialog(FILE* f, struct wl* wavload) { - GtkWidget *window; - GtkWidget *button; - GtkWidget *box1; - GtkWidget *box2; - GtkWidget *separator; - GtkWidget *label; - GtkWidget *thing; - GtkWidget *combo; - GList *combo_items = NULL; - - static const char *resolutionlabels[] = { N_("8 bits"), N_("16 bits"), NULL }; - static const char *signedlabels[] = { N_("Signed"), N_("Unsigned"), NULL }; - static const char *endianlabels[] = { N_("Little-Endian"), N_("Big-Endian"), NULL }; - static const char *channelslabels[] = { N_("Mono"), N_("Stereo"), NULL }; - - wavload_filename = filename; // store for later usage - - window = gtk_window_new (GTK_WINDOW_DIALOG); - - wavload_dialog = window; - - gtk_signal_connect (GTK_OBJECT (window), "delete_event", - GTK_SIGNAL_FUNC (sample_editor_raw_sample_dialog_hide), NULL); - - gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER); - gtk_window_set_title (GTK_WINDOW(window), _("Load raw sample")); - gtk_window_set_modal(GTK_WINDOW(window), TRUE); - gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(mainwindow)); - - gtk_container_set_border_width (GTK_CONTAINER (window), 10); - - box1 = gtk_vbox_new (FALSE, 2); - - label = gtk_label_new (_("You have selected a sample that is not\nin a known format. You can load the raw data now.\n\nPlease choose a format:")); - gtk_label_set_justify (GTK_LABEL (label),GTK_JUSTIFY_CENTER); - gtk_box_pack_start (GTK_BOX (box1), label, FALSE, TRUE, 0); - gtk_widget_show (label); - - separator = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5); - gtk_widget_show (separator); - - // The toggles - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, TRUE, 0); + static GtkWidget *window = NULL, *combo; + static GtkListStore* ls; - thing = gtk_label_new(_("Resolution:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(resolutionlabels, box2, wavload_raw_resolution_w, - FALSE, TRUE, NULL, NULL); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Word format:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(signedlabels, box2, wavload_raw_signed_w, - FALSE, TRUE, NULL, NULL); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, TRUE, 0); - - add_empty_hbox(box2); - make_radio_group_full(endianlabels, box2, wavload_raw_endian_w, - FALSE, TRUE, NULL, NULL); - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, TRUE, 0); + GtkWidget* box1; + GtkWidget* box2; + GtkWidget* separator; + GtkWidget* label; + GtkWidget* thing; + GtkTreeIter iter; + gint response, i, active = 0; - thing = gtk_label_new(_("Channels:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); - make_radio_group_full(channelslabels, box2, wavload_raw_channels_w, - FALSE, TRUE, NULL, NULL); + static const char* resolutionlabels[] = { N_("8 bits"), N_("16 bits") }; + static const char* signedlabels[] = { N_("Signed"), N_("Unsigned") }; + static const char* endianlabels[] = { N_("Little-Endian"), N_("Big-Endian") }; + static const char* channelslabels[] = { N_("Mono"), N_("Stereo") }; // Standard sampling rates + static const guint rates[] = { 8000, 8363, 11025, 12000, 16000, 22050, 24000, 32000, 33452, 44100, 48000 }; + + if (!window) { + window = gtk_dialog_new_with_buttons(_("Load raw sample"), GTK_WINDOW(mainwindow), GTK_DIALOG_MODAL, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); + + wavload_dialog = window; + gui_dialog_adjust(window, GTK_RESPONSE_OK); + + box1 = gtk_dialog_get_content_area(GTK_DIALOG(window)); // upper part (vbox) + + label = gtk_label_new(_("You have selected a sample that is not\nin a known format. You can load the raw data now.\n\nPlease choose a format:")); + gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER); + gtk_box_pack_start(GTK_BOX(box1), label, FALSE, TRUE, 0); + gtk_widget_show(label); + + separator = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(box1), separator, FALSE, TRUE, 5); + gtk_widget_show(separator); + + // The toggles + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Resolution:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + add_empty_hbox(box2); + make_radio_group(resolutionlabels, box2, wavload_raw_resolution_w, + FALSE, TRUE, NULL); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Word format:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + add_empty_hbox(box2); + make_radio_group(signedlabels, box2, wavload_raw_signed_w, + FALSE, TRUE, NULL); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, TRUE, 0); + + add_empty_hbox(box2); + make_radio_group(endianlabels, box2, wavload_raw_endian_w, + FALSE, TRUE, NULL); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Channels:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + add_empty_hbox(box2); + make_radio_group(channelslabels, box2, wavload_raw_channels_w, + FALSE, TRUE, NULL); + + // Rate selection combo + box2 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box2); + gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Sampling Rate:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); + add_empty_hbox(box2); + + ls = gtk_list_store_new(1, G_TYPE_UINT); + for (i = 0; i < ARRAY_SIZE(rates); i++) { + gtk_list_store_append(ls, &iter); + gtk_list_store_set(ls, &iter, 0, rates[i], -1); + if (rates[i] == 8363) + active = i; + } - combo_items = g_list_append (combo_items, "8000"); - combo_items = g_list_append (combo_items, "8363"); - combo_items = g_list_append (combo_items, "11025"); - combo_items = g_list_append (combo_items, "12000"); - combo_items = g_list_append (combo_items, "16000"); - combo_items = g_list_append (combo_items, "16726"); - combo_items = g_list_append (combo_items, "22050"); - combo_items = g_list_append (combo_items, "24000"); - combo_items = g_list_append (combo_items, "32000"); - combo_items = g_list_append (combo_items, "33452"); - combo_items = g_list_append (combo_items, "44100"); - combo_items = g_list_append (combo_items, "48000"); - - // Rate selection combo - - box2 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box2); - gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, TRUE, 0); + combo = gui_combo_new(ls); + gtk_box_pack_start(GTK_BOX(box2), combo, FALSE, TRUE, 0); + gtk_combo_box_set_active(GTK_COMBO_BOX(combo), active); // default is 8363 + gtk_widget_show(combo); + + thing = gtk_hseparator_new(); + gtk_box_pack_end(GTK_BOX(box1), thing, FALSE, FALSE, 4); + gtk_widget_show(thing); + gtk_widget_show(window); + } else + gtk_window_present(GTK_WINDOW(window)); + + response = gtk_dialog_run(GTK_DIALOG(window)); + gtk_widget_hide(window); + + if (response == GTK_RESPONSE_OK) { + wavload->sampleWidth = find_current_toggle(wavload_raw_resolution_w, 2) == 1 ? 16 : 8; + wavload->endianness = find_current_toggle(wavload_raw_endian_w, 2); + wavload->channelCount = find_current_toggle(wavload_raw_channels_w, 2) == 1 ? 2 : 1; + wavload->unsignedwords = find_current_toggle(wavload_raw_signed_w, 2); + + if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combo), &iter)) + wavload->rate = 8363; + else + gtk_tree_model_get(GTK_TREE_MODEL(ls), &iter, 0, &wavload->rate, -1); - thing = gtk_label_new(_("Sampling Rate:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, TRUE, 0); - add_empty_hbox(box2); + if (wavload->sampleWidth == 16) { + wavload->frameCount /= 2; + } - combo = gtk_combo_new (); - gtk_combo_set_popdown_strings (GTK_COMBO (combo), combo_items); - g_list_free (combo_items); - gtk_box_pack_start(GTK_BOX(box2), combo, FALSE, TRUE, 0); - gtk_widget_show (combo); - wavload_raw_rate = GTK_COMBO (combo)->entry; - gtk_entry_set_text (GTK_ENTRY (wavload_raw_rate), _("8363")); // default - - // The bottom of the box - - separator = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 5); - gtk_widget_show (separator); - - button = gtk_button_new_with_label (_("OK")); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (sample_editor_raw_sample_dialog_ok), NULL); - gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0); - gtk_widget_show (button); - - button = gtk_button_new_with_label (_("Cancel")); - gtk_signal_connect (GTK_OBJECT (button), "clicked", - GTK_SIGNAL_FUNC (sample_editor_raw_sample_dialog_hide), NULL); - gtk_box_pack_start (GTK_BOX (box1), button, FALSE, FALSE, 0); - gtk_widget_show (button); - - gtk_container_add (GTK_CONTAINER (window), box1); - - gtk_widget_show (box1); - gtk_widget_show (window); + if (wavload->channelCount == 2) { + wavload->frameCount /= 2; + sample_editor_open_stereowav_dialog(f, wavload); + } else { + sample_editor_load_wav_main(MODE_MONO, f, wavload); + } + } } static void -sample_editor_load_wav (void) +sample_editor_load_wav(const gchar* fn, const gchar* localname) { - const gchar *fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_LOAD_SAMPLE])); + struct wl wavload; + #if USE_SNDFILE != 1 int sampleFormat; #endif - - gtk_widget_hide(fileops_dialogs[DIALOG_LOAD_SAMPLE]); - - if(!file_selection_is_valid(fn)) { - /* No file was actually selected. */ - gnome_error_dialog(_("No file selected.")); - return; - } - g_return_if_fail(current_sample != NULL); - file_selection_save_path(fn, gui_settings.loadsmpl_path); - - wavload_samplename = strrchr(fn, '/'); - if(!wavload_samplename) - wavload_samplename = fn; + wavload.samplename = strrchr(fn, '/'); + if (!wavload.samplename) + wavload.samplename = fn; else - wavload_samplename++; + wavload.samplename++; #if USE_SNDFILE - wavinfo.format = 0; - wavload_file = sf_open(fn, SFM_READ, &wavinfo); + wavload.wavinfo.format = 0; + wavload.file = sf_open(localname, SFM_READ, &wavload.wavinfo); #else - wavload_file = afOpenFile(fn, "r", NULL); + wavload.file = afOpenFile(localname, "r", NULL); #endif - if(!wavload_file) { - FILE *f = fopen(fn, "r"); - if(f) { - fseek(f, 0, SEEK_END); - wavload_frameCount = ftell(f); - fclose(f); - wavload_through_library = FALSE; - sample_editor_open_raw_sample_dialog(fn); - } else { - error_error(_("Can't read sample")); - } - return; + if (!wavload.file) { + FILE* f = gui_fopen(localname, fn, "rb"); + + if (f) { + fseek(f, 0, SEEK_END); + wavload.frameCount = ftell(f); + fseek(f, 0, SEEK_SET); + wavload.through_library = FALSE; + sample_editor_open_raw_sample_dialog(f, &wavload); + fclose(f); + } + return; } - wavload_through_library = TRUE; + wavload.through_library = TRUE; #if USE_SNDFILE - wavload_frameCount = wavinfo.frames; + wavload.frameCount = wavload.wavinfo.frames; #else - wavload_frameCount = afGetFrameCount(wavload_file, AF_DEFAULT_TRACK); + wavload.frameCount = afGetFrameCount(wavload.file, AF_DEFAULT_TRACK); #endif - if(wavload_frameCount > mixer->max_sample_length) { - error_warning(_("Sample is too long for current mixer module. Loading anyway.")); + if (wavload.frameCount > mixer->max_sample_length) { + static GtkWidget* dialog = NULL; + gui_warning_dialog(&dialog, _("Sample is too long for current mixer module. Loading anyway."), FALSE); } #if USE_SNDFILE - wavload_channelCount = wavinfo.channels; - wavload_sampleWidth = 16; - + wavload.channelCount = wavload.wavinfo.channels; + wavload.sampleWidth = 16; + #else - wavload_channelCount = afGetChannels(wavload_file, AF_DEFAULT_TRACK); - afGetSampleFormat(wavload_file, AF_DEFAULT_TRACK, &sampleFormat, &wavload_sampleWidth); + wavload.channelCount = afGetChannels(wavload.file, AF_DEFAULT_TRACK); + afGetSampleFormat(wavload.file, AF_DEFAULT_TRACK, &sampleFormat, &wavload.sampleWidth); /* I think audiofile-0.1.7 does this automatically, but I'm not sure */ #ifdef WORDS_BIGENDIAN - afSetVirtualByteOrder(wavload_file, AF_DEFAULT_TRACK, AF_BYTEORDER_BIGENDIAN); + afSetVirtualByteOrder(wavload.file, AF_DEFAULT_TRACK, AF_BYTEORDER_BIGENDIAN); #else - afSetVirtualByteOrder(wavload_file, AF_DEFAULT_TRACK, AF_BYTEORDER_LITTLEENDIAN); + afSetVirtualByteOrder(wavload.file, AF_DEFAULT_TRACK, AF_BYTEORDER_LITTLEENDIAN); #endif #endif + if ((wavload.sampleWidth != 16 && wavload.sampleWidth != 8) || wavload.channelCount > 2) { + static GtkWidget* dialog = NULL; - if((wavload_sampleWidth != 16 && wavload_sampleWidth != 8) || wavload_channelCount > 2) { - error_error(_("Can only handle 8 and 16 bit samples with up to 2 channels")); - goto errwrongformat; - } - - if(wavload_channelCount == 1) { - sample_editor_load_wav_main(MODE_MONO); + gui_error_dialog(&dialog, _("Can only handle 8 and 16 bit samples with up to 2 channels"), FALSE); } else { - sample_editor_open_stereowav_dialog(); + if (wavload.channelCount == 1) { + sample_editor_load_wav_main(MODE_MONO, NULL, &wavload); + } else { + sample_editor_open_stereowav_dialog(NULL, &wavload); + } } - return; - - errwrongformat: #if USE_SNDFILE - sf_close(wavload_file); + sf_close(wavload.file); #else - afCloseFile(wavload_file); + afCloseFile(wavload.file); #endif - wavload_file = NULL; return; } - static void -sample_editor_save_wav_main (const gchar *fn, - guint32 offset, - guint32 length) +sample_editor_save_wav_main(const gchar* fn, + const gchar* localname, + guint32 offset, + guint32 length) { #if USE_SNDFILE - SNDFILE *outfile; + SNDFILE* outfile; SF_INFO sfinfo; int rate = 44100; #else @@ -1820,709 +2184,997 @@ double rate = 44100.0; #endif - statusbar_update(STATUS_SAVING_SAMPLE, TRUE); - - file_selection_save_path(fn, gui_settings.savesmpl_path); + gui_statusbar_update(STATUS_SAVING_SAMPLE, TRUE); #if USE_SNDFILE - if(current_sample->treat_as_8bit) { - sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_U8; + if (current_sample->treat_as_8bit) { + sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_U8; } else { - sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16; + sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16; } sfinfo.channels = 1; sfinfo.samplerate = rate; - outfile = sf_open (fn, SFM_WRITE, &sfinfo); + outfile = sf_open(fn, SFM_WRITE, &sfinfo); #else outfilesetup = afNewFileSetup(); afInitFileFormat(outfilesetup, AF_FILE_WAVE); afInitChannels(outfilesetup, AF_DEFAULT_TRACK, 1); - if(current_sample->treat_as_8bit) { - if(!libaf2) { - // for audiofile-0.1.x - afInitSampleFormat(outfilesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 8); - } else { - // for audiofile-0.2.x - afInitSampleFormat(outfilesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_UNSIGNED, 8); - } + if (current_sample->treat_as_8bit) { +#if AUDIOFILE_VERSION == 1 + // for audiofile-0.1.x + afInitSampleFormat(outfilesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 8); +#else + // for audiofile-0.2.x and 0.3.x + afInitSampleFormat(outfilesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_UNSIGNED, 8); +#endif } else { - afInitSampleFormat(outfilesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 16); + afInitSampleFormat(outfilesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 16); } afInitRate(outfilesetup, AF_DEFAULT_TRACK, rate); - outfile = afOpenFile(fn, "w", outfilesetup); + outfile = afOpenFile(localname, "w", outfilesetup); afFreeFileSetup(outfilesetup); #endif - if(!outfile) { - error_error(_("Can't open file for writing.")); - return; + if (!outfile) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Can't open file for writing."), FALSE); + return; } #if USE_SNDFILE - sf_writef_short (outfile, - current_sample->sample.data + offset, - length); + sf_writef_short(outfile, + current_sample->sample.data + offset, + length); sf_close(outfile); #else - if(current_sample->treat_as_8bit) { - void *buf = malloc(1 * length); - g_assert(buf); - st_convert_sample(current_sample->sample.data + offset, - buf, - 16, - 8, - length); - st_sample_8bit_signed_unsigned(buf, - length); - - afWriteFrames(outfile, AF_DEFAULT_TRACK, - buf, - length); - free(buf); + if (current_sample->treat_as_8bit) { + void* buf = malloc(1 * length); + g_assert(buf); + st_convert_sample(current_sample->sample.data + offset, + buf, + 16, + 8, + length); + st_sample_8bit_signed_unsigned(buf, + length); + + afWriteFrames(outfile, AF_DEFAULT_TRACK, + buf, + length); + free(buf); } else { - afWriteFrames(outfile, AF_DEFAULT_TRACK, - current_sample->sample.data + offset, - length); + afWriteFrames(outfile, AF_DEFAULT_TRACK, + current_sample->sample.data + offset, + length); } afCloseFile(outfile); #endif - statusbar_update(STATUS_SAMPLE_SAVED, FALSE); + gui_statusbar_update(STATUS_SAMPLE_SAVED, FALSE); } static void -sample_editor_save_wav_callback (gint reply, - gpointer data) +sample_editor_save_wav(const gchar* fn, const gchar* localname) { - if(reply == 0) { - // save entire sample - sample_editor_save_wav_main((gchar*)data, 0, current_sample->sample.length); + g_return_if_fail(current_sample != NULL); + if (current_sample->sample.data == NULL) { + return; } + sample_editor_save_wav_main(fn, localname, 0, current_sample->sample.length); } static void -sample_editor_save_wav (void) +sample_editor_save_region_wav(const gchar* fn, const gchar* localname) { - gchar *fn; - FILE *f; - - fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_SAVE_SAMPLE])); + int rss = sampledisplay->sel_start, rse = sampledisplay->sel_end; - gtk_widget_hide(fileops_dialogs[DIALOG_SAVE_SAMPLE]); + g_return_if_fail(current_sample != NULL); + if (current_sample->sample.data == NULL) { + return; + } - if(!file_selection_is_valid(fn)) { - /* No file was actually selected. */ - gnome_error_dialog(_("No file selected.")); - return; + if (rss == -1) { + static GtkWidget* dialog = NULL; + gui_error_dialog(&dialog, _("Please select region first."), FALSE); + return; } + sample_editor_save_wav_main(fn, localname, rss, rse - rss); +} - g_return_if_fail(current_sample != NULL); - if(current_sample->sample.data == NULL) - return; +#endif /* USE_SNDFILE || AUDIOFILE_VERSION */ + +/* ============================ Sampling functions coming up -------- */ - f = fopen(fn, "r"); +void +sample_editor_clear_buffers(STSampleChain* bufs) +{ + STSampleChain *r, *r2; - if(f != NULL) { - fclose(f); - gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), - _("Are you sure you want to overwrite the file?"), - sample_editor_save_wav_callback, fn); - } else { - sample_editor_save_wav_callback(0, fn); + /* Free allocated sample buffers */ + for (r = bufs; r; r = r2) { + r2 = r->next; + free(r->data); + free(r); } } static void -sample_editor_save_region_callback (gint reply, - gpointer data) +enable_widgets(gboolean enable) { - int rss = sampledisplay->sel_start, rse = sampledisplay->sel_end; - - if(reply == 0) { - // save region - sample_editor_save_wav_main((gchar*)data, rss, rse - rss); - } + gtk_widget_set_sensitive(okbutton, enable); + gtk_widget_set_sensitive(clearbutton, enable); } static void -sample_editor_save_region_wav (void) +sampling_response(GtkWidget* dialog, gint response, GtkToggleButton* button) { - gchar *fn; - FILE *f; + gtk_widget_hide(samplingwindow); + sampling = FALSE; - fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fileops_dialogs[DIALOG_SAVE_RGN_SAMPLE])); - - gtk_widget_hide(fileops_dialogs[DIALOG_SAVE_RGN_SAMPLE]); - - if(!file_selection_is_valid(fn)) { - /* No file was actually selected. */ - gnome_error_dialog(_("No file selected.")); - return; + if (button->active) { + g_signal_handler_block(G_OBJECT(button), toggled_id); /* To prevent data storing on record stop */ + gtk_toggle_button_set_active(button, FALSE); + g_signal_handler_unblock(G_OBJECT(button), toggled_id); + } + if (monitoring) { + monitoring = FALSE; + sampling_driver->release(sampling_driver_object); } - g_return_if_fail(current_sample != NULL); - if(current_sample->sample.data == NULL) - return; + if (response == GTK_RESPONSE_OK) + sample_editor_ok_clicked(); - if(sampledisplay->sel_start == -1) { - error_error(_("Please select region first.")); - return; - } + clock_stop(CLOCK(sclock)); + clock_set_seconds(CLOCK(sclock), 0); + sample_editor_clear_buffers(recordbufs); + recordbufs = NULL; + has_data = FALSE; +} + +static void +sampling_widget_hide(GtkToggleButton* button) +{ + sampling_response(NULL, GTK_RESPONSE_CANCEL, button); +} - f = fopen(fn, "r"); +static void +record_toggled(GtkWidget* button) +{ + if (GTK_TOGGLE_BUTTON(button)->active) { + enable_widgets(FALSE); + recordedlen = 0; + if (recordbufs) { + sample_editor_clear_buffers(recordbufs); + recordbufs = NULL; + } - if(f != NULL) { - fclose(f); - gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), - _("Are you sure you want to overwrite the file?"), - sample_editor_save_region_callback, fn); - } else { - sample_editor_save_region_callback(0, fn); + if (!monitoring) { + sampling_driver->open(sampling_driver_object); + monitoring = TRUE; + } + sampling = TRUE; + gtk_widget_queue_draw(GTK_WIDGET(monitorscope)); + clock_set_seconds(CLOCK(sclock), 0); + clock_start(CLOCK(sclock)); + } else { + sampling = FALSE; + monitoring = FALSE; + sampling_driver->release(sampling_driver_object); + + has_data = TRUE; + enable_widgets(has_data); + // _set_chain() instead to display the whole sample + if (recordbufs) /* Recordbufs might be not allocated yet */ + sample_display_set_data(monitorscope, recordbufs->data, format, + recordbufs->length >> (mixer_get_resolution(format) + mixer_is_format_stereo(format) - 1), FALSE); + clock_stop(CLOCK(sclock)); } } -#endif /* USE_SNDFILE || !defined (NO_AUDIOFILE) */ +void +clear_clicked(void) +{ + has_data = FALSE; + enable_widgets(has_data); -/* ============================ Sampling functions coming up -------- */ + recordedlen = 0; + sample_editor_clear_buffers(recordbufs); + recordbufs = NULL; + if (!monitoring) { + sampling_driver->open(sampling_driver_object); + monitoring = TRUE; + } + clock_set_seconds(CLOCK(sclock), 0); +} -GtkWidget* -sample_editor_create_sampling_widgets (void) +static gboolean +sampling_window_keyevent(GtkWidget* widget, + GdkEventKey* event, GtkToggleButton* rec_btn) { - GtkWidget *box, *thing, *box2; - - box = gtk_vbox_new(FALSE, 2); + gint shift = event->state & GDK_SHIFT_MASK; + gint ctrl = event->state & GDK_CONTROL_MASK; + gint alt = event->state & GDK_MOD1_MASK; + gint m = keys_get_key_meaning(event->keyval, ENCODE_MODIFIERS(shift, ctrl, alt), event->hardware_keycode); - thing = sample_display_new(FALSE); - gtk_box_pack_start(GTK_BOX(box), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); - monitorscope = SAMPLE_DISPLAY(thing); - - box2 = gtk_hbox_new(TRUE, 4); - gtk_box_pack_start(GTK_BOX(box), box2, FALSE, TRUE, 0); - gtk_widget_show(box2); - - thing = gtk_button_new_with_label(_("OK")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_ok_clicked), NULL); - gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); - gtk_widget_set_sensitive(thing, 0); - gtk_widget_show(thing); - okbutton = thing; + if (KEYS_MEANING_TYPE(m) == KEYS_MEANING_FUNC) { + gboolean handled; - thing = gtk_button_new_with_label(_("Start sampling")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_start_sampling_clicked), NULL); - gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); - startsamplingbutton = thing; + if (KEYS_MEANING_VALUE(m) == KEY_SMP_TOGGLE) { + gtk_toggle_button_set_active(rec_btn, !gtk_toggle_button_get_active(rec_btn)); + handled = TRUE; + } else + handled = gui_handle_standard_keys(shift, ctrl, alt, event->keyval, event->hardware_keycode); - thing = gtk_button_new_with_label(_("Cancel")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_stop_sampling), NULL); - gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); - cancelbutton = thing; + return handled; + } - return box; -} + if (event->keyval == ' ') { + gui_play_stop(); + return TRUE; + } -static void -sampler_page_enable_widgets (int enable) -{ - gtk_widget_set_sensitive(okbutton, !enable); - gtk_widget_set_sensitive(startsamplingbutton, enable); + return FALSE; } -static void -sample_editor_monitor_clicked (void) +void +sample_editor_monitor_clicked(void) { - GtkWidget *mainbox, *thing; - - if(!sampling_driver || !sampling_driver_object) { - error_error(_("No sampling driver available")); - return; - } + if (!sampling_driver || !sampling_driver_object) { + static GtkWidget* dialog = NULL; - if(samplingwindow != NULL) { - gdk_window_raise(samplingwindow->window); - return; + gui_error_dialog(&dialog, _("No sampling driver available"), FALSE); + return; } - -#ifdef USE_GNOME - samplingwindow = gnome_app_new("SoundTracker", _("Sampling Window")); -#else - samplingwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(samplingwindow), _("Sampling Window")); -#endif - gtk_signal_connect (GTK_OBJECT (samplingwindow), "delete_event", - GTK_SIGNAL_FUNC (sample_editor_stop_sampling), NULL); - - mainbox = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(mainbox), 4); -#ifdef USE_GNOME - gnome_app_set_contents(GNOME_APP(samplingwindow), mainbox); -#else - gtk_container_add(GTK_CONTAINER(samplingwindow), mainbox); -#endif - gtk_widget_show(mainbox); - thing = sample_editor_create_sampling_widgets(); - gtk_box_pack_start(GTK_BOX(mainbox), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); + if (!samplingwindow) { + GtkWidget *mainbox, *thing, *box2; + GtkAccelGroup* group = gtk_accel_group_new(); + GClosure* closure; + + samplingwindow = gtk_dialog_new_with_buttons(_("Sampling Window"), GTK_WINDOW(mainwindow), 0, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); + gtk_window_add_accel_group(GTK_WINDOW(samplingwindow), group); + + okbutton = gtk_dialog_add_button(GTK_DIALOG(samplingwindow), GTK_STOCK_OK, GTK_RESPONSE_OK); + gtk_container_set_border_width(GTK_CONTAINER(samplingwindow), 4); + + mainbox = gtk_dialog_get_content_area(GTK_DIALOG(samplingwindow)); + + gtk_container_set_border_width(GTK_CONTAINER(mainbox), 4); + gtk_box_set_spacing(GTK_BOX(mainbox), 2); + + thing = sample_display_new(FALSE, gui_settings.sampling_mode); + custom_drawing_register_drawing_func(CUSTOM_DRAWING(thing), red_circle_draw, NULL); + custom_drawing_register_realize_func(CUSTOM_DRAWING(thing), red_circle_realize, NULL); + gtk_box_pack_start(GTK_BOX(mainbox), thing, TRUE, TRUE, 0); + monitorscope = SAMPLE_DISPLAY(thing); + + box2 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + + thing = gtk_toggle_button_new_with_label(_("Record")); + closure = g_cclosure_new_swap(G_CALLBACK(sampling_widget_hide), thing, NULL); + gtk_accel_group_connect(group, GDK_Escape, 0, 0, closure); + toggled_id = g_signal_connect(thing, "toggled", + G_CALLBACK(record_toggled), NULL); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + gui_dialog_connect_data(samplingwindow, G_CALLBACK(sampling_response), thing); + g_signal_connect(samplingwindow, "key-press-event", + G_CALLBACK(sampling_window_keyevent), thing); + + clearbutton = thing = gtk_button_new_with_label(_("Clear")); + g_signal_connect(thing, "clicked", + G_CALLBACK(clear_clicked), NULL); + gtk_box_pack_start(GTK_BOX(box2), thing, FALSE, FALSE, 0); + + sclock = clock_new(); + clock_set_format(CLOCK(sclock), _("%M:%S")); + clock_set_seconds(CLOCK(sclock), 0); + gtk_box_pack_start(GTK_BOX(box2), sclock, FALSE, TRUE, 0); + + thing = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 4); + + gtk_widget_show_all(samplingwindow); + } else + gtk_window_present(GTK_WINDOW(samplingwindow)); - sampler_page_enable_widgets(TRUE); + enable_widgets(FALSE); + gtk_window_set_focus(GTK_WINDOW(samplingwindow), NULL); recordbufs = NULL; - sampling = 0; + sampling = FALSE; + has_data = FALSE; recordedlen = 0; - currentoffs = recordbuflen; current = NULL; + rate = 44100; + format = ST_MIXER_FORMAT_S16_LE; - gtk_widget_show (samplingwindow); + if (!sampling_driver->open(sampling_driver_object)) { + static GtkWidget* dialog = NULL; - if(!sampling_driver->common.open(sampling_driver_object)) { - sample_editor_stop_sampling(); - } + sample_editor_stop_sampling(); + gui_error_dialog(&dialog, _("Sampling failed!"), FALSE); + } else + monitoring = TRUE; } -void -sample_editor_sampled (void *dest, - guint32 count, - int mixfreq, - int mixformat) +static gboolean +monitorscope_queue(SampleDisplay* mscope) { - int x; + sample_display_set_data(mscope, monitor_buf, format, + monitor_count >> (mixer_get_resolution(format) + mixer_is_format_stereo(format) - 1), FALSE); - g_assert(mixformat == ST_MIXER_FORMAT_S16_LE); - - sample_display_set_data_16(monitorscope, dest, count, FALSE); - - while(sampling && count > 0) { - if(currentoffs == recordbuflen) { - struct recordbuf *newbuf = malloc(sizeof(struct recordbuf) + recordbuflen * 2); - if(!newbuf) { - error_error(_("Out of memory while sampling!")); - sampling = 0; - break; - } - newbuf->next = NULL; - newbuf->length = 0; - currentoffs = 0; - if(!recordbufs) - recordbufs = newbuf; - else - current->next = newbuf; - current = newbuf; - } + return FALSE; +} - x = MIN(count, recordbuflen - currentoffs); - memcpy(current->data + currentoffs, dest, x * 2); - dest += x * 2; - count -= x; - current->length += x; - currentoffs += x; - recordedlen += x; +/* Count is in bytes, not samples. The function returns TRUE if the buffer is acquired and the driver shall allocate a new one */ +gboolean +sample_editor_sampled(void* src, + guint32 count, + gint mixfreq, + gint mixformat) +{ + gboolean sampled = FALSE; + + if (monitoring) { + /* Actual data for sample monitor */ + format = mixformat; + monitor_count = count; + monitor_buf = src; + g_idle_add((GSourceFunc)monitorscope_queue, (gpointer)monitorscope); + + if (sampling) { + STSampleChain *newbuf = malloc(sizeof(STSampleChain)); + + if (!newbuf) { + /* It is called from audio thread AFAIK */ + error_error(_("Out of memory while sampling!")); + sampling = 0; + return FALSE; + } + newbuf->next = NULL; + newbuf->length = count; + newbuf->data = src; + + if (!recordbufs){ /* Sampling start */ + recordbufs = newbuf; + rate = mixfreq; + } else + current->next = newbuf; + + current = newbuf; + sampled = TRUE; + recordedlen += count; + } } + + return sampled; } -void -sample_editor_stop_sampling (void) +void sample_editor_stop_sampling(void) { - struct recordbuf *r, *r2; - if(!samplingwindow) { - return; - } - - sampling_driver->common.release(sampling_driver_object); + sampling = FALSE; + has_data = FALSE; - gtk_widget_destroy(samplingwindow); - samplingwindow = NULL; + if (samplingwindow) { + if (monitoring) { + monitoring = FALSE; + sampling_driver->release(sampling_driver_object); + } + gtk_widget_hide(samplingwindow); - /* clear the recorded sample */ - for(r = recordbufs; r; r = r2) { - r2 = r->next; - free(r); + sample_editor_clear_buffers(recordbufs); + recordbufs = NULL; } } -static void -sample_editor_ok_clicked (void) -{ - STInstrument *instr; - struct recordbuf *r, *r2; - gint16 *sbuf; - char *samplename = _(""); - double rate = 44100.0; +void +sample_editor_chain_to_sample(STSampleChain *rbufs, + guint32 rlen, + STMixerFormat fmt, + guint32 srate, + const gboolean data_present, + const gchar* samplename, /* The translation can use only charachters from FT2 codeset */ + const gchar* action, + const gchar* log_name) +{ + STInstrument* instr; + STSample* next = NULL; + STSampleChain *r; + gint16 *sbuf, *sbuf2 = NULL; + guint multiply, mode = 0; + gboolean stereo = mixer_is_format_stereo(fmt); + + g_return_if_fail(current_sample != NULL && data_present); + + fmt &= 0x7; + multiply = mixer_get_resolution(fmt) - 1; /* 0 - 8 bit, 1 - 16, used for shifts */ + if (!stereo && !multiply) /* 8bit mono */ + rlen <<= 1; + else if (stereo && multiply) /* 16 bit stereo */ + rlen >>= 1; + + if (stereo) { + static GtkWidget* window = NULL; + gboolean replay; + gchar* buf; + + buf = g_strdup_printf(_("You have %s a stereo sample!\n(%s can only handle mono samples!)\n\n" + "Please choose which channel to use:"), _(action), PACKAGE_NAME); + sample_editor_open_stereo_dialog(&window, record_radio, buf, N_("Converting stereo sample")); + g_free(buf); + + do { + gint n_cur; + + replay = FALSE; + + mode = gtk_dialog_run(GTK_DIALOG(window)); + gtk_widget_hide(window); + + if (mode != GTK_RESPONSE_OK) + mode = 0; /* Cancelling or other possible unclear status -- do nothing */ + else + mode = find_current_toggle(record_radio, 4) + 1; /* +1 since 0 means mono mode */ + switch (mode) { + case MODE_STEREO_LEFT: + case MODE_STEREO_MIX: + case MODE_STEREO_RIGHT: + break; + case MODE_STEREO_2: + if ((n_cur = modinfo_get_current_sample()) == 127) { + static GtkWidget* dialog = NULL; + + gui_warning_dialog(&dialog, _("You have selected the last sample of the instrument, but going " + "to load the second stereo channel to the next sample. Please select " + "a sample slot with lower number or use another loading mode."), + FALSE); + replay = TRUE; + } + next = &(instrument_editor_get_instrument()->samples[n_cur + 1]); + if (next->sample.length) + replay = !gui_ok_cancel_modal(mainwindow, _("The next sample which is about to be overwritten is not empty!\n" + "Would you like to overwrite it?")); + break; + default: + return; + } + } while (replay); + } + + if (!(sbuf = malloc(rlen))) { + gui_oom_error(); + return; + } + + if (mode == MODE_STEREO_2) + if (!(sbuf2 = malloc(rlen))) { + gui_oom_error(); + free(sbuf); + return; + } - sampling_driver->common.release(sampling_driver_object); + if (!check_and_log_smp_ins(log_name, mode, current_sample, next, rlen >> 1)) + return; - gtk_widget_destroy(samplingwindow); - samplingwindow = NULL; + sample_editor_lock_sample(); + st_clean_sample(current_sample, NULL, NULL); + instr = instrument_editor_get_instrument(); + if (st_instrument_num_samples(instr) == 0) + st_clean_instrument(instr, samplename); + st_clean_sample(current_sample, samplename, NULL); + current_sample->sample.data = sbuf; - g_return_if_fail(current_sample != NULL); + if (mode == MODE_STEREO_2) { - sample_editor_lock_sample(); + g_mutex_lock(&next->sample.lock); + st_clean_sample(next, samplename, NULL); + next->sample.data = sbuf2; + next->treat_as_8bit = !multiply; + next->sample.length = rlen >> 1; /* Sample size is given in 16-bit words */ + next->volume = 64; + next->panning = 128; + + xm_freq_note_to_relnote_finetune(srate, + 4 * 12 + 1, // at C-4 + &next->relnote, + &next->finetune); + } - st_clean_sample(current_sample, NULL); + for (r = rbufs; r; r = r->next) { + guint j; - instr = instrument_editor_get_instrument(); - if(st_instrument_num_samples(instr) == 0) - st_clean_instrument(instr, samplename); +#ifdef WORDS_BIGENDIAN + if (fmt == ST_MIXER_FORMAT_S16_LE || fmt == ST_MIXER_FORMAT_U16_LE) +#else + if (fmt == ST_MIXER_FORMAT_S16_BE || fmt == ST_MIXER_FORMAT_U16_BE) +#endif + byteswap_16_array(r->data, r->length); - st_clean_sample(current_sample, samplename); - - sbuf = malloc(recordedlen * 2); - current_sample->sample.data = sbuf; - - for(r = recordbufs; r; r = r2) { - r2 = r->next; - memcpy(sbuf, r->data, r->length * 2); - sbuf += r->length; - free(r); + if (stereo) { /* Looks awfully, but this is the only way to handle this plenty of format combination */ + switch (mode) { + case MODE_STEREO_LEFT: + switch (fmt) { + case ST_MIXER_FORMAT_S16_LE: + case ST_MIXER_FORMAT_S16_BE: + for (j = 0; jlength>> 1; j += 2, sbuf++) + *sbuf = ((gint16*)r->data)[j]; + break; + case ST_MIXER_FORMAT_U16_LE: + case ST_MIXER_FORMAT_U16_BE: + for (j = 0; jlength>> 1; j += 2, sbuf++) + *sbuf = ((gint16*)r->data)[j] - 32768; + break; + case ST_MIXER_FORMAT_S8: + for (j = 0; j < r->length; j += 2, sbuf++) + *sbuf = ((gint8*)r->data)[j] << 8; + break; + case ST_MIXER_FORMAT_U8: + for (j = 0; j < r->length; j += 2, sbuf++) + *sbuf = (((gint8*)r->data)[j] << 8) - 32768; + break; + default: + memset(sbuf, 0, r->length); + sbuf += r->length >> 1; /* Unknown format */ + } + break; + case MODE_STEREO_MIX: + switch (fmt) { + case ST_MIXER_FORMAT_S16_LE: + case ST_MIXER_FORMAT_S16_BE: + for (j = 0; jlength>> 1; j += 2, sbuf++) + *sbuf = (((gint16*)r->data)[j] + ((gint16*)r->data)[j + 1]) >> 1; + break; + case ST_MIXER_FORMAT_U16_LE: + case ST_MIXER_FORMAT_U16_BE: + for (j = 0; jlength>> 1; j += 2, sbuf++) + *sbuf = ((((gint16*)r->data)[j] + ((gint16*)r->data)[j + 1]) >> 1) - 32768; + break; + case ST_MIXER_FORMAT_S8: + for (j = 0; j < r->length; j += 2, sbuf++) + *sbuf = (((gint8*)r->data)[j] + ((gint8*)r->data)[j + 1]) << 7; + break; + case ST_MIXER_FORMAT_U8: + for (j = 0; j < r->length; j += 2, sbuf++) + *sbuf = ((((gint8*)r->data)[j] + ((gint8*)r->data)[j + 1]) << 7) - 32768; + break; + default: + memset(sbuf, 0, r->length); + sbuf += r->length >> 1; /* Unknown format */ + } + break; + case MODE_STEREO_RIGHT: + switch (fmt) { + case ST_MIXER_FORMAT_S16_LE: + case ST_MIXER_FORMAT_S16_BE: + for (j = 0; jlength>> 1; j += 2, sbuf++) + *sbuf = ((gint16*)r->data)[j + 1]; + break; + case ST_MIXER_FORMAT_U16_LE: + case ST_MIXER_FORMAT_U16_BE: + for (j = 0; jlength>> 1; j += 2, sbuf++) + *sbuf = ((gint16*)r->data)[j + 1] - 32768; + break; + case ST_MIXER_FORMAT_S8: + for (j = 0; j < r->length; j += 2, sbuf++) + *sbuf = ((gint8*)r->data)[j + 1] << 8; + break; + case ST_MIXER_FORMAT_U8: + for (j = 0; j < r->length; j += 2, sbuf++) + *sbuf = (((gint8*)r->data)[j + 1] << 8) - 32768; + break; + default: + memset(sbuf, 0, r->length); + sbuf += r->length >> 1; /* Unknown format */ + } + break; + case MODE_STEREO_2: + switch (fmt) { + case ST_MIXER_FORMAT_S16_LE: + case ST_MIXER_FORMAT_S16_BE: + for (j = 0; jlength>> 1; j += 2, sbuf++, sbuf2++) { + *sbuf = ((gint16*)r->data)[j]; + *sbuf2 = ((gint16*)r->data)[j + 1]; + } + break; + case ST_MIXER_FORMAT_U16_LE: + case ST_MIXER_FORMAT_U16_BE: + for (j = 0; jlength>> 1; j += 2, sbuf++, sbuf2++) { + *sbuf = ((gint16*)r->data)[j] - 32768; + *sbuf2 = ((gint16*)r->data)[j + 1] - 32768; + } + break; + case ST_MIXER_FORMAT_S8: + for (j = 0; j < r->length; j += 2, sbuf++, sbuf2++) { + *sbuf = ((gint8*)r->data)[j] << 8; + *sbuf2 = ((gint8*)r->data)[j + 1] << 8; + } + break; + case ST_MIXER_FORMAT_U8: + for (j = 0; j < r->length; j += 2, sbuf++, sbuf2++) { + *sbuf = (((gint8*)r->data)[j] << 8) - 32768; + *sbuf2 = (((gint8*)r->data)[j + 1] << 8) - 32768; + } + break; + default: + memset(sbuf, 0, r->length); /* Unknown format */ + memset(sbuf2, 0, r->length); + sbuf += r->length >> 1; + sbuf2 += r->length >> 1; + } + } + } else { + switch (fmt) { + case ST_MIXER_FORMAT_S16_LE: + case ST_MIXER_FORMAT_S16_BE: + memcpy(sbuf, r->data, r->length); + sbuf += r->length >> 1; + break; + case ST_MIXER_FORMAT_U16_LE: + case ST_MIXER_FORMAT_U16_BE: + for (j = 0; jlength>> 1; j++, sbuf++) + *sbuf = ((gint16*)r->data)[j] - 32768; + break; + case ST_MIXER_FORMAT_S8: + for (j = 0; j < r->length; j++, sbuf++) + *sbuf = ((gint8*)r->data)[j] << 8; + break; + case ST_MIXER_FORMAT_U8: + for (j = 0; j < r->length; j++, sbuf++) + *sbuf = (((gint8*)r->data)[j] << 8) - 32768; + break; + default: + memset(sbuf, 0, r->length); /* Unknown format */ + sbuf += r->length >> 1; + } + } } - if(recordedlen > mixer->max_sample_length) { - error_warning(_("Recorded sample is too long for current mixer module. Using it anyway.")); + if (rlen > mixer->max_sample_length) { + static GtkWidget* dialog = NULL; + gui_warning_dialog(&dialog, _("Recorded sample is too long for current mixer module. Using it anyway."), FALSE); } - current_sample->sample.length = recordedlen; + current_sample->sample.length = rlen >> 1; /* Sample size is given in 16-bit words */ current_sample->volume = 64; current_sample->panning = 128; - current_sample->treat_as_8bit = FALSE; + current_sample->treat_as_8bit = !multiply; - xm_freq_note_to_relnote_finetune(rate, - 4 * 12 + 1, // at C-4 - ¤t_sample->relnote, - ¤t_sample->finetune); + xm_freq_note_to_relnote_finetune(srate, + 4 * 12 + 1, // at C-4 + ¤t_sample->relnote, + ¤t_sample->finetune); sample_editor_unlock_sample(); + if (mode == MODE_STEREO_2) { + if (gui_playing_mode) { + mixer->updatesample(&next->sample); + } + g_mutex_unlock(&next->sample.lock); + } - instrument_editor_update(); + instrument_editor_update(TRUE); sample_editor_update(); - xm_set_modified(1); } static void -sample_editor_start_sampling_clicked (void) +sample_editor_ok_clicked(void) { - sampler_page_enable_widgets(FALSE); - sampling = 1; + sample_editor_chain_to_sample(recordbufs, recordedlen, format, rate, has_data, + N_(""), N_("recorded"), N_("Sampling")); } /* ==================== VOLUME RAMPING DIALOG =================== */ static void -sample_editor_lrvol (GtkWidget *widget, - gpointer data) +sample_editor_lrvol(GtkWidget* widget, + gpointer data) { int mode = GPOINTER_TO_INT(data); - switch(mode) - { - case 0: case 2: - gtk_spin_button_set_value(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[mode/2]), 50); + switch (mode) { + case 0: + case 2: + gtk_spin_button_set_value(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[mode / 2]), 50); break; - case 4: case 8: - gtk_spin_button_set_value(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[mode/8]), 200); + case 4: + case 8: + gtk_spin_button_set_value(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[mode / 8]), 200); break; } } - static void -sample_editor_open_volume_ramp_dialog (void) +sample_editor_perform_ramp(gint action) { - GtkWidget *mainbox, *box1, *thing; - gint i; - const char *labels1[] = { - _("Normalize"), - _("Execute"), - _("Close") - }; + double left, right; + gint ss = sampledisplay->sel_start, se = sampledisplay->sel_end; + gint i, m, q; + gint16* p; + gboolean set_selection = TRUE; + const gchar* title; + + if (!current_sample) + return; + if (ss == -1) { + ss = 0; + se = current_sample->sample.length; + set_selection = FALSE; + } + + switch (action) { + case 1: + // Find maximum amplitude + p = current_sample->sample.data; + p += ss; + for (i = 0, m = 0; i < se - ss; i++) { + q = *p++; + q = ABS(q); + if (q > m) + m = q; + } + left = right = (double)0x7fff / m; + title = N_("Sample normalizing"); + break; + case 2: + left = gtk_spin_button_get_value(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[0])) / 100.0; + right = gtk_spin_button_get_value(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[1])) / 100.0; + title = N_("Sample volume ramping"); + break; + default: + return; + } - if(volrampwindow != NULL) { - gdk_window_raise(volrampwindow->window); - return; - } - -#ifdef USE_GNOME - volrampwindow = gnome_app_new("SoundTracker", _("Volume Ramping")); -#else - volrampwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(volrampwindow), _("Volume Ramping")); -#endif - gtk_signal_connect (GTK_OBJECT (volrampwindow), "delete_event", - GTK_SIGNAL_FUNC (sample_editor_close_volume_ramp_dialog), NULL); + if (!sample_editor_check_and_log_range(current_sample, title, HISTORY_FLAG_LOG_ALL, ss, se)) + return; - gtk_window_set_transient_for(GTK_WINDOW(volrampwindow), GTK_WINDOW(mainwindow)); + // Now perform the actual operation + sample_editor_lock_sample(); - mainbox = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(mainbox), 4); -#ifdef USE_GNOME - gnome_app_set_contents(GNOME_APP(volrampwindow), mainbox); -#else - gtk_container_add(GTK_CONTAINER(volrampwindow), mainbox); -#endif - gtk_widget_show(mainbox); + p = current_sample->sample.data; + p += ss; + for (i = 0; i < se - ss; i++) { + double q = *p; + q *= left + i * (right - left) / (se - ss); + *p++ = CLAMP((int)q, -32768, +32767); + } - thing = gtk_label_new(_("Perform linear volume fade on Selection")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + sample_editor_unlock_sample(); + sample_editor_update(); + if (set_selection) + sample_display_set_selection(sampledisplay, ss, se); +} - thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); +void +sample_editor_normalize(void) +{ + sample_editor_perform_ramp(1); +} - box1 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box1); - gtk_box_pack_start(GTK_BOX(mainbox), box1, FALSE, TRUE, 0); +void +sample_editor_open_volume_ramp_dialog(void) +{ + static GtkWidget* volrampwindow = NULL; + gint response; - gui_put_labelled_spin_button(box1, _("Left [%]:"), -1000, 1000, &sample_editor_volramp_spin_w[0], NULL, NULL); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[0]), sample_editor_volramp_last_values[0]); + if (volrampwindow == NULL) { + GtkWidget *mainbox, *box1, *thing; - thing = gtk_button_new_with_label(_("H")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_lrvol), (gpointer)0); + volrampwindow = gtk_dialog_new_with_buttons(_("Volume Ramping"), GTK_WINDOW(mainwindow), 0, + GTK_STOCK_EXECUTE, 2, + GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); + gui_dialog_connect(volrampwindow, G_CALLBACK(sample_editor_perform_ramp)); - thing = gtk_button_new_with_label(_("D")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_lrvol), (gpointer)4); + gui_dialog_adjust(volrampwindow, 2); + mainbox = gtk_dialog_get_content_area(GTK_DIALOG(volrampwindow)); + gtk_box_set_spacing(GTK_BOX(mainbox), 2); - add_empty_hbox(box1); + thing = gtk_label_new(_("Perform linear volume fade on Selection")); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - gui_put_labelled_spin_button(box1, _("Right [%]:"), -1000, 1000, &sample_editor_volramp_spin_w[1], NULL, NULL); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[1]), sample_editor_volramp_last_values[1]); + thing = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - thing = gtk_button_new_with_label(_("H")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_lrvol), (gpointer)2); + box1 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(mainbox), box1, FALSE, TRUE, 4); - thing = gtk_button_new_with_label(_("D")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_lrvol), (gpointer)8); + gui_put_labelled_spin_button(box1, _("Left [%]:"), -1000, 1000, &sample_editor_volramp_spin_w[0], NULL, NULL, FALSE); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[0]), 100); - thing = gtk_hseparator_new(); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); - + thing = gtk_button_new_with_label(_("H")); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); + gtk_widget_set_tooltip_text(thing, _("Half")); + g_signal_connect(thing, "clicked", + G_CALLBACK(sample_editor_lrvol), GINT_TO_POINTER(0)); + + thing = gtk_button_new_with_label(_("D")); + gtk_widget_set_tooltip_text(thing, _("Double")); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "clicked", + G_CALLBACK(sample_editor_lrvol), GINT_TO_POINTER(4)); + + add_empty_hbox(box1); + + gui_put_labelled_spin_button(box1, _("Right [%]:"), -1000, 1000, &sample_editor_volramp_spin_w[1], NULL, NULL, FALSE); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[1]), 100); - box1 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box1); - gtk_box_pack_start(GTK_BOX(mainbox), box1, FALSE, TRUE, 0); + thing = gtk_button_new_with_label(_("H")); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); + gtk_widget_set_tooltip_text(thing, _("Half")); + g_signal_connect(thing, "clicked", + G_CALLBACK(sample_editor_lrvol), GINT_TO_POINTER(2)); - for(i = 0; i < 3; i++) { - thing = gtk_button_new_with_label(labels1[i]); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box1), thing, TRUE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_perform_ramp), - GINT_TO_POINTER(i)); + thing = gtk_button_new_with_label(_("D")); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); + gtk_widget_set_tooltip_text(thing, _("Double")); + g_signal_connect(thing, "clicked", + G_CALLBACK(sample_editor_lrvol), GINT_TO_POINTER(8)); + + thing = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 4); + + gtk_widget_show_all(volrampwindow); } - gtk_widget_show (volrampwindow); + response = gtk_dialog_run(GTK_DIALOG(volrampwindow)); + gtk_widget_hide(volrampwindow); + sample_editor_perform_ramp(response); } -static void -sample_editor_close_volume_ramp_dialog (void) +/* ====================== SILENCE INSERTION ===================== */ +void +sample_editor_insert_silence(void) { - sample_editor_volramp_last_values[0] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[0])); - sample_editor_volramp_last_values[1] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[1])); + static GtkWidget *dialog = NULL; + static GtkWidget *position[2], *discretes; - gtk_widget_destroy(volrampwindow); - volrampwindow = NULL; -} + gint response, start, length, tail; + gboolean reselection = TRUE, at_beg; + gint ss = sampledisplay->sel_start, se = sampledisplay->sel_end; + gint ns = sampledisplay->win_start, + ne = sampledisplay->win_start + sampledisplay->win_length; + st_mixer_sample_info* smp; + + const gchar* labels[] = { + N_("Before selection or at the beginnning"), + N_("After selection or at the end") + }; -static void -sample_editor_perform_ramp (GtkWidget *w, - gpointer data) -{ - int action = GPOINTER_TO_INT(data); - double left, right; - const int ss = sampledisplay->sel_start, se = sampledisplay->sel_end; - int i; - gint16 *p; - - if(action == 2 || !current_sample || ss == -1) { - sample_editor_close_volume_ramp_dialog(); - return; - } - - if(action == 0) { - // Find maximum amplitude - int m; - int q; - p = current_sample->sample.data; - p += ss; - for(i = 0, m = 0; i < se - ss; i++) { - q = *p++; - q = ABS(q); - if(q > m) - m = q; - } - left = right = (double)0x7fff / m; - } else { - left = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[0])) / 100; - right = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[1])) / 100; + if (!current_sample) + return; + smp = ¤t_sample->sample; + if (!smp->length) + return; + + if (ss == -1) { + ss = 0; + se = smp->length; + reselection = FALSE; } - // Now perform the actual operation - sample_editor_lock_sample(); + if (!dialog) { + GtkWidget *mainbox, *thing, *box; - p = current_sample->sample.data; - p += ss; - for(i = 0; i < se - ss; i++) { - double q = *p; - q *= left + i * (right - left) / (se - ss); - *p++ = CLAMP((int)q, -32768, +32767); - } + dialog = gtk_dialog_new_with_buttons(_("Insert silence"), GTK_WINDOW(mainwindow), GTK_DIALOG_MODAL, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); + gui_dialog_adjust(dialog, GTK_RESPONSE_OK); + mainbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + gtk_box_set_spacing(GTK_BOX(mainbox), 2); + + make_radio_group(labels, mainbox, position, FALSE, FALSE, NULL); + + box = gtk_hbox_new(FALSE, 0); + + thing = gtk_label_new(_("Number of discretes")); + gtk_box_pack_start(GTK_BOX(box), thing, FALSE, FALSE, 0); + discretes = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(1000.0, 1.0, INT_MAX, 1.0, 5.0, 0.0)), 0, 0); + gtk_box_pack_end(GTK_BOX(box), discretes, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(mainbox), box, FALSE, FALSE, 0); - if(current_sample->treat_as_8bit) { - st_sample_cutoff_lowest_8_bits(current_sample->sample.data + ss, - se - ss); + thing = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 4); + + gtk_widget_show_all(dialog); } - + + response = gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_hide(dialog); + + if (response != GTK_RESPONSE_OK) + return; + + length = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(discretes)); + if (!sample_editor_check_and_log_sample(current_sample, + N_("Silence insertion"), HISTORY_FLAG_LOG_ALL, smp->length + length)) + return; + + sample_editor_lock_sample(); + at_beg = (find_current_toggle(position, 2) == 0); + start = at_beg ? ss : se; + tail = smp->length - start; + smp->length += length; + smp->data = g_renew(gint16, smp->data, smp->length); + memmove(&smp->data[start + length], &smp->data[start], tail * sizeof(smp->data[0])); + memset(&smp->data[start], 0, length * sizeof(smp->data[0])); sample_editor_unlock_sample(); - xm_set_modified(1); + + + if (smp->loopend > start) + smp->loopend += length; + if (smp->loopstart >= start) { + smp->loopstart += length; + /* Because loop end anyway will be changed if the loop start is changed */ + sample_editor_block_loop_spins(1); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin_loopstart), 0, smp->loopend - 1); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin_loopend), 1, smp->loopstart + 1); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_loopstart), smp->loopstart); + sample_editor_block_loop_spins(0); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_loopend), smp->loopend); + } + sample_editor_update(); - sample_display_set_selection(sampledisplay, ss, se); -} + sample_display_set_window(sampledisplay, ns, ne); -/* =================== TRIM AND CROP FUNCTIONS ================== */ -static void -togglebutton_toggled (GtkToggleButton *widget, gboolean *state_var) -{ - *state_var = gtk_toggle_button_get_active(widget); + if (reselection) { + if (at_beg) { + ss += length; + se += length; + } + sample_display_set_selection(sampledisplay, ss, se); + } } -static void -adjustment_value_changed (GtkAdjustment *adj, gfloat *value) +/* =================== TRIM AND CROP FUNCTIONS ================== */ +void +sample_editor_trim_dialog(void) { - *value = adj->value; -} + static GtkAdjustment* adj; + static GtkWidget *trimdialog = NULL, *trimbeg, *trimend; + GtkWidget *mainbox, *thing, *box; + gint response; + + if (!trimdialog) { + trimdialog = gtk_dialog_new_with_buttons(_("Trim parameters"), GTK_WINDOW(mainwindow), GTK_DIALOG_MODAL, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); + gui_dialog_adjust(trimdialog, GTK_RESPONSE_OK); + mainbox = gtk_dialog_get_content_area(GTK_DIALOG(trimdialog)); + gtk_box_set_spacing(GTK_BOX(mainbox), 2); + + trimbeg = thing = gtk_check_button_new_with_label(_("Trim at the beginning")); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), TRUE); + + trimend = thing = gtk_check_button_new_with_label(_("Trim at the end")); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), TRUE); + + box = gtk_hbox_new(FALSE, 0); + + thing = gtk_label_new(_("Threshold (dB)")); + gtk_box_pack_start(GTK_BOX(box), thing, FALSE, FALSE, 0); + thing = gtk_spin_button_new(adj = GTK_ADJUSTMENT(gtk_adjustment_new(-50.0, -80.0, -20.0, 1.0, 5.0, 0.0)), 0, 0); + gtk_box_pack_end(GTK_BOX(box), thing, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(mainbox), box, FALSE, FALSE, 0); + + thing = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 4); + + gtk_widget_show_all(trimdialog); + } else + gtk_window_present(GTK_WINDOW(trimdialog)); -#ifndef USE_GNOME -static void -trim_dialog_close_requested () -{ + response = gtk_dialog_run(GTK_DIALOG(trimdialog)); gtk_widget_hide(trimdialog); -} -#endif -static void -trim_dialog_clicked (GtkWidget *widget, gint button) -{ - if(button == 0) - sample_editor_trim(trimbeg, trimend, threshold); + if (response == GTK_RESPONSE_OK) + sample_editor_trim(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(trimbeg)), + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(trimend)), adj->value); } static void -sample_editor_trim_dialog (void) -{ - GtkObject *adj; - GtkWidget *mainbox, *thing; -#ifndef USE_GNOME - GtkWidget *button, *vbox; -#endif - - if(trimdialog != NULL) { - gtk_widget_show(trimdialog); - return; - } - -#ifdef USE_GNOME - trimdialog = gnome_dialog_new(_("Trim parameters"), - GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, NULL); - gnome_dialog_close_hides(GNOME_DIALOG(trimdialog), TRUE); - gnome_dialog_set_close(GNOME_DIALOG(trimdialog), TRUE); - gnome_dialog_set_default(GNOME_DIALOG(trimdialog), 0); - gtk_signal_connect(GTK_OBJECT(trimdialog), "clicked", - GTK_SIGNAL_FUNC (trim_dialog_clicked), NULL); - mainbox = GNOME_DIALOG(trimdialog)->vbox; -#else -/* stolen from Gnome UI code. With Gnome life seemed so easy... (yaliaev) */ - trimdialog = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_window_set_title(GTK_WINDOW(trimdialog), _("Trim parameters")); - gtk_container_border_width(GTK_CONTAINER(trimdialog), 4); - - vbox = gtk_vbox_new(FALSE, 8); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 4); - gtk_container_add(GTK_CONTAINER(trimdialog), vbox); - gtk_widget_show(vbox); - - gtk_window_set_policy (GTK_WINDOW (trimdialog), FALSE, - FALSE, FALSE); - - mainbox = gtk_vbox_new(FALSE, 8); - gtk_box_pack_start (GTK_BOX (vbox), mainbox, - TRUE, TRUE, 4); - - thing = gtk_hbutton_box_new (); - - gtk_button_box_set_spacing (GTK_BUTTON_BOX (thing), 8); - - button = gtk_button_new_with_label(_("Ok")); - GTK_WIDGET_SET_FLAGS (GTK_WIDGET (button), GTK_CAN_DEFAULT); - gtk_box_pack_start (GTK_BOX (thing), button, TRUE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC (trim_dialog_clicked), (gpointer)0); - gtk_widget_grab_default (button); - gtk_widget_show (button); - - button = gtk_button_new_with_label(_("Cancel")); - gtk_box_pack_start (GTK_BOX (thing), button, TRUE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC (trim_dialog_clicked), (gpointer)1); - gtk_widget_show (button); - - gtk_box_pack_end (GTK_BOX (vbox), thing, - FALSE, TRUE, 0); - gtk_widget_show (thing); - - thing = gtk_hseparator_new (); - gtk_box_pack_end (GTK_BOX (vbox), thing, - FALSE, TRUE, 4); - gtk_widget_show (thing); - - gtk_signal_connect(GTK_OBJECT (trimdialog), "delete_event", - GTK_SIGNAL_FUNC (trim_dialog_close_requested), NULL); -#endif - thing = gtk_check_button_new_with_label(_("Trim at the beginning")); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 0); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), trimbeg); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(togglebutton_toggled), &trimbeg); - gtk_widget_show(thing); - - thing = gtk_check_button_new_with_label(_("Trim at the end")); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 0); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), trimend); - gtk_signal_connect(GTK_OBJECT(thing), "toggled", - GTK_SIGNAL_FUNC(togglebutton_toggled), &trimend); - gtk_widget_show(thing); - - thing = gtk_label_new(_("Threshold (dB)")); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 0); - gtk_widget_show(thing); - - thing = gtk_hscale_new(GTK_ADJUSTMENT(adj = gtk_adjustment_new(threshold, -80.0, -20.0, 1.0, 5.0, 0.0))); - gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(adj), "value_changed", - GTK_SIGNAL_FUNC(adjustment_value_changed), &threshold); - gtk_widget_show(thing); - - gtk_widget_show_all(trimdialog); -} - -static void sample_editor_trim(gboolean trbeg, gboolean trend, gfloat thrshld) { int start = sampledisplay->sel_start, end = sampledisplay->sel_end; @@ -2530,155 +3182,147 @@ int amp = 0, val, bval = 0, maxamp, ground; int on, off; double avg; - int reselect = 1; - gint16 *data; + int reselect = 1; + gint16* data; + + if (current_sample == NULL) + return; + if (!trbeg && !trend) + return; - if(current_sample == NULL) return; - if(!trbeg && !trend) return; - /* if there's no selection, we operate on the entire sample */ - if(start == -1) { + if (start == -1) { start = 0; end = current_sample->sample.length; reselect = 0; } - + data = current_sample->sample.data; /* Finding the maximum amplitude */ - for(i = 0, maxamp = 0; i < end - start; i++) { - val = *(data + i); - val = ABS(val); - if(val > maxamp) - maxamp = val; - } - - if (maxamp == 0) return; - - ground = rint((gfloat)maxamp * pow(10.0, thrshld/20)); - + for (i = 0, maxamp = 0; i < end - start; i++) { + val = *(data + i); + val = ABS(val); + if (val > maxamp) + maxamp = val; + } + + if (maxamp == 0) + return; + + ground = rint((gfloat)maxamp * pow(10.0, thrshld / 20)); + /* Computing the beginning average level until we reach the ground level */ - for(c = 0, ofs = start, amp = 0, avg = 0; ofs < end && amp < ground ; ofs++) { - val = *(data + ofs); - if (ofs == start) { - bval = - val; - amp = ABS(val); - } - if ((val < 0 && bval >= 0) || (val >= 0 && bval < 0)) { - avg += amp; - c++; - amp = 0; - } else { - if (ABS(val) > amp) amp = ABS(val); - } - bval = val; + for (c = 0, ofs = start, amp = 0, avg = 0; ofs < end && amp < ground; ofs++) { + val = *(data + ofs); + if (ofs == start) { + bval = -val; + amp = ABS(val); + } + if ((val < 0 && bval >= 0) || (val >= 0 && bval < 0)) { + avg += amp; + c++; + amp = 0; + } else { + if (ABS(val) > amp) + amp = ABS(val); + } + bval = val; } avg = avg / c; - + /* Locating when sounds turns on. That is : when we *last* got higher than the average level. */ - for(amp = maxamp; ofs > start && amp > avg; --ofs) { - //fprintf(stderr,"reverse\n"); + for (amp = maxamp; ofs > start && amp > avg; --ofs) { amp = 0; - for(val = 1; ofs > start && val > 0; --ofs) { + for (val = 1; ofs > start && val > 0; --ofs) { val = *(data + ofs); - if (val > amp) amp = val; + if (val > amp) + amp = val; } - for(; ofs > start && val <= 0; --ofs) { + for (; ofs > start && val <= 0; --ofs) { val = *(data + ofs); - if (-val > amp) amp = -val; + if (-val > amp) + amp = -val; } } on = ofs; - + /* Computing the ending average level until we reach the ground level */ - for(ofs = end - 1, avg = 0, amp = 0, c = 0; ofs > on && amp < ground ; ofs--) { + for (ofs = end - 1, avg = 0, amp = 0, c = 0; ofs > on && amp < ground; ofs--) { val = *(data + ofs); - if (ofs == end -1) { + if (ofs == end - 1) { bval = -val; amp = ABS(val); } - if((val < 0 && bval >= 0) || (val >= 0 && bval < 0)) { + if ((val < 0 && bval >= 0) || (val >= 0 && bval < 0)) { avg += amp; c++; amp = 0; - } else { - if (ABS(val) > amp) amp = ABS(val); - } + } else { + if (ABS(val) > amp) + amp = ABS(val); + } bval = val; } avg = avg / c; - + /* Locating when sounds turns off. That is : when we *last* got higher than the average level. */ for (amp = maxamp; ofs < end && amp > avg; ++ofs) { amp = 0; for (val = 1; ofs < end && val > 0; ++ofs) { val = *(data + ofs); - if (val > amp) amp = val; + if (val > amp) + amp = val; } - for (;ofs < end && val <= 0; ++ofs) { + for (; ofs < end && val <= 0; ++ofs) { val = *(data + ofs); - if (-val > amp) amp = -val; + if (-val > amp) + amp = -val; } } off = ofs; - + // Wiping blanks out - if (on < start) on = start; - if (off > end) off = end; + if (on < start) + on = start; + if (off > end) + off = end; + if (!sample_editor_check_and_log_sample(current_sample, + N_("Sample trimming"), HISTORY_FLAG_LOG_ALL, 0)) + return; + sample_editor_lock_sample(); if (trbeg) { - sample_editor_delete(current_sample, start, on); - off -= on - start; - end -= on - start; + sample_editor_delete(current_sample, start, on); + off -= on - start; + end -= on - start; } if (trend) - sample_editor_delete(current_sample, off, end); + sample_editor_delete(current_sample, off, end); st_sample_fix_loop(current_sample); sample_editor_unlock_sample(); - - sample_editor_set_sample(current_sample); - xm_set_modified(1); - - if (reselect == 1 && off > on) - sample_display_set_selection(sampledisplay, start, start + off - on); -} - -static void -sample_editor_crop() -{ - int start = sampledisplay->sel_start, end = sampledisplay->sel_end; - if(current_sample == NULL || start == -1) - return; + sample_editor_update(); - int l = current_sample->sample.length; - - sample_editor_lock_sample(); - sample_editor_delete(current_sample, 0, start); - sample_editor_delete(current_sample, end - start, l - start); - sample_editor_unlock_sample(); - - sample_editor_set_sample(current_sample); - xm_set_modified(1); - + if (reselect == 1 && off > on) + sample_display_set_selection(sampledisplay, start, start + off - on); } /* deletes the portion of *sample data from start to end-1 */ -void -sample_editor_delete (STSample *sample,int start, int end) +static void sample_editor_delete(STSample* sample, int start, int end) { int newlen; - gint16 *newdata; - - if(sample == NULL || start == -1 || start >= end) - return; - + gint16* newdata; + + if (sample == NULL || start == -1 || start >= end) + return; + newlen = sample->sample.length - end + start; newdata = malloc(newlen * 2); - if(!newdata) - return; + if (!newdata) + return; memcpy(newdata, sample->sample.data, start * 2); memcpy(newdata + start, sample->sample.data + end, (sample->sample.length - end) * 2); @@ -2689,30 +3333,37 @@ sample->sample.length = newlen; /* Move loop start and end along with splice */ - if(sample->sample.loopstart > start && - sample->sample.loopend < end) { - /* loop was wholly within selection -- remove it */ - sample->sample.looptype = ST_MIXER_SAMPLE_LOOPTYPE_NONE; - sample->sample.loopstart = 0; - sample->sample.loopend = 1; + if (sample->sample.loopstart > start && sample->sample.loopend < end) { + /* loop was wholly within selection -- remove it */ + sample->sample.looptype = ST_MIXER_SAMPLE_LOOPTYPE_NONE; + sample->sample.loopstart = 0; + sample->sample.loopend = 1; } else { - if(sample->sample.loopstart > end) { - /* loopstart was after selection */ - sample->sample.loopstart -= (end-start); - } else if(sample->sample.loopstart > start) { - /* loopstart was within selection */ - sample->sample.loopstart = start; - } - - if(sample->sample.loopend > end) { - /* loopend was after selection */ - sample->sample.loopend -= (end-start); - } else if(sample->sample.loopend > start) { - /* loopend was within selection */ - sample->sample.loopend = start; - } + if (sample->sample.loopstart > end) { + /* loopstart was after selection */ + sample->sample.loopstart -= (end - start); + } else if (sample->sample.loopstart > start) { + /* loopstart was within selection */ + sample->sample.loopstart = start; + } + + if (sample->sample.loopend > end) { + /* loopend was after selection */ + sample->sample.loopend -= (end - start); + } else if (sample->sample.loopend > start) { + /* loopend was within selection */ + sample->sample.loopend = start; + } } st_sample_fix_loop(sample); +} + +GtkAdjustment* +sample_editor_get_adjustment(SampleEditorSpin n) +{ + GtkWidget* spn = se_spins[n]; + g_assert(GTK_IS_SPIN_BUTTON(spn)); + return gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(spn)); } diff -Nru soundtracker-0.6.8/app/sample-editor.h soundtracker-1.0.2~pre2/app/sample-editor.h --- soundtracker-0.6.8/app/sample-editor.h 2004-01-11 15:19:55.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/sample-editor.h 2020-11-27 17:10:26.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - sample editor (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,30 +22,78 @@ #ifndef _SAMPLE_EDITOR_H #define _SAMPLE_EDITOR_H -#include +#include "driver.h" +#include "sample-display.h" #include "xm.h" -#include "driver-in.h" - -void sample_editor_page_create (GtkNotebook *nb); - -gboolean sample_editor_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval, - gboolean pressed); - -void sample_editor_set_sample (STSample *); -void sample_editor_update (void); - -void sample_editor_stop_sampling (void); - -void sample_editor_start_updating (void); -void sample_editor_stop_updating (void); - -void sample_editor_copy_cut_common (gboolean copy, gboolean spliceout); -void sample_editor_paste_clicked (void); +#include -extern st_in_driver *sampling_driver; -extern void *sampling_driver_object; +typedef enum { + SAMPLE_EDITOR_DISPLAY_EDITOR = 0, + SAMPLE_EDITOR_DISPLAY_SAMPLING +} SampleEditorDisplay; + +typedef enum { + SAMPLE_EDITOR_VOLUME = 0, + SAMPLE_EDITOR_PANNING, + SAMPLE_EDITOR_FINETUNE, + SAMPLE_EDITOR_RELNOTE, + SAMPLE_EDITOR_SPIN_LAST +} SampleEditorSpin; + +typedef struct _STSampleChain STSampleChain; +struct _STSampleChain { + STSampleChain* next; + guint length; + void* data; +}; + +void sample_editor_page_create(GtkNotebook* nb); + +gboolean sample_editor_handle_keys(int shift, + int ctrl, + int alt, + guint32 keyval, + gboolean pressed); + +void sample_editor_set_sample(STSample*); +void sample_editor_update(void); + +void sample_editor_stop_sampling(void); +void sample_editor_clear_buffers(STSampleChain* bufs); +void sample_editor_chain_to_sample(STSampleChain *bufs, + guint32 rlen, + STMixerFormat fmt, + guint32 srate, + const gboolean data_present, + const gchar* samplename, + const gchar* action, + const gchar* log_name); + +void sample_editor_start_updating(void); +void sample_editor_stop_updating(void); + +void sample_editor_copy_cut_common(gboolean copy, gboolean spliceout); +void sample_editor_paste_clicked(void); +void sample_editor_xcopy_samples(STSample* src_smp, + STSample* dest_smp, + const gboolean xchg); + +gboolean sample_editor_check_and_log_sample(STSample* sample, + const gchar* title, + const gint flags, + const gsize data_length); + +extern st_driver* sampling_driver; +extern void* sampling_driver_object; + +void sample_editor_set_mode(SampleEditorDisplay, SampleDisplayMode); +GtkAdjustment* sample_editor_get_adjustment(SampleEditorSpin); +void sample_editor_update_status(void); + +gboolean +sample_editor_sampled(void* src, + guint32 count, + gint mixfreq, + gint mixformat); #endif /* _SAMPLE_EDITOR_H */ diff -Nru soundtracker-0.6.8/app/scalablepic.c soundtracker-1.0.2~pre2/app/scalablepic.c --- soundtracker-0.6.8/app/scalablepic.c 2003-03-02 13:54:05.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/scalablepic.c 2020-01-24 17:46:37.000000000 +0000 @@ -3,8 +3,8 @@ * The Real SoundTracker - automatically scalable widget containing * an image * - * Copyright (C) 2002 Yury Aliaev - * Copyright (C) 1998-2002 Michael Krause + * Copyright (C) 2002, 2019 Yury Aliaev + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,227 +21,276 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include + #include "scalablepic.h" -static void scalable_pic_class_init (ScalablePicClass *klass); -static void scalable_pic_init (ScalablePic *sp); -static void scalable_pic_realize (GtkWidget *widget); -static void scalable_pic_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -static void scalable_pic_send_configure (ScalablePic *sp); -static void scalable_pic_draw (GtkWidget *widget, GdkRectangle *area); -static gint scalable_pic_event (GtkWidget *widget, GdkEvent *event); -static void scalable_pic_size_request (GtkWidget *widget, GtkRequisition *requisition); -static void scalable_pic_destroy (GtkObject *object); - -guint scalable_pic_get_type (void) -{ - static guint scalable_pic_type = 0; - - if (!scalable_pic_type) { - static const GtkTypeInfo scalable_pic_info = { - "ScalablePic", - sizeof (ScalablePic), - sizeof (ScalablePicClass), - (GtkClassInitFunc)scalable_pic_class_init, - (GtkObjectInitFunc)scalable_pic_init, - NULL, - NULL, - (GtkClassInitFunc)NULL - }; - scalable_pic_type = gtk_type_unique (gtk_widget_get_type (), - &scalable_pic_info); - } - return (scalable_pic_type); -} +static void scalable_pic_class_init(ScalablePicClass* klass); +static void scalable_pic_realize(GtkWidget* widget); +static void scalable_pic_size_allocate(GtkWidget* widget, GtkAllocation* allocation); +static void scalable_pic_send_configure(ScalablePic* sp); +static void scalable_pic_draw(GtkWidget* widget, GdkRectangle* area); +static gint scalable_pic_expose(GtkWidget* widget, GdkEventExpose* event); +static void scalable_pic_size_request(GtkWidget* widget, GtkRequisition* requisition); +static void scalable_pic_destroy(GtkObject* object); -GtkWidget *scalable_pic_new (GdkPixbuf *pic) +G_DEFINE_TYPE(ScalablePic, scalable_pic, custom_drawing_get_type()) + +GtkWidget* scalable_pic_new(GdkPixbuf* pic, gboolean expand) { - ScalablePic *sp; - - GtkWidget *widget = GTK_WIDGET (gtk_type_new (scalable_pic_get_type ())); - sp = SCALABLE_PIC (widget); + ScalablePic* sp; + + GtkWidget* widget = GTK_WIDGET(g_object_new(scalable_pic_get_type(), NULL)); + sp = SCALABLE_PIC(widget); + sp->expand = expand; sp->pic = pic; - if(pic != NULL) { - sp->maxwidth = 1.414 * (gfloat)(sp->pic_width = gdk_pixbuf_get_width(sp->pic)); - sp->maxheight = 1.414 * (gfloat)(sp->pic_height = gdk_pixbuf_get_height(sp->pic)); - sp->copy = NULL; + if (pic != NULL) { + sp->copy = NULL; + sp->pic_width = gdk_pixbuf_get_width(sp->pic); + sp->pic_height = gdk_pixbuf_get_height(sp->pic); + if (expand) { + sp->maxwidth = rint(1.414 * (gfloat)(sp->pic_width)); + sp->maxheight = rint(1.414 * (gfloat)(sp->pic_height)); + } else { + sp->maxwidth = sp->pic_width; + sp->maxheight = sp->pic_height; + } } - - return (widget); + + di_widget_configure(widget); + return widget; } -static void scalable_pic_class_init (ScalablePicClass *klass) +void +scalable_pic_set_bg(ScalablePic* sp, DIGC gc) { - GtkWidgetClass *widget_class; - GtkObjectClass *object_class; - - widget_class = (GtkWidgetClass *)klass; - object_class = (GtkObjectClass *)klass; - + sp->bg_gc = gc; +} + +static void scalable_pic_class_init(ScalablePicClass* klass) +{ + GtkWidgetClass* widget_class; + GtkObjectClass* object_class; + + widget_class = (GtkWidgetClass*)klass; + object_class = (GtkObjectClass*)klass; + widget_class->realize = scalable_pic_realize; - widget_class->draw = scalable_pic_draw; - widget_class->event = scalable_pic_event; + widget_class->expose_event = scalable_pic_expose; widget_class->size_request = scalable_pic_size_request; widget_class->size_allocate = scalable_pic_size_allocate; - + object_class->destroy = scalable_pic_destroy; } -static void scalable_pic_init (ScalablePic *sp) +static void scalable_pic_init(ScalablePic* sp) { } -static void scalable_pic_realize (GtkWidget *widget) +static void scalable_pic_realize(GtkWidget* widget) { - ScalablePic *sp; GdkWindowAttr attributes; guint attributes_mask; - - g_return_if_fail (widget != NULL); - g_return_if_fail (IS_SCALABLE_PIC (widget)); - - sp = SCALABLE_PIC (widget); - - GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); - + + g_return_if_fail(widget != NULL); + g_return_if_fail(IS_SCALABLE_PIC(widget)); + + gtk_widget_set_realized(widget, TRUE); + attributes.window_type = GDK_WINDOW_CHILD; attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; - attributes.visual = gtk_widget_get_visual (widget); - attributes.colormap = gtk_widget_get_colormap (widget); - attributes.event_mask = gtk_widget_get_events (widget); + attributes.visual = gtk_widget_get_visual(widget); + attributes.colormap = gtk_widget_get_colormap(widget); + attributes.event_mask = gtk_widget_get_events(widget); attributes.event_mask |= GDK_EXPOSURE_MASK; - + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; - widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), - &attributes, attributes_mask); + widget->window = gdk_window_new(gtk_widget_get_parent_window(widget), + &attributes, attributes_mask); + + gdk_window_set_user_data(widget->window, widget); - gdk_window_set_user_data (widget->window, widget); - - widget->style = gtk_style_attach (widget->style, widget->window); - gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); - - scalable_pic_send_configure (SCALABLE_PIC (widget)); -} - -static void scalable_pic_destroy (GtkObject *object) -{ - ScalablePic *sp; - ScalablePicClass *klass; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_SCALABLE_PIC (object)); - - sp = SCALABLE_PIC (object); - if (sp->copy != NULL) gdk_pixbuf_unref (sp->copy); - - klass = gtk_type_class (gtk_widget_get_type ()); - if (GTK_OBJECT_CLASS (klass)->destroy) - (* GTK_OBJECT_CLASS (klass)->destroy)(object); -} - -static void scalable_pic_draw (GtkWidget *widget, GdkRectangle *area) -{ - gboolean need_resize = FALSE; - - ScalablePic *sp; - - g_return_if_fail (widget != NULL); - g_return_if_fail (IS_SCALABLE_PIC (widget)); - - sp = SCALABLE_PIC (widget); - - if(sp->pic == NULL) - return; - - if((widget->allocation.width != sp->former_width) || - (widget->allocation.height != sp->former_height) || - (sp->copy == NULL)) { - if (widget->allocation.width > sp->maxwidth) { - sp->maxwidth = widget->allocation.width; - need_resize = TRUE; - } - if (widget->allocation.height > sp->maxheight) { - sp->maxheight = widget->allocation.height; - need_resize = TRUE; - } - - if (need_resize || (sp->copy == NULL)) - sp->copy = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (sp->pic), - gdk_pixbuf_get_has_alpha (sp->pic), - gdk_pixbuf_get_bits_per_sample (sp->pic), - sp->maxwidth,sp->maxheight); - - gdk_pixbuf_scale (sp->pic, sp->copy, 0, 0, - widget->allocation.width, widget->allocation.height, - 0.0, 0.0, - (double)widget->allocation.width/(double)sp->pic_width, - (double)widget->allocation.height/(double)sp->pic_height, - GDK_INTERP_BILINEAR); + widget->style = gtk_style_attach(widget->style, widget->window); + gtk_style_set_background(widget->style, widget->window, GTK_STATE_NORMAL); - sp->former_width = widget->allocation.width; - sp->former_height = widget->allocation.height; + scalable_pic_send_configure(SCALABLE_PIC(widget)); + (*GTK_WIDGET_CLASS(scalable_pic_parent_class)->realize)(widget); +} + +static void scalable_pic_destroy(GtkObject* object) +{ + ScalablePic* sp; + GObjectClass* klass; + + g_return_if_fail(object != NULL); + g_return_if_fail(IS_SCALABLE_PIC(object)); + + sp = SCALABLE_PIC(object); + if (sp->copy != NULL) + g_object_unref(sp->copy); + + klass = g_type_class_peek_static(GTK_TYPE_WIDGET); + if (GTK_OBJECT_CLASS(klass)->destroy) + (*GTK_OBJECT_CLASS(klass)->destroy)(object); +} + +static void scalable_pic_draw(GtkWidget* widget, GdkRectangle* area) +{ + gboolean need_resize = FALSE; + + ScalablePic* sp; + cairo_t* cr; + + g_return_if_fail(widget != NULL); + g_return_if_fail(IS_SCALABLE_PIC(widget)); + + sp = SCALABLE_PIC(widget); + + if (sp->pic == NULL) + return; + + cr = gdk_cairo_create(custom_drawing_get_gdk_drawable(CUSTOM_DRAWING(widget))); + if (widget->allocation.width != sp->former_width + || widget->allocation.height != sp->former_height + || sp->copy == NULL) { + gdouble ratio_x, ratio_y; + + if (sp->expand && widget->allocation.width > sp->maxwidth) { + sp->maxwidth = widget->allocation.width; + need_resize = TRUE; + } + if (sp->expand && widget->allocation.height > sp->maxheight) { + sp->maxheight = widget->allocation.height; + need_resize = TRUE; + } + + if (need_resize || (sp->copy == NULL)) { + if (sp->copy) + g_object_unref(sp->copy); + /* In case of the non-expandable image this happens only one time */ + sp->copy = gdk_pixbuf_new(gdk_pixbuf_get_colorspace(sp->pic), + gdk_pixbuf_get_has_alpha(sp->pic), + gdk_pixbuf_get_bits_per_sample(sp->pic), + sp->maxwidth, sp->maxheight); + } + + ratio_x = (double)widget->allocation.width / (double)sp->pic_width; + ratio_y = (double)widget->allocation.height / (double)sp->pic_height; + if (sp->expand) + gdk_pixbuf_scale(sp->pic, sp->copy, 0, 0, + widget->allocation.width, widget->allocation.height, + 0.0, 0.0, ratio_x, ratio_y, GDK_INTERP_BILINEAR); + else { + sp->ratio_min = MIN(ratio_x, ratio_y); + + if (sp->ratio_min < 1.0) + gdk_pixbuf_scale(sp->pic, sp->copy, 0, 0, + sp->pic_width, sp->pic_height, + 0.0, 0.0, sp->ratio_min, sp->ratio_min, GDK_INTERP_BILINEAR); + else { /* No expanding, just copy */ + if (sp->copy) + g_object_unref(sp->copy); + sp->copy = gdk_pixbuf_copy(sp->pic); + } + } + + sp->former_width = widget->allocation.width; + sp->former_height = widget->allocation.height; + } + + cairo_reset_clip(cr); + if (sp->expand) { + cairo_rectangle(cr, area->x, area->y, area->width, area->height); + cairo_clip(cr); + gdk_cairo_set_source_pixbuf(cr, sp->copy, 0.0, 0.0); + cairo_paint(cr); + } else {/* All this stuff is needed to center the scaled image and determine the actual area + to be drawn */ + gdouble x0, y0, x_i, x_f, w_i, y_i, y_f, h_i, heff, weff; + + if (sp->ratio_min < 1.0) { + weff = (gdouble)sp->pic_width * sp->ratio_min; + heff = (gdouble)sp->pic_height * sp->ratio_min; + } else { + weff = sp->pic_width; + heff = sp->pic_height; + } + x0 = MAX(0, (widget->allocation.width - weff) / 2); + y0 = MAX(0, (widget->allocation.height - heff) / 2); + x_i = MAX(x0, area->x); + x_f = MIN(x0 + sp->pic_width, area->x + area->width); + w_i = x_f - x_i; + y_i = MAX(y0, area->y); + y_f = MIN(y0 + sp->pic_height, area->y + area->height); + h_i = y_f - y_i; + + di_draw_rectangle(custom_drawing_get_drawable(CUSTOM_DRAWING(widget)), + sp->bg_gc, TRUE, area->x, area->y, area->width, area->height); + if (w_i > 0 && h_i > 0) { + cairo_rectangle(cr, x_i, y_i, w_i, h_i); + cairo_clip(cr); + gdk_cairo_set_source_pixbuf(cr, sp->copy, + ((gdouble)widget->allocation.width - weff) * 0.5, + ((gdouble)widget->allocation.height - heff) * 0.5); + cairo_paint(cr); + } } - gdk_pixbuf_render_to_drawable (sp->copy, widget->window, - widget->style->black_gc, area->x, area->y, area->x, area->y, - area->width, area->height, GDK_RGB_DITHER_NORMAL, 0, 0); + cairo_destroy(cr); } -static void scalable_pic_size_request (GtkWidget *widget, - GtkRequisition *requisition) +static void scalable_pic_size_request(GtkWidget* widget, + GtkRequisition* requisition) { - g_return_if_fail (widget != NULL); - g_return_if_fail (IS_SCALABLE_PIC (widget)); + g_return_if_fail(widget != NULL); + g_return_if_fail(IS_SCALABLE_PIC(widget)); - /* widget then adjust its dimensions */ + /* widget then adjust its dimensions */ requisition->width = 0; requisition->height = 0; } -static void scalable_pic_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) +static void scalable_pic_size_allocate(GtkWidget* widget, + GtkAllocation* allocation) { - g_return_if_fail (widget != NULL); - g_return_if_fail (IS_SCALABLE_PIC (widget)); - g_return_if_fail (allocation != NULL); + g_return_if_fail(widget != NULL); + g_return_if_fail(IS_SCALABLE_PIC(widget)); + g_return_if_fail(allocation != NULL); widget->allocation.x = allocation->x; widget->allocation.y = allocation->y; widget->allocation.width = allocation->width; widget->allocation.height = allocation->height; - if (GTK_WIDGET_REALIZED (widget)) { - gdk_window_move_resize (widget->window, allocation->x, allocation->y, - allocation->width, allocation->height); - scalable_pic_send_configure (SCALABLE_PIC (widget)); + if (gtk_widget_get_realized(widget)) { + gdk_window_move_resize(widget->window, allocation->x, allocation->y, + allocation->width, allocation->height); + scalable_pic_send_configure(SCALABLE_PIC(widget)); } + + (*GTK_WIDGET_CLASS(scalable_pic_parent_class)->size_allocate)(widget, allocation); } -static gint scalable_pic_event (GtkWidget *widget, GdkEvent *event) +static gint scalable_pic_expose(GtkWidget* widget, GdkEventExpose* event) { - GdkEventExpose *evnt; - - evnt = (GdkEventExpose *)event; + g_return_val_if_fail(widget != NULL, FALSE); + g_return_val_if_fail(IS_SCALABLE_PIC(widget), FALSE); + + scalable_pic_draw(widget, &event->area); - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (IS_SCALABLE_PIC (widget), FALSE); - - if (event->type == GDK_EXPOSE) - scalable_pic_draw (widget, &(evnt->area)); - else return (FALSE); - return (TRUE); + return (*GTK_WIDGET_CLASS(scalable_pic_parent_class)->expose_event)(widget, event); } -static void scalable_pic_send_configure (ScalablePic *sp) +static void scalable_pic_send_configure(ScalablePic* sp) { - GtkWidget *widget; + GtkWidget* widget; GdkEventConfigure event; - widget = GTK_WIDGET (sp); + widget = GTK_WIDGET(sp); event.type = GDK_CONFIGURE; event.window = widget->window; @@ -250,5 +299,5 @@ event.width = widget->allocation.width; event.height = widget->allocation.height; - gtk_widget_event (widget, (GdkEvent *)&event); + gtk_widget_event(widget, (GdkEvent*)&event); } diff -Nru soundtracker-0.6.8/app/scalablepic.h soundtracker-1.0.2~pre2/app/scalablepic.h --- soundtracker-0.6.8/app/scalablepic.h 2003-03-02 13:54:11.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/scalablepic.h 2020-01-24 17:46:37.000000000 +0000 @@ -3,8 +3,8 @@ * The Real SoundTracker - automatically scalable widget containing * an image (header) * - * Copyright (C) 2002 Yury Aliaev - * Copyright (C) 1998-2002 Michael Krause + * Copyright (C) 2002 Yury Aliaev + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,37 +24,33 @@ #ifndef __SCALABLE_PIC_H #define __SCALABLE_PIC_H -#include -#include #include -#ifdef __cplusplus -extern "C" { -#endif +#include "customdrawing.h" #define SCALABLE_PIC(obj) \ - GTK_CHECK_CAST (obj, scalable_pic_get_type (), ScalablePic) + (G_TYPE_CHECK_INSTANCE_CAST(obj, scalable_pic_get_type(), ScalablePic)) #define SCALABLE_PIC_CLASS(klass) \ - GTK_CHECK_CLASS_CAST (klass, scalable_pic_get_type (), ScalablePicClass) + (G_TYPE_CHECK_CLASS_CAST(klass, scalable_pic_get_type(), ScalablePicClass)) #define IS_SCALABLE_PIC(obj) \ - GTK_CHECK_TYPE (obj, scalable_pic_get_type ()) + (G_TYPE_CHECK_INSTANCE_TYPE(obj, scalable_pic_get_type())) typedef struct _ScalablePic { - GtkWidget widget; + CustomDrawing widget; GdkPixbuf *pic, *copy; + DIGC bg_gc; gint maxwidth, maxheight, former_width, former_height, pic_width, pic_height; + gboolean expand; + gdouble ratio_min; } ScalablePic; typedef struct _ScalablePicClass { - GtkWidgetClass parent_class; + CustomDrawingClass parent_class; } ScalablePicClass; /* create a widget containing GdkPixbuf image */ -GtkWidget *scalable_pic_new (GdkPixbuf *pic); -guint scalable_pic_get_type (void); - -#ifdef __cplusplus -} -#endif +GType scalable_pic_get_type(void) G_GNUC_CONST; +GtkWidget* scalable_pic_new(GdkPixbuf* pic, gboolean expand); +void scalable_pic_set_bg(ScalablePic* w, DIGC gc); #endif /* __SCALABLE_PIC_H */ diff -Nru soundtracker-0.6.8/app/scope-group.c soundtracker-1.0.2~pre2/app/scope-group.c --- soundtracker-0.6.8/app/scope-group.c 2003-05-17 11:16:36.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/scope-group.c 2020-07-26 21:22:02.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - main window oscilloscope group * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,146 +23,214 @@ #include #include - #include - #include -#include -#include +#include -#ifndef NO_GDK_PIXBUF -#include #include "scalablepic.h" -#endif - -#include "scope-group.h" -#include "sample-display.h" #include "audio.h" -#include "gui-subs.h" +#include "colors.h" #include "gui-settings.h" +#include "gui-subs.h" +#include "sample-display.h" +#include "scope-group.h" +#include "draw-interlayer.h" + +struct _NumberObject{ + DIGC mask_gc, mask_bg_gc; + DIDrawable drawable; + GdkPixmap *number_pm; + /* Size of the drawing area */ + gint width, height; + /* Size of the pixmap */ + gint pm_width, pm_height; + gint number; + gboolean firsttime; + unsigned int old_pixel; +}; + +G_DEFINE_TYPE(ScopeGroup, scope_group, GTK_TYPE_HBOX) + +/* Displacement between the channel number and the left top corner: + x_displ = XDISP + width / FRACTION, the same is for y coordinate */ +static guint XDISP = 1, YDISP = 1, FRACTION = 200; static void -button_toggled (GtkWidget *widget, - int n) +scope_group_set_channel_state(ScopeGroup *s, + const guint n, + const gboolean on) { - ScopeGroup *s; - GtkWidget *w; + if (s->scopes_on) { + gtk_widget_hide(on ? s->mutedpic[n] : GTK_WIDGET(s->scopes[n])); + gtk_widget_show(on ? GTK_WIDGET(s->scopes[n]) : s->mutedpic[n]); + } else { + gtk_widget_hide(on ? s->mutedpic[n] : s->unmutedpic[n]); + gtk_widget_show(on ? s->unmutedpic[n] : s->mutedpic[n]); + } +} + +void +scope_group_toggle_channel(ScopeGroup *s, + const guint n) +{ + const guint mask = 1 << n; + gboolean on = ((s->on_mask & mask) != 0); - int on = GTK_TOGGLE_BUTTON(widget)->active; + player_mute_channels[n] = on; + s->on_mask ^= mask; - player_mute_channels[n] = !on; + scope_group_set_channel_state(s, n, !on); +} -/* enjoy the hack!!! */ - if ((w = widget->parent) != NULL) { - s = SCOPE_GROUP(w->parent); /* button<-table<-scope_group */ - s->on_mask = (s->on_mask & (~(1 << n))) | (on ? 1 << n : 0);/* set mask */ - -#ifndef NO_GDK_PIXBUF - if (s->scopes_on) { - gtk_widget_hide (on ? s->mutedpic[n] : GTK_WIDGET(s->scopes[n])); - gtk_widget_show (on ? GTK_WIDGET(s->scopes[n]) : s->mutedpic[n]); - } else { - (on ? gtk_widget_hide : gtk_widget_show)(GTK_WIDGET(s->mutedpic[n])); - } -#endif +void +scope_group_solo_channel(ScopeGroup *sg, + const guint n) +{ + gint i; + + for (i = 0; i < sg->numchan; i++) { + gboolean on = ((sg->on_mask & (1 << i)) != 0); + + if ((i == n) != on) + scope_group_set_channel_state(sg, i, i == n); + player_mute_channels[i] = (i != n); } + + sg->on_mask = 1 << n; } void -scope_group_set_num_channels (ScopeGroup *s, - int num_channels) +scope_group_all_channels_on(ScopeGroup *sg) +{ + gint i; + + for (i = 0; i < sg->numchan; i++) + scope_group_set_channel_state(sg, i, TRUE); + sg->on_mask = 0xFFFFFFFF; + memset(player_mute_channels, 0, sizeof(player_mute_channels)); +} + +static gboolean +scope_group_button_press(GtkWidget* widget, + GdkEventButton* event, + gpointer data) +{ + GtkWidget* w; + ScopeGroup* sg; + const gint n = GPOINTER_TO_INT(data); + static guint prev_time = 0; + + /* A strange Gtk+-2 bug, when one real event produces 2 callbacks */ + if (event->time == prev_time) + return FALSE; + prev_time = event->time; + + /* enjoy the hack!!! */ + g_return_val_if_fail((w = widget->parent) != NULL, FALSE); + sg = SCOPE_GROUP(w->parent); /* button<-table<-scope_group */ + + if (event->button == 1) { + scope_group_toggle_channel(sg, n); + return TRUE; + } else if (event->button == 3) { + /* Turn all scopes on if some were muted, or make solo selected otherwise */ + if (sg->on_mask == 0xFFFFFFFF) + scope_group_solo_channel(sg, n); + else + scope_group_all_channels_on(sg); + return TRUE; + } + + return FALSE; +} + +void scope_group_set_num_channels(ScopeGroup* s, + int num_channels) { int i; // Remove superfluous scopes from table - for(i = num_channels; i < s->numchan; i++) { - gtk_container_remove(GTK_CONTAINER(s->table), s->scopebuttons[i]); + for (i = num_channels; i < s->numchan; i++) { + gtk_container_remove(GTK_CONTAINER(s->table), s->scopebuttons[i]); } // Resize table gtk_table_resize(GTK_TABLE(s->table), 2, num_channels / 2); // Add new scopes to table - for(i = s->numchan; i < num_channels; i++) { - gtk_object_ref(GTK_OBJECT(s->scopebuttons[i])); - gtk_table_attach_defaults(GTK_TABLE(s->table), s->scopebuttons[i], i / 2, i / 2 + 1, i % 2, i % 2 + 1); - } - - // Reset all buttons (enable all channels) - for(i = 0; i < 32; i++) { - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(s->scopebuttons[i]), 1); -#ifndef NO_GDK_PIXBUF - gtk_widget_hide (s->mutedpic[i]); - if (s->scopes_on) gtk_widget_show (GTK_WIDGET(s->scopes[i])); -#endif + for (i = s->numchan; i < num_channels; i++) { + g_object_ref(G_OBJECT(s->scopebuttons[i])); + gtk_table_attach_defaults(GTK_TABLE(s->table), s->scopebuttons[i], i / 2, i / 2 + 1, i % 2, i % 2 + 1); } s->numchan = num_channels; s->on_mask = 0xFFFFFFFF; /* all channels are on */ + memset(player_mute_channels, 0, sizeof(player_mute_channels)); + + // Reset all buttons (enable all channels) + for (i = 0; i < 32; i++) + scope_group_set_channel_state(s, i, TRUE); } -void -scope_group_enable_scopes (ScopeGroup *s, - int enable) +void scope_group_enable_scopes(ScopeGroup* s, + int enable) { int i; s->scopes_on = enable; - for(i = 0; i < 32; i++) { -#ifdef NO_GDK_PIXBUF - (enable ? gtk_widget_show : gtk_widget_hide)(GTK_WIDGET(s->scopes[i])); -#else - if (GTK_TOGGLE_BUTTON(s->scopebuttons[i])->active) - (enable ? gtk_widget_show : gtk_widget_hide)(GTK_WIDGET(s->scopes[i])); -#endif + for (i = 0; i < 32; i++) { + if (s->on_mask & (1 << i)) { + gtk_widget_hide(enable ? s->unmutedpic[i] : GTK_WIDGET(s->scopes[i])); + gtk_widget_show(enable ? GTK_WIDGET(s->scopes[i]) : s->unmutedpic[i]); + } } } -gint -scope_group_timeout (ScopeGroup *s) +static gint +scope_group_timeout(ScopeGroup* s) { double time1, time2; int i, l; - static gint16 *buf = NULL; + static gint16* buf = NULL; static int bufsize = 0; int o1, o2; - if(!s->scopes_on || !scopebuf_ready || !current_driver) - return TRUE; + if (!s->scopes_on || !scopebuf_ready || !current_driver) + return TRUE; time1 = current_driver->get_play_time(current_driver_object); time2 = time1 + (double)1 / s->update_freq; - for(i = 0; i < 2; i++) { - if(time1 < scopebuf_start.time || time2 < scopebuf_start.time) { - // requesting too old samples -- scopebuf_length is too low - goto ende; - } + for (i = 0; i < 2; i++) { + if (time1 < scopebuf_start.time || time2 < scopebuf_start.time) { + // requesting too old samples -- scopebuf_length is too low + goto ende; + } - if(time1 >= scopebuf_end.time || time2 >= scopebuf_end.time) { - /* requesting samples which haven't been even rendered yet. + if (time1 >= scopebuf_end.time || time2 >= scopebuf_end.time) { + /* requesting samples which haven't been even rendered yet. can happen with short driver latencies. */ - time1 -= (double)1 / s->update_freq; - time2 -= (double)1 / s->update_freq; - } else { - break; - } + time1 -= (double)1 / s->update_freq; + time2 -= (double)1 / s->update_freq; + } else { + break; + } } - if(i == 2) { - goto ende; + if (i == 2) { + goto ende; } o1 = (time1 - scopebuf_start.time) * scopebuf_freq + scopebuf_start.offset; o2 = (time2 - scopebuf_start.time) * scopebuf_freq + scopebuf_start.offset; l = o2 - o1; - if(bufsize < l) { - free(buf); - buf = malloc(2 * l); - bufsize = l; + if (bufsize < l) { + free(buf); + buf = malloc(2 * l); + bufsize = l; } o1 %= scopebuf_length; @@ -170,105 +238,205 @@ g_assert(o1 >= 0 && o1 <= scopebuf_length); g_assert(o2 >= 0 && o2 <= scopebuf_length); - for(i = 0; i < s->numchan; i++) { - if(o2 > o1) { - sample_display_set_data_16(s->scopes[i], scopebufs[i] + o1, l, TRUE); - } else { - memcpy(buf, scopebufs[i] + o1, 2 * (scopebuf_length - o1)); - memcpy(buf + scopebuf_length - o1, scopebufs[i], 2 * o2); - sample_display_set_data_16(s->scopes[i], buf, l, TRUE); - } + for (i = 0; i < s->numchan; i++) { + if (o2 > o1) { + sample_display_set_data(s->scopes[i], scopebufs[i] + o1, ST_MIXER_FORMAT_S16_LE, l, TRUE); + } else { + memcpy(buf, scopebufs[i] + o1, 2 * (scopebuf_length - o1)); + memcpy(buf + scopebuf_length - o1, scopebufs[i], 2 * o2); + sample_display_set_data(s->scopes[i], buf, ST_MIXER_FORMAT_S16_LE, l, TRUE); + } } return TRUE; - ende: - for(i = 0; i < s->numchan; i++) { - sample_display_set_data_8(s->scopes[i], NULL, 0, FALSE); +ende: + for (i = 0; i < s->numchan; i++) { + sample_display_set_data(s->scopes[i], NULL, ST_MIXER_FORMAT_S8, 0, FALSE); } return TRUE; } -void -scope_group_start_updating (ScopeGroup *s) +void scope_group_start_updating(ScopeGroup* s) { - if(!s->scopes_on || s->gtktimer != -1) - return; + if (!s->scopes_on || s->gtktimer != -1) + return; - s->gtktimer = gtk_timeout_add(1000/s->update_freq, (gint(*)())scope_group_timeout, s); + s->gtktimer = g_timeout_add(1000 / s->update_freq, (gint(*)())scope_group_timeout, s); } -void -scope_group_stop_updating (ScopeGroup *s) +void scope_group_stop_updating(ScopeGroup* s) { int i; - if(!s->scopes_on || s->gtktimer == -1) - return; + if (!s->scopes_on || s->gtktimer == -1) + return; - gtk_timeout_remove(s->gtktimer); + g_source_remove(s->gtktimer); s->gtktimer = -1; - for(i = 0; i < s->numchan; i++) { - sample_display_set_data_8(s->scopes[i], NULL, 0, FALSE); + for (i = 0; i < s->numchan; i++) { + sample_display_set_data(s->scopes[i], NULL, ST_MIXER_FORMAT_S8, 0, FALSE); } } -void -scope_group_set_update_freq (ScopeGroup *s, - int freq) +void scope_group_set_update_freq(ScopeGroup* s, + int freq) { s->update_freq = freq; - if(s->scopes_on && s->gtktimer != -1) { - scope_group_stop_updating(s); - scope_group_start_updating(s); + if (s->scopes_on && s->gtktimer != -1) { + scope_group_stop_updating(s); + scope_group_start_updating(s); } } -static gint -scope_group_scope_event (GtkWidget *t, - GdkEvent *event, - ScopeGroup *sg) +static void +number_sub_draw(cairo_t* cr, PangoLayout* layout, gdouble x, gdouble y) { - int i; + cairo_move_to(cr, x, y); + pango_cairo_update_layout(cr, layout); + pango_cairo_show_layout(cr, layout); +} + +/* Making a pixmap cache for each channel number */ +static void +number_style_set(GtkWidget* widget, gpointer data) +{ + if (gtk_widget_get_realized(widget)) { + PangoContext* context; + cairo_t* cr; + cairo_font_options_t* cfo; + PangoLayout* layout; + GdkColor* num_color; + gchar num_str[4]; /* I hope we don't need more that 3 digits */ + + NumberObject* no=(NumberObject*)data; + + context = gtk_widget_create_pango_context(widget); + layout = pango_layout_new(context); + g_object_unref(context); + g_snprintf(num_str, 3, "%02d", no->number); + pango_layout_set_font_description(layout, gtk_widget_get_style(widget)->font_desc); + pango_layout_set_text(layout, num_str, -1); + pango_layout_get_pixel_size(layout, &no->pm_width, &no->pm_height); + no->pm_width += 2; /* For outline */ + no->pm_height += 2; + + if (no->number_pm) + g_object_unref(no->number_pm); + no->number_pm = gdk_pixmap_new(widget->window, no->pm_width, no->pm_height, -1); + no->drawable = di_get_drawable(no->number_pm); + cr = gdk_cairo_create(no->number_pm); + + /* Switching off antialiasing improves channel numbers look making them brighter */ + cfo = cairo_font_options_create(); + cairo_get_font_options(cr, cfo); + cairo_font_options_set_antialias(cfo, CAIRO_ANTIALIAS_NONE); + cairo_set_font_options(cr, cfo); + cairo_font_options_destroy(cfo); + + di_draw_rectangle(no->drawable, no->mask_bg_gc, + TRUE, 0, 0, no->pm_width, no->pm_height); + num_color = colors_get_color(COLOR_CHANNUMS); + no->old_pixel = num_color->pixel; + + /* Outline */ + gdk_cairo_set_source_color(cr, colors_get_color(COLOR_UNMUTED_BG)); + pango_cairo_update_layout(cr, layout); + pango_cairo_show_layout(cr, layout); + number_sub_draw(cr, layout, 1.0, 0.0); + number_sub_draw(cr, layout, 2.0, 0.0); + number_sub_draw(cr, layout, 2.0, 1.0); + number_sub_draw(cr, layout, 2.0, 2.0); + number_sub_draw(cr, layout, 1.0, 2.0); + number_sub_draw(cr, layout, 0.0, 2.0); + number_sub_draw(cr, layout, 0.0, 1.0); + + /* Number */ + gdk_cairo_set_source_color(cr, num_color); + number_sub_draw(cr, layout, 1.0, 1.0); - switch (event->type) { - case GDK_BUTTON_PRESS: - if(event->button.button == 3) { - /* Turn all scopes on if some were muted, or make solo selected othervise */ - if(sg->on_mask == 0xFFFFFFFF) { - for (i = 0; i < sg->numchan; i++) - if(sg->scopebuttons[i] != t) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sg->scopebuttons[i]),FALSE); - else sg->on_mask = (1 << i) | (0xFFFFFFFF << sg->numchan); - } else { - for (i = 0; i < sg->numchan; i++) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sg->scopebuttons[i]),TRUE); - sg->on_mask = 0xFFFFFFFF; - } - return TRUE; - } - default: - break; + cairo_destroy(cr); + g_object_unref(layout); } - - return FALSE; } -#ifndef NO_GDK_PIXBUF -GtkWidget * -scope_group_new (GdkPixbuf *mutedpic) -#else -GtkWidget * -scope_group_new (void) -#endif +static NumberObject* +init_number(const gint number, GtkWidget* widget) { - ScopeGroup *s; - GtkWidget *button, *box, *thing; + NumberObject *no = g_new(NumberObject, 1); + + no->width = -1; + no->height = -1; + no->number = number; + no->number_pm = NULL; + no->firsttime = TRUE; + no->old_pixel = 0; + + return no; +} + +static void +number_realize(GtkWidget* widget, gpointer data) +{ + NumberObject *no = (NumberObject*)data; + + if (no->firsttime) { + no->firsttime = FALSE; + no->mask_gc = di_gc_new(widget->window); + no->mask_bg_gc = colors_get_gc(COLOR_BLACK); + } + + number_style_set(widget, data); +} + +static void +number_draw(GtkWidget* widget, GdkRectangle* area, gpointer data) +{ + GdkRectangle dest_area; + guint x0 = XDISP + widget->allocation.width / FRACTION; + guint y0 = YDISP + widget->allocation.height / FRACTION; + NumberObject *no = (NumberObject*)data; + + /* Number color is changed, we need to update the pixmap cache */ + if (no->old_pixel != colors_get_color(COLOR_CHANNUMS)->pixel) + number_style_set(widget, data); + + dest_area.x = x0; + dest_area.y = y0; + dest_area.width = no->pm_width; + dest_area.height = no->pm_height; + + /* Update number mask if necessary */ + if (widget->allocation.width != no->width || widget->allocation.height != no->height) { + no->width = widget->allocation.width; + no->height = widget->allocation.height; + di_update_mask(widget->window, no->number_pm, no->mask_gc, x0, y0, no->pm_width, no->pm_height, + widget->allocation.width, widget->allocation.height); + } + + if (gdk_rectangle_intersect(area, &dest_area, &dest_area)) + di_draw_drawable(custom_drawing_get_drawable(CUSTOM_DRAWING(widget)), no->mask_gc, + no->drawable, dest_area.x - x0, dest_area.y - y0, + dest_area.x, dest_area.y, dest_area.width, dest_area.height); +} + +void +scope_group_set_mode(ScopeGroup* s, SampleDisplayMode mode) +{ + guint i; + + for (i = 0; i < 32; i++) + sample_display_set_mode(s->scopes[i], gui_settings.scopes_mode); +} + +GtkWidget* +scope_group_new(GdkPixbuf* mutedpic, GdkPixbuf* unmutedpic) +{ + ScopeGroup* s; gint i; - char buf[5]; - s = gtk_type_new(scope_group_get_type()); + s = g_object_new(scope_group_get_type(), NULL); GTK_BOX(s)->spacing = 2; GTK_BOX(s)->homogeneous = FALSE; s->scopes_on = 0; @@ -278,39 +446,50 @@ s->on_mask = 0xFFFFFFFF; s->table = gtk_table_new(2, 1, TRUE); + gtk_table_set_col_spacings(GTK_TABLE(s->table), 4); + gtk_table_set_row_spacings(GTK_TABLE(s->table), 4); gtk_widget_show(s->table); gtk_box_pack_start(GTK_BOX(s), s->table, TRUE, TRUE, 0); - for(i = 0; i < 32; i++) { - button = gtk_toggle_button_new(); - s->scopebuttons[i] = button; - gtk_signal_connect(GTK_OBJECT(button), "event", - GTK_SIGNAL_FUNC(scope_group_scope_event), s); - gtk_signal_connect(GTK_OBJECT(button), "toggled", - GTK_SIGNAL_FUNC(button_toggled), GINT_TO_POINTER(i)); - gtk_widget_show(button); - gtk_widget_ref(button); - - box = gtk_vbox_new(FALSE, 0); - gtk_widget_show(box); - gtk_container_add(GTK_CONTAINER(button), box); - - -#ifndef NO_GDK_PIXBUF - thing = scalable_pic_new (mutedpic); - gtk_box_pack_start(GTK_BOX(box), thing, TRUE, TRUE, 0); - s->mutedpic[i] = thing; -#endif - - - thing = sample_display_new(FALSE); - gtk_box_pack_start(GTK_BOX(box), thing, TRUE, TRUE, 0); - s->scopes[i] = SAMPLE_DISPLAY(thing); - - sprintf(buf, "%02d", i+1); - thing = gtk_label_new(buf); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box), thing, FALSE, TRUE, 0); + for (i = 0; i < 32; i++) { + GtkWidget *box, *thing; + + box = gtk_vbox_new(FALSE, 0); + s->scopebuttons[i] = box; + g_signal_connect(box, "button-press-event", + G_CALLBACK(scope_group_button_press), GINT_TO_POINTER(i)); + g_object_ref(box); + gtk_widget_show(box); + + thing = scalable_pic_new(mutedpic, TRUE); + gtk_widget_add_events(thing, GDK_BUTTON_PRESS_MASK); + s->number_m[i] = init_number(i + 1, thing); + custom_drawing_register_drawing_func(CUSTOM_DRAWING(thing), number_draw, s->number_m[i]); + custom_drawing_register_realize_func(CUSTOM_DRAWING(thing), number_realize, s->number_m[i]); + custom_drawing_register_style_set_func(CUSTOM_DRAWING(thing), number_style_set, s->number_m[i]); + colors_add_widget(COLOR_CHANNUMS, thing); + gtk_box_pack_start(GTK_BOX(box), thing, TRUE, TRUE, 0); + s->mutedpic[i] = thing; + + thing = scalable_pic_new(unmutedpic, FALSE); + gtk_widget_add_events(thing, GDK_BUTTON_PRESS_MASK); + s->number_u[i] = init_number(i + 1, thing); + custom_drawing_register_drawing_func(CUSTOM_DRAWING(thing), number_draw, s->number_u[i]); + custom_drawing_register_realize_func(CUSTOM_DRAWING(thing), number_realize, s->number_u[i]); + custom_drawing_register_style_set_func(CUSTOM_DRAWING(thing), number_style_set, s->number_u[i]); + colors_add_widget(COLOR_CHANNUMS, thing); + gtk_box_pack_start(GTK_BOX(box), thing, TRUE, TRUE, 0); + s->unmutedpic[i] = thing; + + thing = sample_display_new(FALSE, gui_settings.scopes_mode); + gtk_widget_add_events(thing, GDK_BUTTON_PRESS_MASK); + s->number_c[i] = init_number(i + 1, thing); + custom_drawing_register_drawing_func(CUSTOM_DRAWING(thing), number_draw, s->number_c[i]); + custom_drawing_register_realize_func(CUSTOM_DRAWING(thing), number_realize, s->number_c[i]); + custom_drawing_register_style_set_func(CUSTOM_DRAWING(thing), number_style_set, s->number_c[i]); + colors_add_widget(COLOR_CHANNUMS, thing); + gtk_box_pack_start(GTK_BOX(box), thing, TRUE, TRUE, 0); + s->scopes[i] = SAMPLE_DISPLAY(thing); } gtk_table_attach_defaults(GTK_TABLE(s->table), s->scopebuttons[0], 0, 1, 0, 1); @@ -321,25 +500,38 @@ return GTK_WIDGET(s); } -guint -scope_group_get_type (void) +static void +scope_group_realize(GtkWidget *widget) { - static guint scope_group_type = 0; - - if (!scope_group_type) { - GtkTypeInfo scope_group_info = - { - "ScopeGroup", - sizeof(ScopeGroup), - sizeof(ScopeGroupClass), - (GtkClassInitFunc) NULL, - (GtkObjectInitFunc) NULL, - (GtkArgSetFunc) NULL, - (GtkArgGetFunc) NULL, - }; - - scope_group_type = gtk_type_unique(gtk_hbox_get_type (), &scope_group_info); + static gboolean firsttime = TRUE; + ScopeGroup *s; + guint i; + + g_return_if_fail(widget != NULL); + g_return_if_fail(GTK_IS_HBOX(widget)); + + GTK_WIDGET_CLASS(scope_group_parent_class)->realize(widget); + s = SCOPE_GROUP(widget); + + if (firsttime) { + firsttime = FALSE; + s->bg_gc = colors_get_gc(COLOR_UNMUTED_BG); + + for (i = 0; i < 32; i++) { + scalable_pic_set_bg(SCALABLE_PIC(s->unmutedpic[i]), s->bg_gc); + } } - - return scope_group_type; +} + +static void +scope_group_class_init(ScopeGroupClass *class) +{ + GtkWidgetClass *widget_class = (GtkWidgetClass*)class; + + widget_class->realize = scope_group_realize; +} + +static void +scope_group_init (ScopeGroup *self) +{ } diff -Nru soundtracker-0.6.8/app/scope-group.h soundtracker-1.0.2~pre2/app/scope-group.h --- soundtracker-0.6.8/app/scope-group.h 2003-03-02 14:18:42.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/scope-group.h 2020-01-21 19:00:07.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - main window oscilloscope group (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,66 +23,56 @@ #define _SCOPE_GROUP_H #include +#include #include "sample-display.h" -#ifndef NO_GDK_PIXBUF -#include -#endif +#define SCOPE_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, scope_group_get_type(), ScopeGroup)) +#define SCOPE_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST(klass, scope_group_get_type(), ScopeGroupClass)) +#define IS_SCOPE_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, scope_group_get_type())) -#define SCOPE_GROUP(obj) GTK_CHECK_CAST (obj, scope_group_get_type (), ScopeGroup) -#define SCOPE_GROUP_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, scope_group_get_type (), ScopeGroupClass) -#define IS_SCOPE_GROUP(obj) GTK_CHECK_TYPE (obj, scope_group_get_type ()) +typedef struct _ScopeGroup ScopeGroup; +typedef struct _ScopeGroupClass ScopeGroupClass; -typedef struct _ScopeGroup ScopeGroup; -typedef struct _ScopeGroupClass ScopeGroupClass; +typedef struct _NumberObject NumberObject; -struct _ScopeGroup -{ +struct _ScopeGroup { GtkHBox hbox; - GtkWidget *table; - SampleDisplay *scopes[32]; - GtkWidget *scopebuttons[32]; -#ifndef NO_GDK_PIXBUF - GtkWidget *mutedpic[32]; -#endif + GtkWidget* table; + SampleDisplay* scopes[32]; + GtkWidget* scopebuttons[32]; + GtkWidget *mutedpic[32], *unmutedpic[32]; + NumberObject *number_m[32], *number_u[32], *number_c[32]; int numchan; int scopes_on; int update_freq; int gtktimer; gint32 on_mask; + + DIGC bg_gc; }; -struct _ScopeGroupClass -{ +struct _ScopeGroupClass { GtkHBoxClass parent_class; }; -guint -scope_group_get_type (void); - -#ifndef NO_GDK_PIXBUF -GtkWidget * -scope_group_new (GdkPixbuf *mutedpic); -#else -GtkWidget * -scope_group_new (void); -#endif - -void -scope_group_set_num_channels (ScopeGroup *s, int num_channels); - -void -scope_group_enable_scopes (ScopeGroup *s, int enable); - -void -scope_group_start_updating (ScopeGroup *s); +GType scope_group_get_type(void) G_GNUC_CONST; -void -scope_group_stop_updating (ScopeGroup *s); +GtkWidget* +scope_group_new(GdkPixbuf* mutedpic, GdkPixbuf* unmutedpic); -void -scope_group_set_update_freq (ScopeGroup *s, int freq); +void scope_group_set_num_channels(ScopeGroup* s, int num_channels); +void scope_group_set_mode(ScopeGroup* s, SampleDisplayMode mode); +void scope_group_enable_scopes(ScopeGroup* s, int enable); +void scope_group_set_update_freq(ScopeGroup* s, int freq); + +void scope_group_start_updating(ScopeGroup* s); +void scope_group_stop_updating(ScopeGroup* s); + +void scope_group_set_update_freq(ScopeGroup* s, int freq); +void scope_group_toggle_channel(ScopeGroup *s, const guint n); +void scope_group_solo_channel(ScopeGroup *s, const guint n); +void scope_group_all_channels_on(ScopeGroup *g); #endif /* _SCOPE_GROUP_H */ diff -Nru soundtracker-0.6.8/app/st-subs.c soundtracker-1.0.2~pre2/app/st-subs.c --- soundtracker-0.6.8/app/st-subs.c 2006-01-15 14:35:12.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/st-subs.c 2020-11-27 17:13:21.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - General support routines * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,227 +28,216 @@ #include "st-subs.h" #include "xm.h" -#include "gui-settings.h" -int -st_init_pattern_channels (XMPattern *p, - unsigned length, - int num_channels) +int st_init_pattern_channels(XMPattern* p, + unsigned length, + int num_channels) { int i; - + p->length = p->alloc_length = length; - for(i = 0; i < num_channels; i++) { - if(!(p->channels[i] = calloc(1, length * sizeof(XMNote)))) { - st_free_pattern_channels(p); - return 0; - } + for (i = 0; i < num_channels; i++) { + if (!(p->channels[i] = calloc(1, length * sizeof(XMNote)))) { + st_free_pattern_channels(p); + return 0; + } } - + return 1; } -void -st_free_pattern_channels (XMPattern *pat) +void st_free_pattern_channels(XMPattern* pat) { int i; - - for(i = 0; i < 32; i++) { - free(pat->channels[i]); - pat->channels[i] = NULL; + + for (i = 0; i < 32; i++) { + free(pat->channels[i]); + pat->channels[i] = NULL; } } -void -st_free_all_pattern_channels (XM *xm) +void st_free_all_pattern_channels(XM* xm) { int i; - - for(i = 0; i < 256; i++) - st_free_pattern_channels(&xm->patterns[i]); + + for (i = 0; i < 256; i++) + st_free_pattern_channels(&xm->patterns[i]); } -int -st_copy_pattern (XMPattern *dst, - XMPattern *src) +int st_copy_pattern(XMPattern* dst, + XMPattern* src) { - XMNote *oldchans[32]; + XMNote* oldchans[32]; int i; - for(i = 0; i < 32; i++) { - oldchans[i] = dst->channels[i]; - if(src->channels[i]) { - if(!(dst->channels[i] = st_dup_track(src->channels[i], src->length))) { - // Out of memory, restore previous pattern, return error - for(; i >= 0; i--) { - free(dst->channels[i]); - dst->channels[i] = oldchans[i]; - } - return 0; - } - } else { - dst->channels[i] = NULL; - } + for (i = 0; i < 32; i++) { + oldchans[i] = dst->channels[i]; + if (src->channels[i]) { + if (!(dst->channels[i] = st_dup_track(src->channels[i], src->length))) { + // Out of memory, restore previous pattern, return error + for (; i >= 0; i--) { + free(dst->channels[i]); + dst->channels[i] = oldchans[i]; + } + return 0; + } + } else { + dst->channels[i] = NULL; + } } - for(i = 0; i < 32; i++) - free(oldchans[i]); + for (i = 0; i < 32; i++) + free(oldchans[i]); dst->length = dst->alloc_length = src->length; return 1; } -XMPattern * -st_dup_pattern (XMPattern *p) +XMPattern* +st_dup_pattern(XMPattern* p) { - XMPattern *r; + XMPattern* r; r = g_new0(XMPattern, 1); - if(!r) - return NULL; + if (!r) + return NULL; - if(!st_copy_pattern(r, p)) { - g_free(r); - return NULL; + if (!st_copy_pattern(r, p)) { + g_free(r); + return NULL; } return r; } -XMNote * -st_dup_track (XMNote *n, - int length) +XMNote* +st_dup_track(XMNote* n, + int length) { - XMNote *r; + XMNote* r; - if(!n) - return NULL; + if (!n) + return NULL; r = malloc(length * sizeof(XMNote)); - if(r) { - memcpy(r, n, length * sizeof(XMNote)); + if (r) { + memcpy(r, n, length * sizeof(XMNote)); } return r; } /* Duplicate part of a track, wrap-around at end is handled */ -XMNote * -st_dup_track_wrap (XMNote *n, - int tracklength, - int copystart, - int copylength) -{ - XMNote *r; - - if(!n || copylength > tracklength || copystart >= tracklength) - return NULL; - - if(copylength > tracklength - copystart) { - r = malloc(copylength * sizeof(XMNote)); - if(r) { - memcpy(r, n + copystart, (tracklength - copystart) * sizeof(XMNote)); - memcpy(r + tracklength - copystart, n, (copylength - (tracklength - copystart)) * sizeof(XMNote)); - } +XMNote* +st_dup_track_wrap(XMNote* n, + int tracklength, + int copystart, + int copylength) +{ + XMNote* r; + + if (!n || copylength > tracklength || copystart >= tracklength) + return NULL; + + if (copylength > tracklength - copystart) { + r = malloc(copylength * sizeof(XMNote)); + if (r) { + memcpy(r, n + copystart, (tracklength - copystart) * sizeof(XMNote)); + memcpy(r + tracklength - copystart, n, (copylength - (tracklength - copystart)) * sizeof(XMNote)); + } } else { - r = st_dup_track(n + copystart, copylength); + r = st_dup_track(n + copystart, copylength); } return r; } -void -st_clear_track (XMNote *n, - int length) +void st_clear_track(XMNote* n, + int length) { - if(!n) - return; + if (!n) + return; memset(n, 0, length * sizeof(*n)); } /* Clear part of a track, wrap-around at end is handled */ -void -st_clear_track_wrap (XMNote *n, - int tracklength, - int clearstart, - int clearlength) -{ - if(!n || clearlength > tracklength || clearstart >= tracklength) - return; - - if(clearlength > tracklength - clearstart) { - st_clear_track(n + clearstart, tracklength - clearstart); - st_clear_track(n, clearlength - (tracklength - clearstart)); +void st_clear_track_wrap(XMNote* n, + int tracklength, + int clearstart, + int clearlength) +{ + if (!n || clearlength > tracklength || clearstart >= tracklength) + return; + + if (clearlength > tracklength - clearstart) { + st_clear_track(n + clearstart, tracklength - clearstart); + st_clear_track(n, clearlength - (tracklength - clearstart)); } else { - st_clear_track(n + clearstart, clearlength); + st_clear_track(n + clearstart, clearlength); } } -void -st_paste_track_into_track_wrap (XMNote *from, - XMNote *to, - int tolength, - int insertstart, - int fromlength) +void st_paste_track_into_track_wrap(XMNote* from, + XMNote* to, + int tolength, + int insertstart, + int fromlength) { - if(!from || !to || tolength < fromlength || insertstart >= tolength) - return; + if (!from || !to || tolength < fromlength || insertstart >= tolength) + return; - if(fromlength > tolength - insertstart) { - memcpy(to + insertstart, from, (tolength - insertstart) * sizeof(XMNote)); - memcpy(to, from + tolength - insertstart, (fromlength - (tolength - insertstart)) * sizeof(XMNote)); + if (fromlength > tolength - insertstart) { + memcpy(to + insertstart, from, (tolength - insertstart) * sizeof(XMNote)); + memcpy(to, from + tolength - insertstart, (fromlength - (tolength - insertstart)) * sizeof(XMNote)); } else { - memcpy(to + insertstart, from, fromlength * sizeof(XMNote)); + memcpy(to + insertstart, from, fromlength * sizeof(XMNote)); } } -void -st_clear_pattern (XMPattern *p) +void st_clear_pattern(XMPattern* p) { int i; - for(i = 0; i < 32; i++) { - st_clear_track(p->channels[i], p->alloc_length); + for (i = 0; i < 32; i++) { + st_clear_track(p->channels[i], p->alloc_length); } } -void -st_pattern_delete_track (XMPattern *p, - int t) +void st_pattern_delete_track(XMPattern* p, + int t) { int i; - XMNote *a; + XMNote* a; a = p->channels[t]; g_assert(a != NULL); - for(i = t; i < 31 && p->channels[i + 1] != NULL; i++) { - p->channels[i] = p->channels[i + 1]; + for (i = t; i < 31 && p->channels[i + 1] != NULL; i++) { + p->channels[i] = p->channels[i + 1]; } p->channels[i] = a; st_clear_track(a, p->alloc_length); } -void -st_pattern_insert_track (XMPattern *p, - int t) +void st_pattern_insert_track(XMPattern* p, + int t) { int i; - XMNote *a; - + XMNote* a; + a = p->channels[31]; - for(i = 31; i > t; i--) { - p->channels[i] = p->channels[i - 1]; + for (i = 31; i > t; i--) { + p->channels[i] = p->channels[i - 1]; } - if(!a) { - if(!(a = calloc(1, p->alloc_length * sizeof(XMNote)))) { - g_assert_not_reached(); - } + if (!a) { + if (!(a = calloc(1, p->alloc_length * sizeof(XMNote)))) { + g_assert_not_reached(); + } } p->channels[t] = a; @@ -256,110 +245,123 @@ } gboolean -st_instrument_used_in_song (XM *xm, - int instr) +st_instrument_used_in_song(XM* xm, + int instr) { int i, j, k; - XMPattern *p; - XMNote *c; + XMPattern* p; + XMNote* c; - for(i = 0; i < xm->song_length; i++) { - p = &xm->patterns[(int)xm->pattern_order_table[i]]; - for(j = 0; j < xm->num_channels; j++) { - c = p->channels[j]; - for(k = 0; k < p->length; k++) { - if(c[k].instrument == instr) - return TRUE; - } - } + for (i = 0; i < xm->song_length; i++) { + p = &xm->patterns[(int)xm->pattern_order_table[i]]; + for (j = 0; j < xm->num_channels; j++) { + c = p->channels[j]; + for (k = 0; k < p->length; k++) { + if (c[k].instrument == instr) + return TRUE; + } + } } return FALSE; } -int -st_instrument_num_samples (STInstrument *instr) +int st_instrument_num_samples(STInstrument* instr) { int i, n; - for(i = 0, n = 0; i < sizeof(instr->samples) / sizeof(instr->samples[0]); i++) { - if(instr->samples[i].sample.length != 0) - n++; + for (i = 0, n = 0; i < ST_NUM_SAMPLES(instr); i++) { + if (instr->samples[i].sample.length != 0) + n++; } return n; } -int -st_instrument_num_save_samples (STInstrument *instr) +int st_instrument_num_save_samples(STInstrument* instr) { int i, n; - for(i = 0, n = 0; i < sizeof(instr->samples) / sizeof(instr->samples[0]); i++) { - if(instr->samples[i].sample.length != 0 || instr->samples[i].name[0] != 0) - n = i + 1; + for (i = 0, n = 0; i < ST_NUM_SAMPLES(instr); i++) { + if (instr->samples[i].sample.length != 0 || instr->samples[i].utf_name[0] != 0) + n = i + 1; } return n; } -int -st_num_save_instruments (XM *xm) +gsize +st_get_instrument_size(STInstrument* instr) +{ + gint i; + gsize s; + + for (i = 0, s = 0; i < ST_NUM_SAMPLES(instr); i++) + /* Length in samples which are internally in 2-bytes format */ + s += instr->samples[i].sample.length * sizeof(instr->samples[i].sample.data[0]); + + return s + sizeof(STInstrument); +} + +int st_num_save_instruments(XM* xm) { int i, n; - for(i = 0, n = 0; i < 128; i++) { - if(st_instrument_num_save_samples(&xm->instruments[i]) != 0 || xm->instruments[i].name[0] != 0) - n = i + 1; + for (i = 0, n = 0; i < ST_NUM_INSTRUMENTS(xm); i++) { + if (st_instrument_num_save_samples(&xm->instruments[i]) != 0 || xm->instruments[i].utf_name[0] != 0) + n = i + 1; } return n; } -int -st_num_save_patterns (XM *xm) +int st_num_save_patterns(XM* xm) { int i, n; - for(i = 0, n = 0; i < 256; i++) { - if(!st_is_empty_pattern(&xm->patterns[i])) - n = i; + for (i = 0, n = 0; i < 256; i++) { + if (!st_is_empty_pattern(&xm->patterns[i])) + n = i; } return n + 1; } -void -st_copy_instrument (STInstrument *src, STInstrument *dest) +void st_copy_instrument(STInstrument* src, STInstrument* dest) { int i; guint32 length; - GMutex *lock[16]; + GMutex lock[ST_NUM_SAMPLES(src)]; st_clean_instrument(dest, NULL); - for(i = 0; i < sizeof(dest->samples) / sizeof(dest->samples[0]); i++) - lock[i] = dest->samples[i].sample.lock; // Preserve pointers to GMutex'es from modification + for (i = 0; i < ST_NUM_SAMPLES(dest); i++) + lock[i] = dest->samples[i].sample.lock; /* Preserve GMutex'es from modification */ memcpy(dest, src, sizeof(STInstrument)); - for(i = 0; i < sizeof(src->samples) / sizeof(src->samples[0]); i++){ - if ((length = dest->samples[i].sample.length * sizeof(dest->samples[i].sample.data[0]))){ - dest->samples[i].sample.data = malloc(length); - memcpy(dest->samples[i].sample.data, src->samples[i].sample.data, length); - } - dest->samples[i].sample.lock = lock[i]; + for (i = 0; i < ST_NUM_SAMPLES(dest); i++) { + if ((length = dest->samples[i].sample.length * sizeof(dest->samples[i].sample.data[0]))) { + dest->samples[i].sample.data = malloc(length); + memcpy(dest->samples[i].sample.data, src->samples[i].sample.data, length); + } + dest->samples[i].sample.lock = lock[i]; } } -void -st_clean_instrument (STInstrument *instr, - const char *name) +void st_clean_instrument_full(STInstrument* instr, + const char* name, const gboolean modify_name) { int i; - for(i = 0; i < sizeof(instr->samples) / sizeof(instr->samples[0]); i++) - st_clean_sample(&instr->samples[i], NULL); + for (i = 0; i < ST_NUM_SAMPLES(instr); i++) + st_clean_sample_full(&instr->samples[i], NULL, NULL, modify_name); - if(!name) - memset(instr->name, 0, sizeof(instr->name)); - else - strncpy(instr->name, name, 22); + if (modify_name) { + if (!name) { + memset(instr->name, 0, sizeof(instr->name)); + memset(instr->utf_name, 0, sizeof(instr->utf_name)); + instr->needs_conversion = FALSE; + } else { + g_utf8_strncpy(instr->utf_name, name, sizeof(instr->name) - 1); + instr->needs_conversion = TRUE; + } + } memset(instr->samplemap, 0, sizeof(instr->samplemap)); memset(&instr->vol_env, 0, sizeof(instr->vol_env)); memset(&instr->pan_env, 0, sizeof(instr->pan_env)); @@ -369,24 +371,61 @@ instr->pan_env.points[0].val = 32; } -void -st_clean_sample (STSample *s, - const char *name) +void st_set_sample_name(STSample* s, + const char* name) +{ + g_utf8_strncpy(s->utf_name, name, sizeof(s->name) - 1); + s->needs_conversion = TRUE; +} + +void st_clean_sample_full(STSample* s, + const char* utf_name, const char* name, + const gboolean clear_name) { - GMutex *lock = s->sample.lock; free(s->sample.data); - memset(s, 0, sizeof(STSample)); - if(name) - strncpy(s->name, name, 22); + s->sample.data = NULL; + s->sample.looptype = 0; + s->sample.length = 0; s->sample.loopend = 1; - if(lock) - s->sample.lock = lock; - else - s->sample.lock = g_mutex_new(); + s->sample.loopstart = 0; + s->volume = 0; + s->finetune = 0; + s->panning = 0; + s->relnote = 0; + s->treat_as_8bit = 0; + + if (clear_name) { + if (utf_name) { + g_utf8_strncpy(s->utf_name, utf_name, sizeof(s->name) - 1); + if (!name) + s->needs_conversion = TRUE; + else { + strncpy(s->name, name, sizeof(s->name) - 1); + s->needs_conversion = FALSE; + } + } else { + memset(s->utf_name, 0, sizeof(s->utf_name)); + memset(s->name, 0, sizeof(s->name)); + s->needs_conversion = FALSE; + } + } } -void -st_clean_song (XM *xm) +void st_copy_sample(STSample* src_smp, STSample* dest_smp) +{ + guint32 length; + GMutex lock = dest_smp->sample.lock; + + if (dest_smp->sample.data) + g_free(dest_smp->sample.data); + memcpy(dest_smp, src_smp, sizeof(STSample)); + dest_smp->sample.lock = lock; + length = sizeof(dest_smp->sample.data[0]) * dest_smp->sample.length; + dest_smp->sample.data = malloc(length); + memcpy(dest_smp->sample.data, src_smp->sample.data, length); +} + +void st_clean_song(XM* xm) { int i; @@ -400,121 +439,118 @@ xm->flags = 0; memset(xm->pattern_order_table, 0, sizeof(xm->pattern_order_table)); - for(i = 0; i < 256; i++) - st_init_pattern_channels(&xm->patterns[i], 64, xm->num_channels); + for (i = 0; i < 256; i++) + st_init_pattern_channels(&xm->patterns[i], 64, xm->num_channels); } -void -st_set_num_channels (XM *xm, - int n) +void st_set_num_channels(XM* xm, + int n) { int i, j; - XMPattern *pat; + XMPattern* pat; - for(i = 0; i < sizeof(xm->patterns) / sizeof(xm->patterns[0]); i++) { - pat = &xm->patterns[i]; - for(j = 0; j < n; j++) { - if(!pat->channels[j]) { - pat->channels[j] = calloc(1, sizeof(XMNote) * pat->alloc_length); - } - } + for (i = 0; i < ST_NUM_PATTERNS(xm); i++) { + pat = &xm->patterns[i]; + for (j = 0; j < n; j++) { + if (!pat->channels[j]) { + pat->channels[j] = calloc(1, sizeof(XMNote) * pat->alloc_length); + } + } } xm->num_channels = n; } -void -st_set_pattern_length (XMPattern *pat, - int l) +void st_set_pattern_length(XMPattern* pat, + int l) { int i; - XMNote *n; - - if(l > pat->alloc_length) { - for(i = 0; i < 32 && pat->channels[i] != NULL; i++) { - n = calloc(1, sizeof(XMNote) * l); - memcpy(n, pat->channels[i], sizeof(XMNote) * pat->length); - free(pat->channels[i]); - pat->channels[i] = n; - } - pat->alloc_length = l; + XMNote* n; + + if (l > pat->alloc_length) { + for (i = 0; i < 32 && pat->channels[i] != NULL; i++) { + n = calloc(1, sizeof(XMNote) * l); + memcpy(n, pat->channels[i], sizeof(XMNote) * pat->length); + free(pat->channels[i]); + pat->channels[i] = n; + } + pat->alloc_length = l; } pat->length = l; } -void -st_sample_fix_loop (STSample *sts) +void st_sample_fix_loop(STSample* sts) { - st_mixer_sample_info *s = &sts->sample; + st_mixer_sample_info* s = &sts->sample; - if(s->loopend > s->length) - s->loopend = s->length; - if(s->loopstart >= s->loopend) - s->loopstart = s->loopend - 1; + if (s->loopend > s->length) + s->loopend = s->length; + else if (!s->loopend) + s->loopend = 1; + if (s->loopstart >= s->loopend) + s->loopstart = s->loopend - 1; } -int -st_find_first_unused_and_empty_pattern (XM *xm) +int st_find_first_unused_and_empty_pattern(XM* xm) { int i; - for(i = 0; i < sizeof(xm->patterns) / sizeof(xm->patterns[0]); i++) { - if(!st_is_pattern_used_in_song(xm, i) && st_is_empty_pattern(&xm->patterns[i])) { - return i; - } + for (i = 0; i < ST_NUM_PATTERNS(xm); i++) { + if (!st_is_pattern_used_in_song(xm, i) && st_is_empty_pattern(&xm->patterns[i])) { + return i; + } } return -1; } gboolean -st_is_empty_pattern (XMPattern *p) +st_is_empty_pattern(XMPattern* p) { int i; - - for(i = 0; i < 32; i++) { - if(p->channels[i]) { - if(!st_is_empty_track(p->channels[i], p->length)) { - return 0; - } - } + + for (i = 0; i < 32; i++) { + if (p->channels[i]) { + if (!st_is_empty_track(p->channels[i], p->length)) { + return 0; + } + } } return 1; } gboolean -st_is_empty_track (XMNote *notes, - int length) +st_is_empty_track(XMNote* notes, + int length) { - for(; length > 0; length--, notes++) { - if(notes->note != 0 || notes->instrument != 0 || notes->volume != 0 - || notes->fxtype != 0 || notes->fxparam != 0) { - return 0; - } + for (; length > 0; length--, notes++) { + if (notes->note != 0 || notes->instrument != 0 || notes->volume != 0 + || notes->fxtype != 0 || notes->fxparam != 0) { + return 0; + } } return 1; } - + gboolean -st_is_pattern_used_in_song (XM *xm, - int patnum) +st_is_pattern_used_in_song(XM* xm, + int patnum) { int i; - for(i = 0; i < xm->song_length; i++) - if(xm->pattern_order_table[i] == patnum) - return 1; - + for (i = 0; i < xm->song_length; i++) + if (xm->pattern_order_table[i] == patnum) + return 1; + return 0; } -void -st_exchange_patterns (XM *xm, - int p1, - int p2) +void st_exchange_patterns(XM* xm, + int p1, + int p2) { XMPattern tmp; int i; @@ -523,127 +559,107 @@ memcpy(&xm->patterns[p1], &xm->patterns[p2], sizeof(XMPattern)); memcpy(&xm->patterns[p2], &tmp, sizeof(XMPattern)); - for(i = 0; i < xm->song_length; i++) { - if(xm->pattern_order_table[i] == p1) - xm->pattern_order_table[i] = p2; - else if(xm->pattern_order_table[i] == p2) - xm->pattern_order_table[i] = p1; + for (i = 0; i < xm->song_length; i++) { + if (xm->pattern_order_table[i] == p1) + xm->pattern_order_table[i] = p2; + else if (xm->pattern_order_table[i] == p2) + xm->pattern_order_table[i] = p1; } } gboolean -st_check_if_odd_are_not_empty (XMPattern *p) +st_check_if_odd_are_not_empty(XMPattern* p) { int i, j; - for(i = 0; i < 32 && p->channels[i]; i++) - for(j = 1; j < p->length; j += 2) - if((p->channels[i][j].note && p->channels[i][j].instrument) || - (p->channels[i][j].volume > 15) || - p->channels[i][j].fxtype || p->channels[i][j].fxparam) - return TRUE; + for (i = 0; i < 32 && p->channels[i]; i++) + for (j = 1; j < p->length; j += 2) + if ((p->channels[i][j].note && p->channels[i][j].instrument) || (p->channels[i][j].volume > 15) || p->channels[i][j].fxtype || p->channels[i][j].fxparam) + return TRUE; return FALSE; } -void -st_shrink_pattern (XMPattern *p) +void st_shrink_pattern(XMPattern* p) { int i, j, length = p->length; - - for(i = 0; i < 32 && p->channels[i]; i++){ - for(j = 1; j <= (length - 1) / 2; j++) - memcpy(&p->channels[i][j], &p->channels[i][2 * j], sizeof(XMNote)); - for(;j < p->alloc_length; j++){/* clear the rest of the pattern */ - p->channels[i][j].note = 0; - p->channels[i][j].instrument = 0; - p->channels[i][j].volume = 0; - p->channels[i][j].fxtype = 0; - p->channels[i][j].fxparam = 0; - } + + for (i = 0; i < 32 && p->channels[i]; i++) { + for (j = 1; j <= (length - 1) / 2; j++) + memcpy(&p->channels[i][j], &p->channels[i][2 * j], sizeof(XMNote)); + for (; j < p->alloc_length; j++) { /* clear the rest of the pattern */ + p->channels[i][j].note = 0; + p->channels[i][j].instrument = 0; + p->channels[i][j].volume = 0; + p->channels[i][j].fxtype = 0; + p->channels[i][j].fxparam = 0; + } } - + st_set_pattern_length(p, (length - 1) / 2 + 1); } -void -st_expand_pattern (XMPattern *p) +void st_expand_pattern(XMPattern* p) { int i, j, length = MIN(p->length * 2, 256); st_set_pattern_length(p, length); - for(i = 0; i < 32 && p->channels[i]; i++){ - for(j = length / 2 - 1; j >= 0; j--){ - /* copy to even positions and clear odd */ - memcpy(&p->channels[i][2 * j], &p->channels[i][j], sizeof(XMNote)); - p->channels[i][2 * j + 1].note = 0; - p->channels[i][2 * j + 1].instrument = 0; - p->channels[i][2 * j + 1].volume = 0; - p->channels[i][2 * j + 1].fxtype = 0; - p->channels[i][2 * j + 1].fxparam = 0; - } + for (i = 0; i < 32 && p->channels[i]; i++) { + for (j = length / 2 - 1; j >= 0; j--) { + /* copy to even positions and clear odd */ + memcpy(&p->channels[i][2 * j], &p->channels[i][j], sizeof(XMNote)); + p->channels[i][2 * j + 1].note = 0; + p->channels[i][2 * j + 1].instrument = 0; + p->channels[i][2 * j + 1].volume = 0; + p->channels[i][2 * j + 1].fxtype = 0; + p->channels[i][2 * j + 1].fxparam = 0; + } } } -void -st_convert_sample (void *src, - void *dst, - int srcformat, - int dstformat, - int count) +void st_convert_sample(void* src, + void* dst, + int srcformat, + int dstformat, + int count) { - gint16 *d16; - gint8 *d8; + gint16* d16; + gint8* d8; - if(srcformat == dstformat) { - memcpy(dst, src, count * (srcformat / 8)); + if (srcformat == dstformat) { + memcpy(dst, src, count * (srcformat / 8)); } else { - if(dstformat == 16) { - /* convert to 16 bit */ - d16 = dst; - d8 = src; - while(count--) - *d16++ = (*d8++ << 8); - } else { - /* convert to 8 bit */ - d8 = dst; - d16 = src; - while(count--) - *d8++ = (*d16++ >> 8); - } + if (dstformat == 16) { + /* convert to 16 bit */ + d16 = dst; + d8 = src; + while (count--) + *d16++ = (*d8++ << 8); + } else { + /* convert to 8 bit */ + d8 = dst; + d16 = src; + while (count--) + *d8++ = (*d16++ >> 8); + } } } -void -st_sample_cutoff_lowest_8_bits (gint16 *data, - int count) +void st_sample_8bit_signed_unsigned(gint8* data, + int count) { - while(count) { - gint16 d = *data; - d &= 0xff00; - *data++ = d; - count--; + while (count) { + *data++ += 128; + count--; } } -void -st_sample_8bit_signed_unsigned (gint8 *data, - int count) +void st_sample_16bit_signed_unsigned(gint16* data, + int count) { - while(count) { - *data++ += 128; - count--; + while (count) { + *data++ += 32768; + count--; } } - -void -st_sample_16bit_signed_unsigned (gint16 *data, - int count) -{ - while(count) { - *data++ += 32768; - count--; - } -} - diff -Nru soundtracker-0.6.8/app/st-subs.h soundtracker-1.0.2~pre2/app/st-subs.h --- soundtracker-0.6.8/app/st-subs.h 2004-01-11 15:19:55.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/st-subs.h 2020-10-08 18:54:49.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - General support routines (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,63 +24,70 @@ #include "xm.h" +#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) /* --- Module functions --- */ -void st_free_all_pattern_channels (XM *xm); -int st_init_pattern_channels (XMPattern *p, unsigned length, int num_channels); -int st_instrument_num_save_samples (STInstrument *instr); -int st_num_save_instruments (XM *xm); -int st_num_save_patterns (XM *xm); -void st_clean_song (XM *); -void st_set_num_channels (XM *, int); +void st_free_all_pattern_channels(XM* xm); +int st_init_pattern_channels(XMPattern* p, unsigned length, int num_channels); +int st_instrument_num_save_samples(STInstrument* instr); +int st_num_save_instruments(XM* xm); +int st_num_save_patterns(XM* xm); +void st_clean_song(XM*); +void st_set_num_channels(XM*, int); /* --- Pattern functions --- */ -XMPattern* st_dup_pattern (XMPattern*); -void st_free_pattern_channels (XMPattern *pat); -void st_clear_pattern (XMPattern*); -int st_copy_pattern (XMPattern *dst, - XMPattern *src); -void st_pattern_delete_track (XMPattern*, int); -void st_pattern_insert_track (XMPattern*, int); -gboolean st_is_empty_pattern (XMPattern *p); -int st_find_first_unused_and_empty_pattern (XM *xm); -gboolean st_is_pattern_used_in_song (XM *xm, - int patnum); -void st_set_pattern_length (XMPattern *, int); -void st_exchange_patterns (XM *xm, - int p1, - int p2); -gboolean st_check_if_odd_are_not_empty (XMPattern *p); -void st_shrink_pattern (XMPattern *p); -void st_expand_pattern (XMPattern *p); +#define ST_NUM_PATTERNS(xm) ARRAY_SIZE((xm)->patterns) +XMPattern* st_dup_pattern(XMPattern*); +void st_free_pattern_channels(XMPattern* pat); +void st_clear_pattern(XMPattern*); +int st_copy_pattern(XMPattern* dst, + XMPattern* src); +void st_pattern_delete_track(XMPattern*, int); +void st_pattern_insert_track(XMPattern*, int); +gboolean st_is_empty_pattern(XMPattern* p); +int st_find_first_unused_and_empty_pattern(XM* xm); +gboolean st_is_pattern_used_in_song(XM* xm, + int patnum); +void st_set_pattern_length(XMPattern*, int); +void st_exchange_patterns(XM* xm, + int p1, + int p2); +gboolean st_check_if_odd_are_not_empty(XMPattern* p); +void st_shrink_pattern(XMPattern* p); +void st_expand_pattern(XMPattern* p); /* --- Track functions --- */ -XMNote* st_dup_track (XMNote*, int length); -XMNote* st_dup_track_wrap (XMNote*, int tracklength, int copystart, int copylength); -void st_clear_track (XMNote*, int length); -void st_clear_track_wrap (XMNote*, int tracklength, int clearstart, int clearlength); -void st_paste_track_into_track_wrap (XMNote *from, XMNote *to, int tolength, int insertstart, int fromlength); -gboolean st_is_empty_track (XMNote *notes, - int length); +XMNote* st_dup_track(XMNote*, int length); +XMNote* st_dup_track_wrap(XMNote*, int tracklength, int copystart, int copylength); +void st_clear_track(XMNote*, int length); +void st_clear_track_wrap(XMNote*, int tracklength, int clearstart, int clearlength); +void st_paste_track_into_track_wrap(XMNote* from, XMNote* to, int tolength, int insertstart, int fromlength); +gboolean st_is_empty_track(XMNote* notes, + int length); /* --- Instrument functions --- */ -int st_instrument_num_samples (STInstrument *i); -void st_clean_instrument (STInstrument *i, const char *name); -void st_copy_instrument (STInstrument *src, STInstrument *dest); -gboolean st_instrument_used_in_song (XM *xm, int instr); +#define ST_NUM_INSTRUMENTS(xm) ARRAY_SIZE((xm)->instruments) +int st_instrument_num_samples(STInstrument* i); +gsize st_get_instrument_size(STInstrument* instr); +void st_clean_instrument_full(STInstrument* i, const char* name, const gboolean modify_name); +#define st_clean_instrument(i, name) st_clean_instrument_full(i, name, TRUE) +void st_copy_instrument(STInstrument* src, STInstrument* dest); +gboolean st_instrument_used_in_song(XM* xm, int instr); /* --- Sample functions --- */ -void st_clean_sample (STSample *s, const char *name); -void st_sample_fix_loop (STSample *s); -void st_convert_sample (void *src, - void *dst, - int srcformat, - int dstformat, - int count); -void st_sample_cutoff_lowest_8_bits (gint16 *data, - int count); -void st_sample_8bit_signed_unsigned (gint8 *data, - int count); -void st_sample_16bit_signed_unsigned (gint16 *data, - int count); +#define ST_NUM_SAMPLES(instr) ARRAY_SIZE((instr)->samples) +void st_clean_sample_full(STSample* s, const char* utf_name, const char* name, const gboolean clear_name); +#define st_clean_sample(s, utf_name, name) st_clean_sample_full(s, utf_name, name, TRUE) +void st_copy_sample(STSample* src_smp, STSample* dest_smp); +void st_set_sample_name(STSample* s, const char* name); +void st_sample_fix_loop(STSample* s); +void st_convert_sample(void* src, + void* dst, + int srcformat, + int dstformat, + int count); +void st_sample_8bit_signed_unsigned(gint8* data, + int count); +void st_sample_16bit_signed_unsigned(gint16* data, + int count); #endif /* _ST_SUBS_H */ diff -Nru soundtracker-0.6.8/app/time-buffer.c soundtracker-1.0.2~pre2/app/time-buffer.c --- soundtracker-0.6.8/app/time-buffer.c 2001-01-03 13:24:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/time-buffer.c 2021-02-23 17:47:24.000000000 +0000 @@ -2,7 +2,8 @@ /* * The Real SoundTracker - time buffer * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause + * Copyright (C) 2020, 2021 Yury Aliaev * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,98 +24,122 @@ #include -/* This implementation of the time buffer interface might be rather - suboptimal... */ - -struct time_buffer { - GMutex *mutex; - GList *list; -}; - typedef struct time_buffer_item { double time; /* then user data follows */ } time_buffer_item; -time_buffer * -time_buffer_new (double maxtimedelta) +struct time_buffer { + GMutex mutex; + GQueue buffer; +#ifdef DEBUG + time_buffer_item* lastitem; +#endif +}; + +time_buffer* +time_buffer_new(void) { - time_buffer *t = g_new(time_buffer, 1); + time_buffer* t = g_new(time_buffer, 1); - if(t) { - t->mutex = g_mutex_new(); - t->list = NULL; + if (t) { + g_mutex_init(&t->mutex); + g_queue_init(&t->buffer); +#ifdef DEBUG + t->lastitem = NULL; +#endif } return t; } -void -time_buffer_destroy (time_buffer *t) +/* Take care on whether we need to free the buffer contents first +or just use g_list_free_full() +void time_buffer_destroy(time_buffer* t) { - if(t) { - g_list_free(t->list); - g_mutex_free(t->mutex); - g_free(t); + if (t) { + g_list_free(t->list); + g_mutex_clear(&t->mutex); + g_free(t); } } +*/ -void -time_buffer_clear (time_buffer *t) +void time_buffer_clear(time_buffer* t) { - while(t->list) { - g_free(t->list->data); - t->list = g_list_remove_link(t->list, t->list); - } + GList* l; + + for (l = t->buffer.head; l; l = l->next) + g_free(l->data); + g_queue_clear(&t->buffer); +#ifdef DEBUG + t->lastitem = NULL; +#endif } gboolean -time_buffer_add (time_buffer *t, - void *item, - double time) +time_buffer_add(time_buffer* t, + void* item, + double time) { - time_buffer_item *a = item; + time_buffer_item* a = item; - g_mutex_lock(t->mutex); + g_mutex_lock(&t->mutex); +#ifdef DEBUG + if (t->lastitem) { + if (t->lastitem->time > time) { + g_print("Added a new item with time %f less than that of the previous item %f\n", a->time, t->lastitem->time); + g_assert_not_reached(); + } + } + t->lastitem = item; +#endif a->time = time; - t->list = g_list_append(t->list, a); - g_mutex_unlock(t->mutex); + g_queue_push_head(&t->buffer, item); + g_mutex_unlock(&t->mutex); return TRUE; } -void * -time_buffer_get (time_buffer *t, - double time) -{ - int i, j, l; - void *result = NULL; - GList *list; - - g_mutex_lock(t->mutex); - l = g_list_length(t->list); - - if(l == 0) { - g_mutex_unlock(t->mutex); - return NULL; - } +void time_buffer_foreach(time_buffer* t, + double time, + void (*foreach_func)(gpointer data, gpointer user_data), + gpointer user_data) +{ + GList* l; - for(i = 0, list = t->list; i < l - 1; i++, list = list->next) { - time_buffer_item *a = list->data; - if(time < a->time) - break; + g_mutex_lock(&t->mutex); + while ((l = t->buffer.tail)) { + gpointer data; + + if (((time_buffer_item*)l->data)->time > time) + break; + data = g_queue_pop_tail(&t->buffer); + foreach_func(data, user_data); + g_free(data); } + g_mutex_unlock(&t->mutex); +} - for(j = 0; j < i - 1; j++) { - GList *node = t->list; - g_free(node->data); - t->list = g_list_remove_link(t->list, node); - g_list_free(node); - } +gpointer time_buffer_get(time_buffer* t, + double time) +{ + gpointer result = NULL; + GList* l; - result = t->list->data; + g_mutex_lock(&t->mutex); + l = t->buffer.tail; - g_mutex_unlock(t->mutex); + if (l) + if (((time_buffer_item*)l->data)->time <= time) { + for (; l->prev; l = t->buffer.tail) { + if (((time_buffer_item*)l->prev->data)->time > time) + break; + g_free(g_queue_pop_tail(&t->buffer)); + } + result = g_queue_pop_tail(&t->buffer); + } + g_mutex_unlock(&t->mutex); return result; } diff -Nru soundtracker-0.6.8/app/time-buffer.h soundtracker-1.0.2~pre2/app/time-buffer.h --- soundtracker-0.6.8/app/time-buffer.h 2001-01-03 13:24:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/time-buffer.h 2021-02-23 17:47:24.000000000 +0000 @@ -2,7 +2,8 @@ /* * The Real SoundTracker - time buffer (header) * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause + * Copyright (C) 2020, 2021 Yury Aliaev * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,15 +30,20 @@ info must be delayed to coincide with the audio output in the speakers. - The _add and _get functions are thread-safe. */ + The _add, _get and _foreach functions are thread-safe. */ typedef struct time_buffer time_buffer; -time_buffer * time_buffer_new (double maxtimedelta); -void time_buffer_destroy (time_buffer *t); +time_buffer* time_buffer_new(void); +//void time_buffer_destroy(time_buffer* t); -gboolean time_buffer_add (time_buffer *t, void *item, double time); -void time_buffer_clear (time_buffer *t); -void * time_buffer_get (time_buffer *t, double time); +gboolean time_buffer_add(time_buffer* t, void* item, double time); +void time_buffer_clear(time_buffer* t); +/* time_buffer_get requires explicit freeing of the result */ +gpointer time_buffer_get(time_buffer* t, double time); +void time_buffer_foreach(time_buffer* t, + double time, + void (*foreach_func)(gpointer data, gpointer user_data), + gpointer user_data); #endif /* _TIME_BUFFER_H */ diff -Nru soundtracker-0.6.8/app/tips-dialog.c soundtracker-1.0.2~pre2/app/tips-dialog.c --- soundtracker-0.6.8/app/tips-dialog.c 2002-06-17 13:09:31.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/tips-dialog.c 2020-01-10 18:46:47.000000000 +0000 @@ -3,7 +3,7 @@ * The Real SoundTracker - user tips * * Copyright (C) 1997-2000 by the GIMP authors - * Copyright (C) 1999-2002 by Michael Krause + * Copyright (C) 1999-2019 by Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,31 +22,26 @@ #include "config.h" -#include -#include -#include -#include - +#include #include -#include "i18n.h" -#include "tips-dialog.h" +#include "gui-subs.h" +#include "gui.h" #include "preferences.h" +#include "st-subs.h" +#include "tips-dialog.h" -static int tips_dialog_hide (GtkWidget *widget, gpointer data); -static int tips_show_next (GtkWidget *widget, gpointer data); -static void tips_toggle_update (GtkWidget *widget, gpointer data); +static int tips_show_next(GtkWidget* widget, gpointer data); +static void tips_toggle_update(GtkWidget* widget, gpointer data); -static GtkWidget *tips_dialog_vbox = NULL; -static GtkWidget *tips_dialog = NULL; -static GtkWidget *tips_label; +static GtkWidget* tips_label; -int tips_dialog_last_tip = 0; -int tips_dialog_show_tips = 1; +gint tips_dialog_last_tip; +gboolean tips_dialog_show_tips; -#define TIPS_COUNT (sizeof(tips_array)/sizeof(tips_array[0])) +#define TIPS_COUNT ARRAY_SIZE(tips_array) -static char const * const tips_array[] = { +static char const* const tips_array[] = { N_("Welcome to SoundTracker!\n" "\n" "If you are new to this type of program, you will want to get hold of\n" @@ -70,195 +65,141 @@ "Just press Return or Tab to free yourself!") }; -void -tips_dialog_open () +void tips_box_populate(GtkWidget* vbox, gboolean has_separator) { - GtkWidget *thing; - - if(!tips_dialog) { - tips_dialog = gtk_window_new (GTK_WINDOW_DIALOG); - gtk_window_set_wmclass (GTK_WINDOW (tips_dialog), "tip_of_the_day", "SoundTracker"); - gtk_window_set_title (GTK_WINDOW (tips_dialog), (_("SoundTracker Tip of the day"))); - gtk_signal_connect (GTK_OBJECT (tips_dialog), "delete_event", - GTK_SIGNAL_FUNC (tips_dialog_hide), NULL); - - thing = tips_dialog_get_vbox(); - gtk_container_add(GTK_CONTAINER (tips_dialog), thing); - gtk_widget_show(thing); - } - - if(!GTK_WIDGET_VISIBLE (tips_dialog)) { - gtk_widget_show (tips_dialog); - } else { - gdk_window_raise (tips_dialog->window); - } -} - -static void -tips_dialog_vbox_destroy (GtkObject *object) -{ - tips_dialog_vbox = NULL; -} - -GtkWidget * -tips_dialog_get_vbox (void) -{ - GtkWidget *vbox; - GtkWidget *hbox1; - GtkWidget *hbox2; - GtkWidget *bbox; - GtkWidget *vbox_bbox2; - GtkWidget *bbox2; - GtkWidget *button_next; - GtkWidget *button_prev; - GtkWidget *vbox_check; - GtkWidget *button_check; - - if(tips_dialog_vbox) { - g_error("tips_dialog_get_vbox() called twice.\n"); - return NULL; - } - - tips_dialog_vbox = vbox = gtk_vbox_new (FALSE, 0); + GtkWidget* hbox1; + GtkWidget* hbox2; + GtkWidget* bbox; + GtkWidget* vbox_bbox2; + GtkWidget* bbox2; + GtkWidget* vbox_check; + GtkWidget* thing; + + hbox1 = gtk_hbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(hbox1), 10); + gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, TRUE, 0); + gtk_widget_show(hbox1); + + if (has_separator) { + thing = gtk_hseparator_new(); + gtk_box_pack_end(GTK_BOX(vbox), thing, FALSE, FALSE, 4); + gtk_widget_show(thing); + } + + hbox2 = gtk_hbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(hbox2), 4); + gtk_box_pack_end(GTK_BOX(vbox), hbox2, FALSE, TRUE, 0); + gtk_widget_show(hbox2); + + bbox = gtk_hbutton_box_new(); + gtk_box_pack_end(GTK_BOX(hbox2), bbox, FALSE, FALSE, 0); + gtk_widget_show(bbox); + + vbox_bbox2 = gtk_vbox_new(FALSE, 0); + gtk_box_pack_end(GTK_BOX(hbox2), vbox_bbox2, FALSE, FALSE, 15); + gtk_widget_show(vbox_bbox2); - gtk_signal_connect(GTK_OBJECT(tips_dialog_vbox), "destroy", - GTK_SIGNAL_FUNC(tips_dialog_vbox_destroy), NULL); - - hbox1 = gtk_hbox_new (FALSE, 5); - gtk_container_set_border_width (GTK_CONTAINER (hbox1), 10); - gtk_box_pack_start (GTK_BOX (vbox), hbox1, FALSE, TRUE, 0); - gtk_widget_show (hbox1); - - hbox2 = gtk_hbox_new (FALSE, 5); - gtk_container_set_border_width (GTK_CONTAINER (hbox2), 10); - gtk_box_pack_end (GTK_BOX (vbox), hbox2, FALSE, TRUE, 0); - gtk_widget_show (hbox2); - - bbox = gtk_hbutton_box_new (); - gtk_box_pack_end (GTK_BOX (hbox2), bbox, FALSE, FALSE, 0); - gtk_widget_show (bbox); - - vbox_bbox2 = gtk_vbox_new (FALSE, 0); - gtk_box_pack_end (GTK_BOX (hbox2), vbox_bbox2, FALSE, FALSE, 15); - gtk_widget_show (vbox_bbox2); - - bbox2 = gtk_hbox_new (TRUE, 5); - gtk_box_pack_end (GTK_BOX (vbox_bbox2), bbox2, TRUE, FALSE, 0); + bbox2 = gtk_hbox_new(TRUE, 5); + gtk_box_pack_end(GTK_BOX(vbox_bbox2), bbox2, TRUE, FALSE, 0); gtk_widget_show(bbox2); - tips_label = gtk_label_new (_(tips_array[tips_dialog_last_tip])); - gtk_label_set_justify (GTK_LABEL (tips_label), GTK_JUSTIFY_CENTER); - gtk_box_pack_start (GTK_BOX (hbox1), tips_label, TRUE, TRUE, 3); - gtk_widget_show (tips_label); - - button_prev = gtk_button_new_with_label ((_("Previous Tip"))); - GTK_WIDGET_UNSET_FLAGS (button_prev, GTK_RECEIVES_DEFAULT); - gtk_signal_connect (GTK_OBJECT (button_prev), "clicked", - GTK_SIGNAL_FUNC (tips_show_next), - (gpointer) "prev"); - gtk_container_add (GTK_CONTAINER (bbox2), button_prev); - gtk_widget_show (button_prev); - - button_next = gtk_button_new_with_label ((_("Next Tip"))); - GTK_WIDGET_UNSET_FLAGS (button_next, GTK_RECEIVES_DEFAULT); - gtk_signal_connect (GTK_OBJECT (button_next), "clicked", - GTK_SIGNAL_FUNC (tips_show_next), - (gpointer) "next"); - gtk_container_add (GTK_CONTAINER (bbox2), button_next); - gtk_widget_show (button_next); - - vbox_check = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox2), vbox_check, FALSE, TRUE, 0); - gtk_widget_show (vbox_check); - - button_check = gtk_check_button_new_with_label ((_("Show tip next time"))); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button_check), - tips_dialog_show_tips); - gtk_signal_connect (GTK_OBJECT (button_check), "toggled", - GTK_SIGNAL_FUNC (tips_toggle_update), - (gpointer) &tips_dialog_show_tips); - gtk_box_pack_start (GTK_BOX (vbox_check), button_check, TRUE, FALSE, 0); - gtk_widget_show (button_check); - - return vbox; -} - -static int -tips_dialog_hide (GtkWidget *widget, - gpointer data) -{ - gtk_widget_hide (tips_dialog); - - return TRUE; + tips_label = gtk_label_new(_(tips_array[tips_dialog_last_tip])); + gtk_label_set_justify(GTK_LABEL(tips_label), GTK_JUSTIFY_CENTER); + gtk_box_pack_start(GTK_BOX(hbox1), tips_label, TRUE, TRUE, 3); + gtk_widget_show(tips_label); + + thing = gtk_button_new_with_label((_("Previous Tip"))); + g_signal_connect(thing, "clicked", + G_CALLBACK(tips_show_next), + (gpointer) "prev"); + gtk_container_add(GTK_CONTAINER(bbox2), thing); + gtk_widget_show(thing); + + thing = gtk_button_new_with_label((_("Next Tip"))); + g_signal_connect(thing, "clicked", + G_CALLBACK(tips_show_next), + (gpointer) "next"); + gtk_container_add(GTK_CONTAINER(bbox2), thing); + gtk_widget_show(thing); + + vbox_check = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox2), vbox_check, FALSE, TRUE, 0); + gtk_widget_show(vbox_check); + + thing = gtk_check_button_new_with_label((_("Show tip next time"))); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(thing), + tips_dialog_show_tips); + g_signal_connect(thing, "toggled", + G_CALLBACK(tips_toggle_update), + (gpointer)&tips_dialog_show_tips); + gtk_box_pack_start(GTK_BOX(vbox_check), thing, TRUE, FALSE, 0); + gtk_widget_show(thing); +} + +void tips_dialog_open() +{ + static GtkWidget* tips_dialog = NULL; + + if (!tips_dialog) { + gchar* buf; + + buf = g_strdup_printf(_("%s Tip of the day"), PACKAGE_NAME); + tips_dialog = gtk_dialog_new_with_buttons(buf, GTK_WINDOW(mainwindow), 0, + GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); + g_free(buf); + gui_dialog_adjust(tips_dialog, GTK_RESPONSE_CLOSE); + gui_dialog_connect(tips_dialog, NULL); + + tips_box_populate(gtk_dialog_get_content_area(GTK_DIALOG(tips_dialog)), TRUE); + gtk_widget_show(tips_dialog); + } else + gtk_window_present(GTK_WINDOW(tips_dialog)); } static int -tips_show_next (GtkWidget *widget, - gpointer data) +tips_show_next(GtkWidget* widget, + gpointer data) { - if (!strcmp ((char *)data, "prev")) - { - tips_dialog_last_tip--; - if (tips_dialog_last_tip < 0) - tips_dialog_last_tip = TIPS_COUNT - 1; - } - else - { - tips_dialog_last_tip++; - if (tips_dialog_last_tip >= TIPS_COUNT) - tips_dialog_last_tip = 0; + if (!strcmp((char*)data, "prev")) { + tips_dialog_last_tip--; + if (tips_dialog_last_tip < 0) + tips_dialog_last_tip = TIPS_COUNT - 1; + } else { + tips_dialog_last_tip++; + if (tips_dialog_last_tip >= TIPS_COUNT) + tips_dialog_last_tip = 0; } - gtk_label_set (GTK_LABEL (tips_label), _(tips_array[tips_dialog_last_tip])); - return FALSE; + gtk_label_set_text(GTK_LABEL(tips_label), _(tips_array[tips_dialog_last_tip])); + return FALSE; } static void -tips_toggle_update (GtkWidget *widget, - gpointer data) +tips_toggle_update(GtkWidget* widget, + gpointer data) { - int *toggle_val; + int* toggle_val; - toggle_val = (int *) data; + toggle_val = (int*)data; - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; + if (GTK_TOGGLE_BUTTON(widget)->active) + *toggle_val = TRUE; + else + *toggle_val = FALSE; } -void -tips_dialog_load_settings (void) +void tips_dialog_load_settings(void) { - prefs_node *f; - - f = prefs_open_read("tips"); - if(f) { - prefs_get_int(f, "show-tips", &tips_dialog_show_tips); - prefs_get_int(f, "last-tip", &tips_dialog_last_tip); - prefs_close(f); - } + tips_dialog_show_tips = prefs_get_bool("tips", "show-tips", TRUE); + tips_dialog_last_tip = prefs_get_int("tips", "last-tip", 0); - if(tips_dialog_last_tip >= TIPS_COUNT || tips_dialog_last_tip < 0) { - tips_dialog_last_tip = 0; + if (tips_dialog_last_tip >= TIPS_COUNT || tips_dialog_last_tip < 0) { + tips_dialog_last_tip = 0; } - - return; } -void -tips_dialog_save_settings (void) +void tips_dialog_save_settings(void) { - prefs_node *f; - - f = prefs_open_write("tips"); - if(!f) - return; - tips_dialog_last_tip++; - prefs_put_int(f, "show-tips", tips_dialog_show_tips); - prefs_put_int(f, "last-tip", tips_dialog_last_tip); - - prefs_close(f); - return; + prefs_put_bool("tips", "show-tips", tips_dialog_show_tips); + prefs_put_int("tips", "last-tip", tips_dialog_last_tip); } - diff -Nru soundtracker-0.6.8/app/tips-dialog.h soundtracker-1.0.2~pre2/app/tips-dialog.h --- soundtracker-0.6.8/app/tips-dialog.h 2002-02-17 15:04:01.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/tips-dialog.h 2019-04-15 17:45:05.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - user tips (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,14 +25,14 @@ #include /* Open separate tips dialog. */ -void tips_dialog_open (void); +void tips_dialog_open(void); /* Return dialog main vbox without creating window. An existing tips dialog window will be closed. */ -GtkWidget * tips_dialog_get_vbox (void); +void tips_box_populate(GtkWidget* box, gboolean has_separator); -void tips_dialog_load_settings (void); -void tips_dialog_save_settings (void); +void tips_dialog_load_settings(void); +void tips_dialog_save_settings(void); extern int tips_dialog_last_tip; extern int tips_dialog_show_tips; diff -Nru soundtracker-0.6.8/app/tracer.c soundtracker-1.0.2~pre2/app/tracer.c --- soundtracker-0.6.8/app/tracer.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/tracer.c 2021-02-06 10:29:09.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Pseudo-mixer for sample playback parameter tracing * - * Copyright (C) 2001 Michael Krause + * Copyright (C) 2001-2019 Michael Krause * Copyright (C) 2003 Yury Aliaev * This program is free software; you can redistribute it and/or modify @@ -22,23 +22,23 @@ #include -#include #include +#include -#include "mixer.h" -#include "xm-player.h" -#include "tracer.h" -#include "main.h" #include "audio.h" #include "gui-settings.h" +#include "main.h" +#include "mixer.h" +#include "tracer.h" +#include "xm-player.h" static int num_channels, mixfreq; +static float fmixfreq; // This is an artificial limit. The code can do more channels. static tracer_channel channels[32]; -void -tracer_setnumch (int n) +void tracer_setnumch(int n) { g_assert(n >= 1 && n <= 32); @@ -46,60 +46,61 @@ } static void -tracer_updatesample (st_mixer_sample_info *si) +tracer_updatesample(st_mixer_sample_info* si) { int i; - tracer_channel *c; + tracer_channel* c; - for(i = 0; i < 2 * 32; i++) { - c = &channels[i]; + for (i = 0; i < 32; i++) { + c = &channels[i]; - if(c->sample != si || !(c->flags & TR_FLAG_SAMPLE_RUNNING)) { - continue; - } - - if(c->data != si->data - || c->length != si->length - || c->looptype != si->looptype) { - c->flags &= ~TR_FLAG_SAMPLE_RUNNING; - continue; - } - - /* No relevant data has changed. Don't stop the sample, but update + if (c->sample != si || !(c->flags & TR_FLAG_SAMPLE_RUNNING)) { + continue; + } + + if (c->data != si->data + || c->length != si->length + || c->looptype != si->looptype) { + c->flags &= ~TR_FLAG_SAMPLE_RUNNING; + continue; + } + + /* No relevant data has changed. Don't stop the sample, but update our local loop data instead. */ - c->looptype = si->looptype; - if(c->looptype != ST_MIXER_SAMPLE_LOOPTYPE_NONE) { - if(c->positionw < si->loopstart) { - c->positionw = si->loopstart; - c->positionf = 0x7fffffff; - } else if(c->positionw >= si->loopend) { - c->positionw = si->loopend - 1; - c->positionf = 0x7fffffff; - } - } + c->looptype = si->looptype; + if (c->looptype != ST_MIXER_SAMPLE_LOOPTYPE_NONE) { + if (c->positionw < si->loopstart) { + c->positionw = si->loopstart; + c->positionf = 0x7fffffff; + } else if (c->positionw >= si->loopend) { + c->positionw = si->loopend - 1; + c->positionf = 0x7fffffff; + } + } } } static void -tracer_setmixfreq (guint16 frequency) +tracer_setmixfreq(guint32 frequency) { mixfreq = frequency; + fmixfreq = 48000.0 / (float)mixfreq; } static void -tracer_reset (void) +tracer_reset(void) { memset(channels, 0, sizeof(channels)); } static void -tracer_startnote (int channel, - st_mixer_sample_info *s) +tracer_startnote(int channel, + st_mixer_sample_info* s) { - tracer_channel *c = &channels[channel]; + tracer_channel* c = &channels[channel]; c->flags = 0; - + c->sample = s; // The following three for update_sample() @@ -110,61 +111,62 @@ c->positionw = 0; c->positionf = 0; c->playend = 0; - if(s->looptype == ST_MIXER_SAMPLE_LOOPTYPE_AMIGA) { - c->flags |= TR_FLAG_LOOP_UNIDIRECTIONAL; - } else if(s->looptype == ST_MIXER_SAMPLE_LOOPTYPE_PINGPONG) { - c->flags |= TR_FLAG_LOOP_BIDIRECTIONAL; + if (s->looptype == ST_MIXER_SAMPLE_LOOPTYPE_AMIGA) { + c->flags |= TR_FLAG_LOOP_UNIDIRECTIONAL; + } else if (s->looptype == ST_MIXER_SAMPLE_LOOPTYPE_PINGPONG) { + c->flags |= TR_FLAG_LOOP_BIDIRECTIONAL; } c->direction = 1; c->freso = 0.0; - c->ffreq = 1.0; + c->ffreq = fmixfreq; + c->filter_on = FALSE; c->flags |= TR_FLAG_SAMPLE_RUNNING; } static void -tracer_stopnote (int channel) +tracer_stopnote(int channel) { - tracer_channel *c = &channels[channel]; + tracer_channel* c = &channels[channel]; c->flags = 0; /* Just stop the note without reverances */ } static void -tracer_setsmplpos (int channel, - guint32 offset) +tracer_setsmplpos(int channel, + guint32 offset) { - tracer_channel *c = &channels[channel]; + tracer_channel* c = &channels[channel]; - if(c->sample && c->flags != 0) { - if(offset < c->sample->length) { - c->positionw = offset; - c->positionf = 0; - c->direction = 1; - } else { - c->flags = 0; - } + if (c->sample && c->flags != 0) { + if (offset < c->sample->length) { + c->positionw = offset; + c->positionf = 0; + c->direction = 1; + } else { + c->flags = 0; + } } } static void -tracer_setsmplend (int channel, - guint32 offset) +tracer_setsmplend(int channel, + guint32 offset) { - tracer_channel *c = &channels[channel]; + tracer_channel* c = &channels[channel]; - if(c->sample && c->flags != 0) { - if(c->positionw != 0 || offset < c->sample->length) { - // only end if the selection is not the whole sample - c->playend = offset; - } + if (c->sample && c->flags != 0) { + if (c->positionw != 0 || offset < c->sample->length) { + // only end if the selection is not the whole sample + c->playend = offset; + } } } static void -tracer_setfreq (int channel, - float frequency) +tracer_setfreq(int channel, + float frequency) { - tracer_channel *c = &channels[channel]; + tracer_channel* c = &channels[channel]; frequency /= mixfreq; @@ -173,45 +175,46 @@ } static void -tracer_setvolume (int channel, - float volume) +tracer_setvolume(int channel, + float volume) { - tracer_channel *c = &channels[channel]; + tracer_channel* c = &channels[channel]; c->volume = volume; } static void -tracer_setpanning (int channel, - float panning) +tracer_setpanning(int channel, + float panning) { - tracer_channel *c = &channels[channel]; + tracer_channel* c = &channels[channel]; c->panning = 0.5 * (panning + 1.0); } static void -tracer_setchcutoff (int channel, - float freq) +tracer_setchcutoff(int channel, + float freq) { - tracer_channel *c = &channels[channel]; + tracer_channel* c = &channels[channel]; - if(freq < 0.0) { - c->ffreq = 1.0; - c->freso = 0.0; + if (freq < 0.0) { + c->ffreq = fmixfreq; + c->freso = 0.0; + c->filter_on = FALSE; } else { - g_assert(0.0 <= freq); - g_assert(freq <= 1.0); - c->ffreq = freq; - c->freso = 0.0; + g_assert(0.0 <= freq); + g_assert(freq <= 1.0); + c->ffreq = freq * fmixfreq; + c->filter_on = TRUE; } } static void -tracer_setchreso (int channel, - float reso) +tracer_setchreso(int channel, + float reso) { - tracer_channel *c = &channels[channel]; + tracer_channel* c = &channels[channel]; g_assert(0.0 <= reso); g_assert(reso <= 1.0); @@ -219,11 +222,10 @@ } static guint32 -tracer_mix_sub (tracer_channel *ch, - guint32 num_samples_left) +tracer_mix_sub(tracer_channel* ch, + guint32 num_samples_left) { - const gboolean loopit = (ch->playend == 0) && - (ch->flags & (TR_FLAG_LOOP_UNIDIRECTIONAL | TR_FLAG_LOOP_BIDIRECTIONAL)); + const gboolean loopit = (ch->playend == 0) && (ch->flags & (TR_FLAG_LOOP_UNIDIRECTIONAL | TR_FLAG_LOOP_BIDIRECTIONAL)); const gboolean gonnapingpong = loopit && (ch->flags & TR_FLAG_LOOP_BIDIRECTIONAL); const gint64 lstart64 = ((guint64)ch->sample->loopstart) << 32; @@ -231,59 +233,59 @@ gint64 pos64 = ((guint64)(ch->positionw) << 32) + (guint64)ch->positionf; const gint32 ende = (ch->playend != 0) ? (ch->playend) : (loopit ? ch->sample->loopend : ch->length); const gint64 ende64 = (guint64)ende << 32; - + gint64 vieweit64; guint32 num_samples; - if(ch->direction == 1) - vieweit64 = pos64 + freq64 * num_samples_left; + if (ch->direction == 1) + vieweit64 = pos64 + freq64 * num_samples_left; else - vieweit64 = pos64 - freq64 * num_samples_left; + vieweit64 = pos64 - freq64 * num_samples_left; - if((ch->direction == 1 && vieweit64 < ende64) || (ch->direction == -1 && vieweit64 > lstart64)) { - /* Normal conditions; we are far from loop boundaries and sample end */ - ch->positionw = vieweit64 >> 32; - ch->positionf = vieweit64 & 0xffffffff; - - return num_samples_left; + if ((ch->direction == 1 && vieweit64 < ende64) || (ch->direction == -1 && vieweit64 > lstart64)) { + /* Normal conditions; we are far from loop boundaries and sample end */ + ch->positionw = vieweit64 >> 32; + ch->positionf = vieweit64 & 0xffffffff; + + return num_samples_left; } /* If we've reached this point, this means we are close to any `critical point' of the sample */ - if(!loopit) { - /* Sample without loop just stopped; we don't care about it more */ - ch->flags = 0; - - return 0; + if (!loopit) { + /* Sample without loop just stopped; we don't care about it more */ + ch->flags = 0; + + return 0; } - if(!gonnapingpong) { - /* End of Amiga-type loop */ - num_samples = (ende64 - pos64) / freq64 + 1;/* plus one sample from the next loop cycle */ - pos64 += num_samples * freq64 - ende64 + lstart64; + if (!gonnapingpong) { + /* End of Amiga-type loop */ + num_samples = (ende64 - pos64) / freq64 + 1; /* plus one sample from the next loop cycle */ + pos64 += num_samples * freq64 - ende64 + lstart64; - ch->positionw = pos64 >> 32; - ch->positionf = pos64 & 0xffffffff; + ch->positionw = pos64 >> 32; + ch->positionf = pos64 & 0xffffffff; - g_assert(num_samples <= num_samples_left); - return num_samples; + g_assert(num_samples <= num_samples_left); + return num_samples; } - if(ch->direction == 1) { - /* Reflection at the end of pingpong loop */ - num_samples = (ende64 - pos64) / freq64 + 1;/* plus one sample from the next loop cycle */ - pos64 += num_samples * freq64; - pos64 = ende64 - (pos64 - ende64); + if (ch->direction == 1) { + /* Reflection at the end of pingpong loop */ + num_samples = (ende64 - pos64) / freq64 + 1; /* plus one sample from the next loop cycle */ + pos64 += num_samples * freq64; + pos64 = ende64 - (pos64 - ende64); - ch->positionw = pos64 >> 32; - ch->positionf = pos64 & 0xffffffff; - ch->direction = -1; + ch->positionw = pos64 >> 32; + ch->positionf = pos64 & 0xffffffff; + ch->direction = -1; - g_assert(num_samples <= num_samples_left); - return num_samples; + g_assert(num_samples <= num_samples_left); + return num_samples; } - + /* The same but at the start... */ - num_samples = (pos64 - lstart64) / freq64 + 1;/* plus one sample from the next loop cycle */ + num_samples = (pos64 - lstart64) / freq64 + 1; /* plus one sample from the next loop cycle */ pos64 -= num_samples * freq64; pos64 = lstart64 - (pos64 - lstart64); @@ -295,42 +297,36 @@ return num_samples; } -static void * -tracer_mix (void * dest, guint32 count, gint16 *scopebufs[], int scopebufs_offset) +static void* +tracer_mix(void* dest, guint32 count, gint16* scopebufs[], int scopebufs_offset) { int chnr; - - for(chnr = 0; chnr < num_channels; chnr++) { - tracer_channel *ch = channels + chnr; - int num_samples_left = count; - - if(!((ch->flags & TR_FLAG_SAMPLE_RUNNING) && (gui_settings.permanent_channels & (1 << chnr)))) - continue; - - g_assert(ch->sample->lock); - g_mutex_lock(ch->sample->lock); - - while(num_samples_left && (ch->flags & TR_FLAG_SAMPLE_RUNNING)) { - int num_samples = 0; - num_samples = tracer_mix_sub(ch, num_samples_left); + for (chnr = 0; chnr < num_channels; chnr++) { + tracer_channel* ch = channels + chnr; + int num_samples_left = count; + + if (!((ch->flags & TR_FLAG_SAMPLE_RUNNING) && (gui_settings.permanent_channels & (1 << chnr)))) + continue; + + g_mutex_lock(&ch->sample->lock); + + while (num_samples_left && (ch->flags & TR_FLAG_SAMPLE_RUNNING)) { + int num_samples = 0; + + num_samples = tracer_mix_sub(ch, num_samples_left); - num_samples_left -= num_samples; - } + num_samples_left -= num_samples; + } - g_mutex_unlock(ch->sample->lock); + g_mutex_unlock(&ch->sample->lock); } return NULL; } -static void -tracer_dumpall (void) -{ -} - static st_mixer mixer_tracer = { "tracer", - "Pseudo-mixer for channel settings tracing",/* It will NEVER be used and hence translated */ + "Pseudo-mixer for channel settings tracing", /* It will NEVER be used and hence translated */ tracer_setnumch, tracer_updatesample, @@ -358,49 +354,46 @@ NULL }; -void -tracer_trace (int mixfreq, int songpos, int patpos) +void tracer_trace(int mixfreq, int songpos, int patpos) { /* Attemp to take pitchband into account */ /* Test if tempo and BPM are traced */ - st_mixer *real_mixer = mixer; + st_mixer* real_mixer = mixer; mixer = &mixer_tracer; int stopsongpos = songpos; int stoppatpos = patpos; double rest = 0, previous = 0; /* Fractional part of the samples */ - - if((stoppatpos -= 1) < 0){ - stopsongpos -= 1; - stoppatpos = xm->patterns[xm->pattern_order_table[stopsongpos]].length - 1; + + if ((stoppatpos -= 1) < 0) { + stopsongpos -= 1; + stoppatpos = xm->patterns[xm->pattern_order_table[stopsongpos]].length - 1; } tracer_setmixfreq(mixfreq); tracer_reset(); - while(1) { - double t; - - double current = xmplayer_play(); - t = current - previous + rest; - previous = current; - - guint32 samples = t * mixfreq; - rest = t - (double)samples / (double)mixfreq; - - tracer_mix(NULL, samples, NULL, 0); - if(player_songpos > stopsongpos || - (player_songpos == stopsongpos && player_patpos > stoppatpos) || - (player_songpos == stopsongpos && player_patpos == stoppatpos && curtick >= player_tempo - 1)) - break;//? maybe player_patpos - 1 + while (1) { + double t; + + double current = xmplayer_play(); + t = current - previous + rest; + previous = current; + + guint32 samples = t * mixfreq; + rest = t - (double)samples / (double)mixfreq; + + tracer_mix(NULL, samples, NULL, 0); + if (player_songpos > stopsongpos || (player_songpos == stopsongpos && player_patpos > stoppatpos) || (player_songpos == stopsongpos && player_patpos == stoppatpos && curtick >= player_tempo - 1)) + break; //? maybe player_patpos - 1 } mixer = real_mixer; } tracer_channel* -tracer_return_channel (int n) +tracer_return_channel(int n) { g_assert(n < num_channels); diff -Nru soundtracker-0.6.8/app/tracer.h soundtracker-1.0.2~pre2/app/tracer.h --- soundtracker-0.6.8/app/tracer.h 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/tracer.h 2021-02-06 10:29:09.000000000 +0000 @@ -2,9 +2,9 @@ /* * The Real SoundTracker - Pseudo-mixer for sample playback parameter tracing (header) * - * Copyright (C) 2001 Michael Krause + * Copyright (C) 2001-2019 Michael Krause * Copyright (C) 2003 Yury Aliaev - + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -26,32 +26,33 @@ #include "mixer.h" typedef struct tracer_channel { - st_mixer_sample_info *sample; + st_mixer_sample_info* sample; - void *data; // for updatesample() to see if sample has changed + void* data; // for updatesample() to see if sample has changed int looptype; guint32 length; - guint32 flags; // see below - float volume; // 0.0 ... 1.0 - float panning; // 0.0 ... 1.0 - int direction; // +1 for forward, -1 for backward - guint32 playend; // for a forced premature end of the sample - - guint32 positionw; // current sample position (whole part of 32.32) - guint32 positionf; // current sample position (fractional part of 32.32) - guint32 freqw; // frequency (whole part of 32.32) - guint32 freqf; // frequency (fractional part of 32.32) - - float ffreq; // filter frequency (0<=x<=1) - float freso; // filter resonance (0<=x<1) + guint32 flags; // see below + float volume; // 0.0 ... 1.0 + float panning; // 0.0 ... 1.0 + int direction; // +1 for forward, -1 for backward + guint32 playend; // for a forced premature end of the sample + + guint32 positionw; // current sample position (whole part of 32.32) + guint32 positionf; // current sample position (fractional part of 32.32) + guint32 freqw; // frequency (whole part of 32.32) + guint32 freqf; // frequency (fractional part of 32.32) + + float ffreq; // filter frequency (0<=x<=1) + float freso; // filter resonance (0<=x<1) + gboolean filter_on; } tracer_channel; -#define TR_FLAG_LOOP_UNIDIRECTIONAL 1 -#define TR_FLAG_LOOP_BIDIRECTIONAL 2 -#define TR_FLAG_SAMPLE_RUNNING 4 - -void tracer_trace (int mixfreq, int songpos, int patpos); -tracer_channel* tracer_return_channel (int number); -void tracer_setnumch (int n); +#define TR_FLAG_LOOP_UNIDIRECTIONAL 1 +#define TR_FLAG_LOOP_BIDIRECTIONAL 2 +#define TR_FLAG_SAMPLE_RUNNING 4 + +void tracer_trace(int mixfreq, int songpos, int patpos); +tracer_channel* tracer_return_channel(int number); +void tracer_setnumch(int n); #endif diff -Nru soundtracker-0.6.8/app/track-editor.c soundtracker-1.0.2~pre2/app/track-editor.c --- soundtracker-0.6.8/app/track-editor.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/track-editor.c 2021-02-23 17:45:25.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - track editor * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,64 +19,87 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include -#include #include +#include +#include +#include #include +#include +#include +#include -#include "i18n.h" -#include "track-editor.h" -#include "gui.h" -#include "st-subs.h" -#include "keys.h" #include "audio.h" -#include "xm-player.h" -#include "main.h" #include "gui-settings.h" #include "gui-subs.h" +#include "gui.h" +#include "history.h" +#include "keys.h" +#include "main.h" +#include "menubar.h" #include "preferences.h" +#include "st-subs.h" +#include "track-editor.h" #include "tracker-settings.h" -#include "menubar.h" -#include "scope-group.h" +#include "xm-player.h" + +#define NG_0x40 4 + +/* How many parameters each FX has. 0 means that there is no effect with this code, + 3 -- that the effect has only one 4-bit parameter, NG_0x40 -- that the value + should not be greater than 0x40 */ + +static const guint8 n_params[] = + {2, 1, 1, 1, 2, 1, 1, 2, 1, 1, /* 0 - 9 */ + 2, 1, 1 | NG_0x40, 1, 3, 1, 1 | NG_0x40, 2, 0, 0, /* a - j */ + 1, 1, 0, 0, 0, 2, 1, 2, 0, 2, /* k - t */ + 0, 0, 0, 3, 0, 1}; /* u - z */ -Tracker *tracker; -GtkWidget *trackersettings; -GtkWidget *vscrollbar; -ScopeGroup *scopegroup; +extern GtkBuilder *gui_builder; -static GtkWidget *hscrollbar; +Tracker* tracker; +GtkWidget* trackersettings; +GtkWidget* vscrollbar; -static XMPattern *pattern_buffer = NULL; -static XMNote *track_buffer = NULL; +static GtkWidget* hscrollbar; +static GtkAdjustment* adj; + +static XMPattern* pattern_buffer = NULL; +static XMNote* track_buffer = NULL; static int track_buffer_length; +static guint hscroll_tag, vscroll_tag; /* Block stuff */ static XMPattern block_buffer; -/* this array contains -1 if the note is not running, or the channel number where - it is being played. this is necessary to handle the key on/off situation. */ -static int note_running[96]; +/* this array contains -1 if the note is not running on the specified channel + or the note number if it is being played. This is necessary to handle the + key on/off situation. */ +static int note_running[32] = {-1}; static int update_freq = 30; static int gtktimer = -1; static guint track_editor_editmode_status_idle_handler = 0; -static gchar track_editor_editmode_status_ed_buf[128]; +static gchar track_editor_editmode_status_ed_buf[512]; +#define SEBUF_SIZE sizeof(track_editor_editmode_status_ed_buf) /* jazz edit stuff */ -static GtkWidget *jazzbox; -static GtkWidget *jazztable; -static GtkToggleButton *jazztoggles[32]; +static GtkWidget* jazzbox; +static GtkWidget* jazztable; +static GtkToggleButton* jazztoggles[32]; static int jazz_numshown = 0; -static int jazz_enabled = FALSE; +static gboolean jazz_enabled = FALSE; -static void vscrollbar_changed(GtkAdjustment *adj); -static void hscrollbar_changed(GtkAdjustment *adj); -static void update_vscrollbar(Tracker *t, int patpos, int patlen, int disprows); -static void update_hscrollbar(Tracker *t, int leftchan, int numchans, int dispchans); -static void update_mainmenu_blockmark(Tracker *t, int state); -static gboolean track_editor_handle_column_input(Tracker *t, int gdkkey); +/* Live recording stuff */ +static gint8 cur_tick = 0; +static gdouble curtime = 0.0, prevtime = 0.0, nexttime = 0.0; +static gint cur_pos = 0, cur_pat = 0, cur_tempo = 0, prev_tempo = 0, patno = 0, bpm = 0; + +static void vscrollbar_changed(GtkAdjustment* adj); +static void hscrollbar_changed(GtkAdjustment* adj); +static void update_mainmenu_blockmark(Tracker* t, int state); +static gboolean track_editor_handle_column_input(Tracker* t, int gdkkey); /* Note recording stuff */ static struct { @@ -84,90 +107,85 @@ int chn; gboolean act; } reckey[32]; -static gboolean insert_noteoff; static gint -track_editor_editmode_status_idle_function (void) +track_editor_editmode_status_idle_function(void) { -#ifdef USE_GNOME - gnome_appbar_set_status(GNOME_APPBAR(status_bar), track_editor_editmode_status_ed_buf); -#else - gtk_statusbar_pop(GTK_STATUSBAR(status_bar), statusbar_context_id); - gtk_statusbar_push(GTK_STATUSBAR(status_bar), statusbar_context_id, track_editor_editmode_status_ed_buf); -#endif + gui_statusbar_update_message(track_editor_editmode_status_ed_buf, FALSE); - gtk_idle_remove(track_editor_editmode_status_idle_handler); track_editor_editmode_status_idle_handler = 0; - return TRUE; + return FALSE; } -void -show_editmode_status(void) +#define PRINT_STATUS(pos, ...) \ + g_snprintf(&track_editor_editmode_status_ed_buf[pos], SEBUF_SIZE - pos, __VA_ARGS__) + +void show_editmode_status(void) { - Tracker *t = tracker; - XMNote *note = &t->curpattern->channels[t->cursor_ch][t->patpos]; - gchar tmp_buf[128]; - int cmd_p1, cmd_p2; - - static const gchar *fx_commands[]={ - N_("Arpeggio"), /* 0 */ - N_("Porta up"), /* 1 */ - N_("Porta down"), /* 2 */ - N_("Tone porta"), /* 3 */ - N_("Vibrato"), /* 4 */ - N_("Tone porta + Volume slide"), /* 5 */ - N_("Vibrato + Volume slide"), /* 6 */ - N_("Tremolo"), /* 7 */ - N_("Set panning"), /* 8 */ - N_("Position jump"), /* 9 */ - N_("Set volume"), /* A */ - N_("Position jump"), /* B */ - N_("Set volume"), /* C */ - N_("Pattern break"), /* D */ - NULL, /* E */ - N_("Set tempo/bpm"), /* F */ - N_("Set global volume"), /* G */ - N_("Global volume slide"), /* H */ - NULL, /* I */ - NULL, /* J */ - N_("Key off"), /* K */ - N_("Set envelop position"), /* L */ - NULL, /* M */ - NULL, /* N */ - NULL, /* O */ - N_("Panning slide"), /* P */ - N_("LP filter resonance"), /* Q */ - N_("Multi retrig note"), /* R */ - NULL, /* S */ - N_("Tremor"), /* T */ - NULL, /* U */ - NULL, /* V */ - NULL, /* W */ - NULL, /* X */ - NULL, /* Y */ - N_("LP filter cutoff"), /* Z */ + Tracker* t = tracker; + XMNote* note = &t->curpattern->channels[t->cursor_ch][t->patpos]; + const gchar *line = NULL; + gint cmd_p1, cmd_p2, pos; + + static const gchar* fx_commands[] = { + N_("Arpeggio"), /* 0 */ + N_("Porta up"), /* 1 */ + N_("Porta down"), /* 2 */ + N_("Tone porta"), /* 3 */ + N_("Vibrato"), /* 4 */ + N_("Tone porta + Volume slide"), /* 5 */ + N_("Vibrato + Volume slide"), /* 6 */ + N_("Tremolo"), /* 7 */ + N_("Set panning"), /* 8 */ + N_("Sample offset"), /* 9 */ + N_("Set volume"), /* A */ + N_("Position jump"), /* B */ + N_("Set volume"), /* C */ + N_("Pattern break"), /* D */ + NULL, /* E */ + N_("Set tempo/bpm"), /* F */ + N_("Set global volume"), /* G */ + N_("Global volume slide"), /* H */ + NULL, /* I */ + NULL, /* J */ + N_("Key off"), /* K */ + N_("Set envelop position"), /* L */ + NULL, /* M */ + NULL, /* N */ + NULL, /* O */ + N_("Panning slide"), /* P */ + N_("LP filter resonance"), /* Q */ + N_("Multi retrig note"), /* R */ + NULL, /* S */ + N_("Tremor"), /* T */ + NULL, /* U */ + NULL, /* V */ + NULL, /* W */ + NULL, /* X */ + NULL, /* Y */ + N_("LP filter cutoff"), /* Z */ }; - static const gchar *e_fx_commands[]={ - NULL, /* 0 */ - N_("Fine porta up"), /* 1 */ - N_("Fine porta down"), /* 2 */ - N_("Set gliss control"), /* 3 */ - N_("Set vibrato control"), /* 4 */ - N_("Set finetune"), /* 5 */ - N_("Set loop begin/loop"), /* 6 */ - N_("Set tremolo control"), /* 7 */ - NULL, /* 8 */ - N_("Retrig note"), /* 9 */ - N_("Fine volume slide up"), /* A */ - N_("Fine volume slide down"), /* B */ - N_("Note cut"), /* C */ - N_("Note delay"), /* D */ - N_("Pattern delay"), /* E */ - NULL, /* F */ + static const gchar* e_fx_commands[] = { + NULL, /* 0 */ + N_("Fine porta up"), /* 1 */ + N_("Fine porta down"), /* 2 */ + N_("Set gliss control"), /* 3 */ + N_("Set vibrato control"), /* 4 */ + N_("Set finetune"), /* 5 */ + N_("Pattern loop"), /* 6 */ + N_("Set tremolo control"), /* 7 */ + NULL, /* 8 */ + N_("Retrig note"), /* 9 */ + N_("Fine volume slide up"), /* A */ + N_("Fine volume slide down"), /* B */ + N_("Note cut"), /* C */ + N_("Note delay"), /* D */ + N_("Pattern delay"), /* E */ + NULL, /* F */ }; - static const gchar *vol_fx_commands[]={ + static const gchar* vol_fx_commands[] = { N_("Volume slide down"), N_("Volume slide up"), N_("Fine volume slide down"), @@ -180,173 +198,373 @@ N_("Tone porta"), }; - static const gchar *e47_fx_forms[]={ - N_("sine"), /* 0 */ - N_("ramp down"), /* 1 */ - N_("square"), /* 2 */ + static const gchar* e47_fx_forms[] = { + N_("sine"), /* 0 */ + N_("ramp down"), /* 1 */ + N_("square"), /* 2 */ }; - sprintf(track_editor_editmode_status_ed_buf, "[Chnn: %02d] [Pos: %03d] [Instr: %03d] ", t->cursor_ch+1, - t->patpos, - note->instrument); - - strcat(track_editor_editmode_status_ed_buf, "[Vol: "); - - switch(note->volume&0xf0) - { - case 0: - strcat(track_editor_editmode_status_ed_buf, _("None")); - break; - case 0x10: case 0x20: case 0x30: case 0x40: case 0x50: - strcat(track_editor_editmode_status_ed_buf, _("Set volume")); - break; - default: - if(note->volume>0xf) { - sprintf(tmp_buf,"%s", _(vol_fx_commands[((note->volume&0xf0)-0x60)>>4])); - strcat(track_editor_editmode_status_ed_buf, tmp_buf); - } else - strcat(track_editor_editmode_status_ed_buf, _("None")); - break; - } + pos = PRINT_STATUS(0, _("[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: "), t->cursor_ch + 1, + t->patpos, + note->instrument); + + if (note->volume >= 0x10 && note->volume <= 0x50) + pos += PRINT_STATUS(pos, _("Set volume")); + else if (note->volume >= 0x60) + pos += PRINT_STATUS(pos, "%s", _(vol_fx_commands[((note->volume & 0xf0) - 0x60) >> 4])); + else + pos += PRINT_STATUS(pos, _("None")); - if(note->volume&0xf0) { - if(note->volume>=0x10 && note->volume<=0x50) - sprintf(tmp_buf, " => %02d ] ", note->volume-0x10); - else - sprintf(tmp_buf, " => %02d ] ", note->volume&0xf); - } else - sprintf(tmp_buf, " ] "); - strcat(track_editor_editmode_status_ed_buf, tmp_buf); - - memset(tmp_buf, 0, strlen(tmp_buf)); - strcat(track_editor_editmode_status_ed_buf, "[Cmd: "); - - /* enum values maybe for fx numbers ? */ - switch(note->fxtype) - { - case 0: - if(note->fxparam) - sprintf(tmp_buf, "%s", _(fx_commands[note->fxtype])); - else - sprintf(tmp_buf, _("None ]")); + if (note->volume & 0xf0) + pos += PRINT_STATUS(pos, " => %02d ] ", + (note->volume >= 0x10 && note->volume <= 0x50) ? note->volume - 0x10 : note->volume & 0xf); + else + pos += PRINT_STATUS(pos, " ] "); + + pos += PRINT_STATUS(pos, _("[Cmd: ")); + + switch (note->fxtype) { + case xmpCmdArpeggio: + if (note->fxparam) + line = fx_commands[note->fxtype]; break; - case 14: - switch((note->fxparam&0xf0)>>4) - { - case 0: case 8: case 15: - sprintf(tmp_buf, _("None ]")); + case xmpCmdExtended: + switch ((note->fxparam & 0xf0) >> 4) { + case 0: + case 8: + case 15: break; default: - sprintf(tmp_buf, "%s", _(e_fx_commands[(note->fxparam&0xf0)>>4])); + line = e_fx_commands[(note->fxparam & 0xf0) >> 4]; break; } break; - case 33: - switch((note->fxparam&0xf0)>>4) - { + case xmpCmdXPorta: + switch ((note->fxparam & 0xf0) >> 4) { case 1: - sprintf(tmp_buf, "Extra fine porta up"); + line = N_("Extra fine porta up"); break; case 2: - sprintf(tmp_buf, "Extra fine porta down"); + line = N_("Extra fine porta down"); break; default: - sprintf(tmp_buf, _("None ]")); break; } break; - case 18: case 19: case 22: case 23: case 24: - case 28: case 30: case 31: case 32: case 34: - sprintf(tmp_buf, _("None ]")); - break; - default: - sprintf(tmp_buf, "%s", _(fx_commands[note->fxtype])); + line = fx_commands[note->fxtype]; break; } - strcat(track_editor_editmode_status_ed_buf, tmp_buf); - - memset(tmp_buf, 0, strlen(tmp_buf)); + pos += PRINT_STATUS(pos, line ? _(line) : _("None ]")); - cmd_p1 = (note->fxparam&0xf0)>>4; - cmd_p2 = note->fxparam&0xf; + cmd_p1 = (note->fxparam & 0xf0) >> 4; + cmd_p2 = note->fxparam & 0xf; - /* enum values maybe for fx numbers ? */ - switch(note->fxtype) - { - case 0: - if(note->fxparam) - sprintf(tmp_buf, " => %02d %02d ]", cmd_p1, cmd_p2); - break; - case 4: case 7: case 10: case 17: case 25: case 27: case 29: - sprintf(tmp_buf, " => %02d %02d ]", cmd_p1, cmd_p2); - break; - case 1: case 2: case 3: case 5: case 6: case 8: case 9: - case 11: case 12: case 13: case 15: case 16: case 21: case 26: case 35: - - if(note->fxtype==15) - if (note->fxparam<32) - sprintf(tmp_buf, " => tempo: %02d ]", note->fxparam); - else - sprintf(tmp_buf, " => BPM: %03d ]", note->fxparam); - else if(note->fxtype==9) - sprintf(tmp_buf, " => offset: %d ]", note->fxparam<<8); - else - sprintf(tmp_buf, " => %03d ]", note->fxparam); + if (line) { + switch (n_params[note->fxtype] & 3) { + case 1: + case 3: + switch (note->fxtype) { + case xmpCmdSpeed: + if (note->fxparam < 32) + PRINT_STATUS(pos, _(" => tempo: %02d ]"), note->fxparam); + else + PRINT_STATUS(pos, _(" => BPM: %03d ]"), note->fxparam); + break; + case xmpCmdOffset: + PRINT_STATUS(pos, _(" => offset: %d ]"), note->fxparam << 8); + break; + case xmpCmdExtended: + if ((cmd_p1 == 4 || cmd_p1 == 7) && (cmd_p2 < 7) && cmd_p2 != 3) + /* Vibrato / tremolo control */ + PRINT_STATUS(pos, " => %02d (%s)%s ]", cmd_p2, _(e47_fx_forms[cmd_p2 & 3]), + cmd_p2 & 4 ? _(", continuous mode") : ""); + else if (cmd_p1 == 6) { + /* Pattern loop */ + if (cmd_p2 == 0) + PRINT_STATUS(pos, _(" begin ]")); + else + PRINT_STATUS(pos, _(" %02d times ]"), cmd_p2); + } else + PRINT_STATUS(pos, " => %02d ]", cmd_p2); + break; + default: + PRINT_STATUS(pos, " => %03d ]", note->fxparam); + } - break; - case 14: - if(cmd_p1!=0 && cmd_p1!=8 && cmd_p1!=15) { - if((cmd_p1==4 || cmd_p1==7) && (cmd_p2<3)) - sprintf(tmp_buf, " => %02d (%s) ]", cmd_p2, e47_fx_forms[cmd_p2]); - else - sprintf(tmp_buf, " => %02d ]", cmd_p2); + break; + case 2: + if (note->fxtype != xmpCmdArpeggio || note->fxparam) /* TODO detailed explanation of arpeggio */ + PRINT_STATUS(pos, " => %02d %02d ]", cmd_p1, cmd_p2); + break; + default: + PRINT_STATUS(pos, "]"); + break; } - break; - case 33: - if (cmd_p1==1 || cmd_p1==2) - sprintf(tmp_buf, " => %02d ]", cmd_p2); - break; - default: - sprintf(tmp_buf, "]"); - break; } - strcat(track_editor_editmode_status_ed_buf, tmp_buf); - if(!track_editor_editmode_status_idle_handler) { - track_editor_editmode_status_idle_handler = gtk_idle_add( - (GtkFunction)track_editor_editmode_status_idle_function, - NULL); - g_assert(track_editor_editmode_status_idle_handler != 0); + if (!track_editor_editmode_status_idle_handler) { + track_editor_editmode_status_idle_handler = g_idle_add( + (GSourceFunc)track_editor_editmode_status_idle_function, + NULL); + g_assert(track_editor_editmode_status_idle_handler != 0); } } -void -track_editor_set_num_channels (int n) +void track_editor_set_patpos(gint row) +{ + gtk_adjustment_set_value(adj, row); +} + +void track_editor_set_num_channels(int n) { int i; tracker_set_num_channels(tracker, n); // Remove superfluous togglebuttons from table - for(i = n; i < jazz_numshown; i++) { - gtk_object_ref(GTK_OBJECT(jazztoggles[i])); - gtk_container_remove(GTK_CONTAINER(jazztable), GTK_WIDGET(jazztoggles[i])); + for (i = n; i < jazz_numshown; i++) { + g_object_ref(G_OBJECT(jazztoggles[i])); + gtk_container_remove(GTK_CONTAINER(jazztable), GTK_WIDGET(jazztoggles[i])); } // Resize table gtk_table_resize(GTK_TABLE(jazztable), 1, n); // Add new togglebuttons to table - for(i = jazz_numshown; i < n; i++) { - gtk_table_attach_defaults(GTK_TABLE(jazztable), GTK_WIDGET(jazztoggles[i]), i, i + 1, 0, 1); + for (i = jazz_numshown; i < n; i++) { + gtk_table_attach_defaults(GTK_TABLE(jazztable), GTK_WIDGET(jazztoggles[i]), i, i + 1, 0, 1); } jazz_numshown = n; } +static void +set_vscrollbar(Tracker* t, + int patpos, + GtkAdjustment* adj) +{ + g_signal_handler_block(vscrollbar, vscroll_tag); + gtk_adjustment_set_value(adj, patpos); + g_signal_handler_unblock(vscrollbar, vscroll_tag); +} + +static void +update_vscrollbar(Tracker* t, + int patpos, + int patlen, + int disprows, + GtkAdjustment* adj) +{ + g_signal_handler_block(vscrollbar, vscroll_tag); + gtk_adjustment_configure(adj, patpos, 0, patlen + disprows - 1, 1, disprows, disprows); + g_signal_handler_unblock(vscrollbar, vscroll_tag); +} + +static void +set_hscrollbar(Tracker* t, + int leftchan, + GtkAdjustment* adj) +{ + g_signal_handler_block(hscrollbar, hscroll_tag); + gtk_adjustment_set_value(adj, leftchan); + g_signal_handler_unblock(hscrollbar, hscroll_tag); +} + +static void +update_hscrollbar(Tracker* t, + int leftchan, + int numchans, + int dispchans, + GtkAdjustment* adj) +{ + g_signal_handler_block(hscrollbar, hscroll_tag); + gtk_adjustment_configure(adj, leftchan, 0, numchans, 1, dispchans, dispchans);//or numchans - 1??? + g_signal_handler_unblock(hscrollbar, hscroll_tag); +} + +struct NoteArg { + gint channel, row; + XMNote note; +}; + +static void +note_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + XMNote tmp_value; + Tracker* t; + struct NoteArg* na = arg; + + g_assert(IS_TRACKER(data)); + t = TRACKER(data); + tmp_value = t->curpattern->channels[na->channel][na->row]; + t->curpattern->channels[na->channel][na->row] = na->note; + na->note = tmp_value; + + tracker_set_cursor_channel(t, na->channel); + track_editor_set_patpos(na->row); +} + void -tracker_page_create (GtkNotebook *nb) +track_editor_log_note(Tracker* t, + const gchar* title, + const gint pattern, const gint channel, const gint row, + const gint flags) +{ + struct NoteArg* arg = g_new(struct NoteArg, 1); + + arg->channel = channel; + arg->row = row; + arg->note = (pattern == -1 ? t->curpattern : &xm->patterns[pattern])->channels[channel][row]; + history_log_action(HISTORY_ACTION_POINTER, _(title), flags | HISTORY_FLAG_LOG_POS | + (pattern == -1 ? HISTORY_FLAG_LOG_PAT : HISTORY_SET_PAT(pattern)), note_undo, + t, sizeof(struct NoteArg), arg); +} + +typedef struct +{ + gint width, length, channel, pos; + /* Manual 2D indexing is supposed if needed */ + XMNote notes[1]; +} BlockArg; + +static void track_editor_block_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + Tracker* t; + BlockArg* ba = arg; + const gsize chansize = ba->length * sizeof(XMNote); + const gsize size = ba->width * chansize; + XMNote* tmp_notes = g_malloc(size); + gint i, chaddr; + + g_assert(IS_TRACKER(data)); + t = TRACKER(data); + + /* Current pattern is already set by undo routines */ + for (i = 0, chaddr = 0; i < ba->width; i++, chaddr += ba->length) { + memcpy(&tmp_notes[chaddr], + &t->curpattern->channels[ba->channel + i][ba->pos], chansize); + memcpy(&t->curpattern->channels[ba->channel + i][ba->pos], + &ba->notes[chaddr], chansize); + } + memcpy(ba->notes, tmp_notes, size); + + g_free(tmp_notes); + tracker_redraw(t); +} + +void track_editor_log_block(Tracker* t, const gchar* title, + const gint channel, const gint pos, const gint width, const gint length) +{ + const gsize chansize = length * sizeof(XMNote); + const gsize asize = sizeof(BlockArg) + sizeof(XMNote) * (length * width - 1); + gint i, chaddr; + /* We already have 1 XMNote allocated */ + BlockArg* arg = g_malloc(asize); + + arg->width = width; + arg->length = length; + arg->channel = channel; + arg->pos = pos; + for (i = 0, chaddr = 0; i < width; i++, chaddr += length) + memcpy(&arg->notes[chaddr], &t->curpattern->channels[channel + i][pos], chansize); + + history_log_action(HISTORY_ACTION_POINTER, _(title), + HISTORY_FLAG_LOG_POS | HISTORY_FLAG_LOG_PAT | HISTORY_FLAG_LOG_PAGE, + track_editor_block_undo, t, asize, arg); +} + +static void +track_editor_parameter_scroll(Tracker* t, + gint cur_ch, + gint cur_item, + gint patpos, + gint direction) +{ + + if (GUI_EDITING) { + guint8 vol, n_p, fxtype; + gint fxparam, fxparam1; + gboolean redraw = FALSE; + XMNote* note_entry = &t->curpattern->channels[cur_ch][patpos]; + + vol = note_entry->volume; + fxparam = note_entry->fxparam; + + switch (cur_item) { + case 3: /* Volume column */ + case 4: + if (!vol) { /* No volume specified => take it from sample basic value */ + gint ins = note_entry->instrument; + + if (ins) + vol = xm->instruments[ins - 1].samples[xm->instruments[ins - 1].samplemap[note_entry->note]].volume + 0x10; + } + if (vol >= 0x10 && vol <= 0x50) { + vol = CLAMP(vol + direction, 0x10, 0x50); + redraw = TRUE; + } else if (vol >= 0x60) { + gint8 nibble = vol & 0xf; + + nibble = CLAMP(nibble + direction, 0, 0xf); + vol = (vol & 0xf0) | nibble; + redraw = TRUE; + } + break; + case 5 ... 7: + fxtype = note_entry->fxtype; + if ((fxtype || fxparam != 0) && fxtype < 36) { /* Valid XMs, non-empty effect */ + n_p = n_params[fxtype]; + + switch (n_p & 3) { + case 1: + fxparam = CLAMP(fxparam + direction, 0, (n_p & NG_0x40) ? 0x40 : 0xff); + redraw = TRUE; + break; + case 3: + fxparam1 = fxparam & 0xf0; + fxparam = CLAMP((fxparam & 0xf) + direction, 0, 0xf) | fxparam1; + redraw = TRUE; + break; + case 2: + fxparam1 = fxparam & 0xf0; + fxparam = fxparam & 0xf; + if (cur_item == 7) + fxparam = CLAMP(fxparam + direction, 0, 0xf); + else + fxparam1 = CLAMP(fxparam1 + direction * 16, 0, 0xf0); + fxparam |= fxparam1; + redraw = TRUE; + break; + default: + break; + } + } + break; + default: + break; + } + if (redraw) { + static gpointer prev_pattern = NULL; + static gint prev_ch = -1, prev_patpos = -1; + + if (t->curpattern != prev_pattern || prev_ch != cur_ch || prev_patpos != patpos) { + prev_pattern = t->curpattern; + prev_ch = cur_ch; + prev_patpos = patpos; + track_editor_log_note(t, N_("Volume / FX parameter scrolling"), + -1, cur_ch, patpos, HISTORY_FLAG_LOG_PAGE); + } + note_entry->volume = vol; + note_entry->fxparam = fxparam; + tracker_redraw_row(t, patpos); + } + } +} + +void tracker_page_create(GtkNotebook* nb) { GtkWidget *vbox, *hbox, *table, *thing; int i; @@ -365,12 +583,12 @@ gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 0); gtk_widget_show(table); - for(i = 0; i < 32; i++) { - char buf[10]; - sprintf(buf, "%02d", i+1); - thing = gtk_toggle_button_new_with_label(buf); - jazztoggles[i] = GTK_TOGGLE_BUTTON(thing); - gtk_widget_show(thing); + for (i = 0; i < 32; i++) { + char buf[10]; + g_sprintf(buf, "%02d", i + 1); + thing = gtk_toggle_button_new_with_label(buf); + jazztoggles[i] = GTK_TOGGLE_BUTTON(thing); + gtk_widget_show(thing); } table = gtk_table_new(2, 2, FALSE); @@ -380,9 +598,8 @@ thing = tracker_new(); gtk_table_attach_defaults(GTK_TABLE(table), thing, 0, 1, 0, 1); gtk_widget_show(thing); - gtk_signal_connect(GTK_OBJECT(thing), "patpos", GTK_SIGNAL_FUNC(update_vscrollbar), NULL); - gtk_signal_connect(GTK_OBJECT(thing), "xpanning", GTK_SIGNAL_FUNC(update_hscrollbar), NULL); - gtk_signal_connect(GTK_OBJECT(thing), "mainmenu_blockmark_set", GTK_SIGNAL_FUNC(update_mainmenu_blockmark), NULL); + g_signal_connect(thing, "mainmenu_blockmark_set", G_CALLBACK(update_mainmenu_blockmark), NULL); + g_signal_connect(thing, "alt_scroll", G_CALLBACK(track_editor_parameter_scroll), NULL); tracker = TRACKER(thing); tracker_set_update_freq(gui_settings.tracker_update_freq); @@ -391,114 +608,60 @@ trackersettings_set_tracker_widget(TRACKERSETTINGS(trackersettings), tracker); hscrollbar = gtk_hscrollbar_new(NULL); + adj = gtk_range_get_adjustment(GTK_RANGE(hscrollbar)); gtk_table_attach(GTK_TABLE(table), hscrollbar, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); gtk_widget_show(hscrollbar); + g_signal_connect(thing, "xpanning", G_CALLBACK(set_hscrollbar), adj); + g_signal_connect(thing, "xconf", G_CALLBACK(update_hscrollbar), adj); + hscroll_tag = g_signal_connect_swapped(hscrollbar, "value-changed", + G_CALLBACK(hscrollbar_changed), adj); vscrollbar = gtk_vscrollbar_new(NULL); + adj = gtk_range_get_adjustment(GTK_RANGE(vscrollbar)); gtk_table_attach(GTK_TABLE(table), vscrollbar, 1, 2, 0, 1, 0, GTK_FILL, 0, 0); gtk_widget_show(vscrollbar); - - for(i = 0; i < sizeof(note_running) / sizeof(note_running[0]); i++) { - note_running[i] = -1; - } + g_signal_connect(thing, "patpos", G_CALLBACK(set_vscrollbar), adj); + g_signal_connect(thing, "yconf", G_CALLBACK(update_vscrollbar), adj); + vscroll_tag = g_signal_connect_swapped(vscrollbar, "value-changed", + G_CALLBACK(vscrollbar_changed), adj); gtk_notebook_append_page(nb, vbox, gtk_label_new(_("Tracker"))); - gtk_container_border_width(GTK_CONTAINER(vbox), 10); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); memset(&block_buffer, 0, sizeof(block_buffer)); + trackersettings_apply_font(TRACKERSETTINGS(trackersettings)); -#ifdef USE_GNOME - /* Create popup menu */ - thing = gnome_popup_menu_new(track_editor_popup_menu); - gnome_popup_menu_attach(thing, &tracker->widget, (gpointer)thing); -#endif -} - -static void -update_vscrollbar (Tracker *t, - int patpos, - int patlen, - int disprows) -{ - gui_update_range_adjustment(GTK_RANGE(vscrollbar), patpos, patlen + disprows - 1, - disprows, vscrollbar_changed); + thing = gui_get_widget(gui_builder, "track_editor_popup_menu", XML_FILE); + gui_popup_menu_attach(thing, &tracker->widget, NULL); } static void -update_hscrollbar (Tracker *t, - int leftchan, - int numchans, - int dispchans) +update_mainmenu_blockmark(Tracker* t, + int state) { - gui_update_range_adjustment(GTK_RANGE(hscrollbar), leftchan, numchans, - dispchans, hscrollbar_changed); + menubar_block_mode_set((gboolean)state, TRUE); } static void -update_mainmenu_blockmark (Tracker *t, - int state) +vscrollbar_changed(GtkAdjustment* adj) { - menubar_block_mode_set((gboolean)state); -} - -static void -vscrollbar_changed (GtkAdjustment *adj) -{ - if(ASYNCEDIT || (gui_playing_mode != PLAYING_SONG && gui_playing_mode != PLAYING_PATTERN)) { - gtk_signal_handler_block_by_func(GTK_OBJECT(tracker), GTK_SIGNAL_FUNC(update_vscrollbar), NULL); - tracker_set_patpos(TRACKER(tracker), adj->value); - gtk_signal_handler_unblock_by_func(GTK_OBJECT(tracker), GTK_SIGNAL_FUNC(update_vscrollbar), NULL); - } + tracker_set_patpos(TRACKER(tracker), rint(gtk_adjustment_get_value(adj))); } static void -hscrollbar_changed (GtkAdjustment *adj) -{ - tracker_set_xpanning(TRACKER(tracker), adj->value); -} - -void -track_editor_toggle_jazz_edit (void) -{ - if(!jazz_enabled) { - gtk_widget_show(jazzbox); - jazz_enabled = TRUE; - } else { - gtk_widget_hide(jazzbox); - jazz_enabled = FALSE; - } -} - -void -track_editor_toggle_insert_noteoff (void) +hscrollbar_changed(GtkAdjustment* adj) { - if(!insert_noteoff) - insert_noteoff = TRUE; - else - insert_noteoff = FALSE; + tracker_set_xpanning(TRACKER(tracker), rint(gtk_adjustment_get_value(adj))); } - - -static gboolean -track_editor_is_channel_playing (int ch) +void track_editor_toggle_jazz_edit(GtkCheckMenuItem* b) { - /* Is there a note playing on channel `ch'? Used for jazz edit. */ - - int i; - - for(i = 0; i < sizeof(note_running) / sizeof(note_running[0]); i++) { - if(note_running[i] == ch) { - return TRUE; - } - } - - return FALSE; + jazz_enabled = gtk_check_menu_item_get_active(b); + (jazz_enabled ? gtk_widget_show : gtk_widget_hide)(jazzbox); } static int -track_editor_find_next_jazz_channel (int current_channel, - int note) +track_editor_find_next_jazz_channel(int current_channel) { /* Jazz Edit Mode. The user has selected some channels that we can use. Go to the next one where no sample is currently @@ -506,314 +669,534 @@ int j, n; - for(j = 0, n = (current_channel + 1) % xm->num_channels; - j < xm->num_channels - 1; - j++, n = (n+1) % xm->num_channels) { - if(jazztoggles[n]->active && !track_editor_is_channel_playing(n)) { - return n; - } + for (j = 0, n = (current_channel + 1) % xm->num_channels; + j < xm->num_channels - 1; + j++, n = (n + 1) % xm->num_channels) { + if (jazztoggles[n]->active && note_running[n] < 0) { + return n; + } } return current_channel; } -void -track_editor_do_the_note_key (int notekeymeaning, - gboolean pressed, - guint32 xkeysym, - int modifiers) +/* Returns the channel number on which the specified note is running, + or -1 if no such note is found. If was == TRUE, look for the channel + when the note was running */ +static gint +note_is_running(const guint note, const gboolean was) { - static int playchan = 0; + guint i; + for (i = 0; i < ARRAY_SIZE(note_running); i++) + if (was) { + if (note_running[i] == -(note + 1)) + return i; + } else { + if (note_running[i] == note + 1) + return i; + } - int j, n; + return -1; +} + +gboolean track_editor_do_the_note_key(int notekeymeaning, + gboolean pressed, + guint32 xkeysym, + int modifiers, + gboolean always_poly) +{ + static int playchan = 0, trychan = 0; + + int n; int note; note = notekeymeaning + 12 * gui_get_current_octave_value() + 1; - if(!(note >= 0 && note < 96)) - return; + if (!(note >= 0 && note < NUM_NOTES)) + return FALSE; - if(pressed) { - if(note_running[note] == -1) { - if(jazz_enabled) { - if(GTK_TOGGLE_BUTTON(editing_toggle)->active) { - gui_play_note(tracker->cursor_ch, note); - note_running[note] = tracker->cursor_ch; - n = track_editor_find_next_jazz_channel(tracker->cursor_ch, note); - tracker_step_cursor_channel(tracker, n - tracker->cursor_ch); - } else { - playchan = track_editor_find_next_jazz_channel(playchan, note); - gui_play_note(playchan, note); - note_running[note] = playchan; - } - } else { - gui_play_note(tracker->cursor_ch, note); - note_running[note] = tracker->cursor_ch; - } - } + if (pressed) { + if (note_is_running(note, FALSE) == -1) { + if (gui_settings.try_polyphony && + (always_poly || (!GTK_TOGGLE_BUTTON(editing_toggle)->active)) && + gui_playing_mode != PLAYING_SONG && + gui_playing_mode != PLAYING_PATTERN) { + gint cur_chan = -1, playchan; + + if (!gui_settings.repeat_same_note) + cur_chan = note_is_running(note, TRUE); + gui_play_note(playchan = cur_chan == -1 ? trychan : cur_chan, note, TRUE); + note_running[playchan] = note + 1; + /* All 32 channels are using for trying independent on + actual number of channels used */ + if (cur_chan == -1) + trychan = (trychan + 1) & 31; + } else { + if (jazz_enabled) { + if (GTK_TOGGLE_BUTTON(editing_toggle)->active) { + gui_play_note(tracker->cursor_ch, note, FALSE); + note_running[tracker->cursor_ch] = note + 1; + n = track_editor_find_next_jazz_channel(tracker->cursor_ch); + tracker_step_cursor_channel(tracker, n - tracker->cursor_ch); + } else { + playchan = track_editor_find_next_jazz_channel(playchan); + gui_play_note(playchan, note, FALSE); + note_running[playchan] = note + 1; + } + } else { + gui_play_note(tracker->cursor_ch, note, FALSE); + note_running[tracker->cursor_ch] = note + 1; + } + } + return TRUE; /* New note */ + } + return FALSE; /* Key repeate from keyboard */ } else { - if(note_running[note] != -1) { - if(keys_is_key_pressed(xkeysym, modifiers)) { - /* this is just an auto-repeat fake keyoff. pooh. - in reality this key is still being held down */ - return; - } - for(j = 0, n = 0; j < sizeof(note_running) / sizeof(note_running[0]); j++) { - n += (note_running[j] == note_running[note]); - } - if(n == 1) { - // only do the keyoff if all previous keys are off. - gui_play_note_keyoff(note_running[note]); - } - note_running[note] = -1; - } + gint pc; + + if ((pc = note_is_running(note, FALSE)) != -1) { + if (keys_is_key_pressed(xkeysym, modifiers)) { + /* this is just an auto-repeat fake keyoff. pooh. + in reality this key is still being held down */ + return FALSE; + } + gui_play_note_keyoff(pc); + } + note_running[pc] = -(note + 1); + return TRUE; } } -gboolean -track_editor_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval, - gboolean pressed) +#define EDITING_PATTERN (gui_playing_mode == PLAYING_PATTERN ? \ + tracker->curpattern : &xm->patterns[xm->pattern_order_table[action_pat]]) + +static void +track_editor_put_note(guint ch, guint nn, guint instr) { - static int current_channel = -1; + gdouble press_time = current_driver->get_play_time(current_driver_object) - gui_settings.delay_comp; + gint8 action_tick = cur_tick; + gint action_pos = cur_pos; + gint action_pat = cur_pat; + XMNote *note, newnote; + + if (gui_settings.precise_timing) { + /* This solution is not perfect since it can calculate only +- 1 tick shift. + At high BPM this may be not true. But thorough calculations are much more difficult. + Sorry... */ + if (press_time > (nexttime + curtime) * 0.5) { + if (++action_tick >= cur_tempo) { + /* Roll over the pattern line boundary */ + action_tick = 0; + action_pos++; + } + } else if (prevtime > 0.0 && press_time < (curtime + prevtime) * 0.5) { + if (--action_tick < 0) { + /* Roll over the pattern line boundary */ + if (prev_tempo == 0) + prev_tempo = cur_tempo; + action_tick = prev_tempo - 1; + action_pos--; + } + } + } else { + action_tick = 0; + /* The key is pressed later than the half of the line -- moving it to the next line */ + if (press_time > + curtime + (nexttime - curtime) * ((gdouble)cur_tempo * 0.5 - (gdouble)cur_tick)) + action_pos++; + } + + /* Roll over the pattern boundary */ + if (action_pos < 0) { + if (--action_pat < 0) + /* Roll over the song boundary */ + action_pat = xm->song_length - 1; + action_pos = EDITING_PATTERN->length - 1; + } + if (action_pos >= EDITING_PATTERN->length) { + if (++action_pat >= xm->song_length) + /* Roll over the song boundary */ + action_pat = 0; + action_pos = 0; + } + + note = &EDITING_PATTERN->channels[ch][action_pos]; + newnote = *note; + if (action_tick == 0) { + newnote.note = nn; + newnote.instrument = instr; + } else { + if (nn == XM_PATTERN_NOTE_OFF) { + /* Key release */ + if (note->fxtype == 0 && note->fxparam == 0) { + /* Effect field is free; we can use 'k' effect */ + newnote.fxtype = xmpCmdKeyOff; + newnote.fxparam = action_tick; + } else { + /* Effect field is occupied; we can nothing to do else than just put key off + at the next line. Regard the possible rollovers. */ + if (++action_pos >= xm->patterns[xm->pattern_order_table[action_pat]].length) { + if (++action_pat >= xm->song_length) + /* Roll over the song boundary */ + action_pat = 0; + action_pos = 0; + } + note = &xm->patterns[xm->pattern_order_table[action_pat]].channels[ch][action_pos]; + newnote = *note; + newnote.note = nn; + newnote.instrument = instr; + } + } else { + /* We use 'ed' effect to record a note at the proper tick */ + newnote.note = nn; + newnote.instrument = instr; + newnote.fxtype = xmpCmdExtended; + newnote.fxparam = XMP_CMD_EXTENDED(xmpCmdDelayNote, action_tick); + } + } + + track_editor_log_note(tracker, N_("Note input"), xm->pattern_order_table[action_pat], + ch, action_pos, HISTORY_FLAG_LOG_PAGE); + *note = newnote; + if (action_pat == cur_pat) + /* Redrawing is needed only if note is recorded in the current pattern */ + tracker_redraw_row(tracker, action_pos); +} +gboolean +track_editor_handle_keys(const int shift, + const int ctrl, + const int alt, + const guint32 keyval, + const gboolean pressed) +{ int c, i, m, tip; - Tracker *t = tracker; + Tracker* t = tracker; gboolean handled = FALSE; - - m = i = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); + gboolean in_sel = tracker_is_in_selection_mode(t); + const gboolean sel_ft2 = gui_settings.selection_mode == SELECTION_FT2 || + gui_settings.selection_mode == SELECTION_MIXED; + + m = i = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt), -1); tip = KEYS_MEANING_TYPE(i); - if(t->cursor_item == 0 && tip <= KEYS_MEANING_KEYOFF) { - if(i != -1) { - switch(tip) { - case KEYS_MEANING_NOTE: - i += 12 * gui_get_current_octave_value() + 1; - if(i < 96) { - - if(!GTK_TOGGLE_BUTTON(editing_toggle)->active) - goto fin_note; - - if(!jazztoggles[tracker->cursor_ch]->active && jazz_enabled) { - int n = track_editor_find_next_jazz_channel(tracker->cursor_ch, m + 12 * - gui_get_current_octave_value() + 1); - tracker_step_cursor_channel(tracker, n - tracker->cursor_ch); - } - - if(!GUI_ENABLED && !ASYNCEDIT) { // Recording mode - if(pressed){ // Insert note - - for(c = 0; c < 32; c++){ // Cleanup - if(!reckey[c].act) - continue; - if(reckey[c].key == keyval) - goto fin_note; // Key is allready down - else if(reckey[c].chn == t->cursor_ch) - reckey[c].act = 0; // There can be only one sound per channel + if (i != -1) { + if (tip == KEYS_MEANING_NOTE && !GTK_TOGGLE_BUTTON(editing_toggle)->active) + track_editor_do_the_note_key(m, pressed, keyval, ENCODE_MODIFIERS(shift, ctrl, alt), FALSE); + + if (t->cursor_item == 0) { + if (tip == KEYS_MEANING_NOTE) { + i += 12 * gui_get_current_octave_value() + 1; + + if (GTK_TOGGLE_BUTTON(editing_toggle)->active) { + if (i < NUM_NOTES) { + if (t->cursor_item == 0) { + if (!jazztoggles[tracker->cursor_ch]->active && jazz_enabled) { + int n = track_editor_find_next_jazz_channel(tracker->cursor_ch); + tracker_step_cursor_channel(tracker, n - tracker->cursor_ch); + } + + if (!GUI_ENABLED && !ASYNCEDIT) { // Recording mode + if (pressed) { // Insert note + + for (c = 0; c < 32; c++) { // Cleanup + if (!reckey[c].act) + continue; + if (reckey[c].key == keyval) + break; // Key is allready down + else if (reckey[c].chn == t->cursor_ch) + reckey[c].act = 0; // There can be only one sound per channel + } + + if (c == 32) { + // Find free reckey + for (c = 0; c < 32; c++) + if (!reckey[c].act) + break; + + // Fill in the reckey + reckey[c].key = keyval; + reckey[c].chn = t->cursor_ch; + reckey[c].act = TRUE; + track_editor_put_note(t->cursor_ch, i, gui_get_current_instrument()); + } + } else if (!keys_is_key_pressed(keyval, + ENCODE_MODIFIERS(shift, ctrl, alt))) { // Release key + + // Find right reckey + for (c = 0; c < 32; c++) + if (reckey[c].act && reckey[c].key == keyval) + break; + if (c < 32) { /* Check if the key was not released by other means */ + reckey[c].act = FALSE; + + if (gui_settings.insert_noteoff) + track_editor_put_note(reckey[c].chn, XM_PATTERN_NOTE_OFF, 0); + } + } + } else if (pressed) { + gint jump = gui_get_current_jump_value(); + XMNote* note = &t->curpattern->channels[t->cursor_ch][t->patpos]; + + track_editor_log_note(t, N_("Note input"), + -1, t->cursor_ch, t->patpos, HISTORY_FLAG_LOG_PAGE); + note->note = i; + note->instrument = gui_get_current_instrument(); + if (jump) + tracker_step_cursor_row(t, jump); + else + tracker_redraw_current_row(t); } - - // Find free reckey - for(c = 0; c < 32; c++) - if(!reckey[c].act) - break; - - // Fill in the reckey - reckey[c].key = keyval; - reckey[c].chn = t->cursor_ch; - reckey[c].act = TRUE; - - XMNote *note = &t->curpattern->channels[t->cursor_ch][t->patpos]; - note->note = i; - note->instrument = gui_get_current_instrument(); - tracker_redraw_current_row(t); - xm->modified = 1; - - } else if(!keys_is_key_pressed(keyval, - ENCODE_MODIFIERS(shift, ctrl, alt))) { // Release key - - // Find right reckey - for(c = 0; c < 32; c++) - if(reckey[c].act && reckey[c].key == keyval) - break; - if(c == 32) - goto fin_note; // Key was released by other means - - reckey[c].act = FALSE; - - if (!insert_noteoff) - goto fin_note; - - XMNote *note = &t->curpattern->channels[reckey[c].chn][t->patpos]; - note->note = 97; - note->instrument = 0; - tracker_redraw_current_row(t); - xm->modified = 1; } - } else if (pressed) { - - XMNote *note = &t->curpattern->channels[t->cursor_ch][t->patpos]; - note->note = i; - note->instrument = gui_get_current_instrument(); - tracker_redraw_current_row(t); - tracker_step_cursor_row(t, gui_get_current_jump_value()); - xm->modified = 1; - } -fin_note: - track_editor_do_the_note_key(m, pressed, keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); - } - break; - case KEYS_MEANING_KEYOFF: - if(pressed && GTK_TOGGLE_BUTTON(editing_toggle)->active) { - XMNote *note = &t->curpattern->channels[t->cursor_ch][t->patpos]; - note->note = 97; - note->instrument = 0; - tracker_redraw_current_row(t); - tracker_step_cursor_row(t, gui_get_current_jump_value()); - xm->modified = 1; - } - break; - } - if (GTK_TOGGLE_BUTTON(editing_toggle)->active) show_editmode_status(); - return TRUE; - } - } - - if(!pressed){ - if (tip == KEYS_MEANING_CH){ - current_channel = -1; - return TRUE; - } - return FALSE; + } + show_editmode_status(); + track_editor_do_the_note_key(m, pressed, keyval, ENCODE_MODIFIERS(shift, ctrl, alt), FALSE); + } + + return TRUE; + } else if (tip == KEYS_MEANING_KEYOFF) { + if (GTK_TOGGLE_BUTTON(editing_toggle)->active) { + if (pressed) { + gint jump = gui_get_current_jump_value(); + XMNote* note = &t->curpattern->channels[t->cursor_ch][t->patpos]; + + track_editor_log_note(t, N_("Note input"), + -1, t->cursor_ch, t->patpos, HISTORY_FLAG_LOG_PAGE); + note->note = XM_PATTERN_NOTE_OFF; + note->instrument = 0; + if (jump) + tracker_step_cursor_row(t, gui_get_current_jump_value()); + else + tracker_redraw_current_row(t); + } + show_editmode_status(); + } + + return TRUE; + } + } } - switch (tip){ + if (!pressed) { + if (keyval == GDK_Shift_L && in_sel && + gui_settings.selection_mode == SELECTION_FT2) { + menubar_block_mode_set(FALSE, FALSE); + return TRUE; + } + return FALSE; + } + + switch (tip) { case KEYS_MEANING_FUNC: - m = gui_get_current_jump_value (); - if ((m += KEYS_MEANING_VALUE(i) ? -1 : 1) <= 16 && - m >= 0) gui_set_jump_value (m); - return TRUE; + switch (KEYS_MEANING_VALUE(i)) { + case KEY_JMP_PLUS: + m = gui_get_current_jump_value() + 1; + if (m <= 16) + gui_set_jump_value(m); + handled = TRUE; + break; + case KEY_JMP_MINUS: + m = gui_get_current_jump_value() - 1; + if (m >= 0) + gui_set_jump_value(m); + handled = TRUE; + break; + case KEY_PLAY_ROW: + gui_play_current_pattern_row(); + handled = TRUE; + break; + case KEY_PLAY_BLK: + gui_play_block(); + handled = TRUE; + break; + default: + break; + } + if (handled) + return TRUE; + break; case KEYS_MEANING_CH: - tracker_set_cursor_channel (t, current_channel = KEYS_MEANING_VALUE(i)); - if (GTK_TOGGLE_BUTTON(editing_toggle)->active) show_editmode_status(); - return TRUE; + tracker_set_cursor_channel(t, KEYS_MEANING_VALUE(i)); + if (GTK_TOGGLE_BUTTON(editing_toggle)->active) + show_editmode_status(); + return TRUE; } switch (keyval) { case GDK_Up: - if((GUI_ENABLED || ASYNCEDIT) && !ctrl && !shift && !alt) { - tracker_set_patpos(t, t->patpos > 0 ? t->patpos - 1 : t->curpattern->length - 1); - handled = TRUE; - } - break; + if ((GUI_ENABLED || ASYNCEDIT) && !ctrl && !alt) { + if (shift && !in_sel && sel_ft2) { + /* Start selection */ + in_sel = TRUE; + menubar_block_mode_set(TRUE, FALSE); + } + track_editor_set_patpos(t->patpos > 0 ? t->patpos - 1 : t->curpattern->length - 1); + handled = TRUE; + } + break; case GDK_Down: - if((GUI_ENABLED || ASYNCEDIT) && !ctrl && !shift && !alt) { - tracker_set_patpos(t, t->patpos < t->curpattern->length - 1 ? t->patpos + 1 : 0); - handled = TRUE; - } - break; + if ((GUI_ENABLED || ASYNCEDIT) && !ctrl && !alt) { + if (shift && !in_sel && sel_ft2) { + /* Start selection */ + in_sel = TRUE; + menubar_block_mode_set(TRUE, FALSE); + } + track_editor_set_patpos(t->patpos < t->curpattern->length - 1 ? t->patpos + 1 : 0); + handled = TRUE; + } + break; case GDK_Page_Up: - if(!GUI_ENABLED && !ASYNCEDIT) - break; - if(t->patpos >= 16) - tracker_set_patpos(t, t->patpos - 16); - else - tracker_set_patpos(t, 0); - handled = TRUE; - break; + if ((GUI_ENABLED || ASYNCEDIT) && !ctrl) { + if (shift && !in_sel && sel_ft2) { + /* Start selection */ + in_sel = TRUE; + menubar_block_mode_set(TRUE, FALSE); + } + if (t->patpos >= 16) + track_editor_set_patpos(t->patpos - 16); + else + track_editor_set_patpos(0); + handled = TRUE; + } + break; case GDK_Page_Down: - if(!GUI_ENABLED && !ASYNCEDIT) - break; - if(t->patpos < t->curpattern->length - 16) - tracker_set_patpos(t, t->patpos + 16); - else - tracker_set_patpos(t, t->curpattern->length - 1); - handled = TRUE; - break; - case GDK_F9: + if ((GUI_ENABLED || ASYNCEDIT) && !ctrl) { + if (shift && !in_sel && sel_ft2) { + /* Start selection */ + in_sel = TRUE; + menubar_block_mode_set(TRUE, FALSE); + } + if (t->patpos < t->curpattern->length - 16) + track_editor_set_patpos(t->patpos + 16); + else + track_editor_set_patpos(t->curpattern->length - 1); + handled = TRUE; + } + break; case GDK_Home: - if(GUI_ENABLED || ASYNCEDIT) { - tracker_set_patpos(t, 0); - handled = TRUE; - } - break; + if (ctrl) + break; + case GDK_F9: + if (GUI_ENABLED || ASYNCEDIT) { + if (shift && !in_sel && sel_ft2) { + /* Start selection */ + in_sel = TRUE; + menubar_block_mode_set(TRUE, FALSE); + } + track_editor_set_patpos(0); + handled = TRUE; + } + break; case GDK_F10: - if(GUI_ENABLED || ASYNCEDIT) { - tracker_set_patpos(t, t->curpattern->length/4); - handled = TRUE; - } - break; + if (GUI_ENABLED || ASYNCEDIT) { + if (shift && !in_sel && sel_ft2) { + /* Start selection */ + in_sel = TRUE; + menubar_block_mode_set(TRUE, FALSE); + } + track_editor_set_patpos(t->curpattern->length / 4); + handled = TRUE; + } + break; case GDK_F11: - if(GUI_ENABLED || ASYNCEDIT) { - tracker_set_patpos(t, t->curpattern->length/2); - handled = TRUE; - } - break; + if (GUI_ENABLED || ASYNCEDIT) { + if (shift && !in_sel && sel_ft2) { + /* Start selection */ + in_sel = TRUE; + menubar_block_mode_set(TRUE, FALSE); + } + track_editor_set_patpos(t->curpattern->length / 2); + handled = TRUE; + } + break; case GDK_F12: - if(GUI_ENABLED || ASYNCEDIT) { - tracker_set_patpos(t, 3*t->curpattern->length/4); - handled = TRUE; - } - break; + if (GUI_ENABLED || ASYNCEDIT) { + if (shift && !in_sel && sel_ft2) { + /* Start selection */ + in_sel = TRUE; + menubar_block_mode_set(TRUE, FALSE); + } + track_editor_set_patpos(3 * t->curpattern->length / 4); + handled = TRUE; + } + break; case GDK_End: - if(GUI_ENABLED || ASYNCEDIT) { - tracker_set_patpos(t, t->curpattern->length - 1); - handled = TRUE; - } - break; + if ((GUI_ENABLED || ASYNCEDIT) && !ctrl) { + if (shift && !in_sel && sel_ft2) { + /* Start selection */ + in_sel = TRUE; + menubar_block_mode_set(TRUE, FALSE); + } + track_editor_set_patpos(t->curpattern->length - 1); + handled = TRUE; + } + break; case GDK_Left: - if(!shift && !ctrl && !alt) { - /* cursor left */ - tracker_step_cursor_item(t, -1); - handled = TRUE; - } - break; + if (!ctrl && !alt) { + if (shift && !in_sel && sel_ft2) { + /* Start selection */ + in_sel = TRUE; + menubar_block_mode_set(TRUE, FALSE); + } + /* cursor left */ + in_sel ? tracker_step_cursor_channel(t, -1) + : tracker_step_cursor_item(t, -1); + handled = TRUE; + } + break; case GDK_Right: - if(!shift && !ctrl && !alt) { - /* cursor right */ - tracker_step_cursor_item(t, 1); - handled = TRUE; - } - break; + if (!ctrl && !alt) { + if (shift && !in_sel && sel_ft2) { + /* Start selection */ + in_sel = TRUE; + menubar_block_mode_set(TRUE, FALSE); + } + /* cursor right */ + in_sel ? tracker_step_cursor_channel(t, 1) + : tracker_step_cursor_item(t, 1); + handled = TRUE; + } + break; case GDK_Tab: case GDK_ISO_Left_Tab: - tracker_step_cursor_channel(t, shift ? -1 : 1); - handled = TRUE; - break; -/* case GDK_Shift_R: - play_song(); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(editing_toggle), TRUE); - tracker_redraw(tracker); - handled = TRUE; - break;*/ + tracker_step_cursor_channel(t, shift ? -1 : 1); + handled = TRUE; + break; case GDK_Delete: - if(GTK_TOGGLE_BUTTON(editing_toggle)->active) { - XMNote *note = &t->curpattern->channels[t->cursor_ch][t->patpos]; - - if(shift) { - note->note = 0; - note->instrument = 0; - note->volume = 0; - note->fxtype = 0; - note->fxparam = 0; - } else if(ctrl) { - note->volume = 0; - note->fxtype = 0; - note->fxparam = 0; - } else if(alt) { - note->fxtype = 0; - note->fxparam = 0; + if (GTK_TOGGLE_BUTTON(editing_toggle)->active) { + gint jump = gui_get_current_jump_value(); + XMNote* note = &t->curpattern->channels[t->cursor_ch][t->patpos]; + + track_editor_log_note(t, N_("Note cleaning"), + -1, t->cursor_ch, t->patpos, HISTORY_FLAG_LOG_PAGE); + if (shift) { + note->note = 0; + note->instrument = 0; + note->volume = 0; + note->fxtype = 0; + note->fxparam = 0; + } else if (ctrl) { + note->volume = 0; + note->fxtype = 0; + note->fxparam = 0; + } else if (alt) { + note->fxtype = 0; + note->fxparam = 0; } else { - switch(t->cursor_item) { - case 0: case 1: case 2: + switch (t->cursor_item) { + case 0: + case 1: + case 2: note->note = 0; note->instrument = 0; break; - case 3: case 4: + case 3: + case 4: note->volume = 0; break; - case 5: case 6: case 7: + case 5: + case 6: + case 7: note->fxtype = 0; note->fxparam = 0; break; @@ -823,650 +1206,960 @@ } } - tracker_redraw_current_row(t); - tracker_step_cursor_row(t, gui_get_current_jump_value()); - xm->modified = 1; - handled = TRUE; - } - break; + if (jump) + tracker_step_cursor_row(t, jump); + else + tracker_redraw_current_row(t); + handled = TRUE; + } + break; case GDK_Insert: - if(GTK_TOGGLE_BUTTON(editing_toggle)->active && !shift && !alt && !ctrl) { - XMNote *note = &t->curpattern->channels[t->cursor_ch][t->patpos]; + if (GTK_TOGGLE_BUTTON(editing_toggle)->active && !shift && !alt && !ctrl) { + XMNote* note = &t->curpattern->channels[t->cursor_ch][t->patpos]; - for(i = t->curpattern->length - 1; i>t->patpos; --i) - t->curpattern->channels[t->cursor_ch][i] = t->curpattern->channels[t->cursor_ch][i-1]; + track_editor_log_block(t, N_("Note inserting"), + t->cursor_ch, t->patpos, 1, t->curpattern->length - t->patpos); + for (i = t->curpattern->length - 1; i > t->patpos; --i) + t->curpattern->channels[t->cursor_ch][i] = t->curpattern->channels[t->cursor_ch][i - 1]; + + note->note = 0; + note->instrument = 0; + note->volume = 0; + note->fxtype = 0; + note->fxparam = 0; - note->note = 0; - note->instrument = 0; - note->volume = 0; - note->fxtype = 0; - note->fxparam = 0; - - tracker_redraw_current_row(t); - xm->modified = 1; - handled = TRUE; + tracker_redraw(t); + handled = TRUE; } break; case GDK_BackSpace: - if(GTK_TOGGLE_BUTTON(editing_toggle)->active) { - XMNote *note; + if (GTK_TOGGLE_BUTTON(editing_toggle)->active && !shift &&!ctrl && !alt) { + XMNote* note; - if(t->patpos) { - --t->patpos; - for(i = t->patpos; icurpattern->length-1; i++) - t->curpattern->channels[t->cursor_ch][i] = t->curpattern->channels[t->cursor_ch][i+1]; - - note = &t->curpattern->channels[t->cursor_ch][t->curpattern->length - 1]; - note->note = 0; - note->instrument = 0; - note->volume = 0; - note->fxtype = 0; - note->fxparam = 0; - - tracker_redraw_current_row(t); - xm->modified = 1; - handled = TRUE; - } + if (t->patpos) { + track_editor_log_block(t, N_("Note removing"), + t->cursor_ch, t->patpos - 1, 1, t->curpattern->length - t->patpos + 1); + for (i = t->patpos - 1; i < t->curpattern->length - 1; i++) + t->curpattern->channels[t->cursor_ch][i] = t->curpattern->channels[t->cursor_ch][i + 1]; + + note = &t->curpattern->channels[t->cursor_ch][t->curpattern->length - 1]; + note->note = 0; + note->instrument = 0; + note->volume = 0; + note->fxtype = 0; + note->fxparam = 0; + + tracker_redraw(t); + track_editor_set_patpos(t->patpos - 1); + handled = TRUE; + } } break; case GDK_Escape: - if (shift){ - tracker_set_cursor_item (t, 0); - handled = TRUE; - } - break; - - case ' ': - if (current_channel >= 0){ - if (current_channel > (t->num_channels - 1)) - current_channel = t->num_channels - 1; - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(scopegroup->scopebuttons[current_channel]), - !GTK_TOGGLE_BUTTON(scopegroup->scopebuttons[current_channel])->active); - handled = TRUE; - } - break; - + if (shift) { + tracker_set_cursor_item(t, 0); + handled = TRUE; + } + break; default: - if(!ctrl && !alt) { - if(GTK_TOGGLE_BUTTON(editing_toggle)->active) { - handled = track_editor_handle_column_input(t, keyval); - } - } - break; + if (!ctrl && !alt) { + if (GTK_TOGGLE_BUTTON(editing_toggle)->active) { + handled = track_editor_handle_column_input(t, keyval); + } + } + break; } - if (GTK_TOGGLE_BUTTON(editing_toggle)->active && handled) show_editmode_status(); + if (GTK_TOGGLE_BUTTON(editing_toggle)->active && handled) + show_editmode_status(); return handled; } -void -track_editor_copy_pattern (Tracker *t) +void track_editor_copy_pattern(GtkWidget* w, Tracker* t) { - XMPattern *p = t->curpattern; + XMPattern* p = t->curpattern; - if(pattern_buffer) { - st_free_pattern_channels(pattern_buffer); - free(pattern_buffer); + if (pattern_buffer) { + st_free_pattern_channels(pattern_buffer); + free(pattern_buffer); } pattern_buffer = st_dup_pattern(p); tracker_redraw(t); } -void -track_editor_cut_pattern (Tracker *t) +void track_editor_cut_pattern(GtkWidget* w, Tracker* t) { - XMPattern *p = t->curpattern; + if (GUI_EDITING) { + XMPattern* p = t->curpattern; - if(pattern_buffer) { - st_free_pattern_channels(pattern_buffer); - free(pattern_buffer); + gui_log_pattern(p, N_("Pattern cut"), -1, -1, -1); + if (pattern_buffer) { + st_free_pattern_channels(pattern_buffer); + free(pattern_buffer); + } + pattern_buffer = st_dup_pattern(p); + st_clear_pattern(p); + tracker_redraw(t); } - pattern_buffer = st_dup_pattern(p); - st_clear_pattern(p); - xm->modified = 1; - tracker_redraw(t); } -void -track_editor_paste_pattern (Tracker *t) +void track_editor_paste_pattern(GtkWidget* w, Tracker* t) { - XMPattern *p = t->curpattern; - int i; - - if(!pattern_buffer) - return; - for(i = 0; i < 32; i++) { - free(p->channels[i]); - p->channels[i] = st_dup_track(pattern_buffer->channels[i], pattern_buffer->length); - } - p->alloc_length = pattern_buffer->length; - if(p->length != pattern_buffer->length) { - p->length = pattern_buffer->length; - gui_update_pattern_data(); - tracker_reset(t); - } else { - tracker_redraw(t); + if (GUI_EDITING) { + XMPattern* p = t->curpattern; + int i; + + if (!pattern_buffer) + return; + gui_log_pattern(p, N_("Pattern paste"), -1, -1, + MAX(p->length, pattern_buffer->length)); + for (i = 0; i < 32; i++) { + free(p->channels[i]); + p->channels[i] = st_dup_track(pattern_buffer->channels[i], pattern_buffer->length); + } + p->alloc_length = pattern_buffer->length; + if (p->length != pattern_buffer->length) { + p->length = pattern_buffer->length; + gui_update_pattern_data(); + tracker_reset(t); + } else { + tracker_redraw(t); + } } - xm->modified = 1; } -void -track_editor_copy_track (Tracker *t) +void track_editor_copy_track(GtkWidget* w, Tracker* t) { int l = t->curpattern->length; - XMNote *n = t->curpattern->channels[t->cursor_ch]; + XMNote* n = t->curpattern->channels[t->cursor_ch]; - if(track_buffer) { - free(track_buffer); + if (track_buffer) { + free(track_buffer); } track_buffer_length = l; track_buffer = st_dup_track(n, l); tracker_redraw(t); } -void -track_editor_cut_track (Tracker *t) +void track_editor_cut_track(GtkWidget* w, Tracker* t) { - int l = t->curpattern->length; - XMNote *n = t->curpattern->channels[t->cursor_ch]; - - if(track_buffer) { - free(track_buffer); + if (GUI_EDITING) { + int l = t->curpattern->length; + XMNote* n = t->curpattern->channels[t->cursor_ch]; + + track_editor_log_block(t, N_("Track cut"), t->cursor_ch, 0, 1, l); + if (track_buffer) { + free(track_buffer); + } + track_buffer_length = l; + track_buffer = st_dup_track(n, l); + st_clear_track(n, l); + tracker_redraw(t); } - track_buffer_length = l; - track_buffer = st_dup_track(n, l); - st_clear_track(n, l); - xm->modified = 1; - tracker_redraw(t); } -void -track_editor_paste_track (Tracker *t) +void track_editor_paste_track(GtkWidget* w, Tracker* t) { - int l = t->curpattern->length; - XMNote *n = t->curpattern->channels[t->cursor_ch]; - int i; - - if(!track_buffer) - return; - i = track_buffer_length; - if(l < i) - i = l; - while(i--) - n[i] = track_buffer[i]; - xm->modified = 1; - tracker_redraw(t); + if (GUI_EDITING) { + int l = t->curpattern->length; + XMNote* n = t->curpattern->channels[t->cursor_ch]; + int i; + + if (!track_buffer) + return; + track_editor_log_block(t, N_("Track paste"), t->cursor_ch, 0, 1, l); + i = track_buffer_length; + if (l < i) + i = l; + while (i--) + n[i] = track_buffer[i]; + tracker_redraw(t); + } } -void -track_editor_delete_track (Tracker *t) +void track_editor_delete_track(GtkWidget* w, Tracker* t) { - st_pattern_delete_track(t->curpattern, t->cursor_ch); - xm->modified = 1; - tracker_redraw(t); + if (GUI_EDITING) { + gui_log_pattern(t->curpattern, N_("Track removing"), -1, -1, -1); + st_pattern_delete_track(t->curpattern, t->cursor_ch); + tracker_redraw(t); + } } -void -track_editor_insert_track (Tracker *t) +void track_editor_insert_track(GtkWidget* w, Tracker* t) { - st_pattern_insert_track(t->curpattern, t->cursor_ch); - xm->modified = 1; - tracker_redraw(t); + if (GUI_EDITING) { + gboolean is_ok = TRUE; + + if (!st_is_empty_track(t->curpattern->channels[t->num_channels - 1], t->curpattern->length)) { + if (t->num_channels < 32) + is_ok = gui_ok_cancel_modal(mainwindow, + _("The last track of the pattern is not empty. It will be shifted beyond the pattern scope. " + "You can increase the number of channels to see it. Continue?")); + else + is_ok = gui_ok_cancel_modal(mainwindow, + _("Warning! The last track of the pattern is not empty. It will be brought to digital nought! " + "Do you really want to do this?")); + } + if (is_ok) { + gui_log_pattern(t->curpattern, N_("Track insertion"), -1, -1, -1); + st_pattern_insert_track(t->curpattern, t->cursor_ch); + tracker_redraw(t); + } + } } -void -track_editor_kill_notes_track (Tracker *t) +void track_editor_kill_notes_track(GtkWidget* w, Tracker* t) { - int i; - XMNote *note; + if (GUI_EDITING) { + int i; + XMNote* note; + + track_editor_log_block(t, N_("Killing notes"), + t->cursor_ch, t->patpos, 1, t->curpattern->length - t->patpos); + + for (i = t->patpos; i < t->curpattern->length; i++) { + note = &t->curpattern->channels[t->cursor_ch][i]; + note->note = 0; + note->instrument = 0; + note->volume = 0; + note->fxtype = 0; + note->fxparam = 0; + } - for(i = t->patpos; icurpattern->length; i++) { - note = &t->curpattern->channels[t->cursor_ch][i]; - note->note = 0; - note->instrument = 0; - note->volume = 0; - note->fxtype = 0; - note->fxparam = 0; + tracker_redraw(t); } - - xm->modified = 1; - tracker_redraw(t); } -void -track_editor_cmd_mvalue (Tracker *t, gboolean mode) +void track_editor_cmd_mvalue(Tracker* t, gboolean mode) { - XMNote *note; + XMNote* note; int nparam, tpos; tpos = t->cursor_item; - if(tpos>=3) { - note = &t->curpattern->channels[t->cursor_ch][(t->patpos - gui_get_current_jump_value()) % t->curpattern->length]; + if (tpos >= 3) { + gint from = t->patpos - gui_get_current_jump_value(); + gint jump = gui_get_current_jump_value(); + + if (from >= 0) { + XMNote newnote = t->curpattern->channels[t->cursor_ch][t->patpos]; + note = &t->curpattern->channels[t->cursor_ch][from]; + + if (tpos < 5) { + if (!(nparam = note->volume)) + return; + if (nparam < 0x10 || nparam > 0x50) { + nparam &= 0xf; + mode ? nparam++ : nparam--; + + newnote.volume &= 0xf0; + newnote.volume |= nparam & 0xf; + } else { + if (mode && nparam < 0x50) + nparam++; + if (!mode && nparam > 0x10) + nparam--; - if(tpos<5) - nparam = note->volume & 0xf; - else - nparam = note->fxparam; - - if(mode==TRUE) - nparam = (nparam + 1) & 0xff; - else - nparam = (nparam - 1) & 0xff; - - note = &t->curpattern->channels[t->cursor_ch][t->patpos]; - if(tpos<5) - note->volume |= nparam & 0xf; - else - note->fxparam = nparam; + newnote.volume = nparam; + } + } else { + if (!(nparam = note->fxparam) && ! note->fxtype) + return; + mode ? nparam++ : nparam--; + newnote.fxparam = nparam & 0xff; + } + track_editor_log_note(t, N_("Vol / FX value increasing / decreasing"), -1, + t->cursor_ch, t->patpos, HISTORY_FLAG_LOG_PAGE); + t->curpattern->channels[t->cursor_ch][t->patpos] = newnote; - tracker_step_cursor_row(t, gui_get_current_jump_value()); - xm->modified = 1; - tracker_redraw(t); + if (jump) + tracker_step_cursor_row(t, jump); + else + tracker_redraw_current_row(t); + } } } -void -track_editor_mark_selection (Tracker *t) +void track_editor_mark_selection(Tracker* t) { tracker_mark_selection(t, TRUE); } -void -track_editor_clear_mark_selection (Tracker *t) +void track_editor_clear_mark_selection(GtkWidget* w, Tracker* t) { tracker_clear_mark_selection(t); - menubar_block_mode_set(FALSE); + menubar_block_mode_set(FALSE, TRUE); } static void -track_editor_copy_cut_selection_common (Tracker *t, - gboolean cut) +track_editor_copy_cut_selection_common(Tracker* t, + gboolean cut) { int i; int height, width, chStart, rowStart; - if(!tracker_is_valid_selection(t)) - return; + if (!tracker_is_valid_selection(t)) + return; - if(tracker_is_in_selection_mode(t)) - tracker_mark_selection(t, FALSE); + if (tracker_is_in_selection_mode(t)) + tracker_mark_selection(t, FALSE); tracker_get_selection_rect(t, &chStart, &rowStart, &width, &height); block_buffer.alloc_length = block_buffer.length = height; - for(i = 0; i < 32; i++) { - free(block_buffer.channels[i]); - block_buffer.channels[i] = NULL; - } - - for(i = 0; i < width; i++) { - block_buffer.channels[i] = st_dup_track_wrap(t->curpattern->channels[(chStart + i) % xm->num_channels], - t->curpattern->length, - rowStart, - height); - if(cut) { - st_clear_track_wrap(t->curpattern->channels[(chStart + i) % xm->num_channels], - t->curpattern->length, - rowStart, - height); - } + for (i = 0; i < 32; i++) { + free(block_buffer.channels[i]); + block_buffer.channels[i] = NULL; + } + + if (cut) + track_editor_log_block(t, N_("Block cutting"), chStart, rowStart, width, height); + for (i = 0; i < width; i++) { + block_buffer.channels[i] = st_dup_track_wrap(t->curpattern->channels[(chStart + i) % xm->num_channels], + t->curpattern->length, + rowStart, + height); + if (cut) { + st_clear_track_wrap(t->curpattern->channels[(chStart + i) % xm->num_channels], + t->curpattern->length, + rowStart, + height); + } } } -void -track_editor_copy_selection (Tracker *t) +void track_editor_copy_selection(GtkWidget* w, Tracker* t) { track_editor_copy_cut_selection_common(t, FALSE); - menubar_block_mode_set(FALSE); + menubar_block_mode_set(FALSE, TRUE); } -void -track_editor_cut_selection (Tracker *t) +void track_editor_cut_selection(GtkWidget* w, Tracker* t) { - track_editor_copy_cut_selection_common(t, TRUE); - menubar_block_mode_set(FALSE); - xm->modified = 1; - tracker_redraw(t); + if (GUI_EDITING) { + track_editor_copy_cut_selection_common(t, TRUE); + menubar_block_mode_set(FALSE, TRUE); + tracker_redraw(t); + } } -void -track_editor_paste_selection (Tracker *t) +void track_editor_paste_selection(GtkWidget* w, Tracker* t, gboolean advance_cursor) { - int i; + if (GUI_EDITING) { + int i; - if(block_buffer.length > t->curpattern->length) - return; + if (block_buffer.length > t->curpattern->length) + return; - for(i = 0; i < 32; i++) { - st_paste_track_into_track_wrap(block_buffer.channels[i], - t->curpattern->channels[(t->cursor_ch + i) % xm->num_channels], - t->curpattern->length, - t->patpos, - block_buffer.length); + gui_log_pattern(t->curpattern, N_("Selection paste"), -1, -1, -1); + for (i = 0; i < 32; i++) { + st_paste_track_into_track_wrap(block_buffer.channels[i], + t->curpattern->channels[(t->cursor_ch + i) % xm->num_channels], + t->curpattern->length, + t->patpos, + block_buffer.length); + } + + if (advance_cursor) + track_editor_set_patpos((t->patpos + block_buffer.length) % t->curpattern->length); + tracker_redraw(t); } +} - xm->modified = 1; - /* I'm not sure if it's a good idea (Olivier GLORIEUX) */ - tracker_set_patpos(t, (t->patpos + block_buffer.length) % t->curpattern->length); - tracker_redraw(t); +void track_editor_paste_selection_no_advance(GtkWidget* w, Tracker* t) +{ + track_editor_paste_selection(w, t, FALSE); } -void -track_editor_interpolate_fx (Tracker *t) +static void +track_editor_do_interpolate_fx(GtkWidget* w, Tracker* t, const gboolean match) { - int height, width, chStart, rowStart; - int xmnote_offset; - guint8 xmnote_mask; - XMNote *note_start, *note_end; - int i; - int dy; - int start_value, start_char; + if (GUI_EDITING) { + gint height, width, chStart, rowStart; + gint xmnote_offset; + guint8 xmnote_mask, xmnote_mask1 = 0, vol_fx = 0; + XMNote *note_start, *note_end; + gint i; + gint dy, dy1 = 0; + gint start_value, start_value1, start_char; + + if (!tracker_is_valid_selection(t)) + return; + + tracker_get_selection_rect(t, &chStart, &rowStart, &width, &height); + if (width != 1 || t->cursor_ch != chStart) + return; + + if (t->cursor_item >= 3) + track_editor_log_block(t, N_("FX interpolating"), + t->cursor_ch, rowStart, 1, height); + else + return; - if(!tracker_is_valid_selection(t)) - return; + note_start = &t->curpattern->channels[t->cursor_ch][rowStart]; + note_end = &t->curpattern->channels[t->cursor_ch][rowStart + height - 1]; - tracker_get_selection_rect(t, &chStart, &rowStart, &width, &height); - if(width != 1 || t->cursor_ch != chStart) - return; + if (t->cursor_item <= 4) { + // Interpolate volume column + xmnote_offset = (void*)(¬e_start->volume) - (void*)note_start; + + if (note_start->volume >= 0x10 && note_start->volume <= 0x50) { + if (note_end->volume < 0x10 || note_end->volume > 0x50) + return; + xmnote_mask = 0xff; + } else { + vol_fx = note_start->volume & 0xf0; + if ((note_end->volume & 0xf0) != vol_fx) + return; + xmnote_mask = 0x0f; + } + } else { + // Interpolate effects column + xmnote_offset = (void*)¬e_start->fxparam - (void*)note_start; + + if (note_start->fxtype != note_end->fxtype) + return; + + switch (n_params[note_start->fxtype] & 3) { + case 0: + return; + case 1: + xmnote_mask = 0xff; + break; + case 2: + xmnote_mask1 = 0xf0; + xmnote_mask = 0x0f; + break; + case 3: + if ((note_start->fxparam & 0xf0) != (note_end->fxparam & 0xf0)) + return; + xmnote_mask = 0x0f; + break; + } - note_start = &t->curpattern->channels[t->cursor_ch][rowStart]; - note_end = &t->curpattern->channels[t->cursor_ch][rowStart + height - 1]; + if (!match) + for (i = 1; i < height - 1; i++) { + // Skip lines that allready have effect on them + if ((note_start + i)->fxtype) + continue; + + // Copy the effect type into all rows in between + (note_start + i)->fxtype = note_start->fxtype; + /* Single 4-bit parameter, most significant nibble should also be added */ + if (xmnote_mask == 0x0f && !xmnote_mask1) + (note_start + i)->fxparam = note_start->fxparam & 0xf0; + } - if(t->cursor_item == 3 || t->cursor_item == 4) { - // Interpolate volume column - xmnote_offset = (void*)(¬e_start->volume) - (void*)note_start; - - switch(note_start->volume & 0xf0) { - case 0x10: case 0x20: case 0x30: case 0x40: case 0x50: - if((note_end->volume & 0xf0) < 0x10 || (note_end->volume & 0xf0) > 0x50) - return; - xmnote_mask = 0xff; - break; -// case 0xc0: -// if((note_end->volume & 0xf0) != 0xc0) -// return; -// xmnote_mask = 0x0f; -// break; - default: - if((note_end->volume & 0xf0) != (note_start->volume & 0xf0)) - return; - /* let's do at least _some_thing */ - xmnote_mask = 0x0f; - break; - } - - } else if(t->cursor_item >= 5) { - // Interpolate effects column - xmnote_offset = (void*)¬e_start->fxparam - (void*)note_start; - - if(note_start->fxtype != note_end->fxtype) - return; - - switch(note_start->fxtype) { - // The Axx for example needs special treatment here -// case 0xc: case 'Z'-'A'+10: -// xmnote_mask = 0xff; -// break; - default: - /* let's do at least _some_thing */ - xmnote_mask = 0xff; - break; - } - - for(i = 1; i < height - 1; i++) { - // Skip lines that allready have effect on them - if((note_start + i)->fxtype) - continue; - - // Copy the effect type into all rows in between - (note_start + i)->fxtype = note_start->fxtype; - } + } - } else { - return; - } + /* Bit-fiddling coming up... */ - /* Bit-fiddling coming up... */ + dy = *((guint8*)(note_end) + xmnote_offset) & xmnote_mask; + start_char = *((guint8*)(note_start) + xmnote_offset); + start_value = start_char & xmnote_mask; + dy -= start_value; + if (xmnote_mask1) { + dy1 = *((guint8*)(note_end) + xmnote_offset) & xmnote_mask1; + start_value1 = start_char & xmnote_mask1; + dy1 -= start_value1; + } - dy = *((guint8*)(note_end) + xmnote_offset); - dy &= xmnote_mask; - start_char = *((guint8*)(note_start) + xmnote_offset); - start_value = start_char & xmnote_mask; - dy -= start_value; + for (i = 1; i < height - 1; i++) { + gint new_value; - for(i = 1; i < height - 1; i++) { - int new_value; + // On effect interpolation, skip lines that allready contain different effects + if (t->cursor_item >= 5 && (note_start + i)->fxtype != note_start->fxtype) + continue; + + /* Effect with single 4-bit parameter. The most significant parameter nibble acts + like subeffect and must be taken into account */ + if (t->cursor_item >= 5 && xmnote_mask == 0x0f && !xmnote_mask1 && + ((note_start + i)->fxparam & 0xf0) != (note_start->fxparam & 0xf0)) + continue; + + /* In match mode modify only if FX in the volume column matches */ + if (match && t->cursor_item <= 4) { + const guint8 volume = (note_start + i)->volume; + + if (vol_fx) { + if (volume && 0xf0 != vol_fx) + continue; + } else { /* Volume, don't touch effects and empty fields */ + if (volume < 0x10 || volume > 0x50) + continue; + } + } - // On effect interpolation, skip lines that allready contain different effects - if(t->cursor_item >= 5 && (note_start + i)->fxtype != note_start->fxtype) - continue; + new_value = start_value + (gint)((gfloat)i * dy / (height - 1) + (dy >= 0 ? 1.0 : -1.0) * 0.5); + new_value &= xmnote_mask; + new_value |= (start_char & ~xmnote_mask); + if (xmnote_mask1) { + gint new_value1; + + new_value1 = start_value1 + (gint)((gfloat)i * dy1 / (height - 1) + (dy1 >= 0 ? 1.0 : -1.0) * 0.5); + new_value1 &= xmnote_mask1;g_print("New: %i\n", new_value1); + new_value = (new_value & ~xmnote_mask1) | new_value1; + } - new_value = start_value + (int)((float)i * dy / (height - 1) + (dy >= 0 ? 1.0 : -1.0) * 0.5); - new_value &= xmnote_mask; - new_value |= (start_char & ~xmnote_mask); + *((guint8*)(note_start + i) + xmnote_offset) = new_value; + } - *((guint8*)(note_start + i) + xmnote_offset) = new_value; + tracker_redraw(t); } +} - tracker_redraw(t); +void track_editor_interpolate_fx(GtkWidget* w, Tracker* t) +{ + track_editor_do_interpolate_fx(w, t, FALSE); } -static void -track_editor_handle_semidec_column_input (Tracker *t, - int exp, - gint8 *modpt, - int n) +void track_editor_interpolate_efx(GtkWidget* w, Tracker* t) { - switch(exp) { + track_editor_do_interpolate_fx(w, t, TRUE); +} + +static gint +char2hex(gint n, const gchar maxl, const gchar maxu) +{ + if (n >= '0' && n <= '9') + n -= '0'; + else { + if (n >= 'a' && n <= maxl) + n = n - 'a' + 10; + else if (n >= 'A' && n <= maxu) + n = n - 'A' + 10; + else + return -1; + } + + return n; +} + +static gboolean +track_editor_handle_semidec_column_input(Tracker* t, + int expr, + guint8* modpt, + int n) +{ + switch (expr) { case 0: - if(n < 0 || n > 9) - return; - *modpt = (*modpt / 10) * 10 + n; - break; + if (n < '0' || n > '9') + return FALSE; + *modpt = (*modpt / 10) * 10 + n - '0'; + break; case 1: - if(n < 0 || n > 26) - return; - *modpt = (*modpt % 10) + 10 * n; - break; + /* 128 instruments maximum, so only 'a', 'b' and 'c' are acceptable */ + n = char2hex(n, 'c', 'C'); + if (n == -1) + return FALSE; + *modpt = (*modpt % 10) + 10 * n; + break; } + if (*modpt > 128) + *modpt = 128; - tracker_redraw_current_row(t); - if(!gui_settings.advance_cursor_in_fx_columns) - tracker_step_cursor_row(t, gui_get_current_jump_value()); - else - tracker_step_cursor_item(t, 1); - xm->modified = 1; + return TRUE; } static void -track_editor_handle_hex_column_input (Tracker *t, - int exp, - gint8 *modpt, - int n) -{ - int s; - - if(n < 0 || n > 15) - return; - - exp *= 4; - s = *modpt & (0xf0 >> exp); - s |= n << exp; - *modpt = s; - tracker_redraw_current_row(t); +track_editor_offset_cursor(Tracker* t, gint expr) +{ + gint step_row = 0; - if(!gui_settings.advance_cursor_in_fx_columns) { - tracker_step_cursor_row(t, gui_get_current_jump_value()); + if (!gui_settings.advance_cursor_in_fx_columns) { + step_row = gui_get_current_jump_value(); } else { - if(exp) { /* not at the end */ - tracker_step_cursor_item(t, 1); - } else { - tracker_step_cursor_row(t, gui_get_current_jump_value()); - tracker_step_cursor_item(t, -1); - if(t->cursor_item == 6) /* -2 in case of fx col */ - tracker_step_cursor_item(t, -1); - } + if (expr) { /* not at the end */ + tracker_step_cursor_item(t, 1); + } else { + step_row = gui_get_current_jump_value(); + /* -2 in case of fx col */ + tracker_step_cursor_item(t, t->cursor_item == 7 ? -2 : -1); + } } + if (step_row) + tracker_step_cursor_row(t, step_row); + else + tracker_redraw_current_row(t); +} - xm->modified = 1; +static gboolean +track_editor_handle_hex_column_input(Tracker* t, + gint expr, + guint8* modpt, + gint n) +{ + gint s, rest; + + if (gui_settings.tracker_ft2_volume) { + if (gui_settings.tracker_vol_dec) { + switch (t->cursor_item) { + case 3: + if (n < '0' || n > '6') + /* This is not volume */ + break; + /* Then falling through */ + case 4: + s = *modpt; + if (s > 0x40 && t->cursor_item == 4) + /* The first byte refers to an FX rather than volume */ + break; + if (n < '0' || n > '9') + return FALSE; + + n -= '0'; + /* Exp can be only 0 or 1 here */ + if (expr && s > 0x40) { + /* FX is converted to volume, we keep the parameter as is, + possibly limiting it to the value of 9 */ + rest = s & 0xf; + rest = rest > 9 ? 9 : rest; + } else + rest = s % 10; + s = expr ? rest + n * 10 : s - rest + n; + if (s > 64) + s = 64; + *modpt = s; + + return TRUE; + default: + break; + } + } + /* Convert '-' symbol to '6' FX */ + if (n == '-' && t->cursor_item == 3) + n = '6'; + } + + n = char2hex(n, 'f', 'F'); + if (n == -1) + return FALSE; + + s = *modpt; + if (gui_settings.tracker_ft2_volume && + gui_settings.tracker_vol_dec && + t->cursor_item == 3 && s <= 0x40) { + /* Trasfer volume -> FX, preserving the lower digit */ + rest = s % 10; + s = n << 4 | rest; + } else { + expr *= 4; + s &= 0xf0 >> expr; + s |= n << expr; + } + *modpt = s; + + return TRUE; } static gboolean -track_editor_handle_column_input (Tracker *t, - int gdkkey) +track_editor_handle_column_input(Tracker* t, + int gdkkey) { - int n; - XMNote *note = &t->curpattern->channels[t->cursor_ch][t->patpos]; + static XMPattern* fxcp = NULL; + static gint fxch = -1, fxpatpos = -1; + gboolean handled = FALSE; + gint n; + guint8 tmp_value; + guchar volume; + XMNote* note = &t->curpattern->channels[t->cursor_ch][t->patpos]; + const gboolean ft2_volume = gui_settings.tracker_ft2_volume; + + if (t->cursor_item == 5) { + gint jump = 0; + + /* Effect column (not the parameter) */ + switch (gdkkey) { + case '0' ... '9': + n = gdkkey - '0'; + break; + case 'a' ... 'z': + case 'A' ... 'Z': + gdkkey = tolower(gdkkey); + n = gdkkey - 'a' + 10; + break; + default: + return FALSE; + } + if (fxcp != t->curpattern || fxch != t->cursor_ch || fxpatpos != t->patpos) { + fxcp = t->curpattern; + fxch = t->cursor_ch; + fxpatpos = t->patpos; + + track_editor_log_note(t, N_("Effect changing"), + -1, t->cursor_ch, t->patpos, HISTORY_FLAG_LOG_PAGE); + } + note->fxtype = n; + if (!gui_settings.advance_cursor_in_fx_columns) + jump = gui_get_current_jump_value(); + else + tracker_step_cursor_item(t, 1); + + if (jump) + tracker_step_cursor_row(t, jump); + else + tracker_redraw_current_row(t); + + return TRUE; + } + + switch (t->cursor_item) { + case 1: + case 2: /* instrument column */ + tmp_value = note->instrument; + if (track_editor_handle_semidec_column_input(t, 2 - t->cursor_item, &tmp_value, gdkkey)) { + static XMPattern* cp = NULL; + static gint ch = -1, patpos = -1; + + if (cp != t->curpattern || ch != t->cursor_ch || patpos != t->patpos) { + cp = t->curpattern; + ch = t->cursor_ch; + patpos = t->patpos; + + track_editor_log_note(t, N_("Instrument changing"), + -1, t->cursor_ch, t->patpos, HISTORY_FLAG_LOG_PAGE); + } + note->instrument = tmp_value; + track_editor_offset_cursor(t, 2 - t->cursor_item); + handled = TRUE; + } + break; + case 3: + if (ft2_volume) { + /* Convert some keybingings to emulate FT2 */ + switch (gdkkey) { + /* '-' -> '6' is a special case, the conversion is performed + in track_editor_handle_hex_column_input() */ + case '+': + gdkkey = '7'; + break; + case 'd': + case 'D': + gdkkey = '8'; + break; + case 'u': + case 'U': + gdkkey = '9'; + break; + case 's': + case 'S': + gdkkey = 'a'; + break; + case 'v': + case 'V': + gdkkey = 'b'; + break; + case 'p': + case 'P': + gdkkey = 'c'; + break; + case 'l': + case 'L': + case '<': + gdkkey = 'd'; + break; + case 'r': + case 'R': + case '>': + gdkkey = 'e'; + break; + case 'm': + case 'M': + gdkkey = 'f'; + break; + default: + break; + } + } /* Then falling through */ + case 4: /* volume column */ + volume = note->volume; + /* The volume value is shifted by 0x10, so if we want to see the real value (FT2 mode), + but store it correctly, we should subtract 0x10 before the modification, and add + this value afterwards */ + if (ft2_volume && volume < 0x60 && volume >= 0x10) + volume -= 0x10; + if (track_editor_handle_hex_column_input(t, 4 - t->cursor_item, &volume, gdkkey)) { + if (ft2_volume && volume < 0x50) + volume += 0x10; + /* Avoiding unused volume ranges */ + if (volume > 0x50 && volume < 0x60) + volume = 0x50; + if (volume >= 0x10) { + static XMPattern* cp = NULL; + static gint ch = -1, patpos = -1; + + if (cp != t->curpattern || ch != t->cursor_ch || patpos != t->patpos) { + cp = t->curpattern; + ch = t->cursor_ch; + patpos = t->patpos; + + track_editor_log_note(t, N_("Volume / Vol. FX changing"), + -1, t->cursor_ch, t->patpos, HISTORY_FLAG_LOG_PAGE); + } + note->volume = volume; + track_editor_offset_cursor(t, 4 - t->cursor_item); + } + handled = TRUE; + } + break; + case 6: + case 7: /* effect parameter */ + tmp_value = note->fxparam; + if (track_editor_handle_hex_column_input(t, 7 - t->cursor_item, &tmp_value, gdkkey)) { + if (fxcp != t->curpattern || fxch != t->cursor_ch || fxpatpos != t->patpos) { + fxcp = t->curpattern; + fxch = t->cursor_ch; + fxpatpos = t->patpos; - if(t->cursor_item == 5) { - /* Effect column (not the parameter) */ - switch(gdkkey) { - case '0' ... '9': - n = gdkkey - '0'; - break; - case 'a' ... 'z': case 'A' ... 'Z': - gdkkey = tolower(gdkkey); - n = gdkkey - 'a' + 10; - break; - default: - return FALSE; - } - note->fxtype = n; - tracker_redraw_current_row(t); - if(!gui_settings.advance_cursor_in_fx_columns) - tracker_step_cursor_row(t, gui_get_current_jump_value()); - else - tracker_step_cursor_item(t, 1); - xm->modified = 1; - return TRUE; - } - - gdkkey = tolower(gdkkey); - n = gdkkey - '0' - (gdkkey >= 'a') * ('a' - '9' - 1); - - switch(t->cursor_item) { - case 1: case 2: /* instrument column */ - track_editor_handle_semidec_column_input(t, 2 - t->cursor_item, ¬e->instrument, n); - break; - case 3: case 4: /* volume column */ - track_editor_handle_hex_column_input(t, 4 - t->cursor_item, ¬e->volume, n); - break; - case 6: case 7: /* effect parameter */ - track_editor_handle_hex_column_input(t, 7 - t->cursor_item, ¬e->fxparam, n); - break; + track_editor_log_note(t, N_("Effect changing"), + -1, t->cursor_ch, t->patpos, HISTORY_FLAG_LOG_PAGE); + } + note->fxparam = tmp_value; + track_editor_offset_cursor(t, 7 - t->cursor_item); + handled = TRUE; + } + break; default: - return FALSE; + break; } - return TRUE; + return handled; +} + +static void +tracker_timeout_foreach(gpointer data, + gpointer user_data) +{ + /* Walking through all events from player because one of them + can be the stop command */ + if (data) { + audio_player_pos* p = data; + + if (p->command == AUDIO_COMMAND_STOP_PLAYING) + gui_play_stop(); + else { + cur_tick = p->curtick; + curtime = p->time; + cur_pos = p->patpos; + cur_pat = p->songpos; + cur_tempo = p->tempo; + prev_tempo = p->prev_tempo; + prevtime = p->prev_tick_time; + nexttime = p->prev_tick_time; + patno = p->patno; + bpm = p->bpm; + *((gboolean *)user_data) = TRUE; + } + } } static gint -tracker_timeout (gpointer data) +tracker_timeout(gpointer data) { + g_debug("tracker_timeout()"); + double display_songtime; - audio_player_pos *p; + gboolean new_event = TRUE; - if(current_driver_object == NULL) { - /* Can happen when audio thread stops on its own. Note that + if (current_driver_object == NULL) { + /* Can happen when audio thread stops on its own. Note that * tracker_stop_updating() is called in * gui.c::read_mixer_pipe(). */ - return TRUE; + return TRUE; } display_songtime = current_driver->get_play_time(current_driver_object); + g_debug("tracker_timeout() songtime=%lf", display_songtime); - p = time_buffer_get(audio_playerpos_tb, display_songtime); - if(p) { - gui_update_player_pos(p); + if (display_songtime < 0.0) { + gui_clipping_indicator_update(FALSE); + } else { + audio_clipping_indicator* c = + time_buffer_get(audio_clipping_indicator_tb, display_songtime); + if (c) { + gui_clipping_indicator_update(c->clipping); + g_free(c); + } } + + time_buffer_foreach(audio_playerpos_tb, display_songtime, tracker_timeout_foreach, &new_event); + if (new_event) + gui_update_player_pos(curtime, cur_pat, patno, cur_pos, cur_tempo, bpm); + return TRUE; } -void -tracker_start_updating (void) +void tracker_start_updating(void) { - if(gtktimer != -1) - return; + g_debug("tracker_start_updating()"); + + if (gtktimer != -1) + return; - gtktimer = gtk_timeout_add(1000/update_freq, tracker_timeout, NULL); + gtktimer = g_timeout_add(1000 / update_freq, tracker_timeout, NULL); } -void -tracker_stop_updating (void) +void tracker_stop_updating(void) { - if(gtktimer == -1) - return; + g_debug("tracker_stop_updating()"); - gtk_timeout_remove(gtktimer); + if (gtktimer == -1) + return; + + g_source_remove(gtktimer); gtktimer = -1; } -void -tracker_set_update_freq (int freq) +void tracker_set_update_freq(int freq) { update_freq = freq; - if(gtktimer != -1) { - tracker_stop_updating(); - tracker_start_updating(); + if (gtktimer != -1) { + tracker_stop_updating(); + tracker_start_updating(); } } -void -track_editor_load_config (void) +void track_editor_load_config(void) { - char buf[256]; - prefs_node *f; - int i, j; - - f = prefs_open_read("jazz"); - if(f) { - for(i = 0; i < 32; i++) { - sprintf(buf, "jazz-toggle-%d", i); - prefs_get_int(f, buf, &j); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(jazztoggles[i]), j); - } + gboolean* buf; + int i; - prefs_close(f); + buf = prefs_get_bool_array("settings", "jazz-toggle", NULL); + if (buf) { + for (i = 0; i < 32; i++) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(jazztoggles[i]), buf[i]); + } + + g_free(buf); } } -void -track_editor_save_config (void) +void track_editor_save_config(void) { - char buf[256]; - prefs_node *f; - int i; - - if(gui_settings.save_settings_on_exit) { - trackersettings_write_settings(); - } + gboolean buf[32]; + guint i; - f = prefs_open_write("jazz"); - if(!f) - return; - - for(i = 0; i < 32; i++) { - sprintf(buf, "jazz-toggle-%d", i); - prefs_put_int(f, buf, GTK_TOGGLE_BUTTON(jazztoggles[i])->active); + if (gui_settings.save_settings_on_exit) { + trackersettings_write_settings(); } - prefs_close(f); + for (i = 0; i < 32; i++) + buf[i] = GTK_TOGGLE_BUTTON(jazztoggles[i])->active; + prefs_put_bool_array("settings", "jazz-toggle", buf, 32); } -void -track_editor_toggle_permanentness (Tracker *t, gboolean all) +void track_editor_toggle_permanentness(Tracker* t, gboolean all) { int i = t->cursor_ch; - if(!all) - gui_settings.permanent_channels ^= 1 << i; + if (!all) + gui_settings.permanent_channels ^= 1 << i; else - gui_settings.permanent_channels = gui_settings.permanent_channels ? 0 : 0xFFFFFFFF; - + gui_settings.permanent_channels = gui_settings.permanent_channels ? 0 : 0xFFFFFFFF; + tracker_redraw(t); } diff -Nru soundtracker-0.6.8/app/track-editor.h soundtracker-1.0.2~pre2/app/track-editor.h --- soundtracker-0.6.8/app/track-editor.h 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/track-editor.h 2021-02-06 10:44:46.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - track editor (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,61 +22,75 @@ #ifndef _TRACK_EDITOR_H #define _TRACK_EDITOR_H -#include +#include -#include "tracker.h" #include "tracker-settings.h" +#include "tracker.h" -extern Tracker *tracker; -extern GtkWidget *trackersettings; -extern GtkWidget *vscrollbar; - -void tracker_page_create (GtkNotebook *nb); - -gboolean track_editor_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval, - gboolean pressed); - -void track_editor_do_the_note_key (int note, - gboolean pressed, - guint32 xkeysym, - int modifiers); - -void track_editor_toggle_jazz_edit (void); -void track_editor_toggle_insert_noteoff (void); +typedef enum { + SELECTION_CLASSIC = 0, + SELECTION_FT2, + SELECTION_MIXED, + SELECTION_LAST +} SelectionMode; + +extern Tracker* tracker; +extern GtkWidget* trackersettings; +extern GtkWidget* vscrollbar; + +void tracker_page_create(GtkNotebook* nb); + +gboolean track_editor_handle_keys(int shift, + int ctrl, + int alt, + guint32 keyval, + gboolean pressed); +gboolean track_editor_do_the_note_key(int note, + gboolean pressed, + guint32 xkeysym, + int modifiers, + gboolean always_poly); +void track_editor_toggle_jazz_edit(GtkCheckMenuItem* b); -void track_editor_set_num_channels (int n); +void track_editor_set_num_channels(int n); +void track_editor_set_patpos(gint row); -void track_editor_load_config (void); -void track_editor_save_config (void); +void track_editor_load_config(void); +void track_editor_save_config(void); /* Handling of real-time scrolling */ -void tracker_start_updating (void); -void tracker_stop_updating (void); -void tracker_set_update_freq (int); +void tracker_start_updating(void); +void tracker_stop_updating(void); +void tracker_set_update_freq(int); /* c'n'p operations */ -void track_editor_copy_pattern (Tracker *t); -void track_editor_cut_pattern (Tracker *t); -void track_editor_paste_pattern (Tracker *t); -void track_editor_copy_track (Tracker *t); -void track_editor_cut_track (Tracker *t); -void track_editor_paste_track (Tracker *t); -void track_editor_delete_track (Tracker *t); -void track_editor_insert_track (Tracker *t); -void track_editor_kill_notes_track (Tracker *t); -void track_editor_mark_selection (Tracker *t); -void track_editor_clear_mark_selection(Tracker *t); -void track_editor_copy_selection (Tracker *t); -void track_editor_cut_selection (Tracker *t); -void track_editor_paste_selection (Tracker *t); - -void track_editor_interpolate_fx (Tracker *t); - -void track_editor_cmd_mvalue (Tracker *t, gboolean mode); +void track_editor_copy_pattern(GtkWidget* w, Tracker* t); +void track_editor_cut_pattern(GtkWidget* w, Tracker* t); +void track_editor_paste_pattern(GtkWidget* w, Tracker* t); +void track_editor_copy_track(GtkWidget* w, Tracker* t); +void track_editor_cut_track(GtkWidget* w, Tracker* t); +void track_editor_paste_track(GtkWidget* w, Tracker* t); +void track_editor_delete_track(GtkWidget* w, Tracker* t); +void track_editor_insert_track(GtkWidget* w, Tracker* t); +void track_editor_kill_notes_track(GtkWidget* w, Tracker* t); +void track_editor_mark_selection(Tracker* t); +void track_editor_clear_mark_selection(GtkWidget* w, Tracker* t); +void track_editor_copy_selection(GtkWidget* w, Tracker* t); +void track_editor_cut_selection(GtkWidget* w, Tracker* t); +void track_editor_paste_selection(GtkWidget* w, Tracker* t, gboolean advance_cursor); + +void track_editor_interpolate_fx(GtkWidget* w, Tracker* t); + +void track_editor_cmd_mvalue(Tracker* t, gboolean mode); + +void track_editor_toggle_permanentness(Tracker* t, gboolean all); + +/* History of operations */ +void track_editor_log_block(Tracker* t, const gchar* title, + const gint channel, const gint pos, const gint width, const gint length); +void track_editor_log_note(Tracker* t, const gchar* title, + const gint pattern, const gint channel, const gint row, + const gint flags); -void track_editor_toggle_permanentness (Tracker *t, gboolean all); #endif /* _TRACK_EDITOR_H */ diff -Nru soundtracker-0.6.8/app/tracker.c soundtracker-1.0.2~pre2/app/tracker.c --- soundtracker-0.6.8/app/tracker.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/tracker.c 2021-02-15 18:21:45.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GTK+ Tracker widget * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,16 +22,17 @@ #include #include +#include #include -#include -#include -#include "tracker.h" -#include "main.h" -#include "gui.h" +#include "colors.h" #include "gui-settings.h" +#include "main.h" +#include "marshal.h" +#include "st-subs.h" +#include "tracker.h" -const char * const notenames[4][96] = {{ +static const char* const notenames[4][NUM_NOTES] = {{ "C-0", "C#0", "D-0", "D#0", "E-0", "F-0", "F#0", "G-0", "G#0", "A-0", "A#0", "H-0", "C-1", "C#1", "D-1", "D#1", "E-1", "F-1", "F#1", "G-1", "G#1", "A-1", "A#1", "H-1", "C-2", "C#2", "D-2", "D#2", "E-2", "F-2", "F#2", "G-2", "G#2", "A-2", "A#2", "H-2", @@ -39,7 +40,7 @@ "C-4", "C#4", "D-4", "D#4", "E-4", "F-4", "F#4", "G-4", "G#4", "A-4", "A#4", "H-4", "C-5", "C#5", "D-5", "D#5", "E-5", "F-5", "F#5", "G-5", "G#5", "A-5", "A#5", "H-5", "C-6", "C#6", "D-6", "D#6", "E-6", "F-6", "F#6", "G-6", "G#6", "A-6", "A#6", "H-6", - "C-7", "C#7", "D-7", "D#7", "E-7", "F-7", "F#7", "G-7", "G#7", "A-7", "A#7", "H-7", + "C-7", "C#7", "D-7", "D#7", "E-7", "F-7", "F#7", "G-7", "G#7", "A-7", "A#7", "H-7" },{ "C-0", "Db0", "D-0", "Eb0", "E-0", "F-0", "Gb0", "G-0", "Ab0", "A-0", "B-0", "H-0", "C-1", "Db1", "D-1", "Eb1", "E-1", "F-1", "Gb1", "G-1", "Ab1", "A-1", "B-1", "H-1", @@ -48,7 +49,7 @@ "C-4", "Db4", "D-4", "Eb4", "E-4", "F-4", "Gb4", "G-4", "Ab4", "A-4", "B-4", "H-4", "C-5", "Db5", "D-5", "Eb5", "E-5", "F-5", "Gb5", "G-5", "Ab5", "A-5", "B-5", "H-5", "C-6", "Db6", "D-6", "Eb6", "E-6", "F-6", "Gb6", "G-6", "Ab6", "A-6", "B-6", "H-6", - "C-7", "Db7", "D-7", "Eb7", "E-7", "F-7", "Gb7", "G-7", "Ab7", "A-7", "B-7", "H-7", + "C-7", "Db7", "D-7", "Eb7", "E-7", "F-7", "Gb7", "G-7", "Ab7", "A-7", "B-7", "H-7" },{ "C-0", "C#0", "D-0", "D#0", "E-0", "F-0", "F#0", "G-0", "G#0", "A-0", "A#0", "B-0", "C-1", "C#1", "D-1", "D#1", "E-1", "F-1", "F#1", "G-1", "G#1", "A-1", "A#1", "B-1", @@ -57,7 +58,7 @@ "C-4", "C#4", "D-4", "D#4", "E-4", "F-4", "F#4", "G-4", "G#4", "A-4", "A#4", "B-4", "C-5", "C#5", "D-5", "D#5", "E-5", "F-5", "F#5", "G-5", "G#5", "A-5", "A#5", "B-5", "C-6", "C#6", "D-6", "D#6", "E-6", "F-6", "F#6", "G-6", "G#6", "A-6", "A#6", "B-6", - "C-7", "C#7", "D-7", "D#7", "E-7", "F-7", "F#7", "G-7", "G#7", "A-7", "A#7", "B-7", + "C-7", "C#7", "D-7", "D#7", "E-7", "F-7", "F#7", "G-7", "G#7", "A-7", "A#7", "B-7" },{ "C-0", "Db0", "D-0", "Eb0", "E-0", "F-0", "Gb0", "G-0", "Ab0", "A-0", "Bb0", "B-0", "C-1", "Db1", "D-1", "Eb1", "E-1", "F-1", "Gb1", "G-1", "Ab1", "A-1", "Bb1", "B-1", @@ -66,352 +67,350 @@ "C-4", "Db4", "D-4", "Eb4", "E-4", "F-4", "Gb4", "G-4", "Ab4", "A-4", "Bb4", "B-4", "C-5", "Db5", "D-5", "Eb5", "E-5", "F-5", "Gb5", "G-5", "Ab5", "A-5", "Bb5", "B-5", "C-6", "Db6", "D-6", "Eb6", "E-6", "F-6", "Gb6", "G-6", "Ab6", "A-6", "Bb6", "B-6", - "C-7", "Db7", "D-7", "Eb7", "E-7", "F-7", "Gb7", "G-7", "Ab7", "A-7", "Bb7", "B-7", + "C-7", "Db7", "D-7", "Eb7", "E-7", "F-7", "Gb7", "G-7", "Ab7", "A-7", "Bb7", "B-7" }}; -static void init_display(Tracker *t, int width, int height); - -static const int default_colors[] = { - 10, 20, 30, - 100, 100, 100, - 70, 70, 70, - 50, 50, 50, - 50, 60, 70, - 230, 230, 230, - 170, 170, 200, - 230, 200, 0, - 250, 100, 50, - 250, 200, 50, -}; +static void init_display(Tracker* t, int width, int height, gboolean signals); enum { SIG_PATPOS, SIG_XPANNING, SIG_MAINMENU_BLOCKMARK_SET, + SIG_XCONF, + SIG_YCONF, + SIG_CSCROLL, + SIG_ASCROLL, LAST_SIGNAL }; -#define CLEAR(win, x, y, w, h) \ -do { gdk_draw_rectangle(win, t->bg_gc, TRUE, x, y, w, h); } while(0) +#define CLEAR(win, x, y, w, h) \ + do { \ + di_draw_rectangle(win, t->bg_gc, TRUE, x, y, w, h); \ + } while (0) static guint tracker_signals[LAST_SIGNAL] = { 0 }; -static gint tracker_idle_draw_function (Tracker *t); +static gint tracker_idle_draw_function(Tracker* t); static void -tracker_idle_draw (Tracker *t) +tracker_idle_draw(Tracker* t) { - if(!t->idle_handler) { - t->idle_handler = gtk_idle_add((GtkFunction)tracker_idle_draw_function, - (gpointer)t); - g_assert(t->idle_handler != 0); + if (!t->idle_handler) { + t->idle_handler = g_idle_add((GSourceFunc)tracker_idle_draw_function, + (gpointer)t); + g_assert(t->idle_handler != 0); } } -void -tracker_set_num_channels (Tracker *t, - int n) +const gchar* +tracker_get_note_name(const guint key) { - GtkWidget *widget = GTK_WIDGET(t); + guint index = (gui_settings.sharp ? 0 : 1) + (gui_settings.bh ? 2 : 0); + g_assert(key < NUM_NOTES); + return notenames[index][key]; +} + +void tracker_set_num_channels(Tracker* t, + int n) +{ + GtkWidget* widget = GTK_WIDGET(t); t->num_channels = n; - if(GTK_WIDGET_REALIZED(widget)) { - init_display(t, widget->allocation.width, widget->allocation.height); - gtk_widget_queue_draw(widget); + if (gtk_widget_get_realized(widget)) { + init_display(t, widget->allocation.width, widget->allocation.height, FALSE); + gtk_widget_queue_draw(widget); } - gtk_signal_emit(GTK_OBJECT(t), tracker_signals[SIG_XPANNING], t->leftchan, t->num_channels, t->disp_numchans); + g_signal_emit(G_OBJECT(t), tracker_signals[SIG_XCONF], 0, t->leftchan, t->num_channels, t->disp_numchans); +} + +void tracker_set_editing(Tracker* t, + gboolean is_editing) +{ + t->editing = is_editing; + tracker_redraw_current_row(t); } -void -tracker_set_patpos (Tracker *t, - int row) +void tracker_set_patpos(Tracker* t, + int row) { g_return_if_fail(t != NULL); g_return_if_fail((t->curpattern == NULL && row == 0) || (row < t->curpattern->length)); - if(t->patpos != row) { - t->patpos = row; - if(t->curpattern != NULL) { - if(t->inSelMode) { - /* Force re-draw of patterns in block selection mode */ - gtk_widget_queue_draw(GTK_WIDGET(t)); - } else { - tracker_idle_draw(t); - } - gtk_signal_emit(GTK_OBJECT(t), tracker_signals[SIG_PATPOS], row, t->curpattern->length, t->disp_rows); - } + if (t->patpos != row) { + t->patpos = row; + if (t->curpattern != NULL) { + if (t->inSelMode) { + /* Force re-draw of patterns in block selection mode */ + gtk_widget_queue_draw(GTK_WIDGET(t)); + } else { + tracker_idle_draw(t); + } + g_signal_emit(G_OBJECT(t), tracker_signals[SIG_PATPOS], 0, row); + } } } -void -tracker_redraw (Tracker *t) +void tracker_redraw(Tracker* t) { gtk_widget_queue_draw(GTK_WIDGET(t)); } -void -tracker_redraw_row (Tracker *t, - int row) +void tracker_redraw_row(Tracker* t, + int row) { - // This is yet to be optimized :-) + t->onlyrow = row; tracker_redraw(t); } -void -tracker_redraw_current_row (Tracker *t) +void tracker_redraw_current_row(Tracker* t) { tracker_redraw_row(t, t->patpos); } -void -tracker_set_pattern (Tracker *t, - XMPattern *pattern) +void tracker_set_pattern(Tracker* t, + XMPattern* pattern) { g_return_if_fail(t != NULL); - if(t->curpattern != pattern) { - t->curpattern = pattern; - if(pattern != NULL) { - if(t->patpos >= pattern->length) - t->patpos = pattern->length - 1; - gtk_signal_emit(GTK_OBJECT(t), tracker_signals[SIG_PATPOS], t->patpos, pattern->length, t->disp_rows); - } - gtk_widget_queue_draw(GTK_WIDGET(t)); + if (t->curpattern != pattern) { + t->curpattern = pattern; + if (pattern != NULL) { + if (t->patpos >= pattern->length) + t->patpos = pattern->length - 1; + g_signal_emit(G_OBJECT(t), tracker_signals[SIG_YCONF], 0, t->patpos, pattern->length, t->disp_rows); + gtk_widget_queue_draw(GTK_WIDGET(t)); + } } } -void -tracker_set_backing_store (Tracker *t, - int on) +void tracker_set_backing_store(Tracker* t, + int on) { - GtkWidget *widget; + GtkWidget* widget; g_return_if_fail(t != NULL); - if(on == t->enable_backing_store) - return; + if (on == t->enable_backing_store) + return; t->enable_backing_store = on; widget = GTK_WIDGET(t); - if(GTK_WIDGET_REALIZED(widget)) { - if(on) { - t->pixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1); - CLEAR(t->pixmap, 0, 0, widget->allocation.width, widget->allocation.height); - } else { - gdk_pixmap_unref(t->pixmap); - t->pixmap = NULL; - } - - gdk_gc_set_exposures(t->bg_gc, !on); - gtk_widget_queue_draw(GTK_WIDGET(t)); + if (gtk_widget_get_realized(widget)) { + if (on) { + t->pixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1); + t->drawable = di_get_drawable(t->pixmap); + CLEAR(t->drawable, 0, 0, widget->allocation.width, widget->allocation.height); + di_layout_set_drawable(t->layout, t->pixmap); + } else { + g_object_unref(t->pixmap); + t->pixmap = NULL; + } + + di_gc_set_exposures(t->bg_gc, !on); + gtk_widget_queue_draw(GTK_WIDGET(t)); } } -void -tracker_set_xpanning (Tracker *t, - int left_channel) +static void tracker_set_xpanning_full(Tracker* t, + int left_channel, gboolean signal) { - GtkWidget *widget; + GtkWidget* widget; g_return_if_fail(t != NULL); - - if(t->leftchan != left_channel) { - widget = GTK_WIDGET(t); - if(GTK_WIDGET_REALIZED(widget)) { - g_return_if_fail(left_channel + t->disp_numchans <= t->num_channels); - - t->leftchan = left_channel; - gtk_widget_queue_draw(GTK_WIDGET(t)); - - if(t->cursor_ch < t->leftchan) - t->cursor_ch = t->leftchan; - else if(t->cursor_ch >= t->leftchan + t->disp_numchans) - t->cursor_ch = t->leftchan + t->disp_numchans - 1; - } - gtk_signal_emit(GTK_OBJECT(t), tracker_signals[SIG_XPANNING], t->leftchan, t->num_channels, t->disp_numchans); + + if (t->leftchan != left_channel) { + widget = GTK_WIDGET(t); + if (gtk_widget_get_realized(widget)) { + g_return_if_fail(left_channel + t->disp_numchans <= t->num_channels); + + t->leftchan = left_channel; + gtk_widget_queue_draw(GTK_WIDGET(t)); + + if (t->cursor_ch < t->leftchan) + t->cursor_ch = t->leftchan; + else if (t->cursor_ch >= t->leftchan + t->disp_numchans) + t->cursor_ch = t->leftchan + t->disp_numchans - 1; + } + if (signal) + g_signal_emit(G_OBJECT(t), tracker_signals[SIG_XPANNING], 0, t->leftchan); } } +void tracker_set_xpanning(Tracker* t, + int left_channel) +{ + tracker_set_xpanning_full(t, left_channel, FALSE); +} + static void -adjust_xpanning (Tracker *t) +adjust_xpanning(Tracker* t, gboolean signal) { - if(t->cursor_ch < t->leftchan) - tracker_set_xpanning(t, t->cursor_ch); - else if(t->cursor_ch >= t->leftchan + t->disp_numchans) - tracker_set_xpanning(t, t->cursor_ch - t->disp_numchans + 1); - else if(t->leftchan + t->disp_numchans > t->num_channels) - tracker_set_xpanning(t, t->num_channels - t->disp_numchans); -} - -void -tracker_step_cursor_item (Tracker *t, - int direction) + if (t->cursor_ch < t->leftchan) + tracker_set_xpanning_full(t, t->cursor_ch, signal); + else if (t->cursor_ch >= t->leftchan + t->disp_numchans) + tracker_set_xpanning_full(t, t->cursor_ch - t->disp_numchans + 1, signal); + else if (t->leftchan + t->disp_numchans > t->num_channels) + tracker_set_xpanning_full(t, t->num_channels - t->disp_numchans, signal); +} + +void tracker_step_cursor_item(Tracker* t, + int direction) { - g_return_if_fail(direction == -1 || direction == 1); - t->cursor_item += direction; - if(t->cursor_item & (~7)) { - t->cursor_item &= 7; - tracker_step_cursor_channel(t, direction); - } else { - adjust_xpanning(t); - gtk_widget_queue_draw(GTK_WIDGET(t)); - } + if (t->cursor_item & (~7)) { + t->cursor_item &= 7; + tracker_step_cursor_channel(t, direction > 0 ? 1 : -1); + } else + gtk_widget_queue_draw(GTK_WIDGET(t)); } -void -tracker_set_cursor_item (Tracker *t, - int item) -{ - if (item < 0) item = 0; - if (item > 7) item = 7; +void tracker_set_cursor_item(Tracker* t, + int item) +{ + if (item < 0) + item = 0; + if (item > 7) + item = 7; t->cursor_item = item; - adjust_xpanning(t); gtk_widget_queue_draw(GTK_WIDGET(t)); } - -void -tracker_step_cursor_channel (Tracker *t, - int direction) + +void tracker_step_cursor_channel(Tracker* t, + int direction) { t->cursor_ch += direction; - - if(t->cursor_ch < 0) - t->cursor_ch = t->num_channels - 1; - else if(t->cursor_ch >= t->num_channels) - t->cursor_ch = 0; - - adjust_xpanning(t); - - if(t->inSelMode) { - /* Force re-draw of patterns in block selection mode */ - gtk_widget_queue_draw(GTK_WIDGET(t)); + + if (t->cursor_ch < 0) + t->cursor_ch = t->num_channels - 1; + else if (t->cursor_ch >= t->num_channels) + t->cursor_ch = 0; + + adjust_xpanning(t, TRUE); + + if (t->inSelMode) { + /* Force re-draw of patterns in block selection mode */ + gtk_widget_queue_draw(GTK_WIDGET(t)); } else { - tracker_idle_draw(t); + tracker_idle_draw(t); } } -void -tracker_set_cursor_channel (Tracker *t, - int channel) +void tracker_set_cursor_channel(Tracker* t, + int channel) { t->cursor_ch = channel; - if(t->cursor_ch < 0) - t->cursor_ch = 0; - else if(t->cursor_ch >= t->num_channels) - t->cursor_ch = t->num_channels - 1; - - adjust_xpanning(t); - - if(t->inSelMode) { - /* Force re-draw of patterns in block selection mode */ - gtk_widget_queue_draw(GTK_WIDGET(t)); + if (t->cursor_ch < 0) + t->cursor_ch = 0; + else if (t->cursor_ch >= t->num_channels) + t->cursor_ch = t->num_channels - 1; + + adjust_xpanning(t, TRUE); + + if (t->inSelMode) { + /* Force re-draw of patterns in block selection mode */ + gtk_widget_queue_draw(GTK_WIDGET(t)); } else { - tracker_idle_draw(t); + tracker_idle_draw(t); } } -void -tracker_step_cursor_row (Tracker *t, - int direction) +void tracker_step_cursor_row(Tracker* t, + int direction) { int newpos = t->patpos + direction; - while(newpos < 0) - newpos += t->curpattern->length; + while (newpos < 0) + newpos += t->curpattern->length; newpos %= t->curpattern->length; tracker_set_patpos(t, newpos); } -void -tracker_mark_selection (Tracker *t, - gboolean enable) -{ - if(!enable) { - t->sel_end_ch = t->cursor_ch; - t->sel_end_row = t->patpos; - t->inSelMode = FALSE; +void tracker_mark_selection(Tracker* t, + gboolean enable) +{ + if (!enable) { + t->sel_end_ch = t->cursor_ch; + t->sel_end_row = t->patpos; + t->inSelMode = FALSE; } else { - t->sel_start_ch = t->sel_end_ch = t->cursor_ch; - t->sel_start_row = t->sel_end_row = t->patpos; + t->sel_start_ch = t->sel_end_ch = t->cursor_ch; + t->sel_start_row = t->sel_end_row = t->patpos; t->inSelMode = TRUE; - tracker_redraw(t); + tracker_redraw(t); } } -void -tracker_clear_mark_selection (Tracker *t) +void tracker_clear_mark_selection(Tracker* t) { - if(t->sel_start_ch != -1) { - t->sel_start_ch = t->sel_end_ch = -1; - t->sel_start_row = t->sel_end_row = -1; - t->inSelMode = FALSE; - tracker_redraw(t); + if (t->sel_start_ch != -1) { + t->sel_start_ch = t->sel_end_ch = -1; + t->sel_start_row = t->sel_end_row = -1; + t->inSelMode = FALSE; + tracker_redraw(t); } } gboolean -tracker_is_in_selection_mode(Tracker *t) +tracker_is_in_selection_mode(Tracker* t) { return t->inSelMode; } -void -tracker_get_selection_rect(Tracker *t, - int *chStart, - int *rowStart, - int *nChannel, - int *nRows) -{ - if(!t->inSelMode) { - if(t->sel_start_ch <= t->sel_end_ch) { - *nChannel = t->sel_end_ch - t->sel_start_ch + 1; - *chStart = t->sel_start_ch; - } else { - *nChannel = t->sel_start_ch - t->sel_end_ch + 1; - *chStart = t->sel_end_ch; - } - if(t->sel_start_row <= t->sel_end_row) { - *nRows = t->sel_end_row - t->sel_start_row + 1; - *rowStart = t->sel_start_row; - } else { - *nRows = t->sel_start_row - t->sel_end_row + 1; - *rowStart = t->sel_end_row; - } +void tracker_get_selection_rect(Tracker* t, + int* chStart, + int* rowStart, + int* nChannel, + int* nRows) +{ + if (!t->inSelMode) { + if (t->sel_start_ch <= t->sel_end_ch) { + *nChannel = t->sel_end_ch - t->sel_start_ch + 1; + *chStart = t->sel_start_ch; + } else { + *nChannel = t->sel_start_ch - t->sel_end_ch + 1; + *chStart = t->sel_end_ch; + } + if (t->sel_start_row <= t->sel_end_row) { + *nRows = t->sel_end_row - t->sel_start_row + 1; + *rowStart = t->sel_start_row; + } else { + *nRows = t->sel_start_row - t->sel_end_row + 1; + *rowStart = t->sel_end_row; + } } else { - if(t->sel_start_ch <= t->cursor_ch) { - *nChannel = t->cursor_ch - t->sel_start_ch + 1; - *chStart = t->sel_start_ch; - } else { - *nChannel = t->sel_start_ch - t->cursor_ch + 1; - *chStart = t->cursor_ch; - } - if(t->sel_start_row <= t->patpos) { - *nRows = t->patpos - t->sel_start_row + 1; - *rowStart = t->sel_start_row; - } else { - *nRows = t->sel_start_row - t->patpos + 1; - *rowStart = t->patpos; - } + if (t->sel_start_ch <= t->cursor_ch) { + *nChannel = t->cursor_ch - t->sel_start_ch + 1; + *chStart = t->sel_start_ch; + } else { + *nChannel = t->sel_start_ch - t->cursor_ch + 1; + *chStart = t->cursor_ch; + } + if (t->sel_start_row <= t->patpos) { + *nRows = t->patpos - t->sel_start_row + 1; + *rowStart = t->sel_start_row; + } else { + *nRows = t->sel_start_row - t->patpos + 1; + *rowStart = t->patpos; + } } } gboolean -tracker_is_valid_selection(Tracker *t) +tracker_is_valid_selection(Tracker* t) { - return (t->sel_start_ch >= 0 && t->sel_start_ch < xm->num_channels && - t->sel_end_ch >= 0 && t->sel_end_ch < xm->num_channels && - t->sel_start_row >= 0 && t->sel_start_row < t->curpattern->length && - t->sel_end_row >= 0 && t->sel_end_row < t->curpattern->length); + return (t->sel_start_ch >= 0 && t->sel_start_ch < xm->num_channels && t->sel_end_ch >= 0 && t->sel_end_ch < xm->num_channels && t->sel_start_row >= 0 && t->sel_start_row < t->curpattern->length && t->sel_end_row >= 0 && t->sel_end_row < t->curpattern->length); } -static void -note2string (XMNote *note, - char *buf) +#define PUT_WIDE(buf, pos, symbol) memcpy(&buf[pos], symbol, sizeof(symbol) - 1);\ + pos += sizeof(symbol) - 1; + +static guint +note2string(XMNote* note, + char* buf) { static const char hexmapU[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', @@ -421,101 +420,171 @@ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; + static const char uparrow[] = "\342\206\221", downarrow[] = "\342\206\223", + dtilde[] = "\342\211\210", notesym[] = "\342\231\251"; - const char *hexmap = gui_settings.tracker_upcase ? hexmapU : hexmapL; + const char* hexmap = gui_settings.tracker_upcase ? hexmapU : hexmapL; - if(note->note > 0 && note->note < 97) { - int index = (gui_settings.sharp ? 0 : 1) + (gui_settings.bh ? 2 : 0); - buf[0] = notenames[index][note->note-1][0]; - buf[1] = notenames[index][note->note-1][1]; - buf[2] = notenames[index][note->note-1][2]; - } else if(note->note == 97) { - buf[0] = '['; - buf[1] = '-'; - buf[2] = ']'; + guint i = 0; + guchar eff = note->volume >> 4; + + if (note->note > 0 && note->note < XM_PATTERN_NOTE_OFF) { + int index = (gui_settings.sharp ? 0 : 1) + (gui_settings.bh ? 2 : 0); + buf[i++] = notenames[index][note->note - 1][0]; + buf[i++] = notenames[index][note->note - 1][1]; + buf[i++] = notenames[index][note->note - 1][2]; + } else if (note->note == XM_PATTERN_NOTE_OFF) { + buf[i++] = '['; + buf[i++] = '-'; + buf[i++] = ']'; } else { - buf[0] = gui_settings.tracker_line_format[0]; - buf[1] = gui_settings.tracker_line_format[1]; - buf[2] = gui_settings.tracker_line_format[2]; + buf[i++] = gui_settings.tracker_line_format[0]; + buf[i++] = gui_settings.tracker_line_format[1]; + buf[i++] = gui_settings.tracker_line_format[2]; } // Instrument number always displayed in Dec, because the spin // buttons use Dec as well. - if(note->instrument >= 100) { - buf[3] = '1'; + if (note->instrument >= 100) { + buf[i++] = '1'; + } else { + buf[i++] = ' '; + } + + if (!note->instrument) { + buf[i++] = gui_settings.tracker_line_format[3]; + buf[i++] = gui_settings.tracker_line_format[4]; } else { - buf[3] = ' '; + buf[i++] = ((note->instrument / 10) % 10) + '0'; + buf[i++] = (note->instrument % 10) + '0'; } - buf[4] = ((note->instrument / 10) % 10) + '0'; - buf[5] = (note->instrument % 10) + '0'; - - if(!note->instrument) { - buf[4] = gui_settings.tracker_line_format[3]; - buf[5] = gui_settings.tracker_line_format[4]; - } - - buf[6] = ' '; - - if(note->volume) { - buf[7] = hexmap[note->volume / 16]; - buf[8] = hexmap[note->volume & 15]; + + buf[i++] = ' '; + + if (gui_settings.tracker_ft2_volume) { + if (gui_settings.tracker_vol_dec && + note->volume >= 0x10 && note->volume <= 0x50) { + /* 3 because of trailing \0 which will bw overwritten by futher symbols */ + g_snprintf(&buf[i], 3, "%02d", note->volume - 0x10); + i += 2; + } else if (eff == 0) { + buf[i++] = gui_settings.tracker_line_format[5]; + buf[i++] = gui_settings.tracker_line_format[6]; + } else { + gboolean use_wide = gui_settings.tracker_ft2_wide; + + switch (eff) { + case 1 ... 5: + buf[i++] = eff - 1 + '0'; + break; + case 6: + buf[i++] = '-'; + break; + case 7: + buf[i++] = '+'; + break; + case 8: + if (use_wide) { + PUT_WIDE(buf, i, downarrow); + } else + buf[i++] = 'd'; + break; + case 9: + if (use_wide) { + PUT_WIDE(buf, i, uparrow); + } else + buf[i++] = 'u'; + break; + case 0xa: /* Set vibrato speed */ + buf[i++] = 's'; + break; + case 0xb: /* Vibrato */ + if (use_wide) { + PUT_WIDE(buf, i, dtilde); + } else + buf[i++] = 'v'; + break; + case 0xc: /* Panning */ + buf[i++] = 'p'; + break; + case 0xd: /* Pan left */ + buf[i++] = '<'; /* Looks better than left arrow */ + break; + case 0xe: /* Pan right */ + buf[i++] = '>'; + break; + case 0xf: /* Note porta */ + if (use_wide && !gui_settings.tracker_ft2_tpm) { + PUT_WIDE(buf, i, notesym); + } else + buf[i++] = 'm'; + break; + } + buf[i++] = hexmap[note->volume & 15]; + } } else { - buf[7] = gui_settings.tracker_line_format[5]; - buf[8] = gui_settings.tracker_line_format[6]; + if (note->volume) { + buf[i++] = hexmap[eff]; + buf[i++] = hexmap[note->volume & 15]; + } else { + buf[i++] = gui_settings.tracker_line_format[5]; + buf[i++] = gui_settings.tracker_line_format[6]; + } } - - buf[9] = ' '; - if(!note->fxtype && !note->fxparam) { - buf[10] = gui_settings.tracker_line_format[7]; - buf[11] = gui_settings.tracker_line_format[8]; - buf[12] = gui_settings.tracker_line_format[9]; + buf[i++] = ' '; + + if (!note->fxtype && !note->fxparam) { + buf[i++] = gui_settings.tracker_line_format[7]; + buf[i++] = gui_settings.tracker_line_format[8]; + buf[i++] = gui_settings.tracker_line_format[9]; } else { - buf[10] = hexmap[note->fxtype]; - buf[11] = hexmap[note->fxparam / 16]; - buf[12] = hexmap[note->fxparam & 15]; - } - - buf[13] = ' '; - buf[14] = ' '; - buf[15] = 0; + /* Emulate FT2 behaviour on probably broken files */ + buf[i++] = hexmap[note->fxtype < 36 ? note->fxtype : 0]; + buf[i++] = hexmap[note->fxparam >> 4]; + buf[i++] = hexmap[note->fxparam & 15]; + } + + buf[i++] = ' '; + + return i; } static void -tracker_clear_notes_line (GtkWidget *widget, - GdkDrawable *win, - int y, - int pattern_row) +tracker_clear_notes_line(GtkWidget* widget, + DIDrawable win, + int y, + int pattern_row) { - Tracker *t = TRACKER(widget); - GdkGC *gc; + Tracker* t = TRACKER(widget); + DIGC gc; gc = t->bg_gc; - if(pattern_row == t->patpos) { - gc = t->bg_cursor_gc; // cursor line - } else if(gui_settings.highlight_rows) { - if (pattern_row % gui_settings.highlight_rows_n == 0) { - gc = t->bg_majhigh_gc; // highlighted line - } else if(pattern_row % gui_settings.highlight_rows_minor_n == 0) { - gc = t->bg_minhigh_gc; // minor highlighted line - } - } - - gdk_draw_rectangle(win, gc, TRUE, 0, y, widget->allocation.width, t->fonth); + if (pattern_row == t->patpos) { + gc = t->bg_cursor_gc; // cursor line + } else if (gui_settings.highlight_rows) { + if (pattern_row % gui_settings.highlight_rows_n == 0) { + gc = t->bg_majhigh_gc; // highlighted line + } else if (pattern_row % gui_settings.highlight_rows_minor_n == 0) { + gc = t->bg_minhigh_gc; // minor highlighted line + } + } + + di_draw_rectangle(win, gc, TRUE, 0, y, widget->allocation.width, t->fonth); } static void -print_notes_line (GtkWidget *widget, - GdkDrawable *win, - int y, - int ch, - int numch, - int row) -{ - Tracker *t = TRACKER(widget); - char buf[32*15]; - char *bufpt; +print_notes_line(GtkWidget* widget, + DIDrawable win, + int y, + int ch, + int numch, + int row) +{ + Tracker* t = TRACKER(widget); + static char buf[32 * 18]; + gint bufpt; int xBlock, BlockWidth, rowBlockStart, rowBlockEnd, chBlockStart, chBlockEnd; g_return_if_fail(ch + numch <= t->num_channels); @@ -524,100 +593,99 @@ /* -- Draw selection highlighting if necessary -- */ /* Calc starting and ending rows */ - if(t->inSelMode) { - if(t->sel_start_row < t->patpos) { - rowBlockStart = t->sel_start_row; - rowBlockEnd = t->patpos; - } else { - rowBlockEnd = t->sel_start_row; - rowBlockStart = t->patpos; - } - } else if(t->sel_start_row < t->sel_end_row) { - rowBlockStart = t->sel_start_row; - rowBlockEnd = t->sel_end_row; + if (t->inSelMode) { + if (t->sel_start_row < t->patpos) { + rowBlockStart = t->sel_start_row; + rowBlockEnd = t->patpos; + } else { + rowBlockEnd = t->sel_start_row; + rowBlockStart = t->patpos; + } + } else if (t->sel_start_row < t->sel_end_row) { + rowBlockStart = t->sel_start_row; + rowBlockEnd = t->sel_end_row; } else { - rowBlockEnd = t->sel_start_row; - rowBlockStart = t->sel_end_row; + rowBlockEnd = t->sel_start_row; + rowBlockStart = t->sel_end_row; } - if(row >= rowBlockStart && row <= rowBlockEnd) { - /* Calc bar origin and size */ - if(t->inSelMode) { - if(t->sel_start_ch <= t->cursor_ch) { - chBlockStart = t->sel_start_ch; - chBlockEnd = t->cursor_ch; - } else { - chBlockStart = t->cursor_ch; - chBlockEnd = t->sel_start_ch; - } - } else if(t->sel_start_ch <= t->sel_end_ch) { - chBlockStart = t->sel_start_ch; - chBlockEnd = t->sel_end_ch; - } else { - chBlockStart = t->sel_end_ch; - chBlockEnd = t->sel_start_ch; - } - - xBlock = t->disp_startx + (chBlockStart - ch) * t->disp_chanwidth; - if(xBlock < 0 && chBlockEnd >= ch) { - xBlock = t->disp_startx; - } - BlockWidth = (chBlockEnd - (ch > chBlockStart ? ch : chBlockStart) + 1) * t->disp_chanwidth; - if(BlockWidth > numch * t->disp_chanwidth) { - BlockWidth = (numch - (chBlockStart > ch ? chBlockStart - ch : 0)) * t->disp_chanwidth; - } - - /* Draw only if in bounds */ - if(xBlock >= t->disp_startx && xBlock < t->disp_startx + numch * t->disp_chanwidth) { - gdk_gc_set_foreground(t->misc_gc, &t->colors[TRACKERCOL_BG_SELECTION]); - gdk_draw_rectangle(win, t->misc_gc, TRUE, xBlock, y, BlockWidth, t->fonth); - } + if (row >= rowBlockStart && row <= rowBlockEnd) { + /* Calc bar origin and size */ + if (t->inSelMode) { + if (t->sel_start_ch <= t->cursor_ch) { + chBlockStart = t->sel_start_ch; + chBlockEnd = t->cursor_ch; + } else { + chBlockStart = t->cursor_ch; + chBlockEnd = t->sel_start_ch; + } + } else if (t->sel_start_ch <= t->sel_end_ch) { + chBlockStart = t->sel_start_ch; + chBlockEnd = t->sel_end_ch; + } else { + chBlockStart = t->sel_end_ch; + chBlockEnd = t->sel_start_ch; + } + + xBlock = t->disp_startx + (chBlockStart - ch) * t->disp_chanwidth; + if (xBlock < 0 && chBlockEnd >= ch) { + xBlock = t->disp_startx; + } + BlockWidth = (chBlockEnd - (ch > chBlockStart ? ch : chBlockStart) + 1) * t->disp_chanwidth; + if (BlockWidth > numch * t->disp_chanwidth) { + BlockWidth = (numch - (chBlockStart > ch ? chBlockStart - ch : 0)) * t->disp_chanwidth; + } + + /* Draw only if in bounds */ + if (xBlock >= t->disp_startx && xBlock < t->disp_startx + numch * t->disp_chanwidth) + di_draw_rectangle(win, row == t->patpos ? t->bg_csel_gc : t->bg_sel_gc, TRUE, xBlock - 1, y, BlockWidth, t->fonth); } /* -- Draw the actual row contents -- */ - y += t->font->ascent + t->baselineskip; + y += t->baselineskip; /* The row number */ - if(gui_settings.tracker_hexmode) { - if(gui_settings.tracker_upcase) sprintf(buf, "%02X", row); - else sprintf(buf, "%02x", row); + if (gui_settings.tracker_hexmode) { + if (gui_settings.tracker_upcase) + g_sprintf(buf, "%02X", row); + else + g_sprintf(buf, "%02x", row); } else { - sprintf(buf, "%03d", row); + g_sprintf(buf, "%03d", row); } + di_draw_text(t->layout, t->notes_color, buf, -1, 5, y); - gdk_draw_string(win, t->font, t->notes_gc, 5, y, buf); - /* The notes */ - for(numch += ch, bufpt = buf; ch < numch; ch++, bufpt += 14) { - note2string(&t->curpattern->channels[ch][row], bufpt); - } - - gdk_draw_string(win, t->font, t->notes_gc, t->disp_startx, y, buf); + for (numch += ch, bufpt = 0; ch < numch; ch++) { + bufpt += note2string(&t->curpattern->channels[ch][row], &buf[bufpt]); + } + buf[bufpt] = '\0'; + di_draw_text(t->layout, t->notes_color, buf, -1, t->disp_startx, y); } static void -print_notes_and_bars (GtkWidget *widget, - GdkDrawable *win, - int x, - int y, - int w, - int h, - int cursor_row) +print_notes_and_bars(GtkWidget* widget, + DIDrawable win, + int x, + int y, + int w, + int h, + int cursor_row) { int scry; int n, n1, n2; int my; - Tracker *t = TRACKER(widget); + Tracker* t = TRACKER(widget); int i, x1, y1; /* Limit y and h to the actually used window portion */ my = y - t->disp_starty; - if(my < 0) { - my = 0; - h += my; + if (my < 0) { + my = 0; + h += my; } - if(my + h > t->fonth * t->disp_rows) { - h = t->fonth * t->disp_rows - my; + if (my + h > t->fonth * t->disp_rows) { + h = t->fonth * t->disp_rows - my; } /* Calculate first and last line to be redrawn */ @@ -626,56 +694,54 @@ /* Print the notes */ scry = t->disp_starty + n1 * t->fonth; - for(i = n1; i <= n2; i++, scry += t->fonth) { - n = i + cursor_row - t->disp_cursor; - if(n >= 0 && n < t->curpattern->length) { - print_notes_line(widget, win, scry, t->leftchan, t->disp_numchans, n); - } else { - CLEAR(win, 0, scry, widget->allocation.width, t->fonth); - } + for (i = n1; i <= n2; i++, scry += t->fonth) { + n = i + cursor_row - t->disp_cursor; + if (n >= 0 && n < t->curpattern->length) { + print_notes_line(widget, win, scry, t->leftchan, t->disp_numchans, n); + } else { + CLEAR(win, 0, scry, widget->allocation.width, t->fonth); + } } /* Draw the separation bars */ - gdk_gc_set_foreground(t->misc_gc, &t->colors[TRACKERCOL_BARS]); x1 = t->disp_startx - 2; - y1 = t->disp_starty + n1 * t->fonth - t->fonth; + y1 = t->disp_starty + n1 * t->fonth; h = (n2 - n1 + 2) * t->fonth; - for(i = 0; i <= t->disp_numchans; i++, x1 += t->disp_chanwidth) { - gdk_draw_line(win, t->misc_gc, x1, y1, x1, y1+h); + for (i = 0; i <= t->disp_numchans; i++, x1 += t->disp_chanwidth) { + di_draw_line(win, t->bars_gc, x1, y1, x1, y1 + h - t->fonth); } } static void -print_channel_numbers (GtkWidget *widget, - GdkDrawable *win) +print_channel_numbers(GtkWidget* widget, DIDrawable win) { - int x, y, i; + int x, x1, y, i; char buf[5]; - Tracker *t = TRACKER(widget); + Tracker* t = TRACKER(widget); - if(0 /* !gui_settings.channel_numbering */) { - return; - } + x = t->disp_startx + (t->disp_chanwidth - (2 * t->fontw)) / 2; + y = t->disp_starty + t->baselineskip - t->fonth; + di_draw_rectangle(win, t->bg_gc, TRUE, 0, t->disp_starty - t->fonth - 1, widget->allocation.width, t->fonth + 1); - gdk_gc_set_foreground(t->misc_gc, &t->colors[TRACKERCOL_CHANNUMS]); + x1 = t->disp_startx - 2; - x = t->disp_startx + (t->disp_chanwidth - (2 * t->fontw)) / 2; - y = t->disp_starty + t->font->ascent + t->baselineskip - t->fonth; - for(i = 1; i <= t->disp_numchans; i++, x += t->disp_chanwidth) { - sprintf(buf, "%2d", i + t->leftchan); - if(gui_settings.permanent_channels & (1 << (i + t->leftchan - 1))) - strcat(buf, "*"); - gdk_draw_rectangle(win, t->bg_gc, TRUE, x, t->disp_starty - t->fonth, 3*t->fontw, t->fonth); - gdk_draw_string(win, t->font, t->misc_gc, x, y, buf); + for (i = 1; i <= t->disp_numchans; i++, x += t->disp_chanwidth, x1 += t->disp_chanwidth) { + g_sprintf(buf, "%2d", i + t->leftchan); + if (gui_settings.permanent_channels & (1 << (i + t->leftchan - 1))) + strcat(buf, "*"); + di_draw_text(t->layout, t->channums_color, buf, -1, x, y); + /* The beginnings of the separation bars */ + di_draw_line(win, t->bars_gc, x1, t->disp_starty - t->fonth - 1, x1, t->disp_starty); } + di_draw_line(win, t->bars_gc, x1, t->disp_starty - t->fonth - 1, x1, t->disp_starty); } static void -print_cursor (GtkWidget *widget, - GdkDrawable *win) +print_cursor(GtkWidget* widget, + DIDrawable win) { int x, y, width; - Tracker *t = TRACKER(widget); + Tracker* t = TRACKER(widget); g_return_if_fail(t->cursor_ch >= t->leftchan && t->cursor_ch < t->leftchan + t->disp_numchans); g_return_if_fail((unsigned)t->cursor_item <= 7); @@ -684,291 +750,292 @@ x = 0; y = t->disp_starty + t->disp_cursor * t->fonth; - switch(t->cursor_item) { + switch (t->cursor_item) { case 0: /* note */ - width = 3; - break; + width = 3; + break; case 1: /* instrument 0 */ - x = 4; - break; + x = 4; + break; case 2: /* instrument 1 */ - x = 5; - break; + x = 5; + break; case 3: /* volume 0 */ - x = 7; - break; + x = 7; + break; case 4: /* volume 1 */ - x = 8; - break; + x = 8; + break; case 5: /* effect 0 */ - x = 10; - break; + x = 10; + break; case 6: /* effect 1 */ - x = 11; - break; + x = 11; + break; case 7: /* effect 2 */ - x = 12; - break; + x = 12; + break; default: - g_assert_not_reached(); - break; + g_assert_not_reached(); + break; } - x = x * t->fontw + t->disp_startx + (t->cursor_ch - t->leftchan) * t->disp_chanwidth - 1; + x = x * t->fontw + t->disp_startx + (t->cursor_ch - t->leftchan) * t->disp_chanwidth - 1; - - if (GTK_TOGGLE_BUTTON(editing_toggle)->active) - gdk_gc_set_foreground(t->misc_gc, &t->colors[TRACKERCOL_CURSOR_EDIT]); - else - gdk_gc_set_foreground(t->misc_gc, &t->colors[TRACKERCOL_CURSOR]); - - gdk_draw_rectangle(win, t->misc_gc, FALSE, x, y, width * t->fontw, t->fonth - 1); + di_draw_rectangle(win, t->editing ? t->cur_e_gc : t->cur_gc, + FALSE, x, y, width * t->fontw + 1, t->fonth - 1); } static void -tracker_draw_clever (GtkWidget *widget, - GdkRectangle *area) +tracker_draw_clever(GtkWidget* widget, + GdkRectangle* area) { - Tracker *t; - int dist, absdist; - int y, redrawcnt; - GdkWindow *win; - int fonth; + Tracker* t; + DIDrawable win, pmap; + gint fonth; g_return_if_fail(widget != NULL); - if(!GTK_WIDGET_VISIBLE(widget)) - return; + if (!gtk_widget_get_visible(widget)) + return; t = TRACKER(widget); g_return_if_fail(t->curpattern != NULL); - win = t->enable_backing_store ? (GdkWindow*)t->pixmap : widget->window; + win = di_get_drawable(widget->window); + if (t->enable_backing_store) + pmap = t->drawable; + else { + pmap = win; + di_layout_set_drawable(t->layout, widget->window); + } + fonth = t->fonth; - dist = t->patpos - t->oldpos; - absdist = ABS(dist); - t->oldpos = t->patpos; - - redrawcnt = t->disp_rows; - y = t->disp_starty; - - if(absdist <= t->disp_cursor) { - /* Before scrolling, redraw cursor line in the old picture; - better than scrolling first and then redrawing the old - cursor line (prevents flickering) */ - print_notes_and_bars(widget, win, - 0, (t->disp_cursor) * fonth + t->disp_starty, - widget->allocation.width, fonth, t->oldpos - dist); - } - - if(absdist < t->disp_rows) { - /* this is interesting. we don't have to redraw the whole area, we can optimize - by scrolling around instead. */ - if(dist > 0) { - /* go down in pattern -- scroll up */ - redrawcnt = absdist; - gdk_window_copy_area(win, t->bg_gc, - 0, y, win, - 0, y + (absdist * fonth), - widget->allocation.width, (t->disp_rows - absdist) * fonth); - y += (t->disp_rows - absdist) * fonth; - } else if(dist < 0) { - /* go up in pattern -- scroll down */ - if(1 /* gui_settings.channel_numbering */) { - /* Redraw line displaying the channel numbers before scrolling down */ - print_notes_and_bars(widget, win, - 0, t->disp_starty, - widget->allocation.width, fonth, t->oldpos - dist); - } - redrawcnt = absdist; - gdk_window_copy_area(win, t->bg_gc, - 0, y + (absdist * fonth), win, 0, y, - widget->allocation.width, (t->disp_rows - absdist) * fonth); - } - } - - if(dist != 0) { - print_notes_and_bars(widget, win, 0, y, widget->allocation.width, redrawcnt * fonth, t->oldpos); - print_channel_numbers(widget, win); - } - - /* update the cursor */ - print_notes_and_bars(widget, win, - 0, t->disp_cursor * fonth + t->disp_starty, - widget->allocation.width, fonth, t->oldpos); - print_cursor(widget, win); - - if(t->enable_backing_store) { - gdk_draw_pixmap(widget->window, t->bg_gc, t->pixmap, - area->x, area->y, - area->x, area->y, - area->width, area->height); + if (t->onlyrow >= 0) { + gint i; + gint x1 = t->disp_startx - 2; + gint y1 = t->disp_starty + (t->disp_cursor - t->oldpos + t->onlyrow) * fonth; + + print_notes_line(widget, pmap, y1, + t->leftchan, t->disp_numchans, t->onlyrow); + for (i = 0; i <= t->disp_numchans; i++, x1 += t->disp_chanwidth) + di_draw_line(pmap, t->bars_gc, x1, y1, x1, y1 + fonth); + if (t->onlyrow == t->patpos) + print_cursor(widget, pmap); + + if (t->enable_backing_store) { + di_draw_drawable(win, t->bg_gc, pmap, + area->x, y1, + area->x, y1, + area->width, fonth); + } + + t->onlyrow = -1; + } else { + gint dist, absdist; + gint y, redrawcnt; + + dist = t->patpos - t->oldpos; + absdist = ABS(dist); + t->oldpos = t->patpos; + + redrawcnt = t->disp_rows; + y = t->disp_starty; + + if (absdist <= t->disp_cursor) { + /* Before scrolling, redraw cursor line in the old picture; + better than scrolling first and then redrawing the old + cursor line (prevents flickering) */ + print_notes_and_bars(widget, pmap, + 0, (t->disp_cursor) * fonth + t->disp_starty, + widget->allocation.width, fonth, t->oldpos - dist); + } + + if (absdist < t->disp_rows) { + /* this is interesting. we don't have to redraw the whole area, we can optimize + by scrolling around instead. */ + if (dist > 0) { + /* go down in pattern -- scroll up */ + redrawcnt = absdist; + di_draw_drawable(pmap, t->bg_gc, pmap, + 0, y + (absdist * fonth), 0, y, + widget->allocation.width, (t->disp_rows - absdist) * fonth); + y += (t->disp_rows - absdist) * fonth; + } else if (dist < 0) { + /* go up in pattern -- scroll down */ + if (1 /* gui_settings.channel_numbering */) { + /* Redraw line displaying the channel numbers before scrolling down */ + print_notes_and_bars(widget, pmap, + 0, t->disp_starty, + widget->allocation.width, fonth, t->oldpos - dist); + } + redrawcnt = absdist; + di_draw_drawable(pmap, t->bg_gc, pmap, + 0, y, 0, y + (absdist * fonth), + widget->allocation.width, (t->disp_rows - absdist) * fonth); + } + } + + if (dist != 0) { + print_notes_and_bars(widget, pmap, 0, y, widget->allocation.width, redrawcnt * fonth, t->oldpos); + print_channel_numbers(widget, pmap); + } + + /* update the cursor */ + print_notes_and_bars(widget, pmap, + 0, t->disp_cursor * fonth + t->disp_starty, + widget->allocation.width, fonth, t->oldpos); + print_cursor(widget, pmap); + + if (t->enable_backing_store) { + di_draw_drawable(win, t->bg_gc, pmap, + area->x, area->y, + area->x, area->y, + area->width, area->height); + } } } static void -tracker_draw_stupid (GtkWidget *widget, - GdkRectangle *area) +tracker_draw_stupid(GtkWidget* widget, + GdkRectangle* area) { - Tracker *t = TRACKER(widget); + Tracker* t = TRACKER(widget); - t->oldpos = -666; + if (t->onlyrow < 0) + t->oldpos = -666; tracker_draw_clever(widget, area); } -static void -tracker_draw (GtkWidget *widget, - GdkRectangle *area) -{ - tracker_draw_stupid(widget, area); -} - static gint -tracker_expose (GtkWidget *widget, - GdkEventExpose *event) +tracker_expose(GtkWidget* widget, + GdkEventExpose* event) { tracker_draw_stupid(widget, &event->area); return FALSE; } static gint -tracker_idle_draw_function (Tracker *t) +tracker_idle_draw_function(Tracker* t) { - GtkWidget *widget = GTK_WIDGET(t); + GtkWidget* widget = GTK_WIDGET(t); GdkRectangle area = { 0, 0, widget->allocation.width, widget->allocation.height }; - if(GTK_WIDGET_MAPPED(GTK_WIDGET(t))) { - tracker_draw_clever(GTK_WIDGET(t), &area); + if (gtk_widget_get_mapped(GTK_WIDGET(t))) { + tracker_draw_clever(GTK_WIDGET(t), &area); } - gtk_idle_remove(t->idle_handler); t->idle_handler = 0; - return TRUE; + return FALSE; } static void -tracker_size_request (GtkWidget *widget, - GtkRequisition *requisition) +tracker_size_request(GtkWidget* widget, + GtkRequisition* requisition) { - Tracker *t = TRACKER(widget); - requisition->width = 14 * t->fontw + 3*t->fontw + 10; - requisition->height = 11*t->fonth; + Tracker* t = TRACKER(widget); + requisition->width = 14 * t->fontw + 3 * t->fontw + 10; + requisition->height = 11 * t->fonth; } static void -init_display (Tracker *t, - int width, - int height) +init_display(Tracker* t, + int width, + int height, + gboolean signals) { - GtkWidget *widget = GTK_WIDGET(t); + GtkWidget* widget = GTK_WIDGET(t); int u; int line_numbers_space = 3 * t->fontw; - if(!gui_settings.tracker_hexmode) { - line_numbers_space += 1 * t->fontw; // Line numbers take up more space in decimal mode + if (!gui_settings.tracker_hexmode) { + line_numbers_space += 1 * t->fontw; // Line numbers take up more space in decimal mode } t->disp_rows = height / t->fonth; - if(!(t->disp_rows % 2)) - t->disp_rows--; + if (!(t->disp_rows % 2)) + t->disp_rows--; t->disp_cursor = t->disp_rows / 2; t->disp_starty = (height - t->fonth * t->disp_rows) / 2 + t->fonth; - t->disp_rows--; + t->disp_rows--; - t->disp_chanwidth = 14 * t->fontw; u = width - line_numbers_space - 10; t->disp_numchans = u / t->disp_chanwidth; - + g_return_if_fail(xm != NULL); - if(t->disp_numchans > t->num_channels) - t->disp_numchans = t->num_channels; + if (t->disp_numchans > t->num_channels) + t->disp_numchans = t->num_channels; t->disp_startx = (u - t->disp_numchans * t->disp_chanwidth) / 2 + line_numbers_space + 5; - adjust_xpanning(t); + adjust_xpanning(t, FALSE); + + if (t->curpattern && signals) { + g_signal_emit(G_OBJECT(t), tracker_signals[SIG_YCONF], 0, t->patpos, t->curpattern->length, t->disp_rows); + g_signal_emit(G_OBJECT(t), tracker_signals[SIG_XCONF], 0, t->leftchan, t->num_channels, t->disp_numchans); + } - if(t->curpattern) { - gtk_signal_emit(GTK_OBJECT(t), tracker_signals[SIG_PATPOS], t->patpos, t->curpattern->length, t->disp_rows); - gtk_signal_emit(GTK_OBJECT(t), tracker_signals[SIG_XPANNING], t->leftchan, t->num_channels, t->disp_numchans); - } - - if(t->enable_backing_store) { - if(t->pixmap) { - gdk_pixmap_unref(t->pixmap); - } - t->pixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1); - CLEAR(t->pixmap, 0, 0, widget->allocation.width, widget->allocation.height); + if (t->enable_backing_store) { + if (t->pixmap) { + g_object_unref(t->pixmap); + } + t->pixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1); + t->drawable = di_get_drawable(t->pixmap); + CLEAR(t->drawable, 0, 0, widget->allocation.width, widget->allocation.height); + di_layout_set_drawable(t->layout, t->pixmap); } } static void -tracker_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) +tracker_size_allocate(GtkWidget* widget, + GtkAllocation* allocation) { - Tracker *t; - - g_return_if_fail (widget != NULL); - g_return_if_fail (IS_TRACKER (widget)); - g_return_if_fail (allocation != NULL); + Tracker* t; + + g_return_if_fail(widget != NULL); + g_return_if_fail(IS_TRACKER(widget)); + g_return_if_fail(allocation != NULL); widget->allocation = *allocation; - if (GTK_WIDGET_REALIZED (widget)) { - t = TRACKER (widget); - - gdk_window_move_resize (widget->window, - allocation->x, allocation->y, - allocation->width, allocation->height); + if (gtk_widget_get_realized(widget)) { + t = TRACKER(widget); + + gdk_window_move_resize(widget->window, + allocation->x, allocation->y, + allocation->width, allocation->height); - init_display(t, allocation->width, allocation->height); + init_display(t, allocation->width, allocation->height, TRUE); } } -void -tracker_reset (Tracker *t) +void tracker_reset(Tracker* t) { - GtkWidget *widget; + GtkWidget* widget; g_return_if_fail(t != NULL); widget = GTK_WIDGET(t); - if(GTK_WIDGET_REALIZED(widget)) { - init_display(t, widget->allocation.width, widget->allocation.height); - t->patpos = 0; - t->cursor_ch = 0; - t->cursor_item = 0; - t->leftchan = 0; - adjust_xpanning(t); - gtk_widget_queue_draw(GTK_WIDGET(t)); + if (gtk_widget_get_realized(widget)) { + t->patpos = 0; + t->cursor_ch = 0; + t->cursor_item = 0; + t->leftchan = 0; + init_display(t, widget->allocation.width, widget->allocation.height, TRUE); + gtk_widget_queue_draw(GTK_WIDGET(t)); } } static void -init_colors (GtkWidget *widget) -{ - int n; - const int *p; - GdkColor *c; - - for (n = 0, p = default_colors, c = TRACKER(widget)->colors; n < TRACKERCOL_LAST; n++, c++) { - c->red = *p++ * 65535 / 255; - c->green = *p++ * 65535 / 255; - c->blue = *p++ * 65535 / 255; - c->pixel = (gulong)((c->red & 0xff00)*256 + (c->green & 0xff00) + (c->blue & 0xff00)/256); - gdk_color_alloc(gtk_widget_get_colormap(widget), c); - } -} - -static void -tracker_realize (GtkWidget *widget) +tracker_realize(GtkWidget* widget) { GdkWindowAttr attributes; gint attributes_mask; - Tracker *t; + Tracker* t; - g_return_if_fail (widget != NULL); - g_return_if_fail (IS_TRACKER (widget)); - - GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + g_return_if_fail(widget != NULL); + g_return_if_fail(IS_TRACKER(widget)); + + gtk_widget_set_realized(widget, TRUE); t = TRACKER(widget); attributes.x = widget->allocation.x; @@ -977,392 +1044,561 @@ attributes.height = widget->allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; attributes.window_type = GDK_WINDOW_CHILD; - attributes.event_mask = gtk_widget_get_events (widget) | - GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK; - - attributes.visual = gtk_widget_get_visual (widget); - attributes.colormap = gtk_widget_get_colormap (widget); - - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; - widget->window = gdk_window_new (widget->parent->window, &attributes, attributes_mask); + attributes.event_mask = gtk_widget_get_events(widget) | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK; - widget->style = gtk_style_attach (widget->style, widget->window); + attributes.visual = gtk_widget_get_visual(widget); + attributes.colormap = gtk_widget_get_colormap(widget); - init_colors(widget); + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; + widget->window = gdk_window_new(widget->parent->window, &attributes, attributes_mask); - t->bg_gc = gdk_gc_new(widget->window); - t->bg_cursor_gc = gdk_gc_new(widget->window); - t->bg_majhigh_gc = gdk_gc_new(widget->window); - t->bg_minhigh_gc = gdk_gc_new(widget->window); - t->notes_gc = gdk_gc_new(widget->window); - t->misc_gc = gdk_gc_new(widget->window); - gdk_gc_set_foreground(t->bg_gc, &t->colors[TRACKERCOL_BG]); - gdk_gc_set_foreground(t->bg_cursor_gc, &t->colors[TRACKERCOL_BG_CURSOR]); - gdk_gc_set_foreground(t->bg_majhigh_gc, &t->colors[TRACKERCOL_BG_MAJHIGH]); - gdk_gc_set_foreground(t->bg_minhigh_gc, &t->colors[TRACKERCOL_BG_MINHIGH]); - gdk_gc_set_foreground(t->notes_gc, &t->colors[TRACKERCOL_NOTES]); + widget->style = gtk_style_attach(widget->style, widget->window); - if(!t->enable_backing_store) - gdk_gc_set_exposures (t->bg_gc, 1); /* man XCopyArea, grep exposures */ + /* We need a particular context since we may need to set exposures for it */ + t->bg_gc = colors_new_gc(COLOR_BG, widget->window); + colors_add_widget(COLOR_BG, widget); + /* For other contexts we don't need anything special */ + t->bg_cursor_gc = colors_get_gc(COLOR_BG_CURSOR); + t->bg_majhigh_gc = colors_get_gc(COLOR_BG_MAJHIGH); + t->bg_minhigh_gc = colors_get_gc(COLOR_BG_MINHIGH); + t->notes_color = colors_get_color(COLOR_NOTES); + t->bg_sel_gc = colors_get_gc(COLOR_BG_SELECTION); + t->bg_csel_gc = colors_get_gc(COLOR_BG_CURSOR_SEL); + t->channums_color = colors_get_color(COLOR_CHANNUMS); + t->cur_gc = colors_get_gc(COLOR_CURSOR); + t->cur_e_gc = colors_get_gc(COLOR_CURSOR_EDIT); + t->bars_gc = colors_get_gc(COLOR_BARS); - init_display(t, attributes.width, attributes.height); + if (!t->enable_backing_store) + di_gc_set_exposures(t->bg_gc, 1); /* man XCopyArea, grep exposures */ - gdk_window_set_user_data (widget->window, widget); - gdk_window_set_background(widget->window, &t->colors[TRACKERCOL_BG]); + init_display(t, attributes.width, attributes.height, TRUE); + + gdk_window_set_user_data(widget->window, widget); + gdk_window_set_background(widget->window, colors_get_color(COLOR_BG)); } gboolean -tracker_set_font (Tracker *t, - const gchar *fontname) +tracker_set_font(Tracker* t, + const gchar* fontname) { - GdkFont *font; - int fonth, fontw; + g_debug("tracker_set_font(%s)", fontname); + + int fonth, fontw, chanwidth; - if((font = gdk_font_load(fontname))) { - fonth = font->ascent + font->descent + t->baselineskip; - fontw = gdk_string_width(font, "X"); /* let's just hope this is a non-proportional font */ - - /* Some fonts have width 0, for example 'clearlyu' */ - if(fonth >= 1 && fontw >= 1) { - gdk_font_unref(t->font); - t->font = font; - t->fontw = fontw; - t->fonth = fonth; - tracker_reset(t); - return TRUE; - } + if (!di_layout_set_font(t->layout, fontname)) + return FALSE; + + const gchar dummy[] = "--- 00 00 000 "; + di_layout_get_pixel_size(t->layout, dummy, -1, &chanwidth, &fonth); + // apparently there is no simple way to find out at this point whether the + // font is monospace, so just assume we're lucky... + fontw = chanwidth / (ARRAY_SIZE(dummy) - 1); + fonth += t->baselineskip; + + /* Some fonts have width 0, for example 'clearlyu' */ + if (fonth >= 1 && fontw >= 1) { + t->fontw = fontw; + t->fonth = fonth; + t->disp_chanwidth = chanwidth; + tracker_reset(t); + return TRUE; } return FALSE; } +typedef void (*___Sig1)(Tracker*, gint, gint, gint, gpointer); + static void -my_3ints_marshal (GtkObject *object, - GtkSignalFunc func, - gpointer func_data, - GtkArg *args) -{ - typedef void (*my_3ints_marshal_func)(Tracker *, int, int, int); - my_3ints_marshal_func rfunc = (my_3ints_marshal_func) func; - (*rfunc) (TRACKER(object), - GTK_VALUE_INT(args[0]), - GTK_VALUE_INT(args[1]), - GTK_VALUE_INT(args[2])); +___marshal_Sig1(GClosure* closure, + GValue* return_value, + guint n_param_values, + const GValue* param_values, + gpointer invocation_hint, + gpointer marshal_data) +{ + register ___Sig1 callback; + register GCClosure* cc = (GCClosure*)closure; + register gpointer data1, data2; + + g_return_if_fail(n_param_values == 4); + + if (G_CCLOSURE_SWAP_DATA(closure)) { + data1 = closure->data; + data2 = g_value_peek_pointer(param_values + 0); + } else { + data1 = g_value_peek_pointer(param_values + 0); + data2 = closure->data; + } + + callback = (___Sig1)(marshal_data != NULL ? marshal_data : cc->callback); + + callback((Tracker*)data1, + (gint)g_value_get_int(param_values + 1), + (gint)g_value_get_int(param_values + 2), + (gint)g_value_get_int(param_values + 3), + data2); } +typedef void (*___Sig2)(Tracker*, gint, gpointer); + static void -my_1int_marshal(GtkObject *object, - GtkSignalFunc func, - gpointer func_data, - GtkArg *args) -{ - typedef void (*my_1ints_marshal_func)(Tracker *, int); - my_1ints_marshal_func rfunc = (my_1ints_marshal_func) func; - (*rfunc) (TRACKER(object), - GTK_VALUE_INT(args[0])); +___marshal_Sig2(GClosure* closure, + GValue* return_value, + guint n_param_values, + const GValue* param_values, + gpointer invocation_hint, + gpointer marshal_data) +{ + register ___Sig2 callback; + register GCClosure* cc = (GCClosure*)closure; + register gpointer data1, data2; + + g_return_if_fail(n_param_values == 2); + + if (G_CCLOSURE_SWAP_DATA(closure)) { + data1 = closure->data; + data2 = g_value_peek_pointer(param_values + 0); + } else { + data1 = g_value_peek_pointer(param_values + 0); + data2 = closure->data; + } + + callback = (___Sig2)(marshal_data != NULL ? marshal_data : cc->callback); + + callback((Tracker*)data1, + (gint)g_value_get_int(param_values + 1), + data2); } /* If selecting, mouse is used to select in pattern */ -static void -tracker_mouse_to_cursor_pos (Tracker *t, - int x, - int y, - int *cursor_ch, - int *cursor_item, - int *patpos) +static gboolean +tracker_mouse_to_cursor_pos(Tracker* t, + int x, + int y, + int* cursor_ch, + int* cursor_item, + int* patpos) { int HPatHalf; + gboolean exact = FALSE; /* Calc the column (channel and pos in channel) */ - if(x < t->disp_startx) { - if(t->leftchan) - *cursor_ch = t->leftchan - 1; - else - *cursor_ch = t->leftchan; - *cursor_item = 0; - } else if(x > t->disp_startx + t->disp_numchans * t->disp_chanwidth) { - if(t->leftchan + t->disp_numchans < t->num_channels) { - *cursor_ch = t->leftchan + t->disp_numchans; - *cursor_item = 0; - } else { - *cursor_ch = t->num_channels - 1; - *cursor_item = 7; - } + if (x < t->disp_startx) { + if (t->leftchan) + *cursor_ch = t->leftchan - 1; + else + *cursor_ch = t->leftchan; + *cursor_item = 0; + } else if (x > t->disp_startx + t->disp_numchans * t->disp_chanwidth) { + if (t->leftchan + t->disp_numchans < t->num_channels) { + *cursor_ch = t->leftchan + t->disp_numchans; + *cursor_item = 0; + } else { + *cursor_ch = t->num_channels - 1; + *cursor_item = 7; + } } else { - *cursor_ch = t->leftchan + ((x - t->disp_startx) / t->disp_chanwidth); - *cursor_item = (x - (t->disp_startx + (*cursor_ch - t->leftchan) * t->disp_chanwidth)) / t->fontw; - if(*cursor_item < 4) - *cursor_item = 0; - else if(*cursor_item == 4) - *cursor_item = 1; - else if(*cursor_item == 5 || *cursor_item == 6) - *cursor_item = 2; - else if(*cursor_item == 7) - *cursor_item = 3; - else if(*cursor_item == 8 || *cursor_item == 9) - *cursor_item = 4; - else if(*cursor_item == 10) - *cursor_item = 5; - else if(*cursor_item == 11) - *cursor_item = 6; - else if(*cursor_item >= 12) - *cursor_item = 7; + *cursor_ch = t->leftchan + ((x - t->disp_startx) / t->disp_chanwidth); + *cursor_item = (x - (t->disp_startx + (*cursor_ch - t->leftchan) * t->disp_chanwidth)) / t->fontw; + switch (*cursor_item) { + case 0 ... 2: + exact = TRUE; + case 3: + *cursor_item = 0; + break; + case 4: + exact = TRUE; + *cursor_item = 1; + break; + case 5: + exact = TRUE; + case 6: + *cursor_item = 2; + break; + case 7: + exact = TRUE; + *cursor_item = 3; + break; + case 8: + exact = TRUE; + case 9: + *cursor_item = 4; + break; + case 10: + exact = TRUE; + *cursor_item = 5; + break; + case 11: + exact = TRUE; + *cursor_item = 6; + break; + case 12: + exact = TRUE; + default: + *cursor_item = 7; + break; + } } /* Calc the row */ HPatHalf = t->disp_rows / 2; - if(y < t->disp_starty) - *patpos = t->patpos - HPatHalf - 1; - else if(y > t->disp_rows * t->fonth) - *patpos = t->patpos + HPatHalf + 1; - else { - *patpos = (y - t->disp_starty) / t->fonth; - if(t->patpos <= *patpos) - *patpos = t->patpos + *patpos - HPatHalf; - else - *patpos = t->patpos - (HPatHalf - *patpos); - } - if(*patpos < 0) - *patpos = 0; - else if(*patpos >= t->curpattern->length) - *patpos = t->curpattern->length - 1; + if (y < t->disp_starty) { + *patpos = t->patpos - HPatHalf - 1; + exact = FALSE; + } else if ((y - t->disp_starty) > t->disp_rows * t->fonth) { + *patpos = t->patpos + HPatHalf + 1; + + if (y > (t->disp_rows + 1) * t->fonth) + exact = FALSE; + } else { + *patpos = (y - t->disp_starty) / t->fonth; + if (t->patpos <= *patpos) + *patpos = t->patpos + *patpos - HPatHalf; + else + *patpos = t->patpos - (HPatHalf - *patpos); + } + if (*patpos < 0) { + *patpos = 0; + exact = FALSE; + } else if (*patpos >= t->curpattern->length) { + *patpos = t->curpattern->length - 1; + exact = FALSE; + } + + return exact; +} + +static gboolean +tracker_scroll(GtkWidget* widget, + GdkEventScroll* event) +{ + Tracker* t; + t = TRACKER(widget); + + if (event->state & GDK_CONTROL_MASK) { + gint direction; + gboolean is_shift = event->state & GDK_SHIFT_MASK; + + if (event->direction == GDK_SCROLL_UP) + direction = is_shift ? -10 : -1; + else if (event->direction == GDK_SCROLL_DOWN) + direction = is_shift ? 10 : 1; + else + return TRUE; + + g_signal_emit(G_OBJECT(t), tracker_signals[SIG_CSCROLL], 0, direction); + return TRUE; + } + + if (event->state & GDK_MOD1_MASK) { + GdkModifierType state; + gint x, y, cur_ch, cur_item, patpos; + + gdk_window_get_pointer(event->window, &x, &y, &state); + if (tracker_mouse_to_cursor_pos(t, x, y, &cur_ch, &cur_item, &patpos)) { + gint direction; + + if (event->direction == GDK_SCROLL_UP) + direction = 1; + else if (event->direction == GDK_SCROLL_DOWN) + direction = -1; + else + return TRUE; + + g_signal_emit(G_OBJECT(t), tracker_signals[SIG_ASCROLL], 0, + cur_ch, cur_item, patpos, direction); + } + return TRUE; + } + + switch (event->direction) { + case GDK_SCROLL_UP: + if (event->state & GDK_SHIFT_MASK) { + if (t->leftchan > 0) + tracker_set_xpanning_full(t, t->leftchan - 1, TRUE); + } else if (t->patpos > 0) + tracker_step_cursor_row(t, -1); + return TRUE; + case GDK_SCROLL_DOWN: + if (event->state & GDK_SHIFT_MASK) { + if (t->leftchan + t->disp_numchans < t->num_channels) + tracker_set_xpanning_full(t, t->leftchan + 1, TRUE); + } else if (t->patpos < t->curpattern->length - 1) + tracker_step_cursor_row(t, 1); + return TRUE; + case GDK_SCROLL_LEFT: /* For happy folks with 2-scroller mice :-) */ + if (t->leftchan > 0) + tracker_set_xpanning_full(t, t->leftchan - 1, TRUE); + return TRUE; + case GDK_SCROLL_RIGHT: + if (t->leftchan + t->disp_numchans < t->num_channels) + tracker_set_xpanning_full(t, t->leftchan + 1, TRUE); + return TRUE; + default: + break; + } + return FALSE; } static gint -tracker_button_press (GtkWidget *widget, - GdkEventButton *event) +tracker_button_press(GtkWidget* widget, + GdkEventButton* event) { - Tracker *t; + Tracker* t; int x, y, cursor_ch, cursor_item, patpos, redraw = 0; GdkModifierType state; - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (IS_TRACKER(widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); + g_return_val_if_fail(widget != NULL, FALSE); + g_return_val_if_fail(IS_TRACKER(widget), FALSE); + g_return_val_if_fail(event != NULL, FALSE); t = TRACKER(widget); - gdk_window_get_pointer (event->window, &x, &y, &state); + gdk_window_get_pointer(event->window, &x, &y, &state); - if(t->mouse_selecting && event->button != 1 && event->button != 5 - && event->button != 4) { /* Wheel buttons must work independently on selection */ - t->mouse_selecting = 0; - } else if(!t->mouse_selecting) { - t->button = event->button; - gdk_window_get_pointer (event->window, &x, &y, &state); - if(t->button == 1) { - /* Start selecting block */ - gtk_signal_emit(GTK_OBJECT(t), tracker_signals[SIG_MAINMENU_BLOCKMARK_SET], 1); - t->inSelMode = FALSE; - tracker_mouse_to_cursor_pos(t, x, y, &t->sel_start_ch, &cursor_item, &t->sel_start_row); - t->sel_end_row = t->sel_start_row; - t->sel_end_ch = t->sel_start_ch; - t->mouse_selecting = 1; - tracker_redraw(t); - } else if(t->button == 2) { - /* Tracker cursor posititioning and clear block mark if any */ - if(t->inSelMode || t->sel_start_ch != -1) { - gtk_signal_emit(GTK_OBJECT(t), tracker_signals[SIG_MAINMENU_BLOCKMARK_SET], 0); - t->sel_start_ch = t->sel_end_ch = -1; - t->sel_start_row = t->sel_end_row = -1; - t->inSelMode = FALSE; - tracker_redraw(t); - } - tracker_mouse_to_cursor_pos(t, x, y, &cursor_ch, &cursor_item, &patpos); - /* Redraw only if needed */ - if(cursor_ch != t->cursor_ch || cursor_item != t->cursor_item) { - t->cursor_ch = cursor_ch; - t->cursor_item = cursor_item; - adjust_xpanning(t); - redraw = 1; - } - if(patpos != t->patpos) { - tracker_set_patpos(t, patpos); - redraw = 0; - } - if(redraw) { - gtk_widget_queue_draw(GTK_WIDGET(t)); - } - } - } - if (event->button == 4) - { - if (event->state & GDK_SHIFT_MASK) - { - if (t->leftchan > 0) tracker_set_xpanning (t, t->leftchan - 1); - } else - if (t->patpos > 0) tracker_step_cursor_row (t, -1); - } - if (event->button == 5) - { - if (event->state & 0x1) - { - if (t->leftchan + t->disp_numchans < t->num_channels) tracker_set_xpanning (t, t->leftchan + 1); - } else - if (t->patpos < t->curpattern->length - 1) tracker_step_cursor_row (t, 1); + if (t->mouse_selecting && event->button != 1) { + t->mouse_selecting = 0; + } else if (!t->mouse_selecting) { + t->button = event->button; + gdk_window_get_pointer(event->window, &x, &y, &state); + if (t->button == 1) { + if ((state & GDK_SHIFT_MASK) && (t->sel_start_ch >= 0) && (t->sel_start_row >= 0)) { + /* Extend existing block */ + gint tmp; + + if (t->sel_start_ch > t->sel_end_ch) { + tmp = t->sel_start_ch; + t->sel_start_ch = t->sel_end_ch; + t->sel_end_ch = tmp; + } + if (t->sel_start_row > t->sel_end_row) { + tmp = t->sel_start_row; + t->sel_start_row = t->sel_end_row; + t->sel_end_row = tmp; + } + tracker_mouse_to_cursor_pos(t, x, y, &t->sel_end_ch, &cursor_item, &t->sel_end_row); + } else { + /* Start selecting block */ + g_signal_emit(G_OBJECT(t), tracker_signals[SIG_MAINMENU_BLOCKMARK_SET], 0, 1); + tracker_mouse_to_cursor_pos(t, x, y, &t->sel_start_ch, &cursor_item, &t->sel_start_row); + t->sel_end_row = t->sel_start_row; + t->sel_end_ch = t->sel_start_ch; + } + t->inSelMode = FALSE; + t->mouse_selecting = 1; + tracker_redraw(t); + } else if (t->button == 2) { + /* Tracker cursor posititioning and clear block mark if any */ + if (t->inSelMode || t->sel_start_ch != -1) { + g_signal_emit(G_OBJECT(t), tracker_signals[SIG_MAINMENU_BLOCKMARK_SET], 0, 0); + t->sel_start_ch = t->sel_end_ch = -1; + t->sel_start_row = t->sel_end_row = -1; + t->inSelMode = FALSE; + tracker_redraw(t); + } + tracker_mouse_to_cursor_pos(t, x, y, &cursor_ch, &cursor_item, &patpos); + /* Redraw only if needed */ + if (cursor_ch != t->cursor_ch || cursor_item != t->cursor_item) { + t->cursor_ch = cursor_ch; + t->cursor_item = cursor_item; + adjust_xpanning(t, TRUE); + redraw = 1; + } + if (patpos != t->patpos) { + tracker_set_patpos(t, patpos); + redraw = 0; + } + if (redraw) { + gtk_widget_queue_draw(GTK_WIDGET(t)); + } + } } return TRUE; } static gint -tracker_motion_notify (GtkWidget *widget, - GdkEventMotion *event) +tracker_motion_notify(GtkWidget* widget, + GdkEventMotion* event) { - Tracker *t; + Tracker* t; int x, y, cursor_item; GdkModifierType state; t = TRACKER(widget); - if(!t->mouse_selecting) - return TRUE; + if (!t->mouse_selecting) + return TRUE; if (event->is_hint) { - gdk_window_get_pointer (event->window, &x, &y, &state); + gdk_window_get_pointer(event->window, &x, &y, &state); } else { - x = event->x; - y = event->y; - state = event->state; + x = event->x; + y = event->y; + state = event->state; } - if((state & GDK_BUTTON1_MASK) && t->mouse_selecting) { + if ((state & GDK_BUTTON1_MASK) && t->mouse_selecting) { tracker_mouse_to_cursor_pos(t, x, y, &t->sel_end_ch, &cursor_item, &t->sel_end_row); - if(x > t->disp_startx + t->disp_numchans*t->disp_chanwidth && t->leftchan + t->disp_numchans < t->num_channels) { - t->sel_end_ch++; - tracker_set_xpanning(t, t->leftchan + 1); - } else if(x < t->disp_startx && t->leftchan > 0) { - t->sel_end_ch--; - tracker_set_xpanning(t, t->leftchan - 1); - } - if((t->sel_end_row > t->patpos + (t->disp_rows/2)) || (y > t->widget.allocation.height && t->patpos < t->sel_end_row)) - tracker_set_patpos(t, t->patpos+1); - else if((t->sel_end_row < t->patpos - (t->disp_rows/2)) || (y <= 0 && t->patpos > t->sel_end_row)) - tracker_set_patpos(t, t->patpos-1); - tracker_redraw(t); + if (x > t->disp_startx + t->disp_numchans * t->disp_chanwidth && t->leftchan + t->disp_numchans < t->num_channels) { + t->sel_end_ch++; + tracker_set_xpanning_full(t, t->leftchan + 1, TRUE); + } else if (x < t->disp_startx && t->leftchan > 0) { + t->sel_end_ch--; + tracker_set_xpanning_full(t, t->leftchan - 1, TRUE); + } + if ((t->sel_end_row > t->patpos + (t->disp_rows / 2)) || (y > t->widget.allocation.height && t->patpos < t->sel_end_row)) + tracker_set_patpos(t, t->patpos + 1); + else if ((t->sel_end_row < t->patpos - (t->disp_rows / 2)) || (y <= 0 && t->patpos > t->sel_end_row)) + tracker_set_patpos(t, t->patpos - 1); + tracker_redraw(t); } return TRUE; } static gint -tracker_button_release (GtkWidget *widget, - GdkEventButton *event) +tracker_button_release(GtkWidget* widget, + GdkEventButton* event) { - Tracker *t; + Tracker* t; - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (IS_TRACKER (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); + g_return_val_if_fail(widget != NULL, FALSE); + g_return_val_if_fail(IS_TRACKER(widget), FALSE); + g_return_val_if_fail(event != NULL, FALSE); t = TRACKER(widget); - if(t->mouse_selecting && event->button == 1) { - t->mouse_selecting = 0; - gtk_signal_emit(GTK_OBJECT(t), tracker_signals[SIG_MAINMENU_BLOCKMARK_SET], 0); + if (t->mouse_selecting && event->button == 1) { + t->mouse_selecting = 0; + g_signal_emit(G_OBJECT(t), tracker_signals[SIG_MAINMENU_BLOCKMARK_SET], 0, 0); } return TRUE; } static void -tracker_class_init (TrackerClass *class) +tracker_class_init(TrackerClass* class) { - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; + GObjectClass* object_class; + GtkWidgetClass* widget_class; + + object_class = (GObjectClass*)class; + widget_class = (GtkWidgetClass*)class; - object_class = (GtkObjectClass*) class; - widget_class = (GtkWidgetClass*) class; - widget_class->realize = tracker_realize; widget_class->expose_event = tracker_expose; - widget_class->draw = tracker_draw; widget_class->size_request = tracker_size_request; widget_class->size_allocate = tracker_size_allocate; widget_class->button_press_event = tracker_button_press; widget_class->button_release_event = tracker_button_release; widget_class->motion_notify_event = tracker_motion_notify; + widget_class->scroll_event = tracker_scroll; + tracker_signals[SIG_PATPOS] = g_signal_new("patpos", + G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION), + G_STRUCT_OFFSET(TrackerClass, patpos), + NULL, NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, 1, + G_TYPE_INT); + + tracker_signals[SIG_XPANNING] = g_signal_new("xpanning", + G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(TrackerClass, xpanning), + NULL, NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, 1, + G_TYPE_INT); + + tracker_signals[SIG_XCONF] = g_signal_new("xconf", + G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION), + G_STRUCT_OFFSET(TrackerClass, xconf), + NULL, NULL, + ___marshal_Sig1, + G_TYPE_NONE, 3, + G_TYPE_INT, G_TYPE_INT, G_TYPE_INT); + + tracker_signals[SIG_YCONF] = g_signal_new("yconf", + G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(TrackerClass, yconf), + NULL, NULL, + ___marshal_Sig1, + G_TYPE_NONE, 3, + G_TYPE_INT, G_TYPE_INT, G_TYPE_INT); + + tracker_signals[SIG_MAINMENU_BLOCKMARK_SET] = g_signal_new( + "mainmenu_blockmark_set", + G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(TrackerClass, mainmenu_blockmark_set), + NULL, NULL, + ___marshal_Sig2, + G_TYPE_NONE, 1, G_TYPE_INT); + + tracker_signals[SIG_ASCROLL] = g_signal_new( + "alt_scroll", + G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(TrackerClass, scroll_parameter), + NULL, NULL, + __marshal_VOID__INT_INT_INT_INT, + G_TYPE_NONE, 4, + G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT); + + tracker_signals[SIG_CSCROLL] = g_signal_new( + "ctrl_scroll", + G_TYPE_FROM_CLASS(object_class), + (GSignalFlags)G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(TrackerClass, alt_scroll), + NULL, NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, 1, + G_TYPE_INT); - tracker_signals[SIG_PATPOS] = gtk_signal_new ("patpos", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET(TrackerClass, patpos), - my_3ints_marshal, - GTK_TYPE_NONE, 3, - GTK_TYPE_INT, - GTK_TYPE_INT, - GTK_TYPE_INT); - tracker_signals[SIG_XPANNING] = gtk_signal_new ("xpanning", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET(TrackerClass, xpanning), - my_3ints_marshal, - GTK_TYPE_NONE, 3, - GTK_TYPE_INT, - GTK_TYPE_INT, - GTK_TYPE_INT); - tracker_signals[SIG_MAINMENU_BLOCKMARK_SET] = gtk_signal_new("mainmenu_blockmark_set", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET(TrackerClass, mainmenu_blockmark_set), - my_1int_marshal, - GTK_TYPE_NONE, 1, - GTK_TYPE_INT); - - gtk_object_class_add_signals(object_class, tracker_signals, LAST_SIGNAL); - class->patpos = NULL; class->xpanning = NULL; class->mainmenu_blockmark_set = NULL; + class->scroll_parameter = NULL; } static void -tracker_init (Tracker *t) +tracker_init(Tracker* t) { - t->baselineskip = 0; - t->font = gdk_font_load("fixed"); - t->fonth = t->font->ascent + t->font->descent + t->baselineskip; - t->fontw = gdk_string_width(t->font, "X"); /* let's just hope this is a non-proportional font */ + GtkWidget* widget = GTK_WIDGET(t); + + t->layout = di_layout_new(widget); + t->oldpos = -1; + t->onlyrow = -1; t->curpattern = NULL; t->enable_backing_store = 0; t->pixmap = NULL; t->patpos = 0; t->cursor_ch = 0; t->cursor_item = 0; + t->editing = FALSE; t->inSelMode = FALSE; t->sel_end_row = t->sel_end_ch = t->sel_start_row = t->sel_start_ch = -1; t->mouse_selecting = 0; t->button = -1; -} -guint -tracker_get_type (void) -{ - static guint tracker_type = 0; - - if (!tracker_type) { - GtkTypeInfo tracker_info = - { - "Tracker", - sizeof(Tracker), - sizeof(TrackerClass), - (GtkClassInitFunc) tracker_class_init, - (GtkObjectInitFunc) tracker_init, - (GtkArgSetFunc) NULL, - (GtkArgGetFunc) NULL, - }; - - tracker_type = gtk_type_unique (gtk_widget_get_type (), &tracker_info); - } - - return tracker_type; + /* We implement double buffering by our own (if the user wants), + so implicit implementation by Gtk+ is not needed */ + gtk_widget_set_double_buffered(widget, FALSE); } +G_DEFINE_TYPE(Tracker, tracker, GTK_TYPE_WIDGET) + GtkWidget* -tracker_new (void) +tracker_new(void) { - return GTK_WIDGET(gtk_type_new(tracker_get_type())); + return GTK_WIDGET(g_object_new(tracker_get_type(), NULL)); } + diff -Nru soundtracker-0.6.8/app/tracker.h soundtracker-1.0.2~pre2/app/tracker.h --- soundtracker-0.6.8/app/tracker.h 2003-05-24 11:58:34.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/tracker.h 2020-11-08 18:07:55.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - GTK+ Tracker widget (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,34 +22,17 @@ #ifndef _TRACKER_H #define _TRACKER_H -#include -#include - #include "xm.h" +#include "draw-interlayer.h" -#define TRACKER(obj) GTK_CHECK_CAST (obj, tracker_get_type (), Tracker) -#define TRACKER_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, tracker_get_type (), TrackerClass) -#define IS_TRACKER(obj) GTK_CHECK_TYPE (obj, tracker_get_type ()) - -typedef struct _Tracker Tracker; -typedef struct _TrackerClass TrackerClass; - -enum { - TRACKERCOL_BG, - TRACKERCOL_BG_CURSOR, - TRACKERCOL_BG_MAJHIGH, - TRACKERCOL_BG_MINHIGH, - TRACKERCOL_BG_SELECTION, - TRACKERCOL_NOTES, - TRACKERCOL_BARS, - TRACKERCOL_CHANNUMS, - TRACKERCOL_CURSOR, - TRACKERCOL_CURSOR_EDIT, - TRACKERCOL_LAST, -}; +#define TRACKER(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, tracker_get_type(), Tracker)) +#define TRACKER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST(klass, tracker_get_type(), TrackerClass)) +#define IS_TRACKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, tracker_get_type())) + +typedef struct _Tracker Tracker; +typedef struct _TrackerClass TrackerClass; -struct _Tracker -{ +struct _Tracker { GtkWidget widget; int disp_rows; @@ -59,21 +42,24 @@ int disp_chanwidth; int disp_cursor; - GdkFont *font; int fonth, fontw; int baselineskip; + DILayout* layout; + DIDrawable drawable; - GdkGC *bg_gc, *bg_cursor_gc, *bg_majhigh_gc, *bg_minhigh_gc, *notes_gc, *misc_gc; - GdkColor colors[TRACKERCOL_LAST]; + DIGC bg_gc, bg_cursor_gc, bg_majhigh_gc, bg_minhigh_gc, bars_gc, + bg_sel_gc, bg_csel_gc, cur_gc, cur_e_gc; + GdkColor *notes_color, *channums_color; int enable_backing_store; - GdkPixmap *pixmap; + GdkPixmap* pixmap; guint idle_handler; - XMPattern *curpattern; - int patpos, oldpos; + XMPattern* curpattern; + int patpos, oldpos, onlyrow; int num_channels; int cursor_ch, cursor_item; + gboolean editing; int leftchan; /* Block selection stuff */ @@ -85,47 +71,52 @@ int button; }; -struct _TrackerClass -{ +struct _TrackerClass { GtkWidgetClass parent_class; - void (*patpos)(Tracker *t, int patpos, int patlen, int disprows); - void (*xpanning)(Tracker *t, int leftchan, int numchans, int dispchans); - void (*mainmenu_blockmark_set)(Tracker *t, int state); + void (*patpos)(Tracker* t, int patpos); + void (*xpanning)(Tracker* t, int leftchan); + void (*mainmenu_blockmark_set)(Tracker* t, int state); + void (*yconf)(Tracker* t, int patpos, int patlen, int disprows); + void (*xconf)(Tracker* t, int leftchan, int numchans, int dispchans); + void (*scroll_parameter)(Tracker* t, gint chan, gint item, gint patpos, gint direction); + void (*alt_scroll)(Tracker* t, gint direction); }; -extern const char * const notenames[4][96]; +#define NUM_NOTES 96 -guint tracker_get_type (void); -GtkWidget* tracker_new (void); +GType tracker_get_type(void) G_GNUC_CONST; +GtkWidget* tracker_new(void); -void tracker_set_num_channels (Tracker *t, int); +void tracker_set_num_channels(Tracker* t, int); +void tracker_set_editing(Tracker* t, gboolean is_editing); +const gchar* tracker_get_note_name(const guint key); -void tracker_set_backing_store (Tracker *t, int on); -gboolean tracker_set_font (Tracker *t, const gchar *fontname); +void tracker_set_backing_store(Tracker* t, int on); +gboolean tracker_set_font(Tracker* t, const gchar* fontname); -void tracker_reset (Tracker *t); -void tracker_redraw (Tracker *t); +void tracker_reset(Tracker* t); +void tracker_redraw(Tracker* t); -void tracker_redraw_row (Tracker *t, int row); -void tracker_redraw_current_row (Tracker *t); +void tracker_redraw_row(Tracker* t, int row); +void tracker_redraw_current_row(Tracker* t); /* These are the navigation functions. */ -void tracker_step_cursor_item (Tracker *t, int direction); -void tracker_step_cursor_channel (Tracker *t, int direction); -void tracker_set_cursor_channel (Tracker *t, int channel); -void tracker_set_cursor_item (Tracker *t, int item); -void tracker_set_patpos (Tracker *t, int row); -void tracker_step_cursor_row (Tracker *t, int direction); +void tracker_step_cursor_item(Tracker* t, int direction); +void tracker_step_cursor_channel(Tracker* t, int direction); +void tracker_set_cursor_channel(Tracker* t, int channel); +void tracker_set_cursor_item(Tracker* t, int item); +void tracker_set_patpos(Tracker* t, int row); +void tracker_step_cursor_row(Tracker* t, int direction); -void tracker_set_pattern (Tracker *t, XMPattern *pattern); -void tracker_set_xpanning (Tracker *t, int left_channel); +void tracker_set_pattern(Tracker* t, XMPattern* pattern); +void tracker_set_xpanning(Tracker* t, int left_channel); /* Set, get, clear selection markers */ -void tracker_mark_selection (Tracker *t, gboolean enable); -void tracker_clear_mark_selection (Tracker *t); -void tracker_get_selection_rect (Tracker *t, int *chStart, int *rowStart, int *nChannel, int *nRows); -gboolean tracker_is_valid_selection (Tracker *t); -gboolean tracker_is_in_selection_mode (Tracker *t); +void tracker_mark_selection(Tracker* t, gboolean enable); +void tracker_clear_mark_selection(Tracker* t); +void tracker_get_selection_rect(Tracker* t, int* chStart, int* rowStart, int* nChannel, int* nRows); +gboolean tracker_is_valid_selection(Tracker* t); +gboolean tracker_is_in_selection_mode(Tracker* t); #endif /* _TRACKER_H */ diff -Nru soundtracker-0.6.8/app/tracker-settings.c soundtracker-1.0.2~pre2/app/tracker-settings.c --- soundtracker-0.6.8/app/tracker-settings.c 2002-08-17 16:04:40.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/tracker-settings.c 2020-09-15 17:33:50.000000000 +0000 @@ -1,8 +1,8 @@ /* - * The Real SoundTracker - GTK+ Tracker widget settings + * The Real SoundTracker - GTK+ Tracker widget font settings * - * Copyright (C) 2001 Michael Krause + * Copyright (C) 2001-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,135 +23,163 @@ #include +#include +#include #include -#include "tracker-settings.h" -#include "i18n.h" +#include "gui-settings.h" #include "gui-subs.h" #include "preferences.h" +#include "tracker-settings.h" /* A global font list is kept here, so that when (at some time in the future) we have to deal with multiple Tracker widgets, this can be easily adapted. */ -static GList *trackersettings_fontlist; +static GList* trackersettings_fontlist; static void -trackersettings_gui_add_font (TrackerSettings *ts, - gchar *fontname, - int position) +trackersettings_gui_add_font(TrackerSettings* ts, + gchar* fontname, + int position) { - gchar *insertbuf[1]; + gchar* insertbuf; + GtkListStore* list_store; + GtkTreeIter iter; trackersettings_fontlist = g_list_insert(trackersettings_fontlist, fontname, position); - insertbuf[0] = fontname; - - gtk_clist_insert(GTK_CLIST(ts->clist), position, insertbuf); + insertbuf = fontname; + + list_store = GUI_GET_LIST_STORE(ts->list); + gtk_list_store_insert(list_store, &iter, position); + gtk_list_store_set(list_store, &iter, 0, insertbuf, -1); } static void -trackersettings_gui_delete_font (TrackerSettings *ts, - int position) +trackersettings_gui_delete_font(TrackerSettings* ts, + int position) { - GList *ll = g_list_nth(trackersettings_fontlist, position); + GtkTreeIter iter; + GtkListStore* list_store; + GList* ll = g_list_nth(trackersettings_fontlist, position); g_free(ll->data); trackersettings_fontlist = g_list_remove_link(trackersettings_fontlist, ll); - - gtk_clist_remove(GTK_CLIST(ts->clist), position); + if (!gui_list_get_iter(position, list_store = GUI_GET_LIST_STORE(ts->list), &iter)) + return; /* Not found, sorry :-\ */ + gtk_list_store_remove(list_store, &iter); ts->clist_selected_row = -1; } static void -trackersettings_gui_exchange_font (TrackerSettings *ts, - int p1, - int p2) +trackersettings_gui_exchange_font(TrackerSettings* ts, + int p1, + int p2) { - gtk_clist_swap_rows(GTK_CLIST(ts->clist), p1, p2); - gtk_clist_select_row(GTK_CLIST(ts->clist), p2, 0); + GtkTreeIter iter1, iter2; + GtkListStore* list_store = GUI_GET_LIST_STORE(ts->list); + GtkTreeSelection* sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(ts->list)); + + if (!gui_list_get_iter(p1, list_store, &iter1) || !gui_list_get_iter(p2, list_store, &iter2)) + return; + + gtk_list_store_swap(list_store, &iter1, &iter2); + gtk_tree_selection_select_iter(sel, &iter1); + ts->clist_selected_row = p2; } -static void -trackersettings_gui_populate_clist (TrackerSettings *ts) +static guint +trackersettings_gui_populate_clist(TrackerSettings* ts) { - gchar *insertbuf[1]; - GList *l; + gchar* insertbuf; + GList* l; + GtkListStore* list_store; + GtkTreeIter iter; + guint i = 0, ret = 0; - for(l = trackersettings_fontlist; l != NULL; l = l->next) { - insertbuf[0] = (gchar*)l->data; - gtk_clist_append(GTK_CLIST(ts->clist), insertbuf); + list_store = GUI_GET_LIST_STORE(ts->list); + for (l = trackersettings_fontlist; l != NULL; l = l->next) { + insertbuf = (gchar*)l->data; + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, 0, insertbuf, -1); + if (!strcmp(insertbuf, gui_settings.tracker_font)) + ret = i; + i++; } + return ret; } static void -trackersettings_clist_selected (GtkCList *clist, - gint row, - gint column, - GdkEvent *event, - TrackerSettings *ts) +trackersettings_clist_selected(GtkTreeSelection* sel, + TrackerSettings* ts) { - ts->clist_selected_row = row; + gint row = gui_list_get_selection_index(sel); + + if (row != -1) + ts->clist_selected_row = row; } static void -trackersettings_add_font (GtkWidget *widget, - TrackerSettings *ts) +trackersettings_add_font(GtkWidget* widget, + TrackerSettings* ts) { gtk_widget_show(ts->fontsel_dialog); } static void -trackersettings_add_font_ok (GtkWidget *widget, - TrackerSettings *ts) +trackersettings_add_font_ok(GtkWidget* widget, + TrackerSettings* ts) { int row; gtk_widget_hide(ts->fontsel_dialog); - if(gtk_font_selection_dialog_get_font(GTK_FONT_SELECTION_DIALOG(ts->fontsel_dialog))) { - row = ts->clist_selected_row; - if(row == -1) { - row = 0; - } - - trackersettings_gui_add_font(ts, - gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(ts->fontsel_dialog)), - row); + if (gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(ts->fontsel_dialog))) { + row = ts->clist_selected_row; + if (row == -1) { + row = 0; + } + + trackersettings_gui_add_font(ts, + gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(ts->fontsel_dialog)), + row); } } static void -trackersettings_add_font_cancel (GtkWidget *widget, - TrackerSettings *ts) +trackersettings_add_font_cancel(GtkWidget* widget, + TrackerSettings* ts) { gtk_widget_hide(ts->fontsel_dialog); } static void -trackersettings_delete_font (GtkWidget *widget, - TrackerSettings *ts) +trackersettings_delete_font(GtkWidget* widget, + TrackerSettings* ts) { int sel = ts->clist_selected_row; - if(sel != -1) { - trackersettings_gui_delete_font(ts, sel); + if (sel != -1) { + trackersettings_gui_delete_font(ts, sel); } } -static void -trackersettings_apply_font (GtkWidget *widget, - TrackerSettings *ts) +void trackersettings_apply_font(TrackerSettings* ts) { int sel = ts->clist_selected_row; - if(sel != -1) { - tracker_set_font(ts->tracker, g_list_nth_data(trackersettings_fontlist, sel)); + if (sel != -1) { + gchar* font = g_list_nth_data(trackersettings_fontlist, sel); + tracker_set_font(ts->tracker, font); + if (strcmp(gui_settings.tracker_font, font)) { + g_free(gui_settings.tracker_font); + gui_settings.tracker_font = g_strdup(font); + } } } -void -trackersettings_cycle_font_forward (TrackerSettings *t) +void trackersettings_cycle_font_forward(TrackerSettings* t) { int len = g_list_length(trackersettings_fontlist); @@ -161,31 +189,30 @@ tracker_set_font(t->tracker, g_list_nth_data(trackersettings_fontlist, t->current_font)); } -void -trackersettings_cycle_font_backward (TrackerSettings *t) +void trackersettings_cycle_font_backward(TrackerSettings* t) { int len = g_list_length(trackersettings_fontlist); t->current_font--; - if(t->current_font < 0) { - t->current_font = len - 1; + if (t->current_font < 0) { + t->current_font = len - 1; } tracker_set_font(t->tracker, g_list_nth_data(trackersettings_fontlist, t->current_font)); } -static GList * -my_g_list_swap (GList *l, - int p1, - int p2) +static GList* +my_g_list_swap(GList* l, + int p1, + int p2) { GList *l1, *l2; gpointer l1d, l2d; - if(p1 > p2) { - int p3 = p2; - p2 = p1; - p1 = p3; + if (p1 > p2) { + int p3 = p2; + p2 = p1; + p1 = p3; } l1 = g_list_nth(l, p1); @@ -202,51 +229,53 @@ } static void -trackersettings_font_exchange (TrackerSettings *ts, - int p1, - int p2) +trackersettings_font_exchange(TrackerSettings* ts, + int p1, + int p2) { trackersettings_fontlist = my_g_list_swap(trackersettings_fontlist, p1, p2); trackersettings_gui_exchange_font(ts, p1, p2); } static void -trackersettings_font_up (GtkWidget *button, - TrackerSettings *ts) +trackersettings_font_up(GtkWidget* button, + TrackerSettings* ts) { - if(ts->clist_selected_row > 0) { - trackersettings_font_exchange(ts, ts->clist_selected_row, ts->clist_selected_row - 1); + if (ts->clist_selected_row > 0) { + trackersettings_font_exchange(ts, ts->clist_selected_row, ts->clist_selected_row - 1); } } static void -trackersettings_font_down (GtkWidget *button, - TrackerSettings *ts) +trackersettings_font_down(GtkWidget* button, + TrackerSettings* ts) { - if(ts->clist_selected_row != -1 && ts->clist_selected_row < g_list_length(trackersettings_fontlist) - 1) { - trackersettings_font_exchange(ts, ts->clist_selected_row, ts->clist_selected_row + 1); + if (ts->clist_selected_row != -1 && ts->clist_selected_row < g_list_length(trackersettings_fontlist) - 1) { + trackersettings_font_exchange(ts, ts->clist_selected_row, ts->clist_selected_row + 1); } } GtkWidget* -trackersettings_new (void) +trackersettings_new(void) { - TrackerSettings *ts; - gchar *clisttitles[] = { _("Font list") }; + TrackerSettings* ts; + const gchar* clisttitles[] = { N_("Font list") }; GtkWidget *hbox1, *thing; + guint selected; - ts = gtk_type_new(trackersettings_get_type()); + ts = g_object_new(trackersettings_get_type(), NULL); GTK_BOX(ts)->spacing = 2; GTK_BOX(ts)->homogeneous = FALSE; ts->clist_selected_row = -1; ts->current_font = 0; - ts->clist = gui_clist_in_scrolled_window(1, clisttitles, GTK_WIDGET(ts)); - gtk_signal_connect (GTK_OBJECT (ts->clist), "select_row", - GTK_SIGNAL_FUNC (trackersettings_clist_selected), ts); + ts->list = gui_stringlist_in_scrolled_window(1, clisttitles, GTK_WIDGET(ts), TRUE); + gui_list_handle_selection(ts->list, + G_CALLBACK(trackersettings_clist_selected), ts); - trackersettings_gui_populate_clist(ts); + selected = trackersettings_gui_populate_clist(ts); + gui_list_select(ts->list, selected, TRUE, 0.5); hbox1 = gtk_hbox_new(TRUE, 4); gtk_box_pack_start(GTK_BOX(ts), hbox1, FALSE, TRUE, 0); @@ -255,49 +284,44 @@ thing = ts->add_button = gtk_button_new_with_label(_("Add font")); gtk_box_pack_start(GTK_BOX(hbox1), thing, TRUE, TRUE, 0); gtk_widget_show(thing); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC (trackersettings_add_font), ts); + g_signal_connect(thing, "clicked", + G_CALLBACK(trackersettings_add_font), ts); thing = ts->delete_button = gtk_button_new_with_label(_("Delete font")); gtk_box_pack_start(GTK_BOX(hbox1), thing, TRUE, TRUE, 0); gtk_widget_show(thing); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC (trackersettings_delete_font), ts); + g_signal_connect(thing, "clicked", + G_CALLBACK(trackersettings_delete_font), ts); thing = ts->apply_button = gtk_button_new_with_label(_("Apply font")); gtk_box_pack_start(GTK_BOX(hbox1), thing, TRUE, TRUE, 0); gtk_widget_show(thing); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC (trackersettings_apply_font), ts); + g_signal_connect_swapped(thing, "clicked", + G_CALLBACK(trackersettings_apply_font), ts); hbox1 = gtk_hbox_new(TRUE, 4); gtk_box_pack_start(GTK_BOX(ts), hbox1, FALSE, TRUE, 0); gtk_widget_show(hbox1); -#ifndef USE_GNOME -#define GNOME_STOCK_BUTTON_UP 0 -#define GNOME_STOCK_BUTTON_DOWN 0 -#endif - - ts->up_button = gui_button(GTK_WIDGET(ts), GNOME_STOCK_BUTTON_UP, _("Up"), - trackersettings_font_up, ts, hbox1); + ts->up_button = gui_button(GTK_WIDGET(ts), GTK_STOCK_GO_UP, + trackersettings_font_up, ts, hbox1); - ts->down_button = gui_button(GTK_WIDGET(ts), GNOME_STOCK_BUTTON_DOWN, _("Down"), - trackersettings_font_down, ts, hbox1); + ts->down_button = gui_button(GTK_WIDGET(ts), GTK_STOCK_GO_DOWN, + trackersettings_font_down, ts, hbox1); ts->fontsel_dialog = gtk_font_selection_dialog_new(_("Select font...")); gtk_window_set_modal(GTK_WINDOW(ts->fontsel_dialog), TRUE); - gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG(ts->fontsel_dialog)->ok_button), "clicked", - GTK_SIGNAL_FUNC (trackersettings_add_font_ok), ts); - gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG(ts->fontsel_dialog)->cancel_button), "clicked", - GTK_SIGNAL_FUNC (trackersettings_add_font_cancel), ts); + g_signal_connect(GTK_FONT_SELECTION_DIALOG(ts->fontsel_dialog)->ok_button, "clicked", + G_CALLBACK(trackersettings_add_font_ok), ts); + g_signal_connect(GTK_FONT_SELECTION_DIALOG(ts->fontsel_dialog)->cancel_button, "clicked", + G_CALLBACK(trackersettings_add_font_cancel), ts); + g_signal_connect_swapped(ts->list, "row-activated", G_CALLBACK(trackersettings_apply_font), ts); return GTK_WIDGET(ts); } -void -trackersettings_set_tracker_widget (TrackerSettings *ts, - Tracker *t) +void trackersettings_set_tracker_widget(TrackerSettings* ts, + Tracker* t) { ts->tracker = t; @@ -305,80 +329,45 @@ } static void -trackersettings_read_fontlist (void) +trackersettings_read_fontlist(void) { - char buf[256]; - FILE *f; - prefs_node *p; + gchar** fontlist; /* Don't g_strfreev() it because strings are used directly in the font list */ + gsize length, i; trackersettings_fontlist = NULL; - p = prefs_open_read("tracker-fonts"); - if(p) { - f = prefs_get_file_pointer(p); - while(!feof(f)) { - buf[0] = 0; - fgets(buf, 255, f); - buf[255] = 0; - if(strlen(buf) > 0) { - buf[strlen(buf) - 1] = 0; - trackersettings_fontlist = g_list_append(trackersettings_fontlist, g_strdup(buf)); - } - } - prefs_close(p); - } + fontlist = prefs_get_str_array("settings", "fonts", &length); + for (i = 0; i < length; i++) + trackersettings_fontlist = g_list_append(trackersettings_fontlist, fontlist[i]); - if(g_list_length(trackersettings_fontlist) == 0) { - trackersettings_fontlist = g_list_append(trackersettings_fontlist, "fixed"); - } + if (!length) + trackersettings_fontlist = g_list_append(trackersettings_fontlist, "Monospace 10"); + g_free(fontlist); } -void -trackersettings_write_settings (void) +void trackersettings_write_settings(void) { - FILE *f; - prefs_node *p; - GList *l; - - p = prefs_open_write("tracker-fonts"); - if(!p) { - return; - } + GList* l; + GString* tmp = g_string_new(""); - f = prefs_get_file_pointer(p); - - for(l = trackersettings_fontlist; l != NULL; l = l->next) { - fprintf(f, "%s\n", (gchar*)l->data); + /* It's simplier here to combine fonts string ourselves and put is as a single string rather than an array */ + for (l = trackersettings_fontlist; l != NULL; l = l->next) { + g_string_append_printf(tmp, "%s;", (gchar*)l->data); } - prefs_close(p); + prefs_put_string("settings", "fonts", tmp->str); + g_string_free(tmp, TRUE); } static void -trackersettings_class_init (TrackerSettingsClass *class) +trackersettings_init (TrackerSettings *self) { - trackersettings_read_fontlist(); } -guint -trackersettings_get_type (void) +static void +trackersettings_class_init(TrackerSettingsClass* class) { - static guint trackersettings_type = 0; - - if (!trackersettings_type) { - GtkTypeInfo trackersettings_info = - { - "TrackerSettings", - sizeof(TrackerSettings), - sizeof(TrackerSettingsClass), - (GtkClassInitFunc) NULL, - (GtkObjectInitFunc) trackersettings_class_init, - (GtkArgSetFunc) NULL, - (GtkArgGetFunc) NULL, - }; - - trackersettings_type = gtk_type_unique (gtk_vbox_get_type (), &trackersettings_info); - } - - return trackersettings_type; + trackersettings_read_fontlist(); } + +G_DEFINE_TYPE(TrackerSettings, trackersettings, GTK_TYPE_VBOX) diff -Nru soundtracker-0.6.8/app/tracker-settings.h soundtracker-1.0.2~pre2/app/tracker-settings.h --- soundtracker-0.6.8/app/tracker-settings.h 2003-03-02 11:34:22.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/tracker-settings.h 2020-01-10 18:46:47.000000000 +0000 @@ -1,8 +1,8 @@ /* - * The Real SoundTracker - GTK+ Tracker widget settings (header) + * The Real SoundTracker - GTK+ Tracker widget font settings (header) * - * Copyright (C) 2001 Michael Krause + * Copyright (C) 2001-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,38 +26,37 @@ #include "tracker.h" -#define TRACKERSETTINGS(obj) GTK_CHECK_CAST (obj, trackersettings_get_type (), TrackerSettings) -#define TRACKERSETTINGS_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, trackersettings_get_type (), TrackerSettingsClass) -#define IS_TRACKERSETTINGS(obj) GTK_CHECK_TYPE (obj, trackersettings_get_type ()) +#define TRACKERSETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, trackersettings_get_type(), TrackerSettings)) +#define TRACKERSETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST(klass, trackersettings_get_type(), TrackerSettingsClass)) +#define IS_TRACKERSETTINGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, trackersettings_get_type())) -typedef struct _TrackerSettings TrackerSettings; -typedef struct _TrackerSettingsClass TrackerSettingsClass; +typedef struct _TrackerSettings TrackerSettings; +typedef struct _TrackerSettingsClass TrackerSettingsClass; -struct _TrackerSettings -{ +struct _TrackerSettings { GtkVBox widget; - Tracker *tracker; + Tracker* tracker; int current_font; - GtkWidget *clist; + GtkWidget* list; GtkWidget *add_button, *delete_button, *apply_button; GtkWidget *up_button, *down_button; - GtkWidget *fontsel_dialog; + GtkWidget* fontsel_dialog; gint clist_selected_row; }; -struct _TrackerSettingsClass -{ +struct _TrackerSettingsClass { GtkVBoxClass parent_class; }; -guint trackersettings_get_type (void); -GtkWidget * trackersettings_new (void); -void trackersettings_write_settings (void); -void trackersettings_set_tracker_widget (TrackerSettings *ts, Tracker *t); - -void trackersettings_cycle_font_forward (TrackerSettings *t); -void trackersettings_cycle_font_backward (TrackerSettings *t); +GType trackersettings_get_type(void) G_GNUC_CONST; +GtkWidget* trackersettings_new(void); +void trackersettings_write_settings(void); +void trackersettings_set_tracker_widget(TrackerSettings* ts, Tracker* t); + +void trackersettings_cycle_font_forward(TrackerSettings* t); +void trackersettings_cycle_font_backward(TrackerSettings* t); +void trackersettings_apply_font(TrackerSettings* ts); #endif /* _TRACKER_SETTINGS_H */ diff -Nru soundtracker-0.6.8/app/transposition.c soundtracker-1.0.2~pre2/app/transposition.c --- soundtracker-0.6.8/app/transposition.c 2002-08-17 16:04:42.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/transposition.c 2020-10-11 17:19:59.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Transposition dialog * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,339 +19,355 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "i18n.h" -#include "transposition.h" -#include "main.h" -#include "xm.h" +#include + #include "gui-subs.h" #include "gui.h" +#include "history.h" +#include "main.h" #include "st-subs.h" #include "track-editor.h" +#include "transposition.h" +#include "xm.h" static GtkWidget *transposition_window = NULL, - *transposition_scope_w[4], - *transposition_instrument_mode_w[2], - *transposition_instrument_w[2]; + *transposition_scope_w[4], + *transposition_instrument_mode_w[2], + *transposition_instrument_w[2]; static void -transposition_close_requested (void) +transposition_transpose_notes_full(XMNote* track, + int length, + int add, + int instrument) { - gtk_widget_destroy(transposition_window); - transposition_window = NULL; + while (length--) { + if (track->note != 0 && track->note != XM_PATTERN_NOTE_OFF + && (instrument == -1 || instrument == track->instrument)) { + track->note = CLAMP(track->note + add, 1, NUM_NOTES); + } + track++; + } } static void -transposition_for_each (void (*function)(XMNote *track, int patlen, int data), - int functiondata) +transposition_transpose_notes_sub(XMNote* track, + int patlen, + int add) { - int i, j; - int mode = find_current_toggle(transposition_scope_w, 4); + gboolean all_instruments = find_current_toggle(transposition_instrument_mode_w, 2); + int current_instrument = gui_get_current_instrument(); - switch(mode) { - case 0: // Whole Song - for(i = 0; i < sizeof(xm->patterns) / sizeof(xm->patterns[0]); i++) { - if(st_is_pattern_used_in_song(xm, i)) { - for(j = 0; j < xm->num_channels; j++) { - function(xm->patterns[i].channels[j], xm->patterns[i].length, functiondata); - } - } - } - break; - case 1: // All Patterns - for(i = 0; i < sizeof(xm->patterns) / sizeof(xm->patterns[0]); i++) { - for(j = 0; j < xm->num_channels; j++) { - function(xm->patterns[i].channels[j], xm->patterns[i].length, functiondata); - } - } - break; - case 2: // Current Pattern - i = gui_get_current_pattern(); - for(j = 0; j < xm->num_channels; j++) { - function(xm->patterns[i].channels[j], xm->patterns[i].length, functiondata); - } - break; - case 3: // Current Track - i = gui_get_current_pattern(); - j = tracker->cursor_ch; - function(xm->patterns[i].channels[j], xm->patterns[i].length, functiondata); - break; + transposition_transpose_notes_full(track, patlen, add, all_instruments ? -1 : current_instrument); +} + +static void +transposition_change_instruments_sub(XMNote* track, + int patlen, + int mode) +{ + int i1 = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(transposition_instrument_w[0])); + int i2 = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(transposition_instrument_w[1])); + + while (patlen--) { + if (track->instrument == i1) + track->instrument = i2; + else if (mode == 0 && track->instrument == i2) + track->instrument = i1; + track++; } } +struct SongArg { + guint8 lengths[ST_NUM_PATTERNS(xm)]; + XMNote notes[1]; +}; + static void -transposition_transpose_notes_full (XMNote *track, - int length, - int add, - int instrument) -{ - while(length--) { - if(track->note != 0 && track->note != 97 - && (instrument == -1 || instrument == track->instrument)) { - track->note = CLAMP(track->note + add, 1, 96); - } - track++; +song_undo(const gint ins, const gint smp, const gboolean redo, + gpointer arg, gpointer data) +{ + struct SongArg* sa = arg; + XMNote* tmp_notes = NULL; + gsize alloc_len = 0, addr; + gint i, j; + + for (i = 0, addr = 0; i < ST_NUM_PATTERNS(xm); i++) { + /* Taking stored length value rather than that from a pattern + to feel a little bit safer */ + const gsize len = sa->lengths[i], chansize = len * sizeof(XMNote); + + if (len > alloc_len) { + if (tmp_notes) { + g_free(tmp_notes); + } + alloc_len = len; + tmp_notes = g_new(XMNote, alloc_len); + } + for (j = 0; j < xm->num_channels; j++, addr += len) { + memcpy(tmp_notes, xm->patterns[i].channels[j], chansize); + memcpy(xm->patterns[i].channels[j], &sa->notes[addr], chansize); + memcpy(&sa->notes[addr], tmp_notes, chansize); + } } + + g_free(tmp_notes); + tracker_redraw(tracker); } static void -transposition_transpose_notes_sub (XMNote *track, - int patlen, - int add) +log_song(const gchar* title) { - gboolean all_instruments = find_current_toggle(transposition_instrument_mode_w, 2); - int current_instrument = gui_get_current_instrument(); + gint i, j; + struct SongArg* arg; + gsize len = 0, arg_size, addr, chansize; + + for (i = 0; i < ST_NUM_PATTERNS(xm); i++) + len += xm->patterns[i].length; + arg_size = sizeof(struct SongArg) + sizeof(XMNote) * (len * xm->num_channels - 1); + arg = g_malloc(arg_size); + + for (i = 0, addr = 0; i < ST_NUM_PATTERNS(xm); i++) { + arg->lengths[i] = len = xm->patterns[i].length; + chansize = len * sizeof(XMNote); + for (j = 0; j < xm->num_channels; j++, addr += len) { + memcpy(&arg->notes[addr], xm->patterns[i].channels[j], chansize); + } + } - transposition_transpose_notes_full(track, patlen, add, all_instruments ? -1 : current_instrument); + history_log_action(HISTORY_ACTION_POINTER, _(title), + HISTORY_FLAG_LOG_POS | HISTORY_FLAG_LOG_PAT | + HISTORY_SET_PAGE(NOTEBOOK_PAGE_TRACKER), + song_undo, xm, arg_size, arg); } static void -transposition_change_instruments_sub (XMNote *track, - int patlen, - int mode) +transposition_for_each(const gboolean reassign_instr, + int functiondata) { - int i1 = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(transposition_instrument_w[0])); - int i2 = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(transposition_instrument_w[1])); + int i, j; + int mode = find_current_toggle(transposition_scope_w, 4); + void (*function)(XMNote* track, int patlen, int data) = + reassign_instr ? transposition_change_instruments_sub : transposition_transpose_notes_sub; + const gchar* log_message = reassign_instr ? + N_("Instrument(s) reassigning") : N_("Transposition"); - while(patlen--) { - if(track->instrument == i1) - track->instrument = i2; - else if(mode == 0 && track->instrument == i2) - track->instrument = i1; - track++; + switch (mode) { + case 0: // Whole Song + log_song(log_message); + for (i = 0; i < ST_NUM_PATTERNS(xm); i++) { + if (st_is_pattern_used_in_song(xm, i)) { + for (j = 0; j < xm->num_channels; j++) { + function(xm->patterns[i].channels[j], xm->patterns[i].length, functiondata); + } + } + } + break; + case 1: // All Patterns + log_song(log_message); + for (i = 0; i < ST_NUM_PATTERNS(xm); i++) { + for (j = 0; j < xm->num_channels; j++) { + function(xm->patterns[i].channels[j], xm->patterns[i].length, functiondata); + } + } + break; + case 2: // Current Pattern + i = gui_get_current_pattern(); + gui_log_pattern(&xm->patterns[i], log_message, -1, xm->patterns[i].length, xm->patterns[i].length); + for (j = 0; j < xm->num_channels; j++) { + function(xm->patterns[i].channels[j], xm->patterns[i].length, functiondata); + } + break; + case 3: // Current Track + i = gui_get_current_pattern(); + j = tracker->cursor_ch; + track_editor_log_block(tracker, log_message, j, 0, 1, xm->patterns[i].length); + function(xm->patterns[i].channels[j], xm->patterns[i].length, functiondata); + break; } } static void -transposition_transpose_notes (GtkWidget *w, - gpointer data) +transposition_transpose_notes(GtkWidget* w, + gpointer data) { int add = 0; - switch(GPOINTER_TO_INT(data)) { + switch (GPOINTER_TO_INT(data)) { case 0: - add = +1; - break; + add = +1; + break; case 1: - add = -1; - break; + add = -1; + break; case 2: - add = +12; - break; + add = +12; + break; case 3: - add = -12; - break; + add = -12; + break; } - transposition_for_each (transposition_transpose_notes_sub, add); + transposition_for_each(FALSE, add); tracker_redraw(tracker); - xm_set_modified(1); } -void -transposition_transpose_selection (Tracker *t, - int by) +void transposition_transpose_selection(Tracker* t, + int by) { int height, width, chStart, rowStart; int i; - if(!tracker_is_valid_selection(t)) { - return; + if (!tracker_is_valid_selection(t)) { + return; } tracker_get_selection_rect(t, &chStart, &rowStart, &width, &height); + track_editor_log_block(t, N_("Transposing block"), chStart, rowStart, width, height); - for(i = chStart; i < chStart + width; i++) { - transposition_transpose_notes_full(t->curpattern->channels[i] + rowStart, - height, by, -1); + for (i = chStart; i < chStart + width; i++) { + transposition_transpose_notes_full(t->curpattern->channels[i] + rowStart, + height, by, -1); } - xm_set_modified(1); tracker_redraw(t); } static void -transposition_change_instruments (GtkWidget *w, - gpointer data) +transposition_change_instruments(GtkWidget* w, + gpointer data) { int b = GPOINTER_TO_INT(data); - transposition_for_each (transposition_change_instruments_sub, b); + transposition_for_each(TRUE, b); tracker_redraw(tracker); - xm_set_modified(1); } static void -transposition_current_instrument_clicked (GtkWidget *w, - gpointer data) +transposition_current_instrument_clicked(GtkWidget* w, + gpointer data) { - gtk_spin_button_set_value(GTK_SPIN_BUTTON(transposition_instrument_w[ - GPOINTER_TO_INT(data)]), - gui_get_current_instrument()); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(transposition_instrument_w[GPOINTER_TO_INT(data)]), + gui_get_current_instrument()); } -void -transposition_dialog (void) +void transposition_dialog(void) { gint i; - GtkWidget *mainbox, *thing, *box1, *box2, *frame, *hbox; - const char *labels1[] = { - _("Whole Song"), - _("All Patterns"), - _("Current Pattern"), - _("Current Track"), - NULL + GtkWidget *mainbox, *thing, *box1, *box2, *frame; + const char* labels1[] = { + _("Whole Song"), + _("All Patterns"), + _("Current Pattern"), + _("Current Track"), }; - const char *labels2[] = { - _("Current Instrument"), - _("All Instruments"), - NULL + const char* labels2[] = { + _("Current Instrument"), + _("All Instruments"), }; - const char *labels3[] = { - _("Half note up"), - _("Half note down"), - _("Octave up"), - _("Octave down") + const char* labels3[] = { + _("Half note up"), + _("Half note down"), + _("Octave up"), + _("Octave down") }; - const char *labels4[] = { - _("Exchange 1 <-> 2"), - _("Change 1 -> 2") + const char* labels4[] = { + _("Exchange 1 <-> 2"), + _("Change 1 -> 2") }; - if(transposition_window != NULL) { - gdk_window_raise(transposition_window->window); - return; - } - -#ifdef USE_GNOME - transposition_window = gnome_app_new("SoundTracker", _("Transposition Tools")); -#else - transposition_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(transposition_window), _("Transposition Tools")); -#endif - gtk_signal_connect (GTK_OBJECT (transposition_window), "delete_event", - GTK_SIGNAL_FUNC (transposition_close_requested), NULL); - - gtk_window_set_transient_for(GTK_WINDOW(transposition_window), GTK_WINDOW(mainwindow)); - gtk_window_set_policy(GTK_WINDOW(transposition_window), FALSE, FALSE, FALSE); - - mainbox = gtk_vbox_new(FALSE, 2); - gtk_container_border_width(GTK_CONTAINER(mainbox), 4); -#ifdef USE_GNOME - gnome_app_set_contents(GNOME_APP(transposition_window), mainbox); -#else - gtk_container_add(GTK_CONTAINER(transposition_window), mainbox); -#endif - gtk_widget_show(mainbox); - - box1 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box1); - gtk_box_pack_start(GTK_BOX(mainbox), box1, FALSE, TRUE, 0); - - thing = gtk_label_new(_("Scope of the operation:")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - add_empty_hbox(box1); - make_radio_group_full(labels1, box1, transposition_scope_w, FALSE, TRUE, NULL, NULL); - - frame = gtk_frame_new(NULL); - gtk_frame_set_label(GTK_FRAME(frame), _("Note Transposition")); - gtk_box_pack_start(GTK_BOX(mainbox), frame, FALSE, TRUE, 0); - gtk_widget_show(frame); - - box2 = gtk_vbox_new(FALSE, 2); - gtk_widget_show(box2); - gtk_container_add (GTK_CONTAINER(frame), box2); - gtk_container_border_width(GTK_CONTAINER(box2), 4); - - box1 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box1); - gtk_box_pack_start(GTK_BOX(box2), box1, FALSE, TRUE, 0); - - add_empty_hbox(box1); - make_radio_group_full(labels2, box1, transposition_instrument_mode_w, FALSE, TRUE, NULL, NULL); - add_empty_hbox(box1); - - box1 = gtk_hbox_new(TRUE, 4); - gtk_widget_show(box1); - gtk_box_pack_start(GTK_BOX(box2), box1, FALSE, TRUE, 0); - - for(i = 0; i < 4; i++) { - thing = gtk_button_new_with_label(labels3[i]); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box1), thing, TRUE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(transposition_transpose_notes), - GINT_TO_POINTER(i)); - } + if (GUI_EDITING) { + if (transposition_window != NULL) { + gtk_window_present(GTK_WINDOW(transposition_window)); + return; + } - frame = gtk_frame_new(NULL); - gtk_frame_set_label(GTK_FRAME(frame), _("Instrument Changing")); - gtk_box_pack_start(GTK_BOX(mainbox), frame, FALSE, TRUE, 0); - gtk_widget_show(frame); - - box2 = gtk_vbox_new(FALSE, 2); - gtk_widget_show(box2); - gtk_container_add (GTK_CONTAINER(frame), box2); - gtk_container_border_width(GTK_CONTAINER(box2), 4); - - box1 = gtk_hbox_new(FALSE, 4); - gtk_widget_show(box1); - gtk_box_pack_start(GTK_BOX(box2), box1, FALSE, TRUE, 0); - - add_empty_hbox(box1); - - gui_put_labelled_spin_button(box1, _("Instrument 1:"), 1, 128, &transposition_instrument_w[0], NULL, NULL); - - thing = gtk_button_new_with_label(_("Current instrument")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(transposition_current_instrument_clicked), (gpointer)0); - - add_empty_hbox(box1); - - gui_put_labelled_spin_button(box1, _("Instrument 2:"), 1, 128, &transposition_instrument_w[1], NULL, NULL); - - thing = gtk_button_new_with_label(_("Current instrument")); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(transposition_current_instrument_clicked), (gpointer)1); - - add_empty_hbox(box1); - - box1 = gtk_hbox_new(TRUE, 4); - gtk_widget_show(box1); - gtk_box_pack_start(GTK_BOX(box2), box1, FALSE, TRUE, 0); - - for(i = 0; i < 2; i++) { - thing = gtk_button_new_with_label(labels4[i]); - gtk_widget_show(thing); - gtk_box_pack_start(GTK_BOX(box1), thing, TRUE, TRUE, 0); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(transposition_change_instruments), - GINT_TO_POINTER(i)); - } + transposition_window = gtk_dialog_new_with_buttons(_("Transposition Tools"), GTK_WINDOW(mainwindow), + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); + gui_dialog_connect(transposition_window, NULL); + + mainbox = gtk_dialog_get_content_area(GTK_DIALOG(transposition_window)); + gui_dialog_adjust(transposition_window, GTK_RESPONSE_CLOSE); + + box1 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(mainbox), box1, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Scope of the operation:")); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); + make_radio_group_full(labels1, box1, transposition_scope_w, FALSE, TRUE, NULL, NULL); + + frame = gtk_frame_new(NULL); + gtk_frame_set_label(GTK_FRAME(frame), _("Note Transposition")); + gtk_box_pack_start(GTK_BOX(mainbox), frame, FALSE, TRUE, 0); + + box2 = gtk_vbox_new(FALSE, 2); + gtk_container_add(GTK_CONTAINER(frame), box2); + gtk_container_set_border_width(GTK_CONTAINER(box2), 4); + + box1 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(box2), box1, FALSE, TRUE, 0); - /* The button area */ - hbox = gtk_hbutton_box_new (); - gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbox), 4); - gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END); - gtk_box_pack_start (GTK_BOX (mainbox), hbox, - FALSE, FALSE, 0); - gtk_widget_show (hbox); - -#ifdef USE_GNOME - thing = gnome_stock_button (GNOME_STOCK_BUTTON_CLOSE); -#else - thing = gtk_button_new_with_label (_ ("Close")); -#endif - GTK_WIDGET_SET_FLAGS(thing, GTK_CAN_DEFAULT); - gtk_window_set_default(GTK_WINDOW(transposition_window), thing); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", - GTK_SIGNAL_FUNC (transposition_close_requested), NULL); - gtk_box_pack_start (GTK_BOX (hbox), thing, FALSE, FALSE, 0); - gtk_widget_show (thing); + add_empty_hbox(box1); + make_radio_group_full(labels2, box1, transposition_instrument_mode_w, FALSE, TRUE, NULL, NULL); + add_empty_hbox(box1); - gtk_widget_show(transposition_window); + box1 = gtk_hbox_new(TRUE, 4); + gtk_box_pack_start(GTK_BOX(box2), box1, FALSE, TRUE, 0); + + for (i = 0; i < 4; i++) { + thing = gtk_button_new_with_label(labels3[i]); + gtk_box_pack_start(GTK_BOX(box1), thing, TRUE, TRUE, 0); + g_signal_connect(thing, "clicked", + G_CALLBACK(transposition_transpose_notes), + GINT_TO_POINTER(i)); + } + + frame = gtk_frame_new(NULL); + gtk_frame_set_label(GTK_FRAME(frame), _("Instrument Changing")); + gtk_box_pack_start(GTK_BOX(mainbox), frame, FALSE, TRUE, 0); + + box2 = gtk_vbox_new(FALSE, 2); + gtk_container_add(GTK_CONTAINER(frame), box2); + gtk_container_set_border_width(GTK_CONTAINER(box2), 4); + + box1 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(box2), box1, FALSE, TRUE, 0); + + add_empty_hbox(box1); + + gui_put_labelled_spin_button(box1, _("Instrument 1:"), 1, ST_NUM_INSTRUMENTS(xm), &transposition_instrument_w[0], NULL, NULL, FALSE); + + thing = gtk_button_new_with_label(_("Current instrument")); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "clicked", + G_CALLBACK(transposition_current_instrument_clicked), GINT_TO_POINTER(0)); + + add_empty_hbox(box1); + + gui_put_labelled_spin_button(box1, _("Instrument 2:"), 1, ST_NUM_INSTRUMENTS(xm), &transposition_instrument_w[1], NULL, NULL, FALSE); + + thing = gtk_button_new_with_label(_("Current instrument")); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); + g_signal_connect(thing, "clicked", + G_CALLBACK(transposition_current_instrument_clicked), GINT_TO_POINTER(1)); + + add_empty_hbox(box1); + + box1 = gtk_hbox_new(TRUE, 4); + gtk_box_pack_start(GTK_BOX(box2), box1, FALSE, TRUE, 0); + + for (i = 0; i < 2; i++) { + thing = gtk_button_new_with_label(labels4[i]); + gtk_box_pack_start(GTK_BOX(box1), thing, TRUE, TRUE, 0); + g_signal_connect(thing, "clicked", + G_CALLBACK(transposition_change_instruments), + GINT_TO_POINTER(i)); + } + + gtk_widget_show_all(transposition_window); + } else { + GtkWidget* dialog = NULL; + + gui_info_dialog(&dialog, _("Transposition is possible only in editing mode"), FALSE); + } } diff -Nru soundtracker-0.6.8/app/transposition.h soundtracker-1.0.2~pre2/app/transposition.h --- soundtracker-0.6.8/app/transposition.h 2002-05-17 13:09:51.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/transposition.h 2019-04-15 17:45:05.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - Transposition dialog (header) * - * Copyright (C) 1999-2001 Michael Krause + * Copyright (C) 1999-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,9 +26,9 @@ #include "tracker.h" -void transposition_dialog (void); +void transposition_dialog(void); -void transposition_transpose_selection (Tracker *t, - int by); +void transposition_transpose_selection(Tracker* t, + int by); #endif /* _ST_TRANSPOSITION_H */ diff -Nru soundtracker-0.6.8/app/xm.c soundtracker-1.0.2~pre2/app/xm.c --- soundtracker-0.6.8/app/xm.c 2006-02-25 12:49:05.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/xm.c 2020-12-31 14:52:25.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - XM support routines * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * The XM loader is based on the "maube" 0.10.4 source code, Copyright * (C) 1997 by Conrad Parker (not much is left over, though :D) @@ -22,55 +22,59 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include +#include #include +#include #include #include #include -#include -#include -#include -#include #include -#include #include #include +#include #include +#include +#include -#include "i18n.h" -#include "gui-settings.h" -#include "xm.h" -#include "xm-player.h" -#include "endian-conv.h" -#include "st-subs.h" -#include "recode.h" -#include "errors.h" #include "audio.h" - +#include "endian-conv.h" +#include "gui-settings.h" +#include "gui.h" #include "preferences.h" +#include "recode.h" +#include "st-subs.h" +#include "xm-player.h" +#include "xm.h" #define LFSTAT_IS_MODULE 1 -static guint16 npertab[60]={ +typedef enum { + XM_NO_ERROR = 0, + XM_ERROR_RECOVERABLE, + XM_ERROR_NOMEM +} XMStatus; + +static guint16 npertab[60] = { /* -> Tuning 0 */ - 1712,1616,1524,1440,1356,1280,1208,1140,1076,1016, 960, 906, + 1712, 1616, 1524, 1440, 1356, 1280, 1208, 1140, 1076, 1016, 960, 906, 856, 808, 762, 720, 678, 640, 604, 570, 538, 508, 480, 453, 428, 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226, 214, 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113, - 107, 101, 95, 90, 85, 80, 75, 71, 67, 63, 60, 56 + 107, 101, 95, 90, 85, 80, 75, 71, 67, 63, 60, 56 }; /* This function calculates relnote and finetune settings such that the sample, when played back at XM note 'note' (for example, C-6) will be played back at sample frequency 'frequency'. */ -void -xm_freq_note_to_relnote_finetune (float frequency, - unsigned note, - gint8 *relnote, - gint8 *finetune) +void xm_freq_note_to_relnote_finetune(float frequency, + unsigned note, + gint8* relnote, + gint8* finetune) { - int pitch = - log(frequency / 8363.0) / M_LN2 * (float)PITCH_OCTAVE; + int pitch = -log(frequency / 8363.0) / M_LN2 * (float)PITCH_OCTAVE; int nn = 128 * (49 - note) - pitch / 2; int rn; @@ -80,7 +84,7 @@ to the above equation. We use the one with finetune in the interval [-64, +63]. */ - if(nn < 0) { + if (nn < 0) { rn = (nn - 63) / 128; } else { rn = (nn + 64) / 128; @@ -91,12 +95,12 @@ *relnote = rn; } -static void -xm_load_xm_note (XMNote *note, - FILE *f) +static gboolean +xm_load_xm_note(XMNote* note, + FILE* f) { guint8 c, d[4]; - + note->note = 0; note->instrument = 0; note->volume = 0; @@ -105,82 +109,84 @@ c = fgetc(f); - if(c & 0x80) { - if(c & 0x01) - note->note = fgetc(f); - if(c & 0x02) - note->instrument = fgetc(f); - if(c & 0x04) - note->volume = fgetc(f); - if(c & 0x08) - note->fxtype = fgetc(f); - if(c & 0x10) - note->fxparam = fgetc(f); + if (c & 0x80) { + if (c & 0x01) + note->note = fgetc(f); + if (c & 0x02) + note->instrument = fgetc(f); + if (c & 0x04) + note->volume = fgetc(f); + if (c & 0x08) + note->fxtype = fgetc(f); + if (c & 0x10) + note->fxparam = fgetc(f); } else { - fread(d, 1, sizeof(d), f); - note->note = c; - note->instrument = d[0]; - note->volume = d[1]; - note->fxtype = d[2]; - note->fxparam = d[3]; + if (fread(d, 1, sizeof(d), f) != sizeof(d)) + return FALSE; + note->note = c; + note->instrument = d[0]; + note->volume = d[1]; + note->fxtype = d[2]; + note->fxparam = d[3]; } + return TRUE; } static int -xm_put_xm_note (XMNote *n, - guint8 *b) +xm_put_xm_note(XMNote* n, + guint8* b) { int p = 0; guint8 x = 0x80; - if(n->note != 0) { - x |= 0x01; - p++; - } - if(n->instrument != 0) { - x |= 0x02; - p++; - } - if(n->volume != 0) { - x |= 0x04; - p++; - } - if(n->fxtype != 0) { - x |= 0x08; - p++; - } - if(n->fxparam != 0) { - x |= 0x10; - p++; - } - - if(p <= 3) { /* FastTracker compares against 4 here */ - *b++ = x; - if(x & 0x01) - *b++ = n->note; - if(x & 0x02) - *b++ = n->instrument; - if(x & 0x04) - *b++ = n->volume; - if(x & 0x08) - *b++ = n->fxtype; - if(x & 0x10) - *b++ = n->fxparam; - return p + 1; + if (n->note != 0) { + x |= 0x01; + p++; + } + if (n->instrument != 0) { + x |= 0x02; + p++; + } + if (n->volume != 0) { + x |= 0x04; + p++; + } + if (n->fxtype != 0) { + x |= 0x08; + p++; + } + if (n->fxparam != 0) { + x |= 0x10; + p++; + } + + if (p <= 3) { /* FastTracker compares against 4 here */ + *b++ = x; + if (x & 0x01) + *b++ = n->note; + if (x & 0x02) + *b++ = n->instrument; + if (x & 0x04) + *b++ = n->volume; + if (x & 0x08) + *b++ = n->fxtype; + if (x & 0x10) + *b++ = n->fxparam; + return p + 1; } else { - *b++ = n->note; - *b++ = n->instrument; - *b++ = n->volume; - *b++ = n->fxtype; - *b++ = n->fxparam; - return 5; + *b++ = n->note; + *b++ = n->instrument; + *b++ = n->volume; + *b++ = n->fxtype; + *b++ = n->fxparam; + return 5; } } -static int -xm_load_xm_pattern (XMPattern *pat, - int num_channels, - FILE *f) +static XMStatus +xm_load_xm_pattern(XMPattern* pat, + int num_channels, + FILE* f) { guint8 ph[9]; int i, j; @@ -188,67 +194,151 @@ guint32 hdr_len, datasize; unsigned long position; - fread(ph, 1, sizeof(ph), f); + if (fread(ph, 1, sizeof(ph), f) != sizeof(ph)) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Pattern header reading error."), FALSE); + /* Initialize pattern as empty on error */ + if (!st_init_pattern_channels(pat, 64,(num_channels + 1) & 0xfe)) + return XM_ERROR_NOMEM; + else + return XM_ERROR_RECOVERABLE; + } len = get_le_16(ph + 5); - if(len > 256) { - char buf[128]; - sprintf(buf, _("Pattern length out of range: %d.\n"), len); - error_error(buf); - return 0; + if (len > 256) { + static GtkWidget* dialog = NULL; + gchar* buf = g_strdup_printf(_("Pattern length out of range: %d."), len); + + gui_error_dialog(&dialog, buf, FALSE); + g_free(buf); + if (!st_init_pattern_channels(pat, 64,(num_channels + 1) & 0xfe)) + return XM_ERROR_NOMEM; + else + return XM_ERROR_RECOVERABLE; } /* skip the rest of the header, if exists */ if ((hdr_len = get_le_32(ph)) > 9) - fseek(f, hdr_len - 9, SEEK_CUR); + fseek(f, hdr_len - 9, SEEK_CUR); position = ftell(f); - if(!st_init_pattern_channels(pat, - len > 0 ? len : 1, - (num_channels + 1) & 0xfe)) - return 0; + if (!st_init_pattern_channels(pat, + len > 0 ? len : 1, + (num_channels + 1) & 0xfe)) + return XM_ERROR_NOMEM; - if((datasize = get_le_16(ph + 7)) == 0) - return 1; + if ((datasize = get_le_16(ph + 7)) == 0) + return XM_NO_ERROR; /* Read channel data */ - for(j = 0; j < len; j++) { - for(i = 0; i < num_channels; i++) { - xm_load_xm_note(&pat->channels[i][j], f); - } + for (j = 0; j < len; j++) { + for (i = 0; i < num_channels; i++) { + if (!xm_load_xm_note(&pat->channels[i][j], f)) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Error loading notes."), FALSE); + return XM_ERROR_RECOVERABLE; + } + } } fseek(f, position + datasize, SEEK_SET); /* error-proof positioning to the next pattern */ - return 1; + return XM_NO_ERROR; +} + +/* A simple correlative procedure for looking for whatever we need */ +static gboolean xm_seek_correlative(FILE* f, + const gsize seek_size, + gboolean (*corr_func)(const guint8* buf)) +{ + gint toread, num_read, where; + static guint8 buf[256]; + + toread = sizeof(buf); + where = 0; + do { + gint i; + + num_read = fread(&buf[where], 1, toread, f); + for (i = 0; i < (gint)((feof(f) ? num_read + where : sizeof(buf)) - seek_size); i++) { + if (corr_func(&buf[i])) { + fseek(f, -(sizeof(buf) - i), SEEK_CUR); + return TRUE; + } + } + memmove(buf, &buf[i], seek_size); + where = seek_size; + toread = sizeof(buf) - seek_size; + } while (!feof(f)); + + return FALSE; +} + +/* 4 bytes pattern header length (always 9), then 0, then number of rows (word, <= 256) + This is valid for XMs only for a time being. No broken mods recovery yet... */ +#define PAT_SEEK_SIZE 7 +static gboolean +corr_pat(const guint8* buf) +{ + return get_le_32(buf) == 9 && !buf[4] && get_le_16(buf + 5) <= 256; } -static int -xm_load_patterns (XMPattern ptr[], - int num_patterns, - int num_channels, - FILE *f, - int(*loadfunc)(XMPattern*,int,FILE*)) -{ - int i, e; - - for(i = 0; i < 256; i++) { - if(i < num_patterns) - e = loadfunc(&ptr[i], num_channels, f); - else - e = st_init_pattern_channels(&ptr[i], 64, (num_channels + 1) & 0xfe); +/* The fields are following: 4-bytes instrument header size (0x107 for a non-empty instrument, + 22 bytes name, 1 byte type (can store a random number for modules created by the original + FastTracker, contrary to the xm.txt file, than 2-bytes number of samples (<= 128). */ +#define XI_SEEK_SIZE (4 + 22 + 1 + 2) +static gboolean +corr_xi(const guint8* buf) +{ + return get_le_32(buf) == 0x107 && get_le_16(buf + 27) <= 128; +} + +static XMStatus +xm_load_patterns(XMPattern ptr[], + int num_patterns, + int num_channels, + FILE* f, + XMStatus (*loadfunc)(XMPattern*, int, FILE*)) +{ + gint i; + XMStatus e, exitstat = XM_NO_ERROR; + + for (i = 0; i < 256; i++) { + if (i < num_patterns) { + fpos_t fpos; + + e = loadfunc(&ptr[i], num_channels, f); + if (e == XM_ERROR_RECOVERABLE) { + exitstat = XM_ERROR_RECOVERABLE; + fgetpos(f, &fpos); + /* We will try to find the next valid pattern */ + if (xm_seek_correlative(f, PAT_SEEK_SIZE, corr_pat)) + /* Success, continue loading patterns */ + continue; + /* Error, preliminary termination of patterns loading. + We will try to load the rest of the module, so let's + find the first instrument */ + fsetpos(f, &fpos); + xm_seek_correlative(f, XI_SEEK_SIZE, corr_xi); + /* No more attempts to load patterns */ + num_patterns = 0; + } + } else + e = st_init_pattern_channels(&ptr[i], 64, (num_channels + 1) & 0xfe); - if(!e) - return 0; + if (e == XM_ERROR_NOMEM) + return e; } - - return 1; + + return exitstat; } -static void -xm_save_xm_pattern (XMPattern *p, - int num_channels, - FILE *f) +static gboolean +xm_save_xm_pattern(XMPattern* p, + int num_channels, + FILE* f) { int i, j; guint8 sh[9]; @@ -256,10 +346,10 @@ int bp; bp = 0; - for(j = 0; j < p->length; j++) { - for(i = 0; i < num_channels; i++) { - bp += xm_put_xm_note(&p->channels[i][j], buf + bp); - } + for (j = 0; j < p->length; j++) { + for (i = 0; i < num_channels; i++) { + bp += xm_put_xm_note(&p->channels[i][j], buf + bp); + } } put_le_32(sh + 0, 9); @@ -267,262 +357,382 @@ put_le_16(sh + 5, p->length); put_le_16(sh + 7, bp); - if(bp == p->length * num_channels) { - /* pattern is empty */ - put_le_16(sh + 7, 0); - fwrite(sh, 1, sizeof(sh), f); + if (bp == p->length * num_channels) { + /* pattern is empty */ + put_le_16(sh + 7, 0); + return fwrite(sh, 1, sizeof(sh), f) != sizeof(sh); } else { - fwrite(sh, 1, sizeof(sh), f); - fwrite(buf, 1, bp, f); + return fwrite(sh, 1, sizeof(sh), f) != sizeof(sh) || fwrite(buf, 1, bp, f) != bp; } } +/* Removing space-padding */ +static inline void +seal_ascii(gchar* str, const guint len) +{ + gint i; + + for (i = len - 1; i >= 0 && str[i] == 0x20; i--) + str[i] = 0; +} + +/* As a result of the recoding from FT2 to utf-8 the line becomes space-padded. + So we replace trailing spaces with zeroes */ static void -xm_load_xm_samples (STSample samples[], - int num_samples, - FILE *f) +string_seal(gchar* str, const guint length) +{ + gchar* ptr = g_utf8_offset_to_pointer(str, length - 1); + + while (ptr && ptr[0] == 0x20) { + ptr[0] = 0; + ptr = g_utf8_find_prev_char(str, ptr); + } +} + +static gboolean +xm_load_xm_samples(STInstrument* instr, + int num_samples, + FILE* f) { int i, j; guint8 sh[40]; - STSample *s; + STSample* s; guint16 p; - gint16 *d16; - gint8 *d8; + gint16* d16; + gint8* d8; + gboolean retcode = TRUE; + + g_assert(num_samples <= ST_NUM_SAMPLES(instr)); + + for (i = 0; i < num_samples; i++) { + s = &instr->samples[i]; + if (fread(sh, 1, sizeof(sh), f) != sizeof(sh)) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Sample header reading error."), FALSE); + return FALSE; + } + s->sample.length = get_le_32(sh + 0); + s->sample.loopstart = get_le_32(sh + 4); + s->sample.loopend = get_le_32(sh + 8); /* this is really the loop _length_ */ + s->volume = sh[12]; + s->finetune = sh[13]; + s->sample.looptype = sh[14]; + s->panning = sh[15]; + s->relnote = sh[16]; + memcpy(s->name, (char*)sh + 18, 22); + s->name[22] = '\0'; + recode_to_utf(s->name, s->utf_name, 22); + string_seal(s->utf_name, 22); + seal_ascii(s->name, 22); + s->needs_conversion = FALSE; + } + + for (i = 0; i < num_samples; i++) { + gint actual_length; + + s = &instr->samples[i]; + if (s->sample.length == 0) { + /* no sample in this slot, delete all info except sample name */ + char name[23], utf_name[89]; + strncpy(name, s->name, 22); + strcpy(utf_name, s->utf_name); + name[22] = 0; + st_clean_sample(s, (const char*)&utf_name, (const char*)&name); + continue; + } + s->treat_as_8bit = !(s->sample.looptype & 0x10); + s->sample.looptype &= 3; + + if (!s->treat_as_8bit) { + /* 16 bit sample */ + s->treat_as_8bit = FALSE; + s->sample.length >>= 1; + s->sample.loopstart >>= 1; + s->sample.loopend >>= 1; + + d16 = s->sample.data = malloc(2 * s->sample.length); + actual_length = fread(d16, 1, 2 * s->sample.length, f); + if (actual_length != 2 * s->sample.length) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Sample data reading error."), FALSE); + + if (actual_length == -1) /* completely broken sample, nothing to do */ + return FALSE; + else { + s->sample.data = realloc(s->sample.data, actual_length); + s->sample.length = actual_length >> 1; + retcode = FALSE; + } + } + le_16_array_to_host_order(d16, s->sample.length); + + for (j = s->sample.length, p = 0; j; j--) { + p += *d16; + *d16++ = p; + } + } else { + s->treat_as_8bit = TRUE; - g_assert(num_samples <= 16); + d16 = s->sample.data = malloc(2 * s->sample.length); + d8 = (gint8*)d16; + d8 += s->sample.length; + actual_length = fread(d8, 1, s->sample.length, f); + if (actual_length != s->sample.length) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Sample data reading error."), FALSE); + + if (actual_length == -1) /* completely broken sample, nothing to do */ + return FALSE; + else { + s->sample.data = realloc(s->sample.data, actual_length); + s->sample.length = actual_length; + retcode = FALSE; + } + } - for(i = 0; i < num_samples; i++) { - s = &samples[i]; - fread(sh, 1, sizeof(sh), f); - s->sample.length = get_le_32(sh + 0); - s->sample.loopstart = get_le_32(sh + 4); - s->sample.loopend = get_le_32(sh + 8); /* this is really the loop _length_ */ - s->volume = sh[12]; - s->finetune = sh[13]; - s->sample.looptype = sh[14]; - s->panning = sh[15]; - s->relnote = sh[16]; - strncpy(s->name, sh + 18, 22); - s->name[22] = '\0'; - recode_ibmpc_to_latin1(s->name, 22); - } - - for(i = 0; i < num_samples; i++) { - s = &samples[i]; - if(s->sample.length == 0) { - /* no sample in this slot, delete all info except sample name */ - char name[23]; - strncpy(name, s->name, 22); - name[22] = 0; - st_clean_sample(s, (const char*)&name); - continue; - } - s->treat_as_8bit = !(s->sample.looptype & 0x10); - s->sample.looptype &= 3; - - if(!s->treat_as_8bit) { - /* 16 bit sample */ - s->treat_as_8bit = FALSE; - s->sample.length >>= 1; - s->sample.loopstart >>= 1; - s->sample.loopend >>= 1; - - d16 = s->sample.data = malloc(2 * s->sample.length); - fread(d16, 1, 2 * s->sample.length, f); - le_16_array_to_host_order(d16, s->sample.length); - - for(j = s->sample.length, p = 0; j; j--) { - p += *d16; - *d16++ = p; - } - } else { - s->treat_as_8bit = TRUE; - - d16 = s->sample.data = malloc(2 * s->sample.length); - d8 = (gint8*)d16; - d8 += s->sample.length; - fread(d8, 1, s->sample.length, f); - - for(j = s->sample.length, p = 0; j; j--) { - p += *d8++; - *d16++ = p << 8; - } - } - - if(s->sample.loopend == 0) { - s->sample.looptype = 0; - } else { - s->sample.loopend += s->sample.loopstart; /* now it is the loop _end_ */ - } - - if(s->sample.looptype == ST_MIXER_SAMPLE_LOOPTYPE_NONE) { - s->sample.loopstart = 0; - s->sample.loopend = 1; - } - } -} + for (j = s->sample.length, p = 0; j; j--) { + p += *d8++; + *d16++ = p << 8; + } + } -static void -xm_save_xm_samples (STSample samples[], - FILE *f, - int num_samples) + if (s->sample.loopend == 0) { + s->sample.looptype = 0; + } else { + s->sample.loopend += s->sample.loopstart; /* now it is the loop _end_ */ + } + + if (s->sample.loopend > s->sample.length) /* Fix loop of a corrupted sample */ + s->sample.loopend = s->sample.length; + if (s->sample.loopstart >= s->sample.loopend) + s->sample.loopstart = s->sample.loopend - 1; + + if (s->sample.looptype == ST_MIXER_SAMPLE_LOOPTYPE_NONE) { + s->sample.loopstart = 0; + s->sample.loopend = 1; + } + } + return retcode; +} + +static gboolean +xm_save_xm_samples(STSample samples[], + FILE* f, + int num_samples, + gboolean* illegal_chars, + char pad) { - int i, k; + guint i, k, len; guint8 sh[40]; - STSample *s; + STSample* s; + gboolean is_error = FALSE; - for(i = 0; i < num_samples; i++) { - /* save sample header */ - s = &samples[i]; - memset(sh, 0, sizeof(sh)); - put_le_32(sh + 0, s->sample.length * (s->treat_as_8bit ? 1 : 2)); - put_le_32(sh + 4, s->sample.loopstart * (s->treat_as_8bit ? 1 : 2)); - put_le_32(sh + 8, (s->sample.loopend - s->sample.loopstart) * (s->treat_as_8bit ? 1 : 2)); - sh[12] = s->volume; - sh[13] = s->finetune; - sh[14] = s->sample.looptype | (s->treat_as_8bit ? 0x00 : 0x10); - sh[15] = s->panning; - sh[16] = s->relnote; - sh[17] = 0; - strncpy(sh + 18, s->name, 22); - recode_latin1_to_ibmpc(sh + 18, 22); - fwrite(sh, 1, sizeof(sh), f); - } - - for(i = 0; i < num_samples; i++) { - s = &samples[i]; - - if(!s->treat_as_8bit) { - // Save as 16 bit sample - gint16 *packbuf, *d16, *ss; - gint16 p, d; - - packbuf = malloc(s->sample.length * 2); - d16 = s->sample.data; - ss = packbuf; - - for(k = s->sample.length, p = 0, d = 0; k; k--) { - d = *d16 - p; - *ss++ = d; - p = *d16++; - } - - le_16_array_to_host_order(packbuf, s->sample.length); - fwrite(packbuf, 1, s->sample.length * 2, f); - free(packbuf); - } else { - // Save as 8 bit sample - gint16 *d16; - gint8 *packbuf, *ss; - gint8 p, d; - - packbuf = malloc(s->sample.length); - d16 = s->sample.data; - ss = packbuf; - - for(k = s->sample.length, p = 0, d = 0; k; k--) { - d = (*d16 >> 8) - p; - *ss++ = d; - p = (*d16++ >> 8); - } - - fwrite(packbuf, 1, s->sample.length, f); - free(packbuf); - } + for (i = 0; i < num_samples; i++) { + /* save sample header */ + s = &samples[i]; + memset(sh, 0, sizeof(sh)); + put_le_32(sh + 0, s->sample.length * (s->treat_as_8bit ? 1 : 2)); + put_le_32(sh + 4, s->sample.loopstart * (s->treat_as_8bit ? 1 : 2)); + put_le_32(sh + 8, (s->sample.loopend - s->sample.loopstart) * (s->treat_as_8bit ? 1 : 2)); + sh[12] = s->volume; + sh[13] = s->finetune; + sh[14] = s->sample.looptype | (s->treat_as_8bit ? 0x00 : 0x10); + sh[15] = s->panning; + sh[16] = s->relnote; + sh[17] = 0; + if (s->needs_conversion) { + *illegal_chars |= recode_from_utf(s->utf_name, s->name, 22); + s->needs_conversion = FALSE; + } + len = strlen(s->name); + if (pad != 0x20) + seal_ascii(s->name, 22); + memcpy(&((char*)sh)[18], s->name, len); /* Copy the string without the trailing zero */ + memset(&((char*)sh)[18 + len], pad, 22 - len); /* Sample name is space- or zero-padded (in XM or XI) */ + is_error |= fwrite(sh, 1, sizeof(sh), f) != sizeof(sh); + } + + for (i = 0; i < num_samples; i++) { + s = &samples[i]; + + if (!s->treat_as_8bit) { + // Save as 16 bit sample + gint16 *packbuf, *d16, *ss; + gint16 p, d; + + packbuf = malloc(s->sample.length * 2); + d16 = s->sample.data; + ss = packbuf; + + for (k = s->sample.length, p = 0, d = 0; k; k--) { + d = *d16 - p; + *ss++ = d; + p = *d16++; + } + + le_16_array_to_host_order(packbuf, s->sample.length); + is_error |= fwrite(packbuf, 1, s->sample.length * 2, f) != s->sample.length * 2; + free(packbuf); + } else { + // Save as 8 bit sample + gint16* d16; + gint8 *packbuf, *ss; + gint8 p, d; + + packbuf = malloc(s->sample.length); + d16 = s->sample.data; + ss = packbuf; + + for (k = s->sample.length, p = 0, d = 0; k; k--) { + d = (*d16 >> 8) - p; + *ss++ = d; + p = (*d16++ >> 8); + } + + is_error |= fwrite(packbuf, 1, s->sample.length, f) != s->sample.length; + free(packbuf); + } } + return is_error; } static void -xm_check_envelope (STEnvelope *e) +xm_check_envelope(STEnvelope* e) { int i; - if(e->num_points == 0 || e->num_points > 12) - e->num_points = 1; + if (e->num_points == 0 || e->num_points > 12) + e->num_points = 1; - for(i = 0; i < e->num_points; i++) { - int h = e->points[i].val; - if(!(h >= 0 && h <= 64)) - e->points[i].val = 32; + for (i = 0; i < e->num_points; i++) { + int h = e->points[i].val; + if (!(h >= 0 && h <= 64)) + e->points[i].val = 32; } e->points[0].pos = 0; } static int -xm_load_xm_instrument (STInstrument *instr, - FILE *f) +xm_load_xm_instrument(STInstrument* instr, + FILE* f) { - guint8 a[29], b[16]; + static GtkWidget* dialog = NULL; + guint8 a[29], b[23]; guint16 num_samples; guint32 iheader_size; + const long instr_beg = ftell(f); st_clean_instrument(instr, NULL); - fread(a, 1, sizeof(a), f); + if (fread(a, 1, sizeof(a), f) != sizeof(a)) { + gui_error_dialog(&dialog, _("Instrument header reading error."), TRUE); + return 0; + } iheader_size = get_le_32(a); - strncpy(instr->name, a + 4, 22); - recode_ibmpc_to_latin1(instr->name, 22); + memcpy(instr->name, (char*)a + 4, 22); + recode_to_utf(instr->name, instr->utf_name, 22); + string_seal(instr->utf_name, 22); + seal_ascii(instr->name, 22); /* For any case... */ + instr->needs_conversion = FALSE; - if(iheader_size <= 29) { - return 1; + if (iheader_size <= 29) { + return 1; } num_samples = get_le_16(a + 27); - if(num_samples > 16) { - error_error("XM Load Error: Number of samples in instrument > 16.\n"); - return 0; - } - - if(num_samples == 0) { - /* Skip rest of header */ - fseek(f, iheader_size - sizeof(a), SEEK_CUR); + if (num_samples > ST_NUM_SAMPLES(instr)) { + gchar* buf = g_strdup_printf(_("XM Load Error: Number of samples in the instrument > %u.\n" + "%s can try to find the next valid instrument. Do it?"), + (guint)ST_NUM_SAMPLES(instr), PACKAGE_NAME); + gboolean success = FALSE; + + if (gui_ok_cancel_modal(mainwindow, buf)) { + success = xm_seek_correlative(f, XI_SEEK_SIZE, corr_xi); + } + g_free(buf); + return success; + } + + if (num_samples == 0) { + /* Skip rest of header */ + fseek(f, iheader_size - sizeof(a), SEEK_CUR); } else { - fread(a, 1, 4, f); - if(get_le_32(a) != 40) { - error_error("XM Load Error: Sample header size != 40.\n"); - return 0; - } - fread(instr->samplemap, 1, 96, f); - fread(instr->vol_env.points, 1, 48, f); - le_16_array_to_host_order((gint16*)instr->vol_env.points, 24); - fread(instr->pan_env.points, 1, 48, f); - le_16_array_to_host_order((gint16*)instr->pan_env.points, 24); - - fread(b, 1, sizeof(b), f); - instr->vol_env.num_points = b[0]; - instr->vol_env.sustain_point = b[2]; - instr->vol_env.loop_start = b[3]; - instr->vol_env.loop_end = b[4]; - instr->vol_env.flags = b[8]; - instr->pan_env.num_points = b[1]; - instr->pan_env.sustain_point = b[5]; - instr->pan_env.loop_start = b[6]; - instr->pan_env.loop_end = b[7]; - instr->pan_env.flags = b[9]; - - xm_check_envelope(&instr->vol_env); - xm_check_envelope(&instr->pan_env); - - instr->vibtype = b[10]; - if(instr->vibtype >= 4) { - char buf[128]; - instr->vibtype = 0; - sprintf(buf, "XM Load Warning: Invalid vibtype %d, using Sine.\n", instr->vibtype); - error_warning(buf); - } - instr->vibrate = b[13]; - instr->vibdepth = b[12]; - instr->vibsweep = b[11]; - - instr->volfade = get_le_16(b + 14); - - if(iheader_size > 241) { - /* Skip remainder of header */ - fseek(f, iheader_size - 241, SEEK_CUR); - } + if (fread(a, 1, 4, f) != 4) { + gui_error_dialog(&dialog, _("Instrument header reading error."), TRUE); + return 0; + } + if (get_le_32(a) != 40) { + gui_error_dialog(&dialog, _("XM Load Error: Sample header size != 40."), TRUE); + return 0; + } + if (fread(instr->samplemap, 1, 96, f) != 96) { + gui_error_dialog(&dialog, _("Sample map reading error."), TRUE); + return 0; + } + if (fread(instr->vol_env.points, 1, 48, f) != 48) { + gui_error_dialog(&dialog, _("Volume envelope points reading error."), TRUE); + return 0; + } + le_16_array_to_host_order((gint16*)instr->vol_env.points, 24); + if (fread(instr->pan_env.points, 1, 48, f) != 48) { + gui_error_dialog(&dialog, _("Panning envelope points reading error."), TRUE); + return 0; + } + le_16_array_to_host_order((gint16*)instr->pan_env.points, 24); + + if (fread(b, 1, sizeof(b), f) != sizeof(b)) { + gui_error_dialog(&dialog, _("Envelope parameters reading error."), TRUE); + return 0; + } + instr->vol_env.num_points = b[0]; + instr->vol_env.sustain_point = b[2]; + instr->vol_env.loop_start = b[3]; + instr->vol_env.loop_end = b[4]; + instr->vol_env.flags = b[8]; + instr->pan_env.num_points = b[1]; + instr->pan_env.sustain_point = b[5]; + instr->pan_env.loop_start = b[6]; + instr->pan_env.loop_end = b[7]; + instr->pan_env.flags = b[9]; + + xm_check_envelope(&instr->vol_env); + xm_check_envelope(&instr->pan_env); + + instr->vibtype = b[10]; + if (instr->vibtype >= 4) { + gchar* buf = g_strdup_printf(_("XM Load Warning: Invalid vibtype %d, using Sine."), instr->vibtype); + + instr->vibtype = 0; + gui_warning_dialog(&dialog, buf, TRUE); + g_free(buf); + } + instr->vibrate = b[13]; + instr->vibdepth = b[12]; + instr->vibsweep = b[11]; + + instr->volfade = get_le_16(b + 14); + if (instr->volfade > 0xfff) + instr->volfade = 0xfff; + + instr->midi_on = (b[16] == 1); + instr->midi_channel = b[17] <= 15 ? b[17] : 15; + instr->midi_program = get_le_16(b + 18); + if (instr->midi_program > 127) + instr->midi_program = 127; + instr->midi_bend_range = get_le_16(b + 20); + if (instr->midi_bend_range > 36) + instr->midi_bend_range = 36; + instr->mute_computer = (b[22] == 1); + + /* Skip remainder of header */ + fseek(f, instr_beg + iheader_size, SEEK_SET); - xm_load_xm_samples(instr->samples, num_samples, f); + if (!xm_load_xm_samples(instr, num_samples, f)) + return 0; } return 1; @@ -533,39 +743,83 @@ modules. Thanks to KB for reverse-engineering the file format (see XI.TXT) */ gboolean -xm_load_xi (STInstrument *instr, - FILE *f) +xm_load_xi(STInstrument* instr, + FILE* f) { guint8 a[29], b[38]; - int num_samples; + gint num_samples, version; + static GtkWidget* dialog = NULL; - st_clean_instrument(instr, NULL); + if (fread(a, 1, 21, f) != 21) { + static GtkWidget* dialog = NULL; - fread(a, 1, 21, f); + gui_error_dialog(&dialog, _("Instrument header reading error."), FALSE); + return FALSE; + } a[21] = 0; - if(strcmp(a, "Extended Instrument: ")) { - error_error(_("File is no XI instrument.")); - return 0; + if (strcmp((char*)a, "Extended Instrument: ")) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("The file is not an XI instrument."), FALSE); + return FALSE; } - fread(a, 1, 22, f); - strncpy(instr->name, a, 22); - recode_ibmpc_to_latin1(instr->name, 22); + if (fread(a, 1, 22, f) != 22) { + static GtkWidget* dialog = NULL; - fread(a, 1, 23, f); - if(get_le_16(a + 21) != 0x0102) { - sprintf(b, _("Unknown XI version 0x%x\n"), get_le_16(a+21)); - error_error(b); - return 0; + gui_error_dialog(&dialog, _("Instrument header reading error."), FALSE); + return FALSE; } + memcpy(instr->name, (char*)a, 22); + recode_to_utf(instr->name, instr->utf_name, 22); + string_seal(instr->utf_name, 22); + seal_ascii(instr->name, 22); + instr->needs_conversion = FALSE; - fread(instr->samplemap, 1, 96, f); - fread(instr->vol_env.points, 1, 48, f); + if (fread(a, 1, 23, f) != 23) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Instrument header reading error."), FALSE); + return FALSE; + } + version = get_le_16(a + 21); + if (version != 0x0102 && version != 0x0101) { + gchar* text = g_strdup_printf(_("Unknown XI version 0x%04x (only 0x0101 and 0x0102 are supported).\n" + "Will you still try to load this instrument?"), version); + gboolean answer = gui_ok_cancel_modal(mainwindow, text); + + g_free(text); + if (!answer) + return FALSE; + } + + if (fread(instr->samplemap, 1, 96, f) != 96) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Instrument sample map reading error."), FALSE); + return FALSE; + } + if (fread(instr->vol_env.points, 1, 48, f) != 48) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Instrument volume envelope points reading error."), FALSE); + return FALSE; + } le_16_array_to_host_order((gint16*)instr->vol_env.points, 24); - fread(instr->pan_env.points, 1, 48, f); + if (fread(instr->pan_env.points, 1, 48, f) != 48) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Instrument panning envelope points reading error."), FALSE); + return FALSE; + } le_16_array_to_host_order((gint16*)instr->pan_env.points, 24); - fread(b, 1, 16, f); + if (fread(b, 1, 23, f) != 23) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Instrument envelope parameters reading error."), FALSE); + return FALSE; + } instr->vol_env.num_points = b[0]; instr->vol_env.sustain_point = b[2]; instr->vol_env.loop_start = b[3]; @@ -581,52 +835,85 @@ xm_check_envelope(&instr->pan_env); instr->vibtype = b[10]; - if(instr->vibtype >= 4) { - char buf[128]; - instr->vibtype = 0; - sprintf(buf, _("Invalid vibtype %d, using Sine.\n"), instr->vibtype); - error_warning(buf); + if (instr->vibtype >= 4) { + gchar* buf = g_strdup_printf(_("Invalid vibtype %d, using Sine."), instr->vibtype); + + instr->vibtype = 0; + gui_warning_dialog(&dialog, buf, TRUE); + g_free(buf); } instr->vibrate = b[13]; instr->vibdepth = b[12]; instr->vibsweep = b[11]; - + instr->volfade = get_le_16(b + 14); + if (instr->volfade > 0xfff) + instr->volfade = 0xfff; - fread(a, 1, 24, f); - num_samples = get_le_16(a + 22); - xm_load_xm_samples(instr->samples, num_samples, f); + instr->midi_on = (b[16] == 1); + instr->midi_channel = b[17] <= 15 ? b[17] : 15; + instr->midi_program = get_le_16(b + 18); + if (instr->midi_program > 127) + instr->midi_program = 127; + if (version == 0x0101) { + num_samples = instr->midi_program; + instr->midi_program = 0; + instr->midi_bend_range = 0; + instr->mute_computer = 0; + } else { + instr->midi_bend_range = get_le_16(b + 20); + if (instr->midi_bend_range > 36) + instr->midi_bend_range = 36; + instr->mute_computer = (b[22] == 1); + } + + if (fread(a, 1, 17, f) != 17) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Instrument header reading error."), FALSE); + return FALSE; + } + if (version != 0x0101) + num_samples = get_le_16(a + 15); + if (!xm_load_xm_samples(instr, num_samples, f)) + return FALSE; - return 1; + return TRUE; } gboolean -xm_save_xi (STInstrument *instr, - FILE *f) +xm_save_xi(STInstrument* instr, + FILE* f) { guint8 a[48]; - int num_samples; + guint num_samples, len; + gboolean is_error = FALSE, illegal_chars = FALSE; num_samples = st_instrument_num_save_samples(instr); - fwrite("Extended Instrument: ", 1, 21, f); + is_error |= fwrite("Extended Instrument: ", 1, 21, f) != 21; - strncpy(a, instr->name, 22); - recode_latin1_to_ibmpc(a, 22); - fwrite(a, 1, 22, f); + if (instr->needs_conversion) { + illegal_chars |= recode_from_utf(instr->utf_name, instr->name, 22); + instr->needs_conversion = FALSE; + } + len = strlen(instr->name); + memcpy((char*)a, instr->name, len); /* Copy the string without the trailing zero */ + memset(&((char*)a)[len], 0x20, 22 - len); /* Instrument name is space-padded */ + is_error |= fwrite(a, 1, 22, f) != 22; a[0] = 0x1a; memcpy(a + 1, "rst's SoundTracker ", 20); put_le_16(a + 21, 0x0102); - fwrite(a, 1, 23, f); + is_error |= fwrite(a, 1, 23, f) != 23; - fwrite(instr->samplemap, 1, 96, f); + is_error |= fwrite(instr->samplemap, 1, 96, f) != 96; memcpy(a, instr->vol_env.points, 48); le_16_array_to_host_order((gint16*)a, 24); - fwrite(a, 1, 48, f); + is_error |= fwrite(a, 1, 48, f) != 48; memcpy(a, instr->pan_env.points, 48); le_16_array_to_host_order((gint16*)a, 24); - fwrite(a, 1, 48, f); + is_error |= fwrite(a, 1, 48, f) != 48; a[0] = instr->vol_env.num_points; a[2] = instr->vol_env.sustain_point; @@ -643,57 +930,76 @@ a[12] = instr->vibdepth; a[11] = instr->vibsweep; put_le_16(a + 14, instr->volfade); - fwrite(a, 1, 16, f); - - memset(a, 0, 24); - put_le_16(a + 22, num_samples); - fwrite(a, 1, 24, f); - - xm_save_xm_samples(instr->samples, f, num_samples); - - return TRUE; -} - -static void -xm_save_xm_instrument (STInstrument *instr, - FILE *f, - gboolean mode) + a[16] = instr->midi_on ? 1 : 0; + a[17] = instr->midi_channel; + put_le_16(a + 18, instr->midi_program); + put_le_16(a + 20, instr->midi_bend_range); + a[22] = instr->mute_computer ? 1 : 0; + is_error |= fwrite(a, 1, 23, f) != 23; + + memset(a, 0, 17); + put_le_16(a + 15, num_samples); + is_error |= fwrite(a, 1, 17, f) != 17; + + is_error |= xm_save_xm_samples(instr->samples, f, num_samples, &illegal_chars, 0); + if (illegal_chars) { + static GtkWidget* dialog = NULL; + + gui_warning_dialog(&dialog, _("Some characters in the instrument or samples names " + "cannot be stored in XM format. They will be skipped."), + FALSE); + } + + return is_error; +} + +static gboolean +xm_save_xm_instrument(STInstrument* instr, + FILE* f, + gboolean save_smpls, + gboolean* illegal_chars) { guint8 h[48]; - int num_samples; + guint num_samples, len; + gboolean is_error = FALSE; num_samples = st_instrument_num_save_samples(instr); memset(h, 0, sizeof(h)); - strncpy(h + 4, instr->name, 22); - recode_latin1_to_ibmpc(h + 4, 22); + if (instr->needs_conversion) { + *illegal_chars |= recode_from_utf(instr->utf_name, instr->name, 22); + instr->needs_conversion = FALSE; + } + len = strlen(instr->name); + memcpy(&((char*)h)[4], instr->name, len); /* Copy the string without the trailing zero */ + memset(&((char*)h)[4 + len], 0, 22 - len); /* Instrument name is zero-padded */ - if(mode==FALSE) - num_samples = 0; + if (!save_smpls) + num_samples = 0; h[27] = num_samples; - if(num_samples == 0) { - h[0] = 33; - h[1] = 0; - fwrite(h, 1, 29, f); - put_le_32(h, 40); - fwrite(h, 1, 4, f); - return; + if (num_samples == 0) { + h[0] = 33; + h[1] = 0; + is_error |= fwrite(h, 1, 29, f) != 29; + put_le_32(h, 40); + is_error |= fwrite(h, 1, 4, f) != 4; + return is_error; } put_le_16(h + 0, 263); - fwrite(h, 1, 29, f); + is_error |= fwrite(h, 1, 29, f) != 29; put_le_32(h, 40); - fwrite(h, 1, 4, f); + is_error |= fwrite(h, 1, 4, f) != 4; - fwrite(instr->samplemap, 1, 96, f); + is_error |= fwrite(instr->samplemap, 1, 96, f) != 96; memcpy(h, instr->vol_env.points, 48); le_16_array_to_host_order((gint16*)h, 24); - fwrite(h, 1, 48, f); + is_error |= fwrite(h, 1, 48, f) != 48; memcpy(h, instr->pan_env.points, 48); le_16_array_to_host_order((gint16*)h, 24); - fwrite(h, 1, 48, f); + is_error |= fwrite(h, 1, 48, f) != 48; memset(&h, 0, 38); h[0] = instr->vol_env.num_points; @@ -711,33 +1017,42 @@ h[13] = instr->vibrate; h[12] = instr->vibdepth; h[11] = instr->vibsweep; - - put_le_16(h + 14, instr->volfade); - - fwrite(&h, 1, 38, f); - if (mode==TRUE) xm_save_xm_samples(instr->samples, f, num_samples); -} + put_le_16(h + 14, instr->volfade); -static void -xm_load_mod_note (XMNote *dest, - FILE *f) + h[16] = instr->midi_on ? 1 : 0; + h[17] = instr->midi_channel; + put_le_16(h + 18, instr->midi_program); + put_le_16(h + 20, instr->midi_bend_range); + h[22] = instr->mute_computer ? 1 : 0; + + is_error |= fwrite(&h, 1, 38, f) != 38; + + if (save_smpls) + is_error |= xm_save_xm_samples(instr->samples, f, num_samples, illegal_chars, 0x20); + return is_error; +} + +static gboolean +xm_load_mod_note(XMNote* dest, + FILE* f) { guint8 c[4]; int note, period; - fread(c, 1, 4, f); + if (fread(c, 1, 4, f) != 4) + return FALSE; period = ((c[0] & 0x0f) << 8) | c[1]; note = 0; - - if(period) { - for(note = 0; note < 60; note++) - if(period >= npertab[note]) - break; - note++; - if(note==61) - note=0; + + if (period) { + for (note = 0; note < 60; note++) + if (period >= npertab[note]) + break; + note++; + if (note == 61) + note = 0; } dest->note = note ? note + 24 : 0; @@ -745,12 +1060,14 @@ dest->volume = 0; dest->fxtype = c[2] & 0x0f; dest->fxparam = c[3]; + + return TRUE; } -static int -xm_load_mod_pattern (XMPattern *pat, - int num_channels, - FILE *f) +static XMStatus +xm_load_mod_pattern(XMPattern* pat, + int num_channels, + FILE* f) { int i, j, len; @@ -758,95 +1075,140 @@ pat->length = pat->alloc_length = len; - if(!st_init_pattern_channels(pat, len, num_channels)) - return 0; + if (!st_init_pattern_channels(pat, len, num_channels)) + return XM_ERROR_NOMEM; /* Read channel data */ - for(j = 0; j < len; j++) { - for(i = 0; i < num_channels; i++) { - xm_load_mod_note(&pat->channels[i][j], f); - } + for (j = 0; j < len; j++) { + for (i = 0; i < num_channels; i++) { + if (!xm_load_mod_note(&pat->channels[i][j], f)) + return XM_ERROR_RECOVERABLE; + } } - return 1; + return XM_NO_ERROR; +} + +static void +xm_init_locks(XM* xm) +{ + int i, j; + + for (i = 0; i < ST_NUM_INSTRUMENTS(xm); i++) { + STInstrument* ins = &xm->instruments[i]; + for (j = 0; j < ST_NUM_SAMPLES(ins); j++) { + g_mutex_init(&ins->samples[j].sample.lock); + } + } } static void -xm_init_locks (XM *xm) +xm_free_full(XM *xm, gboolean free_muteces) { int i, j; - for(i = 0; i < sizeof(xm->instruments) / sizeof(xm->instruments[0]); i++) { - STInstrument *ins = &xm->instruments[i]; - for(j = 0; j < sizeof(ins->samples) / sizeof(ins->samples[0]); j++) { - ins->samples[j].sample.lock = g_mutex_new(); - } + if (xm) { + st_free_all_pattern_channels(xm); + + for (i = 0; i < ST_NUM_INSTRUMENTS(xm); i++) { + STInstrument* ins = &xm->instruments[i]; + st_clean_instrument(ins, NULL); + if (free_muteces) + for (j = 0; j < ST_NUM_SAMPLES(ins); j++) { + g_mutex_clear(&ins->samples[j].sample.lock); + } + } + + free(xm); } } -static XM * -xm_load_mod (FILE *f,int *status) +static XM* +xm_load_mod(FILE* f, int* status) { - XM *xm; + XM* xm; guint8 sh[31][8]; int i, n; guint8 mh[8]; + gboolean free_muteces = FALSE; + static GtkWidget* dialog = NULL; xm = calloc(1, sizeof(XM)); - if(!xm) - goto fileerr; + if (!xm) + goto fileerr; + + if (fread(xm->name, 1, 20, f) != 20) { + static GtkWidget* dialog = NULL; - fread(xm->name, 1, 20, f); + gui_error_dialog(&dialog, _("Module header reading error."), FALSE); + goto ende; + } xm_init_locks(xm); + free_muteces = TRUE; - for(i = 0; i < 31; i++) { - char buf[25]; - fread(buf, 1, 22, f); - buf[22] = 0; - st_clean_instrument(&xm->instruments[i], buf); - fread(sh[i], 1, 8, f); + for (i = 0; i < 31; i++) { + char buf[25]; + if (fread(buf, 1, 22, f) != 22) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Instrument header reading error."), FALSE); + goto ende; + } + buf[22] = 0; + /* In MOD files actually only valid ASCII charachters are used */ + st_clean_instrument(&xm->instruments[i], buf); + if (fread(sh[i], 1, 8, f) != 8) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Sample header reading error."), FALSE); + goto ende; + } } - fread(mh, 1, 2, f); + if (fread(mh, 1, 2, f) != 2) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Module header reading error."), FALSE); + goto ende; + } xm->song_length = mh[0]; - fread(xm->pattern_order_table, 1, 128, f); - fread(mh, 1, 4, f); + if (fread(xm->pattern_order_table, 1, 128, f) != 128) { + static GtkWidget* dialog = NULL; - *status = LFSTAT_IS_MODULE; - if ((!memcmp("M.K.", mh, 4)) || - (!memcmp("M&K!", mh, 4)) || - (!memcmp("M!K!", mh, 4))) - { - // classic ProTracker 31-instrument Modules, 4 channels - xm->num_channels = 4; - } - else if (!memcmp("FLT4", mh, 4)) - { - // StarTrekker Module, 4 channels - xm->num_channels = 4; - } - else if (!memcmp("CHN", (mh+1), 3)) - { - // FastTracker 1.0 Module (Sign: xCHN), x channels - xm->num_channels = mh[0] - 0x30; - } - else if (!memcmp("CH", (mh+2), 2)) - { - // FastTracker 1.0 Module (Sign: xxCH), xx channels - xm->num_channels = (mh[0] - 0x30) * 10 + (mh[1] - 0x30); + gui_error_dialog(&dialog, _("Pattern order table reading error."), FALSE); + goto ende; } - else - { - *status &= ~LFSTAT_IS_MODULE; /* see notes in File_Load() about + if (fread(mh, 1, 4, f) != 4) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Module header reading error."), FALSE); + goto ende; + } + + *status = LFSTAT_IS_MODULE; + if ((!memcmp("M.K.", mh, 4)) || (!memcmp("M&K!", mh, 4)) || (!memcmp("M!K!", mh, 4))) { + // classic ProTracker 31-instrument Modules, 4 channels + xm->num_channels = 4; + } else if (!memcmp("FLT4", mh, 4)) { + // StarTrekker Module, 4 channels + xm->num_channels = 4; + } else if (!memcmp("CHN", (mh + 1), 3)) { + // FastTracker 1.0 Module (Sign: xCHN), x channels + xm->num_channels = mh[0] - 0x30; + } else if (!memcmp("CH", (mh + 2), 2)) { + // FastTracker 1.0 Module (Sign: xxCH), xx channels + xm->num_channels = (mh[0] - 0x30) * 10 + (mh[1] - 0x30); + } else { + *status &= ~LFSTAT_IS_MODULE; /* see notes in File_Load() about this status*/ - goto ende; + goto ende; } - for(i = 0, n = 0; i < 128; i++) { - if(xm->pattern_order_table[i] > n) - n = xm->pattern_order_table[i]; + for (i = 0, n = 0; i < 128; i++) { + if (xm->pattern_order_table[i] > n) + n = xm->pattern_order_table[i]; } xm->tempo = 6; @@ -855,192 +1217,246 @@ player_bpm = xm->bpm; xm->flags = XM_FLAGS_IS_MOD | XM_FLAGS_AMIGA_FREQ; - if(!xm_load_patterns(xm->patterns, n + 1, xm->num_channels, f, xm_load_mod_pattern)) { - error_error(_("Error while loading patterns.")); - goto ende; - } - - for(i = 0; i < 31; i++) { - STSample *s = &xm->instruments[i].samples[0]; - - s->sample.length = get_be_16(sh[i] + 0) << 1; - - if(s->sample.length > 0) { - s->finetune = (sh[i][2] & 0x0f) << 4; - s->volume = sh[i][3]; - s->sample.loopstart = get_be_16(sh[i] + 4) << 1; - s->sample.loopend = s->sample.loopstart + (get_be_16(sh[i] + 6) << 1); - s->treat_as_8bit = TRUE; - s->panning = 128; - - if(get_be_16(sh[i] + 6) > 1) - s->sample.looptype = ST_MIXER_SAMPLE_LOOPTYPE_AMIGA; - if(s->sample.loopend > s->sample.length) - s->sample.loopend = s->sample.length; - if(s->sample.loopstart == s->sample.loopend) { - s->sample.loopstart = 0; - s->sample.loopend = 1; - s->sample.looptype = 0; - } else if(s->sample.loopstart > s->sample.loopend) { - char buf[128]; - sprintf(buf, "%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x\n", i, get_be_16(sh[i] + 0), get_be_16(sh[i] + 4), get_be_16(sh[i] + 6)); - error_warning(buf); - s->sample.loopstart = 0; - s->sample.loopend = 1; - s->sample.looptype = 0; - } - - s->sample.data = malloc(2 * s->sample.length); - if(!s->sample.data) { - goto ende; - } - fread((char*)s->sample.data + s->sample.length, 1, s->sample.length, f); - st_convert_sample((char*)s->sample.data + s->sample.length, - s->sample.data, - 8, - 16, - s->sample.length); - } + switch (xm_load_patterns(xm->patterns, n + 1, xm->num_channels, f, xm_load_mod_pattern)) { + case XM_ERROR_RECOVERABLE: + gui_error_dialog(&dialog, _("Error while loading patterns. Some patterns can be missing or corrupted."), FALSE); + break; + case XM_ERROR_NOMEM: + gui_oom_error(); + goto ende; + default: + break; + } + + for (i = 0; i < 31; i++) { + STSample* s = &xm->instruments[i].samples[0]; + + s->sample.length = get_be_16(sh[i] + 0) << 1; + + if (s->sample.length > 0) { + s->finetune = (sh[i][2] & 0x0f) << 4; + s->volume = sh[i][3]; + s->sample.loopstart = get_be_16(sh[i] + 4) << 1; + s->sample.loopend = s->sample.loopstart + (get_be_16(sh[i] + 6) << 1); + s->treat_as_8bit = TRUE; + s->panning = 128; + + if (get_be_16(sh[i] + 6) > 1) + s->sample.looptype = ST_MIXER_SAMPLE_LOOPTYPE_AMIGA; + if (s->sample.loopend > s->sample.length) + s->sample.loopend = s->sample.length; + if (s->sample.loopstart == s->sample.loopend) { + s->sample.loopstart = 0; + s->sample.loopend = 1; + s->sample.looptype = 0; + } else if (s->sample.loopstart > s->sample.loopend) { + gchar* buf = g_strdup_printf( + _("%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x"), + i, get_be_16(sh[i] + 0), get_be_16(sh[i] + 4), get_be_16(sh[i] + 6)); + static GtkWidget* dialog = NULL; + + gui_warning_dialog(&dialog, buf, TRUE); + g_free(buf); + s->sample.loopstart = 0; + s->sample.loopend = 1; + s->sample.looptype = 0; + } + + s->sample.data = malloc(2 * s->sample.length); + if (!s->sample.data) { + goto ende; + } + if (fread((char*)s->sample.data + s->sample.length, 1, s->sample.length, f) != s->sample.length) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Sample data reading error."), FALSE); + goto ende; + } + st_convert_sample((char*)s->sample.data + s->sample.length, + s->sample.data, + 8, + 16, + s->sample.length); + } } fclose(f); return xm; - ende: - XM_Free(xm); - fileerr: +ende: + xm_free_full(xm, free_muteces); +fileerr: fclose(f); return NULL; } -XM * -XM_Load (const char *filename,int *status) +XM* XM_Load(const char* filename, const char* utf_name, int* status) { - XM *xm; - FILE *f; + XM* xm; + FILE* f; guint8 xh[80]; int i, j, num_patterns, num_instruments; + gboolean free_muteces = FALSE; + static GtkWidget* dialog = NULL; *status = 0; - f = fopen(filename, "rb"); - if(!f) { - error_error(_("Can't open file")); - return NULL; + if (utf_name) + f = gui_fopen(filename, utf_name, "rb"); + else { + gchar* newname = gui_filename_to_utf8(filename); + f = gui_fopen(filename, newname, "rb"); + g_free(newname); } + if (!f) + return NULL; memset(xh, 0, sizeof(xh)); - if(fread(xh + 0, 1, sizeof(xh), f) != sizeof(xh) - || strncmp(xh + 0, "Extended Module: ", 17) != 0 - || xh[37] != 0x1a) { - fseek(f, 0, SEEK_SET); - return xm_load_mod(f,status); - } - - if(get_le_32(xh + 60) != 276) { - error_warning("XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n"); + if (fread(xh + 0, 1, sizeof(xh), f) != sizeof(xh) + || strncmp((char*)xh + 0, "Extended Module: ", 17) != 0 + || xh[37] != 0x1a) { + fseek(f, 0, SEEK_SET); + return xm_load_mod(f, status); } - if(get_le_16(xh + 58) != 0x0104) { /* In future -- replace with confirmation dialog */ - error_warning("Version != 0x0104. The results may be unpredictable"); -// goto fileerr; + if (get_le_32(xh + 60) != 276) { + static GtkWidget* dialog1 = NULL; + gui_warning_dialog(&dialog1, _("XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)"), FALSE); } - *status |= LFSTAT_IS_MODULE; /* see notes in File_Load() about + *status |= LFSTAT_IS_MODULE; /* see notes in File_Load() about this status*/ + if (get_le_16(xh + 58) != 0x0104) { + gchar* text = g_strdup_printf(_("Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" + "Will you still try to load this module?"), get_le_16(xh + 58)); + gboolean answer = gui_ok_cancel_modal(mainwindow, text); + + g_free(text); + if (!answer) + goto fileerr; + } + xm = calloc(1, sizeof(XM)); - if(!xm) - goto fileerr; + if (!xm) { + gui_oom_error(); + goto fileerr; + } xm_init_locks(xm); + free_muteces = TRUE; - strncpy(xm->name, xh + 17, 20); - recode_ibmpc_to_latin1(xm->name, 20); + memcpy(xm->name, (char*)xh + 17, 20); + recode_to_utf(xm->name, xm->utf_name, 20); + string_seal(xm->utf_name, 20); + xm->needs_conversion = FALSE; xm->song_length = get_le_16(xh + 64); xm->restart_position = get_le_16(xh + 66); - if(xm->restart_position >= xm->song_length) { - xm->restart_position = xm->song_length - 1; + if (xm->restart_position >= xm->song_length) { + xm->restart_position = xm->song_length - 1; } xm->num_channels = get_le_16(xh + 68); - if(xm->num_channels > 32 || xm->num_channels < 1) { - error_error("Invalid number of channels in XM (only 1..32 allowed)."); - goto ende; + if (xm->num_channels > 32 || xm->num_channels < 1) { + gui_error_dialog(&dialog, _("Invalid number of channels in XM (only 1..32 allowed)."), TRUE); + goto ende; } num_patterns = get_le_16(xh + 70); num_instruments = get_le_16(xh + 72); - if(get_le_16(xh + 74) != 1) { - xm->flags |= XM_FLAGS_AMIGA_FREQ; + if (get_le_16(xh + 74) != 1) { + xm->flags |= XM_FLAGS_AMIGA_FREQ; } xm->tempo = get_le_16(xh + 76); xm->bpm = get_le_16(xh + 78); player_tempo = xm->tempo; player_bpm = xm->bpm; - fread(xm->pattern_order_table, 1, 256, f); + if (fread(xm->pattern_order_table, 1, 256, f) != 256) { + gui_error_dialog(&dialog, _("Error while loading pattern order table."), TRUE); + goto ende; + } - if(!xm_load_patterns(xm->patterns, num_patterns, xm->num_channels, f, xm_load_xm_pattern)) { - error_error(_("Error while loading patterns.")); - goto ende; - } - - for(i = 0; i < num_instruments; i++) { - if(!xm_load_xm_instrument(&xm->instruments[i], f)) { - error_error(_("Error while loading instruments.")); - goto ende; - } + switch (xm_load_patterns(xm->patterns, num_patterns, xm->num_channels, f, xm_load_xm_pattern)) { + case XM_ERROR_RECOVERABLE: + gui_warning_dialog(&dialog, _("Error while loading patterns. Some patterns can be missing or corrupted."), TRUE); + break; + case XM_ERROR_NOMEM: + gui_oom_error(); + goto ende; + default: + break; } + for (i = 0; i < num_instruments; i++) { + if (!xm_load_xm_instrument(&xm->instruments[i], f)) { + static GtkWidget* dialog1 = NULL; + + gui_warning_dialog(&dialog1, _("Instruments loading error. Some instruments can be missing or corrupted."), FALSE); + break; + } + } + num_instruments = i; + // Check if sample lengths are okay - for(i = 0; i < num_instruments; i++) { - STInstrument *instr = &xm->instruments[i]; - for(j = 0; j < (sizeof(instr->samples) / sizeof(instr->samples[0])); j++) { - if(instr->samples[j].sample.length > mixer->max_sample_length) { - char buf[128]; - sprintf(buf, _("Module contains sample(s) that are too long for the current mixer.\nMaximum sample length is %d."), mixer->max_sample_length); - error_warning(buf); - goto weiter; - } - } - } - - weiter: - if(xm->num_channels & 1) { - /* Yes, mods like these *do* exist. */ - xm->num_channels++; + for (i = 0; i < num_instruments; i++) { + STInstrument* instr = &xm->instruments[i]; + for (j = 0; j < ST_NUM_SAMPLES(instr); j++) { + if (instr->samples[j].sample.length > mixer->max_sample_length) { + gchar* buf = g_strdup_printf( + _("Module contains sample(s) that are too long for the current mixer.\nMaximum sample length is %d."), + mixer->max_sample_length); + static GtkWidget* dialog = NULL; + + gui_warning_dialog(&dialog, buf, TRUE); + g_free(buf); + goto weiter; + } + } + } + +weiter: + if (xm->num_channels & 1) { + /* Yes, mods like these *do* exist. */ + xm->num_channels++; } fclose(f); return xm; - - ende: - XM_Free(xm); - fileerr: + +ende: + xm_free_full(xm, free_muteces); +fileerr: fclose(f); return NULL; } -int -XM_Save (XM *xm, - const char *filename, - gboolean song) +gboolean +XM_Save(XM* xm, + const char* filename, + const char* utf_name, + gboolean save_smpls) { - FILE *f; - int i; + FILE* f; + guint i, len; guint8 xh[80]; int num_patterns, num_instruments; + gboolean is_error = FALSE, illegal_chars = FALSE; - f = fopen(filename, "wb"); - if(!f) - return 0; + f = gui_fopen(filename, utf_name, "wb"); + if (!f) + return TRUE; num_patterns = st_num_save_patterns(xm); num_instruments = st_num_save_instruments(xm); memcpy(xh + 0, "Extended Module: ", 17); - memcpy(xh + 17, xm->name, 20); - recode_latin1_to_ibmpc(xh + 17, 20); + if (xm->needs_conversion) { + illegal_chars |= recode_from_utf(xm->utf_name, xm->name, 20); + xm->needs_conversion = FALSE; + } + len = strlen(xm->name); + memcpy(&xh[17], xm->name, len); /* Copy the string without the trailing zero */ + memset(&xh[17 + len], 0x20, 20 - len); /* Module name is space-padded */ xh[37] = 0x1a; memcpy(xh + 38, "rst's SoundTracker ", 20); put_le_16(xh + 58, 0x104); @@ -1054,36 +1470,36 @@ put_le_16(xh + 76, xm->tempo); put_le_16(xh + 78, xm->bpm); - fwrite(&xh, 1, sizeof(xh), f); - fwrite(xm->pattern_order_table, 1, 256, f); + is_error |= fwrite(&xh, 1, sizeof(xh), f) != sizeof(xh); + is_error |= fwrite(xm->pattern_order_table, 1, 256, f) != 256; - for(i = 0; i < num_patterns; i++) - xm_save_xm_pattern(&xm->patterns[i], xm->num_channels, f); + for (i = 0; i < num_patterns; i++) + is_error |= xm_save_xm_pattern(&xm->patterns[i], xm->num_channels, f); - for(i = 0; i < num_instruments; i++) - if(song==TRUE) - xm_save_xm_instrument(&xm->instruments[i], f, FALSE); - else - xm_save_xm_instrument(&xm->instruments[i], f, TRUE); - - if(ferror(f)) { - fclose(f); - return 0; + for (i = 0; i < num_instruments; i++) + is_error |= xm_save_xm_instrument(&xm->instruments[i], f, save_smpls, &illegal_chars); + + if (illegal_chars) { + static GtkWidget* dialog = NULL; + gui_warning_dialog(&dialog, _("Some characters in either module, instruments or samples names " + "cannot be stored in XM format. They will be skipped."), + FALSE); } - - fclose(f); - return 1; + + is_error |= ferror(f); + return (fclose(f) != 0) || is_error; } -XM * -XM_New () +XM* XM_New() { - XM *xm; + XM* xm; + gboolean free_muteces = FALSE; xm = calloc(1, sizeof(XM)); - if(!xm) - goto ende; + if (!xm) + goto ende; xm_init_locks(xm); + free_muteces = TRUE; xm->song_length = 1; xm->num_channels = 8; @@ -1091,34 +1507,19 @@ xm->bpm = 125; player_tempo = xm->tempo; player_bpm = xm->bpm; - if(!xm_load_patterns(xm->patterns, 0, xm->num_channels, NULL, NULL)) - goto ende; + if (xm_load_patterns(xm->patterns, 0, xm->num_channels, NULL, NULL) != XM_NO_ERROR) + goto ende; return xm; - ende: - XM_Free(xm); +ende: + xm_free_full(xm, free_muteces); return NULL; } -void -XM_Free (XM *xm) +void XM_Free(XM* xm) { - int i, j; - - if(xm) { - st_free_all_pattern_channels(xm); - - for(i = 0; i < sizeof(xm->instruments) / sizeof(xm->instruments[0]); i++) { - STInstrument *ins = &xm->instruments[i]; - st_clean_instrument(ins, NULL); - for(j = 0; j < sizeof(ins->samples) / sizeof(ins->samples[0]); j++) { - g_mutex_free(ins->samples[j].sample.lock); - } - } - - free(xm); - } + xm_free_full(xm, TRUE); } /************************************************************************** @@ -1143,47 +1544,40 @@ * After it has loaded a mod, it will remove the directory. * **************************************************************************/ -char *err_msg = "Bzzzz, error extracting song, aborting operation."; - +static const gchar* err_msg = N_("Bzzzz, error extracting song, aborting operation."); -static char *st_tmpnam (char *tmp_path) +static gchar* st_tmpnam() { -static char tname[1024], tfname[32]; -char *tmpchr = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -int i; - - srand (time(NULL)); + gchar *tname, tfname[32], *stpid; + const gchar* tmpchr = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + gint i; - strcpy (tname, prefs_get_prefsdir()); - strcat (tname, "/tmp/"); - sprintf (tfname, "st%d", getpid()); - strcat (tname, tfname); + srand(time(NULL)); + stpid = g_strdup_printf("st%d", getpid()); - for(i=0; i < 16; i++) - tfname[i] = tmpchr[(int) ((62.0 * rand()) / RAND_MAX)]; - tfname[i]='\0'; + for (i = 0; i < 16; i++) + tfname[i] = tmpchr[(int)((62.0 * rand()) / RAND_MAX)]; + tfname[i] = '\0'; - strcat (tname, tfname); + tname = g_build_path("/", prefs_get_prefsdir(), "tmp", stpid, tfname, NULL); + g_free(stpid); - if (tmp_path != NULL) - strcpy (tmp_path, tname); - - return tname; + return tname; } -static char *escape_filename(const char *filename) +static char* escape_filename(const char* filename) { - GString *escaped = g_string_new(""); - const char *s = filename; - char *r; + GString* escaped = g_string_new(""); + const char* s = filename; + char* r; g_assert(filename != NULL); - for (; *s; s ++) { - if (strchr("\\\"'*?!# ()&|<>", *s)) { - g_string_append_c(escaped, '\\'); - } - g_string_append_c(escaped, *s); + for (; *s; s++) { + if (strchr("\\\"'*?!# ()&|<>", *s)) { + g_string_append_c(escaped, '\\'); + } + g_string_append_c(escaped, *s); } r = escaped->str; g_string_free(escaped, FALSE); @@ -1193,7 +1587,7 @@ /* Apparently one shouldn't use system() because it doesn't handle the child process getting interrupted. */ -static int ExecuteAndWait(const char *command, const char **argv) +static int ExecuteAndWait(const char* command, const char** argv) { int pid, status; @@ -1201,55 +1595,61 @@ pid = fork(); switch (pid) { - case -1: return -1; + case -1: + return -1; case 0: { - execv(command, (char **)argv); - exit(127); + execv(command, (char**)argv); + exit(127); } default: - do { - if (waitpid(pid, &status, 0)==-1) { - if (errno!=EINTR) - return -1; - } else - return status; - } while (1); + do { + if (waitpid(pid, &status, 0) == -1) { + if (errno != EINTR) + return -1; + } else + return status; + } while (1); } return -1; } - /* * this is for zip style archives, where compression format stores * multiple files */ -static XM * -File_Extract_Archive (const char *extract_cmd,char *tmp_dir_path,int *status) +static XM* +File_Extract_Archive(const char* extract_cmd, char* tmp_dir_path, int* status) { - XM *ret = NULL; + XM* ret = NULL; register int r; - DIR *dp; - char str[256]; - const char *args[4] = {"sh", "-c", NULL, NULL}; + DIR* dp; + char* str; + const char* args[4] = { "sh", "-c", NULL, NULL }; /* * extract archive, and store it in tmp directory */ args[2] = extract_cmd; - r = ExecuteAndWait ("/bin/sh", args); + r = ExecuteAndWait("/bin/sh", args); if ((r == -1) || (r == 127)) { - g_snprintf (str, sizeof str, "%s (Err 0)",err_msg); - error_error (str); + static GtkWidget* dialog = NULL; + + str = g_strdup_printf(_("%s (Err 0)"), err_msg); + gui_error_dialog(&dialog, str, TRUE); + g_free(str); return ret; } /* * open directory */ - dp = opendir (tmp_dir_path); + dp = opendir(tmp_dir_path); if (dp == NULL) { - g_snprintf (str, sizeof str, "%s (Err 1)",err_msg); - error_error (str); + static GtkWidget* dialog = NULL; + + str = g_strdup_printf(_("%s (Err 1)"), err_msg); + gui_error_dialog(&dialog, str, TRUE); + g_free(str); return ret; } @@ -1257,11 +1657,11 @@ * read each file name. for each file, try to load it. * the first one that successfully loads- accept it. */ - for (;;) { - struct dirent *ds; + for (;ret == NULL;) { + struct dirent* ds; struct stat sp; - ds = readdir (dp); + ds = readdir(dp); if (ds == NULL) break; @@ -1269,14 +1669,11 @@ * if not a normal file, then ignore. if get a stat() error, * then don't make a fuss. it's no big deal. */ - g_snprintf (str, sizeof str, "%s/%s",tmp_dir_path,ds->d_name); - if (stat (str,&sp) == 0) - if (S_ISREG (sp.st_mode)) { - ret = XM_Load (str,status); - if (ret != NULL) - break; - - } + str = g_strdup_printf("%s/%s", tmp_dir_path, ds->d_name); + if (stat(str, &sp) == 0) + if (S_ISREG(sp.st_mode)) + ret = XM_Load(str, NULL, status); + g_free(str); } closedir(dp); @@ -1284,11 +1681,15 @@ /* * delete tmp directory */ - g_snprintf (str, sizeof str, "%s -rf %s",gui_settings.rm_path,tmp_dir_path); - r = system (str); + str = g_strdup_printf("%s -rf %s", gui_settings.rm_path, tmp_dir_path); + r = system(str); + g_free(str); if ((r == -1) || (r == 127)) { - g_snprintf (str, sizeof str, "%s (Err 2)",err_msg); - error_error (str); + static GtkWidget* dialog = NULL; + + str = g_strdup_printf(_("%s (Err 2)"), err_msg); + gui_error_dialog(&dialog, str, TRUE); + g_free(str); } return ret; @@ -1298,27 +1699,30 @@ * this is for zcat and bunzip2 style archives, where compression format * stores only one file */ -static XM * -File_Extract_SingleFile (const char *extract_cmd,char *tmp_path,int *status) +static XM* +File_Extract_SingleFile(const char* extract_cmd, char* tmp_path, int* status) { - XM *ret = NULL; + XM* ret = NULL; register int r; - char str[256]; - const char *args[4] = {"sh", "-c", NULL, NULL}; + char* str; + const char* args[4] = { "sh", "-c", NULL, NULL }; /* * extract archive- run cmd */ args[2] = extract_cmd; - r = ExecuteAndWait ("/bin/sh", args); + r = ExecuteAndWait("/bin/sh", args); if ((r == -1) || (r == 127)) { - g_snprintf (str, sizeof str, "%s (Err 3)",err_msg); - error_error (str); + static GtkWidget* dialog = NULL; + + str = g_strdup_printf(_("%s (Err 3)"), err_msg); + gui_error_dialog(&dialog, str, TRUE); + g_free(str); return ret; } - ret = XM_Load (tmp_path,status); - unlink (tmp_path); /*delete tmp file*/ + ret = XM_Load(tmp_path, NULL, status); + unlink(tmp_path); /*delete tmp file*/ return ret; } @@ -1327,17 +1731,17 @@ * this tests a file extension. if it matches, return 1, if not return 0 */ static int -f_extension_cmp (const char *filename,char *exten) +f_extension_cmp(const char* filename, char* exten) { - register int a,b,fs,ks; + register int a, b, fs, ks; - fs = strlen (filename); - ks = strlen (exten); + fs = strlen(filename); + ks = strlen(exten); if (fs < ks) return 0; - for (a = fs - ks,b = 0;a < fs;a++) { - if (exten[b++] == tolower (filename[a])) + for (a = fs - ks, b = 0; a < fs; a++) { + if (exten[b++] == tolower(filename[a])) continue; return 0; @@ -1346,48 +1750,46 @@ return 1; } -XM * -File_Load (const char *filename) +XM* File_Load(const char* filename, const char* utf_name) { - char tmp_path[256]; - char *str = NULL, *filename_esc = NULL; + gchar *str = NULL, *filename_esc = NULL, *tmp_path; int status = 0; - XM *ret = NULL; + XM* ret = NULL; g_assert(filename != NULL); filename_esc = escape_filename(filename); - st_tmpnam(tmp_path); + tmp_path = st_tmpnam(); /* test and load zip files. for unzip version 5.31 */ - if (f_extension_cmp (filename,".zip")) { - str = g_strdup_printf("%s %s -d %s >>/dev/null", gui_settings.unzip_path, filename_esc, tmp_path); - ret = File_Extract_Archive (str, tmp_path, &status); + if (f_extension_cmp(filename, ".zip")) { + str = g_strdup_printf("%s %s -d %s >>/dev/null", gui_settings.unzip_path, filename_esc, tmp_path); + ret = File_Extract_Archive(str, tmp_path, &status); } /* test and load lha files. for UNIX V1.00 */ - else if (f_extension_cmp (filename,".lzh") || - f_extension_cmp (filename,".lha")) { - str = g_strdup_printf("%s ew=%s %s >>/dev/null", gui_settings.lha_path, tmp_path, filename_esc); - ret = File_Extract_Archive (str, tmp_path, &status); + else if (f_extension_cmp(filename, ".lzh") || f_extension_cmp(filename, ".lha")) { + str = g_strdup_printf("%s ew=%s %s >>/dev/null", gui_settings.lha_path, tmp_path, filename_esc); + ret = File_Extract_Archive(str, tmp_path, &status); } /* for zcat 1.2.4 */ - else if (f_extension_cmp (filename,".gz")) { - str = g_strdup_printf("%s %s >> %s", gui_settings.gz_path, filename_esc, tmp_path); - ret = File_Extract_SingleFile (str, tmp_path, &status); + else if (f_extension_cmp(filename, ".gz")) { + str = g_strdup_printf("%s %s >> %s", gui_settings.gz_path, filename_esc, tmp_path); + ret = File_Extract_SingleFile(str, tmp_path, &status); } /* for bunzip2 Version 0.9.0b */ - else if (f_extension_cmp (filename,".bz2")) { - str = g_strdup_printf("%s -c %s >> %s", gui_settings.bz2_path, filename_esc, tmp_path); - ret = File_Extract_SingleFile (str, tmp_path, &status); + else if (f_extension_cmp(filename, ".bz2")) { + str = g_strdup_printf("%s -c %s >> %s", gui_settings.bz2_path, filename_esc, tmp_path); + ret = File_Extract_SingleFile(str, tmp_path, &status); } /* if not compressed, load as normal */ else - ret = XM_Load (filename,&status); + ret = XM_Load(filename, utf_name, &status); + g_free(tmp_path); /* * mike: we have this here instead of in xm_load_mod(), because it * can get called multiple times when a compressed file has many @@ -1395,8 +1797,10 @@ * lots of dialog boxes popping up with this message, even when a * mod file is eventually found in a compressed archive. -- jsno */ - if (!(status & LFSTAT_IS_MODULE)) - error_error (_("Not FastTracker XM and not supported MOD format!")); + if (!(status & LFSTAT_IS_MODULE)) { + static GtkWidget* dialog = NULL; + gui_error_dialog(&dialog, _("Not FastTracker XM and not supported MOD format!"), FALSE); + } g_free(str); g_free(filename_esc); @@ -1405,93 +1809,93 @@ } gboolean -xm_xp_load_header (FILE *f, int *length) +xm_xp_load_header(FILE* f, int* length) { guint8 pheader[4]; int version; - - if ( fread (pheader, 1, sizeof(pheader), f) != 4) { - error_error (_("Error when file reading or unexpected end of file")); - return FALSE; + + if (fread(pheader, 1, sizeof(pheader), f) != 4) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Error when file reading or unexpected end of file"), FALSE); + return FALSE; } if ((version = pheader[0] + (pheader[1] << 8)) != 1) { - error_error (_("Incorrect or unsupported version of pattern file!")); - return FALSE; + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Incorrect or unsupported version of pattern file!"), FALSE); + return FALSE; } - if (((*length = pheader[2] + (pheader[3] << 8)) < 0) || (*length > 256)){ - error_error (_("Incorrect pattern length!")); - return FALSE; + if (((*length = pheader[2] + (pheader[3] << 8)) < 0) || (*length > 256)) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Incorrect pattern length!"), FALSE); + return FALSE; } return TRUE; } gboolean -xm_xp_load (FILE *f, int length, XMPattern *patt, XM *xm) +xm_xp_load(FILE* f, int length, XMPattern* patt, XM* xm) { - static guint8 buf[32*256*5]; + static guint8 buf[32 * 256 * 5]; int i, j, bp; - - if (fread (buf, 1, length * 32 * 5, f) != length*32*5) { - error_error (_("Error when file reading or unexpected end of file")); - return FALSE; - } - for (j = 0; j <= MIN (length, patt->length) - 1; j++) { - bp = j * 5 * 32; - for (i = 0; i <= xm->num_channels - 1; i++) { - memcpy (&patt->channels[i][j].note, &buf[bp], 5); - bp += 5; - } + + if (fread(buf, 1, length * 32 * 5, f) != length * 32 * 5) { + static GtkWidget* dialog = NULL; + + gui_error_dialog(&dialog, _("Error when file reading or unexpected end of file"), FALSE); + return FALSE; + } + for (j = 0; j <= MIN(length, patt->length) - 1; j++) { + bp = j * 5 * 32; + for (i = 0; i <= xm->num_channels - 1; i++) { + memcpy(&patt->channels[i][j].note, &buf[bp], 5); + bp += 5; + } } if (length < patt->length) - for (j = length; j < patt->length; j++) { - bp = j * 5 * 32; - for (i = 0; i <= xm->num_channels - 1; i++) { - memset (&patt->channels[i][j].note, 0, 5); - bp += 5; - } - } + for (j = length; j < patt->length; j++) { + bp = j * 5 * 32; + for (i = 0; i <= xm->num_channels - 1; i++) { + memset(&patt->channels[i][j].note, 0, 5); + bp += 5; + } + } return TRUE; } -void -xm_xp_save (gint reply, gpointer data) +void xm_xp_save(const gchar* name, const gchar* utf_name, XMPattern* pattern, XM* xm) { - struct f_n_p *fnp = (struct f_n_p*) data; - - FILE *f; + FILE* f; int i, j, bp; guint8 pheader[4]; - static guint8 buf[32*256*5]; - - if (reply == 0){ - if ( !(f = fopen (fnp->name, "wb"))) - error_error (_("Error during saving pattern!")); - else { - put_le_16 (pheader+0, 01);//version - put_le_16 (pheader+2, fnp->pattern->length);//length - - bp = 0; - for (j = 0; j <= fnp->pattern->length - 1; j++)//row - for (i = 0; i <= 31; i++){//ch - if ( i <= fnp->xm->num_channels - 1){ - buf[bp + 0] = fnp->pattern->channels[i][j].note; - buf[bp + 1] = fnp->pattern->channels[i][j].instrument; - buf[bp + 2] = fnp->pattern->channels[i][j].volume; - buf[bp + 3] = fnp->pattern->channels[i][j].fxtype; - buf[bp + 4] = fnp->pattern->channels[i][j].fxparam; - } else { - buf[bp + 0] = 0; - buf[bp + 1] = 0; - buf[bp + 2] = 0; - buf[bp + 3] = 0; - buf[bp + 4] = 0; - } - bp += 5; - } - - fwrite (pheader, 1, sizeof(pheader), f); - fwrite (buf, 1, bp, f); - fclose (f); - } + static guint8 buf[32 * 256 * 5]; + + f = gui_fopen(name, utf_name, "wb"); + if (!f) + return; + + put_le_16(pheader + 0, 01); //version + put_le_16(pheader + 2, pattern->length); //length + + bp = 0; + for (j = 0; j <= pattern->length - 1; j++) //row + for (i = 0; i <= 31; i++) { //ch + if (i <= xm->num_channels - 1) { + buf[bp + 0] = pattern->channels[i][j].note; + buf[bp + 1] = pattern->channels[i][j].instrument; + buf[bp + 2] = pattern->channels[i][j].volume; + buf[bp + 3] = pattern->channels[i][j].fxtype; + buf[bp + 4] = pattern->channels[i][j].fxparam; + } else + memset(&buf[bp], 0, 5 * sizeof(buf[0])); + bp += 5; + } + + if (fwrite(pheader, 1, sizeof(pheader), f) != sizeof(pheader) || fwrite(buf, 1, bp, f) != bp) { + static GtkWidget* dialog = NULL; + gui_error_dialog(&dialog, _("Error during saving pattern!"), FALSE); } + fclose(f); } diff -Nru soundtracker-0.6.8/app/xm.h soundtracker-1.0.2~pre2/app/xm.h --- soundtracker-0.6.8/app/xm.h 2003-03-02 11:01:48.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/xm.h 2020-11-27 16:57:38.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - XM support routines * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This file is based on the "maube" 0.10.4 source code, Copyright (C) * 1997 by Conrad Parker. @@ -33,15 +33,15 @@ /* -- XM definitions -- */ -#define XM_PATTERN_NOTE_MIN 0 +#define XM_PATTERN_NOTE_MIN 0 #define XM_PATTERN_NOTE_MAX 95 #define XM_PATTERN_NOTE_OFF 97 #define XM_NOTE_VOLUME_MIN 0x10 #define XM_NOTE_VOLUME_MAX 0x50 -#define PITCH_NOTE (16 * 4 * 4) -#define PITCH_OCTAVE (12 * PITCH_NOTE) +#define PITCH_NOTE (16 * 4 * 4) +#define PITCH_OCTAVE (12 * PITCH_NOTE) typedef struct XMNote { unsigned char note; @@ -53,7 +53,7 @@ typedef struct XMPattern { int length, alloc_length; - XMNote *channels[32]; + XMNote* channels[32]; } XMPattern; /* -- Sample definitions -- */ @@ -61,11 +61,12 @@ typedef struct STSample { st_mixer_sample_info sample; - char name[23]; + gchar name[23], utf_name[89]; + gboolean needs_conversion; - guint8 volume; /* eigenvolume (0..64) */ - gint8 finetune; /* finetune (-128 ... 127) */ - guint8 panning; /* panning (0 ... 255) */ + guint8 volume; /* eigenvolume (0..64) */ + gint8 finetune; /* finetune (-128 ... 127) */ + guint8 panning; /* panning (0 ... 255) */ gint8 relnote; gboolean treat_as_8bit; @@ -74,9 +75,9 @@ /* -- Instrument definitions -- */ /* values for STEnvelope.flags */ -#define EF_ON 1 -#define EF_SUSTAIN 2 -#define EF_LOOP 4 +#define EF_ON 1 +#define EF_SUSTAIN 2 +#define EF_LOOP 4 #define ST_MAX_ENVELOPE_POINTS 12 @@ -95,20 +96,27 @@ } STEnvelope; typedef struct STInstrument { - char name[24]; + gchar name[24], utf_name[93]; + gboolean needs_conversion; STEnvelope vol_env; STEnvelope pan_env; guint8 vibtype; - guint16 vibrate; - guint16 vibdepth; - guint16 vibsweep; + guint8 vibrate; + guint8 vibdepth; + guint8 vibsweep; guint16 volfade; + gboolean midi_on; + guint8 midi_channel; + guint16 midi_program; + guint16 midi_bend_range; + gboolean mute_computer; + gint8 samplemap[96]; - STSample samples[16]; + STSample samples[128]; } STInstrument; /* That the following structure is called 'XM' is a relic from old @@ -117,15 +125,14 @@ structures, as you can see... */ typedef struct XM { - char name[21]; - char modified; // indicates necessity of security questions before quitting etc. + char name[21], utf_name[81]; + gboolean needs_conversion; - int flags; /* see XM_FLAGS_ defines below */ + int flags; /* see XM_FLAGS_ defines below */ int num_channels; int tempo; int bpm; - int song_length; int restart_position; guint8 pattern_order_table[256]; @@ -134,54 +141,30 @@ STInstrument instruments[128]; } XM; -struct f_n_p { - gchar *name; - XMPattern *pattern; - XM *xm; -}; - -#define XM_FLAGS_AMIGA_FREQ 1 -#define XM_FLAGS_IS_MOD 2 - -XM* File_Load (const char *filename); -XM* XM_Load (const char *filename,int *status); -int XM_Save (XM *xm, const char *filename, gboolean song); -XM* XM_New (void); -void XM_Free (XM*); - -gboolean xm_load_xi (STInstrument *instr, - FILE *f); -gboolean xm_save_xi (STInstrument *instr, - FILE *f); -gboolean xm_xp_load_header (FILE *f, int *length); -gboolean xm_xp_load (FILE *f, int length, - XMPattern *patt, XM *xm); -void xm_xp_save (gint reply, gpointer data); - -static inline int -xm_get_modified (void) -{ - extern XM *xm; - if(xm != NULL) { - return xm->modified; - } else { - return 0; - } -} - -static inline void -xm_set_modified (int val) -{ - extern XM *xm; - if(xm != NULL) { - xm->modified = val; - } -} - -void -xm_freq_note_to_relnote_finetune (float frequency, - unsigned note, - gint8 *relnote, - gint8 *finetune); +#define XM_FLAGS_AMIGA_FREQ 1 +#define XM_FLAGS_IS_MOD 2 + +XM* File_Load(const char* filename, const char* utf_name); +XM* XM_Load(const char* filename, const char* utf_name, int* status); +gboolean XM_Save(XM* xm, const char* filename, const char* utf_name, gboolean save_smpls); +XM* XM_New(void); +void XM_Free(XM*); + +gboolean xm_load_xi(STInstrument* instr, + FILE* f); +gboolean xm_save_xi(STInstrument* instr, + FILE* f); +gboolean xm_xp_load_header(FILE* f, int* length); +gboolean xm_xp_load(FILE* f, int length, + XMPattern* patt, XM* xm); +void xm_xp_save(const gchar* name, + const gchar* utf_name, + XMPattern* pattern, + XM* xm); + +void xm_freq_note_to_relnote_finetune(float frequency, + unsigned note, + gint8* relnote, + gint8* finetune); #endif /* _XM_H */ diff -Nru soundtracker-0.6.8/app/xm-player.c soundtracker-1.0.2~pre2/app/xm-player.c --- soundtracker-0.6.8/app/xm-player.c 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/xm-player.c 2021-02-23 17:42:00.000000000 +0000 @@ -1,10 +1,10 @@ - + /* * The Real SoundTracker - XM player * * Copyright (C) 1994-1998 Niklas Beisert * Copyright (C) 1998 Tammo Hinrichs - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * Based on the source code of "OpenCP", the DOS module player, * written by Niklas Beisert and now maintained by Tammo Hinrichs @@ -27,37 +27,33 @@ #include +#include +#include #include #include -#include -#include "i18n.h" +#include "audio.h" +#include "gui.h" +#include "gui-settings.h" +#include "main.h" #include "xm-player.h" #include "xm.h" -#include "main.h" -#include "audio.h" -int player_songpos, player_patpos; +int player_songpos, player_patpos, player_patno; int player_tempo, player_bpm; guint8 curtick; gboolean player_looped; static double current_time; static int xmplayer_playmode; -enum { - PLAYING_SONG = 1, - PLAYING_PATTERN, - PLAYING_NOTE, -}; - static inline int -env_length (STEnvelope *env) +env_length(STEnvelope* env) { return env->points[env->num_points - 1].pos; } static int -env_interpolate (int v1, int v2, int p1, int p, int p2) +env_interpolate(int v1, int v2, int p1, int p, int p2) { g_assert(v1 >= 0 && v1 <= 64); g_assert(v2 >= 0 && v2 <= 64); @@ -68,91 +64,69 @@ } static int -env_handle (STEnvelope *env, guint32 *p, guint8 sustain) +env_handle(STEnvelope* env, guint32* p, guint8 sustain) { int i, v; /* this happens sometimes in KB's "m6v-tlb.xm". i think it's a bug in the player somewhere. */ - if(*p > env_length(env)) - *p = env_length(env); + if (*p > env_length(env)) + *p = env_length(env); - for(i = env->num_points - 1; i >= 1; i--) { - if(env->points[i].pos <= *p) - break; + for (i = env->num_points - 1; i >= 1; i--) { + if (env->points[i].pos <= *p) + break; } v = env->points[i].val; - if(*p != env->points[i].pos) { - v += env_interpolate(env->points[i].val, env->points[i+1].val, env->points[i].pos, *p, env->points[i+1].pos); + if (*p != env->points[i].pos) { + v += env_interpolate(env->points[i].val, env->points[i + 1].val, env->points[i].pos, *p, env->points[i + 1].pos); } - if(*p < env_length(env) && !(sustain && (env->flags & EF_SUSTAIN) && *p == env->points[env->sustain_point].pos)) { - *p += 1; - if(env->flags & EF_LOOP) { - if(*p == env->points[env->loop_end].pos - /* this is weird... but it is one of KB's latest fixes which I don't understand. Let's trust him. */ - && (sustain || !(env->flags & EF_SUSTAIN) || (env->points[env->loop_end].pos != env->points[env->sustain_point].pos))) { - *p = env->points[env->loop_start].pos; - } - } + if (*p < env_length(env) && !(sustain && (env->flags & EF_SUSTAIN) && *p == env->points[env->sustain_point].pos)) { + *p += 1; + if (env->flags & EF_LOOP) { + if (*p == env->points[env->loop_end].pos + /* this is weird... but it is one of KB's latest fixes which I don't understand. Let's trust him. */ + && (sustain || !(env->flags & EF_SUSTAIN) || (env->points[env->loop_end].pos != env->points[env->sustain_point].pos))) { + *p = env->points[env->loop_start].pos; + } + } } return 4 * v; } static inline double -pitch_to_freq (int pitch) +pitch_to_freq(int pitch) { - return 8363 * pow(2,( (float)(- pitch) / (float)PITCH_OCTAVE)); + return 8363 * pow(2, ((float)(-pitch) / (float)PITCH_OCTAVE)); } static inline guint32 -umulshr16 (guint32 a, - guint32 b) +umulshr16(guint32 a, + guint32 b) { -/* #pragma aux umulshr16 parm [eax] [edx] [ebx] value [eax] = "mul edx" "shrd eax,edx,16" */ + /* #pragma aux umulshr16 parm [eax] [edx] [ebx] value [eax] = "mul edx" "shrd eax,edx,16" */ unsigned long long c = (unsigned long long)a * (unsigned long long)b; return c >> 16; } static inline guint32 -umuldiv (guint32 a, - guint32 b, - guint32 c) +umuldiv(guint32 a, + guint32 b, + guint32 c) { -/* #pragma aux umuldiv parm [eax] [edx] [ebx] value [eax] = "mul edx" "div ebx" */ + /* #pragma aux umuldiv parm [eax] [edx] [ebx] value [eax] = "mul edx" "div ebx" */ unsigned long long d = (unsigned long long)a * (unsigned long long)b; return d / c; } -enum -{ - xmpCmdArpeggio=0,xmpCmdPortaU=1,xmpCmdPortaD=2,xmpCmdPortaNote=3, - xmpCmdVibrato=4,xmpCmdPortaVol=5,xmpCmdVibVol=6,xmpCmdTremolo=7, - xmpCmdPanning=8,xmpCmdOffset=9,xmpCmdVolSlide=10,xmpCmdJump=11, - xmpCmdVolume=12,xmpCmdBreak=13,xmpCmdSpeed=15,xmpCmdGVolume=16, - xmpCmdGVolSlide=17,xmpCmdKeyOff=20,xmpCmdEnvPos=21,xmpCmdPanSlide=25, - xmpCmdSetFReso=26, xmpCmdMRetrigger=27,xmpCmdTremor=29,xmpCmdXPorta=33, - xmpCmdSetFCutoff=35, xmpCmdSFilter=36, - xmpCmdFPortaU=37,xmpCmdFPortaD=38,xmpCmdGlissando=39,xmpCmdVibType=40, - xmpCmdSFinetune=41,xmpCmdPatLoop=42,xmpCmdTremType=43,xmpCmdSPanning=44, - xmpCmdRetrigger=45,xmpCmdFVolSlideU=46, xmpCmdFVolSlideD=47, - xmpCmdNoteCut=48,xmpCmdDelayNote=49,xmpCmdPatDelay=50, - xmpCmdSetFHFCutoff=31, xmpCmdSetFHFReso=32, - xmpVCmdVol0x=1,xmpVCmdVol1x=2,xmpVCmdVol2x=3,xmpVCmdVol3x=4,xmpVCmdVol40=5, - xmpVCmdVolSlideD=6,xmpVCmdVolSlideU=7,xmpVCmdFVolSlideD=8, - xmpVCmdFVolSlideU=9,xmpVCmdVibRate=10,xmpVCmdVibDep=11,xmpVCmdPanning=12, - xmpVCmdPanSlideL=13,xmpVCmdPanSlideR=14,xmpVCmdPortaNote=15, - xmpCmdMODtTempo=128, -}; - -typedef struct channel -{ +typedef struct channel { int chVol; int chFinalVol; int chPan; int chFinalPan; - gint32 chPitch; /* Pitch really means 'period' in nonlinear and module frequencies */ + gint32 chPitch; /* Pitch really means 'period' in nonlinear and module frequencies */ gint32 chFinalPitch; int curnote; long chCutoff; @@ -199,8 +173,6 @@ guint8 chArpPos; guint8 chArpOffsets[3]; guint8 chActionTick; - guint8 chMRetrigPos; - guint8 chMRetrigLen; guint8 chMRetrigAct; guint8 chDelayNote; guint8 chDelayIns; @@ -212,11 +184,11 @@ guint8 chTremorOff; int nextstop; - STSample *nextsamp; + STSample* nextsamp; int nextpos; int sampleplayend; /* don't play all of the sample, but stop at (here) */ - STSample *cursamp; - STInstrument *curins; + STSample* cursamp; + STInstrument* curins; int hacksample; /* if 1, then simply play the sample pointed to by cursamp */ } channel; @@ -226,8 +198,9 @@ static guint8 tick0; -static int currow, play_only_row; -static XMPattern *curpattern; +static int currow, play_only_row, startrow, stoprow; +static int ch_start, ch_num; +static XMPattern* curpattern; static int patlen; static int curord; @@ -252,183 +225,727 @@ static int realgvol; -static guint32 hnotetab6848[16]={11131415,4417505,1753088,695713,276094,109568,43482,17256,6848,2718,1078,428,170,67,27,11}; -static guint32 hnotetab8363[16]={13594045,5394801,2140928,849628,337175,133808,53102,21073,8363,3319,1317,523,207,82,33,13}; -static guint16 notetab[16]={32768,30929,29193,27554,26008,24548,23170,21870,20643,19484,18390,17358,16384,15464,14596,13777}; -static guint16 finetab[16]={32768,32650,32532,32415,32298,32182,32066,31950,31835,31720,31606,31492,31379,31266,31153,31041}; -static guint16 xfinetab[16]={32768,32761,32753,32746,32738,32731,32724,32716,32709,32702,32694,32687,32679,32672,32665,32657}; +static guint32 hnotetab6848[16] = { 11131415, 4417505, 1753088, 695713, 276094, 109568, 43482, 17256, 6848, 2718, 1078, 428, 170, 67, 27, 11 }; +static guint32 hnotetab8363[16] = { 13594045, 5394801, 2140928, 849628, 337175, 133808, 53102, 21073, 8363, 3319, 1317, 523, 207, 82, 33, 13 }; +static guint16 notetab[16] = { 32768, 30929, 29193, 27554, 26008, 24548, 23170, 21870, 20643, 19484, 18390, 17358, 16384, 15464, 14596, 13777 }; +static guint16 finetab[16] = { 32768, 32650, 32532, 32415, 32298, 32182, 32066, 31950, 31835, 31720, 31606, 31492, 31379, 31266, 31153, 31041 }; +static guint16 xfinetab[16] = { 32768, 32761, 32753, 32746, 32738, 32731, 32724, 32716, 32709, 32702, 32694, 32687, 32679, 32672, 32665, 32657 }; /* This table ripped from pt-play.s (the original PT replayer) by Crayon/Noxious */ static guint16 protracker_periods[16][36] = { - { // Tuning -8 - 907,856,808,762,720,678,640,604,570,538,508,480, - 453,428,404,381,360,339,320,302,285,269,254,240, - 226,214,202,190,180,170,160,151,143,135,127,120, + { + // Tuning -8 + 907, + 856, + 808, + 762, + 720, + 678, + 640, + 604, + 570, + 538, + 508, + 480, + 453, + 428, + 404, + 381, + 360, + 339, + 320, + 302, + 285, + 269, + 254, + 240, + 226, + 214, + 202, + 190, + 180, + 170, + 160, + 151, + 143, + 135, + 127, + 120, }, - { // Tuning -7 - 900,850,802,757,715,675,636,601,567,535,505,477, - 450,425,401,379,357,337,318,300,284,268,253,238, - 225,212,200,189,179,169,159,150,142,134,126,119, + { + // Tuning -7 + 900, + 850, + 802, + 757, + 715, + 675, + 636, + 601, + 567, + 535, + 505, + 477, + 450, + 425, + 401, + 379, + 357, + 337, + 318, + 300, + 284, + 268, + 253, + 238, + 225, + 212, + 200, + 189, + 179, + 169, + 159, + 150, + 142, + 134, + 126, + 119, }, - { // Tuning -6 - 894,844,796,752,709,670,632,597,563,532,502,474, - 447,422,398,376,355,335,316,298,282,266,251,237, - 223,211,199,188,177,167,158,149,141,133,125,118, + { + // Tuning -6 + 894, + 844, + 796, + 752, + 709, + 670, + 632, + 597, + 563, + 532, + 502, + 474, + 447, + 422, + 398, + 376, + 355, + 335, + 316, + 298, + 282, + 266, + 251, + 237, + 223, + 211, + 199, + 188, + 177, + 167, + 158, + 149, + 141, + 133, + 125, + 118, }, - { // Tuning -5 - 887,838,791,746,704,665,628,592,559,528,498,470, - 444,419,395,373,352,332,314,296,280,264,249,235, - 222,209,198,187,176,166,157,148,140,132,125,118, + { + // Tuning -5 + 887, + 838, + 791, + 746, + 704, + 665, + 628, + 592, + 559, + 528, + 498, + 470, + 444, + 419, + 395, + 373, + 352, + 332, + 314, + 296, + 280, + 264, + 249, + 235, + 222, + 209, + 198, + 187, + 176, + 166, + 157, + 148, + 140, + 132, + 125, + 118, }, - { // Tuning -4 - 881,832,785,741,699,660,623,588,555,524,494,467, - 441,416,392,370,350,330,312,294,278,262,247,233, - 220,208,196,185,175,165,156,147,139,131,123,117, + { + // Tuning -4 + 881, + 832, + 785, + 741, + 699, + 660, + 623, + 588, + 555, + 524, + 494, + 467, + 441, + 416, + 392, + 370, + 350, + 330, + 312, + 294, + 278, + 262, + 247, + 233, + 220, + 208, + 196, + 185, + 175, + 165, + 156, + 147, + 139, + 131, + 123, + 117, }, - { // Tuning -3 - 875,826,779,736,694,655,619,584,551,520,491,463, - 437,413,390,368,347,328,309,292,276,260,245,232, - 219,206,195,184,174,164,155,146,138,130,123,116, + { + // Tuning -3 + 875, + 826, + 779, + 736, + 694, + 655, + 619, + 584, + 551, + 520, + 491, + 463, + 437, + 413, + 390, + 368, + 347, + 328, + 309, + 292, + 276, + 260, + 245, + 232, + 219, + 206, + 195, + 184, + 174, + 164, + 155, + 146, + 138, + 130, + 123, + 116, }, - { // Tuning -2 - 868,820,774,730,689,651,614,580,547,516,487,460, - 434,410,387,365,345,325,307,290,274,258,244,230, - 217,205,193,183,172,163,154,145,137,129,122,115, + { + // Tuning -2 + 868, + 820, + 774, + 730, + 689, + 651, + 614, + 580, + 547, + 516, + 487, + 460, + 434, + 410, + 387, + 365, + 345, + 325, + 307, + 290, + 274, + 258, + 244, + 230, + 217, + 205, + 193, + 183, + 172, + 163, + 154, + 145, + 137, + 129, + 122, + 115, }, - { // Tuning -1 - 862,814,768,725,684,646,610,575,543,513,484,457, - 431,407,384,363,342,323,305,288,272,256,242,228, - 216,203,192,181,171,161,152,144,136,128,121,114, + { + // Tuning -1 + 862, + 814, + 768, + 725, + 684, + 646, + 610, + 575, + 543, + 513, + 484, + 457, + 431, + 407, + 384, + 363, + 342, + 323, + 305, + 288, + 272, + 256, + 242, + 228, + 216, + 203, + 192, + 181, + 171, + 161, + 152, + 144, + 136, + 128, + 121, + 114, }, - { // Tuning 0, Normal - 856,808,762,720,678,640,604,570,538,508,480,453, - 428,404,381,360,339,320,302,285,269,254,240,226, - 214,202,190,180,170,160,151,143,135,127,120,113, + { + // Tuning 0, Normal + 856, + 808, + 762, + 720, + 678, + 640, + 604, + 570, + 538, + 508, + 480, + 453, + 428, + 404, + 381, + 360, + 339, + 320, + 302, + 285, + 269, + 254, + 240, + 226, + 214, + 202, + 190, + 180, + 170, + 160, + 151, + 143, + 135, + 127, + 120, + 113, }, - { // Tuning 1 - 850,802,757,715,674,637,601,567,535,505,477,450, - 425,401,379,357,337,318,300,284,268,253,239,225, - 213,201,189,179,169,159,150,142,134,126,119,113, + { + // Tuning 1 + 850, + 802, + 757, + 715, + 674, + 637, + 601, + 567, + 535, + 505, + 477, + 450, + 425, + 401, + 379, + 357, + 337, + 318, + 300, + 284, + 268, + 253, + 239, + 225, + 213, + 201, + 189, + 179, + 169, + 159, + 150, + 142, + 134, + 126, + 119, + 113, }, - { // Tuning 2 - 844,796,752,709,670,632,597,563,532,502,474,447, - 422,398,376,355,335,316,298,282,266,251,237,224, - 211,199,188,177,167,158,149,141,133,125,118,112, + { + // Tuning 2 + 844, + 796, + 752, + 709, + 670, + 632, + 597, + 563, + 532, + 502, + 474, + 447, + 422, + 398, + 376, + 355, + 335, + 316, + 298, + 282, + 266, + 251, + 237, + 224, + 211, + 199, + 188, + 177, + 167, + 158, + 149, + 141, + 133, + 125, + 118, + 112, }, - { // Tuning 3 - 838,791,746,704,665,628,592,559,528,498,470,444, - 419,395,373,352,332,314,296,280,264,249,235,222, - 209,198,187,176,166,157,148,140,132,125,118,111, + { + // Tuning 3 + 838, + 791, + 746, + 704, + 665, + 628, + 592, + 559, + 528, + 498, + 470, + 444, + 419, + 395, + 373, + 352, + 332, + 314, + 296, + 280, + 264, + 249, + 235, + 222, + 209, + 198, + 187, + 176, + 166, + 157, + 148, + 140, + 132, + 125, + 118, + 111, }, - { // Tuning 4 - 832,785,741,699,660,623,588,555,524,495,467,441, - 416,392,370,350,330,312,294,278,262,247,233,220, - 208,196,185,175,165,156,147,139,131,124,117,110, + { + // Tuning 4 + 832, + 785, + 741, + 699, + 660, + 623, + 588, + 555, + 524, + 495, + 467, + 441, + 416, + 392, + 370, + 350, + 330, + 312, + 294, + 278, + 262, + 247, + 233, + 220, + 208, + 196, + 185, + 175, + 165, + 156, + 147, + 139, + 131, + 124, + 117, + 110, }, - { // Tuning 5 - 826,779,736,694,655,619,584,551,520,491,463,437, - 413,390,368,347,328,309,292,276,260,245,232,219, - 206,195,184,174,164,155,146,138,130,123,116,109, + { + // Tuning 5 + 826, + 779, + 736, + 694, + 655, + 619, + 584, + 551, + 520, + 491, + 463, + 437, + 413, + 390, + 368, + 347, + 328, + 309, + 292, + 276, + 260, + 245, + 232, + 219, + 206, + 195, + 184, + 174, + 164, + 155, + 146, + 138, + 130, + 123, + 116, + 109, }, - { // Tuning 6 - 820,774,730,689,651,614,580,547,516,487,460,434, - 410,387,365,345,325,307,290,274,258,244,230,217, - 205,193,183,172,163,154,145,137,129,122,115,109, + { + // Tuning 6 + 820, + 774, + 730, + 689, + 651, + 614, + 580, + 547, + 516, + 487, + 460, + 434, + 410, + 387, + 365, + 345, + 325, + 307, + 290, + 274, + 258, + 244, + 230, + 217, + 205, + 193, + 183, + 172, + 163, + 154, + 145, + 137, + 129, + 122, + 115, + 109, }, - { // Tuning 7 - 814,768,725,684,646,610,575,543,513,484,457,431, - 407,384,363,342,323,305,288,272,256,242,228,216, - 204,192,181,171,161,152,144,136,128,121,114,108, + { + // Tuning 7 + 814, + 768, + 725, + 684, + 646, + 610, + 575, + 543, + 513, + 484, + 457, + 431, + 407, + 384, + 363, + 342, + 323, + 305, + 288, + 272, + 256, + 242, + 228, + 216, + 204, + 192, + 181, + 171, + 161, + 152, + 144, + 136, + 128, + 121, + 114, + 108, } }; static int mcpGetFreq6848(int note) { - note=-note; - return umulshr16(umulshr16(umulshr16(hnotetab6848[((note+0x8000)>>12)&0xF],notetab[(note>>8)&0xF]*2),finetab[(note>>4)&0xF]*2),xfinetab[note&0xF]*2); + note = -note; + return umulshr16(umulshr16(umulshr16(hnotetab6848[((note + 0x8000) >> 12) & 0xF], notetab[(note >> 8) & 0xF] * 2), finetab[(note >> 4) & 0xF] * 2), xfinetab[note & 0xF] * 2); } static int mcpGetNote6848(int frq) { gint16 x; int i; - for (i=0; i<15; i++) - if (hnotetab6848[i+1]96*256)?96*256:x; - else - return (x<107)?107:(x>438272)?438272:x; + if (linearfreq) + return (x < -72 * 256) ? -72 * 256 : (x > 96 * 256) ? 96 * 256 : x; + else + return (x < 107) ? 107 : (x > 438272) ? 438272 : x; } } static int volrange(int x) { - return (x<0)?0:(x>0x40)?0x40:x; + return (x < 0) ? 0 : (x > 0x40) ? 0x40 : x; } static int panrange(int x) { - return (x<0)?0:(x>0xFF)?0xFF:x; + return (x < 0) ? 0 : (x > 0xFF) ? 0xFF : x; } static int -xm_player_start_note (channel *ch, - int note) +xm_player_start_note(channel* ch, + int note) { - STInstrument *ins = &xm->instruments[ch->chCurIns-1]; + STInstrument* ins = &xm->instruments[ch->chCurIns - 1]; note--; - if(ins->samplemap[note] > nsamp) - return 0; + if (ins->samplemap[note] > nsamp) + return 0; ch->curins = ins; ch->cursamp = &ins->samples[ins->samplemap[note]]; ch->chDefVol = ch->cursamp->volume; @@ -437,994 +954,1076 @@ } static gint32 -xm_player_get_note_pitch (channel *ch) +xm_player_get_note_pitch(channel* ch) { - if(!ismod) { - gint32 pitch = 48*256 - (((procnot - 1) << 8) - ch->chCurNormNote); + if (!ismod) { + gint32 pitch = 48 * 256 - (((procnot - 1) << 8) - ch->chCurNormNote); - if(linearfreq) - return pitch; - else - return mcpGetFreq6848(pitch); + if (linearfreq) + return pitch; + else + return mcpGetFreq6848(pitch); } else { - int note = procnot - 1 - 36; + int note = procnot - 1 - 36; + + if (note < 0) + note = 0; + else if (note >= 36) + note = 35; - if(note < 0) - note = 0; - else if(note >= 36) - note = 35; - - return protracker_periods[(ch->cursamp->finetune >> 4) + 8][note] << 4; + return protracker_periods[(ch->cursamp->finetune >> 4) + 8][note] << 4; } } static void -xm_player_playnote_protracker (channel *ch) +xm_player_playnote_protracker(channel* ch) { - int portatmp=0; + int portatmp = 0; int delaytmp; - if (proccmd==xmpCmdPortaNote) - portatmp=1; - if (proccmd==xmpCmdPortaVol) - portatmp=1; + if (proccmd == xmpCmdPortaNote) + portatmp = 1; + if (proccmd == xmpCmdPortaVol) + portatmp = 1; - delaytmp=(proccmd==xmpCmdDelayNote)&&procdat; + delaytmp = (proccmd == xmpCmdDelayNote) && procdat; if (!ch->chCurIns) - return; + return; -/* This needs to be fixed! */ - if (!procnot && procins && ch->chCurIns!=ch->chLastIns) - procnot=ch->curnote; + /* This needs to be fixed! */ + if (!procnot && procins && ch->chCurIns != ch->chLastIns) + procnot = ch->curnote; if (procnot && !delaytmp) - ch->curnote=procnot; + ch->curnote = procnot; if (procins) { - gint32 checknote = ch->curnote; - if(!checknote) - checknote = 49; - if(!xm_player_start_note(ch, checknote)) - return; + gint32 checknote = ch->curnote; + if (!checknote) + checknote = 49; + if (!xm_player_start_note(ch, checknote)) + return; } - + if (procnot && !delaytmp) { - if (!portatmp) { - gint32 nn; - ch->nextstop=1; - - if(!ch->cursamp) - return; - - ch->nextsamp = ch->cursamp; - - /* CurNormNote is only relevant in FastTracker mode */ - nn = -ch->cursamp->relnote*256 - ch->cursamp->finetune*2; - if(proccmd == xmpCmdSFinetune) - nn = -ch->cursamp->relnote*256 - (gint16)(procdat << 4) + 0x80; - ch->chCurNormNote = nn; - - ch->chPitch = ch->chFinalPitch = ch->chPortaToPitch = xm_player_get_note_pitch(ch); - - ch->nextpos=0; - ch->sampleplayend=-1; - - if (proccmd==xmpCmdOffset) { - if (procdat!=0) - ch->chOffset=procdat; - ch->nextpos=ch->chOffset<<8; - if (1 && ch->nextpos > ch->nextsamp->sample.length) - ch->nextpos = ch->nextsamp->sample.length - 16; - } - - ch->chVibPos=0; - ch->chTremPos=0; - ch->chArpPos=0; - ch->chMRetrigPos=0; - ch->chTremorPos=0; - } else { - ch->chPortaToPitch = xm_player_get_note_pitch(ch); - } + if (!portatmp) { + gint32 nn; + ch->nextstop = 1; + + if (!ch->cursamp) + return; + + ch->nextsamp = ch->cursamp; + + /* CurNormNote is only relevant in FastTracker mode */ + nn = -ch->cursamp->relnote * 256 - ch->cursamp->finetune * 2; + if (proccmd == xmpCmdSFinetune) + nn = -ch->cursamp->relnote * 256 - (gint16)(procdat << 4) + 0x80; + ch->chCurNormNote = nn; + + ch->chPitch = ch->chFinalPitch = ch->chPortaToPitch = xm_player_get_note_pitch(ch); + + ch->nextpos = 0; + ch->sampleplayend = -1; + + if (proccmd == xmpCmdOffset) { + if (procdat != 0) + ch->chOffset = procdat; + ch->nextpos = ch->chOffset << 8; + if (1 && ch->nextpos > ch->nextsamp->sample.length) + ch->nextpos = ch->nextsamp->sample.length - 16; + } + + if (!(ch->chVibType & 4)) + ch->chVibPos = 0; + if (!(ch->chTremType & 4)) + ch->chTremPos = 0; + ch->chArpPos = 0; + ch->chTremorPos = 0; + } else { + ch->chPortaToPitch = xm_player_get_note_pitch(ch); + } } if (procins) { - ch->chVol=ch->chDefVol; - ch->chFinalVol=ch->chDefVol; - if (ch->chDefPan!=-1) - { - ch->chPan=ch->chDefPan; - ch->chFinalPan=ch->chDefPan; - } - ch->chFadeVol=0x8000; - ch->chAVibPos=0; - ch->chAVibSwpPos=0; - ch->chVolEnvPos=0; - ch->chPanEnvPos=0; + ch->chVol = ch->chDefVol; + ch->chFinalVol = ch->chDefVol; + if (ch->chDefPan != -1) { + ch->chPan = ch->chDefPan; + ch->chFinalPan = ch->chDefPan; + } + ch->chFadeVol = 0x8000; + ch->chAVibPos = 0; + ch->chAVibSwpPos = 0; + ch->chVolEnvPos = 0; + ch->chPanEnvPos = 0; } } static void -xm_player_playnote_fasttracker (channel *ch) +xm_player_playnote_fasttracker(channel* ch) { - int portatmp=0; + int portatmp = 0; int delaytmp; - int keyoff=0; + int keyoff = 0; - if (proccmd==xmpCmdPortaNote) - portatmp=1; - if (proccmd==xmpCmdPortaVol) - portatmp=1; - if ((procvol>>4)==xmpVCmdPortaNote) - portatmp=1; + if (proccmd == xmpCmdPortaNote) + portatmp = 1; + if (proccmd == xmpCmdPortaVol) + portatmp = 1; + if ((procvol >> 4) == xmpVCmdPortaNote) + portatmp = 1; - delaytmp=(proccmd==xmpCmdDelayNote)&&procdat; + delaytmp = (proccmd == xmpCmdDelayNote) && procdat; - if (procnot==97) { - procnot=0; - keyoff=1; + if (procnot == XM_PATTERN_NOTE_OFF) { + procnot = 0; + keyoff = 1; } - if ((proccmd==xmpCmdKeyOff)&&!procdat) - keyoff=1; + if ((proccmd == xmpCmdKeyOff) && !procdat) + keyoff = 1; if (!ch->chCurIns) - return; + return; if (procins && !keyoff && !delaytmp) - ch->chSustain=1; + ch->chSustain = 1; if (procnot && !delaytmp) - ch->curnote=procnot; + ch->curnote = procnot; if (procins && !delaytmp) { - gint32 checknote = ch->curnote; - if(!checknote) - checknote = 49; - if(!xm_player_start_note(ch, checknote)) - return; + gint32 checknote = ch->curnote; + if (!checknote) + checknote = 49; + if (!xm_player_start_note(ch, checknote)) + return; } - + if (procnot && !delaytmp) { - if (!portatmp) { - gint32 nn; - ch->nextstop=1; - - if(procins) { - if(!xm_player_start_note(ch, ch->curnote)) - return; - } - - if(!ch->cursamp) - return; - - ch->nextsamp = ch->cursamp; - - /* CurNormNote is only relevant in FastTracker mode */ - nn = -ch->cursamp->relnote*256 - ch->cursamp->finetune*2; - if(proccmd == xmpCmdSFinetune) - nn = -ch->cursamp->relnote*256 - (gint16)(procdat << 4) + 0x80; - ch->chCurNormNote = nn; - - ch->chPitch = ch->chFinalPitch = ch->chPortaToPitch = xm_player_get_note_pitch(ch); - - ch->nextpos=0; - ch->sampleplayend=-1; - - if (proccmd==xmpCmdOffset) { - if (procdat!=0) - ch->chOffset=procdat; - ch->nextpos=ch->chOffset<<8; - } - - ch->chVibPos=0; - ch->chTremPos=0; - ch->chArpPos=0; - ch->chMRetrigPos=0; - ch->chTremorPos=0; - } else { - ch->chPortaToPitch = xm_player_get_note_pitch(ch); - } + if (!portatmp) { + gint32 nn; + ch->nextstop = 1; + + if (procins) { + if (!xm_player_start_note(ch, ch->curnote)) + return; + } + + if (!ch->cursamp) + return; + + ch->nextsamp = ch->cursamp; + + /* CurNormNote is only relevant in FastTracker mode */ + nn = -ch->cursamp->relnote * 256 - ch->cursamp->finetune * 2; + if (proccmd == xmpCmdSFinetune) + nn = -ch->cursamp->relnote * 256 - (gint16)(procdat << 4) + 0x80; + ch->chCurNormNote = nn; + + ch->chPitch = ch->chFinalPitch = ch->chPortaToPitch = xm_player_get_note_pitch(ch); + + ch->nextpos = 0; + ch->sampleplayend = -1; + + if (proccmd == xmpCmdOffset) { + if (procdat != 0) + ch->chOffset = procdat; + ch->nextpos = ch->chOffset << 8; + } + + if (!(ch->chVibType & 4)) + ch->chVibPos = 0; + if (!(ch->chTremType & 4)) + ch->chTremPos = 0; + ch->chArpPos = 0; + ch->chTremorPos = 0; + } else { + ch->chPortaToPitch = xm_player_get_note_pitch(ch); + } } if (procnot && delaytmp) - return; + return; - if (keyoff&&ch->cursamp) { - ch->chSustain=0; - if (!(ch->curins->vol_env.flags & EF_ON) && !procins) - ch->chFadeVol=0; + if (keyoff && ch->cursamp) { + ch->chSustain = 0; + if (!(ch->curins->vol_env.flags & EF_ON) && !procins) + ch->chFadeVol = 0; } if (procins && ch->chSustain) { - ch->chVol=ch->chDefVol; - ch->chFinalVol=ch->chDefVol; - if (ch->chDefPan!=-1) - { - ch->chPan=ch->chDefPan; - ch->chFinalPan=ch->chDefPan; - } - ch->chFadeVol=0x8000; - ch->chAVibPos=0; - ch->chAVibSwpPos=0; - ch->chVolEnvPos=0; - ch->chPanEnvPos=0; + ch->chVol = ch->chDefVol; + ch->chFinalVol = ch->chDefVol; + if (ch->chDefPan != -1) { + ch->chPan = ch->chDefPan; + ch->chFinalPan = ch->chDefPan; + } + ch->chFadeVol = 0x8000; + ch->chAVibPos = 0; + ch->chAVibSwpPos = 0; + ch->chVolEnvPos = 0; + ch->chPanEnvPos = 0; } } static void -PlayNote (int chnr) +PlayNote(int chnr) { - channel *ch = &channels[chnr]; + channel* ch = &channels[chnr]; - if(ismod) - xm_player_playnote_protracker(ch); + if (ismod) + xm_player_playnote_protracker(ch); else - xm_player_playnote_fasttracker(ch); + xm_player_playnote_fasttracker(ch); } static void -xmplayer_final_channel_ops (int chnr) +xmplayer_final_channel_ops(int chnr) { int vol, pan; - channel *ch = &channels[chnr]; + channel* ch = &channels[chnr]; - if(player_mute_channels[chnr]) { - driver_setvolume(chnr, 0); - return; - } - - vol=(ch->chFinalVol*globalvol)>>4; - pan=ch->chFinalPan-128; - - if(!ismod && !ch->hacksample) { - if (!ch->chSustain) { - vol=(vol*ch->chFadeVol)>>15; - if (ch->chFadeVol >= ch->curins->volfade) - ch->chFadeVol -= ch->curins->volfade; - else - ch->chFadeVol=0; - } - - if(ch->curins->vol_env.flags & EF_ON) { - vol = (vol * env_handle(&ch->curins->vol_env, &ch->chVolEnvPos, ch->chSustain)) >> 8; - } - - if(ch->curins->pan_env.flags & EF_ON) { - pan += ((env_handle(&ch->curins->pan_env, &ch->chPanEnvPos, ch->chSustain)-128)*(128-((pan<0)?-pan:pan)))>>7; - } - - if(ch->curins->vibrate && ch->curins->vibdepth) { - int dep=0; - switch (ch->curins->vibtype) { - case 0: - dep = sin(2 * M_PI * (double)ch->chAVibPos / 256 / 256) * (double)(ch->curins->vibdepth << 2); - break; - case 1: - dep=(ch->chAVibPos&0x8000)? -(ch->curins->vibdepth << 2) : (ch->curins->vibdepth << 2); - break; - case 2: - dep=((ch->curins->vibdepth << 2)*(32768-ch->chAVibPos))>>14; - break; - case 3: - dep=((ch->curins->vibdepth << 2)*(ch->chAVibPos-32768))>>14; - break; - } - - ch->chAVibSwpPos += 0xFFFF / (ch->curins->vibsweep + 1); - if (ch->chAVibSwpPos>0x10000) - ch->chAVibSwpPos=0x10000; - dep=(dep*(int)ch->chAVibSwpPos)>>17; - - ch->chFinalPitch-=dep; - - ch->chAVibPos += ch->curins->vibrate << 8; - } - } - - if(ch->nextstop) { - driver_stopnote(chnr); - } - if(ch->nextsamp != NULL) { - driver_startnote(chnr, &ch->nextsamp->sample); - } - if(ch->nextpos != -1) { - driver_setsmplpos(chnr, ch->nextpos); - if(ch->sampleplayend != -1) { - driver_setsmplend(chnr, ch->sampleplayend); - } - } - if(ismod) { - if(ch->chFinalPitch != 0) { /* == 0 happens on tru_funk.mod */ - /* PAL clock constant is 3546895, NTSC clock constant is 3579545 */ - /* Taken from "Amiga Hardware Reference Manual, revised & updated", September 1989 printing */ - driver_setfreq(chnr, (double)(3546895 * 16) / ch->chFinalPitch); - } + if (player_mute_channels[chnr] && (xmplayer_playmode == PLAYING_SONG || xmplayer_playmode == PLAYING_PATTERN)) { + driver_setvolume(chnr, 0); + return; + } + + vol = (ch->chFinalVol * globalvol) >> 4; + pan = ch->chFinalPan - 128; + + if (!ismod && !ch->hacksample) { + if (!ch->chSustain) { + vol = (vol * ch->chFadeVol) >> 15; + if (ch->chFadeVol >= ch->curins->volfade) + ch->chFadeVol -= ch->curins->volfade; + else + ch->chFadeVol = 0; + } + + if (ch->curins->vol_env.flags & EF_ON) { + vol = (vol * env_handle(&ch->curins->vol_env, &ch->chVolEnvPos, ch->chSustain)) >> 8; + } + + if (ch->curins->pan_env.flags & EF_ON) { + pan += ((env_handle(&ch->curins->pan_env, &ch->chPanEnvPos, ch->chSustain) - 128) * (128 - ((pan < 0) ? -pan : pan))) >> 7; + } + + if (ch->curins->vibrate && ch->curins->vibdepth) { + int dep = 0; + switch (ch->curins->vibtype) { + case 0: + dep = sin(2 * M_PI * (double)ch->chAVibPos / 256 / 256) * (double)(ch->curins->vibdepth << 2); + break; + case 1: + dep = (ch->chAVibPos & 0x8000) ? -(ch->curins->vibdepth << 2) : (ch->curins->vibdepth << 2); + break; + case 2: + dep = ((ch->curins->vibdepth << 2) * (32768 - ch->chAVibPos)) >> 14; + break; + case 3: + dep = ((ch->curins->vibdepth << 2) * (ch->chAVibPos - 32768)) >> 14; + break; + } + + ch->chAVibSwpPos += 0xFFFF / (ch->curins->vibsweep + 1); + if (ch->chAVibSwpPos > 0x10000) + ch->chAVibSwpPos = 0x10000; + dep = (dep * (int)ch->chAVibSwpPos) >> 17; + + ch->chFinalPitch -= dep; + + ch->chAVibPos += ch->curins->vibrate << 8; + } + } + + if (ch->nextstop) { + driver_stopnote(chnr); + } + if (ch->nextsamp != NULL) { + driver_startnote(chnr, &ch->nextsamp->sample); + } + if (ch->nextpos != -1) { + driver_setsmplpos(chnr, ch->nextpos); + if (ch->sampleplayend != -1) { + driver_setsmplend(chnr, ch->sampleplayend); + } + } + if (ismod) { + if (ch->chFinalPitch != 0) { /* == 0 happens on tru_funk.mod */ + /* PAL clock constant is 3546895, NTSC clock constant is 3579545 */ + /* Taken from "Amiga Hardware Reference Manual, revised & updated", September 1989 printing */ + driver_setfreq(chnr, (double)(3546895 * 16) / ch->chFinalPitch); + } } else { - if(linearfreq) { - driver_setfreq(chnr, pitch_to_freq(ch->chFinalPitch)); - } else { - if(ch->chFinalPitch != 0) { /* == 0 happens on tru_funk.mod */ - driver_setfreq(chnr, pitch_to_freq(-mcpGetNote8363(8363*6848/ch->chFinalPitch))); - } - } + if (linearfreq) { + driver_setfreq(chnr, pitch_to_freq(ch->chFinalPitch)); + } else { + if (ch->chFinalPitch != 0) { /* == 0 happens on tru_funk.mod */ + driver_setfreq(chnr, pitch_to_freq(-mcpGetNote8363(8363 * 6848 / ch->chFinalPitch))); + } + } } driver_setvolume(chnr, (double)vol / 4 / 64); - if(ismod) { - driver_setpanning(chnr, chnr == 0 || chnr == 3 ? -1.0 : +1.0); + if (ismod) { + driver_setpanning(chnr, chnr == 0 || chnr == 3 ? -1.0 : +1.0); } else { - driver_setpanning(chnr, (double)pan / 128); + driver_setpanning(chnr, (double)pan / 128); } - if(ch->chCutoff == 0xff && ch->chReso == 0) { - driver_set_ch_filter_freq(chnr, -1.0); + if ((ch->chCutoff == 0xff && ch->chReso == 0) || !gui_settings.use_filter) { + driver_set_ch_filter_freq(chnr, -1.0); } else { - driver_set_ch_filter_freq(chnr, 0.5 * pow(2,(float)(ch->chCutoff-255)/32.0)); - driver_set_ch_filter_reso(chnr, (float)ch->chReso / 255); + driver_set_ch_filter_freq(chnr, 0.5 * pow(2, (float)(ch->chCutoff - 255) / 32.0)); + driver_set_ch_filter_reso(chnr, (float)ch->chReso / 255); } } static gint32 -xm_player_handle_glissando (channel *ch) +xm_player_handle_glissando(channel* ch) { - if(ch->chGlissando) { - if(ismod) { - fprintf(stderr, "Glissando (E31) for ProTracker modules not supported yet (in module '%s').\n", xm->name); - return ch->chPitch; - } else { - if(linearfreq) - return ((ch->chPitch+ch->chCurNormNote+0x80)&~0xFF)-ch->chCurNormNote; - else - return mcpGetFreq6848(((mcpGetNote6848(ch->chPitch)+ch->chCurNormNote+0x80)&~0xFF)-ch->chCurNormNote); - } + if (ch->chGlissando) { + if (ismod) { + fprintf(stderr, "Glissando (E31) for ProTracker modules not supported yet (in module '%s').\n", xm->utf_name); + return ch->chPitch; + } else { + if (linearfreq) + return ((ch->chPitch + ch->chCurNormNote + 0x80) & ~0xFF) - ch->chCurNormNote; + else + return mcpGetFreq6848(((mcpGetNote6848(ch->chPitch) + ch->chCurNormNote + 0x80) & ~0xFF) - ch->chCurNormNote); + } } else - return ch->chPitch; + return ch->chPitch; } static void xmpPlayTick() { - int i; + int i, fromch, toch; - tick0=0; + tick0 = 0; - for (i=0; ichFinalVol=ch->chVol; - ch->chFinalPan=ch->chPan; - ch->chFinalPitch=ch->chPitch; - ch->nextstop=0; - ch->nextsamp=NULL; - ch->nextpos=-1; - } - - if(xmplayer_playmode == PLAYING_NOTE) { - for(i = 0; i < nchan; i++) { - channel *ch = &channels[i]; - if (!ch->cursamp) { - driver_stopnote(i); - } else { - xmplayer_final_channel_ops(i); - } - } - return; + if (xmplayer_playmode == PLAYING_PATTERN && ch_start >= 0 && ch_num >= 0) { + fromch = ch_start; + toch = ch_start + ch_num; + if (toch > nchan) + toch = nchan; + } else { + fromch = 0; + toch = nchan; + } + + for (i = fromch; i < toch; i++) { + channel* ch = &channels[i]; + ch->chFinalVol = ch->chVol; + ch->chFinalPan = ch->chPan; + ch->chFinalPitch = ch->chPitch; + ch->nextstop = 0; + ch->nextsamp = NULL; + ch->nextpos = -1; + } + + if (xmplayer_playmode == PLAYING_NOTE) { + for (i = 0; i < nchan; i++) { + channel* ch = &channels[i]; + if (!ch->cursamp) { + driver_stopnote(i); + } else { + xmplayer_final_channel_ops(i); + } + } + return; } curtick++; - if (curtick>=player_tempo) - curtick=0; + if (curtick >= player_tempo) + curtick = 0; + + if (player_will_loop) { + player_looped = TRUE; + player_will_loop = FALSE; + } - if(player_will_loop) { - player_looped = TRUE; - player_will_loop = FALSE; - } - - if(!curtick && patdelay) { - if (jumptoord!=-1) { - if (jumptoord!=curord) - for (i=0; ichPatLoopCount=0; - ch->chPatLoopStart=0; - } - - if (jumptoord>=nord) { - jumptoord=loopord; - player_looped = TRUE; - } - - if(xmplayer_playmode == PLAYING_SONG) { - curord=jumptoord; - patlen = xm->patterns[xm->pattern_order_table[curord]].length; - curpattern = &xm->patterns[xm->pattern_order_table[curord]]; - } - currow=jumptorow; - jumptoord=-1; - } - } - - if(!curtick && (!patdelay || ismod)) { - tick0 = 1; - - if (!patdelay) { - currow++; - if ((jumptoord==-1)&&(currow>=patlen)) { - jumptoord=curord+1; - jumptorow=0; - } - if (jumptoord!=-1) { - if (jumptoord!=curord) - for (i=0; ichPatLoopCount=0; - ch->chPatLoopStart=0; - } - - if (jumptoord>=nord) { - jumptoord=loopord; - player_looped = TRUE; - } - - if(xmplayer_playmode == PLAYING_SONG) { - curord=jumptoord; - patlen = xm->patterns[xm->pattern_order_table[curord]].length; - curpattern = &xm->patterns[xm->pattern_order_table[curord]]; - } - currow=jumptorow; - jumptoord=-1; - } - } - - if(play_only_row != -1 && currow != play_only_row) { - currow = play_only_row; - xmplayer_playmode = PLAYING_NOTE; - return; - } - - for (i=0; ichannels[i][currow].note; - procins = curpattern->channels[i][currow].instrument; - procvol = curpattern->channels[i][currow].volume; - proccmd = curpattern->channels[i][currow].fxtype; - procdat = curpattern->channels[i][currow].fxparam; - - if(proccmd == 0xE) { - proccmd = 36 + (procdat >> 4); - procdat &= 0xF; - } - - if (!patdelay) { - if (procins && procins<=ninst) { - ch->chLastIns=ch->chCurIns; - ch->chCurIns=procins; - } - if (procins<=ninst) - PlayNote(i); - } - - ch->chVCommand=procvol>>4; - - switch (ch->chVCommand) { - case xmpVCmdVol0x: case xmpVCmdVol1x: case xmpVCmdVol2x: case xmpVCmdVol3x: - if ((proccmd!=xmpCmdDelayNote)||!procdat) - ch->chFinalVol=ch->chVol=procvol-0x10; - break; - case xmpVCmdVol40: - if ((proccmd!=xmpCmdDelayNote)||!procdat) - ch->chFinalVol=ch->chVol=0x40; - break; - case xmpVCmdVolSlideD: case xmpVCmdVolSlideU: case xmpVCmdPanSlideL: case xmpVCmdPanSlideR: - ch->chVVolPanSlideVal=procvol&0xF; - break; - case xmpVCmdFVolSlideD: - if ((proccmd!=xmpCmdDelayNote)||!procdat) - ch->chFinalVol=ch->chVol=volrange(ch->chVol-(procvol&0xF)); - break; - case xmpVCmdFVolSlideU: - if ((proccmd!=xmpCmdDelayNote)||!procdat) - ch->chFinalVol=ch->chVol=volrange(ch->chVol+(procvol&0xF)); - break; - case xmpVCmdVibRate: - if (procvol&0xF) - ch->chVibRate=((procvol&0xF)<<2); - break; - case xmpVCmdVibDep: - if (procvol&0xF) - ch->chVibDep=((procvol&0xF)<<(1+(!linearfreq&&!ismod))); - break; - case xmpVCmdPanning: - if ((proccmd!=xmpCmdDelayNote)||!procdat) - ch->chFinalPan=ch->chPan=(procvol&0xF)*0x11; - break; - case xmpVCmdPortaNote: - if (procvol&0xF) - ch->chPortaToVal=(procvol&0xF)<<8; - break; - } - - ch->chCommand=proccmd; - - switch (ch->chCommand) { - case xmpCmdArpeggio: - if (!procdat) - ch->chCommand=0xFF; - ch->chArpOffsets[0]=0; - ch->chArpOffsets[1]=procdat>>4; - ch->chArpOffsets[2]=procdat&0xF; - break; - case xmpCmdPortaU: - if (procdat) - ch->chPortaUVal=procdat<<4; - break; - case xmpCmdPortaD: - if (procdat) - ch->chPortaDVal=procdat<<4; - break; - case xmpCmdPortaNote: - if (procdat) - ch->chPortaToVal=procdat<<4; - break; - case xmpCmdVibrato: - if (procdat&0xF) - ch->chVibDep=(procdat&0xF)<<(1+(!linearfreq&&!ismod)); - if (procdat&0xF0) - ch->chVibRate=(procdat>>4)<<2; - break; - case xmpCmdPortaVol: case xmpCmdVibVol: case xmpCmdVolSlide: - if (procdat || ismod) - ch->chVolSlideVal=procdat; - break; - case xmpCmdTremolo: - if (procdat&0xF) - ch->chTremDep=(procdat&0xF)<<2; - if (procdat&0xF0) - ch->chTremRate=(procdat>>4)<<2; - break; - case xmpCmdPanning: - ch->chFinalPan=ch->chPan=procdat; - break; - case xmpCmdSetFCutoff: - ch->chCutoff=procdat; - break; - case xmpCmdSetFReso: - ch->chReso=procdat; - break; - case xmpCmdSetFHFCutoff: -// mcpSet(0,mcpMasterFHFCutoff,procdat); - break; - case xmpCmdSetFHFReso: -// mcpSet(0,mcpMasterFHFReso,procdat); - break; - - case xmpCmdJump: - if (!patdelay) { - jumptoord=procdat; - jumptorow=0; - player_will_loop = TRUE; - } - break; - case xmpCmdVolume: - ch->chFinalVol=ch->chVol=volrange(procdat); - break; - case xmpCmdBreak: - if (!patdelay) { - if (jumptoord==-1) - jumptoord=curord+1; - jumptorow=(procdat&0xF)+(procdat>>4)*10; - } - break; - case xmpCmdSpeed: - if (!procdat) { - jumptoord=procdat; - jumptorow=0; - player_will_loop = TRUE; - break; - } - if (procdat>=0x20) { - player_bpm = procdat; + if (!curtick && patdelay) { + if (jumptoord != -1) { + if (jumptoord != curord) + for (i = 0; i < nchan; i++) { + channel* ch = &channels[i]; + ch->chPatLoopCount = 0; + ch->chPatLoopStart = 0; + } + + if (jumptoord >= nord) { + jumptoord = loopord; + player_looped = TRUE; + } + + if (xmplayer_playmode == PLAYING_SONG) { + curord = jumptoord; + patlen = xm->patterns[xm->pattern_order_table[curord]].length; + curpattern = &xm->patterns[player_patno = xm->pattern_order_table[curord]]; + } + currow = jumptorow; + jumptoord = -1; + } + } + + if (!curtick && (!patdelay || ismod)) { + tick0 = 1; + + if (!patdelay) { + currow++; + if (xmplayer_playmode == PLAYING_PATTERN && jumptoord == -1 && + stoprow >= 0 && currow >= stoprow) { + jumptoord = curord; + jumptorow = startrow; + player_looped = TRUE; + } + if ((jumptoord == -1) && (currow >= patlen)) { + jumptoord = curord + 1; + jumptorow = 0; + if (xmplayer_playmode == PLAYING_PATTERN) { + player_looped = TRUE; + if (stoprow >= 0) + jumptorow = startrow; + } + } + if (jumptoord != -1) { + if (jumptoord != curord) + for (i = 0; i < nchan; i++) { + channel* ch = &channels[i]; + ch->chPatLoopCount = 0; + ch->chPatLoopStart = 0; + } + + if (jumptoord >= nord) { + jumptoord = loopord; + player_looped = TRUE; + } + + if (xmplayer_playmode == PLAYING_SONG) { + curord = jumptoord; + patlen = xm->patterns[xm->pattern_order_table[curord]].length; + curpattern = &xm->patterns[player_patno = xm->pattern_order_table[curord]]; + } + currow = jumptorow; + jumptoord = -1; + } + } + + if (play_only_row != -1 && currow != play_only_row) { + currow = play_only_row; + xmplayer_playmode = PLAYING_NOTE; + return; + } + + for (i = fromch; i < toch; i++) { + channel* ch = &channels[i]; + + procnot = curpattern->channels[i][currow].note; + procins = curpattern->channels[i][currow].instrument; + procvol = curpattern->channels[i][currow].volume; + proccmd = curpattern->channels[i][currow].fxtype; + procdat = curpattern->channels[i][currow].fxparam; + + if (proccmd == xmpCmdExtended) { + proccmd = 36 + (procdat >> 4); + procdat &= 0xF; + } + + if (!patdelay) { + if (procins && procins <= ninst) { + ch->chLastIns = ch->chCurIns; + ch->chCurIns = procins; + } + if (procins <= ninst) + PlayNote(i); + } + + ch->chVCommand = procvol >> 4; + + switch (ch->chVCommand) { + case xmpVCmdVol0x: + case xmpVCmdVol1x: + case xmpVCmdVol2x: + case xmpVCmdVol3x: + if ((proccmd != xmpCmdDelayNote) || !procdat) + ch->chFinalVol = ch->chVol = procvol - 0x10; + break; + case xmpVCmdVol40: + if ((proccmd != xmpCmdDelayNote) || !procdat) + ch->chFinalVol = ch->chVol = 0x40; + break; + case xmpVCmdVolSlideD: + case xmpVCmdVolSlideU: + case xmpVCmdPanSlideL: + case xmpVCmdPanSlideR: + ch->chVVolPanSlideVal = procvol & 0xF; + break; + case xmpVCmdFVolSlideD: + if ((proccmd != xmpCmdDelayNote) || !procdat) + ch->chFinalVol = ch->chVol = volrange(ch->chVol - (procvol & 0xF)); + break; + case xmpVCmdFVolSlideU: + if ((proccmd != xmpCmdDelayNote) || !procdat) + ch->chFinalVol = ch->chVol = volrange(ch->chVol + (procvol & 0xF)); + break; + case xmpVCmdVibRate: + if (procvol & 0xF) + ch->chVibRate = ((procvol & 0xF) << 2); + break; + case xmpVCmdVibDep: + if (procvol & 0xF) + ch->chVibDep = ((procvol & 0xF) << (1 + (!linearfreq && !ismod))); + break; + case xmpVCmdPanning: + if ((proccmd != xmpCmdDelayNote) || !procdat) + ch->chFinalPan = ch->chPan = (procvol & 0xF) * 0x11; + break; + case xmpVCmdPortaNote: + if (procvol & 0xF) + ch->chPortaToVal = (procvol & 0xF) << 8; + break; + } + + ch->chCommand = proccmd; + + switch (ch->chCommand) { + case xmpCmdArpeggio: + if (!procdat) + ch->chCommand = 0xFF; + ch->chArpOffsets[0] = 0; + ch->chArpOffsets[1] = procdat >> 4; + ch->chArpOffsets[2] = procdat & 0xF; + break; + case xmpCmdPortaU: + if (procdat) + ch->chPortaUVal = procdat << 4; + break; + case xmpCmdPortaD: + if (procdat) + ch->chPortaDVal = procdat << 4; + break; + case xmpCmdPortaNote: + if (procdat) + ch->chPortaToVal = procdat << 4; + break; + case xmpCmdVibrato: + if (procdat & 0xF) + ch->chVibDep = (procdat & 0xF) << (1 + (!linearfreq && !ismod)); + if (procdat & 0xF0) + ch->chVibRate = (procdat >> 4) << 2; + break; + case xmpCmdPortaVol: + case xmpCmdVibVol: + case xmpCmdVolSlide: + if (procdat || ismod) + ch->chVolSlideVal = procdat; + break; + case xmpCmdTremolo: + if (procdat & 0xF) + ch->chTremDep = (procdat & 0xF) << 2; + if (procdat & 0xF0) + ch->chTremRate = (procdat >> 4) << 2; + break; + case xmpCmdPanning: + ch->chFinalPan = ch->chPan = procdat; + break; + case xmpCmdSetFCutoff: + ch->chCutoff = procdat; + break; + case xmpCmdSetFReso: + ch->chReso = procdat; + break; + case xmpCmdSetFHFCutoff: + // mcpSet(0,mcpMasterFHFCutoff,procdat); + break; + case xmpCmdSetFHFReso: + // mcpSet(0,mcpMasterFHFReso,procdat); + break; + + case xmpCmdJump: + if (!patdelay) { + jumptoord = procdat; + jumptorow = 0; + if (jumptoord <= curord) + player_will_loop = TRUE; + } + break; + case xmpCmdVolume: + ch->chFinalVol = ch->chVol = volrange(procdat); + break; + case xmpCmdBreak: + if (!patdelay) { + if (jumptoord == -1) + jumptoord = curord + 1; + jumptorow = (procdat & 0xF) + (procdat >> 4) * 10; + } + break; + case xmpCmdSpeed: + if (!procdat) { + jumptoord = procdat; + jumptorow = 0; + player_will_loop = TRUE; + break; + } + if (procdat >= 0x20) { + player_bpm = procdat; + } else { + player_tempo = procdat; + } + break; + case xmpCmdMODtTempo: + if (!procdat) { + jumptoord = procdat; + jumptorow = 0; + } else { + player_tempo = procdat; + } + break; + case xmpCmdGVolume: + globalvol = volrange(procdat); + break; + case xmpCmdGVolSlide: + if (procdat) + ch->chGVolSlideVal = procdat; + break; + case xmpCmdKeyOff: + ch->chActionTick = procdat; + break; + case xmpCmdRetrigger: + ch->chActionTick = procdat; + break; + case xmpCmdNoteCut: + ch->chActionTick = procdat; + break; + case xmpCmdEnvPos: + ch->chVolEnvPos = ch->chPanEnvPos = procdat; + if (!ch->curins) + break; + if (ch->curins->vol_env.flags & EF_ON) + if (ch->chVolEnvPos > env_length(&ch->curins->vol_env)) + ch->chVolEnvPos = env_length(&ch->curins->vol_env); + if (ch->curins->pan_env.flags & EF_ON) + if (ch->chPanEnvPos > env_length(&ch->curins->pan_env)) + ch->chPanEnvPos = env_length(&ch->curins->pan_env); + break; + case xmpCmdPanSlide: + if (procdat) + ch->chPanSlideVal = procdat; + break; + case xmpCmdMRetrigger: + if (procdat) { + ch->chActionTick = procdat & 0xF; + ch->chMRetrigAct = procdat >> 4; + } + break; + case xmpCmdTremor: + if (procdat) { + ch->chTremorLen = (procdat & 0xF) + (procdat >> 4) + 2; + ch->chTremorOff = (procdat >> 4) + 1; + ch->chTremorPos = 0; + } + break; + case xmpCmdXPorta: + if ((procdat >> 4) == 1) { + if (procdat & 0xF) + ch->chXFinePortaUVal = procdat & 0xF; + ch->chFinalPitch = ch->chPitch = freqrange(ch->chPitch - (ch->chXFinePortaUVal << 2)); + } else if ((procdat >> 4) == 2) { + if (procdat & 0xF) + ch->chXFinePortaDVal = procdat & 0xF; + ch->chFinalPitch = ch->chPitch = freqrange(ch->chPitch + (ch->chXFinePortaDVal << 2)); + } + break; + case xmpCmdFPortaU: + if (procdat || ismod) + ch->chFinePortaUVal = procdat; + ch->chFinalPitch = ch->chPitch = freqrange(ch->chPitch - (ch->chFinePortaUVal << 4)); + break; + case xmpCmdFPortaD: + if (procdat || ismod) + ch->chFinePortaDVal = procdat; + ch->chFinalPitch = ch->chPitch = freqrange(ch->chPitch + (ch->chFinePortaDVal << 4)); + break; + case xmpCmdGlissando: + ch->chGlissando = procdat; + break; + case xmpCmdVibType: + ch->chVibType = procdat; + break; + case xmpCmdPatLoop: + if (!procdat) + ch->chPatLoopStart = currow; + else { + ch->chPatLoopCount++; + if (ch->chPatLoopCount <= procdat) { + jumptorow = ch->chPatLoopStart; + jumptoord = curord; + } else { + ch->chPatLoopCount = 0; + ch->chPatLoopStart = currow + 1; + } + } + break; + case xmpCmdTremType: + ch->chTremType = procdat; + break; + case xmpCmdSPanning: + ch->chFinalPan = ch->chPan = procdat * 0x11; + break; + case xmpCmdFVolSlideU: + if (procdat || ismod) + ch->chFineVolSlideUVal = procdat; + ch->chFinalVol = ch->chVol = volrange(ch->chVol + ch->chFineVolSlideUVal); + break; + case xmpCmdFVolSlideD: + if (procdat || ismod) + ch->chFineVolSlideDVal = procdat; + ch->chFinalVol = ch->chVol = volrange(ch->chVol - ch->chFineVolSlideDVal); + break; + case xmpCmdPatDelay: + if (!patdelay) + patdelay = procdat + 1; + break; + case xmpCmdDelayNote: + if (procnot) + ch->chDelayNote = procnot; + else + ch->chDelayNote = ch->curnote; + if (procins) + ch->chDelayIns = procins; + else + ch->chDelayIns = ch->chCurIns; + ch->chDelayVol = procvol; + ch->chActionTick = procdat; + break; + } + } + } + if (!curtick && patdelay) { + patdelay--; + } + + for (i = fromch; i < toch; i++) { + channel* ch = &channels[i]; + + switch (ch->chVCommand) { + case xmpVCmdVolSlideD: + if (tick0) + break; + ch->chFinalVol = ch->chVol = volrange(ch->chVol - ch->chVVolPanSlideVal); + break; + case xmpVCmdVolSlideU: + if (tick0) + break; + ch->chFinalVol = ch->chVol = volrange(ch->chVol + ch->chVVolPanSlideVal); + break; + case xmpVCmdVibDep: // KB says "FICKEN" :) + switch (ch->chVibType) { + case 0: + ch->chFinalPitch = freqrange((16 * sin(2 * M_PI * (double)ch->chVibPos / 256) * (double)ch->chVibDep) + (double)ch->chPitch); + break; + case 1: + ch->chFinalPitch = freqrange((((ch->chVibPos - 0x80) * ch->chVibDep) >> 3) + ch->chPitch); + break; + case 2: + ch->chFinalPitch = freqrange(((((ch->chVibPos & 0x80) - 0x40) * ch->chVibDep) >> 2) + ch->chPitch); + break; + } + if (!tick0) + ch->chVibPos += ch->chVibRate; + break; + case xmpVCmdPanSlideL: + if (tick0) + break; + ch->chFinalPan = ch->chPan = panrange(ch->chPan - ch->chVVolPanSlideVal); + break; + case xmpVCmdPanSlideR: + if (tick0) + break; + ch->chFinalPan = ch->chPan = panrange(ch->chPan + ch->chVVolPanSlideVal); + break; + case xmpVCmdPortaNote: + if (!tick0) { + if (ch->chPitch < ch->chPortaToPitch) { + ch->chPitch += ch->chPortaToVal; + if (ch->chPitch > ch->chPortaToPitch) + ch->chPitch = ch->chPortaToPitch; } else { - player_tempo = procdat; + ch->chPitch -= ch->chPortaToVal; + if (ch->chPitch < ch->chPortaToPitch) + ch->chPitch = ch->chPortaToPitch; } - break; - case xmpCmdMODtTempo: - if (!procdat) { - jumptoord=procdat; - jumptorow=0; - } else { - player_tempo = procdat; - } - break; - case xmpCmdGVolume: - globalvol=volrange(procdat); - break; - case xmpCmdGVolSlide: - if (procdat) - ch->chGVolSlideVal=procdat; - break; - case xmpCmdKeyOff: - ch->chActionTick=procdat; - break; - case xmpCmdRetrigger: - ch->chActionTick=procdat; - break; - case xmpCmdNoteCut: - ch->chActionTick=procdat; - break; - case xmpCmdEnvPos: - ch->chVolEnvPos=ch->chPanEnvPos=procdat; - if(!ch->curins) - break; - if (ch->curins->vol_env.flags & EF_ON) - if (ch->chVolEnvPos > env_length(&ch->curins->vol_env)) - ch->chVolEnvPos = env_length(&ch->curins->vol_env); - if (ch->curins->pan_env.flags & EF_ON) - if (ch->chPanEnvPos > env_length(&ch->curins->pan_env)) - ch->chPanEnvPos = env_length(&ch->curins->pan_env); - break; - case xmpCmdPanSlide: - if (procdat) - ch->chPanSlideVal=procdat; - break; - case xmpCmdMRetrigger: - if (procdat) { - ch->chMRetrigLen=procdat&0xF; - ch->chMRetrigAct=procdat>>4; - } - break; - case xmpCmdTremor: - if (procdat) { - ch->chTremorLen=(procdat&0xF)+(procdat>>4)+2; - ch->chTremorOff=(procdat>>4)+1; - ch->chTremorPos=0; - } - break; - case xmpCmdXPorta: - if ((procdat>>4)==1) { - if (procdat&0xF) - ch->chXFinePortaUVal=procdat&0xF; - ch->chFinalPitch=ch->chPitch=freqrange(ch->chPitch-(ch->chXFinePortaUVal<<2)); - } else if ((procdat>>4)==2) { - if (procdat&0xF) - ch->chXFinePortaDVal=procdat&0xF; - ch->chFinalPitch=ch->chPitch=freqrange(ch->chPitch+(ch->chXFinePortaDVal<<2)); - } - break; - case xmpCmdFPortaU: - if (procdat || ismod) - ch->chFinePortaUVal=procdat; - ch->chFinalPitch=ch->chPitch=freqrange(ch->chPitch-(ch->chFinePortaUVal<<4)); - break; - case xmpCmdFPortaD: - if (procdat || ismod) - ch->chFinePortaDVal=procdat; - ch->chFinalPitch=ch->chPitch=freqrange(ch->chPitch+(ch->chFinePortaDVal<<4)); - break; - case xmpCmdGlissando: - ch->chGlissando=procdat; - break; - case xmpCmdVibType: - ch->chVibType=procdat&3; - break; - case xmpCmdPatLoop: - if (!procdat) - ch->chPatLoopStart=currow; - else { - ch->chPatLoopCount++; - if (ch->chPatLoopCount<=procdat) { - jumptorow=ch->chPatLoopStart; - jumptoord=curord; - } else { - ch->chPatLoopCount=0; - ch->chPatLoopStart=currow+1; - } - } - break; - case xmpCmdTremType: - ch->chTremType=procdat&3; - break; - case xmpCmdSPanning: - ch->chFinalPan=ch->chPan=procdat*0x11; - break; - case xmpCmdFVolSlideU: - if (procdat || ismod) - ch->chFineVolSlideUVal=procdat; - ch->chFinalVol=ch->chVol=volrange(ch->chVol+ch->chFineVolSlideUVal); - break; - case xmpCmdFVolSlideD: - if (procdat || ismod) - ch->chFineVolSlideDVal=procdat; - ch->chFinalVol=ch->chVol=volrange(ch->chVol-ch->chFineVolSlideDVal); - break; - case xmpCmdPatDelay: - if (!patdelay) - patdelay=procdat+1; - break; - case xmpCmdDelayNote: - if (procnot) - ch->chDelayNote=procnot; - ch->chDelayIns=procins; - ch->chDelayVol=procvol; - ch->chActionTick=procdat; - break; - } - } - } - if (!curtick&&patdelay) { - patdelay--; - } - - for (i=0; ichVCommand) { - case xmpVCmdVolSlideD: - if (tick0) - break; - ch->chFinalVol=ch->chVol=volrange(ch->chVol-ch->chVVolPanSlideVal); - break; - case xmpVCmdVolSlideU: - if (tick0) - break; - ch->chFinalVol=ch->chVol=volrange(ch->chVol+ch->chVVolPanSlideVal); - break; - case xmpVCmdVibDep: // KB says "FICKEN" :) - switch (ch->chVibType) { - case 0: - ch->chFinalPitch = freqrange(( 16 * sin(2 * M_PI * (double)ch->chVibPos / 256) * (double)ch->chVibDep) + (double)ch->chPitch); - break; - case 1: - ch->chFinalPitch=freqrange((( (ch->chVibPos-0x80) *ch->chVibDep)>>3)+ch->chPitch); - break; - case 2: - ch->chFinalPitch=freqrange((( ((ch->chVibPos&0x80)-0x40) *ch->chVibDep)>>2)+ch->chPitch); - break; - } - if (!tick0) - ch->chVibPos+=ch->chVibRate; - break; - case xmpVCmdPanSlideL: - if (tick0) - break; - ch->chFinalPan=ch->chPan=panrange(ch->chPan-ch->chVVolPanSlideVal); - break; - case xmpVCmdPanSlideR: - if (tick0) - break; - ch->chFinalPan=ch->chPan=panrange(ch->chPan+ch->chVVolPanSlideVal); - break; - case xmpVCmdPortaNote: - if (!tick0) { - if (ch->chPitchchPortaToPitch) { - ch->chPitch+=ch->chPortaToVal; - if (ch->chPitch>ch->chPortaToPitch) - ch->chPitch=ch->chPortaToPitch; - } else { - ch->chPitch-=ch->chPortaToVal; - if (ch->chPitchchPortaToPitch) - ch->chPitch=ch->chPortaToPitch; - } - } - ch->chFinalPitch = xm_player_handle_glissando(ch); - break; - } - - switch (ch->chCommand) { - case xmpCmdArpeggio: - if(ismod) { - ch->chFinalPitch = freqrange((ch->chPitch * notetab[ch->chArpOffsets[curtick % 3]]) >> 15); - } else { - if (linearfreq) - ch->chFinalPitch=freqrange(ch->chPitch-(ch->chArpOffsets[ch->chArpPos]<<8)); - else - ch->chFinalPitch=freqrange((ch->chPitch*notetab[ch->chArpOffsets[ch->chArpPos]])>>15); - /* not sure if this is correct, even for XM's. One should think + } + ch->chFinalPitch = xm_player_handle_glissando(ch); + break; + } + + switch (ch->chCommand) { + case xmpCmdArpeggio: + if (ismod) { + ch->chFinalPitch = freqrange((ch->chPitch * notetab[ch->chArpOffsets[curtick % 3]]) >> 15); + } else { + if (linearfreq) + ch->chFinalPitch = freqrange(ch->chPitch - (ch->chArpOffsets[ch->chArpPos] << 8)); + else + ch->chFinalPitch = freqrange((ch->chPitch * notetab[ch->chArpOffsets[ch->chArpPos]]) >> 15); + /* not sure if this is correct, even for XM's. One should think ArpPos is equivalent to the tick counter (-mkrause). */ - ch->chArpPos++; - if (ch->chArpPos==3) - ch->chArpPos=0; - } - break; - case xmpCmdPortaU: - if (tick0) - break; - ch->chFinalPitch=ch->chPitch=freqrange(ch->chPitch-ch->chPortaUVal); - break; - case xmpCmdPortaD: - if (tick0) - break; - ch->chFinalPitch=ch->chPitch=freqrange(ch->chPitch+ch->chPortaDVal); - break; - case xmpCmdPortaNote: - if (!tick0) { - if (ch->chPitchchPortaToPitch) { - ch->chPitch+=ch->chPortaToVal; - if (ch->chPitch>ch->chPortaToPitch) - ch->chPitch=ch->chPortaToPitch; - } else { - ch->chPitch-=ch->chPortaToVal; - if (ch->chPitchchPortaToPitch) - ch->chPitch=ch->chPortaToPitch; - } - } - ch->chFinalPitch = xm_player_handle_glissando(ch); - break; - case xmpCmdVibrato: - switch (ch->chVibType) { - case 0: - ch->chFinalPitch=freqrange(8 * sin(2 * M_PI * (double)ch->chVibPos / 256) * (double)ch->chVibDep + (double)ch->chPitch); - break; - case 1: - ch->chFinalPitch=freqrange((( (ch->chVibPos-0x80) *ch->chVibDep)>>4)+ch->chPitch); - break; - case 2: - ch->chFinalPitch=freqrange((( ((ch->chVibPos&0x80)-0x40) *ch->chVibDep)>>3)+ch->chPitch); - break; - } - if (!tick0) - ch->chVibPos+=ch->chVibRate; - break; - case xmpCmdPortaVol: - if (!tick0) { - if (ch->chPitchchPortaToPitch) { - ch->chPitch+=ch->chPortaToVal; - if (ch->chPitch>ch->chPortaToPitch) - ch->chPitch=ch->chPortaToPitch; - } else { - ch->chPitch-=ch->chPortaToVal; - if (ch->chPitchchPortaToPitch) - ch->chPitch=ch->chPortaToPitch; - } - } - ch->chFinalPitch = xm_player_handle_glissando(ch); - if (tick0) - break; - ch->chFinalVol=ch->chVol=volrange(ch->chVol+((ch->chVolSlideVal&0xF0)?(ch->chVolSlideVal>>4):-(ch->chVolSlideVal&0xF))); - break; - case xmpCmdVibVol: - switch (ch->chVibType) { - case 0: - ch->chFinalPitch=freqrange(8 * sin(2 * M_PI * (double)ch->chVibPos / 256) * (double)ch->chVibDep + (double)ch->chPitch); - break; - case 1: - ch->chFinalPitch=freqrange((( (ch->chVibPos-0x80) *ch->chVibDep)>>4)+ch->chPitch); - break; - case 2: - ch->chFinalPitch=freqrange((( ((ch->chVibPos&0x80)-0x40) *ch->chVibDep)>>3)+ch->chPitch); - break; - } - if (!tick0) - ch->chVibPos+=ch->chVibRate; - - if (tick0) - break; - ch->chFinalVol=ch->chVol=volrange(ch->chVol+((ch->chVolSlideVal&0xF0)?(ch->chVolSlideVal>>4):-(ch->chVolSlideVal&0xF))); - break; - case xmpCmdTremolo: - switch (ch->chTremType) { - case 0: - ch->chFinalVol += sin(2 * M_PI * (double)ch->chTremPos / 256) * (double)ch->chTremDep; - break; - case 1: - ch->chFinalVol+=(( (ch->chTremPos-0x80) *ch->chTremDep)>>7); - break; - case 2: - ch->chFinalVol+=(( ((ch->chTremPos&0x80)-0x40) *ch->chTremDep)>>6); - break; - } - ch->chFinalVol=volrange(ch->chFinalVol); - if (!tick0) - ch->chTremPos+=ch->chTremRate; - break; - case xmpCmdVolSlide: - if (tick0) - break; - ch->chFinalVol=ch->chVol=volrange(ch->chVol+((ch->chVolSlideVal&0xF0)?(ch->chVolSlideVal>>4):-(ch->chVolSlideVal&0xF))); - break; - case xmpCmdGVolSlide: - if (tick0) - break; - if (ch->chGVolSlideVal&0xF0) - globalvol=volrange(globalvol+(ch->chGVolSlideVal>>4)); - else - globalvol=volrange(globalvol-(ch->chGVolSlideVal&0xF)); - break; - case xmpCmdKeyOff: - if (tick0) - break; - if (curtick==ch->chActionTick) { - ch->chSustain=0; - if (ch->cursamp && !(ch->curins->vol_env.flags & EF_ON)) - ch->chFadeVol=0; - } - break; - case xmpCmdPanSlide: - if (tick0) - break; - ch->chFinalPan=ch->chPan=panrange(ch->chPan+((ch->chPanSlideVal&0xF0)?(ch->chPanSlideVal>>4):-(ch->chPanSlideVal&0xF))); - break; - case xmpCmdMRetrigger: - if (ch->chMRetrigPos++!=ch->chMRetrigLen) - break; - ch->chMRetrigPos=0; - ch->nextpos=0; - ch->sampleplayend=-1; - - switch (ch->chMRetrigAct) { - case 0: case 8: break; - case 1: case 2: case 3: case 4: case 5: - ch->chVol=ch->chVol-(1<<(ch->chMRetrigAct-1)); - break; - case 9: case 10: case 11: case 12: case 13: - ch->chVol=ch->chVol+(1<<(ch->chMRetrigAct-9)); - break; - case 6: ch->chVol=(ch->chVol*5)>>3; break; - case 14: ch->chVol=(ch->chVol*3)>>1; break; - case 7: ch->chVol>>=1; break; - case 15: ch->chVol<<=1; break; - } - ch->chFinalVol=ch->chVol=volrange(ch->chVol); - break; - case xmpCmdTremor: - if (ch->chTremorPos>=ch->chTremorOff) - ch->chFinalVol=0; - if (tick0) - break; - ch->chTremorPos++; - if (ch->chTremorPos==ch->chTremorLen) - ch->chTremorPos=0; - break; - case xmpCmdRetrigger: - if (!ch->chActionTick) - break; - if (!(curtick%ch->chActionTick)) { - ch->nextpos=0; - ch->sampleplayend=-1; - } - break; - case xmpCmdNoteCut: - if (tick0) - break; - if (curtick==ch->chActionTick) - ch->chFinalVol=ch->chVol=0; - break; - case xmpCmdDelayNote: - if (tick0) - break; - if (curtick!=ch->chActionTick) - break; - procnot=ch->chDelayNote; - procins=ch->chDelayIns; - proccmd=0; - procdat=0; - procvol=0; - PlayNote(i); - switch (ch->chDelayVol>>4) { - case xmpVCmdVol0x: case xmpVCmdVol1x: case xmpVCmdVol2x: case xmpVCmdVol3x: - ch->chFinalVol=ch->chVol=ch->chDelayVol-0x10; - break; - case xmpVCmdVol40: - ch->chFinalVol=ch->chVol=0x40; - break; - case xmpVCmdPanning: - ch->chFinalPan=ch->chPan=(ch->chDelayVol&0xF)*0x11; - break; - } - break; - } - - if (!ch->cursamp) { - driver_stopnote(i); - } else { - xmplayer_final_channel_ops(i); - } + ch->chArpPos++; + if (ch->chArpPos == 3) + ch->chArpPos = 0; + } + break; + case xmpCmdPortaU: + if (tick0) + break; + ch->chFinalPitch = ch->chPitch = freqrange(ch->chPitch - ch->chPortaUVal); + break; + case xmpCmdPortaD: + if (tick0) + break; + ch->chFinalPitch = ch->chPitch = freqrange(ch->chPitch + ch->chPortaDVal); + break; + case xmpCmdPortaNote: + if (!tick0) { + if (ch->chPitch < ch->chPortaToPitch) { + ch->chPitch += ch->chPortaToVal; + if (ch->chPitch > ch->chPortaToPitch) + ch->chPitch = ch->chPortaToPitch; + } else { + ch->chPitch -= ch->chPortaToVal; + if (ch->chPitch < ch->chPortaToPitch) + ch->chPitch = ch->chPortaToPitch; + } + } + ch->chFinalPitch = xm_player_handle_glissando(ch); + break; + case xmpCmdVibrato: + switch (ch->chVibType) { + case 0: + ch->chFinalPitch = freqrange(8 * sin(2 * M_PI * (double)ch->chVibPos / 256) * (double)ch->chVibDep + (double)ch->chPitch); + break; + case 1: + ch->chFinalPitch = freqrange((((ch->chVibPos - 0x80) * ch->chVibDep) >> 4) + ch->chPitch); + break; + case 2: + ch->chFinalPitch = freqrange(((((ch->chVibPos & 0x80) - 0x40) * ch->chVibDep) >> 3) + ch->chPitch); + break; + } + if (!tick0) + ch->chVibPos += ch->chVibRate; + break; + case xmpCmdPortaVol: + if (!tick0) { + if (ch->chPitch < ch->chPortaToPitch) { + ch->chPitch += ch->chPortaToVal; + if (ch->chPitch > ch->chPortaToPitch) + ch->chPitch = ch->chPortaToPitch; + } else { + ch->chPitch -= ch->chPortaToVal; + if (ch->chPitch < ch->chPortaToPitch) + ch->chPitch = ch->chPortaToPitch; + } + } + ch->chFinalPitch = xm_player_handle_glissando(ch); + if (tick0) + break; + ch->chFinalVol = ch->chVol = volrange(ch->chVol + ((ch->chVolSlideVal & 0xF0) ? (ch->chVolSlideVal >> 4) : -(ch->chVolSlideVal & 0xF))); + break; + case xmpCmdVibVol: + switch (ch->chVibType & 3) { + case 0: + ch->chFinalPitch = freqrange(8 * sin(2 * M_PI * (double)ch->chVibPos / 256) * (double)ch->chVibDep + (double)ch->chPitch); + break; + case 1: + ch->chFinalPitch = freqrange((((ch->chVibPos - 0x80) * ch->chVibDep) >> 4) + ch->chPitch); + break; + case 2: + ch->chFinalPitch = freqrange(((((ch->chVibPos & 0x80) - 0x40) * ch->chVibDep) >> 3) + ch->chPitch); + break; + } + if (!tick0) + ch->chVibPos += ch->chVibRate; + + if (tick0) + break; + ch->chFinalVol = ch->chVol = volrange(ch->chVol + ((ch->chVolSlideVal & 0xF0) ? (ch->chVolSlideVal >> 4) : -(ch->chVolSlideVal & 0xF))); + break; + case xmpCmdTremolo: + switch (ch->chTremType & 3) { + case 0: + ch->chFinalVol += sin(2 * M_PI * (double)ch->chTremPos / 256) * (double)ch->chTremDep; + break; + case 1: + ch->chFinalVol += (((ch->chTremPos - 0x80) * ch->chTremDep) >> 7); + break; + case 2: + ch->chFinalVol += ((((ch->chTremPos & 0x80) - 0x40) * ch->chTremDep) >> 6); + break; + } + ch->chFinalVol = volrange(ch->chFinalVol); + if (!tick0) + ch->chTremPos += ch->chTremRate; + break; + case xmpCmdVolSlide: + if (tick0) + break; + ch->chFinalVol = ch->chVol = volrange(ch->chVol + ((ch->chVolSlideVal & 0xF0) ? (ch->chVolSlideVal >> 4) : -(ch->chVolSlideVal & 0xF))); + break; + case xmpCmdGVolSlide: + if (tick0) + break; + if (ch->chGVolSlideVal & 0xF0) + globalvol = volrange(globalvol + (ch->chGVolSlideVal >> 4)); + else + globalvol = volrange(globalvol - (ch->chGVolSlideVal & 0xF)); + break; + case xmpCmdKeyOff: + if (tick0) + break; + if (curtick == ch->chActionTick) { + ch->chSustain = 0; + if (ch->cursamp && !(ch->curins->vol_env.flags & EF_ON)) + ch->chFadeVol = 0; + } + break; + case xmpCmdPanSlide: + if (tick0) + break; + ch->chFinalPan = ch->chPan = panrange(ch->chPan + ((ch->chPanSlideVal & 0xF0) ? (ch->chPanSlideVal >> 4) : -(ch->chPanSlideVal & 0xF))); + break; + case xmpCmdMRetrigger: + if (tick0) + break; + if (!ch->chActionTick) + break; + if (!((curtick + (gui_settings.rxx_bug_emu ? 1 : 0)) % ch->chActionTick)) { + /* Retrig envelops and so on... */ + if (!(ch->chVibType & 4)) + ch->chVibPos = 0; + if (!(ch->chTremType & 4)) + ch->chTremPos = 0; + ch->chArpPos = 0; + ch->chTremorPos = 0; + ch->chAVibPos = 0; + ch->chAVibSwpPos = 0; + ch->chVolEnvPos = 0; + ch->chPanEnvPos = 0; + + ch->nextstop = 1; + ch->nextsamp = ch->cursamp; /* To initiate note retrigging */ + } + + switch (ch->chMRetrigAct) { + case 0: + case 8: + break; + case 1: + case 2: + case 3: + case 4: + case 5: + ch->chVol = ch->chVol - (1 << (ch->chMRetrigAct - 1)); + break; + case 9: + case 10: + case 11: + case 12: + case 13: + ch->chVol = ch->chVol + (1 << (ch->chMRetrigAct - 9)); + break; + case 6: + ch->chVol = (ch->chVol * 5) >> 3; + break; + case 14: + ch->chVol = (ch->chVol * 3) >> 1; + break; + case 7: + ch->chVol >>= 1; + break; + case 15: + ch->chVol <<= 1; + break; + } + ch->chFinalVol = ch->chVol = volrange(ch->chVol); + break; + case xmpCmdTremor: + if (ch->chTremorPos >= ch->chTremorOff) + ch->chFinalVol = 0; + if (tick0) + break; + ch->chTremorPos++; + if (ch->chTremorPos == ch->chTremorLen) + ch->chTremorPos = 0; + break; + case xmpCmdRetrigger: + if (tick0) + break; + if (!ch->chActionTick) + break; + if (!(curtick % ch->chActionTick)) { + /* Retrig envelops and so on... */ + if (!(ch->chVibType & 4)) + ch->chVibPos = 0; + if (!(ch->chTremType & 4)) + ch->chTremPos = 0; + ch->chArpPos = 0; + ch->chTremorPos = 0; + ch->chAVibPos = 0; + ch->chAVibSwpPos = 0; + ch->chVolEnvPos = 0; + ch->chPanEnvPos = 0; + + ch->nextstop = 1; + ch->nextsamp = ch->cursamp; /* To initiate note retrigging */ + } + break; + case xmpCmdNoteCut: + if (curtick == ch->chActionTick) + ch->chFinalVol = ch->chVol = 0; + break; + case xmpCmdDelayNote: + if (tick0) + break; + if (curtick != ch->chActionTick) + break; + procnot = ch->chDelayNote; + procins = ch->chDelayIns; + proccmd = 0; + procdat = 0; + procvol = 0; + PlayNote(i); + switch (ch->chDelayVol >> 4) { + case xmpVCmdVol0x: + case xmpVCmdVol1x: + case xmpVCmdVol2x: + case xmpVCmdVol3x: + ch->chFinalVol = ch->chVol = ch->chDelayVol - 0x10; + break; + case xmpVCmdVol40: + ch->chFinalVol = ch->chVol = 0x40; + break; + case xmpVCmdPanning: + ch->chFinalPan = ch->chPan = (ch->chDelayVol & 0xF) * 0x11; + break; + } + break; + } + + if (!ch->cursamp) { + driver_stopnote(i); + } else { + xmplayer_final_channel_ops(i); + } } } -void -xmplayer_init_module (void) +void xmplayer_init_module(void) { g_assert(xm != NULL); @@ -1433,55 +2032,53 @@ } static gboolean -xmplayer_init_playing (gboolean init_all) +xmplayer_init_playing(gboolean init_all, gboolean all) { int i; - driver_setnumch(xm->num_channels); + nchan = all ? 32 : xm->num_channels; + driver_setnumch(nchan); current_time = 0.0; ninst = 128; nord = xm->song_length; - nsamp = 16; + nsamp = 128; ismod = xm->flags & XM_FLAGS_IS_MOD; linearfreq = !(xm->flags & XM_FLAGS_AMIGA_FREQ); - nchan = xm->num_channels; loopord = xm->restart_position; - curtick = player_tempo-1; + curtick = player_tempo - 1; patdelay = 0; - if(init_all) { - globalvol = 0x40; - realgvol = 0x40; - - memset(channels, 0, sizeof(channels)); - - for(i = 0; i < nchan; i++) { - channels[i].chCutoff = 0xff; - channels[i].chReso = 0; - } + if (init_all) { + globalvol = 0x40; + realgvol = 0x40; + + memset(channels, 0, sizeof(channels)); + + for (i = 0; i < nchan; i++) { + channels[i].chCutoff = 0xff; + channels[i].chReso = 0; + } } return TRUE; } -void -xmplayer_set_tempo (int tempo) +void xmplayer_set_tempo(int tempo) { player_tempo = tempo; } -void -xmplayer_set_bpm (int bpm) +void xmplayer_set_bpm(int bpm) { player_bpm = bpm; } gboolean -xmplayer_init_play_song (int songpos, - int patpos, - gboolean init_all) +xmplayer_init_play_song(int songpos, + int patpos, + gboolean init_all) { jumptorow = patpos; currow = patpos; @@ -1492,44 +2089,52 @@ player_looped = FALSE; xmplayer_playmode = PLAYING_SONG; - if(songpos == 0 && init_all) - xmplayer_init_module(); + if (songpos == 0 && init_all) + xmplayer_init_module(); - return xmplayer_init_playing(init_all); + return xmplayer_init_playing(init_all, FALSE); } gboolean -xmplayer_init_play_pattern (int pattern, - int patpos, - int only1row) +xmplayer_init_play_pattern(int pattern, + int patpos, + int only1row, + int stoppos, + int startch, + int numch) { jumptorow = patpos; - currow = patpos; + stoprow = stoppos; + currow = startrow = patpos; + ch_start = startch; + ch_num = numch; play_only_row = only1row ? patpos : -1; jumptoord = 0; curord = 0; patlen = xm->patterns[pattern].length; - curpattern = &xm->patterns[pattern]; + curpattern = &xm->patterns[player_patno = pattern]; + player_will_loop = FALSE; + player_looped = FALSE; xmplayer_playmode = PLAYING_PATTERN; - return xmplayer_init_playing(TRUE); + return xmplayer_init_playing(TRUE, FALSE); } -void -xmplayer_stop (void) +void xmplayer_stop(void) { xmplayer_playmode = 0; } gboolean -xmplayer_play_note (int channel, - int note, - int instrument) -{ - if(!xmplayer_playmode) { - xmplayer_playmode = PLAYING_NOTE; - if(!xmplayer_init_playing(TRUE)) - return FALSE; +xmplayer_play_note(int channel, + int note, + int instrument, + gboolean all) +{ + if (!xmplayer_playmode) { + xmplayer_playmode = PLAYING_NOTE; + if (!xmplayer_init_playing(TRUE, all)) + return FALSE; } /* start note here */ @@ -1555,19 +2160,21 @@ } gboolean -xmplayer_play_note_full (int chnr, - int note, - STSample *sample, - guint32 offset, - guint32 count) +xmplayer_play_note_full(int chnr, + int note, + STSample* sample, + guint32 offset, + guint32 count, + gboolean all) { gint32 nn; - channel *ch = &channels[chnr]; + channel* ch = &channels[chnr]; - if(!xmplayer_playmode) { - xmplayer_playmode = PLAYING_NOTE; - if(!xmplayer_init_playing(TRUE)) - return FALSE; + if (!xmplayer_playmode) { + xmplayer_playmode = PLAYING_NOTE; + /* In sample editor the polyphony is not needed to try a sample */ + if (!xmplayer_init_playing(TRUE, all)) + return FALSE; } memset(&channels[chnr], 0, sizeof(channels[chnr])); @@ -1588,29 +2195,27 @@ ch->nextsamp = ch->cursamp; /* CurNormNote is only relevant in FastTracker mode */ - nn = -ch->cursamp->relnote*256 - ch->cursamp->finetune*2; + nn = -ch->cursamp->relnote * 256 - ch->cursamp->finetune * 2; ch->chCurNormNote = nn; - + ch->chPitch = ch->chFinalPitch = ch->chPortaToPitch = xm_player_get_note_pitch(ch); - - ch->chVibPos=0; - ch->chTremPos=0; - ch->chArpPos=0; - ch->chMRetrigPos=0; - ch->chTremorPos=0; + + ch->chVibPos = 0; + ch->chTremPos = 0; + ch->chArpPos = 0; + ch->chTremorPos = 0; ch->chSustain = 1; - ch->chVol=ch->chDefVol; - ch->chFinalVol=ch->chDefVol; - if (ch->chDefPan!=-1) - { - ch->chPan=ch->chDefPan; - ch->chFinalPan=ch->chDefPan; - } - ch->chFadeVol=0x8000; - ch->chAVibPos=0; - ch->chAVibSwpPos=0; - ch->chVolEnvPos=0; - ch->chPanEnvPos=0; + ch->chVol = ch->chDefVol; + ch->chFinalVol = ch->chDefVol; + if (ch->chDefPan != -1) { + ch->chPan = ch->chDefPan; + ch->chFinalPan = ch->chDefPan; + } + ch->chFadeVol = 0x8000; + ch->chAVibPos = 0; + ch->chAVibSwpPos = 0; + ch->chVolEnvPos = 0; + ch->chPanEnvPos = 0; ch->chCutoff = 0xff; ch->chReso = 0; @@ -1624,26 +2229,30 @@ return TRUE; } -void -xmplayer_play_note_keyoff (int channel) +void xmplayer_play_note_keyoff(int channel) { channels[channel].chSustain = 0; } +void xmplayer_stop_note(int channel) +{ + driver_stopnote(channel); +} + double -xmplayer_play (void) +xmplayer_play(void) { + g_assert(xmplayer_playmode != 0); + xmpPlayTick(); + player_songpos = curord; player_patpos = currow; - xmpPlayTick(); - current_time += (double)125 / (player_bpm * 50); return current_time; } -void -xmplayer_set_songpos (int songpos) +void xmplayer_set_songpos(int songpos) { jumptorow = currow = player_patpos = 0; jumptoord = curord = player_songpos = songpos; @@ -1651,13 +2260,12 @@ globalvol = 64; } -void -xmplayer_set_pattern (int pattern) +void xmplayer_set_pattern(int pattern) { patlen = xm->patterns[pattern].length; - curpattern = &xm->patterns[pattern]; + curpattern = &xm->patterns[player_patno = pattern]; - if(currow >= patlen) { - currow = jumptorow = 0; + if (currow >= patlen) { + currow = jumptorow = 0; } } diff -Nru soundtracker-0.6.8/app/xm-player.h soundtracker-1.0.2~pre2/app/xm-player.h --- soundtracker-0.6.8/app/xm-player.h 2006-02-25 12:30:54.000000000 +0000 +++ soundtracker-1.0.2~pre2/app/xm-player.h 2020-09-14 20:31:01.000000000 +0000 @@ -2,7 +2,7 @@ /* * The Real SoundTracker - XM player (header) * - * Copyright (C) 1998-2001 Michael Krause + * Copyright (C) 1998-2019 Michael Krause * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,26 +26,98 @@ #include "xm.h" -extern int player_songpos, player_patpos; +enum { + xmpCmdArpeggio = 0, + xmpCmdPortaU = 1, + xmpCmdPortaD = 2, + xmpCmdPortaNote = 3, + xmpCmdVibrato = 4, + xmpCmdPortaVol = 5, + xmpCmdVibVol = 6, + xmpCmdTremolo = 7, + xmpCmdPanning = 8, + xmpCmdOffset = 9, + xmpCmdVolSlide = 10, + xmpCmdJump = 11, + xmpCmdVolume = 12, + xmpCmdBreak = 13, + xmpCmdExtended = 14, + xmpCmdSpeed = 15, + xmpCmdGVolume = 16, + xmpCmdGVolSlide = 17, + xmpCmdKeyOff = 20, + xmpCmdEnvPos = 21, + xmpCmdPanSlide = 25, + xmpCmdSetFReso = 26, + xmpCmdMRetrigger = 27, + xmpCmdTremor = 29, + xmpCmdXPorta = 33, + xmpCmdSetFCutoff = 35, + xmpCmdSFilter = 36, + xmpCmdFPortaU = 37, + xmpCmdFPortaD = 38, + xmpCmdGlissando = 39, + xmpCmdVibType = 40, + xmpCmdSFinetune = 41, + xmpCmdPatLoop = 42, + xmpCmdTremType = 43, + xmpCmdSPanning = 44, + xmpCmdRetrigger = 45, + xmpCmdFVolSlideU = 46, + xmpCmdFVolSlideD = 47, + xmpCmdNoteCut = 48, + xmpCmdDelayNote = 49, + xmpCmdPatDelay = 50, + xmpCmdSetFHFCutoff = 31, + xmpCmdSetFHFReso = 32, + xmpVCmdVol0x = 1, + xmpVCmdVol1x = 2, + xmpVCmdVol2x = 3, + xmpVCmdVol3x = 4, + xmpVCmdVol40 = 5, + xmpVCmdVolSlideD = 6, + xmpVCmdVolSlideU = 7, + xmpVCmdFVolSlideD = 8, + xmpVCmdFVolSlideU = 9, + xmpVCmdVibRate = 10, + xmpVCmdVibDep = 11, + xmpVCmdPanning = 12, + xmpVCmdPanSlideL = 13, + xmpVCmdPanSlideR = 14, + xmpVCmdPortaNote = 15, + xmpCmdMODtTempo = 128, +}; + +/* Making an extended FX parameter from a sub-command and a sub-parameter */ +#define XMP_CMD_EXTENDED(cmd, param) (((cmd - 36) << 4) | (param & 0xf)) + +extern int player_songpos, player_patpos, player_patno; extern int player_tempo, player_bpm; extern gboolean player_looped; extern guint8 curtick; -void xmplayer_init_module (void); -gboolean xmplayer_init_play_song (int songpos, int patpos, gboolean initall); -gboolean xmplayer_init_play_pattern (int pattern, int patpos, int only1row); -gboolean xmplayer_play_note (int channel, int note, int instrument); -gboolean xmplayer_play_note_full (int channel, - int note, - STSample *sample, - guint32 offset, - guint32 count); -void xmplayer_play_note_keyoff (int channel); -double xmplayer_play (void); -void xmplayer_stop (void); -void xmplayer_set_songpos (int songpos); -void xmplayer_set_pattern (int pattern); -void xmplayer_set_tempo (int tempo); -void xmplayer_set_bpm (int bpm); +void xmplayer_init_module(void); +gboolean xmplayer_init_play_song(int songpos, int patpos, gboolean initall); +gboolean xmplayer_init_play_pattern(int pattern, + int patpos, + int only1row, + int stoppos, + int ch_start, + int num_ch); +gboolean xmplayer_play_note(int channel, int note, int instrument, gboolean all); +gboolean xmplayer_play_note_full(int channel, + int note, + STSample* sample, + guint32 offset, + guint32 count, + gboolean use_all_channels); +void xmplayer_play_note_keyoff(int channel); +void xmplayer_stop_note(int channel); +double xmplayer_play(void); +void xmplayer_stop(void); +void xmplayer_set_songpos(int songpos); +void xmplayer_set_pattern(int pattern); +void xmplayer_set_tempo(int tempo); +void xmplayer_set_bpm(int bpm); #endif /* _ST_XMPLAYER_H */ diff -Nru soundtracker-0.6.8/AUTHORS soundtracker-1.0.2~pre2/AUTHORS --- soundtracker-0.6.8/AUTHORS 2006-02-25 12:51:48.000000000 +0000 +++ soundtracker-1.0.2~pre2/AUTHORS 2020-10-02 20:00:49.000000000 +0000 @@ -1,8 +1,10 @@ -Main Author +Main Authors ============ Michael Krause +Yury Aliaev + since 2020 Borrowed Code @@ -15,7 +17,9 @@ Tammo Hinrichs Assembly code for kb-x86 mixer The GIMP Team - (tips-dialog.c from the GIMP) + (tips-dialog.c and some icons from the GIMP) +Inkscape Team + (Undo history icon from Inkscape) Simon Kågedal (Sample map editor derived from clavier-0.1.3) Francois Pinard @@ -76,12 +80,14 @@ (reported various GUI bugs) Mardy (sample display vertical flipping bug) -Yury Aliaev +Yury Aliaev (pattern import/export in FT2 .xp format, minor - bugfixes and improvements, mouse wheel functions, - playlist editor, permanent channels implementation) + bugfixes and improvements, mouse wheel functions, + playlist editor, permanent channels, Gtk+-2 porting, + tracker colors configuration, alsa-1.x support, + polyphonic trying mode, new robust sampling drivers) Thomas Uwe Gruettmueller - (various fixes) + (various fixes, fancy clipping LED images) Wilbern Cobb (OpenBSD and 64bit fixes, SUN audio drivers) Erik de Castro Lopo @@ -97,12 +103,23 @@ (gcc-4.1 fixes) Jaan Pullerits (improved track-editor effect interpolator, - improved note recording) + improved note recording) Olivier Guilyardi (original crop/trim patch) Markku Reunanen (SDL output driver) - +Miroslav Shatlev + (Support up to 128 samples per instrument, clock) +Frank Haferkorn + (various fixes) +Stéphane K. + (initial gtk2 port) +Matthew Berardi + (various code modernizations) +Bernardo Innocenti + (gtk2-related fixes) +Peter Hanecak + (soundtracker.desktop fix) Translations ============= @@ -122,9 +139,10 @@ Vicente E. Llorens , (es) Michael Shigorin -Yury Aliaev +Yury Aliaev (ru) Michel Robitaille +europeen (fr) Matej Erman (sl) diff -Nru soundtracker-0.6.8/ChangeLog soundtracker-1.0.2~pre2/ChangeLog --- soundtracker-0.6.8/ChangeLog 2006-02-25 13:46:57.000000000 +0000 +++ soundtracker-1.0.2~pre2/ChangeLog 2021-02-26 19:50:30.000000000 +0000 @@ -1,807 +1,1834 @@ -2006-02-25 Michael Krause +2021-02-26 Yury Aliaev - * app/drivers/sdl-output.c: Added SDL output driver by Markku - Reunanen ; configure.in: Added SDL detection. + * app/file-operations.c: The problem with unwanted files in the + recent list is solved. Now only modules get into the recent files + list; - * app/gui.c (gui_handle_standard_keys): GDK_ISO_Level3_Shift is - also interpreted as Alt_R now. + * Released v1.0.2-pre2. - * app/sample-editor.c: Added oguilyardi's and yaliaev's - 08_soundtracker-0.6.7-keeptrim.patch.bz2 which adds two new - functions: "Trim" removes silence at the beginning and the end of - the sample, and "Crop" (called "Keep" in the original patch) - deletes the unselected parts of the sample. - - * app/gui.c, app/track-editor.c: added yaliaev's - 04_soundtracker-0.6.7-editmodefix.patch.bz2, - 05_soundtracker-0.6.7-multikeyfix.patch, - 07_soundtracker-0.6.7-spacefix.patch and - soundtracker-0.6.7-xmloadfix.patch. +2021-02-23 Yury Aliaev - * po: New Vietnamese translation by Clytie Siddall - , updated ru translation. + * app/xm-player.c: EC0 effect now works as it must do; -2006-01-15 gettextize + * app/sample-editor.c, app/time-buffer.[ch], app/track-editor.c: + Time buffer API is optimized. Also some potential problems are fixed; - * Makefile.am (SUBDIRS): Remove intl. - (ACLOCAL_AMFLAGS): New variable. - (EXTRA_DIST): Add config.rpath, m4/ChangeLog. + * app/track-editor.c: BackSpace undo fixed in the Track Editor; + + * app/clavier.c: Clavier look is improved; + + * app/audio-subs.c, app/history.c, app/sample-editor.c, + app/time-buffer.[ch]: Heading info of some sources is updated. + +2021-02-15 Yury Aliaev + + * app/midi.c, app/track-editor.c, app/tracker.c: Fixed track editor + redrawing mainly in block selection mode plus some optimization. + +2021-02-13 Yury Aliaev + + * app/main.c, app/drivers/pulse-output.c: PulseAudio driver is ready! + BTW it supports on the fly output discretization rate changing; + + * app/menubar.c: A message is issued when nothing is to be optimized + in a module; + + * soundtracker.xml, app/gui.c: Looking for an occurence of the current + instrument is implemented; + + * app/gui-settings.c: GUI settings window is optimized (better fit on + small displays); + + * cheat-sheet.*.txt, app/gui-settings.[ch], app/xm-player.c: Filter + effect can be switched off from GUI settings page. + +2021-02-06 Yury Aliaev + + * app/gui.c: Ctrl + Space can be used to stop playing on the Track + Editor page without editing mode toggling; + + * app/mixers/kbfloat.c, app/tracer.[ch]: Filter behaviour is fixed + (now filter does not depend on the playrate); + + * app/audio.c: Fixed rendering fragments to sample (garbage at the + end of the sample); + + * app/track-editor.c: Fixed "Delete" key action when used in the + block selection mode; + + * app/extspinbutton.[ch]: Extspinbutton does not depend anymore on + gui.h (mainwindow); + + * app/gui.[ch], app/menubar.c: Clearing module also resets file name; + + * app/gui.c: Fixed undo / redo of playlist current pattern entry; + + * soundtracker.xml, app/menubar.c, app/track-editor.c: + Shift + Ctrl + V (as well as a menu entry) can be used to paste block + wihout moving cursor to its end; + + * app/history.h: A misleading comment is fixed; + + * soundtracker.xml, app/menubar.c: Adjustment of all samples' volume + at once is implemented; + + * app/module-info.c: Extended Editor collapsing stops any tuning + procedure and respective playback; + + * app/gui.c: Highlighting of some measures is improved. + +2021-02-01 Yury Aliaev + + * app/gui.[ch], app/track-editor.c: "Play current row" and "Play + block" keybindings can be activated only from track editor page; + + * keys.[ch]: Code optimization; + + * app/gui.[ch], keys.[ch], app/sample-editor.c: A configurable + keybinding can be used to start / stop sampling. + +2020-12-31 Yury Aliaev + + * app/sample-editor.c: Some bugfixes and optimization: sample editor + keybindings doesn't interfere anymore with global keybindings; crash + fixed on attempt to delete empty selection; sample pasting is + optimized, also loop settings are updated correctly on pasting and + silence insertion; + + * app/drivers/sun-input.c, app/drivers/sun-output.c: Bugfix; + + * app/xm.c: Sample length correction on loading procedure is fixed + (before the loop end couldn't be the last discrete of the sample). + +2020-11-27 Yury Aliaev + + * app/sample-editor.c: On sample copy attempt in the Sample editor, + when no region is selected, the whole sample is being copied with all + its parameters (like volume, panning, loop points). Also sample + scrolling is improved: minimal unit is one screen point, not one + discrete; + + * app/gui-subs.[ch], app/gui.c, app/instrument-editor.c, app/main.c, + app/module-info.c, app/sample-editor.c, app/xm.[ch]: Messages for out + of memory error and file errors are unified; + + * app/xm.[ch]: Midi-related staff of instruments is kept as is, + although ST still doesn't use it; + + * app/track-editor.c: Fixed a bug with volume / effect parameter + scrolling, introduced on 9.11.20. Another improvement: FX parameters + interpolation now takes care on number and size of parameters; + + * soundtracker.xml, app/track-editor.c: Volume / FX interpolation + improvement: added an option to modify parameters of only matching + effects preserving empty fields; + + * app/endian-conv.h, app/xm.c: An approach to recovery broken + modules with corrupted patterns. Also the correlation recovery + procedure is bugfixed; + + * app/history.c: Bugfix (restoring the free size on history cleaning); + + * app/audio.[ch], app/gui.c, app/sample-editor.[ch], soundtracker.xml: + Added facilities for rendering block / track / pattern / song to a + sample; + + * app/st-subs.c: Loop correction procedure is fixed (it gave wrong + results, for example, on deleting data at the beginning of the + sample). + +2020-11-14 Yury Aliaev + + * app/gui-settings.[ch], app/track-editor.c: Added an option, in try + mode whether to retrig the same note on different channels (which + makes a kind of hall effect) or not; + + * app/envelope-box.[ch]: Pressing CTRL restricts point movement to + either horizontal or vertical direction. + +2020-11-09 Yury Aliaev + + * app/gui.c, app/sample-editor.c, sample-editor.xml: Some keybindings + are added for the Sample editor; + + * app/module-info.c: Extended editor is made a little bit more + convenient; + + * app/track-editor.c: When user starts scrolling the volume of the + note with no explicit volume value, the basic value from the + appropriate sample is taken. Also scrolling in the effect column is + disabled when no effect presents on the selected place. + +2020-11-08 Yury Aliaev + + * app/gui.c, app/tracker.[ch]: Optimization. Tracker doesn't depend on + gui.h any more; + + * app/instrument-editor.c, app/module-info.c, app/tracker.[ch]: + Another optimization: less global variables, better incapsulation; + + * app/audio.c, app/time-buffer.[ch]: Code cleanup, unused parameter is + removed; + + * app/clavier.[ch], app/instrument-editor.c: Tons of unused code is + removed from the clavier; + + * app/clavier.[ch], app/gui-settings.[ch], app/instrument-editor.[ch]: + Clavier font is made selectable. + +2020-10-19 Yury Aliaev + + * app/envelope-box.c: Fixed build without canvas. + +2020-10-12 Yury Aliaev + + * Released v1.0.2-pre1. + + * app/track-editor.c: Fixed wrong behaviour of the volume / FX + parameter autoincreasing / decreasing when the reference line contains + no volume / FX. Some key combinations (like Shift + F4) didn't work + when the cursor was in the instrument / volume / FX column. Now fixed; + + * app/module-info.c: Fixed missing update of the second list of + samples when a sample name is changed. + +2020-10-11 Yury Aliaev + + * app/gui.[ch]: Logging improvements and fixes; + + * app/history.[ch], app/midi.c, app/track-editor.[ch]: Logging- + related code rearrangement; + + * app/track-editor.c: Logging is added to all Track Editor + operations; + + * app/envelope-box.c, app/gui.[ch], app/history.[ch], + app/instrument-editor.c, app/menubar.c, app/midi.c, app/module-info.c, + app/sample-editor.c, app/track-editor.c, app/transposition.c, + app/xm.h: The implementation of history of operations is completed. + All user actions are logged with possibility to undo/redo most of + them. + +2020-10-09 Yury Aliaev + + * app/envelope-box.c: Message typo fixed; + + * app/history.[ch], app/instrument-editor.[ch], app/module-info.c, + app/st-subs.[ch]: Code rearrangement (mainly related to logging) with + some bugfixes; + + * app/gui-subs.h, app/sample-display.c, app/sample-editor.c: Logging + is added to all Sample Editor operations. + +2020-10-04 Yury Aliaev + + * app/gui.[ch], app/track-editor.[ch]: Some logging functions are + made global + some code optimization; + + * app/transposition.c: Logging is implemented from all transposing / + instrument reassigning operations. + +2020-10-02 Yury Aliaev + + * app/gui.c: Logging of the "Add free pattern + copy" operation is + improved. Undo returns ST exactly the same state as it was before the + operation; + + * app/gui.c, app/soundtracker.xml: An icon is added for Undo History + menu entry. + +2020-10-01 Yury Aliaev + + * app/st-subs.c: Fixed a buggy loading samples with too long names + (the module info list lines were not tuncated to 22 charachters). + +2020-09-27 Yury Aliaev + + * app/sample-editor.c, app/st-subs.[ch]: Sample name (often used as + a comment) is not cleaned when a sample is cleaned from the sample + editor; + + * app/envelope-box.c, app/gui.c, app/history.[ch], + app/instrument-editor.c, app/sample-editor.c, app/track-editor.c: + Some improvements of user actions logging (redo and undo can be + distinguished in the backend function); + + * app/gui-subs.[ch], app/module-info.c, app/instrument-editor.[ch], + app/sample-editor.[ch]: All operations from the module info page are + logged; + + * app/gui.c, app/menubar.c, app/module-info.[ch], soundtracker.xml: + Some code is moved from the app/module-info.c to more appropriate + places. The module info header is cleaned up from some global + declarations which are actually not used from any C module (only by + UI builder). + +2020-09-20 Yury Aliaev + + * app/track-editor.c, app/tracker.[ch]: Tracker redrawing is + optimized; + + * app/history.[ch], app/menubar.c, app/module-info.c: More user + actions are logged (undo/redo support for module-info.c is still + incomplete). + +2020-09-17 Yury Aliaev + + * app/gui.c, app/history.[ch]: All operations from gui.c are now + logged; + + * app/midi.c, app/history.[ch]: Notes recording from MIDI is logged. + +2020-09-15 Yury Aliaev + + * app/gui.[ch], app/sample-editor.[ch], app/app/track-editor.c: + Code reorganization and optimization: clipping indicator update + routine is now called from tracker updating function; + + * app/colors.c, app/sample-editor.c, app/time-buffer.c, + app/tracker-settings.c: Performance aspects related to GList/GSList + data types are improved. Time buffer now uses queries instead of + lists; + + * app/audioconfig.c app/gui-subs.[ch], app/keys.c, app/module-info.c, + app/tracker-settings.c, app/drivers/alsa1x.c: List view-related code + is optimized; + + * soundtracker.xml, app/envelope-box.[ch], app/gui-settings.[ch], + app/gui-subs.[ch], app/gui.[ch], app/history.[ch], + app/instrument-editor.c, app/main.c, app/module-info.[ch], + app/playlist.[ch], app/sample-editor.c, app/st-subs.[ch], + app/track-editor.c, app/xm.c: First approach to support the history + of user activity with Undo and Redo facilities. + +2020-09-14 Yury Aliaev + + * app/drivers/dummy-drivers.c: With dummy output one can "play" + modules with patterns scrolling, working scopes... unfortunately + without any sound ;-) + + * app/xm-player.c: Fixed stopping on forward jumps in non-loop + playback mode; + + * app/drivers/alsa1x.c: Fixed buffer size disappearing when it is + equal to 256 bytes; + + * app/driver.h, app/file-operations.c, app/main.c, app/xm.c: + Dependencies between source modules and headers are corrected; + + * app/audio-subs.[ch], app/audio.c, app/gui.[ch], app/module-info.c, + app/sample-editor.c, app/xm-player.[ch]: Fixed occasional sound + disappearing when using the keyboard mode of the tuning facility; + + * app/envelope-box.[ch], app/gui-subs.h: Code optimization. + +2020-09-06 Yury Aliaev + + * app/audio-subs.[ch], app/audio.[ch], app/audioconfig.c, + app/driver-inout.h (removed), app/driver.h, app/errors.c, app/gui.ch, + app/main.c, app/sample-editor.[ch], app/drivers/alsa1x.c, + app/drivers/driver-thread.h, app/drivers/dsound-output.c, + app/drivers/dummy-drivers.c, app/drivers/irix-output.c, + app/drivers/jack.c, app/drivers/oss.c, app/drivers/sdl-output.c, + app/drivers/sun-input.c, app/drivers/sun-output.c: Sound output (and a + little bit input) subsystem is redesigned to be more responsive and + integrate with more different audio subsystems and servers. + +2020-08-26 Yury Aliaev + + * app/gui-subs.[ch], app/gui.[ch], app/instrument-editor.c, + app/track-editor.c: Statusbar related functions are improved. Sample + editor now can post its own status messages above earlier ones; + + * app/gui-subs.[ch]: Added facility for creating toolbars; + + * app/sample-display.[ch]: A helper function needed for new sample + editor is added; + + * app/sample-editor.[ch], sample-editor.xml: Sample editor GUI is + redesigned. Now it uses menus and a toolbar instead of same-looking + boring buttons. Silence insertion is added to the sample editor; + + * app/gui.c: Error reporting is improved (missed image for pixbuf). + Fancy clipping LED imaged based on work by Thomas U. Gruettmueller. + +2020-08-25 Yury Aliaev + + * app/colors.c: Untranslated message is fixed. + +2020-07-29 Yury Aliaev + + * Released v1.0.1. + +2020-07-26 Yury Aliaev + + * app/scope-group.c: Drawing channel numbers in a little bit + straightforward manner. + +2020-07-22 Yury Aliaev + + * app/gui.c: Fixed flawy entries operation at file page; + + * app/instrument-editor.c: Fixed a bug with waveform updating in the + sample editor after loading a new instrument; + + * app/envelope-box.c: Fixed a bug with loop and sustain updating on + instrument change; + + * app/scope-group.c: Channel numbers drawing is improved. + +2020-07-13 Yury Aliaev + + * app/audio.[ch], app/gui.c, app/xm-player.[ch]: Warnings are fixed + which occured in the pattern playing mode when the long pattern is + manually changed to a shorter one and the current position is + greater than the new pattern length. + +2020-07-07 Yury Aliaev + + * app/clavier.[ch]: Some clavier drawing issues are fixed; + + * app/instrument-editor.c, app/track-editor.[ch]: Tiny performance + improvement; + + * app/menubar.c: C code syntax error is fixed. + +2020-07-06 Yury Aliaev + + * app/drivers/jack.c: Fixed compilation with old GCC. + +2020-06-04 Yury Aliaev + + * app/xm.c: Recovery of corrupted modules is improved; + + * app/gui.c: Fixed wrong behaviour of "Create Dir" button in file + choosers. + +2020-06-01 Yury Aliaev + + * app/sample-display.[ch]: A couple of small bugs related to the + waveforms drawing is fixed. + +2020-05-27 Yury Aliaev + + * app/menubar.c: Some i10n issues are fixed; + + * app/audio.[ch]: Compilation without audio files IO libraries is + fixed; + + * app/gui-subs.h, app/gui.c: Code cleanup (st_clock is now local as + it must be). + +2020-03-26 Yury Aliaev + + * app/keys.c, app/menubar.c, app/track-editor.c, app/xm.c: Some + message strings are fixed. + +2020-02-21 Yury Aliaev + + * app/menubar.c: Making About window more informative; + + * Released v1.0.1-pre1 + +2020-02-17 Yury Aliaev + + * app/file-operations.c: A memory leak and an incorrect recoding are + fixed, file overwriting check is made more convenient; + + * app/gui-subs.c: Errno and query dialog now have correct titles; + + * app/main.c: Code cleanup; + + * configure.ac, app/Makefile.am: Passing path to the code is done + in a more straightforward way. + +2020-01-24 Yury Aliaev + + * app/clavier.[ch], app/colors.c, app/customdrawing.[ch], + app/draw-interlayer.[ch], app/gui.c, app/sample-display.[ch], + app/scalablepic.[ch], app/scope-group.c, app/tracker.[ch]: Code + cleanup, the "Display" variable is hidden inside the drawing + interlayer and is being handled implicitly. + +2020-01-22 Yury Aliaev + + * app/time-buffer.[ch]: Optimization and sudden bugfix; + + * app/audio.[ch], app/track-editor.c: Non-loop mode + bugfix / improvement (playback is not stopped before the end). + +2020-01-21 Yury Aliaev + + * app/tracker.[ch]: A Cairo related bug is fixed: with double + buffering switched off symbols in the tracker were often not being + displayed; + + * app/customdrawing.[ch], app/scope-group.c, app/tracker.c: Some + speedup (X11-based drawing functions and double-buffering issues); + + * configure.ac: When X11 drawing backend is selected, the presence of + the X11 headers is checked; + + * app/tracker.c: A little inaccuracy in drawing the selection is + fixed; + + * app/Makefile.am, app/colors.[ch], app/customdrawing.[ch], + app/draw.[ch] => app/draw_interlayer.[ch], app/gui.c, + app/sample-display.[ch], app/sample-editor.c, app/scalablepic.[ch], + app/scope-group.[ch], app/tracker.[ch]: Files with drawing interlayer + for backends are renamed from draw.[ch] to drawing-interlayer.[ch] + with consistent API change for clearer naming of functions; + + * app/colors.[ch], app/gui-settings.[ch], app/gui.c: Color manager + API is changed to implement a new function (taking colors from GTK+ + widget theme); + * app/clavier.[ch]: Clavier is now using drawing functions from the + backends' interlayer instead of deprecated Gdk calls; + + * configure.ac, app/customdrawing.c, app/gui-settings.c, app/gui.c, + app/keys.c, app/midi.c, app/scalablepic.c, app/tracker.c: The code + is cleaned up from deprecated Gdk symbols (except for gdk drawing + backend). + +2020-01-13 Yury Aliaev + + * app/track-editor.c: Live recording in the pattern playing mode is + fixed; + + * app/colors.c: Color scheme tuning dialog is made more convenient; + also a small bug is fixed (on redrawing the color preview, a small + rectangle to the right from the radio button, the old color was being + displayed). + +2020-01-10 Yury Aliaev + + * app/audio.c, app/xm-player.c: Fixed race condition in the sound + rendering code that led to accidental crashes when using Jack driver; + + * app/drivers/jack.c: A stupid bug is fixed; + + * app/audio.[ch], app/gui-settings.[ch], app/preferences.[ch], + app/track-editor.c, app/xm-player.c: Live recording is improved: now + the key press/release position is calculated more accurately with + optional compensation of the human-made delay. Also (optinal) the + exact key press/release position can be recorded using FXes; + + * app/track-editor.c, app/tracker.c, app/transposition.c, + app/xm-player.[ch]: Some hardcoded numbers related to XM player are + replaced by symbolic constants; + + * app/track-editor.c: Code of the function show_editmode_status() is + strongly optimized, cleaned up and bugfixed (there were some parts + of the status that was not being translated); -2006-01-15 Michael Krause + * Released v1.0.0.1 (in the parallel git branch) - * app/track-editor.c (track_editor_interpolate_fx): Improved - effect interpolator by JP . +2020-01-02 Yury Aliaev - * app/gui.c (gui_expand_pattern): Fix typo (yaliaev, - 01_soundtracker-0.6.7-fixmessage.patch). + * app/audioconfig.c, app/colors.c, app/file-operations.c, + app/gui-subs.c, app/gui.c, app/sample-editor.c, app/transposition.c: + Fixed size cast issues that gave compiler warnings on some systems + and possibly could lead to ST crash; - * app/playlist.c (playlist_new): Make "Len" and "Rstrt" strings - localizable (yaliaev, 00_soundtracker-0.6.7-plcleanup.patch). + * app/xm.c: A compiler warning is fixed (sizes' mismatch). - * app/track-editor.c (track_editor_handle_keys): Applied - soundtracker-0.6.7-insdel.patch from Yury. (GDK_Insert works only - if no modifier keys are pressed). +2019-12-28 Yury Aliaev - * app/st-subs.c (st_sample_{8,16}bit_signed_unsigned): Rewrote - undefined code for gcc-4.1 (David Binderman ) + * soundtracker.xml, app/gui-settings.[ch], app/menubar.c, + app/track-editor.[ch]: "Record keyreleases" setting is moved to the + settings page from menu and now is saved and restored like other + settings. - * configure.in: Removed unnecessary check for 'sed'. +2019-12-26 Yury Aliaev - * po: Updated translations de, es, fr, sv; new Kinyarwanda - translation (rw.po) by Steven Michael Murphy , - new Turkish translation (tr.po) by Aysun Kiran - . + * app/gui-settings.[ch], app/track-editor.c, app/tracker.c: Added + an option to display volume value as a decimal number instead of + hexadecimat (the representation of volume column effects is not + changed); - * configure.in, app/mixers/Makefile.am: Made x86-assembly mixer - code disabled by default. I tried to compile it today, and it - totally garbles the samples (gcc 3.4.4). + * app/file-operations.c, app/gui.c, app/instrument-editor.c, + app/keys.[ch], app/module-info.c, app/track-editor.c: The resistance + to X11 bug/feature is improved: ST now can distinguish between two + different keys producing the same X key symbol + a small localization + fix. -2005-05-07 Michael Krause +2019-12-22 Yury Aliaev - * app/xm.c (xm_load_xm_samples): If a sample slot is empty, take - care to really clean the sample structure (only keep the - name). Otherwise, the sample editor may crash (reported by - ) + * app/clavier.h, app/clock.h, app/customdrawing.h, + app/envelope-box.h, app/extspinbutton.h, app/playlist.h, + app/scalablepic.h, app/scope-group.h, app/tracker-settings.h, + app/tracker.h: GType issue is fixed. - * app/midi-09x.c: Removed call to - snd_seq_port_subscribe_free(port_sub), because it has been - allocated on the stack via _alloca(). Fixes crash on startup. +2019-12-21 Yury Aliaev -2004-02-18 Yury Aliaev - - * Permanent channels support is implemented. Channels marked as - "permanent" work as if they are being played from the very - beginning of the module, even if the module is played from any - random place (any samples which might have been triggered before - the current song position will be started at the right position - when clicking "Play Song"). - -2004-01-22 Jaan Pullerits - - * app/gui.c: Fixed the bug caused by my previous changes which - made the space key to work incorrectly... :) - - * app/track-editor.c: Added bugfix by yaliaev which makes the - cursor to jump to first jazz enabled channel when trying to insert - notes on non-jazz channels. - - * app/track-editor.c, gui.c: Now right shift doesn't start module - recording. The recording is started by pressing pattern/track play - keys (ctrl, altgr) while holding the shift at the same time. - -2004-01-19 Jaan Pullerits - - * app/track-editor.c, app/track-editor.c: Implemented note - recording with support of recording keyrelease notes. - - * app/gui.c, app/gui.h: Made play_song() non-static to use it in - track-editor.c - - * app/menubar.c: Added "Record aftertouch" to edit menu. - -2004-01-11 Michael Krause + * app/drivers/alsa1x.c, app/drivers/oss.c, app/drivers/sun-input.c, + app/drivers/sun-output.c, app/envelope-box.c, app/gui-settings.c, + app/gui-subs.[ch], app/gui.c, app/keys.c, app/module-info.c, + app/playlist.c, app/sample-editor.c, app/transposition.c: GUI is + optimized, mainly by getting rid of add_empty_[hv]box() and arranging + different forms of make_radio_group*() and + make_labelled_radio_group_box*() functions; - * Released v0.6.7 + * app/clavier.c, app/clock.c, app/customdrawing.c, + app/extspinbutton.c, app/sample-display.c, app/scalablepic.c, + app/scope-group.c: GObject stuff is arranged; - * app/sample-editor.c: When copying a sample and pasting into an - empty one, the settings for volume, finetune, panning and relnote - are transferred, too. + * app/sample-editor.c: The multithreading stuff is fixed; - * Added patch from Yury for a more general Cut/Copy/Paste - handling. Now there's only one such set of functions in the Edit - menu, the functionality of which depends on the currently active - notebook page (tracker / instrument / sample editor). + * app/gui.c, app/track-editor.c, app/tracker.c: Volume column input + and displaying in the FT2 mode is fixed. - * app/xm.c (xm_load_xm_pattern): Handling non-standard pattern - header sizes (yaliaev) +2019-12-17 Yury Aliaev - * app/gui.c (gui_final): Default octave is now 3 instead of 5, so - that freshly loaded samples can be triggered at their original - speed with the Q key. + * app/module-info.c: Tooltips are added to some extended editor + buttons; - * app/sample-editor.c: Cleaned up sndfile / audiofile code (a lot - of stuff was previously duplicated via #if's), fixed saving of - 8-bit samples via libsndfile. When loading raw samples (when - compiled with libsndfile), we ask the user for the sampling - frequency now, just like in the case of libaudiofile. Also fixed - loading of 8-bit samples (treat_as_8bit is now set correctly). + * app/audioconfig.c, app/colors.c, app/gui.c, app/module-info.c, + app/tips-dialog.c, app/track-editor.c, app/xm.c, + app/drivers/alsa1x.c, app/drivers/jack.c, app/drivers/oss.c, + app/drivers/sun-input.c, app/drivers/sun-output.c: Usage of strings + is sanitized to prevent possible buffer overflows and truncations. - * app/gui.c (gui_playlist_position_changed): Fixed handling of the - "Lock edited pattern" button (problem reported by yaliaev). - -2004-01-04 Michael Krause +2019-12-16 Yury Aliaev - * app/track-editor.c (track_editor_do_the_note_key): Added patch - from yaliaev which removes cursor horizontal displacement when you - try some tune at the keyboard in jazz mode (of course, only if ST - not in the editing mode, jazz editing mode works just like - before). + * soundtracker.xml: Ctrl + BackSpace is used for deleting a track; - * Added soundtracker-0.6.7pre6-patexpshrink.patch.bz2 from - yaliaev, providing vertical pattern expansion / shrinking. + * app/audio.c: Fixed a possible concurrence between tracer and audio + driver (which sometimes caused Jack driver to crash); - * app/gui.c, app/keys.c, app/playlist.c: Fix some gcc-3.2 - warnings (yaliaev). + * app/audioconfig.c: The local variable "mixer" is renamed to + "_mixer" to avoid a possible confuse with the global variable having + the same name; - * app/cheat-sheet.c, app/gui.c, app/instrument-editor.c: Add some - #includes for non-GNOME version, fix for measure selection window - (yaliaev). + * app/audio.c, app/sample-editor.c: Fixed a crash after the sound + driver has failed; - * configure.in, app/mixers/Makefile.am, app/mixers/kb-x86-asm.S: - Added patch from yaliaev to remove dependency of soundtracker on - gasp. + * app/sample-display.c: Bigendian systems should now be supported + (no possibility to test, sorry); -2003-10-27 Michael Krause + * app/sample-editor.c: Sampling monitor code is simplified; - * po: Updated it, ja, pl, ru translations. Added sk (slovakian) - translation. + * app/audioconfig.c, app/driver.h, app/drivers/alsa1x.c, + app/drivers/oss.c, app/drivers/sun-input.c: Drivers' group + identification is added (used in Jack driver to share the same port + between several drivers); -2003-08-04 Michael Krause + * app/main.c, app/drivers/jack-output.c is renamed to + app/drivers/jack.c: Jack input driver is written. - * "Released" soundtracker-0.6.7pre6 (without official - announcement). +2019-12-15 Yury Aliaev - * app/gui.c, app/gui-settings.c, app/menubar.c, *.xpm: Added patch - from yaliaev: Nice icons in the control panel, Direct access to - accidentals and row highlighting configuration from the control - panel, Option to allow/prevent edited pattern from changing when - browsing in the playlist. + * app/gui-settings.[ch], app/track-editor.c, app/tracker.c: Added + an option to display volume column effects as symbols, either + letters or mnemonic signs as it is done in FastTracker 2; - * app/st-subs.c (st_sample_16bit_signed_unsigned): Fixed - signed->unsigned conversion (tugruettmueller). + * app/menubar.c, app/scope-group.[ch]: The scope group code is + simplified; - * app/playlist.c (playlist_insert_pattern): Emitting - SONG_LENGTH_CHANGED signal after inserting new pattern. Fixes - incorrect XM playlist update handling when inserting - patterns. (reported by yaliaev). + * app/gui.c, app/keys.[ch], app/track-editor.c: More keys are made + configurable (like Play Song, Play Pattern and so on); -2003-07-05 Tomasz Maka + * app/keys.[ch]: "Alt" modifier is not used for keybindings to avoid + interference with Gtk menu; - * app/gui.c, app/file-operations.[ch]: Function for refresh - (fileops_refresh_list) file/dir list in file requesters was added. + * soundtracker.xml, app/menubar.c: Some new keybindings and menu + entries are added; -2003-06-29 Michael Krause + * app/track-editor.c: The behaviour of the BackSpace key is fixed. - * app/gui.c (gui_final): Add tooltips to pitchbend and - amplification sliders (yaliaev). +2019-12-13 Yury Aliaev - * app/audio.c (audio_mix): Fix memset at the end of file - rendering, clearing the unrendered part of the mixing buffer - (yaliaev). This fix might contribute to stabilizing the WAV export - which has been reported to be unstable by some people. + * Released v1.0.0 - * po: Updated fr, it, sv translations. +2019-11-22 Yury Aliaev -2003-05-24 Michael Krause + * app/gui.c, app/sample-editor.c: Mainly a cosmetic fix; the + "binary" flag is specified in the file opening mode; - * "Released" soundtracker-0.6.7pre5 (without official - announcement). - - * app/main.c (main): Calling gui_play_stop() before quitting, so - that the audio driver is shut down correctly (for JACK). + * configure.ac, Makefile.am, app/Makefile.am: jack detection code + cleanup; - * app/keys.c, app/gui.c: Defined two new keys for "increase / - decrease jump value" (yaliaev). + * Makefile.am, soundtracker.desktop, soundtracker.appdata.xml: + desktop stuff is reenabled. - * app/keys.c, app/track-editor.c: Defined quick-jump keys to jump - to channels. Can also mute channels with keyboard when these keys - are pressed together with SPACE (yaliaev). +2019-10-18 Yury Aliaev - * app/midi-settings.h: Removed #ifdef ALSA_DRIVER_09x around - gboolean auto_connect definition in struct midi_input_prefs. Now - SoundTracker compiles with alsa 0.5.x again. I have no idea if it - works, though. + * app/sample-editor.c: Loading of the stereo samples is fixed; - * configure.in: Changed GNOME detection code; new code taken from - xchat-1.8.8. The old code broke at version detection on some - systems. + * app/gui-subs.c: Error dialog with error code handling (errno) is + fixed; - * app/st-subs.c (st_is_empty_track): Advance notes pointer in - loop. Also, the loop end condition is length > 0 instead of length - >= 0. Up to now, this function would only check if the very first - row in the pattern is non-empty, leading to patterns left out - during saving. Argh. Thanks to Henri Jylkkä for - helping to reproduce the bug. Also, CTRL-F and CTRL-G (find / copy - to unused pattern) work again now. + * app/gui.c: The wav rendering code is bugfixed (saving as 8-bit + audio using sndfile). Also the error reporting while file saving is + implemented; - * po: Updated ja.po, no.po, it.po. + * app/sample-display.c: The min/max mode of the sample displays is + fixed again; - * configure.in: Under NetBSD, check if OSS driver needs -lossaudio + * soundtracker.xml, app/audio.[ch], app/gui.c: A procedure of the + automatic amplification estimation is implemented; -2003-05-18 Michael Krause + * app/track-editor.c: The volume/fx parameter scrolling using mouse + wheel is fixed. The BackSpace usage is fixed again. - * app/drivers/sun-input.c, app/drivers/sun-output.c: Fixes - (wcobb). +2019-10-13 Yury Aliaev - * configure.in: Add -lossaudio to linker options for OpenBSD OSS - emulation layer. (wcobb) + * app/gui-subs.[ch]: A small GUI improvment; added an ability to + add radio buttons also to the end of a box; - * app/gui.c (file_selected), app/sample-editor.c, - app/instrument-editor.c: Check if a file was actually - selected. Previously, the gtk+ file selector could return with - just a directory name as 'file name', and SoundTracker would treat - that as a file to operate on, leading to strange behavior. - - * "Released" soundtracker-0.6.7pre4 (without official - announcement). - - * app/playlist.c: User can now click on playlist entries to make - them the current position (yaliaev). + * app/audio.[ch], app/audioconfig.c, app/gui-settings.[ch], + app/gui.c, app/main.c: The sound rendering code can now be called + directly from the main thread, not only from audio thread. Module + to wav rendering is rewritten using this ability and does not need + a pseudo file output driver anymore (app/drivers/file-output.c is + removed). - * flat.xpm, sharp.xpm: Made a bit larger (yaliaev). +2019-10-05 Yury Aliaev - * po/POTFILES.in: Added some more source files. + * app/sample-display.c: Fixed min/max mode waveform drawing bug; - * app/Makefile.am (install-exec-local): On NetBSD and OpenBSD, the - root group is called 'wheel' (wcobb, Henri Jylkka - ). On Darwin (MacOS X), it is 'admin' - (Mathias Meyer ). + * app/gui.c, app/tracker.[ch]: Left CTRL + mouse wheel now scroll + through pattern order table. Left ALT + mouse wheel is now used for + volume / FX parameter changing as described below; - * configure.in, app/main.c, app/drivers/Makefile.am: Sun audio - driver integration (wcobb) + * app/gui.c: Left SHIFT can be used to speed up the song position + scrolling with CTRL + PgUp/PgDown (+- 10 patterns instead of 1); -2003-05-17 Michael Krause + * app/tracker.c: Left SHIFT + left mouse button press at the tracker + area extends the existing selection to the current mouse pointer + location; - * app/drivers/jack-output.c: Added patch for latest JACK CVS (by - Anthony ). + * app/module-info.c: The samples mixing facility is added to the + Extended Editor; - * po: Updated it.po + * app/xm-player.c: Fixed a bug with playing block extending to the + end of a pattern. - * configure.in: Rewrote some parts of configure.in and several - Makefile.am's to use AM_CONDITIONALs where they are guaranteed to - be executed. Extended several Makefile.am's to make use of - conditional compilation -- this way some '#if defined(XXX)' around - complete source files can be removed and compilation is faster. +2019-10-03 Yury Aliaev -2003-04-27 Michael Krause + * app/track-editor.c: Fixed a bug: Cursor Down key didn't work just + after pressing the BackSpace key. - * app/track-editor.c (tracker_timeout): Removed - g_assert(current_driver_object) and replaced it with a simple - check, because the situation tested for can actually occur - legally. +2019-09-27 Yury Aliaev - * app/gui.c (gui_editpat_changed): gui_mixer_set_pattern() is - called here only when we are in 'playing pattern' mode. - (gui_set_current_pattern): Removed call to - gui_mixer_set_pattern(). - (offset_current_pattern): Use gtk_spin_button_set_value() to set - new pattern. + * app/xm.c: Added some code which tries to load XMs even when they + are partly broken (with corrupted instrument headers) with some + limited capability to repair them; -2003-04-12 Luc Tanguay + * app/marshal.list app/track-editor.c app/tracker.[ch]: Added a + function to increase/decrease volume or FX parameter using Ctrl + + mouse wheel when the mouse pointer is above either a volume or an + FX field. - * Updated MIDI code to support ALSA 0.9.x. +2019-09-24 Yury Aliaev -2003-04-03 Michael Krause + * soundtracker.xml, app/gui.c: Switching on/off playback looping is + now performed through a menu entry with associated keybinding rather + than direct keypress handling in gui.c. - * app/drivers/oss-{in|out}put.c: Corrected soundcard.h - inclusion. Now compiles under NetBSD (thanks Frank Knappe - and Henri Jylkka ). +2019-09-20 Yury Aliaev -2003-03-29 Michael Krause + * app/instrument-editor.c: The Instrument Editor GUI is made more + comprehensive regarding to the fadeout / vibrato controls; - * po: Updated ja.po + * app/gui.c, app/playlist.c: The playlist.c dependency on gui.h is + removed; - * configure.in: Correct detection of ALSA v0.9, v0.5 and . - (modified patch from ltanguay). + * soundtracker.xml, app/gui.c: The menu entries with keybindings are + added for free pattern appending, also with copying of the current + pattern; -2003-03-09 Michael Krause + * app/audio.c, app/gui-settings.[ch], app/gui.[ch], + app/xm-player.[ch]: "Play from cursor" and "Play block" actions are + added, as well as playback looping control (the later may work not as + expected, see FAQ); - * app/gui.c (gui_save_wav_callback, play_song): Removed - superfluous calls to gui_set_current_pattern(). + * app/track-editor.c: Added warning issued on track insertion when a + non-empty track is pushed away the pattern scope. - * app/drivers/file-output.c (sndfile_new): Initializing d->sndbuf - and d->polltag to NULL. Fixes a crash when trying to save WAV via - libsndfile on my machine. +2019-09-09 Yury Aliaev - * Fixed libsndfile detection. + * app/gui.c, app/track-editor.c: The keybindings are improved; - * "Released" soundtracker-0.6.7pre3 (without official - announcement). - - * Updated ja.po. + * app/instrument-editor.[ch]: An instrument can be cleaned only in + the editing mode and after the confirmation; -2003-03-08 Michael Krause + * app/module-info.c: "Delete" key can be used to clean an instrument + from the module info page. The forgotten debugging printf() is removed; - * app/gui.c (gui_playlist_position_changed): Start event waiter - first, THEN send "set songpos" request to mixer. Fixes occasional - hanging playlist display when changing playlist position manually - during playback. + * app/envelope-box.c: Now the correct upper limit of some + spin-buttons is set at the envelope change (before there was a bug + that could lead to ST crash); - * app/drivers/sun-input.c, app/drivers/sun-output.c: From Wilbern - Cobb. Integration with configure.in is still missing. + * app/gui.c: The pattern order table can now be modified only in the + editing mode; - * app/drivers/oss-input.c, app/drivers/oss-output.c, configure.in: - Including {sys/|machine/|}/soundcard.h depending on which - is present (wcobb). + * app/xm-player.c: The support of the E4x (vibrato control) and E7x + (tremolo control) FXes is added to support FT2 continious mode for + vibrato and tremolo. - * app/menubar.c: Added toggleitem for disabling the splash screen - (i.e., automatically closing it). +2019-09-05 Yury Aliaev - * app/gui-subs.c (gui_hang_tooltip): Only allocate GtkTooltips - once. + * app/gui-settings.[ch], app/track-editor.c: A setting is added, + whether to emulate or not the FastTracker II Rxx bug. - * app/gui.c (gui_insert_free_pattern, - gui_insert_free_pattern_and_copy): Cleaned up, checking for - maximum playlist length. +2019-09-01 Yury Aliaev - * app/gui-subs.c (gui_update_adjustment): Use gfloat for p instead - of int. Fixes some weird position jumping in the new playlist - editor when deleting or inserting items. Moved from gui-subs.c to - playlist.c, because it is playlist-specific. + * app/track-editor.c: The bug is fixed which allowed one to make XMs + with instrument numbers > 128; - * app/playlist.c: Merged playlist_insert_pattern() and - playlist_insert_clicked(). + * soundtracker.xml, app/keys.c, app/menubar.c, app/scope-group.[ch], + app/track-editor.c: Muting / unmuting channels is now performed using + the regular menu item instead of some configurable keys (the + keybinding is unchanges, Ctrl + M). - * app/playlist.[ch], app/gui.[ch]: New FastTracker-style playlist - editor by Yury. +2019-08-29 Yury Aliaev -2003-03-02 Michael Krause + * app/sample-display.c: The widget is now correctly being redrawn + (there was a bug here; for example the selection sometimes was not + properly displayed). The waveform gaps in the minmax mode are fixed, + the code is slightly optimized; - * "Released" soundtracker-0.6.7pre2 (without official - announcement). - - * Added patch from Yury for correcting - right-mouse-button-over-scopes semantics to agree with FT2. + * app/xm-player.c: Some FX'es are fixed: E9x (retrig) and Rxy (multi + retrig) now work as they do in the FastTracker II: fully retrig the + note, not only setting the sample position to the beginning (The Rxy + FT2 bug is not emulated). Also the FXes' behaviour is correct (like + in FT2) when the FX is triggered without a note. EDx (note delay) + retrigs the last note when it's called without a note. - * Added patch from Yury for displaying a pixmap for a muted - channel instead of a zero line only. Fixed this for the case when - no actual PNG file is installed. +2019-08-28 Yury Aliaev - * Added patch from Yury for B<->H note name switching and - flat/sharp notation selection. I downscaled the provided icons to - a height of 16 pixels to agree with the standard GNOME stockicon - size. + * app/module-info.c: A localization issue related to the Extended + Editor is fixed; - * Added patch from Yury for handling arbitary XM instrument header - sizes in xm.c::xm_load_xm_instrument(). + * app/gui-settings.[ch], app/gui.c, app/menubar.[ch], + app/track-editor.[ch]: Two additional mark modes in the track editor + are added: FT2-like and mixed; - * Added patch from Yury adding some gettext() calls here and there - to actually translate strings. + * app/customdrawing.[ch], app/draw.h, app/sample-display.c, + app/sample-editor.c app/scalablepic.c, app/scope-group.c: Removed + flicker when using the X11 graphics backend; - * Added patch from Yury for XP pattern import/export. + * app/file-operations.[ch], app/gui-settings.[ch], app/gui.c, + app/instrument-editor.c, app/sample-editor.c: The extension can be + added automatically to the file name (configurable); - * Added patch from Tomasz Maka . - + app/tracker.c: Channel numbers are more useful now - (centered above track on a separate line) - + app/tracker.[ch], app/gui.c: Different cursor color - in edit mode. + * app/gui.c: Menu entries "Load pattern" and "Save pattern" that + that were muddled together are fixed. The proper sorting of the + "Recent" submenu is implemented. - * Added norwegian translation by Petter Johan Olsen - . Updated russian translation by Yury. +2019-08-22 Yury Aliaev - * Added latest version of JACK output driver. Changes: - + Multiple clients: soundtracker_0-9 - + Output ports renamed: out_1, out_2 - + Driver release now waits for declicking to finish - + GUI issues fixed - + no slave transport mode - + master mode is not saved in the config by choice - (by Anthony ) - -2003-02-02 Michael Krause + * app/playlist.c: The bug with the last pattern removing is fixed. - * "Released" soundtracker-0.6.7pre1 (without official - announcement). - - * New danish translation (da.po) by Keld Simonsen . +2019-08-21 Yury Aliaev - * app/gui.c (gui_update_title): Rewritten using g_strdup_printf() - and g_basename(), fixes a crash when starting ST with a module - filename as command line argument. + * app/audio.[ch], app/gui.[ch], app/xm-player.[ch]: Added one more + API hook for a sound controlling function (stop note at the given + channel); - * Applied patch from Anthony Van Groningen adding - JACK support to SoundTracker. Some configure.in / Makefile fixes - for this by Kai Vehmanen . - - * Spent some hours getting the autoconf stuff to work with the - latest autoconf-2.57 / automake-1.7.2. I hate this. + * app/gui.[ch]: Added API functions for accessing the standard images; - * Applied patch from Erik de Castro Lopo - implementing libsndfile support in addition to - libaudiofile. libsndfile is now default, and if it is not found, - libaudiofile is used. + * app/instrument-editor.[ch], app/tracker.h: Number of notes is + defined as a symbolic constant instead of being a hardcoded number; -2002-10-20 Michael Krause + * app/instrument-editor.[ch]: Added API function for translating the + note number into the musical symbol; - * app/file-operations.c (fileops_filesel_pre_insertion / - post_removal): Only hide confirm area (OK and Cancel buttons) if - this is a single-click dialog. In the save dialogs, we need these - buttons (reported by qmax). + * app/gui.[ch], app/module-info.[ch], app/sample-editor.[ch]: Added a + sample tuning facility to the Extended Editor area; - * app/playlist.c (playlist_delete_clicked): Was buggy when delete - the very last playlist entry (garbled the last-but-one playlist - entry). + * app/drivers/alsa1x.c, app/drivers/file-output.c, + app/mixers/kbfloat.c, app/audioconfig.c, app/colors.c, + app/envelope-box.c, app/instrument-editor.c, app/keys.c, + app/module-info.c, app/recode.c, app/sample-editor.c, + app/st-subs.[ch], app/tips-dialog.c, app/track-editor.c, + app/tracker.c, app/transposition.c, app/xm.c: Macros added for + calculating the number of elements in arrays; -2002-09-18 Michael Krause + configure.ac, app/colors.c, app/gui.c, app/menubar.c, app/midi.c, + app/sample-editor.c, app/tips-dialog.c: The mixed-case program name + "SoundTracker" is now defined as a symbolic constant assigned while + package configuration. - * app/tracker.c (tracker_button_press): Now you can use your loved - mouse wheel to scroll through the patterns, just like Up and Down - arrows. But not only. Holding Left Shift and turning the wheel, - you can scroll left and right throug the pattern, as if you use - the scrollbar below the tracker window. (yaliaev) +2019-08-19 Yury Aliaev - * app/sample-editor.c: When a raw sample is loaded, a combo box - shows up and asks for the sampling rate. The default value is set - to 8363, but you can also select another predefined value or enter - one by hand. Also, the standard note is changed from C-6 to C-4, - so a 8363 Hz sample will now result in realnote=0; finetune=0; and - a 44100 Hz one in realnote=29; finetune=-28. (tugruettmueller) + * app/drivers/alsa1x.c, app/audioconfig.c, app/extspinbutton.c, + app/gui-subs.[ch], app/tracker-settings.c: Some GUI code rearrangement + and optimization for the upcoming development; - * app/gui.c: Write the name of the module being edited in the main - window title. (yaliaev) + * app/module-info.c, app/st-subs.[ch]: The extended editing functions + are added: copying and exchanging instruments and samples (located at + the module-info page); -2002-08-17 Michael Krause + * app/gui.c, app/module-info.c, app/st-subs.[ch], app/transposition.c, + app/xm.c: Another code optimization, the numbers of samples and + instruments are calculated automatically instead of being hard-coded + constants. - * In various files, added GPOINTER_TO_INT() and GINT_TO_POINTER() - macro calls. In the assembler files, added _C_LABEL() macro to - handle differing OS conventions for label prefixes. Makes ST work - on OpenBSD/sparc64 and OpenBSD/i386 (by wcobb). +2019-08-04 Yury Aliaev - * app/xm.c (xm_freq_note_to_relnote_finetune): Forcing finetune - into interval [-63,+63], removed restriction for relnote in - [-96,+96] (by tugruettmueller). - - * app/gui.c (gui_numchans_changed): Round down odd channel numbers - when entered manually (by yaliaev). - (gui_handle_standard_keys): Shift + Crsr Left / Right browses - playlist (by yaliaev). + * app/gui.c: The amplification slider has now a logarithmic scale. + Also a numeric entry is added acting together with the slider; -2002-07-20 Michael Krause + * app/gui-settings.[ch], app/sample-display.[ch], + app/sample-editor.[ch], app/scope-group.[ch]: A min/max mode for the + waveform displays is added (more accurate, but taking a bit more CPU + power); - * app/playlist.c (playlist_insert_clicked): Fixed a bug that - caused "Insert" to destroy the last playlist entry. Also, we're - now inserting the current pattern instead of duplicating the - playlist entry. + * app/mixer.h, app/sample-editor.c: A bug related to the wrong + displaying of the stereo samples is fixed; -2002-07-18 Michael Krause + * app/colors.c: The colors configuration dialog is improved. - * app/gui-settings.[ch]: Removed option 'Save XM saves all - non-empty patterns' and made this the default behaviour: all - non-empty patterns are always saved; if the user wants to have a - small, clean file, he can run 'Optimize Module'. +2019-08-04 Yury Aliaev - * app/sample-display.c (sample_display_draw_data): Fixed 'sample - was displayed reversed vertically' bug once and for all. Still - wasn't working properly. + * app/clavier.[ch], app/instrument-editor.c: The mouse support in + the instrument editor is improved: one can either play or map + samples using different mouse buttons (see README); -2002-06-28 Michael Krause + * app/instrument-editor.c: In the instrument editor the pressed keys + are being indicated when playing using the keyboard; - * app/sample-display.c (sample_display_draw_data): Yet another fix - to the sample display (Mardy ). + * app/customdrawing.[ch], app/gui.c, app/sample-display.[ch], + app/scalablepic.[ch], app/scope-group.[ch]: Channel numbers are + being drawn inside the sample displays (scopes) instead of taking + additional space; - * soundtracker.desktop: Changed 'Type' from 'Multimedia' to - 'Application'. Now SoundTracker appears in the GNOME menu again. - Reported by Bastien Nocera . - - * app/mixers/kbfloat-mix.c (CUBICMIXER_LOOP_FORWARD): Moved s0 - initialization from LOOP_START macro to both LOOP_FORWARD and - LOOP_BACKWARD, adding a missing minus sign before positionf in - LOOP_BACKWARD. Now backwards mixing is done correctly, without - noise (reported by Yury Aliaev ). + * app/draw.[ch], app/sample-editor.c, app/scope-group.c: A red record + indicator is being drawn in the sampling monitor when the recording + is on; -2002-06-17 Michael Krause + * app/colors.[ch], app/gui-settings.c, app/gui.c, + app/sample-display.[ch], app/sample-editor.c, app/scope-group.c, + app/tracker.[ch]: According to the Single Responsibility Princinple + all colors' management functions are brought together in the + app/colors.[ch] files. Some more colors (like colors of the sample + displays) are made configurable; - * app/gui.c (gui_splash): Calling gdk_rgb_init() after - gnome_init(), which is officially required, but the splash screen - happened to work on my installation nevertheless, just not on some - others.. + configure.ac, app/colors.[ch], app/draw.[ch], app/gui.c, + app/sample-display.[ch], app/sample-editor.c, app/scalablepic.[ch], + app/scope-group.[ch], app/tracker.[ch]: Backends selection for the + low-level drawing functions is implemented. Some further optimization + of the waveform drawing in the sample displays is done. With the X11 + backend the ST performance is greatly improved; the bug with the high + CPU usage is fixed. - * po: Updated fr, ja, sv, ru, it. New croation translation (hr.po) - by Denis Lackovic . +2019-07-23 Yury Aliaev - * app/transposition.c (transposition_transpose_notes_sub): - "Current Instrument" and "All Instruments" modes were swapped - (reported by Michal Seta ) + * app/sample-display.c: An incorrect signal marshaller is fixed; - * app/tips-dialog.c: Actually feeding the tips through _() now - (reported by Yuri Bongiorno ) + * app/file-operations.c: The single-click behavior is improved (a + file dragging coming up after the switching from the file to the + tracker page is got rid); -2002-05-20 Michael Krause + * configure.ac, app/gui.c, app/scope-group.[ch]: Check for + gdk-pixbuf is removed since this is the essential part of the Gtk + library. - * Released v0.6.6 +2019-07-23 Yury Aliaev - * Oh, yeah. NLS was completely b0rken. Updated to gettext-0.10.37. + * configure.ac: A typo mistake is fixed, that preventing from + detecting the deprecated Gtk API calls; + * app/cheat-sheet.c, app/clavier.[ch], app/clock.c, + app/drivers/alsa1x.c, app/drivers/oss.c, app/drivers/sun-input.c, + app/drivers/sun-output.c, app/envelope-box.[ch], + app/extspinbutton.[ch], app/gui-settings.c, app/gui-subs.[ch], + app/gui.c, app/instrument-editor.c, app/keys.c, app/main.c, + app/midi-settings.c, app/module-info.c, app/playlist.[ch], + app/sample-display.[ch], app/sample-editor.c, app/scalablepic.[ch], + app/scope-group.[ch], app/tracker-settings.c, app/tracker.[ch], + app/marshal.list: The code is finally cleaned up from the residuals + of the deprecated Gtk API; - * Released v0.6.5 + * configure.ac, app/cheat-sheet.c, app/menubar.c: Dropped + dependency on GtkHTML, which really depends on the deprecated + Gnome UI. Instead, the text-based cheat sheet is implemented, but + with the localization support; - * app/tracker.c (tracker_set_font): Test if font width and height - have sane values. Fixes crash with the 'clearlyu' font reported by - Trevor Nunes . + * app/gui.c: An internationalization issue with the Recent menu is + fixed. - * app/playlist.c: Hack to set page increment to 5.0 for the - current pos and restart pos spinbuttons. +2019-07-12 Yury Aliaev - * app/sample-display.c: Flipped display vertically; now the - positive sample values are at the top, and the negative ones at - the bottom (patch by Mardy ). - -2002-05-17 Michael Krause + * app/menubar.c: Superfluous includes are removed; - * app/menubar.c: For non-GNOME SoundTracker, wrote some code that - converts the GNOME menu tree structure into GtkItemFactoryEntry's - at run-time, so we can finally get rid of the extra GTK+-only menu - tree and its associated translation-induced problems (maintenance - nightmare). + * app/tracker-settings.c: A memory leak is fixed. - * app/track-editor.c (track_editor_copy_selection): When marking a - block with CTRL-B, CTRL-C and CTRL-V (copy and cut) stop marking - automatically. This should always have been the case, but somehow - in v0.6.4 an extra CTRL-B was necessary. +2019-07-06 Michael Krause - * app/menubar.c: Added selection transposition stuff. + * Released v1.0.0-pre1 - * app/transposition.c (transposition_transpose_selection): - Backported from CVS. +2019-07-01 Yury Aliaev - * app/track-editor.c (track_editor_editmode_status_idle_function): - Using idle function here as well in order to workaround - gtk_label_set_text() slowness. + * app/sample-editor.c: Some sampling window related bugixes + (occasonal crashes, wrong buttons' behavior). -2002-05-16 Michael Krause +2019-05-06 Yury Aliaev - * app/sample-editor.c (sample_editor_set_selection_label): Moved - the actual gtk_label_set_text() to an idle function, because it - has become incredibly slow somewhere on the way to gtk+-1.2.10. - Fixes sample range selection slowness (see comment). + * app/main.c: The code is cleaned from ESD driver remainders; - * app/menubar.c: Renamed "use backing store" to "flicker-free - scrolling", which can actually be understood by non-coders. + * app/clavier.c: Color selection for drawing the clavier is improved. + Now it looks fine with both light and dark Gtk themes. Also the + sample numbers' placement is improved to adopt better every main + window size. - * app/tracker-settings.c (trackersettings_new): Button relayout. +2019-04-26 Michael Krause - * app/gui-settings.c: Removed AA canvas option. Removed channel - numbering option (hey, removing superfluous preferences is a good - thing). Renamed some other options. + * app/clavier.c, app/clock.[ch], app/envelope-box.[ch], + app/extspinbutton.[ch], app/gui.c, app/playlist.[ch], + app/scalablepic.[ch], app/scope-group.[ch], + app/tracker-settings.[ch], app/tracker.[ch]: Some deprecated code is + modernized (GObject/GPOINTER stuff). - * app/envelope-box.c (envelope_box_new): Always using standard - non-antialiased canvas. With GNOME 1.0 and GNOME 1.2, AA canvas is - buggy; with GNOME 1.4, it doesn't even work. - - * po: Updated fr.po. +2019-04-15 Yury Aliaev -2002-02-17 Michael Krause + * soundtracker.xml, app/gui.c: Recent edited files submenu of the + File menu is implemented; + * app/gui.c: Bugs related to the wrong file request from the command + line are fixed. - * configure.in: Check for gdk-pixbuf >= 0.8.0 (in fact, I don't - know which is the minimum version required). Needed for splash - screen. +2019-03-18 Yury Aliaev - * app/tips-dialog.c (tips_dialog_get_vbox): Function to create the - vbox without a window, for the splash screen. + * configure.ac: Cleanups ispired by work performed by Michael Krause + in Gtk+-3 branch; - * app/gui.c (gui_init): Separated into gui_splash() and - gui_final(). The former displays a splash screen, and integrates - the tips. + * configure.ac, app/main.c, app/menubar.c: Re-enabling MIDI code + since it's found out to be ALSA 1.x compatible. app/midi-*09x.c files + are remaned to app/midi-settings.c, app/midi-utils.c, app/midi.c to + avoid confusing. -2002-02-09 Michael Krause +2019-03-15 Yury Aliaev - * app/gui-settings.c (gui_settings_save_config): Moved geometry - saving from save_always() to this function. + * configure.ac: A bug with --enable-hacks is fixed; - * app/file-operations.c (fileops_tmpclean): Removed error checks, - especially the ungraceful exit(-1) :-) - - * po: Updated fr.po (new translation by Michel Robitaille - ), added sv.po (by Christian Rose - ). + * app/gui-settings.c, app/gui-subs.[ch]: Making callback ID available + from gui_labelled_spin_button_new(); -2002-01-15 Tomasz Maka + * app/gui.c: The bug (recently introduced) with tempo/BPM indicators' + updating and setting in the playing mode is fixed. Plus the code is + a little bit optimized in terms of performance; - * app/file-operations.[ch]: Added fileops_tmpclean function to - remove ~/.soundtracker/tmp contents. + * app/gui-settings.c, app/tracker.[ch]: Adding a new configurable + color in the tracker for the cursor line background when it overlaps + the selection; - * app/xm.c (xm_check_envelope): Set first envelope point offset to - 0. + * app/gui-settings.c: Wrong tracker line settings' displaying is + fixed. -2002-01-13 Michael Krause +2019-03-11 Yury Aliaev - * Actually putting config.guess and config.sub into the .tar.gz - distribution. Last time they were missing, strange. + * app/file-operations.c: Code cleanup/probably some bugfix; - * app/gui.[ch]: Moved WELCOME_MESSAGE define to gui.c so that it - is internationalized (reported by Yuri Bongiorno - ). + * app/gui.c, app/main.c, app/sample-editor.c: Fixed some issues + reported by gcc-6. - * app/gui-settings.c (gui_settings_save_config): Don't forget to - save scopes_buffer_size (reported by Chauk-Mean Proum - ). +2019-03-11 Yury Aliaev - * po: Updated ru.po and it.po. + * app/drivers/alsa1x.c, app/drivers/oss.c, app/drivers/sun-input.c, + app/gui.c, app/instrument-editor.c, app/keys.c, app/preferences.c, + app/sample-editor.c, app/track-editor.c, app/xm.c, soundtracker.xml: + Some messages' output and localization issues are fixed. -2001-12-22 Tomasz Maka +2018-12-09 Yury Aliaev - * app/errors.c, sample-display.c, scope-group.c: Added missing - 'string.h' headers. + * app/drivers/sun-input.c: Ported to the multithreaded interface; - * app/xm.c: Added new st specific tmpnam function (called - 'st_tmpnam') to avoid gcc warrning. Generates temporary files in - ~/.soundtracker/tmp/ instead of in /tmp/. + * app/audio.h, app/errors.[ch], app/gui-subs.[ch], app/gui.c, + app/drivers/esd-output.c, app/drivers/oss.c, + app/drivers/sun-input.c, app/drivers/sun-output.c: New message + functions to improve diagnostics: gui_errno_dialog() (for GUI + thread) and error_errno() (for other threads, working through + the mixer backpipe); - * app/gui.c (gui_handle_standard_keys): If we are in instrument or - sample editor notebook page 'Space' key stops playing without edit - mode switching. + * app/gui-subs.c, app/gui.c: In two critical (really) cases + g_critical() is called instead of just warning; -2001-12-08 Tomasz Maka + * app/sample-editor.c, app/transposition.c: Gettext usage is + fixed. - * app/gui.c, gui-settings.[ch], menubar.c: Added option to save - tracker's window geometry. +2018-12-08 Yury Aliaev - * app/module-info.c (modinfo_optimize_module): Module optimize - function has small info requester now. + * app/drivers/sun-input.c: Bugfix (wrong string manipulation). -2001-12-07 Tomasz Maka +2018-12-02 Yury Aliaev - * app/sample-editor.c (sample_editor_set_selection_label): When - selection exist length label show size of selected block instead - of entire sample size. + * app/drivers/alsa1x.c, app/drivers/driver-thread.h: Bugfix; - * app/sample-editor.c: Ask user for action if saving file - (sample or region) already exist. + * app/drivers/oss.c: OSS sampling driver was ported to the new + multithreaded interface. -2001-08-25 Michael Krause +2018-12-02 Yury Aliaev - * po: Updated de.po and es.po. + * app/drivers/alsa1x.c, app/drivers/driver-thread.h, + app/sample-editor.c: New semi-realtime multithreaded sampling + code is written, which is more stable and high load proof. -2001-08-12 Michael Krause +2018-12-01 Yury Aliaev - * Released v0.6.4 + * app/sample-editor.c, sample_editor_scroll(): A small bugfix; - * app/clavier.c (clavier_init): If "5x8" font can't be found, use - "fixed". + * app/gui.c, app/gui-subs.[ch], app/gui-settings.c: Some fake + "sliders" (really not) are converted to more appropriate labelled + spin buttons. The code of the labelled spin button itself is a + little bit optimized; - * Added 'config.guess' and 'config.sub' files from automake - distribution (reported by Wilbern Cobb ). + * app/gui-subs.[ch], app/instrument-editor.c: The code of + gui_subs_create_slider() is optimized; -2001-08-04 Michael Krause + * app/gui.c: The overhead due to unneeded calls of + gui_xm_set_modified() is removed. Pressing "ESC" on the file page + switches to the previous page; - * app/drivers/oss-input.c: Made "/dev/dsp" configurable. - (oss_release): Only remove polltag if polltag != 0. Fixes a glib - warning. + * app/drivers/alsa1x.c, app/clock.c, app/gui-subs.c, gui.[ch], + app/sample-editor.c: Sources were cleaned from old dead code + commented out and some superfluous includes. - * app/audioconfig.c (audioconfig_clist_select): When a different - driver is selected, don't just leave the default settings, but - load the settings from disk if there are saved settings. +2018-11-29 Yury Aliaev -2001-07-31 Michael Krause + * app/sample-display.[ch], app/sample-editor.c: Mouse wheel(s) + support for scrolling/zooming is added. - * app/drivers/oss-output.c: Made "/dev/dsp" configurable. +2018-11-25 Yury Aliaev -2001-07-25 Michael Krause + * app/sample-editor.c: Sample redrawing frequency is no + more hadrcoded but equal to scopes' updaing frequency; + * app/gui-settings.[ch], app/gui-subs.[ch], app/gui.c, + app/instrument-editor.c, app/sample-editor.c: + file_selection_save_path() is renamed to + gui_settings_make_path() and moved from app/gui-subs.c to + app/gui-settings.c for better matching the structure of + sources; + app/instrument-editor.c: The most job of the + instrument_editor_update() is moved to the idle function + to improve interactivity; + * app/gui.c, app/track-editor.[ch], app/tracker.[ch]: + The cursor positioning code is optimized and fixed; both + h and v scrollers now work correctly; + * app/gui-subs.[ch]: gui_update_range_adjustment() is removed + since it's not longer in use; + * app/sample-editor.c, hscrollbar_changed(): It's better to round + value when dealing with GtkAdjustment; + * app/playlist.[ch]: GtkAdjustment-related aspects are cleaned + up; also unneeded gtkinvisible.h include is removed. - * app/sample-editor.c (sample_editor_init_sample): If instrument - is initialized, initialize sample map with current sample number, - too. +2018-11-20 Yury Aliaev - * app/tips-dialog.c: Added tip "Is your cursor trapped in a number - entry field? Just press Return or Tab to free yourself!". + * app/file-operations.[ch], app/gui.c: Ah, ah, I (yaliaev) + have made the last fixes in a stupid way! Now the code is + cleaned up; + * app/envelope-box.c, app/gui-subs.[ch], app/gui.[ch], + app/menubar.c, app/track-editor.c: gui_get_widget() is moved + from gui.c to gui-subs.c + related changes; + * app/gui-subs.[ch], app/gui.[ch]: Another portion of + cleanups, including removal residuals from old times; + * configure.ac: Check for dlfcn.h is removed since it's not + used, some versions of libs and utilities are corrected; + * app/driver-inout.h: Dead souls (declarations of + non-existing functions) are removed. - * soundtracker.spec: Disable ALSA when building an RPM. +2018-11-20 Yury Aliaev - * po: Added gl.po by Xosé Anxo Pereira Torreiro - . + * app/file-operations.[ch], app/gui-subs.h, app/gui.c, + app/instrument-editor.c, app/sample-editor.c: File selection + interface was rewritten in more object-oriented way to + facilitate quest for bugs; + * app/instrument-editor.c: In + instrument_editor_save_instrument() a bug is fixed caused ST + crash at instrument saving; + * app/file-operations.c: In save_clicked() the wrong reporting + of the name of the file being rewritten is fixed. -2001-06-15 Michael Krause +2018-11-18 Yury Aliaev - * app/main.c (main): On Linux, we use setresuid()/setresgid() - instead of seteuid()/setegid() in order to make gtk+-1.2.10 happy. - Otherwise, SoundTracker doesn't run if installed suid-root. - -2001-05-24 Michael Krause + * app/instrument-editor.c, app/xm.c: Ask user if the version + of XI or XM being loaded is incorrect. - * Released v0.6.3 +2018-11-15 Yury Aliaev - * app/audio.c (audio_ctlpipe_stop_playing): If audio_songpos_ew is - still active, confirm it. This fixes the crash that occurs when - pressing Ctrl directly after changing the playback position - (during playback), reported by Aki Kemppainen - + * app/main.c: The #ifndef condition is added such as SIGSEGV is + not caught with -DDEBUG compiling option. This allows one to get + core file from the crashed ST and explore it with gdb; + * app/sample-editor.c, app/st-subs.[ch]: Code optimization; + * app/menubar.c: Samles and instruments can again be cut and + pasted in non-editing mode. - * app/audioconfig.c (audioconfig_save_config): prefs_open_write() - was accidentally called with an argument "rw" instead of a real - file-name, so the audio settings never got saved!! I wonder why - nobody reported this. +2018-11-12 Yury Aliaev -2001-03-05 Michael Krause + * app/instrument-editor.c, app/xm.c: Preserve the current + instrument if the new one being loaded is corrupted; + * app/xm.c: Fixed possible crash on the uninitialized muteces' + cleaning up; + * app/st-subs.c: Fixed the bug introduced when moving to the + new GMutex interface. - * po: Updated ru.po, it.po. +2018-11-11 Yury Aliaev -2001-01-03 Michael Krause + * app/gui.c: gui_load_xm() is modifies such as the current module is + preserved if that being loaded is broken. - * Released v0.6.2 +2018-11-08 Yury Aliaev -2000-12-27 Michael Krause + * app/sample-display.[ch], app/sample-editor.c: Code optimization, + a callbacks' loop is removed; + * app/sample-editor.c: Some GUI updating functions on sample change + are put into the idle loop to improve the responsibility; + * app/sample-editor.c, app/scope-group.c, app/track-editor.c: Deprecated + gtk_timeout_add/remove() functions are replaced by the modern ones; + * app/xm.c: Some forgotten messages were gettextized. - * app/sample-editor.c (sample_editor_save_wav_main): Check for - existence of dynamic loader functions, and use audiofile-0.2.0 - code if not. +2018-09-25 Michael Krause -2000-12-23 Michael Krause + * updated build scripts to more recent autotools and gettext; + added ALSA 1.0 check (MIDI code is still at 0.9 and thus not + compilable at the moment). - * app/sample-editor.c (sample_editor_save_wav_main): Fix sample - format initialization for libaudiofile-0.2.0. +2018-09-24 Yury Aliaev -2000-12-20 Michael Krause + * app/gui-settings.c: Bugfix; + * app/drivers/oss.c: Code cleanup; + * app/envelope-box.c, app/gui.[ch], app/instrument-editor.c, + app/menubar.c, app/midi-09x.c, app/module-info.c, + app/sample-editor.c, app/track-editor.c, app/transposition.c, + app/xm-player.c, app/xm.h: The usage of xm_set_modified() function + is optimized; + * app/gui.c: In gui_update_title() title is now updated in idle mode + to reduce CPU overhead; + * app/xm.c, app/main.h: Some unused headers are removed; + * app/sample-display.c, app/sample-editor.c, app/track-editor.c, + app/tracker.c: Seprecated gtk_idle_add() function is replaced by + g_idle_add(); + * soundtracker.xml: Cleanup, keybindings are adjusted. - * app/tracker-settings.c (trackersettings_read_fontlist), - app/tracker.c (tracker_init): Default font is now 'fixed'. 7x13 - appears not to be present on all X installations (Florian Heinz - ) pointed this out. - -2000-12-16 Michael Krause +2018-09-18 Yury Aliaev - * app/fr.po: Updated french translation (XxKarLKoXxX@aol.com) + * app/audioconfig.c, app/gui-settings.c, app/gui-subs.h, + app/gui.c, app/keys.c, app/midi-settings-09x.c, + app/sample-editor.c, app/tips-dialog.c, app/transposition.c, + app/drivers/alsa1x.c: Dialogs are revised, optimized and made + nicer; + * app/preferences.c: In prefs_check_prefs_dir() message is + changed from warning to info; + * app/audio.c, app/cheat-sheet.c, app/gui-subs.c, app/gui.c, + app/instrument-editor.c, app/keys.c, app/xm.c, + app/drivers/alsa1x.c, app/drivers/file-output.c, + app/drivers/irix-output.c, app/drivers/jack-output.c: Many + gettext invocations are checked, added missing and removed + duplicated; + * app/sample-display.c: Code optimization and cleanup; + * app/extspinbutton.c, app/gui.[ch]: Code optimization, made + a uniform method to remove focus from a widget. -2000-12-09 Rob Adamson +2018-09-13 Yury Aliaev - * app/xm.c: Escape filenames that are passed to the shell for - decompressing. + * app/gui-subs.h: gui_info_dialog() Is defined; + * app/menubar.c, app/track-editor.c, app/transposition.c: The + check for editmode is added for some module modifing actions + like track/patter pasting, killing notes, transposition etc. -2000-10-30 Michael Krause +2018-09-13 Yury Aliaev - * app/gui.c (keyevent): Removed old "capture_keys" logic, and - replaced it by a simple check if the window's current focus lies - on an entry widget. Finally, the spin buttons are editable using - the keyboard! + * app/drivers/oss.c: Some optimization; + * app/sample-editor.c: Code cleanup; fixed the bug with zooming + to 1 sample. - * app/gui.c: Replaced all gtk_spin_button_new() by - extspinbutton_new() plus disabled size hack (in order to get the - "changed" callback mentioned below into effect). - - * app/extspinbutton.c: Added option to disable the horizontal size - hack, and added "changed" callback that immediately removes focus - from widget if the value has been changed using the mouse. +2018-09-10 Yury Aliaev -2000-10-22 Michael Krause + * app/gui.c: Loading files with non-ASCII names from the command + line is fixed; + * app/sample-editor.c, app/sample-dialog.c: Deprecated + gtk_label_st is replaced by gtk_label_set_text; + * app/extspinbutton.[ch]: Deprecated Gdk function is replaced by + that from Pango, plus some code optimization. - * Released v0.6.1 +2018-09-06 Yury Aliaev -2000-10-20 Michael Krause + * app/file-operations.[ch]: File interface was rewritten almost + from scratch because the previous one was too buggy. Now single + click navigation works correctly, also keyboard usage is improved + a little bit; + * app/envelope-box.c, app/gui.[ch], app/instrument-editor.c, + app/menubar.[ch], app/sample-editor.c: Files were modified mainly + to be consistend with the above changes; + * app/gui-subs.[ch]: One function is moved here from gui.[ch]; + also some functions incorrectly marked as inline are fixed; + * app/tracer.c: Possible memory violation is fixed; + * app/track-editor.c: Possible buffer overflow is fixed; + * app/drivers/sun-input.c, app/drivers/sun-output.c: Sources are + now consistent with the new drivers' interface (not testes though). - * po/sl.po: Added slovene translation by Matej Erman. +2018-07-19 Yury Aliaev + + * app/gui.[ch], app/instrument-editor.c, app/sample-editor.c, + app/drivers/file-output.c, app/st-subs.c, app/xm.[ch]: Fixed double + sample name setting + code optimization. + +2018-07-16 Yury Aliaev + + * app/audio.c, app/audioconfig.c, app/gui.c, app/main.c, + app/menubar.c, app/sample-editor.c, app/drivers/file-output.c, + configure.in: The version of the audiofile library is now being + determined in the compilation time without runtime hacks; + * app/sample-editor.c: Bugfix (double file closing). + +2018-06-29 Yury Aliaev + + * app/sample-editor.c: Better fiddling with sounds in sample editor. + * app/keys.c, app/track-editor.c: The keyboard control for channels' + muting/unmuting is made simplier, some more default keybindings are + added. + +2018-06-28 Yury Aliaev + + * app/file-operations.c, app/instrument-editor.c, app/module-info.c, + app/track-editor.[ch]: Polyphonic try mode is now also available at + the file, instrument editor and module info pages. + +2018-06-26 Yury Aliaev + + * app/audio.c, app/gui-settings.[ch], app/gui.[ch], app/midi-09x.c, + app/track-editor.c, app/xm-player.[ch]: Polyphonic playing in try + (out of editing) mode (optional). + +2018-06-25 Yury Aliaev + + * app/track-editor.c, app/xm-player.c: When out of editing mode, + note keys' pressing produces sounds independent on the cursor + position (note/instr/eff column, muted channel). + +2018-06-18 Yury Aliaev + + * app/envelope-box.c, app/extspinbutton.[ch], app/gui-settings.c, + app/gui-subs.[ch], app/gui.c, app/instrument-editor.c, + app/midi-settings-09x.c, app/playlist.c, app/sample-editor.c, + app/transposition.c: Extended spin button code is optimized (an + attempt to improve the interactivity). But this seems not to be the + cause... + +2018-06-13 Yury Aliaev + + * app/cheat-sheet.c, app/clavier.c, app/gui-settings.c, app/gui-subs.c, + app/gui.c, app/playlist.c, app/sample-display.c, app/sample-editor.c, + app/scope-group.c, app/track-editor.c, app/tracker.c: Many + deprecated symbols are removed (I hope, most of them); + * app/st-subs.c, app/drivers/jack-output.c: Code cleanup (unneeded + headers); + * app/clock.c, app/scalablepic.c: Memory leaks are fixed; + * app/tracer.c: Tracer interface is now consistent with the + previous fix; + * app/cheat-sheet.c, app/envelope-box.c, app/gui.c, GBS files: The + uniform data dir entry is implemented. + +2018-06-08 Yury Aliaev + + * app/mixer.h, app/mixers/integer32.c, app/mixers/kb-x86.c: The bug + with high discretization frequences is fixed (now even 96 ksamples/s is + ok). + +2018-06-07 Yury Aliaev + + * app/sample-editor.c: Sampling dialog is rewritten to be more + convenient. + +2018-06-02 Yury Aliaev + + * app/sample-editor.c: Code optimization and cleanup. + +2018-05-31 Yury Aliaev + + * app/sample-editor.c: Stereo conversion dialogs are made more + compact; file opening/closing issues are cleaned up and fixed. + +2016-07-12 Yury Aliaev + + * app/gui-subs.c: Bugfix (wrong pointer usage). + +2014-12-21 Yury Aliaev + + * app/drivers/jack-output.c: Jack output driver now works. + +2014-12-06 Yury Aliaev + + * app/audio.c, app/cheat-sheet.c, app/drivers/jack-output.c, + app/file-operations.c, app/gui-subs.[ch], app/gui.c, + app/instrument-editor.c, app/keys.c, app/preferences.c, + app/sample-editor.c, app/xm.c: A small bug with error/warning dialogs is + fixed. + +2014-11-26 Yury Aliaev + + * app/drivers/oss.c: Fixed a crash because of incorrect buffer size. + +2014-11-22 Yury Aliaev + + * app/envelope-box.c: Bugfix (loop and sustain points are preserved + when changing current instrument). + +2014-06-01 Yury Aliaev + + * app/gui.c: Fixed switching to tracker after current module saving + from a page other than tracker. + +2014-04-12 Yury Aliaev + + * app/file-operations.[ch], app/gui.c, app/instrument-editor.c, + app/sample-editor.c: Switching back from file operations page + is improved; + * app/instrument-editor.c: Module is marked as modified when a new + instrument has been loaded. + +2014-02-25 Yury Aliaev + + * app/gui.c: Small GUI fixes. + +2013-11-22 Yury Aliaev + + * app/audioconfig.c: Postponed bugfix and code cleanup. + +2013-10-27 Yury Aliaev + + * app/mixers/kbfloat-mix.c: Removed unused NO_GASP conditional; + * app/audio.[ch], app/audioconfig.c, app/driver-inout.h, app/driver.h, + app/sample-editor.[ch], app/drivers/alsa1x.c, app/drivers/dsound-output.c, + app/drivers/dummy-drivers.c, app/drivers/esd-output.c, + app/drivers/file-output.c, app/drivers/irix-output.c, app/drivers/oss.c, + app/drivers/sdl-output.c: Drivers API is cleaned up and extended for + the upcoming JACK driver ("activate" and "deactivate" methods are added). + +2013-10-16 Yury Aliaev + + * configure.in: Fixed compilation with --no-asm option. + +2013-10-13 Yury Aliaev + + * po/*: Upgrade to gettext-0.18.2, clean-ups; + * app/audio.c, app/audioconfig.c, app/gui.c, app/sample-editor.c, + configure.in: Clean-ups regarding to compilation with audiofile library + and without sample output libraries at all. + +2013-10-12 Yury Aliaev + + * app/sample-display.h: Compilation at some systems is fixed. + +2013-09-27 Yury Aliaev + + * app/drivers/esd-output.c: Error reporting is now displayed in correct + encoding. Seems there is no notable delay when working thru Pulseaudio + server. + +2013-09-23 Yury Aliaev + + * app/gui.c, app/instrument-editor.[ch], app/instrument-editor.h, + app/menubar.c, app/module-info.c, app/sample-editor.c: Some bugs related + to instruments' and samples' lists updating are fixed. + +2013-09-20 Yury Aliaev + + * app/sample-editor.c: Compilation with audiofile is fixed; + * app/audio.c, app/audio.h, app/audioconfig.c, app/drivers/file-output.c: + File output driver is now configurable (samplerate and number of channels), + sndfile and audiofile variants share a lot of code; + * app/gui.c: The buggy displaying of .wav files is fixed; + * app/file-operations.[ch], app/file-operations.h, app/gui.c, + app/instrument-editor.c, app/sample-editor.c: Tooltips are added to file + selection page toggles. + +2013-09-18 Yury Aliaev + + * app/track-editor.c: Buffer overflow is fixed (utf-8 strings require + more place); + * app/gui.[ch], app/modue-info.c: Navigation with TAB and Up/Down arrows + is implemented at Module info page; + * app/sample-editor.c, app/st-subs.[ch]: The internal truncating of samples + treated as 8 bit is removed, because it causes the significant precision + loss. The samples are now actually rounded only at module/instrument + saving. + +2013-09-17 Yury Aliaev + + * app/gui.c: The right behavior of Ctrl + A shortcut in entries is + restored; + * app/gui.c, app/instrument-editor.c, app/module-info.c, app/recode.[ch], + app/sample-editor.c, app/st-subs.[ch], app/xm-player.c, app/xm.[ch]: + Correct charachter set conversion between FT2 codeset and utf-8 is + implemented as well as correct module/instruments'/samples' name padding. + +2013-09-16 Yury Aliaev + + * app/menubar.c: The right behavior of Ctrl + C/V/X shortcuts in entries + is restored. + +2013-04-04 Yury Aliaev + + * app/file-operations.c, app/preferences.c: Code cleanups. + +2013-04-02 Yury Aliaev + + * app/main.c, app/midi-09x.c, app/midi.h, app/sample-display.c, + app/sample-editor.c: Fixed wrong memory access and leaks detected + by Valgrind. + +2013-03-30 Yury Aliaev + + * app/drivers/alsa1x.c: Error recovery is implemented (inspired by aplay.c). + +2013-03-26 Yury Aliaev + + * app/drivers/oss.c: Combined OSS driver for both input and output is done, + some bugs are fixed. OSS sampling now supports 8/16 bit, mono/stereo; + * app/drivers/alsa1x.c, app/sample-editor.c: Bugs introduced by new code are + fixed. + +2013-03-23 Yury Aliaev + + * app/driver-inout.h, app/mixer.h, app/module-info.[ch], + app/sample-display.[ch], app/sample-editor.[ch], app/drivers/oss-import.c: + Sampling at arbitrary resolution and mono/stereo mode is implemented. + Sampling functions now work a bit faster because of less memory copying. + Both recording and sample loading allow stereo samples to be stored at two + subsequent samples; + * app/drivers/alsa1x.c: (renamed from alsa1x-output.c) Recording from ALSA + is implemented as well as endianess handling. Automatic detection of + available hardware devices is added; + * app/main.c, app/menubar.c, app/midi.h, app/midi-settings-09x.c, + app/midi-settings.h, app/midi-utils.h, configure.in, Makefile.am, + app/Makefile.am: Old ALSA support is dropped. + +2013-03-22 Yury Aliaev + + * app/audioconfig.[ch], app/gui-subs.[ch], app/keys.c, app/module-info.c, + app/tracker-settings.c: Improved look, cleanups and improvments. + +2013-03-20 Yury Aliaev + + * app/clavier.[ch]: Improved sample map look when using > 16 samples. + +2013-03-14 Yury Aliaev + + * app/gui-subs.[ch], app/drivers/alsa1x-output.c: GUI helpers are moved to + gui-subs; + * app/track-editor.c: Increase/Decrease command value functions now work + better. + +2013-03-13 Yury Aliaev + + * configure.in, app/Makefile.am: Installing ST suid root is made + conditional and disabled by default; + * app/drivers/alsa1x-output.c: Warnings at device test are removed; + * app/gui.c, app/gui-subs.[ch], app/track-editor.c: Label is used as tracker + status bar (this slightly improves look). + +2013-03-11 Yury Aliaev + + * app/audioconfig.c, app/driver.h, app/gui.[ch], app/gui-settings.[ch], + app/gui-subs.c, app/instrument-editor.c, app/keys.[ch], app/main.c, + app/menubar.c, app/midi-settings-09x.c, app/preferences.[ch], + app/sample-editor.c, app/tips-dialog.c, app/tracker.[ch], + app/track-editor.c app/tracker-settings.c, app/drivers/alsa1x-output.c, + app/drivers/dsound-output.c, app/drivers/esd-output.c, + app/drivers/file-output.c, app/drivers/jack-output.c, + app/drivers/oss-input.c, app/drivers/oss-output.c, app/drivers/sdl-output.c, + app/drivers/sun-input.c, app/drivers/sun-output.c: Preferences are ported to + Glib stuff; now a single ~/.soundtracker/config file is used instead of + bunch of small files. Automatic conversion from ST-gtk1 configuration is + provided using soundtracker_convert_config script. Fixed longh paths storing. + +2013-02-21 Yury Aliaev + + * app/clavier.[ch]: Labels drawing is ported to Pango functions, + labels placement is fixed; + * app/gui.c, app/module-info.c: Fixed small bug with double calling + songname_changed() function. + +2013-02-20 Yury Aliaev + + * app/cheat-sheet.c, app/sample-editor.[ch], app/gui-subs.[ch]: Escape + closes cheat-sheet and sampling windows + related code cleanups; + * app/gui.c, app/menubar.c, app/track-editor.[ch], soundtracker.xml: + Right-click menu of track editor becomes working properly; + * app/audioconfig.c, app/gui.c, app/gui-settings.c, app/gui-subs.[ch], + app/keys.c, app/main.c, app/midi-settings-09x.c, app/sample-editor.c, + app/tips-dialog.[ch], app/tracker-settings.c, app/transposition.c: + Massive dialogs cleanup and optimization; + * app/tracker.c: Fixed slightly corrupted XM displaying (with FX + type > 35), emulating FT2 behavoiur. + +2013-02-04 Yury Aliaev + + * app/envelope-box.c: Bugfix (crashes, leaks and GTK warnings). + +2013-02-01 Yury Aliaev + + * app/gui.c: Bugfix (Instrument and Sample name entries' size). + +2013-01-28 Yury Aliaev + + * app/gui.c, app/gui-settings.c, app/gui-subs.[ch], app/playlist.c: + Tooltips are hung using proper Gtk+ interface; + * app/drivers/alsa1x-output.c: Audio delay estimation is reverted back + with appropriate tooltip. The configuting warning about ALSA 0.9 is + removed since the playback driver is working. + +2013-01-27 Yury Aliaev + + Manual page is added (taken probably from Debian project). + +2013-01-24 Yury Aliaev + + * app/gui.[ch], app/xm-player.c, app/track-editor.c, app/menubar.c, + app/xm.h: Asterisk before file name is drawn when the module has unsaved + changes; + * app/gui.c, app/cheat-sheet.c, app/sample-editor.c: Application icon + support is added; + * app/scope-group.c: Clicking at scopes is fixed (now is working properly). + +2013-01-24 Yury Aliaev + + * app/envelope-box.[ch]: Zooming (Ctrl) and horizontal scrolling (Shift) by + mouse wheel; sustain and loop lines are now dislayed. + +2013-01-22 Yury Aliaev + + * app/envelope-box.c, app/gui.c, app/gui-subs.[ch] envelope-box.xml: + right-click on the envelope point makes it current. Right click on the + envelope editor canvas (outside points) pops up the menu (currently with + zoom functions only). + +2013-01-21 Yury Aliaev + + * app/gui.c, app/instrument-editor.c, app/main.c, app/xm.[ch]: The return + value of fwrite() is handled, file errors while saving are now reported. + +2013-01-18 Yury Aliaev + + * app/envelope-box.[ch]: Goo canvas are used instead of Gnome canvas. The + last dependency on Gnome is dropped! Current point is highlit. Code is + cleaned up and bugfixed; + * app/instrument-editor.c: The bug with sliders displaying is fixed; + * app/gui-subs.[ch], app/playlist.c, app/sample-editor.c: Gtk+-2 native + function is used instead of self-made workaround. + +2012-12-19 Yury Aliaev + + * app/file-operations.c: Gtk hacks now performed at run time, no extra + headers required at compilation. + +2012-12-19 Yury Aliaev + + * app/cheat-sheet.c, app/menubar.c: XM Effects Cheat Sheet is ported from + obsolete code to libGtkHTML, thus allowing improved formating. + +2012-12-17 Yury Aliaev + + * drivers/file-output.c: The return value of some GLIBC syscalls + is checked to avoid compiler warnings and better debugging; + * app/audioconfig.c, app/gui.c, app/gui-settings.c, + app/instrument-editor.c, app/keys.c/ app/menubar.c, app/midi-settings-*.c, + app/sample-editor.c, app/track-editor.c: The code is cleaned up from + Gnome residuals (excluding Canvas stuff); + * local headers app/gettext.h and app/i18n.h are dropped in favour of + glibc/gi18n.h. + +2012-12-11 Yury Aliaev + + * app/gui-subs.c, app/transposition.c: Transposition dialog code is improved + and bugfixed. + +2012-12-10 Yury Aliaev + + * app/gui.c, app/file-operations.[ch], app/instrument-editor.c, + app/sample-editor.c: File filters are added. + +2012-12-07 Yury Aliaev + + * app/gui.c, app/audio.c, app/xm.c: The return value of some GLIBC syscalls + is checked to avoid compiler warnings and better debugging; + * app/drivers/alsa1x-output.c: Device is opened in non-block mode. + +2012-11-30 Yury Aliaev + + * app/gui.c: Measure selection is ported from deprecated to modern widgets; + * app/audio.c, app/errors.h, app/gui.c, app/gui-subs.[ch], + app/file-operations.c, app/instrument-editor.c, app/keys.c, app/preferences.c, + app/sample-editor.c, app/xm.c: Error and warning dialogs are ported from + Gnome to GTK. + +2012-11-04 Yury Aliaev + + * app/gui.c: Crash at window closing by "x" button is fixed. + +2012-11-02 Yury Aliaev + + * Makefile.am, soundtracker.xml, app/audioconfig.c, app/cheat-sheet.c, + app/file-operations.c, app/file-operations.h, app/gui-settings.c, + app/gui-subs.c, app/gui-subs.h, app/gui.c, app/gui.h, app/instrument-editor.c, + app/keys.c, app/main.c, app/menubar.c, app/menubar.h, app/module-info.c, + app/preferences.c, app/sample-editor.c, app/track-editor.c, app/track-editor.h, + app/transposition.c: Gnome menus are removed in favor of GtkBuilder. GtkPixmap + is changed into GtkImage. + +2012-10-21 Yury Aliaev + + * app/file-operations.c, app/file-operations.h, app/gui-subs.c, app/gui-subs.h, + app/gui.c, app/gui.h, app/instrument-editor.c, app/menubar.c, + app/sample-editor.c, app/xm.c, app/xm.h, configure.in: FileChooser is used for + file operations instead of FileSelection. Ctrl + S is now used for current + module saving. Single click for opening now works. + +2012-10-19 Yury Aliaev + + * app/drivers/alsa1x-output.c: Fixed wrong time estimation + code cleanups. + +2012-10-10 Yury Aliaev + + * app/tracker.[ch]: Separation bars between tracks are now being drawn correctly. + +2012-10-09 Yury Aliaev + + * app/midi-09x.c: Memory leaks are fixed. + +2012-08-15 Yury Aliaev + + * app/gui-settings.c, app/gui-settings.c, app/tracker-settings.[ch], + app/track-editor.c: Implemented current font saving, + fixed bug with font raising/lowering. + +2011-04-20 Yury Aliaev + + * app/sample-editor.c: Dialogs are cleaned up from obsolete code and + fully converted to gtk+-2; + +2008-08-08 Yury Aliaev + + * app/gui-subs.c: List selection now follows mouse pointer when left + button is pressed (just like in ST-gtk1); + * app/gui-subs.c: Lists are now strippy; + * app/drivers/jack-output.c: Jack driver crash fixed; + * app/midi-09x.c: Error warnings are now converted into current + encoding; + * app/main.c: Reduced instrument and sample lists rows height; + * app/gui-subs.c: Speeds up lists a bit; + +2008-05-04 Yury Aliaev + + * app/sample-editor.c: Raw input dialog rewritten to comply gtk+-2 + specifications; + * app/menubar.c: About_dialog using modern gtk+-2 functions; + +2008-01-09 Yury Aliaev + + * Updated NLS stuff (from 0.6.8-gtk1 branch); + * Added modern Gtk+-2.12 fixes by Bernardo Innocenti; + * Finally merged the rest of 0.6.7->0.6.8 changes with gtk+-2 branch! + +2008-01-09 Yury Aliaev + + * Ported all permanent channels related stuff. + +2007-08-21 Yury Aliaev + + * app/gui.[ch], app/track-editor.[ch]: Aftertouch recording ported from 0.6.8; + * app/sample-editor.[ch]: "Trim" and "Crop" fuctions ported from 0.6.8; + * app/xm.c: More accurate handling of non-standard XM files (from 0.6.8); + +2007-03-04 Yury Aliaev + + * app/drivers/alsa1x-out.c: Some improvements in device selection, + error dialogs. + +2007-02-25 Yury Aliaev + + * app/drivers/alsa1x-out.c: First alsa-1.x output driver + preview. Incomplete, buggy, imperfect but _working_! + +2006-11-11 Frank Haferkorn + + * app/*.c: + fixed compiler warnings that are related to illegal signedness + sometimes the fix by casting from guint8 to (char*) + could better be done by changing the declaration of the variables from guint8 to gint8 + simply look for "(char*)" and modify the type of the variables (like 'a[]' and 'b[]') + +2006-11-10 Yury Aliaev + + * app/gui.c: Fixed issue with catching focus at the startup. + +2006-11-03 Frank Haferkorn + + * app/drivers/file-output.c: + line 410: removed an gcc error when compiling without sndfile package + + * app/drivers/jack-output.c: + the change suggested by "Erik de Castro Lopo" + #define INT16_MAX 32767.0f + collided with + define INT16_MAX (32767) + of included file + /usr/include/stdint.h + lines 62 and 66 were modified to "INT16_MAX_float" + +2006-10-22 Yury Aliaev + + * app/clock.[ch]: removed the unused code. + +2006-10-14 Yury Aliaev + + * Some more obsolete gtk+-1 functions removed by gtk+-2 stuff. + * app/clock.[ch]: The clock is kept back! (Code was taken from gtk+-1 + by Miroslav Shatlev and ported to gtk+-2 by me). + +2006-09-28 Yury Aliaev + + * Added patch from Miroslav increasing the number of the samples + per instrument up to 128. + +2006-09-07 Yury Aliaev + + * Fixed yet another gettext issue (make update-po now works). + * app/audioconfig.c: fixed driver initializing/shutdown issues. + +2006-08-30 Yury Aliaev + + * Fixed bug with jack enabling in ./configure when it's + installed, but disabled thru --disable-jack (thanks Elias + Pschernig for its diagnostics). + +2006-08-14 Yury Aliaev + + * Fixed some strange autotools/gettext issues. Now "make + install" works correctly. + * MIDI issue fixed (port from ST-0.6.8). + +2006-08-20 gettextize + + * Makefile.am (SUBDIRS): Remove intl. + (ACLOCAL_AMFLAGS): New variable. + (EXTRA_DIST): Add m4/ChangeLog. - * app/mixers/midi.c, midi-settings.[ch], midi-utils.c: Updates - from Luc Tanguay; The MIDI Settings dialog box now includes a page - for Output parameters (for future dev.) and one for Misc - parameters. This last page has one parameter for now: debug level - (to allow MIDI users to see the MIDI events SoundTracker is - receiving). Will be useful when MIDI events will be assignable to - SoundTracker commands. +2006-08-14 Yury Aliaev - * app/mixers/kb-x86.c (kb_x86_mix_sub): Remove g_assert(pos >= - ch->sample->loopstart). This is simply not true for short loops. + * app/tracker.c: minor bug with tracker background drawing is + fixed. + * Tracker colors configuration dialog added. Now all tracker + elements (background, highlightings, notes, barc, etc) can be + painted with every color. -2000-09-28 Michael Krause +2006-08-12 Yury Aliaev + * app/tracker.[ch] now contain only Gtk+-2 compilant code. Font - * Released v0.6.0 -- the first officially stable version ever :) + selection now works for the tracker. - * po: Updated ja.po + * Fixed issue regarding tracker line format saving in + app/gui-settings.c (this has also removed compiler warning). -2000-09-27 Michael Krause +2006-01-21 Yury Aliaev - * app/sample-editor.c, app/xm.c: Added various pointer arithmetic - changes due to the recent change of sample.data from void* to - gint16*. Fixes some crashes.. + * app/audioconfig.c rewritten. Less hacks, less size, better + gtk+-2 compilance and speed. -2000-09-26 Michael Krause +2005-12-21 Yury Aliaev + * Completed gtk_clist -> gtk_treeview porting. - * app/midi-settings.c (midi_load_config): Yet another compilation - fix :) +2005-04-10 Yury Aliaev + * Fixed some issues on Gtk+-2 port. Now ST is compilled against + gtk+-2.6.4 library, and in general works. diff -Nru soundtracker-0.6.8/ChangeLog-v0.6 soundtracker-1.0.2~pre2/ChangeLog-v0.6 --- soundtracker-0.6.8/ChangeLog-v0.6 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/ChangeLog-v0.6 2006-02-25 13:46:58.000000000 +0000 @@ -0,0 +1,807 @@ +2006-02-25 Michael Krause + + * app/drivers/sdl-output.c: Added SDL output driver by Markku + Reunanen ; configure.in: Added SDL detection. + + * app/gui.c (gui_handle_standard_keys): GDK_ISO_Level3_Shift is + also interpreted as Alt_R now. + + * app/sample-editor.c: Added oguilyardi's and yaliaev's + 08_soundtracker-0.6.7-keeptrim.patch.bz2 which adds two new + functions: "Trim" removes silence at the beginning and the end of + the sample, and "Crop" (called "Keep" in the original patch) + deletes the unselected parts of the sample. + + * app/gui.c, app/track-editor.c: added yaliaev's + 04_soundtracker-0.6.7-editmodefix.patch.bz2, + 05_soundtracker-0.6.7-multikeyfix.patch, + 07_soundtracker-0.6.7-spacefix.patch and + soundtracker-0.6.7-xmloadfix.patch. + + * po: New Vietnamese translation by Clytie Siddall + , updated ru translation. + +2006-01-15 gettextize + + * Makefile.am (SUBDIRS): Remove intl. + (ACLOCAL_AMFLAGS): New variable. + (EXTRA_DIST): Add config.rpath, m4/ChangeLog. + +2006-01-15 Michael Krause + + * app/track-editor.c (track_editor_interpolate_fx): Improved + effect interpolator by JP . + + * app/gui.c (gui_expand_pattern): Fix typo (yaliaev, + 01_soundtracker-0.6.7-fixmessage.patch). + + * app/playlist.c (playlist_new): Make "Len" and "Rstrt" strings + localizable (yaliaev, 00_soundtracker-0.6.7-plcleanup.patch). + + * app/track-editor.c (track_editor_handle_keys): Applied + soundtracker-0.6.7-insdel.patch from Yury. (GDK_Insert works only + if no modifier keys are pressed). + + * app/st-subs.c (st_sample_{8,16}bit_signed_unsigned): Rewrote + undefined code for gcc-4.1 (David Binderman ) + + * configure.in: Removed unnecessary check for 'sed'. + + * po: Updated translations de, es, fr, sv; new Kinyarwanda + translation (rw.po) by Steven Michael Murphy , + new Turkish translation (tr.po) by Aysun Kiran + . + + * configure.in, app/mixers/Makefile.am: Made x86-assembly mixer + code disabled by default. I tried to compile it today, and it + totally garbles the samples (gcc 3.4.4). + +2005-05-07 Michael Krause + + * app/xm.c (xm_load_xm_samples): If a sample slot is empty, take + care to really clean the sample structure (only keep the + name). Otherwise, the sample editor may crash (reported by + ) + + * app/midi-09x.c: Removed call to + snd_seq_port_subscribe_free(port_sub), because it has been + allocated on the stack via _alloca(). Fixes crash on startup. + +2004-02-18 Yury Aliaev + + * Permanent channels support is implemented. Channels marked as + "permanent" work as if they are being played from the very + beginning of the module, even if the module is played from any + random place (any samples which might have been triggered before + the current song position will be started at the right position + when clicking "Play Song"). + +2004-01-22 Jaan Pullerits + + * app/gui.c: Fixed the bug caused by my previous changes which + made the space key to work incorrectly... :) + + * app/track-editor.c: Added bugfix by yaliaev which makes the + cursor to jump to first jazz enabled channel when trying to insert + notes on non-jazz channels. + + * app/track-editor.c, gui.c: Now right shift doesn't start module + recording. The recording is started by pressing pattern/track play + keys (ctrl, altgr) while holding the shift at the same time. + +2004-01-19 Jaan Pullerits + + * app/track-editor.c, app/track-editor.c: Implemented note + recording with support of recording keyrelease notes. + + * app/gui.c, app/gui.h: Made play_song() non-static to use it in + track-editor.c + + * app/menubar.c: Added "Record aftertouch" to edit menu. + +2004-01-11 Michael Krause + + * Released v0.6.7 + + * app/sample-editor.c: When copying a sample and pasting into an + empty one, the settings for volume, finetune, panning and relnote + are transferred, too. + + * Added patch from Yury for a more general Cut/Copy/Paste + handling. Now there's only one such set of functions in the Edit + menu, the functionality of which depends on the currently active + notebook page (tracker / instrument / sample editor). + + * app/xm.c (xm_load_xm_pattern): Handling non-standard pattern + header sizes (yaliaev) + + * app/gui.c (gui_final): Default octave is now 3 instead of 5, so + that freshly loaded samples can be triggered at their original + speed with the Q key. + + * app/sample-editor.c: Cleaned up sndfile / audiofile code (a lot + of stuff was previously duplicated via #if's), fixed saving of + 8-bit samples via libsndfile. When loading raw samples (when + compiled with libsndfile), we ask the user for the sampling + frequency now, just like in the case of libaudiofile. Also fixed + loading of 8-bit samples (treat_as_8bit is now set correctly). + + * app/gui.c (gui_playlist_position_changed): Fixed handling of the + "Lock edited pattern" button (problem reported by yaliaev). + +2004-01-04 Michael Krause + + * app/track-editor.c (track_editor_do_the_note_key): Added patch + from yaliaev which removes cursor horizontal displacement when you + try some tune at the keyboard in jazz mode (of course, only if ST + not in the editing mode, jazz editing mode works just like + before). + + * Added soundtracker-0.6.7pre6-patexpshrink.patch.bz2 from + yaliaev, providing vertical pattern expansion / shrinking. + + * app/gui.c, app/keys.c, app/playlist.c: Fix some gcc-3.2 + warnings (yaliaev). + + * app/cheat-sheet.c, app/gui.c, app/instrument-editor.c: Add some + #includes for non-GNOME version, fix for measure selection window + (yaliaev). + + * configure.in, app/mixers/Makefile.am, app/mixers/kb-x86-asm.S: + Added patch from yaliaev to remove dependency of soundtracker on + gasp. + +2003-10-27 Michael Krause + + * po: Updated it, ja, pl, ru translations. Added sk (slovakian) + translation. + +2003-08-04 Michael Krause + + * "Released" soundtracker-0.6.7pre6 (without official + announcement). + + * app/gui.c, app/gui-settings.c, app/menubar.c, *.xpm: Added patch + from yaliaev: Nice icons in the control panel, Direct access to + accidentals and row highlighting configuration from the control + panel, Option to allow/prevent edited pattern from changing when + browsing in the playlist. + + * app/st-subs.c (st_sample_16bit_signed_unsigned): Fixed + signed->unsigned conversion (tugruettmueller). + + * app/playlist.c (playlist_insert_pattern): Emitting + SONG_LENGTH_CHANGED signal after inserting new pattern. Fixes + incorrect XM playlist update handling when inserting + patterns. (reported by yaliaev). + +2003-07-05 Tomasz Maka + + * app/gui.c, app/file-operations.[ch]: Function for refresh + (fileops_refresh_list) file/dir list in file requesters was added. + +2003-06-29 Michael Krause + + * app/gui.c (gui_final): Add tooltips to pitchbend and + amplification sliders (yaliaev). + + * app/audio.c (audio_mix): Fix memset at the end of file + rendering, clearing the unrendered part of the mixing buffer + (yaliaev). This fix might contribute to stabilizing the WAV export + which has been reported to be unstable by some people. + + * po: Updated fr, it, sv translations. + +2003-05-24 Michael Krause + + * "Released" soundtracker-0.6.7pre5 (without official + announcement). + + * app/main.c (main): Calling gui_play_stop() before quitting, so + that the audio driver is shut down correctly (for JACK). + + * app/keys.c, app/gui.c: Defined two new keys for "increase / + decrease jump value" (yaliaev). + + * app/keys.c, app/track-editor.c: Defined quick-jump keys to jump + to channels. Can also mute channels with keyboard when these keys + are pressed together with SPACE (yaliaev). + + * app/midi-settings.h: Removed #ifdef ALSA_DRIVER_09x around + gboolean auto_connect definition in struct midi_input_prefs. Now + SoundTracker compiles with alsa 0.5.x again. I have no idea if it + works, though. + + * configure.in: Changed GNOME detection code; new code taken from + xchat-1.8.8. The old code broke at version detection on some + systems. + + * app/st-subs.c (st_is_empty_track): Advance notes pointer in + loop. Also, the loop end condition is length > 0 instead of length + >= 0. Up to now, this function would only check if the very first + row in the pattern is non-empty, leading to patterns left out + during saving. Argh. Thanks to Henri Jylkkä for + helping to reproduce the bug. Also, CTRL-F and CTRL-G (find / copy + to unused pattern) work again now. + + * po: Updated ja.po, no.po, it.po. + + * configure.in: Under NetBSD, check if OSS driver needs -lossaudio + +2003-05-18 Michael Krause + + * app/drivers/sun-input.c, app/drivers/sun-output.c: Fixes + (wcobb). + + * configure.in: Add -lossaudio to linker options for OpenBSD OSS + emulation layer. (wcobb) + + * app/gui.c (file_selected), app/sample-editor.c, + app/instrument-editor.c: Check if a file was actually + selected. Previously, the gtk+ file selector could return with + just a directory name as 'file name', and SoundTracker would treat + that as a file to operate on, leading to strange behavior. + + * "Released" soundtracker-0.6.7pre4 (without official + announcement). + + * app/playlist.c: User can now click on playlist entries to make + them the current position (yaliaev). + + * flat.xpm, sharp.xpm: Made a bit larger (yaliaev). + + * po/POTFILES.in: Added some more source files. + + * app/Makefile.am (install-exec-local): On NetBSD and OpenBSD, the + root group is called 'wheel' (wcobb, Henri Jylkka + ). On Darwin (MacOS X), it is 'admin' + (Mathias Meyer ). + + * configure.in, app/main.c, app/drivers/Makefile.am: Sun audio + driver integration (wcobb) + +2003-05-17 Michael Krause + + * app/drivers/jack-output.c: Added patch for latest JACK CVS (by + Anthony ). + + * po: Updated it.po + + * configure.in: Rewrote some parts of configure.in and several + Makefile.am's to use AM_CONDITIONALs where they are guaranteed to + be executed. Extended several Makefile.am's to make use of + conditional compilation -- this way some '#if defined(XXX)' around + complete source files can be removed and compilation is faster. + +2003-04-27 Michael Krause + + * app/track-editor.c (tracker_timeout): Removed + g_assert(current_driver_object) and replaced it with a simple + check, because the situation tested for can actually occur + legally. + + * app/gui.c (gui_editpat_changed): gui_mixer_set_pattern() is + called here only when we are in 'playing pattern' mode. + (gui_set_current_pattern): Removed call to + gui_mixer_set_pattern(). + (offset_current_pattern): Use gtk_spin_button_set_value() to set + new pattern. + +2003-04-12 Luc Tanguay + + * Updated MIDI code to support ALSA 0.9.x. + +2003-04-03 Michael Krause + + * app/drivers/oss-{in|out}put.c: Corrected soundcard.h + inclusion. Now compiles under NetBSD (thanks Frank Knappe + and Henri Jylkka ). + +2003-03-29 Michael Krause + + * po: Updated ja.po + + * configure.in: Correct detection of ALSA v0.9, v0.5 and . + (modified patch from ltanguay). + +2003-03-09 Michael Krause + + * app/gui.c (gui_save_wav_callback, play_song): Removed + superfluous calls to gui_set_current_pattern(). + + * app/drivers/file-output.c (sndfile_new): Initializing d->sndbuf + and d->polltag to NULL. Fixes a crash when trying to save WAV via + libsndfile on my machine. + + * Fixed libsndfile detection. + + * "Released" soundtracker-0.6.7pre3 (without official + announcement). + + * Updated ja.po. + +2003-03-08 Michael Krause + + * app/gui.c (gui_playlist_position_changed): Start event waiter + first, THEN send "set songpos" request to mixer. Fixes occasional + hanging playlist display when changing playlist position manually + during playback. + + * app/drivers/sun-input.c, app/drivers/sun-output.c: From Wilbern + Cobb. Integration with configure.in is still missing. + + * app/drivers/oss-input.c, app/drivers/oss-output.c, configure.in: + Including {sys/|machine/|}/soundcard.h depending on which + is present (wcobb). + + * app/menubar.c: Added toggleitem for disabling the splash screen + (i.e., automatically closing it). + + * app/gui-subs.c (gui_hang_tooltip): Only allocate GtkTooltips + once. + + * app/gui.c (gui_insert_free_pattern, + gui_insert_free_pattern_and_copy): Cleaned up, checking for + maximum playlist length. + + * app/gui-subs.c (gui_update_adjustment): Use gfloat for p instead + of int. Fixes some weird position jumping in the new playlist + editor when deleting or inserting items. Moved from gui-subs.c to + playlist.c, because it is playlist-specific. + + * app/playlist.c: Merged playlist_insert_pattern() and + playlist_insert_clicked(). + + * app/playlist.[ch], app/gui.[ch]: New FastTracker-style playlist + editor by Yury. + +2003-03-02 Michael Krause + + * "Released" soundtracker-0.6.7pre2 (without official + announcement). + + * Added patch from Yury for correcting + right-mouse-button-over-scopes semantics to agree with FT2. + + * Added patch from Yury for displaying a pixmap for a muted + channel instead of a zero line only. Fixed this for the case when + no actual PNG file is installed. + + * Added patch from Yury for B<->H note name switching and + flat/sharp notation selection. I downscaled the provided icons to + a height of 16 pixels to agree with the standard GNOME stockicon + size. + + * Added patch from Yury for handling arbitary XM instrument header + sizes in xm.c::xm_load_xm_instrument(). + + * Added patch from Yury adding some gettext() calls here and there + to actually translate strings. + + * Added patch from Yury for XP pattern import/export. + + * Added patch from Tomasz Maka . + + app/tracker.c: Channel numbers are more useful now + (centered above track on a separate line) + + app/tracker.[ch], app/gui.c: Different cursor color + in edit mode. + + * Added norwegian translation by Petter Johan Olsen + . Updated russian translation by Yury. + + * Added latest version of JACK output driver. Changes: + + Multiple clients: soundtracker_0-9 + + Output ports renamed: out_1, out_2 + + Driver release now waits for declicking to finish + + GUI issues fixed + + no slave transport mode + + master mode is not saved in the config by choice + (by Anthony ) + +2003-02-02 Michael Krause + + * "Released" soundtracker-0.6.7pre1 (without official + announcement). + + * New danish translation (da.po) by Keld Simonsen . + + * app/gui.c (gui_update_title): Rewritten using g_strdup_printf() + and g_basename(), fixes a crash when starting ST with a module + filename as command line argument. + + * Applied patch from Anthony Van Groningen adding + JACK support to SoundTracker. Some configure.in / Makefile fixes + for this by Kai Vehmanen . + + * Spent some hours getting the autoconf stuff to work with the + latest autoconf-2.57 / automake-1.7.2. I hate this. + + * Applied patch from Erik de Castro Lopo + implementing libsndfile support in addition to + libaudiofile. libsndfile is now default, and if it is not found, + libaudiofile is used. + +2002-10-20 Michael Krause + + * app/file-operations.c (fileops_filesel_pre_insertion / + post_removal): Only hide confirm area (OK and Cancel buttons) if + this is a single-click dialog. In the save dialogs, we need these + buttons (reported by qmax). + + * app/playlist.c (playlist_delete_clicked): Was buggy when delete + the very last playlist entry (garbled the last-but-one playlist + entry). + +2002-09-18 Michael Krause + + * app/tracker.c (tracker_button_press): Now you can use your loved + mouse wheel to scroll through the patterns, just like Up and Down + arrows. But not only. Holding Left Shift and turning the wheel, + you can scroll left and right throug the pattern, as if you use + the scrollbar below the tracker window. (yaliaev) + + * app/sample-editor.c: When a raw sample is loaded, a combo box + shows up and asks for the sampling rate. The default value is set + to 8363, but you can also select another predefined value or enter + one by hand. Also, the standard note is changed from C-6 to C-4, + so a 8363 Hz sample will now result in realnote=0; finetune=0; and + a 44100 Hz one in realnote=29; finetune=-28. (tugruettmueller) + + * app/gui.c: Write the name of the module being edited in the main + window title. (yaliaev) + +2002-08-17 Michael Krause + + * In various files, added GPOINTER_TO_INT() and GINT_TO_POINTER() + macro calls. In the assembler files, added _C_LABEL() macro to + handle differing OS conventions for label prefixes. Makes ST work + on OpenBSD/sparc64 and OpenBSD/i386 (by wcobb). + + * app/xm.c (xm_freq_note_to_relnote_finetune): Forcing finetune + into interval [-63,+63], removed restriction for relnote in + [-96,+96] (by tugruettmueller). + + * app/gui.c (gui_numchans_changed): Round down odd channel numbers + when entered manually (by yaliaev). + (gui_handle_standard_keys): Shift + Crsr Left / Right browses + playlist (by yaliaev). + +2002-07-20 Michael Krause + + * app/playlist.c (playlist_insert_clicked): Fixed a bug that + caused "Insert" to destroy the last playlist entry. Also, we're + now inserting the current pattern instead of duplicating the + playlist entry. + +2002-07-18 Michael Krause + + * app/gui-settings.[ch]: Removed option 'Save XM saves all + non-empty patterns' and made this the default behaviour: all + non-empty patterns are always saved; if the user wants to have a + small, clean file, he can run 'Optimize Module'. + + * app/sample-display.c (sample_display_draw_data): Fixed 'sample + was displayed reversed vertically' bug once and for all. Still + wasn't working properly. + +2002-06-28 Michael Krause + + * app/sample-display.c (sample_display_draw_data): Yet another fix + to the sample display (Mardy ). + + * soundtracker.desktop: Changed 'Type' from 'Multimedia' to + 'Application'. Now SoundTracker appears in the GNOME menu again. + Reported by Bastien Nocera . + + * app/mixers/kbfloat-mix.c (CUBICMIXER_LOOP_FORWARD): Moved s0 + initialization from LOOP_START macro to both LOOP_FORWARD and + LOOP_BACKWARD, adding a missing minus sign before positionf in + LOOP_BACKWARD. Now backwards mixing is done correctly, without + noise (reported by Yury Aliaev ). + +2002-06-17 Michael Krause + + * app/gui.c (gui_splash): Calling gdk_rgb_init() after + gnome_init(), which is officially required, but the splash screen + happened to work on my installation nevertheless, just not on some + others.. + + * po: Updated fr, ja, sv, ru, it. New croation translation (hr.po) + by Denis Lackovic . + + * app/transposition.c (transposition_transpose_notes_sub): + "Current Instrument" and "All Instruments" modes were swapped + (reported by Michal Seta ) + + * app/tips-dialog.c: Actually feeding the tips through _() now + (reported by Yuri Bongiorno ) + +2002-05-20 Michael Krause + + * Released v0.6.6 + + * Oh, yeah. NLS was completely b0rken. Updated to gettext-0.10.37. + + * Released v0.6.5 + + * app/tracker.c (tracker_set_font): Test if font width and height + have sane values. Fixes crash with the 'clearlyu' font reported by + Trevor Nunes . + + * app/playlist.c: Hack to set page increment to 5.0 for the + current pos and restart pos spinbuttons. + + * app/sample-display.c: Flipped display vertically; now the + positive sample values are at the top, and the negative ones at + the bottom (patch by Mardy ). + +2002-05-17 Michael Krause + + * app/menubar.c: For non-GNOME SoundTracker, wrote some code that + converts the GNOME menu tree structure into GtkItemFactoryEntry's + at run-time, so we can finally get rid of the extra GTK+-only menu + tree and its associated translation-induced problems (maintenance + nightmare). + + * app/track-editor.c (track_editor_copy_selection): When marking a + block with CTRL-B, CTRL-C and CTRL-V (copy and cut) stop marking + automatically. This should always have been the case, but somehow + in v0.6.4 an extra CTRL-B was necessary. + + * app/menubar.c: Added selection transposition stuff. + + * app/transposition.c (transposition_transpose_selection): + Backported from CVS. + + * app/track-editor.c (track_editor_editmode_status_idle_function): + Using idle function here as well in order to workaround + gtk_label_set_text() slowness. + +2002-05-16 Michael Krause + + * app/sample-editor.c (sample_editor_set_selection_label): Moved + the actual gtk_label_set_text() to an idle function, because it + has become incredibly slow somewhere on the way to gtk+-1.2.10. + Fixes sample range selection slowness (see comment). + + * app/menubar.c: Renamed "use backing store" to "flicker-free + scrolling", which can actually be understood by non-coders. + + * app/tracker-settings.c (trackersettings_new): Button relayout. + + * app/gui-settings.c: Removed AA canvas option. Removed channel + numbering option (hey, removing superfluous preferences is a good + thing). Renamed some other options. + + * app/envelope-box.c (envelope_box_new): Always using standard + non-antialiased canvas. With GNOME 1.0 and GNOME 1.2, AA canvas is + buggy; with GNOME 1.4, it doesn't even work. + + * po: Updated fr.po. + +2002-02-17 Michael Krause + + * configure.in: Check for gdk-pixbuf >= 0.8.0 (in fact, I don't + know which is the minimum version required). Needed for splash + screen. + + * app/tips-dialog.c (tips_dialog_get_vbox): Function to create the + vbox without a window, for the splash screen. + + * app/gui.c (gui_init): Separated into gui_splash() and + gui_final(). The former displays a splash screen, and integrates + the tips. + +2002-02-09 Michael Krause + + * app/gui-settings.c (gui_settings_save_config): Moved geometry + saving from save_always() to this function. + + * app/file-operations.c (fileops_tmpclean): Removed error checks, + especially the ungraceful exit(-1) :-) + + * po: Updated fr.po (new translation by Michel Robitaille + ), added sv.po (by Christian Rose + ). + +2002-01-15 Tomasz Maka + + * app/file-operations.[ch]: Added fileops_tmpclean function to + remove ~/.soundtracker/tmp contents. + + * app/xm.c (xm_check_envelope): Set first envelope point offset to + 0. + +2002-01-13 Michael Krause + + * Actually putting config.guess and config.sub into the .tar.gz + distribution. Last time they were missing, strange. + + * app/gui.[ch]: Moved WELCOME_MESSAGE define to gui.c so that it + is internationalized (reported by Yuri Bongiorno + ). + + * app/gui-settings.c (gui_settings_save_config): Don't forget to + save scopes_buffer_size (reported by Chauk-Mean Proum + ). + + * po: Updated ru.po and it.po. + +2001-12-22 Tomasz Maka + + * app/errors.c, sample-display.c, scope-group.c: Added missing + 'string.h' headers. + + * app/xm.c: Added new st specific tmpnam function (called + 'st_tmpnam') to avoid gcc warrning. Generates temporary files in + ~/.soundtracker/tmp/ instead of in /tmp/. + + * app/gui.c (gui_handle_standard_keys): If we are in instrument or + sample editor notebook page 'Space' key stops playing without edit + mode switching. + +2001-12-08 Tomasz Maka + + * app/gui.c, gui-settings.[ch], menubar.c: Added option to save + tracker's window geometry. + + * app/module-info.c (modinfo_optimize_module): Module optimize + function has small info requester now. + +2001-12-07 Tomasz Maka + + * app/sample-editor.c (sample_editor_set_selection_label): When + selection exist length label show size of selected block instead + of entire sample size. + + * app/sample-editor.c: Ask user for action if saving file + (sample or region) already exist. + +2001-08-25 Michael Krause + + * po: Updated de.po and es.po. + +2001-08-12 Michael Krause + + * Released v0.6.4 + + * app/clavier.c (clavier_init): If "5x8" font can't be found, use + "fixed". + + * Added 'config.guess' and 'config.sub' files from automake + distribution (reported by Wilbern Cobb ). + +2001-08-04 Michael Krause + + * app/drivers/oss-input.c: Made "/dev/dsp" configurable. + (oss_release): Only remove polltag if polltag != 0. Fixes a glib + warning. + + * app/audioconfig.c (audioconfig_clist_select): When a different + driver is selected, don't just leave the default settings, but + load the settings from disk if there are saved settings. + +2001-07-31 Michael Krause + + * app/drivers/oss-output.c: Made "/dev/dsp" configurable. + +2001-07-25 Michael Krause + + * app/sample-editor.c (sample_editor_init_sample): If instrument + is initialized, initialize sample map with current sample number, + too. + + * app/tips-dialog.c: Added tip "Is your cursor trapped in a number + entry field? Just press Return or Tab to free yourself!". + + * soundtracker.spec: Disable ALSA when building an RPM. + + * po: Added gl.po by Xosé Anxo Pereira Torreiro + . + +2001-06-15 Michael Krause + + * app/main.c (main): On Linux, we use setresuid()/setresgid() + instead of seteuid()/setegid() in order to make gtk+-1.2.10 happy. + Otherwise, SoundTracker doesn't run if installed suid-root. + +2001-05-24 Michael Krause + + * Released v0.6.3 + + * app/audio.c (audio_ctlpipe_stop_playing): If audio_songpos_ew is + still active, confirm it. This fixes the crash that occurs when + pressing Ctrl directly after changing the playback position + (during playback), reported by Aki Kemppainen + + + * app/audioconfig.c (audioconfig_save_config): prefs_open_write() + was accidentally called with an argument "rw" instead of a real + file-name, so the audio settings never got saved!! I wonder why + nobody reported this. + +2001-03-05 Michael Krause + + * po: Updated ru.po, it.po. + +2001-01-03 Michael Krause + + * Released v0.6.2 + +2000-12-27 Michael Krause + + * app/sample-editor.c (sample_editor_save_wav_main): Check for + existence of dynamic loader functions, and use audiofile-0.2.0 + code if not. + +2000-12-23 Michael Krause + + * app/sample-editor.c (sample_editor_save_wav_main): Fix sample + format initialization for libaudiofile-0.2.0. + +2000-12-20 Michael Krause + + * app/tracker-settings.c (trackersettings_read_fontlist), + app/tracker.c (tracker_init): Default font is now 'fixed'. 7x13 + appears not to be present on all X installations (Florian Heinz + ) pointed this out. + +2000-12-16 Michael Krause + + * app/fr.po: Updated french translation (XxKarLKoXxX@aol.com) + +2000-12-09 Rob Adamson + + * app/xm.c: Escape filenames that are passed to the shell for + decompressing. + +2000-10-30 Michael Krause + + * app/gui.c (keyevent): Removed old "capture_keys" logic, and + replaced it by a simple check if the window's current focus lies + on an entry widget. Finally, the spin buttons are editable using + the keyboard! + + * app/gui.c: Replaced all gtk_spin_button_new() by + extspinbutton_new() plus disabled size hack (in order to get the + "changed" callback mentioned below into effect). + + * app/extspinbutton.c: Added option to disable the horizontal size + hack, and added "changed" callback that immediately removes focus + from widget if the value has been changed using the mouse. + +2000-10-22 Michael Krause + + * Released v0.6.1 + +2000-10-20 Michael Krause + + * po/sl.po: Added slovene translation by Matej Erman. + + * app/mixers/midi.c, midi-settings.[ch], midi-utils.c: Updates + from Luc Tanguay; The MIDI Settings dialog box now includes a page + for Output parameters (for future dev.) and one for Misc + parameters. This last page has one parameter for now: debug level + (to allow MIDI users to see the MIDI events SoundTracker is + receiving). Will be useful when MIDI events will be assignable to + SoundTracker commands. + + * app/mixers/kb-x86.c (kb_x86_mix_sub): Remove g_assert(pos >= + ch->sample->loopstart). This is simply not true for short loops. + +2000-09-28 Michael Krause + + * Released v0.6.0 -- the first officially stable version ever :) + + * po: Updated ja.po + +2000-09-27 Michael Krause + + * app/sample-editor.c, app/xm.c: Added various pointer arithmetic + changes due to the recent change of sample.data from void* to + gint16*. Fixes some crashes.. + +2000-09-26 Michael Krause + + * app/midi-settings.c (midi_load_config): Yet another compilation + fix :) diff -Nru soundtracker-0.6.8/cheat-sheet.C.txt soundtracker-1.0.2~pre2/cheat-sheet.C.txt --- soundtracker-0.6.8/cheat-sheet.C.txt 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/cheat-sheet.C.txt 2021-02-13 21:17:07.000000000 +0000 @@ -0,0 +1,41 @@ + + Standard Effects Column Volume Column (See README for modes) + --------------------------------------------------------------------- + + 0 Arpeggio 0 Do nothing (ST mode) + 1 (*) Porta up 0x10-0x50 Set volume Value-0x10 + 2 (*) Porta down 0x00-0x40 Set volume (FT2 mode) + 3 (*) Tone porta : : : + 4 (*) Vibrato 0x60-0x6f Volume slide down (-) + 5 (*) Tone porta+Volume slide 0x70-0x7f Volume slide up (+) + 6 (*) Vibrato+Volume slide 0x80-0x8f Fine vol slide down (d) + 7 (*) Tremolo 0x90-0x9f Fine vol slide up (u) + 8 Set panning 0xa0-0xaf Set vibrato speed (s) + 9 Sample offset 0xb0-0xbf Vibrato (v) + A (*) Volume slide 0xc0-0xcf Set panning (p) + B Position jump 0xd0-0xdf Panning slide left (l) + C Set volume 0xe0-0xef Panning slide right (r) + D Pattern break 0xf0-0xff Tone porta (m) + E1 (*) Fine porta up + E2 (*) Fine porta down (*) = If the data byte is zero, + E3 Set gliss control the last nonzero byte for the + E4 Set vibrato control command should be used. + E5 Set finetune + E6 Set loop begin/loop + E7 Set tremolo control =================================== + E9 Retrig note + EA (*) Fine volume slide up Non-Standard XM effects - only + EB (*) Fine volume slide down available in SoundTracker (if + EC Note cut enabled in GUI Settings) + ED Note delay - don't use if you want to + EE Pattern delay stay compatible with FastTracker. + F Set tempo/BPM ----------------------------------- + G Set global volume + H (*) Global volume slide Zxx Set LP filter cutoff frequency + K Key off Qxx Set LP filter resonance + L Set envelope position + P (*) Panning slide To switch off the filter, you must + R (*) Multi retrig note use Q00 _and_ Zff!. + T Tremor + X1 (*) Extra fine porta up + X2 (*) Extra fine porta down diff -Nru soundtracker-0.6.8/cheat-sheet.ru.txt soundtracker-1.0.2~pre2/cheat-sheet.ru.txt --- soundtracker-0.6.8/cheat-sheet.ru.txt 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/cheat-sheet.ru.txt 2021-02-13 21:17:07.000000000 +0000 @@ -0,0 +1,44 @@ + + Колонка Ñффектов Колонка громкоÑти (о режимах Ñм. README) + --------------------------------------------------------------------- + + 0 Ðрпеджио 0 Ðичего (режим ST) + 1 (*) Портаменто вверх 0x10-0x50 ГромкоÑÑ‚ÑŒ=значение-0x10 + 2 (*) Портаменто вниз 0x00-0x40 Громк.=значение (FT2) + 3 (*) Портаменто к ноте : : : + 4 (*) Вибрато 0x60-0x6f Спад громкоÑти (-) + 5 (*) Портаменто к ноте + 0x70-0x7f ÐараÑтание громк. (+) + изменение громкоÑти 0x80-0x8f Плавный Ñпад громк. (d) + 6 (*) Вибрато + 0x90-0x9f Плавный роÑÑ‚ громк. (u) + изменение громкоÑти 0xa0-0xaf Задание чаÑÑ‚. вибр. (s) + 7 (*) Тремоло 0xb0-0xbf Вибрато (v) + 8 Ð¡Ñ‚ÐµÑ€ÐµÐ¾Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ 0xc0-0xcf Ð¡Ñ‚ÐµÑ€ÐµÐ¾Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ (p) + 9 Смещение ÑÑмпла 0xd0-0xdf Смещение Ñтерео влево + A (*) Изменение громкоÑти (l, <) + B Переход к позиции 0xe0-0xef Смещение Ñтерео вправо + C УÑтановка громкоÑти (r, >) + D Обрыв паттерна 0xf0-0xff Портаменто к ноте (m) + E1 (*) Плавное порт. вверх + E2 (*) Плавное порт. вниз (*) = ЕÑли байт данных нулевой, + E3 Задание типа глиÑÑандо иÑпользуетÑÑ Ð¿Ð¾Ñледнее + E4 Задание типа вибрато ненулевое значение Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ + E5 Ð¢Ð¾Ñ‡Ð½Ð°Ñ Ð¿Ð¾Ð´Ñтройка тона команды + E6 Задание/начало цикла + E7 Задание типа тремоло =================================== + E9 Повторение ноты + EA (*) Плавн. роÑÑ‚ громкоÑти ÐеÑтандартные Ñффекты XM - доÑтупны + EB (*) Плавн. Ñпад громкоÑти только в SoundTracker (еÑли + EC Обрыв ноты включены в наÑтрйках GUI). + ED Задержка ноты ЕÑли Вам важна ÑовмеÑтимоÑÑ‚ÑŒ Ñ + EE Задержка паттерна FastTracker, не иÑпользуйте их. + F Задание темпа/BPM ----------------------------------- + G УÑтановка общ. громк. + H (*) Переход общей громк. Zxx ЧаÑтота Ñреза ФÐЧ + K ОтпуÑкание клавиши Qxx ДобротноÑÑ‚ÑŒ ФÐЧ + L Задание позиции огибающ. + P (*) Переход Ñтереопозиции Ð”Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ фильтра Ñледует + R (*) Повторение ноты + задать Q00 _и_ Zff!. + изменение громкоÑти + T Тремор + X1 (*) ОÑобо плавное портаменто вверх + X2 (*) ОÑобо плавное портаменто вниз diff -Nru soundtracker-0.6.8/compile soundtracker-1.0.2~pre2/compile --- soundtracker-0.6.8/compile 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/compile 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff -Nru soundtracker-0.6.8/config.guess soundtracker-1.0.2~pre2/config.guess --- soundtracker-0.6.8/config.guess 2006-01-14 12:29:29.000000000 +0000 +++ soundtracker-1.0.2~pre2/config.guess 2016-11-12 20:18:52.000000000 +0000 @@ -1,13 +1,12 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright 1992-2016 Free Software Foundation, Inc. -timestamp='2005-12-23' +timestamp='2016-10-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -16,26 +15,22 @@ # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). # -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to . + me=`echo "$0" | sed -e 's,.*/,,'` @@ -55,8 +50,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. +Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -106,7 +100,7 @@ trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; @@ -138,29 +132,33 @@ UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -if [ "${UNAME_SYSTEM}" = "Linux" ] ; then +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + eval $set_cc_for_build - cat << EOF > $dummy.c + cat <<-EOF > $dummy.c #include - #ifdef __UCLIBC__ - # ifdef __UCLIBC_CONFIG_VERSION__ - LIBC=uclibc __UCLIBC_CONFIG_VERSION__ - # else + #if defined(__UCLIBC__) LIBC=uclibc - # endif + #elif defined(__dietlibc__) + LIBC=dietlibc #else LIBC=gnu #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep LIBC= | sed -e 's: ::g'` -fi + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward @@ -170,22 +168,33 @@ # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. + # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in + earm*) + os=netbsdelf + ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null + | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? @@ -195,7 +204,14 @@ fi ;; *) - os=netbsd + os=netbsd + ;; + esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release @@ -208,34 +224,48 @@ release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; macppc:MirBSD:*:*) - echo powerppc-unknown-mirbsd${UNAME_RELEASE} + echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on @@ -245,43 +275,46 @@ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; + UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; + UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; + UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; + UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; + UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; + UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; + UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; + UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; + UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead @@ -307,12 +340,12 @@ echo s390-ibm-zvmoe exit ;; *:OS400:*:*) - echo powerpc-ibm-os400 + echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) + arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) @@ -336,14 +369,33 @@ case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize @@ -365,7 +417,7 @@ exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} @@ -387,23 +439,23 @@ # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit ;; + exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; @@ -473,8 +525,8 @@ echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ @@ -487,7 +539,7 @@ else echo i586-dg-dgux${UNAME_RELEASE} fi - exit ;; + exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; @@ -544,15 +596,16 @@ echo rs6000-ibm-aix3.2 fi exit ;; - *:AIX:*:[45]) + *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi @@ -587,58 +640,58 @@ 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + sed 's/^ //' << EOF >$dummy.c - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = "hppa2.0w" ] + if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build @@ -651,12 +704,12 @@ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ then - HP_ARCH="hppa2.0w" + HP_ARCH=hppa2.0w else - HP_ARCH="hppa64" + HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} @@ -723,22 +776,22 @@ exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd - exit ;; + exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit ;; + exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd - exit ;; + exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd - exit ;; + exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd - exit ;; + exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; @@ -761,15 +814,15 @@ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} @@ -781,32 +834,51 @@ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; - i*:MINGW*:*) + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; + *:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; - x86:Interix*:[345]*) - echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' - exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we @@ -827,97 +899,122 @@ exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) - echo cris-axis-linux-${LIBC} + echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) - echo crisv32-axis-linux-${LIBC} + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) - echo frv-unknown-linux-${LIBC} + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; + k1om:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; - mips:Linux:*:*) + mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU - #undef mips - #undef mipsel + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel + CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips + CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^CPU/{s: ::g;p;}'`" + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^CPU/{s: ::g;p;}'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-${LIBC} - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} + mips64el:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in @@ -926,11 +1023,23 @@ *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} @@ -941,73 +1050,18 @@ sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo x86_64-unknown-linux-${LIBC} + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-${LIBC}" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-${LIBC}aout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-${LIBC}coff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-${LIBC}oldld" - exit ;; - esac - # This should get integrated into the C code below, but now we hack - if [ "$LIBC" != "gnu" ] ; then echo "$TENTATIVE" && exit 0 ; fi - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^LIBC/{s: ::g;p;}'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both @@ -1015,11 +1069,11 @@ echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. + # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) @@ -1036,7 +1090,7 @@ i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) @@ -1051,7 +1105,7 @@ fi exit ;; i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. + # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; @@ -1079,10 +1133,13 @@ exit ;; pc:*:*:*) # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit ;; + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; @@ -1117,8 +1174,18 @@ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; @@ -1131,7 +1198,7 @@ rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) @@ -1151,10 +1218,10 @@ echo ns32k-sni-sysv fi exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm @@ -1180,11 +1247,11 @@ exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + echo mips-nec-sysv${UNAME_RELEASE} else - echo mips-unknown-sysv${UNAME_RELEASE} + echo mips-unknown-sysv${UNAME_RELEASE} fi - exit ;; + exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; @@ -1194,6 +1261,12 @@ BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1203,6 +1276,18 @@ SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux${UNAME_RELEASE} + exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; @@ -1211,14 +1296,36 @@ exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - unknown) UNAME_PROCESSOR=powerpc ;; - esac + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then + if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi @@ -1227,7 +1334,10 @@ *:QNX:*:4*) echo i386-pc-qnx exit ;; - NSE-?:NONSTOP_KERNEL:*:*) + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) @@ -1246,7 +1356,7 @@ # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = "386"; then + if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" @@ -1272,13 +1382,13 @@ echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} + echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` + UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; @@ -1288,179 +1398,36 @@ echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros exit ;; - c34*) - echo c34-convex-bsd + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx exit ;; - c38*) - echo c38-convex-bsd + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi +esac cat >&2 < in order to provide the needed -information to handle your system. +If $0 has already been updated, send the following data and any +information you think might be pertinent to config-patches@gnu.org to +provide the necessary information to handle your system. config.guess timestamp = $timestamp diff -Nru soundtracker-0.6.8/config.h.in soundtracker-1.0.2~pre2/config.h.in --- soundtracker-0.6.8/config.h.in 2006-02-25 13:37:13.000000000 +0000 +++ soundtracker-1.0.2~pre2/config.h.in 2021-02-26 19:47:17.000000000 +0000 @@ -1,16 +1,16 @@ -/* config.h.in. Generated from configure.in by autoheader. */ +/* config.h.in. Generated from configure.ac by autoheader. */ -/* Set if very old ALSA driver wanted */ -#undef DRIVER_ALSA +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD -/* Set if old (v0.5) ALSA driver wanted */ -#undef DRIVER_ALSA_050 +/* Audiofile minor version for use in headers */ +#undef AUDIOFILE_VERSION -/* Set if new (v0.9) ALSA driver wanted */ -#undef DRIVER_ALSA_09x +/* Set if X11 graphics backend is used */ +#undef BACKEND_X11 -/* Set if ESD driver wanted */ -#undef DRIVER_ESD +/* Set if ALSA driver wanted */ +#undef DRIVER_ALSA /* Set if JACK support wanted */ #undef DRIVER_JACK @@ -18,6 +18,9 @@ /* Set if OSS driver wanted */ #undef DRIVER_OSS +/* Set if Pulseaudio driver wanted */ +#undef DRIVER_PULSE + /* Set if SDL audio driver wanted */ #undef DRIVER_SDL @@ -31,11 +34,14 @@ language is requested. */ #undef ENABLE_NLS -/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the +/* Set if gtk hacks are used */ +#undef GTK_HACKS + +/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT -/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE @@ -43,21 +49,18 @@ */ #undef HAVE_DCGETTEXT -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the `esd_play_stream' function. */ -#undef HAVE_ESD_PLAY_STREAM - /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT -/* Define if you have the iconv() function. */ +/* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H +/* Define to 1 if you have the `asound' library (-lasound). */ +#undef HAVE_LIBASOUND + /* Define to 1 if you have the header file. */ #undef HAVE_MACHINE_SOUNDCARD_H @@ -100,15 +103,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H -/* Set if no assembler support is wanted */ -#undef NO_ASM - -/* Set if not libaudiofile installed */ -#undef NO_AUDIOFILE - -/* Set to 1 if libgdkpixbuf is not present. */ -#undef NO_GDK_PIXBUF - /* Name of package */ #undef PACKAGE @@ -124,6 +118,9 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION @@ -133,8 +130,8 @@ /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS -/* Set if GNOME support is compiled in */ -#undef USE_GNOME +/* Set if GooCanvas support is compiled in */ +#undef USE_CANVAS /* Set to 1 if you wish to use libsndfile. */ #undef USE_SNDFILE @@ -142,6 +139,14 @@ /* Version number of package */ #undef VERSION -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif diff -Nru soundtracker-0.6.8/config.rpath soundtracker-1.0.2~pre2/config.rpath --- soundtracker-0.6.8/config.rpath 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/config.rpath 2019-04-29 06:38:31.000000000 +0000 @@ -2,7 +2,7 @@ # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # -# Copyright 1996-2005 Free Software Foundation, Inc. +# Copyright 1996-2016 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # @@ -25,7 +25,7 @@ # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. -# All known linkers require a `.a' archive for static linking (except M$VC, +# All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so @@ -35,9 +35,19 @@ host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -cc_basename=`echo "$CC" | sed -e 's%^.*/%%'` +# Code taken from libtool.m4's _LT_CC_BASENAME. -# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. +for cc_temp in $CC""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then @@ -47,14 +57,7 @@ aix*) wl='-Wl,' ;; - darwin*) - case "$cc_basename" in - xlc*) - wl='-Wl,' - ;; - esac - ;; - mingw* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' @@ -62,40 +65,74 @@ irix5* | irix6* | nonstopux*) wl='-Wl,' ;; - newsos6) - ;; - linux*) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in - icc* | ecc*) + ecc*) + wl='-Wl,' + ;; + icc* | ifort*) wl='-Wl,' ;; - pgcc | pgf77 | pgf90) + lf95*) + wl='-Wl,' + ;; + nagfor*) + wl='-Wl,-Wl,,' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; + xl* | bgxl* | bgf* | mpixl*) + wl='-Wl,' + ;; como) wl='-lopt=' ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + wl= + ;; + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; esac ;; + newsos6) + ;; + *nto* | *qnx*) + ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; - sco3.2v5*) + rdos*) ;; solaris*) - wl='-Wl,' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + wl='-Qoption ld ' + ;; + *) + wl='-Wl,' + ;; + esac ;; sunos4*) wl='-Qoption ld ' ;; - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + wl='-Wl,' + ;; unicos*) wl='-Wl,' ;; @@ -104,7 +141,7 @@ esac fi -# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. +# Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= @@ -112,7 +149,7 @@ hardcode_minus_L=no case "$host_os" in - cygwin* | mingw* | pw32*) + cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. @@ -120,6 +157,10 @@ with_gnu_ld=no fi ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; openbsd*) with_gnu_ld=no ;; @@ -127,23 +168,28 @@ ld_shlibs=yes if test "$with_gnu_ld" = yes; then + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in - aix3* | aix4* | aix5*) + aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we cannot use - # them. - ld_shlibs=no + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then @@ -152,7 +198,7 @@ ld_shlibs=no fi ;; - cygwin* | mingw* | pw32*) + cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' @@ -162,9 +208,22 @@ ld_shlibs=no fi ;; + haiku*) + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; netbsd*) ;; - solaris* | sysv5*) + solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then @@ -173,16 +232,23 @@ ld_shlibs=no fi ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + else + ld_shlibs=no + fi + ;; + esac + ;; sunos4*) hardcode_direct=yes ;; - linux*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - : - else - ld_shlibs=no - fi - ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : @@ -191,10 +257,8 @@ fi ;; esac - if test "$ld_shlibs" = yes; then - # Unlike libtool, we use -rpath here, not --rpath, since the documented - # option of GNU ld is called -rpath, not --rpath. - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + if test "$ld_shlibs" = no; then + hardcode_libdir_flag_spec= fi else case "$host_os" in @@ -208,7 +272,7 @@ hardcode_direct=unsupported fi ;; - aix4* | aix5*) + aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. @@ -218,13 +282,14 @@ # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done + ;; esac fi hardcode_direct=yes @@ -236,7 +301,7 @@ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 - hardcode_direct=yes + : else # We have old collect2 hardcode_direct=unsupported @@ -244,6 +309,7 @@ hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi + ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. @@ -271,14 +337,18 @@ fi ;; amigaos*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac ;; bsdi[45]*) ;; - cygwin* | mingw* | pw32*) + cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is @@ -288,33 +358,20 @@ ;; darwin* | rhapsody*) hardcode_direct=no - if test "$GCC" = yes ; then + if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else - case "$cc_basename" in - xlc*) - ;; - *) - ld_shlibs=no - ;; - esac + ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; - freebsd1*) - ld_shlibs=no - ;; - freebsd2.2*) - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - ;; - freebsd2*) + freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; - freebsd* | kfreebsd*-gnu | dragonfly*) + freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; @@ -326,24 +383,25 @@ # but as the default location of the library. hardcode_minus_L=yes ;; - hpux10* | hpux11*) + hpux10*) if test "$with_gnu_ld" = no; then - case "$host_cpu" in - hppa*64*) - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=no - ;; - ia64*) - hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) hardcode_direct=no - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes ;; *) - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. @@ -365,19 +423,25 @@ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; + *nto* | *qnx*) + ;; openbsd*) - hardcode_direct=yes - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi else - case "$host_os" in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac + ld_shlibs=no fi ;; os2*) @@ -397,8 +461,6 @@ fi hardcode_libdir_separator=: ;; - sco3.2v5*) - ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; @@ -427,14 +489,11 @@ ld_shlibs=yes fi ;; - sysv4.2uw2*) - hardcode_direct=yes - hardcode_minus_L=no - ;; - sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; - sysv5*) - hardcode_libdir_flag_spec= + sysv5* | sco3.2v5* | sco5v6*) + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' @@ -446,37 +505,59 @@ fi # Check dynamic linker characteristics -# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. +# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. +# Unlike libtool.m4, here we don't care about _all_ names of the library, but +# only about the one the linker finds when passed -lNAME. This is the last +# element of library_names_spec in libtool.m4, or possibly two of them if the +# linker has special search rules. +library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) + library_names_spec='$libname.a' ;; - aix4* | aix5*) + aix[4-9]*) + library_names_spec='$libname$shrext' ;; amigaos*) + case "$host_cpu" in + powerpc*) + library_names_spec='$libname$shrext' ;; + m68k) + library_names_spec='$libname.a' ;; + esac ;; beos*) + library_names_spec='$libname$shrext' ;; bsdi[45]*) + library_names_spec='$libname$shrext' ;; - cygwin* | mingw* | pw32*) + cygwin* | mingw* | pw32* | cegcc*) shrext=.dll + library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib + library_names_spec='$libname$shrext' ;; dgux*) + library_names_spec='$libname$shrext' ;; - freebsd1*) - ;; - kfreebsd*-gnu) + freebsd[23].*) + library_names_spec='$libname$shrext$versuffix' ;; - freebsd*) + freebsd* | dragonfly*) + library_names_spec='$libname$shrext' ;; gnu*) + library_names_spec='$libname$shrext' + ;; + haiku*) + library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) - case "$host_cpu" in + case $host_cpu in ia64*) shrext=.so ;; @@ -487,8 +568,13 @@ shrext=.sl ;; esac + library_names_spec='$libname$shrext' + ;; + interix[3-9]*) + library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) + library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= @@ -505,41 +591,62 @@ ;; linux*oldld* | linux*aout* | linux*coff*) ;; - linux*) + linux* | k*bsd*-gnu | kopensolaris*-gnu) + library_names_spec='$libname$shrext' ;; knetbsd*-gnu) + library_names_spec='$libname$shrext' ;; netbsd*) + library_names_spec='$libname$shrext' ;; newsos6) + library_names_spec='$libname$shrext' ;; - nto-qnx*) + *nto* | *qnx*) + library_names_spec='$libname$shrext' ;; openbsd*) + library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll + library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) + library_names_spec='$libname$shrext' ;; - sco3.2v5*) + rdos*) ;; solaris*) + library_names_spec='$libname$shrext' ;; sunos4*) + library_names_spec='$libname$shrext$versuffix' ;; - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + sysv4 | sysv4.3*) + library_names_spec='$libname$shrext' ;; sysv4*MP*) + library_names_spec='$libname$shrext' + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + library_names_spec='$libname$shrext' + ;; + tpf*) + library_names_spec='$libname$shrext' ;; uts4*) + library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. @@ -56,8 +53,7 @@ me=`echo "$0" | sed -e 's,.*/,,'` usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. @@ -71,8 +67,7 @@ version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. +Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -119,12 +114,18 @@ # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] @@ -147,10 +148,13 @@ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) + -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; + -bluegene*) + os=-cnk + ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 @@ -165,10 +169,10 @@ os=-chorusos basic_machine=$1 ;; - -chorusrdb) - os=-chorusrdb + -chorusrdb) + os=-chorusrdb basic_machine=$1 - ;; + ;; -hiux*) os=-hiuxwe2 ;; @@ -213,6 +217,12 @@ -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; -lynx*) os=-lynxos ;; @@ -237,59 +247,92 @@ # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ + | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | ba \ + | be32 | be64 \ | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx | dvp \ - | fr30 | frv \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ - | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ - | mips64vr | mips64vrel \ + | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ + | moxie \ | mt \ | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ - | or32 \ + | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ | pyramid \ - | sh | sh[1234] | sh[24]a | sh[24]a*eb | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b \ - | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ | we32k \ - | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) basic_machine=$basic_machine-unknown ;; - m32c) - basic_machine=$basic_machine-unknown + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -298,10 +341,21 @@ ms1) basic_machine=mt-unknown ;; - nios2 | nios2-* | nios2 | nios2-*) - basic_machine=nios2-altera + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown os=-none ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and @@ -317,65 +371,90 @@ # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ + | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* \ + | avr-* | avr32-* \ + | ba-* \ + | be32-* | be64-* \ | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | e2k-* | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ - | m32r-* | m32rle-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ + | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | riscv32-* | riscv64-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ + | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ | tron-* \ - | v850-* | v850e-* | vax-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | visium-* \ | we32k-* \ - | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ | ymp-* \ - | z8k-*) + | z8k-* | z80-*) ;; - m32c-*) + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. @@ -393,7 +472,7 @@ basic_machine=a29k-amd os=-udi ;; - abacus) + abacus) basic_machine=abacus-unknown ;; adobe68k) @@ -439,6 +518,13 @@ basic_machine=m68k-apollo os=-bsd ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -447,10 +533,35 @@ basic_machine=ns32k-sequent os=-dynix ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; c90) basic_machine=c90-cray os=-unicos ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -479,8 +590,8 @@ basic_machine=craynv-cray os=-unicosmp ;; - cr16c) - basic_machine=cr16c-unknown + cr16 | cr16-*) + basic_machine=cr16-unknown os=-elf ;; crds | unos) @@ -518,6 +629,10 @@ basic_machine=m88k-motorola os=-sysv3 ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp @@ -530,6 +645,14 @@ basic_machine=m68k-bull os=-sysv3 ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + os=$os"spe" + ;; ebmon29k) basic_machine=a29k-amd os=-ebmon @@ -633,7 +756,6 @@ i370-ibm* | ibm*) basic_machine=i370-ibm ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 @@ -672,6 +794,17 @@ basic_machine=m68k-isi os=-sysv ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; m88k-omron*) basic_machine=m88k-omron ;; @@ -683,10 +816,21 @@ basic_machine=ns32k-utek os=-sysv ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; mingw32) - basic_machine=i386-pc + basic_machine=i686-pc os=-mingw32 ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; miniframe) basic_machine=m68000-convergent ;; @@ -694,24 +838,6 @@ basic_machine=m68k-atari os=-mint ;; - mipsEE* | ee | ps2) - basic_machine=mips64r5900el-scei - case $os in - -linux*) - ;; - *) - os=-elf - ;; - esac - ;; - iop) - basic_machine=mipsel-scei - os=-irx - ;; - dvp) - basic_machine=dvp-scei - os=-elf - ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; @@ -726,6 +852,10 @@ basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -733,10 +863,18 @@ ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; + msys) + basic_machine=i686-pc + os=-msys + ;; mvs) basic_machine=i370-ibm os=-mvs ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; ncr3000) basic_machine=i486-ncr os=-sysv4 @@ -801,6 +939,12 @@ np1) basic_machine=np1-gould ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; nsr-tandem) basic_machine=nsr-tandem ;; @@ -831,6 +975,14 @@ basic_machine=i860-intel os=-osf ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; pbd) basic_machine=sparc-tti ;; @@ -875,11 +1027,12 @@ ;; power) basic_machine=power-ibm ;; - ppc) basic_machine=powerpc-unknown + ppc | ppcbe) basic_machine=powerpc-unknown ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - ppcle | powerpclittle | ppc-le | powerpc-little) + ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) @@ -889,7 +1042,7 @@ ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) + ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) @@ -902,7 +1055,11 @@ basic_machine=i586-unknown os=-pw32 ;; - rdos) + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) basic_machine=i386-pc os=-rdos ;; @@ -932,6 +1089,10 @@ sb1el) basic_machine=mipsisa64sb1el-unknown ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; sei) basic_machine=mips-sei os=-seiux @@ -943,6 +1104,9 @@ basic_machine=sh-hitachi os=-hms ;; + sh5el) + basic_machine=sh5le-unknown + ;; sh64) basic_machine=sh64-unknown ;; @@ -964,6 +1128,9 @@ basic_machine=i860-stratus os=-sysv4 ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; sun2) basic_machine=m68000-sun ;; @@ -1020,17 +1187,9 @@ basic_machine=t90-cray os=-unicos ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown @@ -1099,6 +1258,9 @@ xps | xps100) basic_machine=xps100-honeywell ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; ymp) basic_machine=ymp-cray os=-unicos @@ -1107,6 +1269,10 @@ basic_machine=z8k-unknown os=-sim ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; none) basic_machine=none-none os=-none @@ -1145,10 +1311,10 @@ we32k) basic_machine=we32k-att ;; - sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; - sparc | sparcv8 | sparcv9 | sparcv9b) + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) @@ -1192,9 +1358,12 @@ if [ x"$os" != x"" ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. + # First match some system type aliases + # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; @@ -1215,28 +1384,32 @@ # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -irx*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1275,7 +1448,7 @@ -opened*) os=-openedition ;; - -os400*) + -os400*) os=-os400 ;; -wince*) @@ -1324,7 +1497,7 @@ -sinix*) os=-sysv4 ;; - -tpf*) + -tpf*) os=-tpf ;; -triton*) @@ -1360,12 +1533,16 @@ -aros*) os=-aros ;; - -kaos*) - os=-kaos - ;; -zvmoe) os=-zvmoe ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -ios) + ;; -none) ;; *) @@ -1388,6 +1565,12 @@ # system, and we'll never get to this point. case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; *-acorn) os=-riscix1.2 ;; @@ -1397,9 +1580,24 @@ arm*-semi) os=-aout ;; - c4x-* | tic4x-*) - os=-coff - ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 @@ -1418,13 +1616,13 @@ ;; m68000-sun) os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 ;; m68*-cisco) os=-aout ;; + mep-*) + os=-elf + ;; mips*-cisco) os=-elf ;; @@ -1449,7 +1647,7 @@ *-ibm) os=-aix ;; - *-knuth) + *-knuth) os=-mmixware ;; *-wec) @@ -1554,7 +1752,7 @@ -sunos*) vendor=sun ;; - -aix*) + -cnk*|-aix*) vendor=ibm ;; -beos*) diff -Nru soundtracker-0.6.8/configure soundtracker-1.0.2~pre2/configure --- soundtracker-0.6.8/configure 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/configure 2021-02-26 19:46:35.000000000 +0000 @@ -1,81 +1,462 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59. +# Generated by GNU Autoconf 2.69 for SoundTracker 1.0.2-pre2. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# # -# Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi -DUALCASE=1; export DUALCASE # for MKS sh -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' fi +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: soundtracker-discuss@lists.sourceforge.net about your +$0: system, including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." fi -done + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` -# PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' @@ -83,146 +464,91 @@ as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop - s,-$,, - s,^['$as_cr_digits']*\n,, + s/-\n.*// ' >$as_me.lineno && - chmod +x $as_me.lineno || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" # Exit status is that of the last command. exit } - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file else - as_expr=false + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi -rm -f conf$$ conf$$.exe conf$$.file +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -231,90 +557,289 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - +test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` -exec 6>&1 - # # Initializations. # ac_default_prefix=/usr/local +ac_clean_files= ac_config_libobj_dir=. +LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Maximum number of lines to put in a shell here document. -# This variable seems obsolete. It should probably be removed, and -# only ac_max_sed_lines should be used. -: ${ac_max_here_lines=38} # Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= +PACKAGE_NAME='SoundTracker' +PACKAGE_TARNAME='soundtracker' +PACKAGE_VERSION='1.0.2-pre2' +PACKAGE_STRING='SoundTracker 1.0.2-pre2' +PACKAGE_BUGREPORT='soundtracker-discuss@lists.sourceforge.net' +PACKAGE_URL='' ac_unique_file="app/endian-conv.h" # Factoring default headers for most tests. ac_includes_default="\ #include -#if HAVE_SYS_TYPES_H +#ifdef HAVE_SYS_TYPES_H # include #endif -#if HAVE_SYS_STAT_H +#ifdef HAVE_SYS_STAT_H # include #endif -#if STDC_HEADERS +#ifdef STDC_HEADERS # include # include #else -# if HAVE_STDLIB_H +# ifdef HAVE_STDLIB_H # include # endif #endif -#if HAVE_STRING_H -# if !STDC_HEADERS && HAVE_MEMORY_H +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif -#if HAVE_STRINGS_H +#ifdef HAVE_STRINGS_H # include #endif -#if HAVE_INTTYPES_H +#ifdef HAVE_INTTYPES_H # include -#else -# if HAVE_STDINT_H -# include -# endif #endif -#if HAVE_UNISTD_H +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE NO_ASM_TRUE NO_ASM_FALSE CCAS CCASFLAGS CPP EGREP MKINSTALLDIRS USE_NLS MSGFMT GMSGFMT XGETTEXT MSGMERGE build build_cpu build_vendor build_os host host_cpu host_vendor host_os INTL_MACOSX_LIBS LIBICONV LTLIBICONV INTLLIBS LIBINTL LTLIBINTL POSUB GTK_CONFIG GTK_CFLAGS GTK_LIBS gnomepath USE_GNOME_TRUE USE_GNOME_FALSE GDK_PIXBUF_CONFIG GDK_PIXBUF_CFLAGS GDK_PIXBUF_LIBS NO_GDK_PIXBUF_TRUE NO_GDK_PIXBUF_FALSE PKG_CONFIG ac_pt_PKG_CONFIG SNDFILE_CFLAGS SNDFILE_LIBS AUDIOFILE_CONFIG AUDIOFILE_CFLAGS AUDIOFILE_LIBS DRIVER_OSS_TRUE DRIVER_OSS_FALSE DRIVER_ALSA_TRUE DRIVER_ALSA_FALSE DRIVER_ALSA_050_TRUE DRIVER_ALSA_050_FALSE DRIVER_ALSA_09x_TRUE DRIVER_ALSA_09x_FALSE ESD_CONFIG ESD_CFLAGS ESD_LIBS DRIVER_ESD_TRUE DRIVER_ESD_FALSE ST_S_JACK_LIBS ST_S_JACK_INCLUDES DRIVER_JACK_TRUE DRIVER_JACK_FALSE DRIVER_IRIX_TRUE DRIVER_IRIX_FALSE DRIVER_SUN_TRUE DRIVER_SUN_FALSE target target_cpu target_vendor target_os SDL_CONFIG SDL_CFLAGS SDL_LIBS DRIVER_SDL_TRUE DRIVER_SDL_FALSE RANLIB ac_ct_RANLIB LIBOBJS LTLIBOBJS' +gt_needs= +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +SUID_ROOT_FALSE +SUID_ROOT_TRUE +RANLIB +DRIVER_PULSE_FALSE +DRIVER_PULSE_TRUE +PULSE_LIBS +PULSE_CFLAGS +DRIVER_SDL_FALSE +DRIVER_SDL_TRUE +SDL_LIBS +SDL_CFLAGS +SDL_CONFIG +DRIVER_SUN_FALSE +DRIVER_SUN_TRUE +DRIVER_IRIX_FALSE +DRIVER_IRIX_TRUE +DRIVER_JACK_FALSE +DRIVER_JACK_TRUE +JACK_LIBS +JACK_CFLAGS +DRIVER_ALSA_FALSE +DRIVER_ALSA_TRUE +ALSA_LIBS +ALSA_CFLAGS +DRIVER_OSS_FALSE +DRIVER_OSS_TRUE +AUDIOFILE_LIBS +AUDIOFILE_CFLAGS +SNDFILE_LIBS +SNDFILE_CFLAGS +USE_CANVAS_FALSE +USE_CANVAS_TRUE +CANVAS_LIBS +CANVAS_CFLAGS +GTK_LIBS +GTK_CFLAGS +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +POSUB +LTLIBINTL +LIBINTL +INTLLIBS +LTLIBICONV +LIBICONV +INTL_MACOSX_LIBS +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +XGETTEXT_EXTRA_OPTIONS +MSGMERGE +XGETTEXT_015 +XGETTEXT +GMSGFMT_015 +MSGFMT_015 +GMSGFMT +MSGFMT +GETTEXT_MACRO_VERSION +USE_NLS +SED +EGREP +GREP +CPP +ARFLAGS +sedpath +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_dependency_tracking +enable_nls +with_gnu_ld +enable_rpath +with_libiconv_prefix +with_libintl_prefix +enable_canvas +enable_sndfile +enable_oss +enable_alsa +with_alsa_prefix +with_alsa_inc_prefix +enable_alsatest +enable_jack +enable_sgi +enable_sun +enable_sdl +with_sdl_prefix +with_sdl_exec_prefix +enable_sdltest +enable_pulse +with_graphics_backend +enable_hacks +enable_suid_root +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +GTK_CFLAGS +GTK_LIBS +CANVAS_CFLAGS +CANVAS_LIBS +SNDFILE_CFLAGS +SNDFILE_LIBS +AUDIOFILE_CFLAGS +AUDIOFILE_LIBS +JACK_CFLAGS +JACK_LIBS +PULSE_CFLAGS +PULSE_LIBS' + # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -337,34 +862,50 @@ # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' +datarootdir='${prefix}/share' +datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' ac_prev= +ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" + eval $ac_prev=\$ac_option ac_prev= continue fi - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_option in + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; @@ -386,33 +927,59 @@ --config-cache | -C) cache_file=config.cache ;; - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) + -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - eval "enable_$ac_feature=no" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "enable_$ac_feature='$ac_optarg'" ;; + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -439,6 +1006,12 @@ -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; @@ -463,13 +1036,16 @@ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) + | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) @@ -534,10 +1110,29 @@ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -584,26 +1179,36 @@ ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package| sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "with_$ac_package='$ac_optarg'" ;; + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/-/_/g'` - eval "with_$ac_package=no" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -623,27 +1228,26 @@ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` - eval "$ac_envvar='$ac_optarg'" + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac @@ -651,31 +1255,36 @@ if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "missing argument to $ac_option" fi -# Be sure to have absolute paths. -for ac_var in exec_prefix prefix -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac -done +fi -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir do - eval ac_val=$`echo $ac_var` + eval ac_val=\$$ac_var + # Remove trailing slashes. case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -689,8 +1298,6 @@ if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -702,86 +1309,72 @@ test "$silent" = yes && exec 6>/dev/null +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_confdir=`(dirname "$0") 2>/dev/null || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then + if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 - { (exit 1); exit 1; }; } - else - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } - fi -fi -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || - { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 - { (exit 1); exit 1; }; } -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias -ac_env_CC_set=${CC+set} -ac_env_CC_value=$CC -ac_cv_env_CC_set=${CC+set} -ac_cv_env_CC_value=$CC -ac_env_CFLAGS_set=${CFLAGS+set} -ac_env_CFLAGS_value=$CFLAGS -ac_cv_env_CFLAGS_set=${CFLAGS+set} -ac_cv_env_CFLAGS_value=$CFLAGS -ac_env_LDFLAGS_set=${LDFLAGS+set} -ac_env_LDFLAGS_value=$LDFLAGS -ac_cv_env_LDFLAGS_set=${LDFLAGS+set} -ac_cv_env_LDFLAGS_value=$LDFLAGS -ac_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_env_CPPFLAGS_value=$CPPFLAGS -ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_cv_env_CPPFLAGS_value=$CPPFLAGS -ac_env_CPP_set=${CPP+set} -ac_env_CPP_value=$CPP -ac_cv_env_CPP_set=${CPP+set} -ac_cv_env_CPP_value=$CPP -ac_env_PKG_CONFIG_set=${PKG_CONFIG+set} -ac_env_PKG_CONFIG_value=$PKG_CONFIG -ac_cv_env_PKG_CONFIG_set=${PKG_CONFIG+set} -ac_cv_env_PKG_CONFIG_value=$PKG_CONFIG -ac_env_SNDFILE_CFLAGS_set=${SNDFILE_CFLAGS+set} -ac_env_SNDFILE_CFLAGS_value=$SNDFILE_CFLAGS -ac_cv_env_SNDFILE_CFLAGS_set=${SNDFILE_CFLAGS+set} -ac_cv_env_SNDFILE_CFLAGS_value=$SNDFILE_CFLAGS -ac_env_SNDFILE_LIBS_set=${SNDFILE_LIBS+set} -ac_env_SNDFILE_LIBS_value=$SNDFILE_LIBS -ac_cv_env_SNDFILE_LIBS_set=${SNDFILE_LIBS+set} -ac_cv_env_SNDFILE_LIBS_value=$SNDFILE_LIBS +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done # # Report the --help message. @@ -790,7 +1383,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. +\`configure' configures SoundTracker 1.0.2-pre2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -804,20 +1397,17 @@ --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages + -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] -_ACEOF - - cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -827,18 +1417,26 @@ For better control, use the options below. Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data [PREFIX/share] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --infodir=DIR info documentation [PREFIX/info] - --mandir=DIR man documentation [PREFIX/man] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/soundtracker] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -851,210 +1449,553 @@ System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then - + case $ac_init_help in + short | recursive ) echo "Configuration of SoundTracker 1.0.2-pre2:";; + esac cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-dependency-tracking Speeds up one-time builds - --enable-dependency-tracking Do not reject slow dependency extractors - --enable-asm Enable i386 assembly optimizations (default = off) + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths - --disable-gtktest Do not try to compile and run a test GTK program - --disable-gnome disable use of gnome - --disable-gdk-pixbuf Disable use of gdk-pixbuf (default = try) - --disable-gdk_pixbuftest Do not try to compile and run a test GDK_PIXBUF program + --disable-canvas Disable use of GooCanvas (default = try) --disable-sndfile Disable usage of libsndfile (default = try) - --disable-audiofiletest Do not try to compile and run a test Audio File Library program --disable-oss Disable OSS driver (default = try) --disable-alsa Disable ALSA driver (default = try) - --disable-esd Disable ESD driver (default = try) - --disable-esdtest Do not try to compile and run a test ESD program - --disable-jack Disable JACK support (default = try) + --disable-alsatest Do not try to compile and run a test Alsa program + --disable-jack Disable JACK support (default = try) --disable-sgi Disable SGI driver (default = try) --disable-sun Disable Sun driver (default = try) --disable-sdl Disable SDL driver (default = try) --disable-sdltest Do not try to compile and run a test SDL program + --disable-pulse Disable Pulseaudio driver (default = try) + --enable-hacks Enable Gtk+ hacks (default = no) + --enable-suid_root Install ST suid root (default = no) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-gnu-ld assume the C compiler uses GNU ld default=no + --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir - --with-gtk-prefix=PFX Prefix where GTK is installed (optional) - --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional) - --with-gdk-pixbuf-prefix=PFX Prefix where GDK_PIXBUF is installed (optional) - --with-gdk-pixbuf-exec-prefix=PFX Exec prefix where GDK_PIXBUF is installed (optional) - --with-audiofile-prefix=PFX Prefix where Audio File Library is installed (optional) - --with-audiofile-exec-prefix=PFX Exec prefix where Audio File Library is installed (optional) - --with-esd-prefix=PFX Prefix where ESD is installed (optional) - --with-esd-exec-prefix=PFX Exec prefix where ESD is installed (optional) - --with-jack=DIR Compile against JACK installed in DIR + --with-alsa-prefix=PFX Prefix where Alsa library is installed(optional) + --with-alsa-inc-prefix=PFX Prefix where include libraries are (optional) --with-sdl-prefix=PFX Prefix where SDL is installed (optional) --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional) + --with-graphics-backend=[gdk/X11] + Backend used for low-level graphics (default = X11) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory - CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have - headers in a nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + GTK_CFLAGS C compiler flags for GTK, overriding pkg-config + GTK_LIBS linker flags for GTK, overriding pkg-config + CANVAS_CFLAGS + C compiler flags for CANVAS, overriding pkg-config + CANVAS_LIBS linker flags for CANVAS, overriding pkg-config SNDFILE_CFLAGS C compiler flags for SNDFILE, overriding pkg-config SNDFILE_LIBS linker flags for SNDFILE, overriding pkg-config + AUDIOFILE_CFLAGS + C compiler flags for AUDIOFILE, overriding pkg-config + AUDIOFILE_LIBS + linker flags for AUDIOFILE, overriding pkg-config + JACK_CFLAGS C compiler flags for JACK, overriding pkg-config + JACK_LIBS linker flags for JACK, overriding pkg-config + PULSE_CFLAGS + C compiler flags for PULSE, overriding pkg-config + PULSE_LIBS linker flags for PULSE, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. +Report bugs to . _ACEOF +ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. - ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue ac_builddir=. -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # We are building in place. ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - cd $ac_dir - # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_srcdir/configure.gnu; then - echo - $SHELL $ac_srcdir/configure.gnu --help=recursive - elif test -f $ac_srcdir/configure; then - echo - $SHELL $ac_srcdir/configure --help=recursive - elif test -f $ac_srcdir/configure.ac || - test -f $ac_srcdir/configure.in; then - echo - $ac_configure --help + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } done fi -test -n "$ac_init_help" && exit 0 +test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF +SoundTracker configure 1.0.2-pre2 +generated by GNU Autoconf 2.69 -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF - exit 0 + exit fi -exec 5>config.log -cat >&5 <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -It was created by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - $ $0 $@ + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval -_ACEOF +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () { -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## --------------------------------------------------------- ## +## Report this to soundtracker-discuss@lists.sourceforge.net ## +## --------------------------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -hostinfo = `(hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by SoundTracker $as_me 1.0.2-pre2, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME @@ -1063,8 +2004,9 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS } >&5 @@ -1086,7 +2028,6 @@ ac_configure_args= ac_configure_args0= ac_configure_args1= -ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do @@ -1097,13 +2038,13 @@ -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" + as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -1119,104 +2060,115 @@ -* ) ac_must_keep_next=true ;; esac fi - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - # Get rid of the leading space. - ac_sep=" " + as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. -# WARNING: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo - cat <<\_ASBOX -## ---------------- ## + $as_echo "## ---------------- ## ## Cache variables. ## -## ---------------- ## -_ASBOX +## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, -{ +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( *) - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} + esac | + sort +) echo - cat <<\_ASBOX -## ----------------- ## + $as_echo "## ----------------- ## ## Output variables. ## -## ----------------- ## -_ASBOX +## ----------------- ##" echo for ac_var in $ac_subst_vars do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## -_ASBOX + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" echo for ac_var in $ac_subst_files do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## + $as_echo "## ----------- ## ## confdefs.h. ## -## ----------- ## -_ASBOX +## ----------- ##" echo - sed "/^$/d" confdefs.h | sort + cat confdefs.h echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 - rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status - ' 0 +' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. @@ -1224,112 +2176,138 @@ #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + # Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; esac fi else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi +gt_needs="$gt_needs " # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false -for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do +for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" - eval ac_new_val="\$ac_env_${ac_var}_value" + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -1339,47 +2317,36 @@ +am__api_version='1.15' - - - - - - - - - - - - - - - -am__api_version="1.7" ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break - elif test -f $ac_dir/install.sh; then + elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break - elif test -f $ac_dir/shtool; then + elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 -echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} - { (exit 1); exit 1; }; } -fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -1394,22 +2361,23 @@ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -1417,7 +2385,7 @@ # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -1427,30 +2395,43 @@ # program-specific install script used by HP pwplus--don't use. : else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is - # removed, or if the path is relative. + # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -1460,86 +2441,262 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 -# Just in case -sleep 1 -echo timestamp > conftest.file -# Do `set' in a subshell so we don't clobber the current shell's +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&2;} - { (exit 1); exit 1; }; } - fi + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done test "$2" = conftest.file ) then # Ok. : else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! -Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! -Check your system clock" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + +rm -f conftest.file + test "$program_prefix" != NONE && - program_transform_name="s,^,$program_prefix,;$program_transform_name" + program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && - program_transform_name="s,\$,$program_suffix,;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. # By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm conftest.sed - +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " else am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -1549,55 +2706,59 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$AWK" && break done -echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF +SHELL = /bin/sh all: - @echo 'ac_maketemp="$(MAKE)"' + @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac rm -f conftest.make fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -1610,12 +2771,53 @@ fi rmdir .tst 2>/dev/null - # test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi fi # test whether we have cygpath @@ -1629,8 +2831,8 @@ # Define the identity of the package. - PACKAGE=soundtracker - VERSION=0.6.8 + PACKAGE='soundtracker' + VERSION='1.0.2-pre2' cat >>confdefs.h <<_ACEOF @@ -1658,105 +2860,73 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' -AMTAR=${AMTAR-"${am_missing_run}tar"} +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' -install_sh=${install_sh-"$am_aux_dir/install-sh"} -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - STRIP=$ac_ct_STRIP -else - STRIP="$ac_cv_prog_STRIP" -fi -fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi - ac_config_headers="$ac_config_headers config.h" + +ac_config_headers="$ac_config_headers config.h" @@ -1768,10 +2938,10 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1781,35 +2951,37 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -1819,39 +2991,50 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1861,77 +3044,37 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi + fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1942,18 +3085,19 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. @@ -1971,24 +3115,25 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1998,39 +3143,41 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2040,66 +3187,78 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_CC" && break done - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi fi fi -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -echo "$as_me:$LINENO:" \ - "checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2111,112 +3270,108 @@ } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 - (eval $ac_link_default) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Find the output, starting from the most likely. This scheme is -# not robust to junk in `.', hence go to wildcards (a.*) only as a last -# resort. - -# Be careful to initialize this variable, since it used to be cached. -# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. -ac_cv_exeext= -# b.out is created by i960 compilers. -for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) - ;; - conftest.$ac_ext ) - # This is the source file. + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - # FIXME: I believe we export ac_cv_exeext for Libtool, - # but it would be cool to find out if it's true. Does anybody - # maintain Libtool? --akim. - export ac_cv_exeext + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. break;; * ) break;; esac done +test "$ac_cv_exeext" = no && ac_cv_exeext= + else - echo "$as_me: failed program was:" >&5 + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi - +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6 - -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -rm -f a.out a.exe conftest$ac_cv_exeext b.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6 - -echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -2224,38 +3379,90 @@ for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - export ac_cv_exeext break;; * ) break;; esac done else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6 + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2267,45 +3474,46 @@ } _ACEOF rm -f conftest.o conftest.obj -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2319,55 +3527,34 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no + ac_compiler_gnu=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -GCC=`test $ac_compiler_gnu = yes && echo yes` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -CFLAGS="-g" -echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2378,39 +3565,49 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ -ac_cv_prog_cc_g=no + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -2426,23 +3623,18 @@ CFLAGS= fi fi -echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 -echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_cv_prog_cc_stdc=no + ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include -#include -#include +struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); @@ -2465,12 +3657,17 @@ /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std1 is added to get + as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ + that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; @@ -2485,266 +3682,156 @@ return 0; } _ACEOF -# Don't try gcc -ansi; that turns off useful extensions and -# breaks some systems' header files. -# AIX -qlanglvl=ansi -# Ultrix and OSF/1 -std1 -# HP-UX 10.20 and later -Ae -# HP-UX older versions -Aa -D_HPUX_SOURCE -# SVR4 -Xc -D__EXTENSIONS__ -for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_stdc=$ac_arg -break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg fi -rm -f conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done -rm -f conftest.$ac_ext conftest.$ac_objext +rm -f conftest.$ac_ext CC=$ac_save_CC fi - -case "x$ac_cv_prog_cc_stdc" in - x|xno) - echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6 ;; +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) - echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 - CC="$CC $ac_cv_prog_cc_stdc" ;; + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : -# Some people use a C++ compiler to compile C. Since we use `exit', -# in C++ we need to declare it. In case someone uses the same compiler -# for both compiling C and C++ we need to have the C++ compiler decide -# the declaration of exit, since it's the most demanding environment. -cat >conftest.$ac_ext <<_ACEOF -#ifndef __cplusplus - choke me -#endif -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - for ac_declaration in \ - '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_declaration -#include + int main () { -exit (42); + ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -continue -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i fi - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu + DEPDIR="${am__leading_dot}deps" - ac_config_commands="$ac_config_commands depfiles" +ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. -echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi -echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } rm -f confinc confmf -# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then - enableval="$enable_dependency_tracking" +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi -fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' + am__nodep='_no' fi - - -if test "x$enable_dependency_tracking" != xno; then + if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else @@ -2754,20 +3841,20 @@ - depcc="$CC" am_compiler_list= -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. @@ -2785,6 +3872,11 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -2796,37 +3888,59 @@ : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c - : > sub/conftst$i.h + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings - # (even with -Werror). So we grep stderr for any message - # that says an option was ignored. - if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi @@ -2840,13 +3954,11 @@ fi fi -echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - -if + if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= @@ -2857,49 +3969,63 @@ fi - -if test $GCC != yes; then - echo "Fatal error: Need gcc" - exit 1 -fi - -CFLAGS="$CFLAGS -Wall" - - -# Check whether --enable-asm or --disable-asm was given. -if test "${enable_asm+set}" = set; then - enableval="$enable_asm" - asm_support=yes +# Extract the first word of "sed", so it can be a program name with args. +set dummy sed; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_sedpath+:} false; then : + $as_echo_n "(cached) " >&6 else - asm_support=no -fi; - + case $sedpath in + [\\/]* | ?:[\\/]*) + ac_cv_path_sedpath="$sedpath" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_sedpath="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -if test x$asm_support = xno; then - NO_ASM_TRUE= - NO_ASM_FALSE='#' + ;; +esac +fi +sedpath=$ac_cv_path_sedpath +if test -n "$sedpath"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sedpath" >&5 +$as_echo "$sedpath" >&6; } else - NO_ASM_TRUE='#' - NO_ASM_FALSE= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -if test x$asm_support != xno; then - # By default we simply use the C compiler to build assembly code. - -: ${CCAS='$(CC)'} -# Set ASFLAGS if not already set. -: ${CCASFLAGS='$(CFLAGS)'} - -else +# Commonly distributed binutils (e.g., Debian) comes built with +# --enable-deterministic-archives which makes ar default to option "D". +# Option "D" overrides "u" and if "u" is given a cautionary message will be +# printed. Autoconf seems to set options "cru" by default. Avoid the +# annoying message by removing "u", and, for completeness, explicitly put "D" +# as well. +ARFLAGS=crD -cat >>confdefs.h <<\_ACEOF -#define NO_ASM 1 -_ACEOF +if test $GCC != yes; then + echo "Fatal error: Need gcc" + exit 1 fi +CFLAGS="$CFLAGS -Wall -DG_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED" + ac_ext=c @@ -2907,15 +4033,15 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" @@ -2929,11 +4055,7 @@ # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -2942,78 +4064,34 @@ #endif Syntax error _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_cpp "$LINENO"; then : +else # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext - # OK, works on sane cases. Now check whether non-existent headers + # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Passes both tests. ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : break fi @@ -3025,8 +4103,8 @@ else ac_cv_prog_CPP=$CPP fi -echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do @@ -3036,11 +4114,7 @@ # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -3049,85 +4123,40 @@ #endif Syntax error _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_cpp "$LINENO"; then : +else # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext - # OK, works on sane cases. Now check whether non-existent headers + # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Passes both tests. ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c @@ -3137,31 +4166,142 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6 -if test "${ac_cv_prog_egrep+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi fi -echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 -echo "${ECHO_T}$ac_cv_prog_egrep" >&6 - EGREP=$ac_cv_prog_egrep +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" -echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -3176,51 +4316,23 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no + ac_cv_header_stdc=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : + $EGREP "memchr" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -3230,18 +4342,14 @@ if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : + $EGREP "free" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -3251,16 +4359,13 @@ if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include +#include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) @@ -3280,491 +4385,162 @@ for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); + return 2; + return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : -( exit $ac_status ) -ac_cv_header_stdc=no +else + ac_cv_header_stdc=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi + fi fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +$as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF +fi +done +ac_fn_c_check_header_mongrel "$LINENO" "sys/poll.h" "ac_cv_header_sys_poll_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_poll_h" = xyes; then : + for ac_func in poll +do : + ac_fn_c_check_func "$LINENO" "poll" "ac_cv_func_poll" +if test "x$ac_cv_func_poll" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_POLL 1 +_ACEOF +else + ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select" +if test "x$ac_cv_func_select" = xyes; then : +else + as_fn_error $? "no poll and no select?!?" "$LINENO" 5 +fi +fi +done -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF -fi -done -if test "${ac_cv_header_sys_poll_h+set}" = set; then - echo "$as_me:$LINENO: checking for sys/poll.h" >&5 -echo $ECHO_N "checking for sys/poll.h... $ECHO_C" >&6 -if test "${ac_cv_header_sys_poll_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_sys_poll_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_poll_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking sys/poll.h usability" >&5 -echo $ECHO_N "checking sys/poll.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes +#ALL_LINGUAS="da de es fr gl hr it ja no pl ru sk sl sv" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -# Is the header present? -echo "$as_me:$LINENO: checking sys/poll.h presence" >&5 -echo $ECHO_N "checking sys/poll.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else - ac_cpp_err=yes + ac_cv_path_SED=$SED fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: sys/poll.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: sys/poll.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/poll.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: sys/poll.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: sys/poll.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: sys/poll.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/poll.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: sys/poll.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/poll.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: sys/poll.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/poll.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: sys/poll.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/poll.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: sys/poll.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/poll.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: sys/poll.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for sys/poll.h" >&5 -echo $ECHO_N "checking for sys/poll.h... $ECHO_C" >&6 -if test "${ac_cv_header_sys_poll_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_sys_poll_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_sys_poll_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_poll_h" >&6 - -fi -if test $ac_cv_header_sys_poll_h = yes; then - -for ac_func in poll -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -else - echo "$as_me:$LINENO: checking for select" >&5 -echo $ECHO_N "checking for select... $ECHO_C" >&6 -if test "${ac_cv_func_select+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define select to an innocuous variant, in case declares select. - For example, HP-UX 11i declares gettimeofday. */ -#define select innocuous_select - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char select (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef select - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char select (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_select) || defined (__stub___select) -choke me -#else -char (*f) () = select; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != select; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_select=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_func_select=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_select" >&5 -echo "${ECHO_T}$ac_cv_func_select" >&6 -if test $ac_cv_func_select = yes; then - : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } + # Check whether --enable-nls was given. +if test "${enable_nls+set}" = set; then : + enableval=$enable_nls; USE_NLS=$enableval else - { { echo "$as_me:$LINENO: error: no poll and no select?!?" >&5 -echo "$as_me: error: no poll and no select?!?" >&2;} - { (exit 1); exit 1; }; } -fi - - -fi -done - - - + USE_NLS=yes fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } - - MKINSTALLDIRS= - if test -n "$ac_aux_dir"; then - case "$ac_aux_dir" in - /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; - *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; - esac - fi - if test -z "$MKINSTALLDIRS"; then - MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" - fi - - - - echo "$as_me:$LINENO: checking whether NLS is requested" >&5 -echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 - # Check whether --enable-nls or --disable-nls was given. -if test "${enable_nls+set}" = set; then - enableval="$enable_nls" - USE_NLS=$enableval -else - USE_NLS=yes -fi; - echo "$as_me:$LINENO: result: $USE_NLS" >&5 -echo "${ECHO_T}$USE_NLS" >&6 - - + GETTEXT_MACRO_VERSION=0.19 @@ -3772,15 +4548,14 @@ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } fi # Find out how to test for executable files. Don't use a zero-byte file, @@ -3799,10 +4574,10 @@ # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_MSGFMT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) @@ -3831,19 +4606,19 @@ fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then - echo "$as_me:$LINENO: result: $MSGFMT" >&5 -echo "${ECHO_T}$MSGFMT" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_GMSGFMT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GMSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) @@ -3855,43 +4630,54 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT - if test -n "$GMSGFMT"; then - echo "$as_me:$LINENO: result: $GMSGFMT" >&5 -echo "${ECHO_T}$GMSGFMT" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac + + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac + + + # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } fi # Find out how to test for executable files. Don't use a zero-byte file, @@ -3910,10 +4696,10 @@ # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_XGETTEXT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XGETTEXT+:} false; then : + $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) @@ -3942,28 +4728,33 @@ fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then - echo "$as_me:$LINENO: result: $XGETTEXT" >&5 -echo "${ECHO_T}$XGETTEXT" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi rm -f messages.po + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac + + # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } fi # Find out how to test for executable files. Don't use a zero-byte file, @@ -3982,10 +4773,10 @@ # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_MSGMERGE+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGMERGE+:} false; then : + $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) @@ -4013,39 +4804,21 @@ fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then - echo "$as_me:$LINENO: result: $MSGMERGE" >&5 -echo "${ECHO_T}$MSGMERGE" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - if test "$GMSGFMT" != ":"; then - if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && - (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then - : ; - else - GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` - echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5 -echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6 - GMSGFMT=":" - fi - fi + test -n "$localedir" || localedir='${datadir}/locale' + + + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= - if test "$XGETTEXT" != ":"; then - if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && - (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then - : ; - else - echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5 -echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6 - XGETTEXT=":" - fi - rm -f messages.po - fi - ac_config_commands="$ac_config_commands default-1" + ac_config_commands="$ac_config_commands po-directories" @@ -4065,85 +4838,103 @@ prefix="$acl_save_prefix" # Make sure we can run config.sub. -$ac_config_sub sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 -echo "$as_me: error: cannot run $ac_config_sub" >&2;} - { (exit 1); exit 1; }; } - -echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6 -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_build_alias=$build_alias -test -z "$ac_cv_build_alias" && - ac_cv_build_alias=`$ac_config_guess` -test -z "$ac_cv_build_alias" && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } -ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} - { (exit 1); exit 1; }; } +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -fi -echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac build=$ac_cv_build -build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - - -echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6 -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_host_alias=$host_alias -test -z "$ac_cv_host_alias" && - ac_cv_host_alias=$ac_cv_build_alias -ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} - { (exit 1); exit 1; }; } +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi fi -echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac host=$ac_cv_host -host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -# Check whether --with-gnu-ld or --without-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval="$with_gnu_ld" - test "$withval" = no || with_gnu_ld=yes + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no -fi; +fi + # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } fi + ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. - echo "$as_me:$LINENO: checking for ld used by GCC" >&5 -echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw @@ -4153,12 +4944,12 @@ esac case $ac_prog in # Accept absolute paths. - [\\/]* | [A-Za-z]:[\\/]*) + [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the path of ld - ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + # Canonicalize the pathname of ld + ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` + while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; @@ -4172,33 +4963,36 @@ ;; esac elif test "$with_gnu_ld" = yes; then - echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } else - echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } fi -if test "${acl_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if ${acl_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 else if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do + IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. + # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + case `"$acl_cv_path_LD" -v 2>&1 &5 -echo "${ECHO_T}$LD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 -if test "${acl_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${acl_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 else - # I'd rather use --version here, but apparently some GNU ld's only accept -v. + # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 -echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld - echo "$as_me:$LINENO: checking for shared library run path origin" >&5 -echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6 -if test "${acl_cv_rpath+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if ${acl_cv_rpath+:} false; then : + $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ @@ -4248,22 +5042,92 @@ acl_cv_rpath=done fi -echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5 -echo "${ECHO_T}$acl_cv_rpath" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" - libext="$acl_cv_libext" - shlibext="$acl_cv_shlibext" - hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" - hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" - hardcode_direct="$acl_cv_hardcode_direct" - hardcode_minus_L="$acl_cv_hardcode_minus_L" - # Check whether --enable-rpath or --disable-rpath was given. -if test "${enable_rpath+set}" = set; then - enableval="$enable_rpath" - : + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; : else enable_rpath=yes -fi; +fi + + + + + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 +$as_echo_n "checking for 64-bit host... " >&6; } +if ${gl_cv_solaris_64bit+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _LP64 +sixtyfour bits +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sixtyfour bits" >/dev/null 2>&1; then : + gl_cv_solaris_64bit=yes +else + gl_cv_solaris_64bit=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 +$as_echo "$gl_cv_solaris_64bit" >&6; } + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + + + + + @@ -4285,10 +5149,9 @@ prefix="$acl_save_prefix" -# Check whether --with-libiconv-prefix or --without-libiconv-prefix was given. -if test "${with_libiconv_prefix+set}" = set; then - withval="$with_libiconv_prefix" - +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then : + withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else @@ -4307,14 +5170,21 @@ else additional_includedir="$withval/include" - additional_libdir="$withval/lib" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi fi fi -fi; +fi + LIBICONV= LTLIBICONV= INCICONV= + LIBICONV_PREFIX= + HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= @@ -4332,7 +5202,7 @@ done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then @@ -4348,22 +5218,52 @@ found_la= found_so= found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then - found_dir="$additional_libdir" - found_so="$additional_libdir/lib$name.$shlibext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - else - if test -f "$additional_libdir/lib$name.$libext"; then - found_dir="$additional_libdir" - found_a="$additional_libdir/lib$name.$libext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done fi fi fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do @@ -4379,21 +5279,44 @@ case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then - found_dir="$dir" - found_so="$dir/lib$name.$shlibext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - else - if test -f "$dir/lib$name.$libext"; then + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then found_dir="$dir" - found_a="$dir/lib$name.$libext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done fi fi fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi ;; esac if test "X$found_dir" != "X"; then @@ -4404,7 +5327,9 @@ if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then - if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= @@ -4417,10 +5342,10 @@ if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi - if test "$hardcode_direct" = yes; then + if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else - if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do @@ -4452,7 +5377,7 @@ if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi - if test "$hardcode_minus_L" != no; then + if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" @@ -4469,8 +5394,18 @@ fi additional_includedir= case "$found_dir" in - */lib | */lib/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi additional_includedir="$basedir/include" ;; esac @@ -4519,9 +5454,11 @@ case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - if test "X$additional_libdir" != "X/usr/lib"; then + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= - if test "X$additional_libdir" = "X/usr/local/lib"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; @@ -4621,21 +5558,21 @@ done done if test "X$rpathdirs" != "X"; then - if test -n "$hardcode_libdir_separator"; then + if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" - eval flag=\"$hardcode_libdir_flag_spec\" + eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" - eval flag=\"$hardcode_libdir_flag_spec\" + eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done @@ -4664,89 +5601,63 @@ - echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5 -echo $ECHO_N "checking for CFPreferencesCopyAppValue... $ECHO_C" >&6 -if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - gt_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" - gt_save_LIBS="$LIBS" - LIBS="$LIBS -framework CoreFoundation" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -CFPreferencesCopyAppValue(NULL, NULL) - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFPreferencesCopyAppValue(NULL, NULL) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -gt_cv_func_CFPreferencesCopyAppValue=no + gt_cv_func_CFPreferencesCopyAppValue=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CPPFLAGS="$gt_save_CPPFLAGS" +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi -echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 -echo "${ECHO_T}$gt_cv_func_CFPreferencesCopyAppValue" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_CFPREFERENCESCOPYAPPVALUE 1 -_ACEOF +$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi - echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5 -echo $ECHO_N "checking for CFLocaleCopyCurrent... $ECHO_C" >&6 -if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 +$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } +if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : + $as_echo_n "(cached) " >&6 else - gt_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" - gt_save_LIBS="$LIBS" - LIBS="$LIBS -framework CoreFoundation" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include int main () { @@ -4755,47 +5666,20 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -gt_cv_func_CFLocaleCopyCurrent=no + gt_cv_func_CFLocaleCopyCurrent=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CPPFLAGS="$gt_save_CPPFLAGS" +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi -echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 -echo "${ECHO_T}$gt_cv_func_CFLocaleCopyCurrent" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_CFLOCALECOPYCURRENT 1 -_ACEOF +$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= @@ -4806,92 +5690,82 @@ - echo "$as_me:$LINENO: checking whether NLS is requested" >&5 -echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 - # Check whether --enable-nls or --disable-nls was given. -if test "${enable_nls+set}" = set; then - enableval="$enable_nls" - USE_NLS=$enableval -else - USE_NLS=yes -fi; - echo "$as_me:$LINENO: result: $USE_NLS" >&5 -echo "${ECHO_T}$USE_NLS" >&6 - - LIBINTL= LTLIBINTL= POSUB= + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi - - - - echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5 -echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6 -if test "${gt_cv_func_gnugettext1_libc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 +$as_echo_n "checking for GNU gettext in libc... " >&6; } +if eval \${$gt_func_gnugettext_libc+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + int main () { + bindtextdomain ("", ""); -return * gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - gt_cv_func_gnugettext1_libc=yes +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libc=yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -gt_cv_func_gnugettext1_libc=no + eval "$gt_func_gnugettext_libc=no" fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libc" >&5 -echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6 +eval ac_res=\$$gt_func_gnugettext_libc + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } - if test "$gt_cv_func_gnugettext1_libc" != "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then @@ -4922,132 +5796,227 @@ done - echo "$as_me:$LINENO: checking for iconv" >&5 -echo $ECHO_N "checking for iconv... $ECHO_C" >&6 -if test "${am_cv_func_iconv+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if ${am_cv_func_iconv+:} false; then : + $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include #include + int main () { iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include #include + int main () { iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi -echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5 -echo "${ECHO_T}$am_cv_func_iconv" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 +$as_echo_n "checking for working iconv... " >&6; } +if ${am_cv_func_iconv_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + am_cv_func_iconv_works=no + for ac_iconv_const in '' 'const'; do + if test "$cross_compiling" = yes; then : + case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +#ifndef ICONV_CONST +# define ICONV_CONST $ac_iconv_const +#endif + +int +main () +{ +int result = 0; + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\263"; + char buf[10]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + ICONV_CONST char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + result |= 8; + iconv_close (cd_88591_to_utf8); + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + result |= 16; + return result; -cat >>confdefs.h <<\_ACEOF -#define HAVE_ICONV 1 + ; + return 0; +} _ACEOF +if ac_fn_c_try_run "$LINENO"; then : + am_cv_func_iconv_works=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + test "$am_cv_func_iconv_works" = no || break + done + LIBS="$am_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 +$as_echo "$am_cv_func_iconv_works" >&6; } + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + +$as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then - echo "$as_me:$LINENO: checking how to link with libiconv" >&5 -echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6 - echo "$as_me:$LINENO: result: $LIBICONV" >&5 -echo "${ECHO_T}$LIBICONV" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= @@ -5059,6 +6028,11 @@ + + + + + use_additional=yes acl_save_prefix="$prefix" @@ -5073,10 +6047,9 @@ prefix="$acl_save_prefix" -# Check whether --with-libintl-prefix or --without-libintl-prefix was given. -if test "${with_libintl_prefix+set}" = set; then - withval="$with_libintl_prefix" - +# Check whether --with-libintl-prefix was given. +if test "${with_libintl_prefix+set}" = set; then : + withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else @@ -5095,14 +6068,21 @@ else additional_includedir="$withval/include" - additional_libdir="$withval/lib" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi fi fi -fi; +fi + LIBINTL= LTLIBINTL= INCINTL= + LIBINTL_PREFIX= + HAVE_LIBINTL= rpathdirs= ltrpathdirs= names_already_handled= @@ -5120,7 +6100,7 @@ done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then @@ -5136,22 +6116,52 @@ found_la= found_so= found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then - found_dir="$additional_libdir" - found_so="$additional_libdir/lib$name.$shlibext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - else - if test -f "$additional_libdir/lib$name.$libext"; then - found_dir="$additional_libdir" - found_a="$additional_libdir/lib$name.$libext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done fi fi fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do @@ -5167,21 +6177,44 @@ case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then - found_dir="$dir" - found_so="$dir/lib$name.$shlibext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - else - if test -f "$dir/lib$name.$libext"; then + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then found_dir="$dir" - found_a="$dir/lib$name.$libext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done fi fi fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi ;; esac if test "X$found_dir" != "X"; then @@ -5192,7 +6225,9 @@ if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then - if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= @@ -5205,10 +6240,10 @@ if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi - if test "$hardcode_direct" = yes; then + if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else - if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do @@ -5240,7 +6275,7 @@ if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi - if test "$hardcode_minus_L" != no; then + if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" @@ -5257,8 +6292,18 @@ fi additional_includedir= case "$found_dir" in - */lib | */lib/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi additional_includedir="$basedir/include" ;; esac @@ -5307,9 +6352,11 @@ case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - if test "X$additional_libdir" != "X/usr/lib"; then + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= - if test "X$additional_libdir" = "X/usr/local/lib"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; @@ -5409,21 +6456,21 @@ done done if test "X$rpathdirs" != "X"; then - if test -n "$hardcode_libdir_separator"; then + if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" - eval flag=\"$hardcode_libdir_flag_spec\" + eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" - eval flag=\"$hardcode_libdir_flag_spec\" + eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done @@ -5435,135 +6482,104 @@ done fi - echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5 -echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6 -if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 +$as_echo_n "checking for GNU gettext in libintl... " >&6; } +if eval \${$gt_func_gnugettext_libintl+:} false; then : + $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + int main () { + bindtextdomain ("", ""); -return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("") +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - gt_cv_func_gnugettext1_libintl=yes +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libintl=yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -gt_cv_func_gnugettext1_libintl=no + eval "$gt_func_gnugettext_libintl=no" fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + int main () { + bindtextdomain ("", ""); -return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("") +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" - LTLIBINTL="$LTLIBINTL $LTLIBICONV" - gt_cv_func_gnugettext1_libintl=yes - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi -echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5 -echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6 +eval ac_res=\$$gt_func_gnugettext_libintl + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } fi - if test "$gt_cv_func_gnugettext1_libc" = "yes" \ - || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \ + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes @@ -5586,24 +6602,22 @@ if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define ENABLE_NLS 1 -_ACEOF +$as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi - echo "$as_me:$LINENO: checking whether to use NLS" >&5 -echo $ECHO_N "checking whether to use NLS... $ECHO_C" >&6 - echo "$as_me:$LINENO: result: $USE_NLS" >&5 -echo "${ECHO_T}$USE_NLS" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 +$as_echo_n "checking whether to use NLS... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then - echo "$as_me:$LINENO: checking where the gettext function comes from" >&5 -echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 +$as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then - if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" @@ -5611,18 +6625,18 @@ else gt_source="included intl directory" fi - echo "$as_me:$LINENO: result: $gt_source" >&5 -echo "${ECHO_T}$gt_source" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 +$as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then - if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then - echo "$as_me:$LINENO: checking how to link with libintl" >&5 -echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6 - echo "$as_me:$LINENO: result: $LIBINTL" >&5 -echo "${ECHO_T}$LIBINTL" >&6 + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 +$as_echo_n "checking how to link with libintl... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 +$as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= @@ -5649,14 +6663,10 @@ fi -cat >>confdefs.h <<\_ACEOF -#define HAVE_GETTEXT 1 -_ACEOF +$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define HAVE_DCGETTEXT 1 -_ACEOF +$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi @@ -5675,61 +6685,24 @@ -# Check whether --with-gtk-prefix or --without-gtk-prefix was given. -if test "${with_gtk_prefix+set}" = set; then - withval="$with_gtk_prefix" - gtk_config_prefix="$withval" -else - gtk_config_prefix="" -fi; - -# Check whether --with-gtk-exec-prefix or --without-gtk-exec-prefix was given. -if test "${with_gtk_exec_prefix+set}" = set; then - withval="$with_gtk_exec_prefix" - gtk_config_exec_prefix="$withval" -else - gtk_config_exec_prefix="" -fi; -# Check whether --enable-gtktest or --disable-gtktest was given. -if test "${enable_gtktest+set}" = set; then - enableval="$enable_gtktest" -else - enable_gtktest=yes -fi; - for module in . "gthread" - do - case "$module" in - gthread) - gtk_config_args="$gtk_config_args gthread" - ;; - esac - done - if test x$gtk_config_exec_prefix != x ; then - gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" - if test x${GTK_CONFIG+set} != xset ; then - GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config - fi - fi - if test x$gtk_config_prefix != x ; then - gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" - if test x${GTK_CONFIG+set} != xset ; then - GTK_CONFIG=$gtk_config_prefix/bin/gtk-config - fi - fi - # Extract the first word of "gtk-config", so it can be a program name with args. -set dummy gtk-config; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_GTK_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 else - case $GTK_CONFIG in + case $PKG_CONFIG in [\\/]* | ?:[\\/]*) - ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path. + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5737,2999 +6710,1091 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_GTK_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - test -z "$ac_cv_path_GTK_CONFIG" && ac_cv_path_GTK_CONFIG="no" ;; esac fi -GTK_CONFIG=$ac_cv_path_GTK_CONFIG - -if test -n "$GTK_CONFIG"; then - echo "$as_me:$LINENO: result: $GTK_CONFIG" >&5 -echo "${ECHO_T}$GTK_CONFIG" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - min_gtk_version=1.2.2 - echo "$as_me:$LINENO: checking for GTK - version >= $min_gtk_version" >&5 -echo $ECHO_N "checking for GTK - version >= $min_gtk_version... $ECHO_C" >&6 - no_gtk="" - if test "$GTK_CONFIG" = "no" ; then - no_gtk=yes - else - GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` - GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` - gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` - gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` - gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` - if test "x$enable_gtktest" = "xyes" ; then - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $GTK_CFLAGS" - LIBS="$GTK_LIBS $LIBS" - rm -f conf.gtktest - if test "$cross_compiling" = yes; then - echo $ac_n "cross compiling; assumed OK... $ac_c" +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#include -#include -#include + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -int -main () -{ - int major, minor, micro; - char *tmp_version; - system ("touch conf.gtktest"); +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = g_strdup("$min_gtk_version"); - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { - printf("%s, bad version string\n", "$min_gtk_version"); - exit(1); - } + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - if ((gtk_major_version != $gtk_config_major_version) || - (gtk_minor_version != $gtk_config_minor_version) || - (gtk_micro_version != $gtk_config_micro_version)) - { - printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", - $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, - gtk_major_version, gtk_minor_version, gtk_micro_version); - printf ("*** was found! If gtk-config was correct, then it is best\n"); - printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); - printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); - printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); - printf("*** required on your system.\n"); - printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); - printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); - printf("*** before re-running configure\n"); - } -#if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) - else if ((gtk_major_version != GTK_MAJOR_VERSION) || - (gtk_minor_version != GTK_MINOR_VERSION) || - (gtk_micro_version != GTK_MICRO_VERSION)) - { - printf("*** GTK+ header files (version %d.%d.%d) do not match\n", - GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); - printf("*** library (version %d.%d.%d)\n", - gtk_major_version, gtk_minor_version, gtk_micro_version); - } -#endif /* defined (GTK_MAJOR_VERSION) ... */ + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" else - { - if ((gtk_major_version > major) || - ((gtk_major_version == major) && (gtk_minor_version > minor)) || - ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) - { - return 0; - } - else - { - printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", - gtk_major_version, gtk_minor_version, gtk_micro_version); - printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", - major, minor, micro); - printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); - printf("***\n"); - printf("*** If you have already installed a sufficiently new version, this error\n"); - printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); - printf("*** being found. The easiest way to fix this is to remove the old version\n"); - printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); - printf("*** correct copy of gtk-config. (In this case, you will have to\n"); - printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); - printf("*** so that the correct libraries are found at run-time))\n"); - } - } - return 1; -} - -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi -( exit $ac_status ) -no_gtk=yes fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi fi - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - if test "x$no_gtk" = x ; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - : - else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - if test "$GTK_CONFIG" = "no" ; then - echo "*** The gtk-config script installed by GTK could not be found" - echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" - echo "*** your path, or set the GTK_CONFIG environment variable to the" - echo "*** full path to gtk-config." - else - if test -f conf.gtktest ; then - : - else - echo "*** Could not run GTK test program, checking why..." - CFLAGS="$CFLAGS $GTK_CFLAGS" - LIBS="$LIBS $GTK_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 +$as_echo_n "checking for GTK... " >&6; } -int -main () -{ - return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "*** The test program compiled, but did not run. This usually means" - echo "*** that the run-time linker is not finding GTK or finding the wrong" - echo "*** version of GTK. If it is not finding GTK, you'll need to set your" - echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" - echo "*** to the installed location Also, make sure you have run ldconfig if that" - echo "*** is required on your system" - echo "***" - echo "*** If you have an old version installed, it is best to remove it, although" - echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" - echo "***" - echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" - echo "*** came with the system with the command" - echo "***" - echo "*** rpm --erase --nodeps gtk gtk-devel" +if test -n "$GTK_CFLAGS"; then + pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.24 glib-2.0 >= 2.32 gthread-2.0 gmodule-2.0 x11\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.24 glib-2.0 >= 2.32 gthread-2.0 gmodule-2.0 x11") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.24 glib-2.0 >= 2.32 gthread-2.0 gmodule-2.0 x11" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - echo "*** The test program failed to compile or link. See the file config.log for the" - echo "*** exact error that occured. This usually means GTK was incorrectly installed" - echo "*** or that you have moved GTK since it was installed. In the latter case, you" - echo "*** may want to edit the gtk-config script: $GTK_CONFIG" + pkg_failed=yes fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - GTK_CFLAGS="" - GTK_LIBS="" - { { echo "$as_me:$LINENO: error: Cannot find GTK: Is gtk-config in path?" >&5 -echo "$as_me: error: Cannot find GTK: Is gtk-config in path?" >&2;} - { (exit 1); exit 1; }; } - fi - - - rm -f conf.gtktest - - -gnome=yes -# Check whether --enable-gnome or --disable-gnome was given. -if test "${enable_gnome+set}" = set; then - enableval="$enable_gnome" - gnome=$enableval -else - gnome=yes -fi; - -if test "$gnome" = yes; then - # Extract the first word of "gnome-config", so it can be a program name with args. -set dummy gnome-config; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_gnomepath+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + else + pkg_failed=untried +fi +if test -n "$GTK_LIBS"; then + pkg_cv_GTK_LIBS="$GTK_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.24 glib-2.0 >= 2.32 gthread-2.0 gmodule-2.0 x11\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.24 glib-2.0 >= 2.32 gthread-2.0 gmodule-2.0 x11") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.24 glib-2.0 >= 2.32 gthread-2.0 gmodule-2.0 x11" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else - case $gnomepath in - [\\/]* | ?:[\\/]*) - ac_cv_path_gnomepath="$gnomepath" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_gnomepath="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - ;; -esac + pkg_failed=yes fi -gnomepath=$ac_cv_path_gnomepath - -if test -n "$gnomepath"; then - echo "$as_me:$LINENO: result: $gnomepath" >&5 -echo "${ECHO_T}$gnomepath" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - echo "$as_me:$LINENO: checking for Gnome compile flags" >&5 -echo $ECHO_N "checking for Gnome compile flags... $ECHO_C" >&6 - GNOME_CFLAGS=`$gnomepath gnomeui --cflags 2>/dev/null` - if test "_$GNOME_CFLAGS" = _ ; then - gnome=no - echo "$as_me:$LINENO: result: Gnome not found, building without it." >&5 -echo "${ECHO_T}Gnome not found, building without it." >&6 - else - echo "$as_me:$LINENO: result: ok" >&5 -echo "${ECHO_T}ok" >&6 - LIBS="$LIBS `$gnomepath gnomeui --libs 2>/dev/null`" - CFLAGS="$CFLAGS $GNOME_CFLAGS" - -cat >>confdefs.h <<\_ACEOF -#define USE_GNOME 1 -_ACEOF - - fi + else + pkg_failed=untried fi -LIBS="$LIBS $GTK_LIBS" -CFLAGS="$CFLAGS $GTK_CFLAGS" +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } -if test "x$gnome" = "xyes"; then - USE_GNOME_TRUE= - USE_GNOME_FALSE='#' +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - USE_GNOME_TRUE='#' - USE_GNOME_FALSE= + _pkg_short_errors_supported=no fi + if test $_pkg_short_errors_supported = yes; then + GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= 2.24 glib-2.0 >= 2.32 gthread-2.0 gmodule-2.0 x11" 2>&1` + else + GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= 2.24 glib-2.0 >= 2.32 gthread-2.0 gmodule-2.0 x11" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GTK_PKG_ERRORS" >&5 + as_fn_error $? "Package requirements (gtk+-2.0 >= 2.24 glib-2.0 >= 2.32 gthread-2.0 gmodule-2.0 x11) were not met: +$GTK_PKG_ERRORS -# Check whether --enable-gdk-pixbuf or --disable-gdk-pixbuf was given. -if test "${enable_gdk_pixbuf+set}" = set; then - enableval="$enable_gdk_pixbuf" - gdkpixbuf_support=no -fi; - -no_gdkpixbuf=1; -if test x$gdkpixbuf_support != xno; then - -# Check whether --with-gdk-pixbuf-prefix or --without-gdk-pixbuf-prefix was given. -if test "${with_gdk_pixbuf_prefix+set}" = set; then - withval="$with_gdk_pixbuf_prefix" - gdk_pixbuf_prefix="$withval" -else - gdk_pixbuf_prefix="" -fi; - -# Check whether --with-gdk-pixbuf-exec-prefix or --without-gdk-pixbuf-exec-prefix was given. -if test "${with_gdk_pixbuf_exec_prefix+set}" = set; then - withval="$with_gdk_pixbuf_exec_prefix" - gdk_pixbuf_exec_prefix="$withval" -else - gdk_pixbuf_exec_prefix="" -fi; -# Check whether --enable-gdk_pixbuftest or --disable-gdk_pixbuftest was given. -if test "${enable_gdk_pixbuftest+set}" = set; then - enableval="$enable_gdk_pixbuftest" - -else - enable_gdk_pixbuftest=yes -fi; - - if test x$gdk_pixbuf_exec_prefix != x ; then - gdk_pixbuf_args="$gdk_pixbuf_args --exec-prefix=$gdk_pixbuf_exec_prefix" - if test x${GDK_PIXBUF_CONFIG+set} = xset ; then - GDK_PIXBUF_CONFIG=$gdk_pixbuf_exec_prefix/gdk-pixbuf-config - fi - fi - if test x$gdk_pixbuf_prefix != x ; then - gdk_pixbuf_args="$gdk_pixbuf_args --prefix=$gdk_pixbuf_prefix" - if test x${GDK_PIXBUF_CONFIG+set} = xset ; then - GDK_PIXBUF_CONFIG=$gdk_pixbuf_prefix/bin/gdk-pixbuf-config - fi - fi +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. - # Extract the first word of "gdk-pixbuf-config", so it can be a program name with args. -set dummy gdk-pixbuf-config; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_GDK_PIXBUF_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $GDK_PIXBUF_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_GDK_PIXBUF_CONFIG="$GDK_PIXBUF_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_GDK_PIXBUF_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done +Alternatively, you may set the environment variables GTK_CFLAGS +and GTK_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables GTK_CFLAGS +and GTK_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + GTK_CFLAGS=$pkg_cv_GTK_CFLAGS + GTK_LIBS=$pkg_cv_GTK_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } - test -z "$ac_cv_path_GDK_PIXBUF_CONFIG" && ac_cv_path_GDK_PIXBUF_CONFIG="no" - ;; -esac fi -GDK_PIXBUF_CONFIG=$ac_cv_path_GDK_PIXBUF_CONFIG - -if test -n "$GDK_PIXBUF_CONFIG"; then - echo "$as_me:$LINENO: result: $GDK_PIXBUF_CONFIG" >&5 -echo "${ECHO_T}$GDK_PIXBUF_CONFIG" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - min_gdk_pixbuf_version=0.8.0 - echo "$as_me:$LINENO: checking for GDK_PIXBUF - version >= $min_gdk_pixbuf_version" >&5 -echo $ECHO_N "checking for GDK_PIXBUF - version >= $min_gdk_pixbuf_version... $ECHO_C" >&6 - no_gdk_pixbuf="" - if test "$GDK_PIXBUF_CONFIG" = "no" ; then - no_gdk_pixbuf=yes - else - GDK_PIXBUF_CFLAGS=`$GDK_PIXBUF_CONFIG $gdk_pixbufconf_args --cflags` - GDK_PIXBUF_LIBS=`$GDK_PIXBUF_CONFIG $gdk_pixbufconf_args --libs` - - gdk_pixbuf_major_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_args --version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` - gdk_pixbuf_minor_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_args --version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` - gdk_pixbuf_micro_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_config_args --version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` - if test "x$enable_gdk_pixbuftest" = "xyes" ; then - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS" - LIBS="$LIBS $GDK_PIXBUF_LIBS" - rm -f conf.gdk_pixbuftest - if test "$cross_compiling" = yes; then - echo $ac_n "cross compiling; assumed OK... $ac_c" -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#include -#include -#include -#include - -char* -my_strdup (char *str) -{ - char *new_str; - if (str) - { - new_str = malloc ((strlen (str) + 1) * sizeof(char)); - strcpy (new_str, str); - } - else - new_str = NULL; - return new_str; -} +LIBS="$LIBS $GTK_LIBS" +CFLAGS="$CFLAGS $GTK_CFLAGS" -int main () -{ - int major, minor, micro; - char *tmp_version; - system ("touch conf.gdk_pixbuftest"); +# Check whether --enable-canvas was given. +if test "${enable_canvas+set}" = set; then : + enableval=$enable_canvas; canvas=no +fi - /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = my_strdup("$min_gdk_pixbuf_version"); - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { - printf("%s, bad version string\n", "$min_gdk_pixbuf_version"); - exit(1); - } - if (($gdk_pixbuf_major_version > major) || - (($gdk_pixbuf_major_version == major) && ($gdk_pixbuf_minor_version > minor)) || - (($gdk_pixbuf_major_version == major) && ($gdk_pixbuf_minor_version == minor) && ($gdk_pixbuf_micro_version >= micro))) - { - return 0; - } - else - { - printf("\n*** 'gdk-pixbuf-config --version' returned %d.%d.%d, but the minimum version\n", $gdk_pixbuf_major_version, $gdk_pixbuf_minor_version, $gdk_pixbuf_micro_version); - printf("*** of GDK_PIXBUF required is %d.%d.%d. If gdk-pixbuf-config is correct, then it is\n", major, minor, micro); - printf("*** best to upgrade to the required version.\n"); - printf("*** If gdk-pixbuf-config was wrong, set the environment variable GDK_PIXBUF_CONFIG\n"); - printf("*** to point to the correct copy of gdk-pixbuf-config, and remove the file\n"); - printf("*** config.cache before re-running configure\n"); - return 1; - } -} +if test x$canvas != xno; then +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CANVAS" >&5 +$as_echo_n "checking for CANVAS... " >&6; } -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : +if test -n "$CANVAS_CFLAGS"; then + pkg_cv_CANVAS_CFLAGS="$CANVAS_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"goocanvas\""; } >&5 + ($PKG_CONFIG --exists --print-errors "goocanvas") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_CANVAS_CFLAGS=`$PKG_CONFIG --cflags "goocanvas" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -no_gdk_pixbuf=yes + pkg_failed=yes fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + else + pkg_failed=untried fi - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - if test "x$no_gdk_pixbuf" = x ; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS" - LIBS="$LIBS $GDK_PIXBUF_LIBS" - no_gdkpixbuf=0 - else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - if test "$GDK_PIXBUF_CONFIG" = "no" ; then - echo "*** The gdk-pixbuf-config script installed by GDK_PIXBUF could not be found" - echo "*** If GDK_PIXBUF was installed in PREFIX, make sure PREFIX/bin is in" - echo "*** your path, or set the GDK_PIXBUF_CONFIG environment variable to the" - echo "*** full path to gdk-pixbuf-config." - else - if test -f conf.gdk_pixbuftest ; then - : - else - echo "*** Could not run GDK_PIXBUF test program, checking why..." - CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS" - LIBS="$LIBS $GDK_PIXBUF_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "*** The test program compiled, but did not run. This usually means" - echo "*** that the run-time linker is not finding GDK_PIXBUF or finding the wrong" - echo "*** version of GDK_PIXBUF. If it is not finding GDK_PIXBUF, you'll need to set your" - echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" - echo "*** to the installed location Also, make sure you have run ldconfig if that" - echo "*** is required on your system" - echo "***" - echo "*** If you have an old version installed, it is best to remove it, although" - echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" +if test -n "$CANVAS_LIBS"; then + pkg_cv_CANVAS_LIBS="$CANVAS_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"goocanvas\""; } >&5 + ($PKG_CONFIG --exists --print-errors "goocanvas") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_CANVAS_LIBS=`$PKG_CONFIG --libs "goocanvas" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - echo "*** The test program failed to compile or link. See the file config.log for the" - echo "*** exact error that occured. This usually means GDK_PIXBUF was incorrectly installed" - echo "*** or that you have moved GDK_PIXBUF since it was installed. In the latter case, you" - echo "*** may want to edit the gdk-pixbuf-config script: $GDK_PIXBUF_CONFIG" + pkg_failed=yes fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - GDK_PIXBUF_CFLAGS="" - GDK_PIXBUF_LIBS="" - echo "$as_me:$LINENO: result: ---> Building without GDK_PIXBUF (ignore error above)." >&5 -echo "${ECHO_T}---> Building without GDK_PIXBUF (ignore error above)." >&6 - fi - - - rm -f conf.gdk_pixbuftest - + else + pkg_failed=untried fi -if test "x${no_gdkpixbuf}" = "x1"; then - -cat >>confdefs.h <<\_ACEOF -#define NO_GDK_PIXBUF 1 -_ACEOF -fi +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } -if test "x${no_gdkpixbuf}" = "x1"; then - NO_GDK_PIXBUF_TRUE= - NO_GDK_PIXBUF_FALSE='#' +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - NO_GDK_PIXBUF_TRUE='#' - NO_GDK_PIXBUF_FALSE= + _pkg_short_errors_supported=no fi + if test $_pkg_short_errors_supported = yes; then + CANVAS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "goocanvas" 2>&1` + else + CANVAS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "goocanvas" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$CANVAS_PKG_ERRORS" >&5 + canvas=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + canvas=no +else + CANVAS_CFLAGS=$pkg_cv_CANVAS_CFLAGS + CANVAS_LIBS=$pkg_cv_CANVAS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + canvas=yes +fi + if test "$canvas" = yes; then -sndfile_support=yes -# Check whether --enable-sndfile or --disable-sndfile was given. -if test "${enable_sndfile+set}" = set; then - enableval="$enable_sndfile" - sndfile_support=no -fi; + LIBS="$LIBS $CANVAS_LIBS" + CFLAGS="$CFLAGS $CANVAS_CFLAGS" -ac_cv_sndfile=0 - -if test x$sndfile_support = xyes ; then - - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG - -if test -n "$PKG_CONFIG"; then - echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 -echo "${ECHO_T}$PKG_CONFIG" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG - -if test -n "$ac_pt_PKG_CONFIG"; then - echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5 -echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - PKG_CONFIG=$ac_pt_PKG_CONFIG -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi - -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=0.9.0 - echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 -echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6 - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - PKG_CONFIG="" - fi - -fi - -pkg_failed=no -echo "$as_me:$LINENO: checking for SNDFILE" >&5 -echo $ECHO_N "checking for SNDFILE... $ECHO_C" >&6 - -if test -n "$PKG_CONFIG"; then - if test -n "$SNDFILE_CFLAGS"; then - pkg_cv_SNDFILE_CFLAGS="$SNDFILE_CFLAGS" - else - if test -n "$PKG_CONFIG" && \ - { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sndfile > 1.0.1\"") >&5 - ($PKG_CONFIG --exists --print-errors "sndfile > 1.0.1") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - pkg_cv_SNDFILE_CFLAGS=`$PKG_CONFIG --cflags "sndfile > 1.0.1" 2>/dev/null` -else - pkg_failed=yes -fi - fi -else - pkg_failed=untried -fi -if test -n "$PKG_CONFIG"; then - if test -n "$SNDFILE_LIBS"; then - pkg_cv_SNDFILE_LIBS="$SNDFILE_LIBS" - else - if test -n "$PKG_CONFIG" && \ - { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sndfile > 1.0.1\"") >&5 - ($PKG_CONFIG --exists --print-errors "sndfile > 1.0.1") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - pkg_cv_SNDFILE_LIBS=`$PKG_CONFIG --libs "sndfile > 1.0.1" 2>/dev/null` -else - pkg_failed=yes -fi - fi -else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "sndfile > 1.0.1"` - else - SNDFILE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "sndfile > 1.0.1"` - fi - # Put the nasty error message in config.log where it belongs - echo "$SNDFILE_PKG_ERRORS" >&5 - - ac_cv_sndfile=0 -elif test $pkg_failed = untried; then - ac_cv_sndfile=0 -else - SNDFILE_CFLAGS=$pkg_cv_SNDFILE_CFLAGS - SNDFILE_LIBS=$pkg_cv_SNDFILE_LIBS - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - ac_cv_sndfile=1 -fi - if test x$ac_cv_sndfile = x1 ; then - CFLAGS="$CFLAGS $SNDFILE_CFLAGS" - LIBS="$LIBS $SNDFILE_LIBS" - fi -fi - - -cat >>confdefs.h <<_ACEOF -#define USE_SNDFILE ${ac_cv_sndfile} -_ACEOF - - - -if test x$ac_cv_sndfile != x1 ; then - -# Check whether --with-audiofile-prefix or --without-audiofile-prefix was given. -if test "${with_audiofile_prefix+set}" = set; then - withval="$with_audiofile_prefix" - audiofile_prefix="$withval" -else - audiofile_prefix="" -fi; - -# Check whether --with-audiofile-exec-prefix or --without-audiofile-exec-prefix was given. -if test "${with_audiofile_exec_prefix+set}" = set; then - withval="$with_audiofile_exec_prefix" - audiofile_exec_prefix="$withval" -else - audiofile_exec_prefix="" -fi; -# Check whether --enable-audiofiletest or --disable-audiofiletest was given. -if test "${enable_audiofiletest+set}" = set; then - enableval="$enable_audiofiletest" - -else - enable_audiofiletest=yes -fi; - - if test x$audiofile_exec_prefix != x ; then - audiofile_args="$audiofile_args --exec-prefix=$audiofile_exec_prefix" - if test x${AUDIOFILE_CONFIG+set} != xset ; then - AUDIOFILE_CONFIG=$audiofile_exec_prefix/bin/audiofile-config - fi - fi - if test x$audiofile_prefix != x ; then - audiofile_args="$audiofile_args --prefix=$audiofile_prefix" - if test x${AUDIOFILE_CONFIG+set} != xset ; then - AUDIOFILE_CONFIG=$audiofile_prefix/bin/audiofile-config - fi - fi - - # Extract the first word of "audiofile-config", so it can be a program name with args. -set dummy audiofile-config; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_AUDIOFILE_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $AUDIOFILE_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_AUDIOFILE_CONFIG="$AUDIOFILE_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_AUDIOFILE_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_path_AUDIOFILE_CONFIG" && ac_cv_path_AUDIOFILE_CONFIG="no" - ;; -esac -fi -AUDIOFILE_CONFIG=$ac_cv_path_AUDIOFILE_CONFIG - -if test -n "$AUDIOFILE_CONFIG"; then - echo "$as_me:$LINENO: result: $AUDIOFILE_CONFIG" >&5 -echo "${ECHO_T}$AUDIOFILE_CONFIG" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - min_audiofile_version=0.1.5 - echo "$as_me:$LINENO: checking for Audio File Library - version >= $min_audiofile_version" >&5 -echo $ECHO_N "checking for Audio File Library - version >= $min_audiofile_version... $ECHO_C" >&6 - no_audiofile="" - if test "$AUDIOFILE_CONFIG" = "no" ; then - no_audiofile=yes - else - AUDIOFILE_LIBS=`$AUDIOFILE_CONFIG $audiofileconf_args --libs` - AUDIOFILE_CFLAGS=`$AUDIOFILE_CONFIG $audiofileconf_args --cflags` - audiofile_major_version=`$AUDIOFILE_CONFIG $audiofile_args --version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` - audiofile_minor_version=`$AUDIOFILE_CONFIG $audiofile_args --version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` - audiofile_micro_version=`$AUDIOFILE_CONFIG $audiofile_config_args --version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` - if test "x$enable_audiofiletest" = "xyes" ; then - - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $AUDIOFILE_CFLAGS" - LIBS="$LIBS $AUDIOFILE_LIBS" - rm -f conf.audiofiletest - if test "$cross_compiling" = yes; then - echo $ac_n "cross compiling; assumed OK... $ac_c" -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#include -#include -#include -#include - -char* -my_strdup (char *str) -{ - char *new_str; - - if (str) - { - new_str = malloc ((strlen (str) + 1) * sizeof(char)); - strcpy (new_str, str); - } - else - new_str = NULL; - - return new_str; -} - -int main () -{ - int major, minor, micro; - char *tmp_version; - - system ("touch conf.audiofiletest"); - - /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = my_strdup("$min_audiofile_version"); - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { - printf("%s, bad version string\n", "$min_audiofile_version"); - exit(1); - } - - if (($audiofile_major_version > major) || - (($audiofile_major_version == major) && ($audiofile_minor_version > minor)) || - (($audiofile_major_version == major) && ($audiofile_minor_version == minor) && ($audiofile_micro_version >= micro))) - { - return 0; - } - else - { - printf("\n*** 'audiofile-config --version' returned %d.%d.%d, but the minimum version\n", $audiofile_major_version, $audiofile_minor_version, $audiofile_micro_version); - printf("*** of the Audio File Library required is %d.%d.%d. If audiofile-config is correct, then it is\n", major, minor, micro); - printf("*** best to upgrade to the required version.\n"); - printf("*** If audiofile-config was wrong, set the environment variable AUDIOFILE_CONFIG\n"); - printf("*** to point to the correct copy of audiofile-config, and remove the file\n"); - printf("*** config.cache before re-running configure\n"); - return 1; - } -} - - -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -no_audiofile=yes -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - fi - fi - if test "x$no_audiofile" = x ; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - CFLAGS="$CFLAGS $AUDIOFILE_CFLAGS" - LIBS="$LIBS $AUDIOFILE_LIBS" - - else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - if test "$AUDIOFILE_CONFIG" = "no" ; then - cat <conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cat <&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - echo "*** The test program failed to compile or link. See the file config.log" - echo "*** for the exact error that occured. This usually means the Audio File" - echo "*** Library was incorrectly installed or that you have moved the Audio" - echo "*** File Library since it was installed. In the latter case, you may want" - echo "*** to edit the audiofile-config script: $AUDIOFILE_CONFIG" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - fi - fi - AUDIOFILE_CFLAGS="" - AUDIOFILE_LIBS="" - echo "$as_me:$LINENO: result: * No sample I/O library found, disabling sample loader (ignore error above)." >&5 -echo "${ECHO_T}* No sample I/O library found, disabling sample loader (ignore error above)." >&6 - -cat >>confdefs.h <<\_ACEOF -#define NO_AUDIOFILE 1 -_ACEOF - - - - fi - - - rm -f conf.audiofiletest - -fi - - -echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - - -for ac_header in dlfcn.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_func in setresuid -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +$as_echo "#define USE_CANVAS 1" >>confdefs.h -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + fi fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF + if test "x$canvas" = "xyes"; then + USE_CANVAS_TRUE= + USE_CANVAS_FALSE='#' +else + USE_CANVAS_TRUE='#' + USE_CANVAS_FALSE= fi -done -# Check whether --enable-oss or --disable-oss was given. -if test "${enable_oss+set}" = set; then - enableval="$enable_oss" - oss_support=no -fi; +# Check whether --enable-sndfile was given. +if test "${enable_sndfile+set}" = set; then : + enableval=$enable_sndfile; sndfile_support=no +fi -if test x$oss_support != xno; then +ac_cv_sndfile=0 +if test x$sndfile_support != xno ; then -for ac_header in sys/soundcard.h machine/soundcard.h soundcard.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SNDFILE" >&5 +$as_echo_n "checking for SNDFILE... " >&6; } + +if test -n "$SNDFILE_CFLAGS"; then + pkg_cv_SNDFILE_CFLAGS="$SNDFILE_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile > 1.0.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sndfile > 1.0.1") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SNDFILE_CFLAGS=`$PKG_CONFIG --cflags "sndfile > 1.0.1" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no + pkg_failed=yes fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + else + pkg_failed=untried +fi +if test -n "$SNDFILE_LIBS"; then + pkg_cv_SNDFILE_LIBS="$SNDFILE_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile > 1.0.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sndfile > 1.0.1") 2>&5 ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SNDFILE_LIBS=`$PKG_CONFIG --libs "sndfile > 1.0.1" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else - ac_cpp_err=yes + pkg_failed=yes fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no + else + pkg_failed=untried fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - eval "$as_ac_Header=\$ac_header_preproc" + _pkg_short_errors_supported=no fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + if test $_pkg_short_errors_supported = yes; then + SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sndfile > 1.0.1" 2>&1` + else + SNDFILE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sndfile > 1.0.1" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$SNDFILE_PKG_ERRORS" >&5 + ac_cv_sndfile=0 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ac_cv_sndfile=0 +else + SNDFILE_CFLAGS=$pkg_cv_SNDFILE_CFLAGS + SNDFILE_LIBS=$pkg_cv_SNDFILE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + ac_cv_sndfile=1 fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - + if test x$ac_cv_sndfile = x1 ; then + CFLAGS="$CFLAGS $SNDFILE_CFLAGS" + LIBS="$LIBS $SNDFILE_LIBS" + fi fi -done - - if test "${ac_cv_header_sys_soundcard_h}" = "yes" || \ - test "${ac_cv_header_machine_soundcard_h}" = "yes" || \ - test "${ac_cv_header_soundcard_h}" = "yes"; then - oss_support=yes -cat >>confdefs.h <<\_ACEOF -#define DRIVER_OSS 1 +cat >>confdefs.h <<_ACEOF +#define USE_SNDFILE ${ac_cv_sndfile} _ACEOF - case `uname` in - OpenBSD*) - LIBS="$LIBS -lossaudio" - ;; - NetBSD*) - echo "$as_me:$LINENO: checking for _oss_ioctl in -lossaudio" >&5 -echo $ECHO_N "checking for _oss_ioctl in -lossaudio... $ECHO_C" >&6 -if test "${ac_cv_lib_ossaudio__oss_ioctl+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lossaudio $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char _oss_ioctl (); -int -main () -{ -_oss_ioctl (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_ossaudio__oss_ioctl=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_ossaudio__oss_ioctl=no +if test x$ac_cv_sndfile != x1 ; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AUDIOFILE" >&5 +$as_echo_n "checking for AUDIOFILE... " >&6; } + +if test -n "$AUDIOFILE_CFLAGS"; then + pkg_cv_AUDIOFILE_CFLAGS="$AUDIOFILE_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audiofile > 0.1.5\""; } >&5 + ($PKG_CONFIG --exists --print-errors "audiofile > 0.1.5") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_AUDIOFILE_CFLAGS=`$PKG_CONFIG --cflags "audiofile > 0.1.5" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + else + pkg_failed=untried fi -echo "$as_me:$LINENO: result: $ac_cv_lib_ossaudio__oss_ioctl" >&5 -echo "${ECHO_T}$ac_cv_lib_ossaudio__oss_ioctl" >&6 -if test $ac_cv_lib_ossaudio__oss_ioctl = yes; then - LIBS="$LIBS -lossaudio" +if test -n "$AUDIOFILE_LIBS"; then + pkg_cv_AUDIOFILE_LIBS="$AUDIOFILE_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audiofile > 0.1.5\""; } >&5 + ($PKG_CONFIG --exists --print-errors "audiofile > 0.1.5") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_AUDIOFILE_LIBS=`$PKG_CONFIG --libs "audiofile > 0.1.5" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes fi - - ;; - esac - else - oss_support=no - fi + else + pkg_failed=untried fi -if test x$oss_support = xyes; then - DRIVER_OSS_TRUE= - DRIVER_OSS_FALSE='#' +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - DRIVER_OSS_TRUE='#' - DRIVER_OSS_FALSE= + _pkg_short_errors_supported=no fi + if test $_pkg_short_errors_supported = yes; then + AUDIOFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "audiofile > 0.1.5" 2>&1` + else + AUDIOFILE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "audiofile > 0.1.5" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$AUDIOFILE_PKG_ERRORS" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: * No sample I/O library found, disabling sample loader (ignore error above)." >&5 +$as_echo "* No sample I/O library found, disabling sample loader (ignore error above)." >&6; } +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: * No sample I/O library found, disabling sample loader (ignore error above)." >&5 +$as_echo "* No sample I/O library found, disabling sample loader (ignore error above)." >&6; } + +else + AUDIOFILE_CFLAGS=$pkg_cv_AUDIOFILE_CFLAGS + AUDIOFILE_LIBS=$pkg_cv_AUDIOFILE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + ac_cv_audiofile=1 +fi + if test x$ac_cv_audiofile = x1; then + CFLAGS="$CFLAGS $AUDIOFILE_CFLAGS" + LIBS="$LIBS $AUDIOFILE_LIBS" + AF_VERSION=$(pkg-config --modversion audiofile | sed "s/^[0-9]*\.//;s/\..*$//") -# Check whether --enable-alsa or --disable-alsa was given. -if test "${enable_alsa+set}" = set; then - enableval="$enable_alsa" - alsa_support=no -fi; +cat >>confdefs.h <<_ACEOF +#define AUDIOFILE_VERSION ${AF_VERSION} +_ACEOF -if test x$alsa_support != xno; then - echo "$as_me:$LINENO: checking for snd_pcm_plug_open in -lasound" >&5 -echo $ECHO_N "checking for snd_pcm_plug_open in -lasound... $ECHO_C" >&6 -if test "${ac_cv_lib_asound_snd_pcm_plug_open+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + fi +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lasound $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include +#include +#include +#include -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char snd_pcm_plug_open (); int main () { -snd_pcm_plug_open (); + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_asound_snd_pcm_plug_open=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : -ac_cv_lib_asound_snd_pcm_plug_open=no +else + ac_cv_header_stdc=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm -f conftest* + fi -echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_pcm_plug_open" >&5 -echo "${ECHO_T}$ac_cv_lib_asound_snd_pcm_plug_open" >&6 -if test $ac_cv_lib_asound_snd_pcm_plug_open = yes; then - alsa_support=new -cat >>confdefs.h <<\_ACEOF -#define DRIVER_ALSA_09x 1 -_ACEOF +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include - LIBS="$LIBS -lasound" - echo "*** ALSA v0.9 found on your system. No audio drivers available" - echo "*** for ALSA v0.9. No problem, just use OSS driver or JACK instead." +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : else - echo "$as_me:$LINENO: checking for snd_pcm_capture_params in -lasound" >&5 -echo $ECHO_N "checking for snd_pcm_capture_params in -lasound... $ECHO_C" >&6 -if test "${ac_cv_lib_asound_snd_pcm_capture_params+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lasound $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char snd_pcm_capture_params (); + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { -snd_pcm_capture_params (); - ; + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_asound_snd_pcm_capture_params=yes +if ac_fn_c_try_run "$LINENO"; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi -ac_cv_lib_asound_snd_pcm_capture_params=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_pcm_capture_params" >&5 -echo "${ECHO_T}$ac_cv_lib_asound_snd_pcm_capture_params" >&6 -if test $ac_cv_lib_asound_snd_pcm_capture_params = yes; then - alsa_support=veryold +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi -cat >>confdefs.h <<\_ACEOF -#define DRIVER_ALSA 1 +for ac_func in setresuid +do : + ac_fn_c_check_func "$LINENO" "setresuid" "ac_cv_func_setresuid" +if test "x$ac_cv_func_setresuid" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SETRESUID 1 _ACEOF - LIBS="$LIBS -lasound" +fi +done + + + +# Check whether --enable-oss was given. +if test "${enable_oss+set}" = set; then : + enableval=$enable_oss; oss_support=no +fi + +if test x$oss_support != xno; then + for ac_header in sys/soundcard.h machine/soundcard.h soundcard.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF fi - echo "$as_me:$LINENO: checking for snd_pcm_channel_params in -lasound" >&5 -echo $ECHO_N "checking for snd_pcm_channel_params in -lasound... $ECHO_C" >&6 -if test "${ac_cv_lib_asound_snd_pcm_channel_params+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +done + + if test "${ac_cv_header_sys_soundcard_h}" = "yes" || \ + test "${ac_cv_header_machine_soundcard_h}" = "yes" || \ + test "${ac_cv_header_soundcard_h}" = "yes"; then + oss_support=yes + +$as_echo "#define DRIVER_OSS 1" >>confdefs.h + + case `uname` in + OpenBSD*) + LIBS="$LIBS -lossaudio" + ;; + NetBSD*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _oss_ioctl in -lossaudio" >&5 +$as_echo_n "checking for _oss_ioctl in -lossaudio... " >&6; } +if ${ac_cv_lib_ossaudio__oss_ioctl+:} false; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lasound $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +LIBS="-lossaudio $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char snd_pcm_channel_params (); +char _oss_ioctl (); int main () { -snd_pcm_channel_params (); +return _oss_ioctl (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_asound_snd_pcm_channel_params=yes +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ossaudio__oss_ioctl=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_asound_snd_pcm_channel_params=no + ac_cv_lib_ossaudio__oss_ioctl=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_pcm_channel_params" >&5 -echo "${ECHO_T}$ac_cv_lib_asound_snd_pcm_channel_params" >&6 -if test $ac_cv_lib_asound_snd_pcm_channel_params = yes; then - alsa_support=old - -cat >>confdefs.h <<\_ACEOF -#define DRIVER_ALSA_050 1 -_ACEOF - - LIBS="$LIBS -lasound" - - -fi - - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ossaudio__oss_ioctl" >&5 +$as_echo "$ac_cv_lib_ossaudio__oss_ioctl" >&6; } +if test "x$ac_cv_lib_ossaudio__oss_ioctl" = xyes; then : + LIBS="$LIBS -lossaudio" fi + ;; + esac + else + oss_support=no + fi fi - - -if test x$alsa_support = xveryold; then - DRIVER_ALSA_TRUE= - DRIVER_ALSA_FALSE='#' + if test x$oss_support = xyes; then + DRIVER_OSS_TRUE= + DRIVER_OSS_FALSE='#' else - DRIVER_ALSA_TRUE='#' - DRIVER_ALSA_FALSE= + DRIVER_OSS_TRUE='#' + DRIVER_OSS_FALSE= fi -if test x$alsa_support = xold; then - DRIVER_ALSA_050_TRUE= - DRIVER_ALSA_050_FALSE='#' -else - DRIVER_ALSA_050_TRUE='#' - DRIVER_ALSA_050_FALSE= +# Check whether --enable-alsa was given. +if test "${enable_alsa+set}" = set; then : + enableval=$enable_alsa; alsa_support=no fi +if test x$alsa_support != xno; then + alsa_save_CFLAGS="$CFLAGS" +alsa_save_LDFLAGS="$LDFLAGS" +alsa_save_LIBS="$LIBS" +alsa_found=yes + -if test x$alsa_support = xnew; then - DRIVER_ALSA_09x_TRUE= - DRIVER_ALSA_09x_FALSE='#' +# Check whether --with-alsa-prefix was given. +if test "${with_alsa_prefix+set}" = set; then : + withval=$with_alsa_prefix; alsa_prefix="$withval" else - DRIVER_ALSA_09x_TRUE='#' - DRIVER_ALSA_09x_FALSE= + alsa_prefix="" fi -# Check whether --enable-esd or --disable-esd was given. -if test "${enable_esd+set}" = set; then - enableval="$enable_esd" - esd_support=no -fi; - -if test x$esd_support != xno; then - -# Check whether --with-esd-prefix or --without-esd-prefix was given. -if test "${with_esd_prefix+set}" = set; then - withval="$with_esd_prefix" - esd_prefix="$withval" -else - esd_prefix="" -fi; - -# Check whether --with-esd-exec-prefix or --without-esd-exec-prefix was given. -if test "${with_esd_exec_prefix+set}" = set; then - withval="$with_esd_exec_prefix" - esd_exec_prefix="$withval" +# Check whether --with-alsa-inc-prefix was given. +if test "${with_alsa_inc_prefix+set}" = set; then : + withval=$with_alsa_inc_prefix; alsa_inc_prefix="$withval" else - esd_exec_prefix="" -fi; -# Check whether --enable-esdtest or --disable-esdtest was given. -if test "${enable_esdtest+set}" = set; then - enableval="$enable_esdtest" - -else - enable_esdtest=yes -fi; + alsa_inc_prefix="" +fi - if test x$esd_exec_prefix != x ; then - esd_args="$esd_args --exec-prefix=$esd_exec_prefix" - if test x${ESD_CONFIG+set} != xset ; then - ESD_CONFIG=$esd_exec_prefix/bin/esd-config - fi - fi - if test x$esd_prefix != x ; then - esd_args="$esd_args --prefix=$esd_prefix" - if test x${ESD_CONFIG+set} != xset ; then - ESD_CONFIG=$esd_prefix/bin/esd-config - fi - fi - # Extract the first word of "esd-config", so it can be a program name with args. -set dummy esd-config; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_ESD_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# Check whether --enable-alsatest was given. +if test "${enable_alsatest+set}" = set; then : + enableval=$enable_alsatest; enable_alsatest="$enableval" else - case $ESD_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ESD_CONFIG="$ESD_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ESD_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_path_ESD_CONFIG" && ac_cv_path_ESD_CONFIG="no" - ;; -esac + enable_alsatest=yes fi -ESD_CONFIG=$ac_cv_path_ESD_CONFIG -if test -n "$ESD_CONFIG"; then - echo "$as_me:$LINENO: result: $ESD_CONFIG" >&5 -echo "${ECHO_T}$ESD_CONFIG" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - min_esd_version=0.2.8 - echo "$as_me:$LINENO: checking for ESD - version >= $min_esd_version" >&5 -echo $ECHO_N "checking for ESD - version >= $min_esd_version... $ECHO_C" >&6 - no_esd="" - if test "$ESD_CONFIG" = "no" ; then - no_esd=yes - else +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA CFLAGS" >&5 +$as_echo_n "checking for ALSA CFLAGS... " >&6; } +if test "$alsa_inc_prefix" != "" ; then + ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix" + CFLAGS="$CFLAGS -I$alsa_inc_prefix" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_CFLAGS" >&5 +$as_echo "$ALSA_CFLAGS" >&6; } - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA LDFLAGS" >&5 +$as_echo_n "checking for ALSA LDFLAGS... " >&6; } +if test "$alsa_prefix" != "" ; then + ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix" + LDFLAGS="$LDFLAGS $ALSA_LIBS" +fi - ESD_CFLAGS=`$ESD_CONFIG $esdconf_args --cflags` - ESD_LIBS=`$ESD_CONFIG $esdconf_args --libs` +ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl -lpthread" +LIBS="$ALSA_LIBS $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_LIBS" >&5 +$as_echo "$ALSA_LIBS" >&6; } - esd_major_version=`$ESD_CONFIG $esd_args --version | \ +if test "x$enable_alsatest" = "xyes"; then +min_alsa_version=1.0.29 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libasound headers version >= $min_alsa_version" >&5 +$as_echo_n "checking for libasound headers version >= $min_alsa_version... " >&6; } +no_alsa="" + alsa_min_major_version=`echo $min_alsa_version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` - esd_minor_version=`$ESD_CONFIG $esd_args --version | \ + alsa_min_minor_version=`echo $min_alsa_version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` - esd_micro_version=`$ESD_CONFIG $esd_config_args --version | \ + alsa_min_micro_version=`echo $min_alsa_version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` - if test "x$enable_esdtest" = "xyes" ; then - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $ESD_CFLAGS" - LIBS="$LIBS $ESD_LIBS" - rm -f conf.esdtest - if test "$cross_compiling" = yes; then - echo $ac_n "cross compiling; assumed OK... $ac_c" -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#include -#include -#include -#include - -char* -my_strdup (char *str) -{ - char *new_str; - - if (str) - { - new_str = malloc ((strlen (str) + 1) * sizeof(char)); - strcpy (new_str, str); - } - else - new_str = NULL; - - return new_str; -} - -int main () -{ - int major, minor, micro; - char *tmp_version; - - system ("touch conf.esdtest"); - - /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = my_strdup("$min_esd_version"); - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { - printf("%s, bad version string\n", "$min_esd_version"); - exit(1); - } - - if (($esd_major_version > major) || - (($esd_major_version == major) && ($esd_minor_version > minor)) || - (($esd_major_version == major) && ($esd_minor_version == minor) && ($esd_micro_version >= micro))) - { - return 0; - } - else - { - printf("\n*** 'esd-config --version' returned %d.%d.%d, but the minimum version\n", $esd_major_version, $esd_minor_version, $esd_micro_version); - printf("*** of ESD required is %d.%d.%d. If esd-config is correct, then it is\n", major, minor, micro); - printf("*** best to upgrade to the required version.\n"); - printf("*** If esd-config was wrong, set the environment variable ESD_CONFIG\n"); - printf("*** to point to the correct copy of esd-config, and remove the file\n"); - printf("*** config.cache before re-running configure\n"); - return 1; - } -} - - -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -no_esd=yes -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - fi - fi - if test "x$no_esd" = x ; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - have_esd=yes - else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - if test "$ESD_CONFIG" = "no" ; then - echo "*** The esd-config script installed by ESD could not be found" - echo "*** If ESD was installed in PREFIX, make sure PREFIX/bin is in" - echo "*** your path, or set the ESD_CONFIG environment variable to the" - echo "*** full path to esd-config." - else - if test -f conf.esdtest ; then - : - else - echo "*** Could not run ESD test program, checking why..." - CFLAGS="$CFLAGS $ESD_CFLAGS" - LIBS="$LIBS $ESD_LIBS" - - ac_ext=c +ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include +#include int main () { - return 0; + +/* ensure backward compatibility */ +#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) +#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR +#endif +#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR) +#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR +#endif +#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR) +#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR +#endif + +# if(SND_LIB_MAJOR > $alsa_min_major_version) + exit(0); +# else +# if(SND_LIB_MAJOR < $alsa_min_major_version) +# error not present +# endif + +# if(SND_LIB_MINOR > $alsa_min_minor_version) + exit(0); +# else +# if(SND_LIB_MINOR < $alsa_min_minor_version) +# error not present +# endif + +# if(SND_LIB_SUBMINOR < $alsa_min_micro_version) +# error not present +# endif +# endif +# endif +exit(0); + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "*** The test program compiled, but did not run. This usually means" - echo "*** that the run-time linker is not finding ESD or finding the wrong" - echo "*** version of ESD. If it is not finding ESD, you'll need to set your" - echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" - echo "*** to the installed location Also, make sure you have run ldconfig if that" - echo "*** is required on your system" - echo "***" - echo "*** If you have an old version installed, it is best to remove it, although" - echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found." >&5 +$as_echo "found." >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not present." >&5 +$as_echo "not present." >&6; } + + alsa_found=no - echo "*** The test program failed to compile or link. See the file config.log for the" - echo "*** exact error that occured. This usually means ESD was incorrectly installed" - echo "*** or that you have moved ESD since it was installed. In the latter case, you" - echo "*** may want to edit the esd-config script: $ESD_CONFIG" fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - ac_ext=c +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - fi - fi - ESD_CFLAGS="" - ESD_LIBS="" - have_esd=no - fi - - - rm -f conf.esdtest - +fi -for ac_func in esd_play_stream -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "x$enable_alsatest" = "xyes"; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for snd_ctl_open in -lasound" >&5 +$as_echo_n "checking for snd_ctl_open in -lasound... " >&6; } +if ${ac_cv_lib_asound_snd_ctl_open+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_check_lib_save_LIBS=$LIBS +LIBS="-lasound $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif #ifdef __cplusplus -} +extern "C" #endif - +char snd_ctl_open (); int main () { -return f != $ac_func; +return snd_ctl_open (); ; return 0; } -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - if test x$have_esd = xyes; then - -cat >>confdefs.h <<\_ACEOF -#define DRIVER_ESD 1 -_ACEOF - - CFLAGS="$CFLAGS $ESD_CFLAGS" - LIBS="$LIBS $ESD_LIBS" - fi -fi - - - -if test x$have_esd = xyes; then - DRIVER_ESD_TRUE= - DRIVER_ESD_FALSE='#' -else - DRIVER_ESD_TRUE='#' - DRIVER_ESD_FALSE= -fi - - - -if test "${ac_cv_header_jack_jack_h+set}" = set; then - echo "$as_me:$LINENO: checking for jack/jack.h" >&5 -echo $ECHO_N "checking for jack/jack.h... $ECHO_C" >&6 -if test "${ac_cv_header_jack_jack_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_jack_jack_h" >&5 -echo "${ECHO_T}$ac_cv_header_jack_jack_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking jack/jack.h usability" >&5 -echo $ECHO_N "checking jack/jack.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking jack/jack.h presence" >&5 -echo $ECHO_N "checking jack/jack.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_asound_snd_ctl_open=yes else - ac_cpp_err=yes + ac_cv_lib_asound_snd_ctl_open=no fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_asound_snd_ctl_open" >&5 +$as_echo "$ac_cv_lib_asound_snd_ctl_open" >&6; } +if test "x$ac_cv_lib_asound_snd_ctl_open" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBASOUND 1 +_ACEOF + + LIBS="-lasound $LIBS" + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no + alsa_found=no + fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: jack/jack.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: jack/jack.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: jack/jack.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: jack/jack.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: jack/jack.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: jack/jack.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: jack/jack.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: jack/jack.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: jack/jack.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: jack/jack.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: jack/jack.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: jack/jack.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: jack/jack.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: jack/jack.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: jack/jack.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: jack/jack.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for jack/jack.h" >&5 -echo $ECHO_N "checking for jack/jack.h... $ECHO_C" >&6 -if test "${ac_cv_header_jack_jack_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_jack_jack_h=$ac_header_preproc fi -echo "$as_me:$LINENO: result: $ac_cv_header_jack_jack_h" >&5 -echo "${ECHO_T}$ac_cv_header_jack_jack_h" >&6 +if test "x$alsa_found" = "xyes" ; then + have_alsa=yes + LIBS=`echo $LIBS | sed 's/-lasound//g'` + LIBS=`echo $LIBS | sed 's/ //'` + LIBS="-lasound $LIBS" fi -if test $ac_cv_header_jack_jack_h = yes; then - jack_support=yes -else - jack_support=no +if test "x$alsa_found" = "xno" ; then + have_alsa=no + CFLAGS="$alsa_save_CFLAGS" + LDFLAGS="$alsa_save_LDFLAGS" + LIBS="$alsa_save_LIBS" + ALSA_CFLAGS="" + ALSA_LIBS="" fi -# Check whether --with-jack or --without-jack was given. -if test "${with_jack+set}" = set; then - withval="$with_jack" - ST_S_JACK_LIBS="-L${withval}/lib" - ST_S_JACK_INCLUDES="-I${withval}/include" - jack_support=yes + if test x$have_alsa = xyes; then -fi; -# Check whether --enable-jack or --disable-jack was given. -if test "${enable_jack+set}" = set; then - enableval="$enable_jack" - jack_support=no -fi; +$as_echo "#define DRIVER_ALSA 1" >>confdefs.h -if test x$jack_support = xyes; then - ST_S_JACK_LIBS="${ST_S_JACK_LIBS} -ljack -lpthread -ldl" - -cat >>confdefs.h <<\_ACEOF -#define DRIVER_JACK 1 -_ACEOF + CFLAGS="$CFLAGS $ALSA_CFLAGS" + LIBS="$LIBS $ALSA_LIBS" + fi +fi + if test x$have_alsa = xyes; then + DRIVER_ALSA_TRUE= + DRIVER_ALSA_FALSE='#' +else + DRIVER_ALSA_TRUE='#' + DRIVER_ALSA_FALSE= fi +# Check whether --enable-jack was given. +if test "${enable_jack+set}" = set; then : + enableval=$enable_jack; jack_support=no +fi +if test x$jack_support != xno; then -if test x$jack_support = xyes; then - DRIVER_JACK_TRUE= - DRIVER_JACK_FALSE='#' +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JACK" >&5 +$as_echo_n "checking for JACK... " >&6; } + +if test -n "$JACK_CFLAGS"; then + pkg_cv_JACK_CFLAGS="$JACK_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack > 0.120.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "jack > 0.120.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "jack > 0.120.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else - DRIVER_JACK_TRUE='#' - DRIVER_JACK_FALSE= + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$JACK_LIBS"; then + pkg_cv_JACK_LIBS="$JACK_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack > 0.120.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "jack > 0.120.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "jack > 0.120.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried fi -# Check whether --enable-sgi or --disable-sgi was given. -if test "${enable_sgi+set}" = set; then - enableval="$enable_sgi" - sgi_support=no -fi; +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } -case `uname` in - IRIX*) - if test x$sgi_support != xno; then - if test "${ac_cv_header_dmedia_audio_h+set}" = set; then - echo "$as_me:$LINENO: checking for dmedia/audio.h" >&5 -echo $ECHO_N "checking for dmedia/audio.h... $ECHO_C" >&6 -if test "${ac_cv_header_dmedia_audio_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_dmedia_audio_h" >&5 -echo "${ECHO_T}$ac_cv_header_dmedia_audio_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking dmedia/audio.h usability" >&5 -echo $ECHO_N "checking dmedia/audio.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "jack > 0.120.0" 2>&1` + else + JACK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "jack > 0.120.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$JACK_PKG_ERRORS" >&5 + + jack_support=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + jack_support=no +else + JACK_CFLAGS=$pkg_cv_JACK_CFLAGS + JACK_LIBS=$pkg_cv_JACK_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + jack_support=yes +fi + if test x$jack_support = xyes; then + CFLAGS="$CFLAGS $JACK_CFLAGS" + LIBS="$LIBS $JACK_LIBS" -ac_header_compiler=no +$as_echo "#define DRIVER_JACK 1" >>confdefs.h + + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 -# Is the header present? -echo "$as_me:$LINENO: checking dmedia/audio.h presence" >&5 -echo $ECHO_N "checking dmedia/audio.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi + if test x$jack_support = xyes; then + DRIVER_JACK_TRUE= + DRIVER_JACK_FALSE='#' else - ac_cpp_err=yes + DRIVER_JACK_TRUE='#' + DRIVER_JACK_FALSE= fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: dmedia/audio.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: dmedia/audio.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: dmedia/audio.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: dmedia/audio.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: dmedia/audio.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: dmedia/audio.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: dmedia/audio.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: dmedia/audio.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: dmedia/audio.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: dmedia/audio.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: dmedia/audio.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: dmedia/audio.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: dmedia/audio.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: dmedia/audio.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: dmedia/audio.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: dmedia/audio.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for dmedia/audio.h" >&5 -echo $ECHO_N "checking for dmedia/audio.h... $ECHO_C" >&6 -if test "${ac_cv_header_dmedia_audio_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_dmedia_audio_h=$ac_header_preproc + +# Check whether --enable-sgi was given. +if test "${enable_sgi+set}" = set; then : + enableval=$enable_sgi; sgi_support=no fi -echo "$as_me:$LINENO: result: $ac_cv_header_dmedia_audio_h" >&5 -echo "${ECHO_T}$ac_cv_header_dmedia_audio_h" >&6 + + +case `uname` in + IRIX*) + if test x$sgi_support != xno; then + ac_fn_c_check_header_mongrel "$LINENO" "dmedia/audio.h" "ac_cv_header_dmedia_audio_h" "$ac_includes_default" +if test "x$ac_cv_header_dmedia_audio_h" = xyes; then : fi if test $ac_cv_header_dmedia_audio_h = yes then - echo "$as_me:$LINENO: checking for ALseterrorhandler in -laudio" >&5 -echo $ECHO_N "checking for ALseterrorhandler in -laudio... $ECHO_C" >&6 -if test "${ac_cv_lib_audio_ALseterrorhandler+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALseterrorhandler in -laudio" >&5 +$as_echo_n "checking for ALseterrorhandler in -laudio... " >&6; } +if ${ac_cv_lib_audio_ALseterrorhandler+:} false; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-laudio $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char ALseterrorhandler (); int main () { -ALseterrorhandler (); +return ALseterrorhandler (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_audio_ALseterrorhandler=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_audio_ALseterrorhandler=no + ac_cv_lib_audio_ALseterrorhandler=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_audio_ALseterrorhandler" >&5 -echo "${ECHO_T}$ac_cv_lib_audio_ALseterrorhandler" >&6 -if test $ac_cv_lib_audio_ALseterrorhandler = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_audio_ALseterrorhandler" >&5 +$as_echo "$ac_cv_lib_audio_ALseterrorhandler" >&6; } +if test "x$ac_cv_lib_audio_ALseterrorhandler" = xyes; then : driver_sgi=yes fi if test $driver_sgi = yes then -cat >>confdefs.h <<\_ACEOF -#define DRIVER_SGI 1 -_ACEOF +$as_echo "#define DRIVER_SGI 1" >>confdefs.h LIBS="$LIBS -laudio" - irix_support=yes + irix_support=yes fi fi fi ;; esac - - -if test x$irix_support = xyes; then + if test x$irix_support = xyes; then DRIVER_IRIX_TRUE= DRIVER_IRIX_FALSE='#' else @@ -8739,157 +7804,19 @@ -# Check whether --enable-sun or --disable-sun was given. -if test "${enable_sun+set}" = set; then - enableval="$enable_sun" - sun_support=no -fi; - -if test x$sun_support != xno; then - -for ac_header in sys/audioio.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no +# Check whether --enable-sun was given. +if test "${enable_sun+set}" = set; then : + enableval=$enable_sun; sun_support=no fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +if test x$sun_support != xno; then + for ac_header in sys/audioio.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/audioio.h" "ac_cv_header_sys_audioio_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_audioio_h" = xyes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_AUDIOIO_H 1 _ACEOF fi @@ -8898,16 +7825,12 @@ if test "${ac_cv_header_sys_audioio_h}" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define DRIVER_SUN 1 -_ACEOF +$as_echo "#define DRIVER_SUN 1" >>confdefs.h fi fi - - -if test "${ac_cv_header_sys_audioio_h}" = "yes"; then + if test "${ac_cv_header_sys_audioio_h}" = "yes"; then DRIVER_SUN_TRUE= DRIVER_SUN_FALSE='#' else @@ -8917,86 +7840,60 @@ -# Check whether --enable-sdl or --disable-sdl was given. -if test "${enable_sdl+set}" = set; then - enableval="$enable_sdl" - sdl_support=no -fi; +# Check whether --enable-sdl was given. +if test "${enable_sdl+set}" = set; then : + enableval=$enable_sdl; sdl_support=no +fi + if test x$sdl_support != xno; then - echo "$as_me:$LINENO: checking target system type" >&5 -echo $ECHO_N "checking target system type... $ECHO_C" >&6 -if test "${ac_cv_target+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_target_alias=$target_alias -test "x$ac_cv_target_alias" = "x" && - ac_cv_target_alias=$ac_cv_host_alias -ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} - { (exit 1); exit 1; }; } - -fi -echo "$as_me:$LINENO: result: $ac_cv_target" >&5 -echo "${ECHO_T}$ac_cv_target" >&6 -target=$ac_cv_target -target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -# Check whether --with-sdl-prefix or --without-sdl-prefix was given. -if test "${with_sdl_prefix+set}" = set; then - withval="$with_sdl_prefix" - sdl_prefix="$withval" + +# Check whether --with-sdl-prefix was given. +if test "${with_sdl_prefix+set}" = set; then : + withval=$with_sdl_prefix; sdl_prefix="$withval" else sdl_prefix="" -fi; +fi + -# Check whether --with-sdl-exec-prefix or --without-sdl-exec-prefix was given. -if test "${with_sdl_exec_prefix+set}" = set; then - withval="$with_sdl_exec_prefix" - sdl_exec_prefix="$withval" +# Check whether --with-sdl-exec-prefix was given. +if test "${with_sdl_exec_prefix+set}" = set; then : + withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval" else sdl_exec_prefix="" -fi; -# Check whether --enable-sdltest or --disable-sdltest was given. -if test "${enable_sdltest+set}" = set; then - enableval="$enable_sdltest" +fi +# Check whether --enable-sdltest was given. +if test "${enable_sdltest+set}" = set; then : + enableval=$enable_sdltest; else enable_sdltest=yes -fi; +fi + if test x$sdl_exec_prefix != x ; then - sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" - if test x${SDL_CONFIG+set} != xset ; then - SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config - fi + sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config + fi fi if test x$sdl_prefix != x ; then - sdl_args="$sdl_args --prefix=$sdl_prefix" - if test x${SDL_CONFIG+set} != xset ; then - SDL_CONFIG=$sdl_prefix/bin/sdl-config - fi + sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_prefix/bin/sdl-config + fi fi - - PATH="$prefix/bin:$prefix/usr/bin:$PATH" + as_save_PATH="$PATH" + if test "x$prefix" != xNONE; then + PATH="$prefix/bin:$prefix/usr/bin:$PATH" + fi # Extract the first word of "sdl-config", so it can be a program name with args. set dummy sdl-config; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_SDL_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SDL_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 else case $SDL_CONFIG in [\\/]* | ?:[\\/]*) @@ -9008,59 +7905,59 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" ;; esac fi SDL_CONFIG=$ac_cv_path_SDL_CONFIG - if test -n "$SDL_CONFIG"; then - echo "$as_me:$LINENO: result: $SDL_CONFIG" >&5 -echo "${ECHO_T}$SDL_CONFIG" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SDL_CONFIG" >&5 +$as_echo "$SDL_CONFIG" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + + PATH="$as_save_PATH" min_sdl_version=1.2.0 - echo "$as_me:$LINENO: checking for SDL - version >= $min_sdl_version" >&5 -echo $ECHO_N "checking for SDL - version >= $min_sdl_version... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL - version >= $min_sdl_version" >&5 +$as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; } no_sdl="" if test "$SDL_CONFIG" = "no" ; then no_sdl=yes else - SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags` - SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs` + SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags` + SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs` - sdl_major_version=`$SDL_CONFIG $sdl_args --version | \ + sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` - sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \ + sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_sdltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" + ac_save_CXXFLAGS="$CXXFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" rm -f conf.sdltest - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -9121,39 +8018,27 @@ _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : -( exit $ac_status ) -no_sdl=yes +else + no_sdl=yes fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi + CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_sdl" = x ; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } have_sdl=yes else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } if test "$SDL_CONFIG" = "no" ; then echo "*** The sdl-config script installed by SDL could not be found" echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" @@ -9165,12 +8050,9 @@ else echo "*** Could not run SDL test program, checking why..." CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -9189,28 +8071,7 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" echo "*** version of SDL. If it is not finding SDL, you'll need to set your" @@ -9221,58 +8082,181 @@ echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" echo "*** may want to edit the sdl-config script: $SDL_CONFIG" fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - SDL_CFLAGS="" - SDL_LIBS="" - have_sdl=no - fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + SDL_CFLAGS="" + SDL_LIBS="" + have_sdl=no + fi + + + rm -f conf.sdltest + + if test x$have_sdl = xyes; then + +$as_echo "#define DRIVER_SDL 1" >>confdefs.h + + CFLAGS="$CFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + fi +fi + + if test x$have_sdl = xyes; then + DRIVER_SDL_TRUE= + DRIVER_SDL_FALSE='#' +else + DRIVER_SDL_TRUE='#' + DRIVER_SDL_FALSE= +fi + + + +# Check whether --enable-pulse was given. +if test "${enable_pulse+set}" = set; then : + enableval=$enable_pulse; pulse_support=no +fi + + +if test x$pulse_support != xno; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PULSE" >&5 +$as_echo_n "checking for PULSE... " >&6; } + +if test -n "$PULSE_CFLAGS"; then + pkg_cv_PULSE_CFLAGS="$PULSE_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libpulse") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PULSE_CFLAGS=`$PKG_CONFIG --cflags "libpulse" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$PULSE_LIBS"; then + pkg_cv_PULSE_LIBS="$PULSE_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libpulse") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PULSE_LIBS=`$PKG_CONFIG --libs "libpulse" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PULSE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpulse" 2>&1` + else + PULSE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpulse" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$PULSE_PKG_ERRORS" >&5 + + pulse_support=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + pulse_support=no +else + PULSE_CFLAGS=$pkg_cv_PULSE_CFLAGS + PULSE_LIBS=$pkg_cv_PULSE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + pulse_support=yes +fi + if test x$pulse_support = xyes; then + CFLAGS="$CFLAGS $PULSE_CFLAGS" + LIBS="$LIBS $PULSE_LIBS" + +$as_echo "#define DRIVER_PULSE 1" >>confdefs.h + + fi +fi + if test x$pulse_support = xyes; then + DRIVER_PULSE_TRUE= + DRIVER_PULSE_FALSE='#' +else + DRIVER_PULSE_TRUE='#' + DRIVER_PULSE_FALSE= +fi - rm -f conf.sdltest - if test x$have_sdl = xyes; then -cat >>confdefs.h <<\_ACEOF -#define DRIVER_SDL 1 -_ACEOF - CFLAGS="$CFLAGS $SDL_CFLAGS" - LIBS="$LIBS $SDL_LIBS" - fi +# Check whether --with-graphics-backend was given. +if test "${with_graphics_backend+set}" = set; then : + withval=$with_graphics_backend; graphics_backend=$withval +else + graphics_backend=X11 fi +case $graphics_backend in #( + gdk) : + ;; #( + X11) : + ac_fn_c_check_header_mongrel "$LINENO" "X11/Xlib.h" "ac_cv_header_X11_Xlib_h" "$ac_includes_default" +if test "x$ac_cv_header_X11_Xlib_h" = xyes; then : -if test x$have_sdl = xyes; then - DRIVER_SDL_TRUE= - DRIVER_SDL_FALSE='#' +$as_echo "#define BACKEND_X11 1" >>confdefs.h + + LIBS="$LIBS -lX11" + CFLAGS="$CFLAGS -DGDK_DISABLE_DEPRECATED" else - DRIVER_SDL_TRUE='#' - DRIVER_SDL_FALSE= + graphics_backend=gdk fi + ;; #( + *) : + as_fn_error $? "Invalid argument passed to --with-graphics-backend, should be one of [gdk/X11]" "$LINENO" 5 ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: Selecting the graphics backend... $graphics_backend" >&5 +$as_echo "$as_me: Selecting the graphics backend... $graphics_backend" >&6;} if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -9282,35 +8266,37 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. @@ -9320,262 +8306,354 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - RANLIB=$ac_ct_RANLIB + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi else RANLIB="$ac_cv_prog_RANLIB" fi -echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6 -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing rint" >&5 +$as_echo_n "checking for library containing rint... " >&6; } +if ${ac_cv_search_rint+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char rint (); +int +main () +{ +return rint (); + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +for ac_lib in '' m; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_rint=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_rint+:} false; then : + break +fi +done +if ${ac_cv_search_rint+:} false; then : + +else + ac_cv_search_rint=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_rint" >&5 +$as_echo "$ac_cv_search_rint" >&6; } +ac_res=$ac_cv_search_rint +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + + as_fn_error $? "unable to find the rint() function" "$LINENO" 5 + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include + #include int main () { -#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN - bogus endian macros -#endif +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include + #include int main () { #if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif + not big endian + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_c_bigendian=no + ac_cv_c_bigendian=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include -# It does not; compile a test program. -if test "$cross_compiling" = yes; then - # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } +#include + int main () { - _ascii (); _ebcdic (); +#ifndef _BIG_ENDIAN + not big endian + #endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no fi -if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +$ac_includes_default int main () { - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long l; - char c[sizeof (long)]; - } u; - u.l = 1; - exit (u.c[sizeof (long) - 1] == 1); + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi -( exit $ac_status ) -ac_cv_c_bigendian=yes + fi fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + + +# Check whether --enable-hacks was given. +if test "${enable_hacks+set}" = set; then : + enableval=$enable_hacks; gtk_hacks=yes fi + + +if test x$gtk_hacks = xyes; then + +$as_echo "#define GTK_HACKS 1" >>confdefs.h + fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +# Check whether --enable-suid_root was given. +if test "${enable_suid_root+set}" = set; then : + enableval=$enable_suid_root; suid_root=yes fi -echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6 -case $ac_cv_c_bigendian in - yes) -cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF - ;; - no) - ;; - *) - { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; -esac + + if test x$suid_root = xyes; then + SUID_ROOT_TRUE= + SUID_ROOT_FALSE='#' +else + SUID_ROOT_TRUE='#' + SUID_ROOT_FALSE= +fi if test "x${prefix}" = "xNONE"; then @@ -9592,7 +8670,8 @@ fi - ac_config_files="$ac_config_files Makefile app/Makefile app/drivers/Makefile app/mixers/Makefile po/Makefile.in doc/Makefile" +ac_config_files="$ac_config_files Makefile app/Makefile app/drivers/Makefile app/mixers/Makefile po/Makefile.in doc/Makefile" + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -9611,39 +8690,70 @@ # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. +# So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. -{ +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; + ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} | + esac | + sort +) | sed ' + /^ac_cv_env_/b end t clear - : clear + :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end - /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - : end' >>confcache -if diff $cache_file confcache >/dev/null 2>&1; then :; else - if test -w $cache_file; then - test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" - cat confcache >$cache_file + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi else - echo "not updating unwritable cache $cache_file" + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -9652,143 +8762,94 @@ # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/; -s/:*\${srcdir}:*/:/; -s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; -s/:*$//; -s/^[^=]*=[ ]*$//; -}' -fi - DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. - ac_i=`echo "$ac_i" | - sed 's/\$U\././;s/\.o$//;s/\.obj$//'` - # 2. Add them. - ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${NO_ASM_TRUE}" && test -z "${NO_ASM_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"NO_ASM\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"NO_ASM\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${USE_GNOME_TRUE}" && test -z "${USE_GNOME_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"USE_GNOME\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"USE_GNOME\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${NO_GDK_PIXBUF_TRUE}" && test -z "${NO_GDK_PIXBUF_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"NO_GDK_PIXBUF\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"NO_GDK_PIXBUF\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_CANVAS_TRUE}" && test -z "${USE_CANVAS_FALSE}"; then + as_fn_error $? "conditional \"USE_CANVAS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DRIVER_OSS_TRUE}" && test -z "${DRIVER_OSS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"DRIVER_OSS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"DRIVER_OSS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "conditional \"DRIVER_OSS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DRIVER_ALSA_TRUE}" && test -z "${DRIVER_ALSA_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"DRIVER_ALSA\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"DRIVER_ALSA\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${DRIVER_ALSA_050_TRUE}" && test -z "${DRIVER_ALSA_050_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"DRIVER_ALSA_050\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"DRIVER_ALSA_050\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${DRIVER_ALSA_09x_TRUE}" && test -z "${DRIVER_ALSA_09x_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"DRIVER_ALSA_09x\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"DRIVER_ALSA_09x\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${DRIVER_ESD_TRUE}" && test -z "${DRIVER_ESD_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"DRIVER_ESD\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"DRIVER_ESD\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "conditional \"DRIVER_ALSA\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DRIVER_JACK_TRUE}" && test -z "${DRIVER_JACK_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"DRIVER_JACK\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"DRIVER_JACK\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "conditional \"DRIVER_JACK\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DRIVER_IRIX_TRUE}" && test -z "${DRIVER_IRIX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"DRIVER_IRIX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"DRIVER_IRIX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "conditional \"DRIVER_IRIX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DRIVER_SUN_TRUE}" && test -z "${DRIVER_SUN_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"DRIVER_SUN\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"DRIVER_SUN\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "conditional \"DRIVER_SUN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DRIVER_SDL_TRUE}" && test -z "${DRIVER_SDL_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"DRIVER_SDL\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"DRIVER_SDL\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "conditional \"DRIVER_SDL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DRIVER_PULSE_TRUE}" && test -z "${DRIVER_PULSE_FALSE}"; then + as_fn_error $? "conditional \"DRIVER_PULSE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +if test -z "${SUID_ROOT_TRUE}" && test -z "${SUID_ROOT_FALSE}"; then + as_fn_error $? "conditional \"SUID_ROOT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -: ${CONFIG_STATUS=./config.status} +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -9798,81 +8859,253 @@ debug=false ac_cs_recheck=false ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi -DUALCASE=1; export DUALCASE # for MKS sh -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` - -# PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' @@ -9880,148 +9113,111 @@ as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 -echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 -echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file else - as_expr=false + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln else - as_ln_s='cp -p' + as_ln_s='cp -pR' fi -rm -f conf$$ conf$$.exe conf$$.file +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -10030,31 +9226,20 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 -# Open the log real soon, to keep \$[0] and so on meaningful, and to +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. Logging --version etc. is OK. -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX -} >&5 -cat >&5 <<_CSEOF - -This file was extended by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was +# values after options handling. +ac_log=" +This file was extended by SoundTracker $as_me 1.0.2-pre2, which was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -10062,45 +9247,47 @@ CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + _ACEOF -# Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac -if test -n "$ac_config_links"; then - echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS -fi -if test -n "$ac_config_commands"; then - echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS -fi +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" -cat >>$CONFIG_STATUS <<\_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE Configuration files: $config_files @@ -10111,84 +9298,92 @@ Configuration commands: $config_commands -Report bugs to ." -_ACEOF +Report bugs to ." -cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" +SoundTracker config.status 1.0.2-pre2 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in - --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= ac_shift=: ;; - -*) + *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_option=$1 - ac_need_defaults=false;; esac case $ac_option in # Handling of the options. -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; - --version | --vers* | -V ) - echo "$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - { { echo "$as_me:$LINENO: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit 0 ;; - --debug | --d* | -d ) + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; } ;; + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" ;; + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; esac shift @@ -10202,23 +9397,36 @@ fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" fi _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 -cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # -# INIT-COMMANDS section. +# INIT-COMMANDS # - AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it - # from automake. + # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" @@ -10226,28 +9434,27 @@ _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF +# Handling of arguments. for ac_config_target in $ac_config_targets do - case "$ac_config_target" in - # Handling of arguments. - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "app/Makefile" ) CONFIG_FILES="$CONFIG_FILES app/Makefile" ;; - "app/drivers/Makefile" ) CONFIG_FILES="$CONFIG_FILES app/drivers/Makefile" ;; - "app/mixers/Makefile" ) CONFIG_FILES="$CONFIG_FILES app/mixers/Makefile" ;; - "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; - "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; - "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "app/Makefile") CONFIG_FILES="$CONFIG_FILES app/Makefile" ;; + "app/drivers/Makefile") CONFIG_FILES="$CONFIG_FILES app/drivers/Makefile" ;; + "app/mixers/Makefile") CONFIG_FILES="$CONFIG_FILES app/mixers/Makefile" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done + # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely @@ -10259,877 +9466,678 @@ fi # Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason to put it here, and in addition, +# simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. -# Create a temporary directory, and hook for its removal unless debugging. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. $debug || { - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 } - # Create a (secure) tmp directory for tmp files. { - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" } || { - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -# -# CONFIG_FILES section. -# +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "\$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@DEFS@,$DEFS,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@LIBS@,$LIBS,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@CYGPATH_W@,$CYGPATH_W,;t t -s,@PACKAGE@,$PACKAGE,;t t -s,@VERSION@,$VERSION,;t t -s,@ACLOCAL@,$ACLOCAL,;t t -s,@AUTOCONF@,$AUTOCONF,;t t -s,@AUTOMAKE@,$AUTOMAKE,;t t -s,@AUTOHEADER@,$AUTOHEADER,;t t -s,@MAKEINFO@,$MAKEINFO,;t t -s,@AMTAR@,$AMTAR,;t t -s,@install_sh@,$install_sh,;t t -s,@STRIP@,$STRIP,;t t -s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t -s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t -s,@AWK@,$AWK,;t t -s,@SET_MAKE@,$SET_MAKE,;t t -s,@am__leading_dot@,$am__leading_dot,;t t -s,@CC@,$CC,;t t -s,@CFLAGS@,$CFLAGS,;t t -s,@LDFLAGS@,$LDFLAGS,;t t -s,@CPPFLAGS@,$CPPFLAGS,;t t -s,@ac_ct_CC@,$ac_ct_CC,;t t -s,@EXEEXT@,$EXEEXT,;t t -s,@OBJEXT@,$OBJEXT,;t t -s,@DEPDIR@,$DEPDIR,;t t -s,@am__include@,$am__include,;t t -s,@am__quote@,$am__quote,;t t -s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t -s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t -s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t -s,@CCDEPMODE@,$CCDEPMODE,;t t -s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t -s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t -s,@NO_ASM_TRUE@,$NO_ASM_TRUE,;t t -s,@NO_ASM_FALSE@,$NO_ASM_FALSE,;t t -s,@CCAS@,$CCAS,;t t -s,@CCASFLAGS@,$CCASFLAGS,;t t -s,@CPP@,$CPP,;t t -s,@EGREP@,$EGREP,;t t -s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t -s,@USE_NLS@,$USE_NLS,;t t -s,@MSGFMT@,$MSGFMT,;t t -s,@GMSGFMT@,$GMSGFMT,;t t -s,@XGETTEXT@,$XGETTEXT,;t t -s,@MSGMERGE@,$MSGMERGE,;t t -s,@build@,$build,;t t -s,@build_cpu@,$build_cpu,;t t -s,@build_vendor@,$build_vendor,;t t -s,@build_os@,$build_os,;t t -s,@host@,$host,;t t -s,@host_cpu@,$host_cpu,;t t -s,@host_vendor@,$host_vendor,;t t -s,@host_os@,$host_os,;t t -s,@INTL_MACOSX_LIBS@,$INTL_MACOSX_LIBS,;t t -s,@LIBICONV@,$LIBICONV,;t t -s,@LTLIBICONV@,$LTLIBICONV,;t t -s,@INTLLIBS@,$INTLLIBS,;t t -s,@LIBINTL@,$LIBINTL,;t t -s,@LTLIBINTL@,$LTLIBINTL,;t t -s,@POSUB@,$POSUB,;t t -s,@GTK_CONFIG@,$GTK_CONFIG,;t t -s,@GTK_CFLAGS@,$GTK_CFLAGS,;t t -s,@GTK_LIBS@,$GTK_LIBS,;t t -s,@gnomepath@,$gnomepath,;t t -s,@USE_GNOME_TRUE@,$USE_GNOME_TRUE,;t t -s,@USE_GNOME_FALSE@,$USE_GNOME_FALSE,;t t -s,@GDK_PIXBUF_CONFIG@,$GDK_PIXBUF_CONFIG,;t t -s,@GDK_PIXBUF_CFLAGS@,$GDK_PIXBUF_CFLAGS,;t t -s,@GDK_PIXBUF_LIBS@,$GDK_PIXBUF_LIBS,;t t -s,@NO_GDK_PIXBUF_TRUE@,$NO_GDK_PIXBUF_TRUE,;t t -s,@NO_GDK_PIXBUF_FALSE@,$NO_GDK_PIXBUF_FALSE,;t t -s,@PKG_CONFIG@,$PKG_CONFIG,;t t -s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t -s,@SNDFILE_CFLAGS@,$SNDFILE_CFLAGS,;t t -s,@SNDFILE_LIBS@,$SNDFILE_LIBS,;t t -s,@AUDIOFILE_CONFIG@,$AUDIOFILE_CONFIG,;t t -s,@AUDIOFILE_CFLAGS@,$AUDIOFILE_CFLAGS,;t t -s,@AUDIOFILE_LIBS@,$AUDIOFILE_LIBS,;t t -s,@DRIVER_OSS_TRUE@,$DRIVER_OSS_TRUE,;t t -s,@DRIVER_OSS_FALSE@,$DRIVER_OSS_FALSE,;t t -s,@DRIVER_ALSA_TRUE@,$DRIVER_ALSA_TRUE,;t t -s,@DRIVER_ALSA_FALSE@,$DRIVER_ALSA_FALSE,;t t -s,@DRIVER_ALSA_050_TRUE@,$DRIVER_ALSA_050_TRUE,;t t -s,@DRIVER_ALSA_050_FALSE@,$DRIVER_ALSA_050_FALSE,;t t -s,@DRIVER_ALSA_09x_TRUE@,$DRIVER_ALSA_09x_TRUE,;t t -s,@DRIVER_ALSA_09x_FALSE@,$DRIVER_ALSA_09x_FALSE,;t t -s,@ESD_CONFIG@,$ESD_CONFIG,;t t -s,@ESD_CFLAGS@,$ESD_CFLAGS,;t t -s,@ESD_LIBS@,$ESD_LIBS,;t t -s,@DRIVER_ESD_TRUE@,$DRIVER_ESD_TRUE,;t t -s,@DRIVER_ESD_FALSE@,$DRIVER_ESD_FALSE,;t t -s,@ST_S_JACK_LIBS@,$ST_S_JACK_LIBS,;t t -s,@ST_S_JACK_INCLUDES@,$ST_S_JACK_INCLUDES,;t t -s,@DRIVER_JACK_TRUE@,$DRIVER_JACK_TRUE,;t t -s,@DRIVER_JACK_FALSE@,$DRIVER_JACK_FALSE,;t t -s,@DRIVER_IRIX_TRUE@,$DRIVER_IRIX_TRUE,;t t -s,@DRIVER_IRIX_FALSE@,$DRIVER_IRIX_FALSE,;t t -s,@DRIVER_SUN_TRUE@,$DRIVER_SUN_TRUE,;t t -s,@DRIVER_SUN_FALSE@,$DRIVER_SUN_FALSE,;t t -s,@target@,$target,;t t -s,@target_cpu@,$target_cpu,;t t -s,@target_vendor@,$target_vendor,;t t -s,@target_os@,$target_os,;t t -s,@SDL_CONFIG@,$SDL_CONFIG,;t t -s,@SDL_CFLAGS@,$SDL_CFLAGS,;t t -s,@SDL_LIBS@,$SDL_LIBS,;t t -s,@DRIVER_SDL_TRUE@,$DRIVER_SDL_TRUE,;t t -s,@DRIVER_SDL_FALSE@,$DRIVER_SDL_FALSE,;t t -s,@RANLIB@,$RANLIB,;t t -s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t -CEOF - -_ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF - # Split the substitutions into bite-sized pieces for seds with - # small command number limits, like on Digital OSF/1 and HP-UX. - ac_max_sed_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # Line after last line for current file. - ac_more_lines=: - ac_sed_cmds= - while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - else - sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - fi - if test ! -s $tmp/subs.frag; then - ac_more_lines=false - else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` - fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; esac - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || + ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # We are building in place. ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac + case $ac_mode in + :F) + # + # CONFIG_FILE + # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - configure_input= - else - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s,@configure_input@,$configure_input,;t t -s,@srcdir@,$ac_srcdir,;t t -s,@abs_srcdir@,$ac_abs_srcdir,;t t -s,@top_srcdir@,$ac_top_srcdir,;t t -s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t -s,@builddir@,$ac_builddir,;t t -s,@abs_builddir@,$ac_abs_builddir,;t t -s,@top_builddir@,$ac_top_builddir,;t t -s,@abs_top_builddir@,$ac_abs_top_builddir,;t t -s,@INSTALL@,$ac_INSTALL,;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out - rm -f $tmp/stdin - if test x"$ac_file" != x-; then - mv $tmp/out $ac_file - else - cat $tmp/out - rm -f $tmp/out - fi - -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -# -# CONFIG_HEADER section. -# +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='[ ].*$,\1#\2' -ac_dC=' ' -ac_dD=',;t' -# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='$,\1#\2define\3' -ac_uC=' ' -ac_uD=',;t' - -for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + rm -f "$ac_tmp/stdin" case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - # Do quote $f, to prevent DOS paths from being IFS'd. - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } - # Remove the trailing spaces. - sed 's/[ ]*$//' $ac_file_inputs >$tmp/in - -_ACEOF - -# Transform confdefs.h into two sed scripts, `conftest.defines' and -# `conftest.undefs', that substitutes the proper values into -# config.h.in to produce config.h. The first handles `#define' -# templates, and the second `#undef' templates. -# And first: Protect against being on the right side of a sed subst in -# config.status. Protect against being in an unquoted here document -# in config.status. -rm -f conftest.defines conftest.undefs -# Using a here document instead of a string reduces the quoting nightmare. -# Putting comments in sed scripts is not portable. -# -# `end' is used to avoid that the second main sed command (meant for -# 0-ary CPP macros) applies to n-ary macro definitions. -# See the Autoconf documentation for `clear'. -cat >confdef2sed.sed <<\_ACEOF -s/[\\&,]/\\&/g -s,[\\$`],\\&,g -t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp -t end -s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp -: end -_ACEOF -# If some macros were called several times there might be several times -# the same #defines, which is useless. Nevertheless, we may not want to -# sort them, since we want the *last* AC-DEFINE to be honored. -uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines -sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs -rm -f confdef2sed.sed - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >>conftest.undefs <<\_ACEOF -s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, -_ACEOF - -# Break up conftest.defines because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS -echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS -echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS -echo ' :' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.defines >/dev/null -do - # Write a limited-size here document to $tmp/defines.sed. - echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#define' lines. - echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/defines.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines -echo ' fi # grep' >>$CONFIG_STATUS -echo >>$CONFIG_STATUS - -# Break up conftest.undefs because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #undef templates' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.undefs >/dev/null -do - # Write a limited-size here document to $tmp/undefs.sed. - echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#undef' - echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/undefs.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail - rm -f conftest.undefs - mv conftest.tail conftest.undefs -done -rm -f conftest.undefs - -cat >>$CONFIG_STATUS <<\_ACEOF - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - echo "/* Generated by configure. */" >$tmp/config.h - else - echo "/* $ac_file. Generated by configure. */" >$tmp/config.h - fi - cat $tmp/in >>$tmp/config.h - rm -f $tmp/in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # if test x"$ac_file" != x-; then - if diff $ac_file $tmp/config.h >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} else - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - rm -f $ac_file - mv $tmp/config.h $ac_file + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - cat $tmp/config.h - rm -f $tmp/config.h + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 fi -# Compute $ac_file's index in $config_headers. +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $ac_file | $ac_file:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || -$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X$ac_file : 'X\(//\)[^/]' \| \ - X$ac_file : 'X\(//\)$' \| \ - X$ac_file : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X$ac_file | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'`/stamp-h$_am_stamp_count -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -# -# CONFIG_COMMANDS section. -# -for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue - ac_dest=`echo "$ac_file" | sed 's,:.*,,'` - ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_dir=`(dirname "$ac_dest") 2>/dev/null || -$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_dest" : 'X\(//\)[^/]' \| \ - X"$ac_dest" : 'X\(//\)$' \| \ - X"$ac_dest" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_dest" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac - { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 -echo "$as_me: executing $ac_dest commands" >&6;} - case $ac_dest in - depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`(dirname "$mf") 2>/dev/null || + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - else - continue - fi - grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue - # Extract the definition of DEP_FILES from the Makefile without - # running `make'. - DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` - test -z "$DEPDIR" && continue - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n -e '/^U = / s///p' < "$mf"` - test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" - # We invoke sed twice because it is the simplest approach to - # changing $(DEPDIR) to its actual value in the expansion. - for file in `sed -n -e ' - /^DEP_FILES = .*\\\\$/ { - s/^DEP_FILES = // - :loop - s/\\\\$// - p - n - /\\\\$/ b loop - p - } - /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`(dirname "$file") 2>/dev/null || + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p $dirpart/$fdir - else - as_dir=$dirpart/$fdir - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 -echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} - { (exit 1); exit 1; }; }; } - - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" done -done +} ;; - default-1 ) + "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in @@ -11139,7 +10147,7 @@ case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. @@ -11155,7 +10163,8 @@ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" - cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration @@ -11166,11 +10175,12 @@ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` - # Hide the ALL_LINGUAS assigment from automake. + # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES @@ -11241,17 +10251,18 @@ ;; esac done ;; + esac -done -_ACEOF +done # for ac_tag -cat >>$CONFIG_STATUS <<\_ACEOF -{ (exit 0); exit 0; } +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -11271,6 +10282,10 @@ exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi diff -Nru soundtracker-0.6.8/configure.ac soundtracker-1.0.2~pre2/configure.ac --- soundtracker-0.6.8/configure.ac 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/configure.ac 2021-02-26 19:46:15.000000000 +0000 @@ -0,0 +1,337 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_PREREQ([2.68]) +AC_INIT([SoundTracker], [1.0.2-pre2], [soundtracker-discuss@lists.sourceforge.net], [soundtracker]) +AC_CONFIG_SRCDIR([app/endian-conv.h]) +AM_INIT_AUTOMAKE([1.11]) + +AM_CONFIG_HEADER(config.h) + +dnl ----------------------------------------------------------------------- +dnl Test for GCC +dnl ----------------------------------------------------------------------- + +AC_PROG_CC +AC_PATH_PROG(sedpath, sed) + +# Commonly distributed binutils (e.g., Debian) comes built with +# --enable-deterministic-archives which makes ar default to option "D". +# Option "D" overrides "u" and if "u" is given a cautionary message will be +# printed. Autoconf seems to set options "cru" by default. Avoid the +# annoying message by removing "u", and, for completeness, explicitly put "D" +# as well. +ARFLAGS=crD +AC_SUBST(ARFLAGS) + +if test $GCC != yes; then + echo "Fatal error: Need gcc" + exit 1 +fi + +CFLAGS="$CFLAGS -Wall -DG_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED" + +dnl ----------------------------------------------------------------------- +dnl Test for poll() +dnl ----------------------------------------------------------------------- + +AC_CHECK_HEADER(sys/poll.h, + [AC_CHECK_FUNCS(poll, [], + [AC_CHECK_FUNC(select, [], [AC_MSG_ERROR(no poll and no select?!?)])] + ) + ] +) + +dnl ----------------------------------------------------------------------- +dnl Initialize NLS +dnl ----------------------------------------------------------------------- + +dnl Also add new catalogs to soundtracker.spec (%build)! +#ALL_LINGUAS="da de es fr gl hr it ja no pl ru sk sl sv" +AM_GNU_GETTEXT([external]) +AM_GNU_GETTEXT_VERSION([0.19.8]) + +dnl ----------------------------------------------------------------------- +dnl Test for required GTK+ +dnl ----------------------------------------------------------------------- +PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.24 glib-2.0 >= 2.32 gthread-2.0 gmodule-2.0 x11]) +AC_SUBST(GTK_CFLAGS) +AC_SUBST(GTK_LIBS) +LIBS="$LIBS $GTK_LIBS" +CFLAGS="$CFLAGS $GTK_CFLAGS" + +dnl ----------------------------------------------------------------------- +dnl Test for optional GooCanvas +dnl ----------------------------------------------------------------------- + +AC_ARG_ENABLE(canvas, +AS_HELP_STRING([--disable-canvas], [Disable use of GooCanvas (default = try)]), + canvas=no) + +if test x$canvas != xno; then + PKG_CHECK_MODULES(CANVAS, [goocanvas], [canvas=yes], [canvas=no]) + if test "$canvas" = yes; then + AC_SUBST(CANVAS_CFLAGS) + AC_SUBST(CANVAS_LIBS) + LIBS="$LIBS $CANVAS_LIBS" + CFLAGS="$CFLAGS $CANVAS_CFLAGS" + AC_DEFINE([USE_CANVAS], 1, [Set if GooCanvas support is compiled in]) + fi +fi + +AM_CONDITIONAL(USE_CANVAS, test "x$canvas" = "xyes") + +dnl ----------------------------------------------------------------------- +dnl Test for libsndfile +dnl ----------------------------------------------------------------------- + +AC_ARG_ENABLE(sndfile, +AS_HELP_STRING([--disable-sndfile], [Disable usage of libsndfile (default = try)]), +sndfile_support=no) + +ac_cv_sndfile=0 + +if test x$sndfile_support != xno ; then + PKG_CHECK_MODULES(SNDFILE, [sndfile > 1.0.1], ac_cv_sndfile=1, ac_cv_sndfile=0) + if test x$ac_cv_sndfile = x1 ; then + CFLAGS="$CFLAGS $SNDFILE_CFLAGS" + LIBS="$LIBS $SNDFILE_LIBS" + fi +fi + +AC_DEFINE_UNQUOTED(USE_SNDFILE,${ac_cv_sndfile}, + [Set to 1 if you wish to use libsndfile.]) + +dnl ----------------------------------------------------------------------- +dnl Test for audiofile library (if libsndfile is not found or disabled) +dnl ----------------------------------------------------------------------- + +if test x$ac_cv_sndfile != x1 ; then + PKG_CHECK_MODULES(AUDIOFILE, audiofile > 0.1.5, ac_cv_audiofile=1, + [AC_MSG_RESULT([* No sample I/O library found, disabling sample loader (ignore error above).])] + ) + if test x$ac_cv_audiofile = x1; then + CFLAGS="$CFLAGS $AUDIOFILE_CFLAGS" + LIBS="$LIBS $AUDIOFILE_LIBS" + AF_VERSION=$(pkg-config --modversion audiofile | sed "s/^[[0-9]]*\.//;s/\..*$//") + AC_DEFINE_UNQUOTED([AUDIOFILE_VERSION], + ${AF_VERSION}, + [Audiofile minor version for use in headers]) + fi +fi + +dnl ----------------------------------------------------------------------- +dnl Checks for header files +dnl ----------------------------------------------------------------------- + +AC_HEADER_STDC +AC_CHECK_FUNCS(setresuid) + +dnl ----------------------------------------------------------------------- +dnl Test for OSS headers +dnl ----------------------------------------------------------------------- + +AC_ARG_ENABLE(oss, +AS_HELP_STRING([--disable-oss], [Disable OSS driver (default = try)]), +oss_support=no) + +if test x$oss_support != xno; then + AC_CHECK_HEADERS(sys/soundcard.h machine/soundcard.h soundcard.h) + if test "${ac_cv_header_sys_soundcard_h}" = "yes" || \ + test "${ac_cv_header_machine_soundcard_h}" = "yes" || \ + test "${ac_cv_header_soundcard_h}" = "yes"; then + oss_support=yes + AC_DEFINE([DRIVER_OSS], 1, [Set if OSS driver wanted]) + case `uname` in + OpenBSD*) + LIBS="$LIBS -lossaudio" + ;; + NetBSD*) + AC_CHECK_LIB(ossaudio, _oss_ioctl, LIBS="$LIBS -lossaudio") + ;; + esac + else + oss_support=no + fi +fi + +AM_CONDITIONAL(DRIVER_OSS, test x$oss_support = xyes) + +dnl ----------------------------------------------------------------------- +dnl Test for ALSA +dnl ----------------------------------------------------------------------- + +AC_ARG_ENABLE(alsa, +AS_HELP_STRING([--disable-alsa], [Disable ALSA driver (default = try)]), +alsa_support=no) + +if test x$alsa_support != xno; then + AM_PATH_ALSA([1.0.29], have_alsa=yes, have_alsa=no) + if test x$have_alsa = xyes; then + AC_DEFINE([DRIVER_ALSA], 1, [Set if ALSA driver wanted]) + CFLAGS="$CFLAGS $ALSA_CFLAGS" + LIBS="$LIBS $ALSA_LIBS" + fi +fi + +AM_CONDITIONAL(DRIVER_ALSA, test x$have_alsa = xyes) + +dnl ----------------------------------------------------------------------- +dnl Test for JACK +dnl ----------------------------------------------------------------------- + +AC_ARG_ENABLE(jack, +AS_HELP_STRING([--disable-jack], [Disable JACK support (default = try)]), +jack_support=no) + +if test x$jack_support != xno; then + PKG_CHECK_MODULES(JACK, [jack > 0.120.0], jack_support=yes, jack_support=no) + if test x$jack_support = xyes; then + CFLAGS="$CFLAGS $JACK_CFLAGS" + LIBS="$LIBS $JACK_LIBS" + AC_DEFINE([DRIVER_JACK], 1, [Set if JACK support wanted]) + fi +fi + +AM_CONDITIONAL(DRIVER_JACK, test x$jack_support = xyes) + +dnl ----------------------------------------------------------------------- +dnl Test for SGI audio +dnl ----------------------------------------------------------------------- + +AC_ARG_ENABLE(sgi, +AS_HELP_STRING([--disable-sgi], [Disable SGI driver (default = try)]), +sgi_support=no) + +case `uname` in + IRIX*) + if test x$sgi_support != xno; then + AC_CHECK_HEADER(dmedia/audio.h) + if test $ac_cv_header_dmedia_audio_h = yes + then + AC_CHECK_LIB(audio,ALseterrorhandler,driver_sgi=yes) + if test $driver_sgi = yes + then + AC_DEFINE([DRIVER_SGI], 1, [Set if SGI driver wanted]) + LIBS="$LIBS -laudio" + irix_support=yes + fi + fi + fi + ;; +esac + +AM_CONDITIONAL(DRIVER_IRIX, test x$irix_support = xyes) + +dnl ----------------------------------------------------------------------- +dnl Test for Sun audio +dnl ----------------------------------------------------------------------- + +AC_ARG_ENABLE(sun, +AS_HELP_STRING([--disable-sun], [Disable Sun driver (default = try)]), +sun_support=no) + +if test x$sun_support != xno; then + AC_CHECK_HEADERS(sys/audioio.h) + if test "${ac_cv_header_sys_audioio_h}" = "yes"; then + AC_DEFINE([DRIVER_SUN], 1, [Set if Sun audio driver wanted]) + fi +fi + +AM_CONDITIONAL(DRIVER_SUN, test "${ac_cv_header_sys_audioio_h}" = "yes") + +dnl ----------------------------------------------------------------------- +dnl Test for SDL audio +dnl ----------------------------------------------------------------------- + +AC_ARG_ENABLE(sdl, +AS_HELP_STRING([--disable-sdl], [Disable SDL driver (default = try)]), +sdl_support=no) + +if test x$sdl_support != xno; then + AM_PATH_SDL(1.2.0, have_sdl=yes, have_sdl=no) + if test x$have_sdl = xyes; then + AC_DEFINE([DRIVER_SDL], 1, [Set if SDL audio driver wanted]) + CFLAGS="$CFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + fi +fi + +AM_CONDITIONAL(DRIVER_SDL, test x$have_sdl = xyes) + +dnl ----------------------------------------------------------------------- +dnl Test for Pulseaudio +dnl ----------------------------------------------------------------------- + +AC_ARG_ENABLE(pulse, +AS_HELP_STRING([--disable-pulse], [Disable Pulseaudio driver (default = try)]), +pulse_support=no) + +if test x$pulse_support != xno; then + PKG_CHECK_MODULES(PULSE, [libpulse], pulse_support=yes, pulse_support=no) + if test x$pulse_support = xyes; then + CFLAGS="$CFLAGS $PULSE_CFLAGS" + LIBS="$LIBS $PULSE_LIBS" + AC_DEFINE([DRIVER_PULSE], 1, [Set if Pulseaudio driver wanted]) + fi +fi + +AM_CONDITIONAL(DRIVER_PULSE, test x$pulse_support = xyes) + +dnl ----------------------------------------------------------------------- +dnl Selecting graphics backend +dnl ----------------------------------------------------------------------- + +AC_ARG_WITH([graphics-backend], +AS_HELP_STRING([--with-graphics-backend[=@<:@gdk/X11@:>@]], [Backend used for low-level graphics (default = X11)]), +[graphics_backend=$withval], [graphics_backend=X11]) +AS_CASE([$graphics_backend], [gdk], [], + [X11], AC_CHECK_HEADER(X11/Xlib.h, [ + AC_DEFINE([BACKEND_X11], 1, [Set if X11 graphics backend is used]) + LIBS="$LIBS -lX11" + CFLAGS="$CFLAGS -DGDK_DISABLE_DEPRECATED"], [graphics_backend=gdk]), + [AC_MSG_ERROR([Invalid argument passed to --with-graphics-backend, should be one of @<:@gdk/X11@:>@])]) +AC_MSG_NOTICE([Selecting the graphics backend... $graphics_backend]) + +dnl ----------------------------------------------------------------------- +dnl Other tests +dnl ----------------------------------------------------------------------- + +AC_PROG_RANLIB + +AC_SEARCH_LIBS([rint], [m], [], [ + AC_MSG_ERROR([unable to find the rint() function]) +]) + +AC_C_BIGENDIAN + +dnl Check if gtk+ tweaks are used (may cause problems in runtime). +AC_ARG_ENABLE(hacks, +AS_HELP_STRING([--enable-hacks], [Enable Gtk+ hacks (default = no)]), +gtk_hacks=yes) + +if test x$gtk_hacks = xyes; then + AC_DEFINE([GTK_HACKS], 1, [Set if gtk hacks are used]) +fi + +dnl Check if soundtracker shall be installed suid root +AC_ARG_ENABLE([suid_root], +AS_HELP_STRING([--enable-suid_root], [Install ST suid root (default = no)]), +suid_root=yes) + +AM_CONDITIONAL(SUID_ROOT, test x$suid_root = xyes) + +dnl Set PREFIX in config.h. +if test "x${prefix}" = "xNONE"; then + AC_DEFINE_UNQUOTED(PREFIX, "${ac_default_prefix}", [Kein Mensch weiss, warum]) +else + AC_DEFINE_UNQUOTED(PREFIX, "${prefix}", [Kein Mensch weiss, warum]) +fi + +AC_OUTPUT([ +Makefile +app/Makefile +app/drivers/Makefile +app/mixers/Makefile +po/Makefile.in +doc/Makefile +]) diff -Nru soundtracker-0.6.8/configure.in soundtracker-1.0.2~pre2/configure.in --- soundtracker-0.6.8/configure.in 2006-02-25 13:36:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/configure.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,359 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -dnl -dnl Written for autoconf-2.59 and automake-1.7.9 - -AC_INIT(app/endian-conv.h) -AM_INIT_AUTOMAKE(soundtracker, 0.6.8) -AM_CONFIG_HEADER(config.h) - -dnl ----------------------------------------------------------------------- -dnl Test for GCC -dnl ----------------------------------------------------------------------- - -AC_PROG_CC - -if test $GCC != yes; then - echo "Fatal error: Need gcc" - exit 1 -fi - -CFLAGS="$CFLAGS -Wall" - -dnl ----------------------------------------------------------------------- -dnl Test for GAS -dnl ----------------------------------------------------------------------- - -AC_ARG_ENABLE(asm, -[ --enable-asm Enable i386 assembly optimizations (default = off)], -asm_support=yes, -asm_support=no) - -AM_CONDITIONAL(NO_ASM, test x$asm_support = xno) - -if test x$asm_support != xno; then - AM_PROG_AS -else - AC_DEFINE([NO_ASM], 1, [Set if no assembler support is wanted]) -fi - -dnl ----------------------------------------------------------------------- -dnl Test for poll() -dnl ----------------------------------------------------------------------- - -AC_CHECK_HEADER(sys/poll.h, - [AC_CHECK_FUNCS(poll, [], - [AC_CHECK_FUNC(select, [], [AC_MSG_ERROR(no poll and no select?!?)])] - ) - ] -) - -dnl ----------------------------------------------------------------------- -dnl Initialize NLS -dnl ----------------------------------------------------------------------- - -AM_GNU_GETTEXT([external]) - -dnl ----------------------------------------------------------------------- -dnl Test for GTK+ / GNOME -dnl ----------------------------------------------------------------------- - -AM_PATH_GTK(1.2.2, - , - AC_MSG_ERROR(Cannot find GTK: Is gtk-config in path?), - "gthread") - -gnome=yes -AC_ARG_ENABLE(gnome, -[ --disable-gnome disable use of gnome], - gnome=$enableval, gnome=yes) - -if test "$gnome" = yes; then - AC_PATH_PROG(gnomepath, gnome-config) - AC_MSG_CHECKING(for Gnome compile flags) - GNOME_CFLAGS=`$gnomepath gnomeui --cflags 2>/dev/null` - if test "_$GNOME_CFLAGS" = _ ; then - gnome=no - AC_MSG_RESULT([Gnome not found, building without it.]) - else - AC_MSG_RESULT(ok) - LIBS="$LIBS `$gnomepath gnomeui --libs 2>/dev/null`" - CFLAGS="$CFLAGS $GNOME_CFLAGS" - AC_DEFINE([USE_GNOME], 1, [Set if GNOME support is compiled in]) - fi -fi - -LIBS="$LIBS $GTK_LIBS" -CFLAGS="$CFLAGS $GTK_CFLAGS" - -AM_CONDITIONAL(USE_GNOME, test "x$gnome" = "xyes") - -dnl ----------------------------------------------------------------------- -dnl Test for gdk-pixbuf -dnl ----------------------------------------------------------------------- - -AC_ARG_ENABLE(gdk-pixbuf, -[ --disable-gdk-pixbuf Disable use of gdk-pixbuf (default = try)], -gdkpixbuf_support=no) - -no_gdkpixbuf=1; -if test x$gdkpixbuf_support != xno; then - AM_PATH_GDK_PIXBUF(0.8.0, - [CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS" - LIBS="$LIBS $GDK_PIXBUF_LIBS" - no_gdkpixbuf=0], - [AC_MSG_RESULT([---> Building without GDK_PIXBUF (ignore error above).])]) -fi - -if test "x${no_gdkpixbuf}" = "x1"; then - AC_DEFINE(NO_GDK_PIXBUF, 1, [Set to 1 if libgdkpixbuf is not present.]) -fi -AM_CONDITIONAL(NO_GDK_PIXBUF, test "x${no_gdkpixbuf}" = "x1") - -dnl ----------------------------------------------------------------------- -dnl Test for libsndfile -dnl ----------------------------------------------------------------------- - -sndfile_support=yes -AC_ARG_ENABLE(sndfile, -[ --disable-sndfile Disable usage of libsndfile (default = try)], -sndfile_support=no) - -ac_cv_sndfile=0 - -if test x$sndfile_support = xyes ; then - PKG_CHECK_MODULES(SNDFILE, sndfile > 1.0.1, ac_cv_sndfile=1, ac_cv_sndfile=0) - if test x$ac_cv_sndfile = x1 ; then - CFLAGS="$CFLAGS $SNDFILE_CFLAGS" - LIBS="$LIBS $SNDFILE_LIBS" - fi -fi - -AC_DEFINE_UNQUOTED(USE_SNDFILE,${ac_cv_sndfile}, - [Set to 1 if you wish to use libsndfile.]) - -dnl ----------------------------------------------------------------------- -dnl Test for audiofile library (if libsndfile is not found or disabled) -dnl ----------------------------------------------------------------------- - -if test x$ac_cv_sndfile != x1 ; then - AM_PATH_AUDIOFILE(0.1.5, - [CFLAGS="$CFLAGS $AUDIOFILE_CFLAGS" - LIBS="$LIBS $AUDIOFILE_LIBS" - ], - [AC_MSG_RESULT([* No sample I/O library found, disabling sample loader (ignore error above).]) - AC_DEFINE([NO_AUDIOFILE], 1, [Set if not libaudiofile installed]) - ] - ) -fi - -dnl ----------------------------------------------------------------------- -dnl Checks for header files -dnl ----------------------------------------------------------------------- - -AC_HEADER_STDC -AC_CHECK_HEADERS(dlfcn.h) -AC_CHECK_FUNCS(setresuid) - -dnl ----------------------------------------------------------------------- -dnl Test for OSS headers -dnl ----------------------------------------------------------------------- - -AC_ARG_ENABLE(oss, -[ --disable-oss Disable OSS driver (default = try)], -oss_support=no) - -if test x$oss_support != xno; then - AC_CHECK_HEADERS(sys/soundcard.h machine/soundcard.h soundcard.h) - if test "${ac_cv_header_sys_soundcard_h}" = "yes" || \ - test "${ac_cv_header_machine_soundcard_h}" = "yes" || \ - test "${ac_cv_header_soundcard_h}" = "yes"; then - oss_support=yes - AC_DEFINE([DRIVER_OSS], 1, [Set if OSS driver wanted]) - case `uname` in - OpenBSD*) - LIBS="$LIBS -lossaudio" - ;; - NetBSD*) - AC_CHECK_LIB(ossaudio, _oss_ioctl, LIBS="$LIBS -lossaudio") - ;; - esac - else - oss_support=no - fi -fi - -AM_CONDITIONAL(DRIVER_OSS, test x$oss_support = xyes) - -dnl ----------------------------------------------------------------------- -dnl Test for ALSA-lib -dnl ALSA 0.9.x: snd_card_load() in libasound. -dnl ALSA 0.5.x: snd_pcm_channel_params() in libasound. -dnl ----------------------------------------------------------------------- - -AC_ARG_ENABLE(alsa, -[ --disable-alsa Disable ALSA driver (default = try)], -alsa_support=no) - -if test x$alsa_support != xno; then - AC_CHECK_LIB(asound,snd_pcm_plug_open, - [alsa_support=new - AC_DEFINE([DRIVER_ALSA_09x], 1, [Set if new (v0.9) ALSA driver wanted]) - LIBS="$LIBS -lasound" - echo "*** ALSA v0.9 found on your system. No audio drivers available" - echo "*** for ALSA v0.9. No problem, just use OSS driver or JACK instead." - ], - [AC_CHECK_LIB(asound,snd_pcm_capture_params, - [alsa_support=veryold - AC_DEFINE([DRIVER_ALSA], 1, [Set if very old ALSA driver wanted]) - LIBS="$LIBS -lasound" - ] - ) - AC_CHECK_LIB(asound,snd_pcm_channel_params, - [alsa_support=old - AC_DEFINE([DRIVER_ALSA_050], 1, [Set if old (v0.5) ALSA driver wanted]) - LIBS="$LIBS -lasound" - ] - ) - ] - ) -fi - -AM_CONDITIONAL(DRIVER_ALSA, test x$alsa_support = xveryold) -AM_CONDITIONAL(DRIVER_ALSA_050, test x$alsa_support = xold) -AM_CONDITIONAL(DRIVER_ALSA_09x, test x$alsa_support = xnew) - -dnl ----------------------------------------------------------------------- -dnl Test for ESD -dnl ----------------------------------------------------------------------- - -AC_ARG_ENABLE(esd, -[ --disable-esd Disable ESD driver (default = try)], -esd_support=no) - -if test x$esd_support != xno; then - AM_PATH_ESD(0.2.8, have_esd=yes, have_esd=no) - AC_CHECK_FUNCS(esd_play_stream) - if test x$have_esd = xyes; then - AC_DEFINE([DRIVER_ESD], 1, [Set if ESD driver wanted]) - CFLAGS="$CFLAGS $ESD_CFLAGS" - LIBS="$LIBS $ESD_LIBS" - fi -fi - -AM_CONDITIONAL(DRIVER_ESD, test x$have_esd = xyes) - -dnl ----------------------------------------------------------------------- -dnl Test for JACK -dnl -dnl defines: ST_S_JACK_LIBS, ST_S_JACK_INCLUDES, DRIVER_JACK -dnl ----------------------------------------------------------------------- - -AC_CHECK_HEADER(jack/jack.h,jack_support=yes,jack_support=no) -AC_ARG_WITH(jack, - [ --with-jack=DIR Compile against JACK installed in DIR], - [ - ST_S_JACK_LIBS="-L${withval}/lib" - ST_S_JACK_INCLUDES="-I${withval}/include" - jack_support=yes - ]) -AC_ARG_ENABLE(jack, -[ --disable-jack Disable JACK support (default = try)], -jack_support=no) - -if test x$jack_support = xyes; then - ST_S_JACK_LIBS="${ST_S_JACK_LIBS} -ljack -lpthread -ldl" - AC_DEFINE([DRIVER_JACK], 1, [Set if JACK support wanted]) -fi - -AC_SUBST(ST_S_JACK_LIBS) -AC_SUBST(ST_S_JACK_INCLUDES) - -AM_CONDITIONAL(DRIVER_JACK, test x$jack_support = xyes) - -dnl ----------------------------------------------------------------------- -dnl Test for SGI audio -dnl ----------------------------------------------------------------------- - -AC_ARG_ENABLE(sgi, -[ --disable-sgi Disable SGI driver (default = try)], -sgi_support=no) - -case `uname` in - IRIX*) - if test x$sgi_support != xno; then - AC_CHECK_HEADER(dmedia/audio.h) - if test $ac_cv_header_dmedia_audio_h = yes - then - AC_CHECK_LIB(audio,ALseterrorhandler,driver_sgi=yes) - if test $driver_sgi = yes - then - AC_DEFINE([DRIVER_SGI], 1, [Set if SGI driver wanted]) - LIBS="$LIBS -laudio" - irix_support=yes - fi - fi - fi - ;; -esac - -AM_CONDITIONAL(DRIVER_IRIX, test x$irix_support = xyes) - -dnl ----------------------------------------------------------------------- -dnl Test for Sun audio -dnl ----------------------------------------------------------------------- - -AC_ARG_ENABLE(sun, -[ --disable-sun Disable Sun driver (default = try)], -sun_support=no) - -if test x$sun_support != xno; then - AC_CHECK_HEADERS(sys/audioio.h) - if test "${ac_cv_header_sys_audioio_h}" = "yes"; then - AC_DEFINE([DRIVER_SUN], 1, [Set if Sun audio driver wanted]) - fi -fi - -AM_CONDITIONAL(DRIVER_SUN, test "${ac_cv_header_sys_audioio_h}" = "yes") - -dnl ----------------------------------------------------------------------- -dnl Test for SDL audio -dnl ----------------------------------------------------------------------- - -AC_ARG_ENABLE(sdl, -[ --disable-sdl Disable SDL driver (default = try)], -sdl_support=no) - -if test x$sdl_support != xno; then - AM_PATH_SDL(1.2.0, have_sdl=yes, have_sdl=no) - if test x$have_sdl = xyes; then - AC_DEFINE([DRIVER_SDL], 1, [Set if SDL audio driver wanted]) - CFLAGS="$CFLAGS $SDL_CFLAGS" - LIBS="$LIBS $SDL_LIBS" - fi -fi - -AM_CONDITIONAL(DRIVER_SDL, test x$have_sdl = xyes) - -dnl ----------------------------------------------------------------------- -dnl Other tests -dnl ----------------------------------------------------------------------- - -AC_PROG_RANLIB - -AC_C_BIGENDIAN - -dnl Set PREFIX in config.h. -if test "x${prefix}" = "xNONE"; then - AC_DEFINE_UNQUOTED(PREFIX, "${ac_default_prefix}", [Kein Mensch weiss, warum]) -else - AC_DEFINE_UNQUOTED(PREFIX, "${prefix}", [Kein Mensch weiss, warum]) -fi - -AC_OUTPUT([ -Makefile -app/Makefile -app/drivers/Makefile -app/mixers/Makefile -po/Makefile.in -doc/Makefile -]) diff -Nru soundtracker-0.6.8/debian/changelog soundtracker-1.0.2~pre2/debian/changelog --- soundtracker-0.6.8/debian/changelog 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/changelog 2021-02-27 19:01:48.000000000 +0000 @@ -1,358 +1,5 @@ -soundtracker (0.6.8-2build1) hardy; urgency=low - - * Rebuild for libglib1.2 -> libglib1.2ldbl transition. - - -- Luke Yelavich Wed, 05 Dec 2007 10:34:05 +1100 - -soundtracker (0.6.8-2) unstable; urgency=low - - * Standards-Version: 3.7.2 - * Bug fix: "soundtracker: FTBFS on kfreebsd-amd64: unsatisfied - Build-Depends", thanks to Petr Salinger (Closes: #361495). - * update watch file. - - -- Junichi Uekawa Fri, 11 Aug 2006 22:52:21 +0900 - -soundtracker (0.6.8-1) unstable; urgency=low - - * New upstream release (Closes: #354712). - - 01_ja_po.dpatch: updated - - 02_jack_output: removed - - 03_de_po: removed - - 04_config_sub_guess_update: removed - * do not pass --disable-asm to ./configure, since it's broken on 0.6.8. - --enable-asm is now non-default, pass it on i386. - * dh_compat=4 - * quote debian/menu - * reintroduce jack support, it seems to be working. (Closes: #244153). - - -- Junichi Uekawa Wed, 8 Mar 2006 01:23:35 +0900 - -soundtracker (0.6.7-8) unstable; urgency=low - - * Bug fix: "soundtracker(GNU/k*BSD): FTBFS: out of date - config.sub/config.guess", thanks to Petr Salinger (Closes: #342516). - * add pbuilder-test/001_ldd to check that soundtracker binary at least - exists - - -- Junichi Uekawa Tue, 10 Jan 2006 01:19:27 +0900 - -soundtracker (0.6.7-7) unstable; urgency=low - - * do not build-depend on libasound2-dev on kfreebsd, thanks to - Aurelien Jarno. (closes: #327704) - * Standards-Version: 3.6.2 - - -- Junichi Uekawa Sun, 18 Sep 2005 08:22:43 +0900 - -soundtracker (0.6.7-6) unstable; urgency=low - - * de.po update from Jens Seidel (closes: #313892) - 03_de_po.dpatch - * remove jack from Build-Depends since it's currently disabled; - it hangs at startup. - - -- Junichi Uekawa Sat, 20 Aug 2005 11:43:20 +0900 - -soundtracker (0.6.7-5) unstable; urgency=low - - * disable alsa (closes: #286350, #304711) - - it was doing double-free. - * update jack support, not enabled. - - 02_jack_output: Patch from Kai Vehmanen available as - http://eca.cx/download/soundtracker-0.6.7-pre6-kv3.tar.gz - applied. - - Build-Depend on libjack0.80.0-dev - - remove --disable-jack from configure line - * change soundtracker.1 section from 1x to 1 - - -- Junichi Uekawa Mon, 18 Apr 2005 07:19:14 +0900 - -soundtracker (0.6.7-4) unstable; urgency=low - - * Disable jack support, which should fix instability problems - jack support is rather old, it needs some work updating. - (closes: #244153) - - -- Junichi Uekawa Thu, 6 May 2004 04:16:31 +0900 - -soundtracker (0.6.7-3) unstable; urgency=low - - * debian/control: rebuild with jack0.80.0 - - -- Junichi Uekawa Sat, 17 Jan 2004 07:44:57 +0900 - -soundtracker (0.6.7-2) unstable; urgency=low - - * Converted the build system to dpatch. - * Include more documentation in the binary package from doc/ directory. - - hacking.txt - - xi.txt - - xm.txt - - xp.txt - * --disable-asm on non-i386 architecture. - - -- Junichi Uekawa Fri, 16 Jan 2004 08:11:36 +0900 - -soundtracker (0.6.7-1) unstable; urgency=low - - * New upstream release - * Updated ja.po - - -- Junichi Uekawa Mon, 12 Jan 2004 12:14:15 +0900 - -soundtracker (0.6.6+0.6.7-pre6-2) unstable; urgency=low - - * Add nognome DEB_BUILD_OPTIONS. (closes: #70021) - * Standards-Version: 3.6.0 - - -- Junichi Uekawa Mon, 12 Jan 2004 11:31:44 +0900 - -soundtracker (0.6.6+0.6.7-pre6-1) unstable; urgency=low - - * New upstream release - * changed section to gnome as per ftpmaster. - * Updated ja.po - * Standards-Version: 3.6.0 - - support DEB_BUILD_OPTIONS - * remove --disable-alsa from invocation to ./configure - - -- Junichi Uekawa Tue, 5 Aug 2003 06:59:25 +0900 - -soundtracker (0.6.6+0.6.7-pre5-1) unstable; urgency=low - - * New upstream release - * add libasound2 build-dependency, because it supports libasound2 - - -- Junichi Uekawa Mon, 26 May 2003 21:40:34 +0900 - -soundtracker (0.6.6+0.6.7-pre4-1) unstable; urgency=low - - * New upstream release - - requires new jack transport code from 0.71.2, update build-deps. - * update ja.po - - -- Junichi Uekawa Mon, 26 May 2003 00:41:07 +0900 - -soundtracker (0.6.6+0.6.7-pre3-1) unstable; urgency=low - - * New upstream release - * updated ja.po - - -- Junichi Uekawa Sun, 9 Mar 2003 22:42:55 +0900 - -soundtracker (0.6.6+0.6.7-pre2-2) unstable; urgency=low - - * recompile with libsndfile as per upstream recommendation rather than - libaudiofile, and update build-deps. - - -- Junichi Uekawa Fri, 7 Mar 2003 16:52:35 +0900 - -soundtracker (0.6.6+0.6.7-pre2-1) unstable; urgency=low - - * New upstream prerelease - new and improved jack support. - * Updated po/ja.po - - -- Junichi Uekawa Mon, 3 Mar 2003 16:57:27 +0900 - -soundtracker (0.6.6+0.6.7-pre1-1) unstable; urgency=low - - * New upstream release - * debian/control,rules: Disable ALSA 0.5 support, and enable jack support. - * Update ja.po - - -- Junichi Uekawa Sun, 2 Mar 2003 17:27:33 +0900 - -soundtracker (0.6.6-3) unstable; urgency=low - - * apply patch from Batien Nocera, to fix .desktop file (closes: #150494) - - -- Junichi Uekawa Thu, 20 Jun 2002 12:03:23 +0900 - -soundtracker (0.6.6-2) unstable; urgency=low - - * README.Debian: add a note about aureal vortex card (closes: #90684) - - -- Junichi Uekawa Fri, 31 May 2002 10:16:00 +0900 - -soundtracker (0.6.6-1) unstable; urgency=low - - * New upstream release - * add libgdk-pixbuf-dev to build-depends - * update ja.po, add rule to remove po/ja.gmo in debian/rules, because - binary file is changed. - * update debian/copyright for upstream mail address. - - -- Junichi Uekawa Thu, 23 May 2002 12:06:25 +0900 - -soundtracker (0.6.4-1) unstable; urgency=low - - * Changing the maintainer field to me. - * incorporating NMU by myself, heh. (closes: #109529, #71887, #93130, #94051) - - -- Junichi Uekawa Sun, 5 May 2002 16:15:39 +0900 - -soundtracker (0.6.4-0.3) unstable; urgency=low - - * NMU - * added build-depends on debhelper, thanks james. (closes: #109529) - - -- Junichi Uekawa Wed, 29 Aug 2001 00:30:47 +0900 - -soundtracker (0.6.4-0.2) unstable; urgency=low - - * NMU - * reverted the make install target from DESTDIR to -prefix, - this was causing the build failures - - -- Junichi Uekawa Wed, 22 Aug 2001 01:08:43 +0900 - -soundtracker (0.6.4-0.1) unstable; urgency=low - - * NMU - * a new upstream version. (closes: #71887) - * I will take over this package if no one objects. - * Added Build-deps (closes: #93130) - * added a note to manpage that the manpage may be outdated - * removed INSTALL from debian/docs (closes: #94051) - * bumped policy version to 3.5.6 - - -- Junichi Uekawa Sun, 19 Aug 2001 02:01:19 +0900 - -soundtracker (0.5.6-1) unstable; urgency=low - - * new upstream version - * updated man page - - -- Frankie Fisher Sat, 12 Aug 2000 08:27:10 +0100 - -soundtracker (0.5.5-2) unstable; urgency=low - - * updated package description - - -- Frankie Fisher Fri, 11 Aug 2000 12:08:55 +0100 - -soundtracker (0.5.5-1) unstable; urgency=low - - * New upstream version. - - -- Frankie Fisher Thu, 29 Jun 2000 06:14:36 +0100 - -soundtracker (0.5.4-1) unstable; urgency=low - - * Packaged newer upstream version - - -- Frankie Fisher Sat, 6 May 2000 12:18:37 +0100 - -soundtracker (0.3.8-1) unstable; urgency=low - - * Packaged newer upstream version - - -- Frankie Fisher Wed, 5 Jan 2000 02:19:27 +0000 - -soundtracker (0.3.6-1) unstable; urgency=low - - * Packaged newer upstream version - - -- Frankie Fisher Wed, 1 Jan 2000 15:19:16 +0000 - -soundtracker (0.3.5-2) unstable; urgency=low - - * Fixed install-docs - * Fixed package description - - -- Frankie Fisher Fri, 5 Nov 1999 14:24:02 +0000 - -soundtracker (0.3.5-1) unstable; urgency=low - - * New upstream version - * Some docs now using install-docs - - -- Frankie Fisher Wed, 13 Oct 1999 17:22:36 +0100 - -soundtracker (0.3.3-1) unstable; urgency=low - - * New upstream version - - -- Frankie Fisher Sat, 11 Sep 1999 15:13:48 +0100 - -soundtracker (0.3.2-3) unstable; urgency=low - - * Corrected standards version in control file - * 0.3.3-1 - - -- Frankie Fisher Sat, 11 Sep 1999 15:13:43 +0100 - -soundtracker (0.3.2-2) unstable; urgency=low - - * FHS compliant doc and man dirs in light of announcement from debian technical committee. - - -- Frankie Fisher Thu, 9 Sep 1999 02:28:36 +0100 - -soundtracker (0.3.2-1) unstable; urgency=low - - * New upstream version - * Changed descriptions in control file to be more similar to those in the provided rpm spec file. - - -- Frankie Fisher Mon, 6 Sep 1999 17:14:13 +0100 - -soundtracker (0.3.1-1) unstable; urgency=low - - * New upstream version - - -- Frankie Fisher Mon, 6 Sep 1999 15:45:41 +0100 - -soundtracker (0.3.0-2) unstable; urgency=low - - * corrected dir in .orig archive - * corrected package description - * changed section to sound (not x11) - - -- Frankie Fisher Wed, 18 Aug 1999 02:58:05 +0100 - -soundtracker (0.3.0-1) unstable; urgency=low - - * new upstream version - - -- Frankie Fisher Sun, 15 Aug 1999 15:16:19 +0100 - -soundtracker (0.1.11-2) unstable; urgency=low - - * changed --prefix to /usr - * removed extraneous postinsts and preinsts that got there when I upgraded debhelper - * changed package back to .orig + .diff - * removed spare .ex files - * slightly corrected make install in debian/rules - * correct location of GPL license - - -- Frankie Fisher Sun, 15 Aug 1999 11:58:34 +0100 - -soundtracker (0.1.11-1) unstable; urgency=low - - * Small changes made to the manpage and the copyright. - - -- Frankie Fisher Mon, 9 Aug 1999 13:35:11 +0100 - -soundtracker (0.1.10-1) unstable; urgency=low - - * Removed my fix to bug in tips-dialog.c, because it was fixed by the upstreammaintainer. - - -- Frankie Fisher Mon, 9 Aug 1999 13:24:16 +0100 - -soundtracker (0.1.9-2) unstable; urgency=low - - * Wrote a temporary manpage. - * Fixed a small bug in the tips code. - * Fixed the install dirs, reported a bug against maint-guide - - -- Frankie Fisher Sun, 25 Jul 1999 21:05:55 +0100 - -soundtracker (0.1.9-1) unstable; urgency=low - - * Initial Release. - * My first Debian package - - -- Frankie Fisher Sun, 25 Jul 1999 18:18:27 +0100 +soundtracker (5:1.0.2~pre2-1kxstudio1) bionic; urgency=medium + * New package + -- falkTX Sat, 27 Feb 2021 19:01:48 +0000 diff -Nru soundtracker-0.6.8/debian/compat soundtracker-1.0.2~pre2/debian/compat --- soundtracker-0.6.8/debian/compat 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/compat 2016-10-01 21:39:20.000000000 +0000 @@ -0,0 +1 @@ +10 diff -Nru soundtracker-0.6.8/debian/control soundtracker-1.0.2~pre2/debian/control --- soundtracker-0.6.8/debian/control 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/control 2021-02-27 19:01:48.000000000 +0000 @@ -1,17 +1,28 @@ Source: soundtracker -Section: gnome +Section: sound Priority: optional -Maintainer: Junichi Uekawa -Standards-Version: 3.7.2 -Build-Depends: debhelper (>= 4.0.0), libgnome-dev, libsndfile1-dev, gettext, libesd0-dev, libgdk-pixbuf-dev, libasound2-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386], dpatch, libjack0.100.0-dev +Maintainer: falkTX +Build-Depends: + debhelper (>= 10), + libasound2-dev, + libjack-jackd2-dev | libjack-dev, + libgtk2.0-dev, + libgoocanvas-2.0-dev, + libpulse-dev, + libsdl1.2-dev, + audiofile-static, + libsndfile-static +Standards-Version: 3.9.8 +Homepage: http://www.soundtracker.org/ +XSC-KXStudio-VCS: https://sourceforge.net/p/soundtracker/git/ci/master/tree/ Package: soundtracker Architecture: any -Depends: ${shlibs:Depends} -Description: Sound module editor/player. Supporting .xm and .xi - Soundtracker is a module tracker for the X Window System and Gnome similar to - the DOS program `FastTracker', - i.e. the user creates music by - rearranging sound samples into `tracks'. - For more information about tracking, see - http://www.united-trackers.org/ +Depends: + ${misc:Depends}, + ${shlibs:Depends} +Description: music tracking tool + A music tracking tool for Unix / X11 similar in design to the DOS program FastTracker and the Amiga legend ProTracker. + Samples can be lined up on tracks and patterns which are then arranged to a song. + Supported module formats are XM and MOD; the player code is the one from OpenCP. + A basic sample recorder and editor is also included. diff -Nru soundtracker-0.6.8/debian/copyright soundtracker-1.0.2~pre2/debian/copyright --- soundtracker-0.6.8/debian/copyright 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/copyright 2021-02-27 15:55:40.000000000 +0000 @@ -1,12 +1,16 @@ -This package was debianized by Frankie Fisher - on Sun, 25 Jul 1999 18:18:27 +0100. - -It was downloaded from: - http://www.soundtracker.org/dl/v0.6/soundtracker-0.6.8.tar.gz - -Upstream Author: Michael Krause - -Copyright: - -SoundTracker is released under the GPL. A copy of the GPL is available on any -debian system under /usr/share/common-licenses/GPL. +License: GPL-2+ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + On Debian systems, the complete text of the GNU General Public + License version 2 can be found in `/usr/share/common-licenses/GPL-2'. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see . diff -Nru soundtracker-0.6.8/debian/docs soundtracker-1.0.2~pre2/debian/docs --- soundtracker-0.6.8/debian/docs 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/docs 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -AUTHORS -FAQ -NEWS -README -TODO -debian/README.Debian -doc/xi.txt -doc/xm.txt -doc/xp.txt -doc/hacking.txt diff -Nru soundtracker-0.6.8/debian/gbp.conf soundtracker-1.0.2~pre2/debian/gbp.conf --- soundtracker-0.6.8/debian/gbp.conf 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/gbp.conf 2013-06-09 23:58:12.000000000 +0000 @@ -0,0 +1,2 @@ +[DEFAULT] +pristine-tar = True diff -Nru soundtracker-0.6.8/debian/menu soundtracker-1.0.2~pre2/debian/menu --- soundtracker-0.6.8/debian/menu 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/menu 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -?package(soundtracker):needs="X11" section="Apps/Sound"\ - title="SoundTracker" command="/usr/bin/soundtracker" diff -Nru soundtracker-0.6.8/debian/mime soundtracker-1.0.2~pre2/debian/mime --- soundtracker-0.6.8/debian/mime 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/mime 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -audio/x-extended-module; /usr/bin/soundtracker %s; description="XM Track"; test=test -n "$DISPLAY" diff -Nru soundtracker-0.6.8/debian/patches/00list soundtracker-1.0.2~pre2/debian/patches/00list --- soundtracker-0.6.8/debian/patches/00list 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/patches/00list 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -01_ja_po -#02_jack_output # jack is maintained -#03_de_po # possibly outdated -#04_config_sub_guess_update diff -Nru soundtracker-0.6.8/debian/patches/01_ja_po.dpatch soundtracker-1.0.2~pre2/debian/patches/01_ja_po.dpatch --- soundtracker-0.6.8/debian/patches/01_ja_po.dpatch 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/patches/01_ja_po.dpatch 1970-01-01 00:00:00.000000000 +0000 @@ -1,166 +0,0 @@ -#! /bin/sh /usr/share/dpatch/dpatch-run -## 01_ja_po.dpatch by Junichi Uekawa -## -## All lines beginning with `## DP:' are a description of the patch. -## DP: ja.po translation. - -@DPATCH@ -diff -urNad soundtracker-0.6.8~/po/ja.po soundtracker-0.6.8/po/ja.po ---- soundtracker-0.6.8~/po/ja.po 2006-02-25 22:25:08.000000000 +0900 -+++ soundtracker-0.6.8/po/ja.po 2006-03-08 00:41:05.000000000 +0900 -@@ -2,14 +2,14 @@ - # Copyright (C) 1998-2000 Michael Krause . - # Translators: Atsushi Yamagata , 1999, 2000. - # Yuuki NINOMIYA , 1999, 2000. --# Junichi Uekawa , 2002, 2003. -+# Junichi Uekawa , 2002, 2003, 2004. - # - msgid "" - msgstr "" - "Project-Id-Version: SoundTracker 0.3.10\n" - "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" - "POT-Creation-Date: 2006-02-25 14:25+0100\n" --"PO-Revision-Date: 2003-08-05 06:54+0900\n" -+"PO-Revision-Date: 2006-03-08 00:39+0900\n" - "Last-Translator: Junichi Uekawa \n" - "Language-Team: Debian Japanese project \n" - "MIME-Version: 1.0\n" -@@ -431,7 +431,7 @@ - - #: app/gui-settings.c:403 - msgid "Save and restore permanent channels" --msgstr "" -+msgstr "¸ÇÄê¥Á¥ã¥ó¥Í¥ë¤òÊݸ¤·¤Æ¥ê¥¹¥È¥¢¤¹¤ë" - - #: app/gui-settings.c:417 - msgid "Scopes buffer size [MB]" -@@ -553,6 +553,8 @@ - "Odd pattern rows contain data which will be lost after shrinking.\n" - "Do you want to continue anyway?" - msgstr "" -+"´ñ¿ô¤Î¥Ñ¥¿¡¼¥ó¤ÎÎó¤Ï½Ì¾®¤¹¤ë¤È¼º¤ï¤ì¤Þ¤¹¡¥\n" -+"³¹Ô¤·¤Þ¤¹¤«¡©" - - #: app/gui.c:506 - msgid "" -@@ -560,6 +562,8 @@ - "Some data at the end of the pattern will be lost.\n" - "Do you want to continue anyway?" - msgstr "" -+"³ÈÄ¥¤¹¤ë¤Ë¤Ï¥Ñ¥¿¡¼¥ó¤ÏŤ¹¤®¤Þ¤¹¡¥\n" -+"¥Ñ¥¿¡¼¥ó¤ÎºÇ¸å¤Î¥Ç¡¼¥¿¤¬°ìÉô¼º¤ï¤ì¤ë»ö¤Ë¤Ê¤ê¤Þ¤¹¡¥Â³¹Ô¤·¤Þ¤¹¤«¡©" - - #: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 - #: app/sample-editor.c:1915 app/sample-editor.c:1959 -@@ -1034,9 +1038,8 @@ - msgstr "¥ª¥¯¥¿¡¼¥Ö²¼¤²¤ë" - - #: app/menubar.c:526 --#, fuzzy - msgid "P_aste" --msgstr "ŽÉÕ" -+msgstr "ŽÉÕ(_a)" - - #: app/menubar.c:531 - msgid "_Jazz Edit Mode" -@@ -1044,7 +1047,7 @@ - - #: app/menubar.c:534 - msgid "_Record keyreleases" --msgstr "" -+msgstr "¥­¡¼¥ê¥ê¡¼¥¹¤òµ­Ï¿¤¹¤ë(_R)" - - #: app/menubar.c:539 - msgid "Transp_osition..." -@@ -1087,22 +1090,20 @@ - msgstr "¥Ñ¥¿¡¼¥ó¤òÆɤ߹þ¤ß(_o)" - - #: app/menubar.c:599 --#, fuzzy - msgid "Sh_rink Current Pattern" --msgstr "¸½ºß¤Î¥Ñ¥¿¡¼¥ó" -+msgstr "¸½ºß¤Î¥Ñ¥¿¡¼¥ó¤ò½Ì¤á¤ë(_r)" - - #: app/menubar.c:601 --#, fuzzy - msgid "_Expand Current Pattern" --msgstr "¸½ºß¤Î¥Ñ¥¿¡¼¥ó¤òÊݸ(_S)" -+msgstr "¸½ºß¤Î¥Ñ¥¿¡¼¥ó¤ò¹­¤²¤ë(_S)" - - #: app/menubar.c:608 - msgid "_Toggle Current Channel Permanentness" --msgstr "" -+msgstr "¸½ºß¤Î¥Á¥ã¥ó¥Í¥ë¤Î¸ÇÄêÅÙ¹ç¤òÀÚÂؤ¨¤ë(_T)" - - #: app/menubar.c:610 - msgid "Toggle _All Channels Permanentness" --msgstr "" -+msgstr "Á´¥Á¥ã¥ó¥Í¥ë¤Î¸ÇÄêÅÙ¹ç¤òÀÚÂؤ¨¤ë(_A)" - - #: app/menubar.c:618 - msgid "_Load XI..." -@@ -1291,7 +1292,6 @@ - msgstr "¸½ºß¤Î°ÌÃ֤θå¤Ë¶õ¤­¥Ñ¥¿¡¼¥ó¤òÄɲÃ" - - #: app/playlist.c:560 --#, fuzzy - msgid "Len" - msgstr "Ťµ" - -@@ -1300,9 +1300,8 @@ - msgstr "¶ÊĹ" - - #: app/playlist.c:580 --#, fuzzy - msgid "Rstrt" --msgstr "³Ú´ï" -+msgstr "ºÆ³«" - - #: app/playlist.c:593 - msgid "Song restart position" -@@ -1402,9 +1401,8 @@ - msgstr "¥Ü¥ê¥å¡¼¥à¥é¥ó¥×" - - #: app/sample-editor.c:425 --#, fuzzy - msgid "Trim" --msgstr "¥È¥ì¥â¥í" -+msgstr "¥È¥ê¥à" - - #: app/sample-editor.c:436 - msgid "Zoom to selection" -@@ -1447,9 +1445,8 @@ - msgstr "¥µ¥ó¥×¥ë¾Ãµî" - - #: app/sample-editor.c:500 --#, fuzzy - msgid "Crop" --msgstr "¥³¥Ô¡¼" -+msgstr "ÀÚ¤ë" - - #: app/sample-editor.c:564 - msgid "(no selection)" -@@ -1633,19 +1630,19 @@ - - #: app/sample-editor.c:2442 app/sample-editor.c:2453 - msgid "Trim parameters" --msgstr "" -+msgstr "¥È¥ê¥à¥Ñ¥é¥á¡¼¥¿" - - #: app/sample-editor.c:2498 - msgid "Trim at the beginning" --msgstr "" -+msgstr "ºÇ½é¤ò¥È¥ê¥à¤¹¤ë" - - #: app/sample-editor.c:2505 - msgid "Trim at the end" --msgstr "" -+msgstr "ºÇ¸å¤ò¥È¥ê¥à¤¹¤ë" - - #: app/sample-editor.c:2512 - msgid "Threshold (dB)" --msgstr "" -+msgstr "À©¸Â (dB)" - - #: app/tips-dialog.c:50 - msgid "" diff -Nru soundtracker-0.6.8/debian/patches/05_fix_destdir.dpatch soundtracker-1.0.2~pre2/debian/patches/05_fix_destdir.dpatch --- soundtracker-0.6.8/debian/patches/05_fix_destdir.dpatch 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/patches/05_fix_destdir.dpatch 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -#! /bin/sh /usr/share/dpatch/dpatch-run -## 05_fix_destdir.dpatch by Junichi Uekawa -## -## All lines beginning with `## DP:' are a description of the patch. -## DP: fix destdir -## DP: sent to upstream - -@DPATCH@ -diff -urNad soundtracker-0.6.8~/app/Makefile.am soundtracker-0.6.8/app/Makefile.am ---- soundtracker-0.6.8~/app/Makefile.am 2006-02-25 21:30:54.000000000 +0900 -+++ soundtracker-0.6.8/app/Makefile.am 2006-03-08 01:43:42.000000000 +0900 -@@ -61,19 +61,19 @@ - install-exec-local: - case `uname` in \ - OpenBSD) \ -- chown root.wheel $(bindir)/soundtracker; \ -+ chown root.wheel $(DESTDIR)$(bindir)/soundtracker; \ - ;; \ - NetBSD) \ -- chown root.wheel $(bindir)/soundtracker; \ -+ chown root.wheel $(DESTDIR)$(bindir)/soundtracker; \ - ;; \ - Darwin) \ -- chown root:admin $(bindir)/soundtracker; \ -+ chown root:admin $(DESTDIR)$(bindir)/soundtracker; \ - ;; \ - *) \ -- chown root:root $(bindir)/soundtracker; \ -+ chown root:root $(DESTDIR)$(bindir)/soundtracker; \ - ;; \ - esac -- chmod +s $(bindir)/soundtracker -+ chmod +s $(DESTDIR)$(bindir)/soundtracker - @echo "" - @echo "***" - @echo "*** Installing SoundTracker suid root." diff -Nru soundtracker-0.6.8/debian/pbuilder-test/001_ldd soundtracker-1.0.2~pre2/debian/pbuilder-test/001_ldd --- soundtracker-0.6.8/debian/pbuilder-test/001_ldd 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/pbuilder-test/001_ldd 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -#!/bin/bash -ldd /usr/bin/soundtracker - diff -Nru soundtracker-0.6.8/debian/README.Debian soundtracker-1.0.2~pre2/debian/README.Debian --- soundtracker-0.6.8/debian/README.Debian 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/README.Debian 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ - -DEB_BUILD_OPTIONS -================= - -nognome can be specified on build to obtain a Debian package with no GNOME -dependency. - - -Notes on aureal vortex cards -============================ -[Junichi Uekawa, 31 May 2002.] - -There is a reported incompatibility with this program and Aureal Vortex card -driver. - -Aureal Vortex card driver is probably not well written, and it is entirely -possible that soundtracker is tickling the bug. - -Aureal Vortex card is no longer available as widely, -and most people would have bought other cards, but I will just note it -down here, for the unfortunate few people. - - - - -- Junichi Uekawa , Mon Jan 12 11:31:06 2004 diff -Nru soundtracker-0.6.8/debian/rules soundtracker-1.0.2~pre2/debian/rules --- soundtracker-0.6.8/debian/rules 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/rules 2021-02-27 19:01:48.000000000 +0000 @@ -1,105 +1,29 @@ #!/usr/bin/make -f -#-*- makefile -*- -# Made with the aid of dh_make, by Craig Small -# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. -# Some lines taken from debmake, by Christoph Lameter. +# -*- makefile -*- -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 -export DH_COMPAT=4 +DEB_HOST_ARCH = $(shell dpkg-architecture -qDEB_HOST_ARCH) -include /usr/share/dpatch/dpatch.make - -CFLAGS = -Wall -g -INSTALL = install -INSTALL_FILE = $(INSTALL) -p -o root -g root -m 644 -INSTALL_PROGRAM = $(INSTALL) -p -o root -g root -m 755 -INSTALL_SCRIPT = $(INSTALL) -p -o root -g root -m 755 -INSTALL_DIR = $(INSTALL) -p -d -o root -g root -m 755 -CONFIGURE_FLAGS = --prefix=/usr --disable-audiofile --disable-alsa - -DEB_HOST_ARCH=$(shell dpkg-architecture -qDEB_HOST_ARCH) -ifeq (,$(findstring i386,$(DEB_HOST_ARCH))) -# this is buggy as of 0.6.8 -#CONFIGURE_FLAGS += --disable-asm -else -CONFIGURE_FLAGS += --enable-asm -endif - -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) -CFLAGS += -O0 +FLAGS = -O3 -fPIC -DPIC -fdata-sections -ffunction-sections -DNDEBUG +ifeq ($(DEB_HOST_ARCH),armhf) +FLAGS += -march=armv7ve -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 +TARGET_ARCH = -march=armv7ve +else ifeq ($(DEB_HOST_ARCH),arm64) +DEB_HOST_64BIT = true +FLAGS += -march=armv8-a -mcpu=cortex-a53 +TARGET_ARCH = -march=armv8-a else -CFLAGS += -O2 -endif -ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) -INSTALL_PROGRAM += -s +ifeq ($(DEB_HOST_ARCH),amd64) +DEB_HOST_64BIT = true endif - -ifneq (,$(findstring nognome,$(DEB_BUILD_OPTIONS))) -CONFIGURE_FLAGS += --disable-gnome +FLAGS += -mtune=generic -msse -msse2 -mfpmath=sse endif -configure: configure-stamp -configure-stamp: patch-stamp - dh_testdir - touch configure-stamp - INSTALL_PROGRAM="${INSTALL_PROGRAM}" \ - CFLAGS="${CFLAGS}" \ - ./configure ${CONFIGURE_FLAGS} - -build: build-stamp -build-stamp: configure - dh_testdir - $(MAKE) - $(MAKE) -C po update-gmo - touch build-stamp - -clean: unpatch - dh_testdir - dh_testroot - rm -f build-stamp install-stamp po/*.gmo configure-stamp - - # Add here commands to clean up after the build process. - -$(MAKE) distclean - - dh_clean - -install: install-stamp -install-stamp: build-stamp - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - # Add here commands to install the package into debian/tmp. - #$(MAKE) install DESTDIR=`pwd`/debian/soundtracker # waiting for 05_fix_destdir to be fixed - $(MAKE) install prefix=`pwd`/debian/soundtracker/usr - touch install-stamp - -# Build architecture-independent files here. -binary-indep: build install -# We have nothing to do by default. - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot - dh_installdocs - dh_installmenu - dh_installmanpages - dh_installmime - dh_installchangelogs ChangeLog - dh_strip - dh_compress - dh_fixperms - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -source diff: - @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false +export CFLAGS=$(FLAGS) +export CXXFLAGS=$(FLAGS) +export CPPFLAGS= +export LDFLAGS=-Wl,-O1 -Wl,--as-needed -Wl,--no-undefined -Wl,--gc-sections -Wl,--strip-all +export PATH:=/opt/kxstudio/bin:$(PATH) +export PKG_CONFIG_PATH=/opt/kxstudio/lib/pkgconfig -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary +%: + dh $@ -Sautoconf diff -Nru soundtracker-0.6.8/debian/soundtracker.1 soundtracker-1.0.2~pre2/debian/soundtracker.1 --- soundtracker-0.6.8/debian/soundtracker.1 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/soundtracker.1 1970-01-01 00:00:00.000000000 +0000 @@ -1,146 +0,0 @@ -.TH SOUNDTRACKER 1 -.\" NAME should be all caps, SECTION should be 1-8, maybe w/ subsection -.\" other parms are allowed: see man(7), man(1) -.SH NAME -soundtracker \- a tracker for gnome that supports .xm files -.SH SYNOPSIS -.B soundtracker -.SH "DESCRIPTION" -This manual page documents briefly -.BR soundtracker. - -This manual page was written for the Debian GNU/Linux distribution -because the original program does not have a manual page. -Instead, it has some documentation in -.I /usr/share/doc/soundtracker -which will be more uptodate than this man page. - -.PP -.B soundtracker -is a program that allows one to arrange many sound samples into a tune, -comprising of multiple `tracks' which are mixed together, typically in -software. -.SH USING -Note that some functions are only accessible using the keyboard. These -are all important key combinations, mostly inspired by the great Amiga -ProTracker (most alphanumeric keys are mapped to a piano keyboard): -.SS TRACK EDITOR -.TP -Right Ctrl -Play Song -.TP -Right Alt -Play Pattern -.TP -Right Shift -Record (Play Pattern & Edit On) -- not yet! -.TP -Space -Stop Playing; edit mode on/off -.PP -.TP -F1 ... F7 -Change editing octave -.TP -Left Ctrl-1 ... -8 - Change jump value -.TP -CrsrUp / Down -Walk around in current pattern -.TP -PgUp / Down -Walk around in current pattern, quickly -.TP -F9 -Jump to position 0 -.TP -F10 -Jump to position L / 4 -.TP -F11 -Jump to position L / 2 -.TP -F12 -Jump to position 3 * L / 4 -.TP -CrsrLeft / Right -Change pattern column and/or channel -.TP -Tab -Skip to same column in next channel -.TP -Left Ctrl - CrsrLeft -Previous Instrument (faster with Left Shift) -.TP -Left Ctrl - CrsrRight -Next Instrument (faster with Left Shift) -.TP -Left Ctrl - CrsrDown -Previous Sample (faster with Left Shift) -.TP -Left Ctrl - CrsrUp -Next Sample (faster with Left Shift) -.TP -Left Alt - CrsrLeft -Previous Pattern (faster with Left Shift) -.TP -Left Alt - CrsrRight -Next Pattern (faster with Left Shift) -.TP -Left Ctrl - B -Start marking a block (one track horizontally) -.TP -Left Ctrl - C -Copy block -.TP -Left Ctrl - X -Cut block -.TP -Left Ctrl - V -Paste block and advance to end -.TP -Left Shift - F3 -Cut track -.TP -Left Shift - F4 -Copy track -.TP -Left Shift - F5 -Paste track -.TP -Left Alt - F3 -Cut pattern -.TP -Left Alt - F4 -Copy pattern -.TP -Left Alt - F5 -Paste pattern -.TP -Any other keys -Play notes on the keyboard. - -.SS SAMPLE EDITOR - -Hold Shift and use left / right mouse buttons to set the loop points -in the sample display. - -.SH SEE ALSO -If you want to know more about tracking in general, -.I http://www.united-trackers.org/ -has a lot of resources. - -Also see the SoundTracker homepage, -.I http://www.soundtracker.org/ - -SoundTracker still needs detailed documentation. If you want to help -out with this, you should become familiar with DocBook or similar SGML -tools first. -.SH AUTHOR -Michael Krause [ raw style / lego ] wrote SoundTracker. - -This manual page was mostly lifted from -.I /usr/share/doc/soundtracker/README -by Frankie Fisher , for the Debian GNU/Linux system (but may be used by others). -.SH BUGS -This documentation is possibly outdated. diff -Nru soundtracker-0.6.8/debian/source/format soundtracker-1.0.2~pre2/debian/source/format --- soundtracker-0.6.8/debian/source/format 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/source/format 2013-06-09 23:58:12.000000000 +0000 @@ -0,0 +1 @@ +3.0 (quilt) diff -Nru soundtracker-0.6.8/debian/watch soundtracker-1.0.2~pre2/debian/watch --- soundtracker-0.6.8/debian/watch 2021-02-27 19:48:10.000000000 +0000 +++ soundtracker-1.0.2~pre2/debian/watch 2013-08-04 05:44:16.000000000 +0000 @@ -1,11 +1,3 @@ -# Example watch control file for uscan -# Rename this file to "watch" and then you can run the "uscan" command -# to check for upstream updates and more. -# Site Directory Pattern Version Script -#sunsite.unc.edu /pub/Linux/Incoming soundtracker-(.*)\.tar\.gz debian uupdate version=3 - -http://www.soundtracker.org/dl/v0.6/soundtracker-(.*)\.tar\.gz - -#this is the url from the webpage - not sure if it gets sent to sunsite.unc.edu -#http://www.tu-harburg.de/~semk2104/soundtracker/soundtracker-0.1.9.tar.gz +opts=filenamemangle=s/.+\/v?(\d\S*)\.tar\.gz/jack_midi_clock-$1.tar.gz/ \ + https://github.com/x42/jack_midi_clock/tags .*/v?(\d\S*)\.tar\.gz diff -Nru soundtracker-0.6.8/depcomp soundtracker-1.0.2~pre2/depcomp --- soundtracker-0.6.8/depcomp 2005-02-13 13:31:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/depcomp 2017-01-25 18:15:10.000000000 +0000 @@ -1,7 +1,9 @@ #! /bin/sh - # depcomp - compile a program generating dependencies as side-effects -# Copyright 1999, 2000, 2003 Free Software Foundation, Inc. + +scriptversion=2013-05-30.07; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,9 +16,7 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -25,26 +25,112 @@ # Originally written by Alexandre Oliva . +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi -# `libtool' can also be set to `yes' or `no'. - -if test -z "$depfile"; then - base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` - dir=`echo "$object" | sed 's,/.*$,/,'` - if test "$dir" = "$object"; then - dir= - fi - # FIXME: should be _deps on DOS. - depfile="$dir.deps/$base" -fi +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" +# Avoid interferences from the environment. +gccflag= dashmflag= + # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case @@ -56,9 +142,32 @@ fi if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc fi case "$depmode" in @@ -66,10 +175,22 @@ ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. - "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -77,13 +198,17 @@ ;; gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then @@ -91,31 +216,31 @@ fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. + # The second -e expression handles DOS-style file names with drive + # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. +## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory +## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as -## well. +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -133,8 +258,7 @@ "$@" -MDupdate "$tmpdepfile" fi stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -142,99 +266,156 @@ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" - # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the + # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> $depfile - echo >> $depfile - + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> $depfile + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" + make_dummy_depfile fi rm -f "$tmpdepfile" ;; +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the + # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. - stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` - tmpdepfile="$stripped.u" + set_dir_from "$object" + set_base_from "$object" if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u "$@" -M fi stat=$? - - if test -f "$tmpdepfile"; then : - else - stripped=`echo "$stripped" | sed 's,^.*/,,'` - tmpdepfile="$stripped.u" + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat fi - if test $stat -eq 0; then : - else + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi - - if test -f "$tmpdepfile"; then - outname="$stripped.o" - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" - sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : + # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -246,52 +427,141 @@ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - tmpdepfile1="$dir.libs/$base.lo.d" - tmpdepfile2="$dir.libs/$base.d" - "$@" -Wc,-MD - else - tmpdepfile1="$dir$base.o.d" - tmpdepfile2="$dir$base.d" - "$@" -MD - fi + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - if test -f "$tmpdepfile1"; then - tmpdepfile="$tmpdepfile1" - else - tmpdepfile="$tmpdepfile2" - fi - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; #nosideeffect) # This comment above is used by automake to tell side-effect @@ -304,13 +574,13 @@ # Remove the call to Libtool. if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift fi - # Remove `-o $object'. + # Remove '-o $object'. IFS=" " for arg do @@ -330,18 +600,18 @@ done test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' + # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -355,41 +625,51 @@ "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift - cleared=no - for arg in "$@"; do + cleared=no eat=no + for arg + do case $cleared in no) set ""; shift cleared=yes ;; esac + if test $eat = yes; then + eat=no + continue + fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done - obj_suffix="`echo $object | sed 's/^.*\././'`" + obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; @@ -400,13 +680,13 @@ # Remove the call to Libtool. if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift fi - # Remove `-o $object'. + # Remove '-o $object'. IFS=" " for arg do @@ -425,9 +705,10 @@ esac done - "$@" -E | - sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" @@ -437,35 +718,56 @@ msvisualcpp) # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. + # always write the preprocessed file to stdout. "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + IFS=" " for arg do case "$arg" in + -o) + shift + ;; + $object) + shift + ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; + set fnord "$@" + shift + shift + ;; *) - set fnord "$@" "$arg" - shift - shift - ;; + set fnord "$@" "$arg" + shift + shift + ;; esac done - "$@" -E | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + none) exec "$@" ;; @@ -477,3 +779,13 @@ esac exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff -Nru soundtracker-0.6.8/doc/hacking.html soundtracker-1.0.2~pre2/doc/hacking.html --- soundtracker-0.6.8/doc/hacking.html 2006-02-25 13:25:53.000000000 +0000 +++ soundtracker-1.0.2~pre2/doc/hacking.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,555 +0,0 @@ - - - - - -SoundTracker internals: - - - - - - - - - - - - - - - - - - - - - -
[Top][Contents][Index][ ? ]
-

SoundTracker internals -

- - - - - - - - - - -
- - - - - - - - - - - - - - - - - -
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
-

1. General Architecture

- -

SoundTracker (short: ST) consists of two threads: the GUI (or main) -thread, and the audio (or mixer / player) thread. The reason for not -handling both jobs in one process via select() is obvious: the GUI can -sometimes block the process for quite a long time. For example when the -window is resized, widgets have to be redrawn, which can take a -while. To provide continous sound output, we're using a separate thread. -

-

Communication between the threads is accomplished using two pipes. The -communication codes for this pipe are defined in audio.h. When messages -are received, they are handled in gui.c::read_mixer_pipe() and -audio.c::audio_thread(), respectively. -

-

In its current form, the code is limited to dealing with one module at -the same time, with one editing window. Some of the GUI code has already -been modularized, since some of the editing facilities have been -encapsulated in custom GTK+ widgets, for example sample-display.c, -clavier.c, envelope-box.c, playlist.c and tracker.c. Noteworthy exceptions and -containers of generous amounts of global variables are gui.c, -sample-editor.c, instrument-editor.c and xm-player.c. -

-

For ST to be made fully multi-module capable ("object-oriented"), large -parts of the GUI will have to be changed. Unfortunately, references to -the global "tracker" and "xm" variables can be found virtually -everywhere in the source code. -

-
- - - - - - - - - - - - - - - - - -
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
-

2. Synchronization of Audio and GUI

- -

Since mixing buffer sizes can't be turned down as low as under primitive -operating systems such as DOS, special care must been taken to take the -audio latency into account. -

-

The audio thread thus keeps a list of recently reached pattern positions -and their occurence in the mixed audio output stream. The GUI thread -then checks periodically (track-editor.c::tracker_timeout(), -scope-group.c::scope_group_timeout()) for the current position of the -soundcard in the output stream and calculates which pattern position -corresponds to that time. The get_play_time() method in output drivers -is the key for this to work correctly. The lists are handled through the -time buffer interface, see time-buffer.[ch]. -

-

The oscilloscope monitors are handled in a similar way through some ring -buffers. This is documented in audio.h, for example. time-buffer can't -be used here because scope data is continuous and is accessed from the -GUI thread in more than one location. -

-

Certain other events are handled through the event waiter interface (see -event-waiter.h for an overview). -

-
- - - - - - - - - - - - - - - - - -
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
-

3. How the audio subsystem works

- -

Module playing is initialized by the GUI thread sending a message -AUDIO_CTLPIPE_PLAY_SONG, for example. The audio thread then opens the -driver module, which in turn installs a callback method, which will be -called as soon as the sound card is accepting new data. The OSS driver, -for example, instructs the audio subsystem, through -audio.c::audio_poll_add(), to call -oss-output.c::oss_poll_ready_playing() once OSS accepts new data from -ST. -

-

After opening the output driver, various other things are initialized in -audio.c::audio_prepare_for_playing(). After that, an acknowledgement -message is sent back to the GUI thread, which is in playing mode from -then on (indicated by the global variable gui.c::gui_playing_mode). -

-

After that, the audio thread goes back into its main poll() loop, which -also waits for the driver callback action now. Once this callback is -triggered, it calls audio.c::audio_mix() (defined in driver-out.h) to -request a new part of the sample output stream in any format and bitrate -it desires, which is then output. -

-

Calling the XM player at the right moment and handling the pitch bending -feature is all done in audio_mix() which should be rather -straight-forward to read. -

-

Interesting is also the interaction between xm-player.c and the rest of -the audio subsystem. There are some routines in audio.c starting with -driver_*, like driver_startnote, driver_setfreq. xm-player.c calls these -instead of the corresponding routines in the mixer because this way, a -modularized mixer system could be installed lateron. You can find more -about the Mixer API later in this document. -

-
- - - - - - - - - - - - - - - - - -
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
-

4. Driver API

- -

The driver API is separated into two branches: output and input -(sampling) drivers. Input drivers are usually simpler, because they -don't have to include the mechanisms necessary for synchronization of -the audio output stream with the GUI. Also, currently only 16bit mono -sampling is supported (though changing this would require only some -changes to sample-editor.c), so a good amount of the settings widgets -are missing in input drivers. -

-

Note that the current API doesn't make any provisions for MIDI input / -output. First and foremost, it must be thought about the synchronization -of MIDI output with mixed (DSP) output as the most important aspect; the -central audio code in audio.c hasn't been designed with this in mind -either. -

-

Also not accounted for, but related to the MIDI issue, are wavetable -devices like the GUS which can play multiple samples on their own. But -since hardware like this is more and more becoming extinct and CPU power -rises, I don't think that supporting this is important any longer, -especially once ST will be extended to support effect plug-ins which -can't be rendered by the audio hardware but must be calculated using the -CPU! -

-
- - - - - - - - - - - - - - - - -
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
-

4.1 Adding drivers to the source tree

- -

You must add checks for any libs and includes in configure.in, add a -corresponding driver define to acconfig.h, add the driver to the drivers -list in main.c, and finally add all the files belonging to your driver -(should be only one) to drivers/Makefile.am. Now you still have to write -the code, that's what the two next sections are about. -

-
- - - - - - - - - - - - - - - - -
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
-

4.2 Output drivers

- -

The st_out_driver structure, defined driver-out.h must be globally -defined in your source file. It must contain valid pointers to all the -functions and a unique entry in the name field. The rest of the -variables and functions in your source file should be defined static so -as to hide them from the rest of the program. -

-

You can keep the *settings functions empty at first, adding the right -code here shouldn't be a problem when you compare with oss-output.c. -

-

The first function you should write is new(), which allocates a new -object and initializes it with default settings. getwidget() can stay -empty for as long as you don't want the user to change settings. -

-

The next function you write should be open(), which opens the device -according to the settings in the object structure. release() does the -opposite. open() should install the callback mentioned earlier, which is -the function you're going to write now. That's it, you should have a -working minimal driver now. -

-

The next important function is getplaytime() which is necessary for the -GUI to synchronize with the audio output. This might require some -experimentation to get right. -

-

Now you can start adding the settings widget and add code to the load / -save settings functions. -

-
- - - - - - - - - - - - - - - - -
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
-

4.3 Input drivers

- -
- - - - - - - - - - - - - - - - - -
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
-

5. Mixer API

- -

To be written. Two mixers are already available; shouldn't be hard to -understand how it works. Basically it's really independent of the rest -of the tracker. -

-
- - - - - - - - - - - - - - - - - -
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
-

6. Contributing Code

- -

Please follow these rules if you want to donate code to the -SoundTracker project: -

-
    -
  • Coding Style. I prefer 4-space tabulators, and an indentation style -like this: - -
     
    	if(something) {
    -	    work();
    -	}
    -
    -

    instead of: -

    -
     
    	if (something)
    -	  {
    -	    work ();
    -	  }
    -
    -

    If you're using Emacs, you can simply use "M-x c-set-style cc-mode" -

    -
  • Add yourself to the AUTHORS file. - -
  • Add a ChangeLog entry. - -
  • Do a "make dist" in the main directory. This generates a new archive -containing your changes. Do NOT send me the whole archive, instead: - -
  • Generate a patch. Unpack the previously generated archive and the -original archive (into some other directory), and use - -
     
    	diff -urN {original-directory} {your-directory} > patch
    -
    -

    to generate a file containing only your changes, and no auto-generated -files. -

    -
  • Remove the `po' directory patches and patches to all auto-generated -files (Makefile, Makefile.in, configure.log etc.) from the diff (that's -what usually makes the patch unnecessarily large). Or just remove the po -directories before generating the diff. - -
  • Send the patch to the `soundtracker-discuss' mailing-list, if you -want feedback from other users. If you're -not subscribed, then subscribe first (see README file). Mail it directly -to the maintainer (`m.krause@tu-harburg.de') instead of to the list if it's large. Please explain what the patch changes. - -
- -
- - - - - - -
[Top][Contents][Index][ ? ]
-

About This Document

-

- This document was generated by Michael Krause on February, 25 2006 using texi2html 1.76. -

-

- The buttons in the navigation panels have the following meaning: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Button Name Go to From 1.2.3 go to
[ < ] Backprevious section in reading order1.2.2
[ > ] Forwardnext section in reading order1.2.4
[ << ] FastBackbeginning of this chapter or previous chapter1
[ Up ] Upup section1.2
[ >> ] FastForwardnext chapter2
[Top] Topcover (top) of document  
[Contents] Contentstable of contents  
[Index] Indexindex  
[ ? ] Aboutabout (help)  
- -

- where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure: -

- -
    -
  • 1. Section One -
      -
    • 1.1 Subsection One-One -
        -
      • ...
      • -
      -
    • -
    • 1.2 Subsection One-Two -
        -
      • 1.2.1 Subsubsection One-Two-One
      • -
      • 1.2.2 Subsubsection One-Two-Two
      • -
      • 1.2.3 Subsubsection One-Two-Three     - <== Current Position
      • -
      • 1.2.4 Subsubsection One-Two-Four
      • -
      -
    • -
    • 1.3 Subsection One-Three -
        -
      • ...
      • -
      -
    • -
    • 1.4 Subsection One-Four
    • -
    -
  • -
- -
-

- - This document was generated by Michael Krause on February, 25 2006 using texi2html 1.76. - -
- -

- - diff -Nru soundtracker-0.6.8/doc/hacking.texi soundtracker-1.0.2~pre2/doc/hacking.texi --- soundtracker-0.6.8/doc/hacking.texi 2000-09-25 10:54:04.000000000 +0000 +++ soundtracker-1.0.2~pre2/doc/hacking.texi 2020-01-10 18:46:47.000000000 +0000 @@ -23,8 +23,11 @@ sometimes block the process for quite a long time. For example when the window is resized, widgets have to be redrawn, which can take a while. To provide continous sound output, we're using a separate thread. +Sampling driver can also create its own thread. The communication between +the sampling thread and the main thread is rather simple and wrapped in +macros in drivers/driver-thread.h file. -Communication between the threads is accomplished using two pipes. The +Communication between the main and audio threads is accomplished using two pipes. The communication codes for this pipe are defined in audio.h. When messages are received, they are handled in gui.c::read_mixer_pipe() and audio.c::audio_thread(), respectively. @@ -106,16 +109,18 @@ The driver API is separated into two branches: output and input (sampling) drivers. Input drivers are usually simpler, because they don't have to include the mechanisms necessary for synchronization of -the audio output stream with the GUI. Also, currently only 16bit mono -sampling is supported (though changing this would require only some -changes to sample-editor.c), so a good amount of the settings widgets -are missing in input drivers. +the audio output stream with the GUI. As a rule, an input driver create +its own thread when it is active. All supporting code is wrapped in +DRIVER_THREAD_* macros in drivers/driver-thread.h file. The use of these +macros is rather self-explaining, see for example, drivers/alsa1x.c or +drivers/oss.c file. Jack input driver is the exception, it create a thread +on its own to match the Jack sound architecture. -Note that the current API doesn't make any provisions for MIDI input / +Note that the current API doesn't make any provisions for MIDI output. First and foremost, it must be thought about the synchronization of MIDI output with mixed (DSP) output as the most important aspect; the central audio code in audio.c hasn't been designed with this in mind -either. +either. The MIDI input API actually emulates the keyboard key presses. Also not accounted for, but related to the MIDI issue, are wavetable devices like the GUS which can play multiple samples on their own. But @@ -127,15 +132,15 @@ @section Adding drivers to the source tree -You must add checks for any libs and includes in configure.in, add a -corresponding driver define to acconfig.h, add the driver to the drivers +You must add checks for any libs and includes in configure.in, +add the driver to the drivers list in main.c, and finally add all the files belonging to your driver (should be only one) to drivers/Makefile.am. Now you still have to write the code, that's what the two next sections are about. @section Output drivers -The st_out_driver structure, defined driver-out.h must be globally +The st_driver structure, defined driver-inout.h must be globally defined in your source file. It must contain valid pointers to all the functions and a unique entry in the name field. The rest of the variables and functions in your source file should be defined static so @@ -147,6 +152,7 @@ The first function you should write is new(), which allocates a new object and initializes it with default settings. getwidget() can stay empty for as long as you don't want the user to change settings. +destroy() function releases the resources allocated by new() function. The next function you write should be open(), which opens the device according to the settings in the object structure. release() does the @@ -154,15 +160,28 @@ the function you're going to write now. That's it, you should have a working minimal driver now. -The next important function is getplaytime() which is necessary for the +There could be also a pair of functions, activate(), which is called +when the driver is selected as the current driver being used, and +deactivate() which is opposite to activate(). activate() can do some +preparatory work like establishing connection with a sound server, start +servicing thread and so on, deactivate() can undo things done by +activate(). + +The next important function is get_play_time() which is necessary for the GUI to synchronize with the audio output. This might require some -experimentation to get right. +experimentation to get right. get_play_rate() should return the current +sample rate. Now you can start adding the settings widget and add code to the load / save settings functions. @section Input drivers +Input driver API is very similar to that of an output driver. Input and +output drivers can even share a large part of code (see alsa1x.c or oss.c +for example). The way how the input driver organizes its servicing thread +is described above. + @node Mixer API, Contributing Code, Driver API, Top @chapter Mixer API diff -Nru soundtracker-0.6.8/doc/hacking.txt soundtracker-1.0.2~pre2/doc/hacking.txt --- soundtracker-0.6.8/doc/hacking.txt 2006-02-25 13:25:53.000000000 +0000 +++ soundtracker-1.0.2~pre2/doc/hacking.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,213 +0,0 @@ -SoundTracker internals -********************** - -1 General Architecture -********************** - -SoundTracker (short: ST) consists of two threads: the GUI (or main) -thread, and the audio (or mixer / player) thread. The reason for not -handling both jobs in one process via select() is obvious: the GUI can -sometimes block the process for quite a long time. For example when the -window is resized, widgets have to be redrawn, which can take a while. -To provide continous sound output, we're using a separate thread. - - Communication between the threads is accomplished using two pipes. -The communication codes for this pipe are defined in audio.h. When -messages are received, they are handled in gui.c::read_mixer_pipe() and -audio.c::audio_thread(), respectively. - - In its current form, the code is limited to dealing with one module -at the same time, with one editing window. Some of the GUI code has -already been modularized, since some of the editing facilities have been -encapsulated in custom GTK+ widgets, for example sample-display.c, -clavier.c, envelope-box.c, playlist.c and tracker.c. Noteworthy -exceptions and containers of generous amounts of global variables are -gui.c, sample-editor.c, instrument-editor.c and xm-player.c. - - For ST to be made fully multi-module capable ("object-oriented"), -large parts of the GUI will have to be changed. Unfortunately, -references to the global "tracker" and "xm" variables can be found -virtually everywhere in the source code. - -2 Synchronization of Audio and GUI -********************************** - -Since mixing buffer sizes can't be turned down as low as under primitive -operating systems such as DOS, special care must been taken to take the -audio latency into account. - - The audio thread thus keeps a list of recently reached pattern -positions and their occurence in the mixed audio output stream. The GUI -thread then checks periodically (track-editor.c::tracker_timeout(), -scope-group.c::scope_group_timeout()) for the current position of the -soundcard in the output stream and calculates which pattern position -corresponds to that time. The get_play_time() method in output drivers -is the key for this to work correctly. The lists are handled through the -time buffer interface, see time-buffer.[ch]. - - The oscilloscope monitors are handled in a similar way through some -ring buffers. This is documented in audio.h, for example. time-buffer -can't be used here because scope data is continuous and is accessed -from the GUI thread in more than one location. - - Certain other events are handled through the event waiter interface -(see event-waiter.h for an overview). - -3 How the audio subsystem works -******************************* - -Module playing is initialized by the GUI thread sending a message -AUDIO_CTLPIPE_PLAY_SONG, for example. The audio thread then opens the -driver module, which in turn installs a callback method, which will be -called as soon as the sound card is accepting new data. The OSS driver, -for example, instructs the audio subsystem, through -audio.c::audio_poll_add(), to call -oss-output.c::oss_poll_ready_playing() once OSS accepts new data from -ST. - - After opening the output driver, various other things are -initialized in audio.c::audio_prepare_for_playing(). After that, an -acknowledgement message is sent back to the GUI thread, which is in -playing mode from then on (indicated by the global variable -gui.c::gui_playing_mode). - - After that, the audio thread goes back into its main poll() loop, -which also waits for the driver callback action now. Once this callback -is triggered, it calls audio.c::audio_mix() (defined in driver-out.h) to -request a new part of the sample output stream in any format and bitrate -it desires, which is then output. - - Calling the XM player at the right moment and handling the pitch -bending feature is all done in audio_mix() which should be rather -straight-forward to read. - - Interesting is also the interaction between xm-player.c and the rest -of the audio subsystem. There are some routines in audio.c starting with -driver_*, like driver_startnote, driver_setfreq. xm-player.c calls these -instead of the corresponding routines in the mixer because this way, a -modularized mixer system could be installed lateron. You can find more -about the Mixer API later in this document. - -4 Driver API -************ - -The driver API is separated into two branches: output and input -(sampling) drivers. Input drivers are usually simpler, because they -don't have to include the mechanisms necessary for synchronization of -the audio output stream with the GUI. Also, currently only 16bit mono -sampling is supported (though changing this would require only some -changes to sample-editor.c), so a good amount of the settings widgets -are missing in input drivers. - - Note that the current API doesn't make any provisions for MIDI input -/ output. First and foremost, it must be thought about the -synchronization of MIDI output with mixed (DSP) output as the most -important aspect; the central audio code in audio.c hasn't been -designed with this in mind either. - - Also not accounted for, but related to the MIDI issue, are wavetable -devices like the GUS which can play multiple samples on their own. But -since hardware like this is more and more becoming extinct and CPU power -rises, I don't think that supporting this is important any longer, -especially once ST will be extended to support effect plug-ins which -can't be rendered by the audio hardware but must be calculated using the -CPU! - -4.1 Adding drivers to the source tree -===================================== - -You must add checks for any libs and includes in configure.in, add a -corresponding driver define to acconfig.h, add the driver to the drivers -list in main.c, and finally add all the files belonging to your driver -(should be only one) to drivers/Makefile.am. Now you still have to write -the code, that's what the two next sections are about. - -4.2 Output drivers -================== - -The st_out_driver structure, defined driver-out.h must be globally -defined in your source file. It must contain valid pointers to all the -functions and a unique entry in the name field. The rest of the -variables and functions in your source file should be defined static so -as to hide them from the rest of the program. - - You can keep the *settings functions empty at first, adding the right -code here shouldn't be a problem when you compare with oss-output.c. - - The first function you should write is new(), which allocates a new -object and initializes it with default settings. getwidget() can stay -empty for as long as you don't want the user to change settings. - - The next function you write should be open(), which opens the device -according to the settings in the object structure. release() does the -opposite. open() should install the callback mentioned earlier, which is -the function you're going to write now. That's it, you should have a -working minimal driver now. - - The next important function is getplaytime() which is necessary for -the GUI to synchronize with the audio output. This might require some -experimentation to get right. - - Now you can start adding the settings widget and add code to the -load / save settings functions. - -4.3 Input drivers -================= - -5 Mixer API -*********** - -To be written. Two mixers are already available; shouldn't be hard to -understand how it works. Basically it's really independent of the rest -of the tracker. - -6 Contributing Code -******************* - -Please follow these rules if you want to donate code to the -SoundTracker project: - - * Coding Style. I prefer 4-space tabulators, and an indentation style - like this: - - if(something) { - work(); - } - - instead of: - - if (something) - { - work (); - } - - If you're using Emacs, you can simply use "M-x c-set-style cc-mode" - - * Add yourself to the AUTHORS file. - - * Add a ChangeLog entry. - - * Do a "make dist" in the main directory. This generates a new - archive containing your changes. Do NOT send me the whole archive, - instead: - - * Generate a patch. Unpack the previously generated archive and the - original archive (into some other directory), and use - - diff -urN {original-directory} {your-directory} > patch - - to generate a file containing only your changes, and no - auto-generated files. - - * Remove the `po' directory patches and patches to all auto-generated - files (Makefile, Makefile.in, configure.log etc.) from the diff - (that's what usually makes the patch unnecessarily large). Or just - remove the po directories before generating the diff. - - * Send the patch to the `soundtracker-discuss' mailing-list, if you - want feedback from other users. If you're not subscribed, then - subscribe first (see README file). Mail it directly to the - maintainer (`m.krause@tu-harburg.de') instead of to the list if - it's large. Please explain what the patch changes. - - Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/doc/keybindings.odt and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/doc/keybindings.odt differ diff -Nru soundtracker-0.6.8/doc/Makefile.in soundtracker-1.0.2~pre2/doc/Makefile.in --- soundtracker-0.6.8/doc/Makefile.in 2006-02-25 13:37:14.000000000 +0000 +++ soundtracker-1.0.2~pre2/doc/Makefile.in 2021-02-26 19:46:41.000000000 +0000 @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.7.9 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 -# Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -13,17 +13,67 @@ # PARTICULAR PURPOSE. @SET_MAKE@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. - +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -35,21 +85,55 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : +build_triplet = @build@ host_triplet = @host@ +subdir = doc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +ARFLAGS = @ARFLAGS@ AUDIOFILE_CFLAGS = @AUDIOFILE_CFLAGS@ -AUDIOFILE_CONFIG = @AUDIOFILE_CONFIG@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +CANVAS_CFLAGS = @CANVAS_CFLAGS@ +CANVAS_LIBS = @CANVAS_LIBS@ CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ @@ -57,45 +141,26 @@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DRIVER_ALSA_050_FALSE = @DRIVER_ALSA_050_FALSE@ -DRIVER_ALSA_050_TRUE = @DRIVER_ALSA_050_TRUE@ -DRIVER_ALSA_09x_FALSE = @DRIVER_ALSA_09x_FALSE@ -DRIVER_ALSA_09x_TRUE = @DRIVER_ALSA_09x_TRUE@ -DRIVER_ALSA_FALSE = @DRIVER_ALSA_FALSE@ -DRIVER_ALSA_TRUE = @DRIVER_ALSA_TRUE@ -DRIVER_ESD_FALSE = @DRIVER_ESD_FALSE@ -DRIVER_ESD_TRUE = @DRIVER_ESD_TRUE@ -DRIVER_IRIX_FALSE = @DRIVER_IRIX_FALSE@ -DRIVER_IRIX_TRUE = @DRIVER_IRIX_TRUE@ -DRIVER_JACK_FALSE = @DRIVER_JACK_FALSE@ -DRIVER_JACK_TRUE = @DRIVER_JACK_TRUE@ -DRIVER_OSS_FALSE = @DRIVER_OSS_FALSE@ -DRIVER_OSS_TRUE = @DRIVER_OSS_TRUE@ -DRIVER_SDL_FALSE = @DRIVER_SDL_FALSE@ -DRIVER_SDL_TRUE = @DRIVER_SDL_TRUE@ -DRIVER_SUN_FALSE = @DRIVER_SUN_FALSE@ -DRIVER_SUN_TRUE = @DRIVER_SUN_TRUE@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ESD_CFLAGS = @ESD_CFLAGS@ -ESD_CONFIG = @ESD_CONFIG@ -ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ -GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ -GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@ -GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ -GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ @@ -105,136 +170,162 @@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ -MKINSTALLDIRS = @MKINSTALLDIRS@ +MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ -NO_ASM_FALSE = @NO_ASM_FALSE@ -NO_ASM_TRUE = @NO_ASM_TRUE@ -NO_GDK_PIXBUF_FALSE = @NO_GDK_PIXBUF_FALSE@ -NO_GDK_PIXBUF_TRUE = @NO_GDK_PIXBUF_TRUE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ +PULSE_CFLAGS = @PULSE_CFLAGS@ +PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ -ST_S_JACK_INCLUDES = @ST_S_JACK_INCLUDES@ -ST_S_JACK_LIBS = @ST_S_JACK_LIBS@ -USE_GNOME_FALSE = @USE_GNOME_FALSE@ -USE_GNOME_TRUE = @USE_GNOME_TRUE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ -gnomepath = @gnomepath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ +mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ +sedpath = @sedpath@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ -target = @target@ target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ - +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ EXTRA_DIST = \ hacking.texi hacking.html hacking.txt \ xm.txt xi.txt xp.txt -subdir = doc -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -DIST_SOURCES = -DIST_COMMON = $(srcdir)/Makefile.in Makefile.am all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu doc/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) -uninstall-info-am: -tags: TAGS -TAGS: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +tags TAGS: -ctags: CTAGS -CTAGS: +ctags CTAGS: -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +cscope cscopelist: -top_distdir = .. -distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkinstalldirs) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -244,7 +335,6 @@ check-am: all-am check: check-am all-am: Makefile - installdirs: install: install-am install-exec: install-exec-am @@ -256,22 +346,26 @@ installcheck: installcheck-am install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi mostlyclean-generic: clean-generic: distclean-generic: - -rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - clean-am: clean-generic mostlyclean-am distclean: distclean-am @@ -282,18 +376,40 @@ dvi-am: +html: html-am + +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -312,16 +428,22 @@ ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip -.PHONY: all all-am check check-am clean clean-generic distclean \ - distclean-generic distdir dvi dvi-am info info-am install \ - install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am dist-hook distclean distclean-generic distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags-am uninstall uninstall-am + +.PRECIOUS: Makefile dist-hook: @@ -331,6 +453,7 @@ clean: rm -f hacking.html hacking.txt + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru soundtracker-0.6.8/doc/xi.txt soundtracker-1.0.2~pre2/doc/xi.txt --- soundtracker-0.6.8/doc/xi.txt 2000-03-27 10:25:36.000000000 +0000 +++ soundtracker-1.0.2~pre2/doc/xi.txt 2020-11-27 16:57:38.000000000 +0000 @@ -2,6 +2,7 @@ XI format description (FastTracker II Extended Instrument) reverse engineered by KB / The Obsessed Maniacs / Reflex + Update based on FT2 clone sources by Yury "Metamrph0sis" Aliaev -------------------------------------------------------------------------- C = Chars, B = Byte, W = Word, D = Double word @@ -43,9 +44,15 @@ 010f B01 Vibrato rate 0110 W02 Volume fadeout (0..fff) -0112 B16 ????? (Zeroes) -0128 W02 Number of Samples +0112 B01 Midi on (1=on) +0113 B01 Midi channel (0..f) +0114 W01 Midi program (0..7f) / Number of Samples (v.$0101) +0116 W01 Midi bend range (0..24) +0118 B01 Mute computer (1=muted) +0119 B0f ????? (Zeroes) + +0128 W02 Number of Samples (v.$0102) ---------------------------------------------------------- sample headers @@ -55,7 +62,7 @@ 0136 B01 Volume 0137 B01 Finetune (signed) 0138 B01 Sample Type; b0,1=loop: 0=none 1=fwd 2=bidi - b4=16bit sample + b4=16bit sample b5=stereo sample 0139 B01 Panning 0140 B01 Relative Note (signed, 00=C-4) (call it Transpose) 0141 B01 Sample Name Length diff -Nru soundtracker-0.6.8/downarrow.xpm soundtracker-1.0.2~pre2/downarrow.xpm --- soundtracker-0.6.8/downarrow.xpm 2003-08-04 08:59:49.000000000 +0000 +++ soundtracker-1.0.2~pre2/downarrow.xpm 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -/* XPM */ -static char * downarrow_xpm[] = { -"16 16 3 1", -" c None", -". c #000000", -"+ c #A092A0", -" ...... ", -" .++++. ", -" .++++. ", -" .++++. ", -" .++++. ", -" .++++. ", -" .++++. ", -" .++++. ", -" .++++. ", -" .....++++..... ", -" .++++++++++. ", -" .++++++++. ", -" .++++++. ", -" .++++. ", -" .++. ", -" .. "}; diff -Nru soundtracker-0.6.8/envelope-box.glade soundtracker-1.0.2~pre2/envelope-box.glade --- soundtracker-0.6.8/envelope-box.glade 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/envelope-box.glade 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + + True + + + gtk-zoom-in + True + True + True + + + + + gtk-zoom-out + True + True + True + + + + + gtk-zoom-100 + True + True + True + + + + diff -Nru soundtracker-0.6.8/envelope-box.xml soundtracker-1.0.2~pre2/envelope-box.xml --- soundtracker-0.6.8/envelope-box.xml 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/envelope-box.xml 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + + True + + + gtk-zoom-in + True + True + True + + + + + gtk-zoom-out + True + True + True + + + + + gtk-zoom-100 + True + True + True + + + + diff -Nru soundtracker-0.6.8/FAQ soundtracker-1.0.2~pre2/FAQ --- soundtracker-0.6.8/FAQ 2003-03-08 14:20:56.000000000 +0000 +++ soundtracker-1.0.2~pre2/FAQ 2020-08-26 20:01:46.000000000 +0000 @@ -2,14 +2,6 @@ FAQ ==== -QQQQ: SoundTracker crashes as soon as I start it or as I press a -button in its window, giving weird X errors. - -a: You don't have thread-safe X libraries (you have a libc5 -system). Read the INSTALL file. - ------------------------------------------------------------------------- - QQQQ: SoundTracker complains about not being able to open /dev/dsp. a: Either you have not configured a sound driver for your system (you @@ -30,7 +22,8 @@ thread gets a much higher priority. Read the notes in the INSTALL file about this subject. -a2: Increase size of mixer buffer in the Preferences section. +a2: Increase size of audio buffer in the Preferences section (for +sound drivers which support it). a3: Disable Double Buffering a.k.a. Flicker-free scrolling. This may not look exactly nice, but can relieve your CPU from a lot of hard @@ -49,12 +42,10 @@ QQQQ: What about MIDI support? -a: I don't have any MIDI equipment, so I couldn't test MIDI-related -code, even if I wrote it. Okay, there is a possibility to receive MIDI -input from other applications running on the computer, but at the -moment I have other priorities anyway. Adding MIDI support to the -program will require a extensions of the file format; in other words, -this is not an easy project. +a: SoundTracker allows one to use a MIDI keyboard for playing and +recording notes. Indeed, ST can receive MIDI events from any source +like MIDI software players. Export to and import from MIDI files is not +supported at the present moment as well as MIDI events sending. ------------------------------------------------------------------------ @@ -66,7 +57,7 @@ work is the editor (the user interface) anyway. You can basically use it to edit any module format, it just needs tuning and (of course) a new player routine. But this is not in scope for Version 1.0 of -SoundTracker. +SoundTracker (limited IT format support might be added in Version 1.1). ------------------------------------------------------------------------ @@ -90,10 +81,34 @@ ------------------------------------------------------------------------ -QQQQ: When I use the mouse to cycle the current song position during -playback and when I press 'Ctrl' before releasing the mouse button, -the spin button keeps cycling, which is rather unintended behaviour -:-) +QQQQ: After upgrading to the SoundTracker 1.0.1 (or higher) some of the +Play/Rec Song/Patter/Row keybindings stopped working. + +a: Starting from v1.0.1 some more keybindings are made configurable. +Perhaps for your X11 keyboard layout the default keybindings are not +applicable. No problem, just go to the Settings->Keyboard->Other keys +and assing the desired keybindings. This should be made only once, then +your keybindings will be remembered. + +------------------------------------------------------------------------ + +QQQQ: Some charachers in the tracker panel are missing or incorrectly +displayed. + +a: By default, "Monospace 10" font is used to display the patterns' +contents. In yor particular system it can be mapped to something insane. +To fix this problem, go to Settings->GUI Configuration menu entry, then +select appropriate monospace font installed in your system. + +------------------------------------------------------------------------ + +QQQQ: I set up symbolic representation of effects in the volume column, +but when I use "tone portamento" effect (indicated by a quarter note +symbol), some tracker lines appeared displaced from where they should be. -a: This is gtk+ bug #56248. A status report is available under -http://bugzilla.gnome.org/show_bug.cgi?id=56248 +a: This means that the font being used for pattern contents displaying +does not contain the quarter note character and it's taken from another +font with different metric; this brakes proper alignment of tracker +lines. This is quite common situation (only few fonts have qurter note +character), so the workaround is provided: set 'Leave Tone Porta as +symbol "m"' setting on. diff -Nru soundtracker-0.6.8/flat.xpm soundtracker-1.0.2~pre2/flat.xpm --- soundtracker-0.6.8/flat.xpm 2003-08-04 08:59:49.000000000 +0000 +++ soundtracker-1.0.2~pre2/flat.xpm 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -/* XPM */ -static char * flat1_xpm[] = { -"16 16 26 1", -" c None", -". c #FFFFFF", -"+ c #B5B6B5", -"@ c #323132", -"# c #F2EFF2", -"$ c #7B7D7B", -"% c #000000", -"& c #D5D6D5", -"* c #B7B8B7", -"= c #B9BAB9", -"- c #CFCDCF", -"; c #010101", -"> c #9E9E9E", -", c #AAABAA", -"' c #CECDCE", -") c #555755", -"! c #202320", -"~ c #959695", -"{ c #1D1D1D", -"] c #C9CAC9", -"^ c #4D4D4D", -"/ c #ADADAD", -"( c #999A99", -"_ c #9F9D9F", -": c #070B07", -"< c #D5D2D5", -" ... ", -" .+@#. ", -" .$%&. ", -" .$%&. ", -" .$%&. ", -" .$%&. ", -" .$%&. ", -" .$%&.. ", -" .$%*=-. ", -" .$%;;;>. ", -" .$%,')!. ", -" .$%&.~{. ", -" .$%];^/. ", -" .$%;(.. ", -" ._:<. ", -" ... "}; diff -Nru soundtracker-0.6.8/format.sh soundtracker-1.0.2~pre2/format.sh --- soundtracker-0.6.8/format.sh 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/format.sh 2019-03-13 08:52:38.000000000 +0000 @@ -0,0 +1,2 @@ +#!/bin/bash +clang-format-6.0 -i -fallback-style=Webkit `find . -regex '.*\.[hc]$'` Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/icons/crop-16.png and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/icons/crop-16.png differ diff -Nru soundtracker-0.6.8/icons/downarrow.xpm soundtracker-1.0.2~pre2/icons/downarrow.xpm --- soundtracker-0.6.8/icons/downarrow.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/downarrow.xpm 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * downarrow_xpm[] = { +"16 16 3 1", +" c None", +". c #000000", +"+ c #A092A0", +" ...... ", +" .++++. ", +" .++++. ", +" .++++. ", +" .++++. ", +" .++++. ", +" .++++. ", +" .++++. ", +" .++++. ", +" .....++++..... ", +" .++++++++++. ", +" .++++++++. ", +" .++++++. ", +" .++++. ", +" .++. ", +" .. "}; diff -Nru soundtracker-0.6.8/icons/flat.xpm soundtracker-1.0.2~pre2/icons/flat.xpm --- soundtracker-0.6.8/icons/flat.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/flat.xpm 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,45 @@ +/* XPM */ +static char * flat1_xpm[] = { +"16 16 26 1", +" c None", +". c #FFFFFF", +"+ c #B5B6B5", +"@ c #323132", +"# c #F2EFF2", +"$ c #7B7D7B", +"% c #000000", +"& c #D5D6D5", +"* c #B7B8B7", +"= c #B9BAB9", +"- c #CFCDCF", +"; c #010101", +"> c #9E9E9E", +", c #AAABAA", +"' c #CECDCE", +") c #555755", +"! c #202320", +"~ c #959695", +"{ c #1D1D1D", +"] c #C9CAC9", +"^ c #4D4D4D", +"/ c #ADADAD", +"( c #999A99", +"_ c #9F9D9F", +": c #070B07", +"< c #D5D2D5", +" ... ", +" .+@#. ", +" .$%&. ", +" .$%&. ", +" .$%&. ", +" .$%&. ", +" .$%&. ", +" .$%&.. ", +" .$%*=-. ", +" .$%;;;>. ", +" .$%,')!. ", +" .$%&.~{. ", +" .$%];^/. ", +" .$%;(.. ", +" ._:<. ", +" ... "}; Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/icons/history-16.png and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/icons/history-16.png differ diff -Nru soundtracker-0.6.8/icons/led_off.xpm soundtracker-1.0.2~pre2/icons/led_off.xpm --- soundtracker-0.6.8/icons/led_off.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/led_off.xpm 2020-06-10 17:50:25.000000000 +0000 @@ -0,0 +1,154 @@ +/* XPM */ +static char * led_off_xpm[] = { +"15 15 136 2", +" c None", +". c #000000", +"+ c #4A0000", +"@ c #400100", +"# c #350100", +"$ c #2B0101", +"% c #210100", +"& c #1C0001", +"* c #1D0000", +"= c #230101", +"- c #360101", +"; c #420101", +"> c #4D0001", +", c #590001", +"' c #480001", +") c #FFFFFF", +"! c #250001", +"~ c #320001", +"{ c #3C0000", +"] c #490100", +"^ c #570001", +"/ c #450100", +"( c #060100", +"_ c #080100", +": c #160000", +"< c #210001", +"[ c #2E0001", +"} c #3B0101", +"| c #470001", +"1 c #550001", +"2 c #2D0100", +"3 c #210101", +"4 c #160100", +"5 c #0D0000", +"6 c #0E0100", +"7 c #170100", +"8 c #310100", +"9 c #3D0101", +"0 c #4A0100", +"a c #570000", +"b c #4A0101", +"c c #3E0101", +"d c #330000", +"e c #270101", +"f c #1D0101", +"g c #1A0000", +"h c #190000", +"i c #200101", +"j c #2A0101", +"k c #330001", +"l c #400001", +"m c #4D0101", +"n c #580000", +"o c #4F0101", +"p c #440001", +"q c #390000", +"r c #300101", +"s c #2A0000", +"t c #240100", +"u c #260000", +"v c #2A0001", +"w c #3C0001", +"x c #460101", +"y c #510100", +"z c #5D0001", +"A c #4C0100", +"B c #430100", +"C c #3A0000", +"D c #330100", +"E c #360000", +"F c #430000", +"G c #620000", +"H c #5D0100", +"I c #540000", +"J c #460001", +"K c #400101", +"L c #3F0000", +"M c #430001", +"N c #4D0000", +"O c #570101", +"P c #600001", +"Q c #6A0101", +"R c #660101", +"S c #5E0100", +"T c #500100", +"U c #4A0001", +"V c #4F0000", +"W c #520100", +"X c #610101", +"Y c #680100", +"Z c #710001", +"` c #700101", +" . c #690000", +".. c #630100", +"+. c #5A0101", +"@. c #5F0100", +"#. c #620001", +"$. c #720001", +"%. c #7A0001", +"&. c #7A0000", +"*. c #740101", +"=. c #6D0101", +"-. c #6A0000", +";. c #670000", +">. c #640101", +",. c #650000", +"'. c #660000", +"). c #6B0101", +"!. c #700000", +"~. c #750100", +"{. c #7C0000", +"]. c #840001", +"^. c #850100", +"/. c #7F0101", +"(. c #770001", +"_. c #730001", +":. c #700001", +"<. c #730100", +"[. c #730000", +"}. c #760101", +"|. c #7A0100", +"1. c #800000", +"2. c #870000", +"3. c #8E0000", +"4. c #8F0001", +"5. c #8C0100", +"6. c #860100", +"7. c #840000", +"8. c #800001", +"9. c #7E0100", +"0. c #7F0100", +"a. c #810101", +"b. c #830100", +"c. c #8C0000", +"d. c #900000", +"e. c #9A0000", +". . . . . . . . . . . . . . . ", +". + @ # $ % & * = $ - ; > , . ", +". ' ) ) ) ) ) ) ) ! ~ { ] ^ . ", +". / ) ) ) ) ( _ : < [ } | 1 . ", +". ' ) 2 3 4 5 6 7 = 8 9 0 a . ", +". b c d e f g h i j k l m n . ", +". o p q r s t u v d w x y z . ", +". 1 A B C # 8 D E 9 F m ^ G . ", +". H I A J K c L M J N O P Q . ", +". R S O T m U A V W , X Y Z . ", +". ` ...H +.n n +.@.#.Q $.%.. ", +". &.*.=.-.;.>.,.'.).!.~.{.].. ", +". ^./.%.(._.:.<.[.}.|.1.2.3.. ", +". 4.5.6.7.8.9.0.a.b.6.c.d.e.. ", +". . . . . . . . . . . . . . . "}; diff -Nru soundtracker-0.6.8/icons/led_on.xpm soundtracker-1.0.2~pre2/icons/led_on.xpm --- soundtracker-0.6.8/icons/led_on.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/led_on.xpm 2020-06-10 17:53:40.000000000 +0000 @@ -0,0 +1,85 @@ +/* XPM */ +static char * led_on_xpm[] = { +"15 15 67 1", +" c None", +". c #7A0000", +"+ c #FF0B00", +"@ c #FF1100", +"# c #FF1900", +"$ c #FF1F00", +"% c #FF2401", +"& c #FF2600", +"* c #FF2500", +"= c #FF2601", +"- c #FF2400", +"; c #FF1E00", +"> c #FF1901", +", c #FF0B01", +"' c #FFFFFF", +") c #FF2F01", +"! c #FF2900", +"~ c #FF2200", +"{ c #FF1A00", +"] c #FF1200", +"^ c #FF3D01", +"/ c #FF3C01", +"( c #FF3D00", +"_ c #FF3801", +": c #FF3200", +"< c #FF2B00", +"[ c #FF2301", +"} c #FF1800", +"| c #FF1E01", +"1 c #FF3201", +"2 c #FF3C00", +"3 c #FF4200", +"4 c #FF4700", +"5 c #FF4901", +"6 c #FF4701", +"7 c #FF4201", +"8 c #FF2901", +"9 c #FF2E00", +"0 c #FF4D01", +"a c #FF5301", +"b c #FF5600", +"c c #FF4100", +"d c #FF3800", +"e c #FF3100", +"f c #FF5100", +"g c #FF5B00", +"h c #FF6101", +"i c #FF5B01", +"j c #FF3101", +"k c #FF4A01", +"l c #FF5501", +"m c #FF6100", +"n c #FF6700", +"o c #FF5201", +"p c #FF5300", +"q c #FF2300", +"r c #FF2E01", +"s c #FF5200", +"t c #FF4D00", +"u c #FF4101", +"v c #FF3301", +"w c #FF2B01", +"x c #FF3300", +"y c #FF1101", +"z c #FF2F00", +"A c #FF1A01", +"B c #FF0A00", +"...............", +".+@#$%&*=-;>@,.", +".@''''''')!~{].", +".>''''^/(_:<[}.", +".|'1234567/18|.", +".-9_70aba0cd9%.", +".&e(4fghia4^j=.", +".&e/klmnhbk2e&.", +".=j(4oimgp6^1*.", +".qrd30sbstu_r[.", +".;!v2u6k63/1!;.", +".}[w1d^/^dxwq#.", +".y{[!9eeez8qAy.", +".+@#;-=*=%$#@B.", +"..............."}; diff -Nru soundtracker-0.6.8/icons/lock.xpm soundtracker-1.0.2~pre2/icons/lock.xpm --- soundtracker-0.6.8/icons/lock.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/lock.xpm 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,77 @@ +/* XPM */ +static char * lock_xpm[] = { +"16 16 58 1", +" c None", +". c #010101", +"+ c #A6BECE", +"@ c #B3CAD7", +"# c #BCD1DE", +"$ c #C0D4E0", +"% c #BBD1DD", +"& c #ADC4D3", +"* c #91AABD", +"= c #8CA6BA", +"- c #839DB1", +"; c #6F8A9F", +"> c #516E84", +", c #BBD0DD", +"' c #D8E8EE", +") c #E2EFF3", +"! c #D0E1E8", +"~ c #819BAE", +"{ c #7B96AA", +"] c #718CA1", +"^ c #5F7B91", +"/ c #4F6C82", +"( c #BED3DF", +"_ c #E0EEF2", +": c #D1E1E9", +"< c #AEC3D1", +"[ c #86A0B3", +"} c #6D899E", +"| c #69869B", +"1 c #648096", +"2 c #59768C", +"3 c #B9CFDC", +"4 c #CCDEE6", +"5 c #88A2B5", +"6 c #617E94", +"7 c #5F7C92", +"8 c #5D7A90", +"9 c #57748A", +"0 c #ABC3D2", +"a c #A4BCCC", +"b c #87A1B4", +"c c #5B788E", +"d c #90A9BD", +"e c #7F9AAD", +"f c #607D93", +"g c #8DA6BA", +"h c #7C96AA", +"i c #6A869C", +"j c #5C798F", +"k c #6E8A9F", +"l c #627F95", +"m c #5A778D", +"n c #6D899D", +"o c #5B778D", +"p c #557288", +"q c #4C697F", +"r c #4E6B81", +"s c #426075", +" ...... ", +" .++++++. ", +" .+......+. ", +" .+. .+. ", +" ............ ", +" .@#$%&*=-;>. ", +" .,')!+~{]^/. ", +" .(_:<[}|12/. ", +" .34<5}6789/. ", +" .0ab}...c9/. ", +" .de}f...c9/. ", +" .ghi7..jc9/. ", +" .-klj..cm9/. ", +" .no999999pq. ", +" ./rrrrrrrqs. ", +" ............ "}; diff -Nru soundtracker-0.6.8/icons/loop.xpm soundtracker-1.0.2~pre2/icons/loop.xpm --- soundtracker-0.6.8/icons/loop.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/loop.xpm 2020-01-10 18:46:47.000000000 +0000 @@ -0,0 +1,86 @@ +/* XPM */ +static char * loop_xpm[] = { +"16 16 67 1", +" c None", +". c #FCFCFC", +"+ c #FBFBFB", +"@ c #C1C1C1", +"# c #8C8C8C", +"$ c #7C7C7C", +"% c #8D8D8D", +"& c #C5C5C5", +"* c #E5E5E5", +"= c #5E5E5E", +"- c #323232", +"; c #333333", +"> c #3C3C3C", +", c #646464", +"' c #E9E9E9", +") c #EBEBEB", +"! c #4B4B4B", +"~ c #393939", +"{ c #A2A2A2", +"] c #EFEFEF", +"^ c #EEEEEE", +"/ c #919191", +"( c #343434", +"_ c #515151", +": c #7E7E7E", +"< c #C8C8C8", +"[ c #BEBEBE", +"} c #C0C0C0", +"| c #888888", +"1 c #F8F8F8", +"2 c #F3F3F3", +"3 c #373737", +"4 c #7B7B7B", +"5 c #AAAAAA", +"6 c #949494", +"7 c #6D6D6D", +"8 c #737373", +"9 c #D1D1D1", +"0 c #B2B2B2", +"a c #F7F7F7", +"b c #6E6E6E", +"c c #4D4D4D", +"d c #5D5D5D", +"e c #CECECE", +"f c #B6B6B6", +"g c #ECECEC", +"h c #898989", +"i c #6A6A6A", +"j c #3B3B3B", +"k c #E0E0E0", +"l c #F6F6F6", +"m c #D4D4D4", +"n c #DCDCDC", +"o c #474747", +"p c #707070", +"q c #F0F0F0", +"r c #CCCCCC", +"s c #434343", +"t c #4E4E4E", +"u c #636363", +"v c #D8D8D8", +"w c #9B9B9B", +"x c #656565", +"y c #565656", +"z c #686868", +"A c #9F9F9F", +"B c #F2F2F2", +" ", +" ....... ", +" ..+@#$%&... ", +" .*=-;>;-,'. ", +" .)!~{].^/(_]...", +" .:(<...+[}-|.1@", +".234....5-67>28;", +".9-0....ab-c-d-/", +".e-f.....ab---/.", +".g;h......a7-/..", +" .ijk......lm.. ", +" .n>o@...&pq.. ", +" ..rs-tu!-ov. ", +" ..]wxyzAB.. ", +" ....... ", +" "}; diff -Nru soundtracker-0.6.8/icons/play_block.xpm soundtracker-1.0.2~pre2/icons/play_block.xpm --- soundtracker-0.6.8/icons/play_block.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/play_block.xpm 2020-01-10 18:46:47.000000000 +0000 @@ -0,0 +1,50 @@ +/* XPM */ +static char * play_block_xpm[] = { +"16 16 31 1", +" c None", +". c #000000", +"+ c #FFFFFF", +"@ c #FFA9ED", +"# c #FFA6ED", +"$ c #3B002F", +"% c #290021", +"& c #030003", +"* c #FFBBF1", +"= c #FFB9F0", +"- c #FFA2EC", +"; c #FF86E6", +"> c #0D000B", +", c #070006", +"' c #0B0009", +") c #FFADEE", +"! c #FFFDFE", +"~ c #FFDFF8", +"{ c #FF4BDA", +"] c #FFB0EF", +"^ c #FFE0F8", +"/ c #FF4FDB", +"( c #FF1FD2", +"_ c #FF42D9", +": c #EE00BE", +"< c #FF46DA", +"[ c #F900C7", +"} c #C6009E", +"| c #DC00AF", +"1 c #CC00A3", +"2 c #D100A7", +"................", +".++++++++++++++.", +".++..++++++++++.", +".++....++++++++.", +".++.@#.$%++++++.", +".++&*=-;>,.++++.", +".++')!~{{{...++.", +".++.]^/((_{_..+.", +".++.{(((::::..+.", +".++.<([}|:...++.", +".++.<1}}...++++.", +".++.<2...++++++.", +".++....++++++++.", +".++..++++++++++.", +".++++++++++++++.", +"................"}; diff -Nru soundtracker-0.6.8/icons/play_cur.xpm soundtracker-1.0.2~pre2/icons/play_cur.xpm --- soundtracker-0.6.8/icons/play_cur.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/play_cur.xpm 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,58 @@ +/* XPM */ +static char * play_pat_xpm[] = { +"16 16 39 1", +" c None", +". c #171717", +"+ c #191919", +"@ c #181818", +"# c #FFFF9B", +"$ c #FFFFFB", +"% c #FFFFE0", +"& c #FFFF86", +"* c #EEEE7D", +"= c #EBEB6D", +"- c #FFFF73", +"; c #FFFFFF", +"> c #E9E967", +", c #E2E263", +"' c #CFCF5B", +") c #DEDE61", +"! c #D3D35D", +"~ c #BCBC53", +"{ c #DADA60", +"] c #FAFA71", +"^ c #D2D25D", +"/ c #151515", +"( c #F1F16C", +"_ c #D6D65E", +": c #EAEA67", +"< c #E5E565", +"[ c #BFBF54", +"} c #F3F36C", +"| c #CCCC5A", +"1 c #F4F46D", +"2 c #E7E766", +"3 c #CECE5B", +"4 c #E3E363", +"5 c #DEDE63", +"6 c #D5D55E", +"7 c #FBFB71", +"8 c #DBDB61", +"9 c #D6D65F", +"0 c #161616", +"...++++++++++@..", +"..#$%&&&&**&&=+.", +" .-;;>>,')),!~. ", +" .+-,{{]^,-,~/. ", +" .-())]_:<,~/ ", +" ..-,,,!:<[~/ ", +" .}|,12,,~/ ", +" ..~324,~~. ", +" .~~125~/ ", +" ./~67~/. ", +" .~88~. ", +" ./9{/. ", +" 0~~. ", +" .~~. ", +" .. ", +" .. "}; diff -Nru soundtracker-0.6.8/icons/play_from.xpm soundtracker-1.0.2~pre2/icons/play_from.xpm --- soundtracker-0.6.8/icons/play_from.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/play_from.xpm 2020-01-10 18:46:47.000000000 +0000 @@ -0,0 +1,51 @@ +/* XPM */ +static char * play_from_xpm[] = { +"16 16 32 1", +" c None", +". c #FFFFFF", +"+ c #000000", +"@ c #7F7F7F", +"# c #A9C7FF", +"$ c #A6C6FF", +"% c #00153B", +"& c #000F29", +"* c #000103", +"= c #BBD3FF", +"- c #B9D2FF", +"; c #A2C3FF", +"> c #86B1FF", +", c #00050D", +"' c #000207", +") c #00040B", +"! c #ADCAFF", +"~ c #FDFDFF", +"{ c #DFEAFF", +"] c #4B8BFF", +"^ c #B0CCFF", +"/ c #E0EBFF", +"( c #4F8EFF", +"_ c #1F6FFF", +": c #4286FF", +"< c #0055EE", +"[ c #4688FF", +"} c #0059F9", +"| c #0046C6", +"1 c #004EDC", +"2 c #0049CC", +"3 c #004BD1", +".. ", +"+@.++ ", +"+@.++++ ", +"+@.+#$+%& ", +"+@.*=-;>,'+ ", +"+@.)!~{]]]+++ ", +"+@.+^/(__:]]+++ ", +"+@.+]______:]:++", +"+@.+]_______<<++", +"+@.+]___<<<<+++ ", +"+@.+[_}|1<+++ ", +"+@.+[2||+++ ", +"+@.+[3+++ ", +"+@.++++ ", +"+@.++ ", +".. "}; diff -Nru soundtracker-0.6.8/icons/play.xpm soundtracker-1.0.2~pre2/icons/play.xpm --- soundtracker-0.6.8/icons/play.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/play.xpm 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,54 @@ +/* XPM */ +static char * play_xpm[] = { +"16 16 35 1", +" c None", +". c #000000", +"+ c #010101", +"@ c #78FC69", +"# c #7EFA6D", +"$ c #202020", +"% c #171717", +"& c #040404", +"* c #90FF7F", +"= c #90FE7F", +"- c #7DF56F", +"; c #6EE761", +"> c #090909", +", c #050505", +"' c #080808", +") c #88FA7A", +"! c #FEFFFE", +"~ c #D2FFBE", +"{ c #5EC653", +"] c #8DFB78", +"^ c #D6FFB9", +"/ c #5DC852", +"( c #51AA47", +"_ c #5BC050", +": c #51AE47", +"< c #45903C", +"[ c #448E3B", +"} c #0D0D0D", +"| c #5DC352", +"1 c #49953F", +"2 c #397631", +"3 c #3F8436", +"4 c #5CC352", +"5 c #3A7A32", +"6 c #3D7F36", +".. ", +"...+ ", +".@#+$% ", +"&*=-;>,+ ", +"')!~{{{... ", +".]^/((_{{... ", +".{((((((_{{++. ", +"+{((((((((:{_...", +".{(((((((<[[[.+}", +".{((((([[[[+.. ", +".{((([[[[+.. ", +".|(123[... ", +".4522... ", +".46..+ ", +".... ", +".. "}; diff -Nru soundtracker-0.6.8/icons/rightarrow.xpm soundtracker-1.0.2~pre2/icons/rightarrow.xpm --- soundtracker-0.6.8/icons/rightarrow.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/rightarrow.xpm 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* XPM */ +static char * rightarrow_xpm[] = { +"16 16 3 1", +" c None", +". c #000000", +"+ c #A092A0", +" ", +" . ", +" .. ", +" .+. ", +" .++. ", +"..........+++. ", +".+++++++++++++. ", +".++++++++++++++.", +".++++++++++++++.", +".+++++++++++++. ", +"..........+++. ", +" .++. ", +" .+. ", +" .. ", +" . ", +" "}; Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/icons/select-all-16.png and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/icons/select-all-16.png differ Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/icons/select-all-22.png and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/icons/select-all-22.png differ Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/icons/select-none-16.png and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/icons/select-none-16.png differ Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/icons/select-none-22.png and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/icons/select-none-22.png differ diff -Nru soundtracker-0.6.8/icons/sharp.xpm soundtracker-1.0.2~pre2/icons/sharp.xpm --- soundtracker-0.6.8/icons/sharp.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/sharp.xpm 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,83 @@ +/* XPM */ +static char * sharp1_xpm[] = { +"16 16 64 1", +" c None", +". c #FFFFFF", +"+ c #646564", +"@ c #656565", +"# c #545554", +"$ c #ADACAD", +"% c #F0F0F0", +"& c #595B59", +"* c #616161", +"= c #383938", +"- c #9B9C9B", +"; c #EFEFEF", +"> c #424342", +", c #818181", +"' c #959695", +") c #212121", +"! c #0C0D0C", +"~ c #909090", +"{ c #B3B4B3", +"] c #252625", +"^ c #0E0E0E", +"/ c #020202", +"( c #000000", +"_ c #242424", +": c #ACACAC", +"< c #747574", +"[ c #080808", +"} c #030503", +"| c #424142", +"1 c #2B2A2B", +"2 c #595959", +"3 c #717271", +"4 c #161716", +"5 c #7D7E7D", +"6 c #D5D5D5", +"7 c #565756", +"8 c #525152", +"9 c #BCBDBC", +"0 c #454645", +"a c #979797", +"b c #CFD0CF", +"c c #484948", +"d c #111111", +"e c #949594", +"f c #C2C3C2", +"g c #303230", +"h c #414141", +"i c #989998", +"j c #141414", +"k c #010301", +"l c #0A0C0A", +"m c #3A3A3A", +"n c #676767", +"o c #070707", +"p c #434243", +"q c #A8A6A8", +"r c #4B4D4B", +"s c #A9AAA9", +"t c #232423", +"u c #F2F2F2", +"v c #757675", +"w c #777777", +"x c #3F3F3F", +"y c #A2A1A2", +" .. ", +" ...+@. ", +" .#$%&*. ", +" .=-;&>. ", +" .=,')!~. ", +" .{]^/(_:. ", +" .<[}|12. ", +" .345678. ", +" 90abcde. ", +" fghg([i. ", +" .,j(klm. ", +" .nopqr*. ", +" .st-;&*. ", +" .=-uvw. ", +" .xy... ", +" .. "}; diff -Nru soundtracker-0.6.8/icons/stop.xpm soundtracker-1.0.2~pre2/icons/stop.xpm --- soundtracker-0.6.8/icons/stop.xpm 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/icons/stop.xpm 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,72 @@ +/* XPM */ +static char * stop_xpm[] = { +"16 16 53 1", +" c None", +". c #000000", +"+ c #FFA9A9", +"@ c #FFB7B7", +"# c #FF8484", +"$ c #FFC2C2", +"% c #FFFCFC", +"& c #FFA3A3", +"* c #FF8888", +"= c #FF8383", +"- c #FF7171", +"; c #D55E5E", +"> c #FF8585", +", c #FFCFCF", +"' c #FFF5F5", +") c #FE8888", +"! c #F96161", +"~ c #AD4444", +"{ c #FF9797", +"] c #FFCBCB", +"^ c #FA6363", +"/ c #FA6565", +"( c #EF5D5D", +"_ c #FF9999", +": c #FF7878", +"< c #FB6868", +"[ c #FC6969", +"} c #FF9A9A", +"| c #E55959", +"1 c #FD6B6B", +"2 c #FE6E6E", +"3 c #FA6464", +"4 c #F55F5F", +"5 c #E95B5B", +"6 c #FFB2B2", +"7 c #FF9191", +"8 c #FC6868", +"9 c #FFB4B4", +"0 c #F06161", +"a c #FB6666", +"b c #FB6D6D", +"c c #FE7070", +"d c #FF8787", +"e c #B84848", +"f c #FF9393", +"g c #DF6262", +"h c #D05151", +"i c #F76565", +"j c #AA4343", +"k c #EB7979", +"l c #BA5151", +"m c #B24E4E", +"n c #A44040", +"................", +".+@############.", +".$%&*#####=---;.", +".>,')!!!!!!!!!~.", +".{]$^!!!!//((!~.", +"._:' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try -IF YOU HAVE DOWNLOADED THE .tar.gz BINARY PACKAGE: ---------------------------------------------------- + ./configure CC="cc" -Note that this binary is compiled without GNOME and NLS support, and -linked against glibc-2.1, gtk+-1.2 and audiofile-0.1 (it will probably -work on glibc-2.0 systems as well). If you want GNOME or NLS support, -compile the package on your own, or get the RPM package. +and if that doesn't work, try -1. Copy the soundtracker executable to /usr/local/bin. + ./configure CC="cc -nodtk" -2. Optionally: + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. - chown root.root /usr/local/bin/soundtracker - chmod 4755 /usr/local/bin/soundtracker + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: - This will make the audio performance a little bit smoother. + ./configure --prefix=/boot/common -IF YOU HAVE DOWNLOADED THE .rpm BINARY PACKAGE: ------------------------------------------------- +Specifying the System Type +========================== -Ah, oh. You already have everything in place, or you wouldn't be able -to read this :-) + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: -WIN32 PORT: ------------- + CPU-COMPANY-SYSTEM -Not working at the moment, but code is there. If you want to hack on -this, see the ChangeLog (2000-09-19). +where SYSTEM can have one of these forms: + OS + KERNEL-OS -SUID ROOT INSTALLATION -======================= + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. -By default, SoundTracker is installed suid root. This way, the audio -rendering part of the program runs under higher system priority and -because of that, there are less skips and pops in the sound under -load. + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. -This can be a security risk, however. If you are running this program -on a multi-user machine -- that is, other users that you don't -completely trust have access to this machine -- you should think about -removing the suid flag by doing a + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. - chmod -s /usr/local/bin/soundtracker +Sharing Defaults +================ -as root. + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. -Problems that can occur due to SoundTracker being suid root: +Defining Variables +================== -- "Save Module as WAV" can write files everywhere in the filesystem, - it could even overwrite /lib/libc.so. -- Other audio drivers run with root privileges. What can happen here - depends on the types of audio drivers compiled in. + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: + + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. -+ The rest of the program does NOT run under root privileges. Loading - and saving modules, for example, takes place in the environment - of the user that started SoundTracker. +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. diff -Nru soundtracker-0.6.8/install-sh soundtracker-1.0.2~pre2/install-sh --- soundtracker-0.6.8/install-sh 2005-02-13 13:31:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/install-sh 2017-01-25 18:15:10.000000000 +0000 @@ -1,7 +1,8 @@ #!/bin/sh -# # install - install a program, script, or datafile -# + +scriptversion=2014-09-12.12; # UTC + # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. @@ -34,261 +35,474 @@ # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it +# 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written -# from scratch. It can only install one file at a time, a restriction -# shared with many OS's install programs. +# from scratch. +tab=' ' +nl=' +' +IFS=" $tab$nl" + +# Set DOITPROG to "echo" to test this script. + +doit=${DOITPROG-} +doit_exec=${doit:-exec} + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= -# set DOITPROG to echo to test this script +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +is_target_a_directory=possibly + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) is_target_a_directory=never;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -transformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd=$cpprog - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd=$stripprog - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; esac -done + done +fi -if [ x"$src" = x ] -then - echo "$0: no input file specified" >&2 - exit 1 -else - : +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 fi -if [ x"$dir_arg" != x ]; then - dst=$src - src="" - - if [ -d "$dst" ]; then - instcmd=: - chmodcmd="" - else - instcmd=$mkdirprog - fi -else - -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f "$src" ] || [ -d "$src" ] - then - : - else - echo "$0: $src does not exist" >&2 - exit 1 - fi - - if [ x"$dst" = x ] - then - echo "$0: no destination specified" >&2 - exit 1 - else - : - fi - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - - if [ -d "$dst" ] - then - dst=$dst/`basename "$src"` - else - : - fi +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi fi -## this sed command emulates the dirname command -dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + dstdir=`dirname "$dst"` + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + # $RANDOM is not portable (e.g. dash); use it when possible to + # lower collision chance + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # As "mkdir -p" follows symlinks and we work in /tmp possibly; so + # create the $tmpdir first (and fail if unsuccessful) to make sure + # that nobody tries to guess the $tmpdir name. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac;; + esac -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' - ' -IFS="${IFS-$defaultIFS}" - -oIFS=$IFS -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS=$oIFS - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp=$pathcomp$1 - shift - - if [ ! -d "$pathcomp" ] ; - then - $mkdirprog "$pathcomp" - else - : - fi + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + oIFS=$IFS + IFS=/ + set -f + set fnord $dstdir + shift + set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + set +f && + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 - pathcomp=$pathcomp/ + trap '' 0 + fi done -fi -if [ x"$dir_arg" != x ] -then - $doit $instcmd "$dst" && - - if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi -else - -# If we're going to rename the final executable, determine the name now. - - if [ x"$transformarg" = x ] - then - dstfile=`basename "$dst"` - else - dstfile=`basename "$dst" $transformbasename | - sed $transformarg`$transformbasename - fi - -# don't allow the sed command to completely eliminate the filename - - if [ x"$dstfile" = x ] - then - dstfile=`basename "$dst"` - else - : - fi - -# Make a couple of temp file names in the proper directory. - - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - -# Trap to clean up temp files at exit. - - trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 - trap '(exit $?); exit' 1 2 13 15 - -# Move or copy the file name to the temp name - - $doit $instcmd "$src" "$dsttmp" && - -# and set any options; do chmod last to preserve setuid bits - -# If any of these fail, we abort the whole thing. If we want to -# ignore errors from any of these, just make sure not to ignore -# errors from the above "$doit $instcmd $src $dsttmp" command. - - if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && - -# Now remove or move aside any old file at destination location. We try this -# two ways since rm can't unlink itself on some systems and the destination -# file might be busy for other reasons. In this case, the final cleanup -# might fail but the new file should still install successfully. - -{ - if [ -f "$dstdir/$dstfile" ] - then - $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || - $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || - { - echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 - (exit 1); exit - } - else - : - fi -} && - -# Now rename the file to the real destination. - - $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" - -fi && - -# The final little trick to "correctly" pass the exit status to the exit trap. - -{ - (exit 0); exit -} +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff -Nru soundtracker-0.6.8/lock.xpm soundtracker-1.0.2~pre2/lock.xpm --- soundtracker-0.6.8/lock.xpm 2003-08-04 08:59:49.000000000 +0000 +++ soundtracker-1.0.2~pre2/lock.xpm 1970-01-01 00:00:00.000000000 +0000 @@ -1,77 +0,0 @@ -/* XPM */ -static char * lock_xpm[] = { -"16 16 58 1", -" c None", -". c #010101", -"+ c #A6BECE", -"@ c #B3CAD7", -"# c #BCD1DE", -"$ c #C0D4E0", -"% c #BBD1DD", -"& c #ADC4D3", -"* c #91AABD", -"= c #8CA6BA", -"- c #839DB1", -"; c #6F8A9F", -"> c #516E84", -", c #BBD0DD", -"' c #D8E8EE", -") c #E2EFF3", -"! c #D0E1E8", -"~ c #819BAE", -"{ c #7B96AA", -"] c #718CA1", -"^ c #5F7B91", -"/ c #4F6C82", -"( c #BED3DF", -"_ c #E0EEF2", -": c #D1E1E9", -"< c #AEC3D1", -"[ c #86A0B3", -"} c #6D899E", -"| c #69869B", -"1 c #648096", -"2 c #59768C", -"3 c #B9CFDC", -"4 c #CCDEE6", -"5 c #88A2B5", -"6 c #617E94", -"7 c #5F7C92", -"8 c #5D7A90", -"9 c #57748A", -"0 c #ABC3D2", -"a c #A4BCCC", -"b c #87A1B4", -"c c #5B788E", -"d c #90A9BD", -"e c #7F9AAD", -"f c #607D93", -"g c #8DA6BA", -"h c #7C96AA", -"i c #6A869C", -"j c #5C798F", -"k c #6E8A9F", -"l c #627F95", -"m c #5A778D", -"n c #6D899D", -"o c #5B778D", -"p c #557288", -"q c #4C697F", -"r c #4E6B81", -"s c #426075", -" ...... ", -" .++++++. ", -" .+......+. ", -" .+. .+. ", -" ............ ", -" .@#$%&*=-;>. ", -" .,')!+~{]^/. ", -" .(_:<[}|12/. ", -" .34<5}6789/. ", -" .0ab}...c9/. ", -" .de}f...c9/. ", -" .ghi7..jc9/. ", -" .-klj..cm9/. ", -" .no999999pq. ", -" ./rrrrrrrqs. ", -" ............ "}; diff -Nru soundtracker-0.6.8/m4/ChangeLog soundtracker-1.0.2~pre2/m4/ChangeLog --- soundtracker-0.6.8/m4/ChangeLog 2006-01-15 15:39:27.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/ChangeLog 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -2006-01-15 gettextize - - * codeset.m4: New file, from gettext-0.14.4. - * gettext.m4: New file, from gettext-0.14.4. - * glibc2.m4: New file, from gettext-0.14.4. - * glibc21.m4: New file, from gettext-0.14.4. - * iconv.m4: New file, from gettext-0.14.4. - * intdiv0.m4: New file, from gettext-0.14.4. - * intmax.m4: New file, from gettext-0.14.4. - * inttypes.m4: New file, from gettext-0.14.4. - * inttypes_h.m4: New file, from gettext-0.14.4. - * inttypes-pri.m4: New file, from gettext-0.14.4. - * isc-posix.m4: New file, from gettext-0.14.4. - * lcmessage.m4: New file, from gettext-0.14.4. - * lib-ld.m4: New file, from gettext-0.14.4. - * lib-link.m4: New file, from gettext-0.14.4. - * lib-prefix.m4: New file, from gettext-0.14.4. - * longdouble.m4: New file, from gettext-0.14.4. - * longlong.m4: New file, from gettext-0.14.4. - * nls.m4: New file, from gettext-0.14.4. - * po.m4: New file, from gettext-0.14.4. - * printf-posix.m4: New file, from gettext-0.14.4. - * progtest.m4: New file, from gettext-0.14.4. - * signed.m4: New file, from gettext-0.14.4. - * size_max.m4: New file, from gettext-0.14.4. - * stdint_h.m4: New file, from gettext-0.14.4. - * uintmax_t.m4: New file, from gettext-0.14.4. - * ulonglong.m4: New file, from gettext-0.14.4. - * wchar_t.m4: New file, from gettext-0.14.4. - * wint_t.m4: New file, from gettext-0.14.4. - * xsize.m4: New file, from gettext-0.14.4. - diff -Nru soundtracker-0.6.8/m4/codeset.m4 soundtracker-1.0.2~pre2/m4/codeset.m4 --- soundtracker-0.6.8/m4/codeset.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/codeset.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# codeset.m4 serial AM1 (gettext-0.10.40) -dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_DEFUN([AM_LANGINFO_CODESET], -[ - AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, - [AC_TRY_LINK([#include ], - [char* cs = nl_langinfo(CODESET);], - am_cv_langinfo_codeset=yes, - am_cv_langinfo_codeset=no) - ]) - if test $am_cv_langinfo_codeset = yes; then - AC_DEFINE(HAVE_LANGINFO_CODESET, 1, - [Define if you have and nl_langinfo(CODESET).]) - fi -]) diff -Nru soundtracker-0.6.8/m4/gettext.m4 soundtracker-1.0.2~pre2/m4/gettext.m4 --- soundtracker-0.6.8/m4/gettext.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/gettext.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,549 +0,0 @@ -# gettext.m4 serial 37 (gettext-0.14.4) -dnl Copyright (C) 1995-2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1995-2000. -dnl Bruno Haible , 2000-2003. - -dnl Macro to add for using GNU gettext. - -dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). -dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The -dnl default (if it is not specified or empty) is 'no-libtool'. -dnl INTLSYMBOL should be 'external' for packages with no intl directory, -dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. -dnl If INTLSYMBOL is 'use-libtool', then a libtool library -dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, -dnl depending on --{enable,disable}-{shared,static} and on the presence of -dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library -dnl $(top_builddir)/intl/libintl.a will be created. -dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext -dnl implementations (in libc or libintl) without the ngettext() function -dnl will be ignored. If NEEDSYMBOL is specified and is -dnl 'need-formatstring-macros', then GNU gettext implementations that don't -dnl support the ISO C 99 formatstring macros will be ignored. -dnl INTLDIR is used to find the intl libraries. If empty, -dnl the value `$(top_builddir)/intl/' is used. -dnl -dnl The result of the configuration is one of three cases: -dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled -dnl and used. -dnl Catalog format: GNU --> install in $(datadir) -dnl Catalog extension: .mo after installation, .gmo in source tree -dnl 2) GNU gettext has been found in the system's C library. -dnl Catalog format: GNU --> install in $(datadir) -dnl Catalog extension: .mo after installation, .gmo in source tree -dnl 3) No internationalization, always use English msgid. -dnl Catalog format: none -dnl Catalog extension: none -dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. -dnl The use of .gmo is historical (it was needed to avoid overwriting the -dnl GNU format catalogs when building on a platform with an X/Open gettext), -dnl but we keep it in order not to force irrelevant filename changes on the -dnl maintainers. -dnl -AC_DEFUN([AM_GNU_GETTEXT], -[ - dnl Argument checking. - ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , - [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT -])])])])]) - ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , - [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT -])])])]) - define([gt_included_intl], ifelse([$1], [external], [no], [yes])) - define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) - - AC_REQUIRE([AM_PO_SUBDIRS])dnl - ifelse(gt_included_intl, yes, [ - AC_REQUIRE([AM_INTL_SUBDIR])dnl - ]) - - dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - - dnl Sometimes libintl requires libiconv, so first search for libiconv. - dnl Ideally we would do this search only after the - dnl if test "$USE_NLS" = "yes"; then - dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then - dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT - dnl the configure script would need to contain the same shell code - dnl again, outside any 'if'. There are two solutions: - dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. - dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. - dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not - dnl documented, we avoid it. - ifelse(gt_included_intl, yes, , [ - AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) - ]) - - dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. - gt_INTL_MACOSX - - dnl Set USE_NLS. - AM_NLS - - ifelse(gt_included_intl, yes, [ - BUILD_INCLUDED_LIBINTL=no - USE_INCLUDED_LIBINTL=no - ]) - LIBINTL= - LTLIBINTL= - POSUB= - - dnl If we use NLS figure out what method - if test "$USE_NLS" = "yes"; then - gt_use_preinstalled_gnugettext=no - ifelse(gt_included_intl, yes, [ - AC_MSG_CHECKING([whether included gettext is requested]) - AC_ARG_WITH(included-gettext, - [ --with-included-gettext use the GNU gettext library included here], - nls_cv_force_use_gnu_gettext=$withval, - nls_cv_force_use_gnu_gettext=no) - AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) - - nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" - if test "$nls_cv_force_use_gnu_gettext" != "yes"; then - ]) - dnl User does not insist on using GNU NLS library. Figure out what - dnl to use. If GNU gettext is available we use this. Else we have - dnl to fall back to GNU NLS library. - - dnl Add a version number to the cache macros. - define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1))) - define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) - define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) - - AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, - [AC_TRY_LINK([#include -]ifelse([$2], [need-formatstring-macros], -[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION -#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) -#endif -changequote(,)dnl -typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; -changequote([,])dnl -], [])[extern int _nl_msg_cat_cntr; -extern int *_nl_domain_bindings;], - [bindtextdomain ("", ""); -return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], - gt_cv_func_gnugettext_libc=yes, - gt_cv_func_gnugettext_libc=no)]) - - if test "$gt_cv_func_gnugettext_libc" != "yes"; then - dnl Sometimes libintl requires libiconv, so first search for libiconv. - ifelse(gt_included_intl, yes, , [ - AM_ICONV_LINK - ]) - dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL - dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) - dnl because that would add "-liconv" to LIBINTL and LTLIBINTL - dnl even if libiconv doesn't exist. - AC_LIB_LINKFLAGS_BODY([intl]) - AC_CACHE_CHECK([for GNU gettext in libintl], - gt_cv_func_gnugettext_libintl, - [gt_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $INCINTL" - gt_save_LIBS="$LIBS" - LIBS="$LIBS $LIBINTL" - dnl Now see whether libintl exists and does not depend on libiconv. - AC_TRY_LINK([#include -]ifelse([$2], [need-formatstring-macros], -[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION -#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) -#endif -changequote(,)dnl -typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; -changequote([,])dnl -], [])[extern int _nl_msg_cat_cntr; -extern -#ifdef __cplusplus -"C" -#endif -const char *_nl_expand_alias (const char *);], - [bindtextdomain ("", ""); -return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")], - gt_cv_func_gnugettext_libintl=yes, - gt_cv_func_gnugettext_libintl=no) - dnl Now see whether libintl exists and depends on libiconv. - if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then - LIBS="$LIBS $LIBICONV" - AC_TRY_LINK([#include -]ifelse([$2], [need-formatstring-macros], -[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION -#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) -#endif -changequote(,)dnl -typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; -changequote([,])dnl -], [])[extern int _nl_msg_cat_cntr; -extern -#ifdef __cplusplus -"C" -#endif -const char *_nl_expand_alias (const char *);], - [bindtextdomain ("", ""); -return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")], - [LIBINTL="$LIBINTL $LIBICONV" - LTLIBINTL="$LTLIBINTL $LTLIBICONV" - gt_cv_func_gnugettext_libintl=yes - ]) - fi - CPPFLAGS="$gt_save_CPPFLAGS" - LIBS="$gt_save_LIBS"]) - fi - - dnl If an already present or preinstalled GNU gettext() is found, - dnl use it. But if this macro is used in GNU gettext, and GNU - dnl gettext is already preinstalled in libintl, we update this - dnl libintl. (Cf. the install rule in intl/Makefile.in.) - if test "$gt_cv_func_gnugettext_libc" = "yes" \ - || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ - && test "$PACKAGE" != gettext-runtime \ - && test "$PACKAGE" != gettext-tools; }; then - gt_use_preinstalled_gnugettext=yes - else - dnl Reset the values set by searching for libintl. - LIBINTL= - LTLIBINTL= - INCINTL= - fi - - ifelse(gt_included_intl, yes, [ - if test "$gt_use_preinstalled_gnugettext" != "yes"; then - dnl GNU gettext is not found in the C library. - dnl Fall back on included GNU gettext library. - nls_cv_use_gnu_gettext=yes - fi - fi - - if test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Mark actions used to generate GNU NLS library. - BUILD_INCLUDED_LIBINTL=yes - USE_INCLUDED_LIBINTL=yes - LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV" - LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" - LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` - fi - - CATOBJEXT= - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Mark actions to use GNU gettext tools. - CATOBJEXT=.gmo - fi - ]) - - if test -n "$INTL_MACOSX_LIBS"; then - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Some extra flags are needed during linking. - LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" - LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" - fi - fi - - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - AC_DEFINE(ENABLE_NLS, 1, - [Define to 1 if translation of program messages to the user's native language - is requested.]) - else - USE_NLS=no - fi - fi - - AC_MSG_CHECKING([whether to use NLS]) - AC_MSG_RESULT([$USE_NLS]) - if test "$USE_NLS" = "yes"; then - AC_MSG_CHECKING([where the gettext function comes from]) - if test "$gt_use_preinstalled_gnugettext" = "yes"; then - if test "$gt_cv_func_gnugettext_libintl" = "yes"; then - gt_source="external libintl" - else - gt_source="libc" - fi - else - gt_source="included intl directory" - fi - AC_MSG_RESULT([$gt_source]) - fi - - if test "$USE_NLS" = "yes"; then - - if test "$gt_use_preinstalled_gnugettext" = "yes"; then - if test "$gt_cv_func_gnugettext_libintl" = "yes"; then - AC_MSG_CHECKING([how to link with libintl]) - AC_MSG_RESULT([$LIBINTL]) - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) - fi - - dnl For backward compatibility. Some packages may be using this. - AC_DEFINE(HAVE_GETTEXT, 1, - [Define if the GNU gettext() function is already present or preinstalled.]) - AC_DEFINE(HAVE_DCGETTEXT, 1, - [Define if the GNU dcgettext() function is already present or preinstalled.]) - fi - - dnl We need to process the po/ directory. - POSUB=po - fi - - ifelse(gt_included_intl, yes, [ - dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL - dnl to 'yes' because some of the testsuite requires it. - if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then - BUILD_INCLUDED_LIBINTL=yes - fi - - dnl Make all variables we use known to autoconf. - AC_SUBST(BUILD_INCLUDED_LIBINTL) - AC_SUBST(USE_INCLUDED_LIBINTL) - AC_SUBST(CATOBJEXT) - - dnl For backward compatibility. Some configure.ins may be using this. - nls_cv_header_intl= - nls_cv_header_libgt= - - dnl For backward compatibility. Some Makefiles may be using this. - DATADIRNAME=share - AC_SUBST(DATADIRNAME) - - dnl For backward compatibility. Some Makefiles may be using this. - INSTOBJEXT=.mo - AC_SUBST(INSTOBJEXT) - - dnl For backward compatibility. Some Makefiles may be using this. - GENCAT=gencat - AC_SUBST(GENCAT) - - dnl For backward compatibility. Some Makefiles may be using this. - INTLOBJS= - if test "$USE_INCLUDED_LIBINTL" = yes; then - INTLOBJS="\$(GETTOBJS)" - fi - AC_SUBST(INTLOBJS) - - dnl Enable libtool support if the surrounding package wishes it. - INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix - AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) - ]) - - dnl For backward compatibility. Some Makefiles may be using this. - INTLLIBS="$LIBINTL" - AC_SUBST(INTLLIBS) - - dnl Make all documented variables known to autoconf. - AC_SUBST(LIBINTL) - AC_SUBST(LTLIBINTL) - AC_SUBST(POSUB) -]) - - -dnl Checks for all prerequisites of the intl subdirectory, -dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, -dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. -AC_DEFUN([AM_INTL_SUBDIR], -[ - AC_REQUIRE([AC_PROG_INSTALL])dnl - AC_REQUIRE([AM_MKINSTALLDIRS])dnl - AC_REQUIRE([AC_PROG_CC])dnl - AC_REQUIRE([AC_CANONICAL_HOST])dnl - AC_REQUIRE([gt_GLIBC2])dnl - AC_REQUIRE([AC_PROG_RANLIB])dnl - AC_REQUIRE([AC_ISC_POSIX])dnl - AC_REQUIRE([AC_HEADER_STDC])dnl - AC_REQUIRE([AC_C_CONST])dnl - AC_REQUIRE([bh_C_SIGNED])dnl - AC_REQUIRE([AC_C_INLINE])dnl - AC_REQUIRE([AC_TYPE_OFF_T])dnl - AC_REQUIRE([AC_TYPE_SIZE_T])dnl - AC_REQUIRE([gl_AC_TYPE_LONG_LONG])dnl - AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl - AC_REQUIRE([gt_TYPE_WCHAR_T])dnl - AC_REQUIRE([gt_TYPE_WINT_T])dnl - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - AC_REQUIRE([gt_TYPE_INTMAX_T]) - AC_REQUIRE([gt_PRINTF_POSIX]) - AC_REQUIRE([AC_FUNC_ALLOCA])dnl - AC_REQUIRE([AC_FUNC_MMAP])dnl - AC_REQUIRE([gl_GLIBC21])dnl - AC_REQUIRE([gt_INTDIV0])dnl - AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl - AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl - AC_REQUIRE([gt_INTTYPES_PRI])dnl - AC_REQUIRE([gl_XSIZE])dnl - AC_REQUIRE([gt_INTL_MACOSX])dnl - - AC_CHECK_TYPE([ptrdiff_t], , - [AC_DEFINE([ptrdiff_t], [long], - [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) - ]) - AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ -stdlib.h string.h unistd.h sys/param.h]) - AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \ -mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \ -strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \ -__fsetlocking]) - - dnl Use the _snprintf function only if it is declared (because on NetBSD it - dnl is defined as a weak alias of snprintf; we prefer to use the latter). - gt_CHECK_DECL(_snprintf, [#include ]) - gt_CHECK_DECL(_snwprintf, [#include ]) - - dnl Use the *_unlocked functions only if they are declared. - dnl (because some of them were defined without being declared in Solaris - dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built - dnl on Solaris 2.5.1 to run on Solaris 2.6). - dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. - gt_CHECK_DECL(feof_unlocked, [#include ]) - gt_CHECK_DECL(fgets_unlocked, [#include ]) - gt_CHECK_DECL(getc_unlocked, [#include ]) - - case $gt_cv_func_printf_posix in - *yes) HAVE_POSIX_PRINTF=1 ;; - *) HAVE_POSIX_PRINTF=0 ;; - esac - AC_SUBST([HAVE_POSIX_PRINTF]) - if test "$ac_cv_func_asprintf" = yes; then - HAVE_ASPRINTF=1 - else - HAVE_ASPRINTF=0 - fi - AC_SUBST([HAVE_ASPRINTF]) - if test "$ac_cv_func_snprintf" = yes; then - HAVE_SNPRINTF=1 - else - HAVE_SNPRINTF=0 - fi - AC_SUBST([HAVE_SNPRINTF]) - if test "$ac_cv_func_wprintf" = yes; then - HAVE_WPRINTF=1 - else - HAVE_WPRINTF=0 - fi - AC_SUBST([HAVE_WPRINTF]) - - AM_ICONV - AM_LANGINFO_CODESET - if test $ac_cv_header_locale_h = yes; then - gt_LC_MESSAGES - fi - - if test -n "$INTL_MACOSX_LIBS"; then - CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" - fi - - dnl intl/plural.c is generated from intl/plural.y. It requires bison, - dnl because plural.y uses bison specific features. It requires at least - dnl bison-1.26 because earlier versions generate a plural.c that doesn't - dnl compile. - dnl bison is only needed for the maintainer (who touches plural.y). But in - dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put - dnl the rule in general Makefile. Now, some people carelessly touch the - dnl files or have a broken "make" program, hence the plural.c rule will - dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not - dnl present or too old. - AC_CHECK_PROGS([INTLBISON], [bison]) - if test -z "$INTLBISON"; then - ac_verc_fail=yes - else - dnl Found it, now check the version. - AC_MSG_CHECKING([version of bison]) -changequote(<<,>>)dnl - ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` - case $ac_prog_version in - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) -changequote([,])dnl - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; - esac - AC_MSG_RESULT([$ac_prog_version]) - fi - if test $ac_verc_fail = yes; then - INTLBISON=: - fi -]) - - -dnl Checks for special options needed on MacOS X. -dnl Defines INTL_MACOSX_LIBS. -AC_DEFUN([gt_INTL_MACOSX], -[ - dnl Check for API introduced in MacOS X 10.2. - AC_CACHE_CHECK([for CFPreferencesCopyAppValue], - gt_cv_func_CFPreferencesCopyAppValue, - [gt_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" - gt_save_LIBS="$LIBS" - LIBS="$LIBS -framework CoreFoundation" - AC_TRY_LINK([#include ], - [CFPreferencesCopyAppValue(NULL, NULL)], - [gt_cv_func_CFPreferencesCopyAppValue=yes], - [gt_cv_func_CFPreferencesCopyAppValue=no]) - CPPFLAGS="$gt_save_CPPFLAGS" - LIBS="$gt_save_LIBS"]) - if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then - AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1, - [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) - fi - dnl Check for API introduced in MacOS X 10.3. - AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, - [gt_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" - gt_save_LIBS="$LIBS" - LIBS="$LIBS -framework CoreFoundation" - AC_TRY_LINK([#include ], [CFLocaleCopyCurrent();], - [gt_cv_func_CFLocaleCopyCurrent=yes], - [gt_cv_func_CFLocaleCopyCurrent=no]) - CPPFLAGS="$gt_save_CPPFLAGS" - LIBS="$gt_save_LIBS"]) - if test $gt_cv_func_CFLocaleCopyCurrent = yes; then - AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1, - [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) - fi - INTL_MACOSX_LIBS= - if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then - INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" - fi - AC_SUBST([INTL_MACOSX_LIBS]) -]) - - -dnl gt_CHECK_DECL(FUNC, INCLUDES) -dnl Check whether a function is declared. -AC_DEFUN([gt_CHECK_DECL], -[ - AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1, - [AC_TRY_COMPILE([$2], [ -#ifndef $1 - char *p = (char *) $1; -#endif -], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)]) - if test $ac_cv_have_decl_$1 = yes; then - gt_value=1 - else - gt_value=0 - fi - AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value], - [Define to 1 if you have the declaration of `$1', and to 0 if you don't.]) -]) - - -dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) -AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) diff -Nru soundtracker-0.6.8/m4/glibc21.m4 soundtracker-1.0.2~pre2/m4/glibc21.m4 --- soundtracker-0.6.8/m4/glibc21.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/glibc21.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -# glibc21.m4 serial 3 -dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Test for the GNU C Library, version 2.1 or newer. -# From Bruno Haible. - -AC_DEFUN([gl_GLIBC21], - [ - AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, - ac_cv_gnu_library_2_1, - [AC_EGREP_CPP([Lucky GNU user], - [ -#include -#ifdef __GNU_LIBRARY__ - #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) - Lucky GNU user - #endif -#endif - ], - ac_cv_gnu_library_2_1=yes, - ac_cv_gnu_library_2_1=no) - ] - ) - AC_SUBST(GLIBC21) - GLIBC21="$ac_cv_gnu_library_2_1" - ] -) diff -Nru soundtracker-0.6.8/m4/glibc2.m4 soundtracker-1.0.2~pre2/m4/glibc2.m4 --- soundtracker-0.6.8/m4/glibc2.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/glibc2.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -# glibc2.m4 serial 1 -dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Test for the GNU C Library, version 2.0 or newer. -# From Bruno Haible. - -AC_DEFUN([gt_GLIBC2], - [ - AC_CACHE_CHECK(whether we are using the GNU C Library 2 or newer, - ac_cv_gnu_library_2, - [AC_EGREP_CPP([Lucky GNU user], - [ -#include -#ifdef __GNU_LIBRARY__ - #if (__GLIBC__ >= 2) - Lucky GNU user - #endif -#endif - ], - ac_cv_gnu_library_2=yes, - ac_cv_gnu_library_2=no) - ] - ) - AC_SUBST(GLIBC2) - GLIBC2="$ac_cv_gnu_library_2" - ] -) diff -Nru soundtracker-0.6.8/m4/iconv.m4 soundtracker-1.0.2~pre2/m4/iconv.m4 --- soundtracker-0.6.8/m4/iconv.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/iconv.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -# iconv.m4 serial AM4 (gettext-0.11.3) -dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], -[ - dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - - dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV - dnl accordingly. - AC_LIB_LINKFLAGS_BODY([iconv]) -]) - -AC_DEFUN([AM_ICONV_LINK], -[ - dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and - dnl those with the standalone portable GNU libiconv installed). - - dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV - dnl accordingly. - AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) - - dnl Add $INCICONV to CPPFLAGS before performing the following checks, - dnl because if the user has installed libiconv and not disabled its use - dnl via --without-libiconv-prefix, he wants to use it. The first - dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. - am_save_CPPFLAGS="$CPPFLAGS" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) - - AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ - am_cv_func_iconv="no, consider installing GNU libiconv" - am_cv_lib_iconv=no - AC_TRY_LINK([#include -#include ], - [iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd);], - am_cv_func_iconv=yes) - if test "$am_cv_func_iconv" != yes; then - am_save_LIBS="$LIBS" - LIBS="$LIBS $LIBICONV" - AC_TRY_LINK([#include -#include ], - [iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd);], - am_cv_lib_iconv=yes - am_cv_func_iconv=yes) - LIBS="$am_save_LIBS" - fi - ]) - if test "$am_cv_func_iconv" = yes; then - AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) - fi - if test "$am_cv_lib_iconv" = yes; then - AC_MSG_CHECKING([how to link with libiconv]) - AC_MSG_RESULT([$LIBICONV]) - else - dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV - dnl either. - CPPFLAGS="$am_save_CPPFLAGS" - LIBICONV= - LTLIBICONV= - fi - AC_SUBST(LIBICONV) - AC_SUBST(LTLIBICONV) -]) - -AC_DEFUN([AM_ICONV], -[ - AM_ICONV_LINK - if test "$am_cv_func_iconv" = yes; then - AC_MSG_CHECKING([for iconv declaration]) - AC_CACHE_VAL(am_cv_proto_iconv, [ - AC_TRY_COMPILE([ -#include -#include -extern -#ifdef __cplusplus -"C" -#endif -#if defined(__STDC__) || defined(__cplusplus) -size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); -#else -size_t iconv(); -#endif -], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") - am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) - am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` - AC_MSG_RESULT([$]{ac_t:- - }[$]am_cv_proto_iconv) - AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, - [Define as const if the declaration of iconv() needs const.]) - fi -]) diff -Nru soundtracker-0.6.8/m4/intdiv0.m4 soundtracker-1.0.2~pre2/m4/intdiv0.m4 --- soundtracker-0.6.8/m4/intdiv0.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/intdiv0.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -# intdiv0.m4 serial 1 (gettext-0.11.3) -dnl Copyright (C) 2002 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_DEFUN([gt_INTDIV0], -[ - AC_REQUIRE([AC_PROG_CC])dnl - AC_REQUIRE([AC_CANONICAL_HOST])dnl - - AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], - gt_cv_int_divbyzero_sigfpe, - [ - AC_TRY_RUN([ -#include -#include - -static void -#ifdef __cplusplus -sigfpe_handler (int sig) -#else -sigfpe_handler (sig) int sig; -#endif -{ - /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ - exit (sig != SIGFPE); -} - -int x = 1; -int y = 0; -int z; -int nan; - -int main () -{ - signal (SIGFPE, sigfpe_handler); -/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ -#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) - signal (SIGTRAP, sigfpe_handler); -#endif -/* Linux/SPARC yields signal SIGILL. */ -#if defined (__sparc__) && defined (__linux__) - signal (SIGILL, sigfpe_handler); -#endif - - z = x / y; - nan = y / y; - exit (1); -} -], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, - [ - # Guess based on the CPU. - case "$host_cpu" in - alpha* | i[34567]86 | m68k | s390*) - gt_cv_int_divbyzero_sigfpe="guessing yes";; - *) - gt_cv_int_divbyzero_sigfpe="guessing no";; - esac - ]) - ]) - case "$gt_cv_int_divbyzero_sigfpe" in - *yes) value=1;; - *) value=0;; - esac - AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, - [Define if integer division by zero raises signal SIGFPE.]) -]) diff -Nru soundtracker-0.6.8/m4/intmax.m4 soundtracker-1.0.2~pre2/m4/intmax.m4 --- soundtracker-0.6.8/m4/intmax.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/intmax.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -# intmax.m4 serial 2 (gettext-0.14.2) -dnl Copyright (C) 2002-2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. -dnl Test whether the system has the 'intmax_t' type, but don't attempt to -dnl find a replacement if it is lacking. - -AC_DEFUN([gt_TYPE_INTMAX_T], -[ - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t, - [AC_TRY_COMPILE([ -#include -#include -#if HAVE_STDINT_H_WITH_UINTMAX -#include -#endif -#if HAVE_INTTYPES_H_WITH_UINTMAX -#include -#endif -], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)]) - if test $gt_cv_c_intmax_t = yes; then - AC_DEFINE(HAVE_INTMAX_T, 1, - [Define if you have the 'intmax_t' type in or .]) - fi -]) diff -Nru soundtracker-0.6.8/m4/inttypes_h.m4 soundtracker-1.0.2~pre2/m4/inttypes_h.m4 --- soundtracker-0.6.8/m4/inttypes_h.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/inttypes_h.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -# inttypes_h.m4 serial 6 -dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, -# doesn't clash with , and declares uintmax_t. - -AC_DEFUN([gl_AC_HEADER_INTTYPES_H], -[ - AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h, - [AC_TRY_COMPILE( - [#include -#include ], - [uintmax_t i = (uintmax_t) -1;], - gl_cv_header_inttypes_h=yes, - gl_cv_header_inttypes_h=no)]) - if test $gl_cv_header_inttypes_h = yes; then - AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, - [Define if exists, doesn't clash with , - and declares uintmax_t. ]) - fi -]) diff -Nru soundtracker-0.6.8/m4/inttypes.m4 soundtracker-1.0.2~pre2/m4/inttypes.m4 --- soundtracker-0.6.8/m4/inttypes.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/inttypes.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -# inttypes.m4 serial 1 (gettext-0.11.4) -dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_INTTYPES_H if exists and doesn't clash with -# . - -AC_DEFUN([gt_HEADER_INTTYPES_H], -[ - AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, - [ - AC_TRY_COMPILE( - [#include -#include ], - [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) - ]) - if test $gt_cv_header_inttypes_h = yes; then - AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, - [Define if exists and doesn't clash with .]) - fi -]) diff -Nru soundtracker-0.6.8/m4/inttypes-pri.m4 soundtracker-1.0.2~pre2/m4/inttypes-pri.m4 --- soundtracker-0.6.8/m4/inttypes-pri.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/inttypes-pri.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -# inttypes-pri.m4 serial 1 (gettext-0.11.4) -dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -# Define PRI_MACROS_BROKEN if exists and defines the PRI* -# macros to non-string values. This is the case on AIX 4.3.3. - -AC_DEFUN([gt_INTTYPES_PRI], -[ - AC_REQUIRE([gt_HEADER_INTTYPES_H]) - if test $gt_cv_header_inttypes_h = yes; then - AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], - gt_cv_inttypes_pri_broken, - [ - AC_TRY_COMPILE([#include -#ifdef PRId32 -char *p = PRId32; -#endif -], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) - ]) - fi - if test "$gt_cv_inttypes_pri_broken" = yes; then - AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, - [Define if exists and defines unusable PRI* macros.]) - fi -]) diff -Nru soundtracker-0.6.8/m4/isc-posix.m4 soundtracker-1.0.2~pre2/m4/isc-posix.m4 --- soundtracker-0.6.8/m4/isc-posix.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/isc-posix.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -# isc-posix.m4 serial 2 (gettext-0.11.2) -dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# This file is not needed with autoconf-2.53 and newer. Remove it in 2005. - -# This test replaces the one in autoconf. -# Currently this macro should have the same name as the autoconf macro -# because gettext's gettext.m4 (distributed in the automake package) -# still uses it. Otherwise, the use in gettext.m4 makes autoheader -# give these diagnostics: -# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX -# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX - -undefine([AC_ISC_POSIX]) - -AC_DEFUN([AC_ISC_POSIX], - [ - dnl This test replaces the obsolescent AC_ISC_POSIX kludge. - AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) - ] -) diff -Nru soundtracker-0.6.8/m4/lcmessage.m4 soundtracker-1.0.2~pre2/m4/lcmessage.m4 --- soundtracker-0.6.8/m4/lcmessage.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/lcmessage.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -# lcmessage.m4 serial 4 (gettext-0.14.2) -dnl Copyright (C) 1995-2002, 2004-2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1995. - -# Check whether LC_MESSAGES is available in . - -AC_DEFUN([gt_LC_MESSAGES], -[ - AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES, - [AC_TRY_LINK([#include ], [return LC_MESSAGES], - gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)]) - if test $gt_cv_val_LC_MESSAGES = yes; then - AC_DEFINE(HAVE_LC_MESSAGES, 1, - [Define if your file defines LC_MESSAGES.]) - fi -]) diff -Nru soundtracker-0.6.8/m4/lib-ld.m4 soundtracker-1.0.2~pre2/m4/lib-ld.m4 --- soundtracker-0.6.8/m4/lib-ld.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/lib-ld.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ -# lib-ld.m4 serial 3 (gettext-0.13) -dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Subroutines of libtool.m4, -dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision -dnl with libtool.m4. - -dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. -AC_DEFUN([AC_LIB_PROG_LD_GNU], -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU ld's only accept -v. -case `$LD -v 2>&1 conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by GCC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]* | [A-Za-z]:[\\/]*)] - [re_direlt='/[^/][^/]*/\.\./'] - # Canonicalize the path of ld - ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(acl_cv_path_LD, -[if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - acl_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break ;; - *) - test "$with_gnu_ld" != yes && break ;; - esac - fi - done - IFS="$ac_save_ifs" -else - acl_cv_path_LD="$LD" # Let the user override the test with a path. -fi]) -LD="$acl_cv_path_LD" -if test -n "$LD"; then - AC_MSG_RESULT($LD) -else - AC_MSG_RESULT(no) -fi -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) -AC_LIB_PROG_LD_GNU -]) diff -Nru soundtracker-0.6.8/m4/lib-link.m4 soundtracker-1.0.2~pre2/m4/lib-link.m4 --- soundtracker-0.6.8/m4/lib-link.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/lib-link.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,553 +0,0 @@ -# lib-link.m4 serial 6 (gettext-0.14.3) -dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_PREREQ(2.50) - -dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and -dnl the libraries corresponding to explicit and implicit dependencies. -dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and -dnl augments the CPPFLAGS variable. -AC_DEFUN([AC_LIB_LINKFLAGS], -[ - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - define([Name],[translit([$1],[./-], [___])]) - define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ - AC_LIB_LINKFLAGS_BODY([$1], [$2]) - ac_cv_lib[]Name[]_libs="$LIB[]NAME" - ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" - ac_cv_lib[]Name[]_cppflags="$INC[]NAME" - ]) - LIB[]NAME="$ac_cv_lib[]Name[]_libs" - LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" - INC[]NAME="$ac_cv_lib[]Name[]_cppflags" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) - AC_SUBST([LIB]NAME) - AC_SUBST([LTLIB]NAME) - dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the - dnl results of this search when this library appears as a dependency. - HAVE_LIB[]NAME=yes - undefine([Name]) - undefine([NAME]) -]) - -dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) -dnl searches for libname and the libraries corresponding to explicit and -dnl implicit dependencies, together with the specified include files and -dnl the ability to compile and link the specified testcode. If found, it -dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and -dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and -dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs -dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. -AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], -[ - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - define([Name],[translit([$1],[./-], [___])]) - define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - - dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME - dnl accordingly. - AC_LIB_LINKFLAGS_BODY([$1], [$2]) - - dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, - dnl because if the user has installed lib[]Name and not disabled its use - dnl via --without-lib[]Name-prefix, he wants to use it. - ac_save_CPPFLAGS="$CPPFLAGS" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) - - AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ - ac_save_LIBS="$LIBS" - LIBS="$LIBS $LIB[]NAME" - AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) - LIBS="$ac_save_LIBS" - ]) - if test "$ac_cv_lib[]Name" = yes; then - HAVE_LIB[]NAME=yes - AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) - AC_MSG_CHECKING([how to link with lib[]$1]) - AC_MSG_RESULT([$LIB[]NAME]) - else - HAVE_LIB[]NAME=no - dnl If $LIB[]NAME didn't lead to a usable library, we don't need - dnl $INC[]NAME either. - CPPFLAGS="$ac_save_CPPFLAGS" - LIB[]NAME= - LTLIB[]NAME= - fi - AC_SUBST([HAVE_LIB]NAME) - AC_SUBST([LIB]NAME) - AC_SUBST([LTLIB]NAME) - undefine([Name]) - undefine([NAME]) -]) - -dnl Determine the platform dependent parameters needed to use rpath: -dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, -dnl hardcode_direct, hardcode_minus_L. -AC_DEFUN([AC_LIB_RPATH], -[ - dnl Tell automake >= 1.10 to complain if config.rpath is missing. - m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) - AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS - AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld - AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host - AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir - AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ - CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ - ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh - . ./conftest.sh - rm -f ./conftest.sh - acl_cv_rpath=done - ]) - wl="$acl_cv_wl" - libext="$acl_cv_libext" - shlibext="$acl_cv_shlibext" - hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" - hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" - hardcode_direct="$acl_cv_hardcode_direct" - hardcode_minus_L="$acl_cv_hardcode_minus_L" - dnl Determine whether the user wants rpath handling at all. - AC_ARG_ENABLE(rpath, - [ --disable-rpath do not hardcode runtime library paths], - :, enable_rpath=yes) -]) - -dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and -dnl the libraries corresponding to explicit and implicit dependencies. -dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. -AC_DEFUN([AC_LIB_LINKFLAGS_BODY], -[ - define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - dnl By default, look in $includedir and $libdir. - use_additional=yes - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - AC_LIB_ARG_WITH([lib$1-prefix], -[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib - --without-lib$1-prefix don't search for lib$1 in includedir and libdir], -[ - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - else - additional_includedir="$withval/include" - additional_libdir="$withval/lib" - fi - fi -]) - dnl Search the library and its dependencies in $additional_libdir and - dnl $LDFLAGS. Using breadth-first-seach. - LIB[]NAME= - LTLIB[]NAME= - INC[]NAME= - rpathdirs= - ltrpathdirs= - names_already_handled= - names_next_round='$1 $2' - while test -n "$names_next_round"; do - names_this_round="$names_next_round" - names_next_round= - for name in $names_this_round; do - already_handled= - for n in $names_already_handled; do - if test "$n" = "$name"; then - already_handled=yes - break - fi - done - if test -z "$already_handled"; then - names_already_handled="$names_already_handled $name" - dnl See if it was already located by an earlier AC_LIB_LINKFLAGS - dnl or AC_LIB_HAVE_LINKFLAGS call. - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` - eval value=\"\$HAVE_LIB$uppername\" - if test -n "$value"; then - if test "$value" = yes; then - eval value=\"\$LIB$uppername\" - test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" - eval value=\"\$LTLIB$uppername\" - test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" - else - dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined - dnl that this library doesn't exist. So just drop it. - : - fi - else - dnl Search the library lib$name in $additional_libdir and $LDFLAGS - dnl and the already constructed $LIBNAME/$LTLIBNAME. - found_dir= - found_la= - found_so= - found_a= - if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then - found_dir="$additional_libdir" - found_so="$additional_libdir/lib$name.$shlibext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - else - if test -f "$additional_libdir/lib$name.$libext"; then - found_dir="$additional_libdir" - found_a="$additional_libdir/lib$name.$libext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - fi - fi - fi - if test "X$found_dir" = "X"; then - for x in $LDFLAGS $LTLIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - case "$x" in - -L*) - dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then - found_dir="$dir" - found_so="$dir/lib$name.$shlibext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - else - if test -f "$dir/lib$name.$libext"; then - found_dir="$dir" - found_a="$dir/lib$name.$libext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - fi - fi - ;; - esac - if test "X$found_dir" != "X"; then - break - fi - done - fi - if test "X$found_dir" != "X"; then - dnl Found the library. - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" - if test "X$found_so" != "X"; then - dnl Linking with a shared library. We attempt to hardcode its - dnl directory into the executable's runpath, unless it's the - dnl standard /usr/lib. - if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then - dnl No hardcoding is needed. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - dnl Use an explicit option to hardcode DIR into the resulting - dnl binary. - dnl Potentially add DIR to ltrpathdirs. - dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $found_dir" - fi - dnl The hardcoding into $LIBNAME is system dependent. - if test "$hardcode_direct" = yes; then - dnl Using DIR/libNAME.so during linking hardcodes DIR into the - dnl resulting binary. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then - dnl Use an explicit option to hardcode DIR into the resulting - dnl binary. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - dnl Potentially add DIR to rpathdirs. - dnl The rpathdirs will be appended to $LIBNAME at the end. - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $found_dir" - fi - else - dnl Rely on "-L$found_dir". - dnl But don't add it if it's already contained in the LDFLAGS - dnl or the already constructed $LIBNAME - haveit= - for x in $LDFLAGS $LIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" - fi - if test "$hardcode_minus_L" != no; then - dnl FIXME: Not sure whether we should use - dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" - dnl here. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH - dnl here, because this doesn't fit in flags passed to the - dnl compiler. So give up. No hardcoding. This affects only - dnl very old systems. - dnl FIXME: Not sure whether we should use - dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" - dnl here. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" - fi - fi - fi - fi - else - if test "X$found_a" != "X"; then - dnl Linking with a static library. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" - else - dnl We shouldn't come here, but anyway it's good to have a - dnl fallback. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" - fi - fi - dnl Assume the include files are nearby. - additional_includedir= - case "$found_dir" in - */lib | */lib/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` - additional_includedir="$basedir/include" - ;; - esac - if test "X$additional_includedir" != "X"; then - dnl Potentially add $additional_includedir to $INCNAME. - dnl But don't add it - dnl 1. if it's the standard /usr/include, - dnl 2. if it's /usr/local/include and we are using GCC on Linux, - dnl 3. if it's already present in $CPPFLAGS or the already - dnl constructed $INCNAME, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - for x in $CPPFLAGS $INC[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - dnl Really add $additional_includedir to $INCNAME. - INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" - fi - fi - fi - fi - fi - dnl Look for dependencies. - if test -n "$found_la"; then - dnl Read the .la file. It defines the variables - dnl dlname, library_names, old_library, dependency_libs, current, - dnl age, revision, installed, dlopen, dlpreopen, libdir. - save_libdir="$libdir" - case "$found_la" in - */* | *\\*) . "$found_la" ;; - *) . "./$found_la" ;; - esac - libdir="$save_libdir" - dnl We use only dependency_libs. - for dep in $dependency_libs; do - case "$dep" in - -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. - dnl But don't add it - dnl 1. if it's the standard /usr/lib, - dnl 2. if it's /usr/local/lib and we are using GCC on Linux, - dnl 3. if it's already present in $LDFLAGS or the already - dnl constructed $LIBNAME, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/lib"; then - haveit= - if test "X$additional_libdir" = "X/usr/local/lib"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - haveit= - for x in $LDFLAGS $LIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LIBNAME. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" - fi - fi - haveit= - for x in $LDFLAGS $LTLIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LTLIBNAME. - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" - fi - fi - fi - fi - ;; - -R*) - dir=`echo "X$dep" | sed -e 's/^X-R//'` - if test "$enable_rpath" != no; then - dnl Potentially add DIR to rpathdirs. - dnl The rpathdirs will be appended to $LIBNAME at the end. - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $dir" - fi - dnl Potentially add DIR to ltrpathdirs. - dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $dir" - fi - fi - ;; - -l*) - dnl Handle this in the next round. - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` - ;; - *.la) - dnl Handle this in the next round. Throw away the .la's - dnl directory; it is already contained in a preceding -L - dnl option. - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` - ;; - *) - dnl Most likely an immediate library name. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" - ;; - esac - done - fi - else - dnl Didn't find the library; assume it is in the system directories - dnl known to the linker and runtime loader. (All the system - dnl directories known to the linker should also be known to the - dnl runtime loader, otherwise the system is severely misconfigured.) - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" - fi - fi - fi - done - done - if test "X$rpathdirs" != "X"; then - if test -n "$hardcode_libdir_separator"; then - dnl Weird platform: only the last -rpath option counts, the user must - dnl pass all path elements in one option. We can arrange that for a - dnl single library, but not when more than one $LIBNAMEs are used. - alldirs= - for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" - done - dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" - else - dnl The -rpath options are cumulative. - for found_dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$found_dir" - eval flag=\"$hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" - done - fi - fi - if test "X$ltrpathdirs" != "X"; then - dnl When using libtool, the option that works for both libraries and - dnl executables is -R. The -R options are cumulative. - for found_dir in $ltrpathdirs; do - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" - done - fi -]) - -dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, -dnl unless already present in VAR. -dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes -dnl contains two or three consecutive elements that belong together. -AC_DEFUN([AC_LIB_APPENDTOVAR], -[ - for element in [$2]; do - haveit= - for x in $[$1]; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X$element"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - [$1]="${[$1]}${[$1]:+ }$element" - fi - done -]) diff -Nru soundtracker-0.6.8/m4/lib-prefix.m4 soundtracker-1.0.2~pre2/m4/lib-prefix.m4 --- soundtracker-0.6.8/m4/lib-prefix.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/lib-prefix.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,153 +0,0 @@ -# lib-prefix.m4 serial 4 (gettext-0.14.2) -dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and -dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't -dnl require excessive bracketing. -ifdef([AC_HELP_STRING], -[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], -[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) - -dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed -dnl to access previously installed libraries. The basic assumption is that -dnl a user will want packages to use other packages he previously installed -dnl with the same --prefix option. -dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate -dnl libraries, but is otherwise very convenient. -AC_DEFUN([AC_LIB_PREFIX], -[ - AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - dnl By default, look in $includedir and $libdir. - use_additional=yes - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - AC_LIB_ARG_WITH([lib-prefix], -[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib - --without-lib-prefix don't search for libraries in includedir and libdir], -[ - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - else - additional_includedir="$withval/include" - additional_libdir="$withval/lib" - fi - fi -]) - if test $use_additional = yes; then - dnl Potentially add $additional_includedir to $CPPFLAGS. - dnl But don't add it - dnl 1. if it's the standard /usr/include, - dnl 2. if it's already present in $CPPFLAGS, - dnl 3. if it's /usr/local/include and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - for x in $CPPFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - dnl Really add $additional_includedir to $CPPFLAGS. - CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" - fi - fi - fi - fi - dnl Potentially add $additional_libdir to $LDFLAGS. - dnl But don't add it - dnl 1. if it's the standard /usr/lib, - dnl 2. if it's already present in $LDFLAGS, - dnl 3. if it's /usr/local/lib and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/lib"; then - haveit= - for x in $LDFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test "X$additional_libdir" = "X/usr/local/lib"; then - if test -n "$GCC"; then - case $host_os in - linux*) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LDFLAGS. - LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" - fi - fi - fi - fi - fi -]) - -dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, -dnl acl_final_exec_prefix, containing the values to which $prefix and -dnl $exec_prefix will expand at the end of the configure script. -AC_DEFUN([AC_LIB_PREPARE_PREFIX], -[ - dnl Unfortunately, prefix and exec_prefix get only finally determined - dnl at the end of configure. - if test "X$prefix" = "XNONE"; then - acl_final_prefix="$ac_default_prefix" - else - acl_final_prefix="$prefix" - fi - if test "X$exec_prefix" = "XNONE"; then - acl_final_exec_prefix='${prefix}' - else - acl_final_exec_prefix="$exec_prefix" - fi - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" - prefix="$acl_save_prefix" -]) - -dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the -dnl variables prefix and exec_prefix bound to the values they will have -dnl at the end of the configure script. -AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], -[ - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - $1 - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" -]) diff -Nru soundtracker-0.6.8/m4/longdouble.m4 soundtracker-1.0.2~pre2/m4/longdouble.m4 --- soundtracker-0.6.8/m4/longdouble.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/longdouble.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -# longdouble.m4 serial 1 (gettext-0.12) -dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. -dnl Test whether the compiler supports the 'long double' type. -dnl Prerequisite: AC_PROG_CC - -AC_DEFUN([gt_TYPE_LONGDOUBLE], -[ - AC_CACHE_CHECK([for long double], gt_cv_c_long_double, - [if test "$GCC" = yes; then - gt_cv_c_long_double=yes - else - AC_TRY_COMPILE([ - /* The Stardent Vistra knows sizeof(long double), but does not support it. */ - long double foo = 0.0; - /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ - int array [2*(sizeof(long double) >= sizeof(double)) - 1]; - ], , - gt_cv_c_long_double=yes, gt_cv_c_long_double=no) - fi]) - if test $gt_cv_c_long_double = yes; then - AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.]) - fi -]) diff -Nru soundtracker-0.6.8/m4/longlong.m4 soundtracker-1.0.2~pre2/m4/longlong.m4 --- soundtracker-0.6.8/m4/longlong.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/longlong.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -# longlong.m4 serial 5 -dnl Copyright (C) 1999-2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_LONG_LONG if 'long long' works. - -AC_DEFUN([gl_AC_TYPE_LONG_LONG], -[ - AC_CACHE_CHECK([for long long], ac_cv_type_long_long, - [AC_TRY_LINK([long long ll = 1LL; int i = 63;], - [long long llmax = (long long) -1; - return ll << i | ll >> i | llmax / ll | llmax % ll;], - ac_cv_type_long_long=yes, - ac_cv_type_long_long=no)]) - if test $ac_cv_type_long_long = yes; then - AC_DEFINE(HAVE_LONG_LONG, 1, - [Define if you have the 'long long' type.]) - fi -]) diff -Nru soundtracker-0.6.8/m4/nls.m4 soundtracker-1.0.2~pre2/m4/nls.m4 --- soundtracker-0.6.8/m4/nls.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/nls.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -# nls.m4 serial 2 (gettext-0.14.3) -dnl Copyright (C) 1995-2003, 2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1995-2000. -dnl Bruno Haible , 2000-2003. - -AC_PREREQ(2.50) - -AC_DEFUN([AM_NLS], -[ - AC_MSG_CHECKING([whether NLS is requested]) - dnl Default is enabled NLS - AC_ARG_ENABLE(nls, - [ --disable-nls do not use Native Language Support], - USE_NLS=$enableval, USE_NLS=yes) - AC_MSG_RESULT($USE_NLS) - AC_SUBST(USE_NLS) -]) - -AC_DEFUN([AM_MKINSTALLDIRS], -[ - dnl Tell automake >= 1.10 to complain if mkinstalldirs is missing. - m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([mkinstalldirs])]) - dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly - dnl find the mkinstalldirs script in another subdir but $(top_srcdir). - dnl Try to locate it. - MKINSTALLDIRS= - if test -n "$ac_aux_dir"; then - case "$ac_aux_dir" in - /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; - *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; - esac - fi - if test -z "$MKINSTALLDIRS"; then - MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" - fi - AC_SUBST(MKINSTALLDIRS) -]) diff -Nru soundtracker-0.6.8/m4/po.m4 soundtracker-1.0.2~pre2/m4/po.m4 --- soundtracker-0.6.8/m4/po.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/po.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,429 +0,0 @@ -# po.m4 serial 7 (gettext-0.14.3) -dnl Copyright (C) 1995-2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1995-2000. -dnl Bruno Haible , 2000-2003. - -AC_PREREQ(2.50) - -dnl Checks for all prerequisites of the po subdirectory. -AC_DEFUN([AM_PO_SUBDIRS], -[ - AC_REQUIRE([AC_PROG_MAKE_SET])dnl - AC_REQUIRE([AC_PROG_INSTALL])dnl - AC_REQUIRE([AM_MKINSTALLDIRS])dnl - AC_REQUIRE([AM_NLS])dnl - - dnl Perform the following tests also if --disable-nls has been given, - dnl because they are needed for "make dist" to work. - - dnl Search for GNU msgfmt in the PATH. - dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. - dnl The second test excludes FreeBSD msgfmt. - AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, - [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && - (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], - :) - AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) - - dnl Search for GNU xgettext 0.12 or newer in the PATH. - dnl The first test excludes Solaris xgettext and early GNU xgettext versions. - dnl The second test excludes FreeBSD xgettext. - AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, - [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && - (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], - :) - dnl Remove leftover from FreeBSD xgettext call. - rm -f messages.po - - dnl Search for GNU msgmerge 0.11 or newer in the PATH. - AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, - [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) - - dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. - dnl Test whether we really found GNU msgfmt. - if test "$GMSGFMT" != ":"; then - dnl If it is no GNU msgfmt we define it as : so that the - dnl Makefiles still can work. - if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && - (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then - : ; - else - GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` - AC_MSG_RESULT( - [found $GMSGFMT program is not GNU msgfmt; ignore it]) - GMSGFMT=":" - fi - fi - - dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. - dnl Test whether we really found GNU xgettext. - if test "$XGETTEXT" != ":"; then - dnl If it is no GNU xgettext we define it as : so that the - dnl Makefiles still can work. - if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && - (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then - : ; - else - AC_MSG_RESULT( - [found xgettext program is not GNU xgettext; ignore it]) - XGETTEXT=":" - fi - dnl Remove leftover from FreeBSD xgettext call. - rm -f messages.po - fi - - AC_OUTPUT_COMMANDS([ - for ac_file in $CONFIG_FILES; do - # Support "outfile[:infile[:infile...]]" - case "$ac_file" in - *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - esac - # PO directories have a Makefile.in generated from Makefile.in.in. - case "$ac_file" in */Makefile.in) - # Adjust a relative srcdir. - ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" - ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` - # In autoconf-2.13 it is called $ac_given_srcdir. - # In autoconf-2.50 it is called $srcdir. - test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" - case "$ac_given_srcdir" in - .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; - /*) top_srcdir="$ac_given_srcdir" ;; - *) top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - # Treat a directory as a PO directory if and only if it has a - # POTFILES.in file. This allows packages to have multiple PO - # directories under different names or in different locations. - if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then - rm -f "$ac_dir/POTFILES" - test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" - cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" - POMAKEFILEDEPS="POTFILES.in" - # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend - # on $ac_dir but don't depend on user-specified configuration - # parameters. - if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then - # The LINGUAS file contains the set of available languages. - if test -n "$OBSOLETE_ALL_LINGUAS"; then - test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" - fi - ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` - # Hide the ALL_LINGUAS assigment from automake. - eval 'ALL_LINGUAS''=$ALL_LINGUAS_' - POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" - else - # The set of available languages was given in configure.in. - eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' - fi - # Compute POFILES - # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) - # Compute UPDATEPOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) - # Compute DUMMYPOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) - # Compute GMOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) - case "$ac_given_srcdir" in - .) srcdirpre= ;; - *) srcdirpre='$(srcdir)/' ;; - esac - POFILES= - UPDATEPOFILES= - DUMMYPOFILES= - GMOFILES= - for lang in $ALL_LINGUAS; do - POFILES="$POFILES $srcdirpre$lang.po" - UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" - DUMMYPOFILES="$DUMMYPOFILES $lang.nop" - GMOFILES="$GMOFILES $srcdirpre$lang.gmo" - done - # CATALOGS depends on both $ac_dir and the user's LINGUAS - # environment variable. - INST_LINGUAS= - if test -n "$ALL_LINGUAS"; then - for presentlang in $ALL_LINGUAS; do - useit=no - if test "%UNSET%" != "$LINGUAS"; then - desiredlanguages="$LINGUAS" - else - desiredlanguages="$ALL_LINGUAS" - fi - for desiredlang in $desiredlanguages; do - # Use the presentlang catalog if desiredlang is - # a. equal to presentlang, or - # b. a variant of presentlang (because in this case, - # presentlang can be used as a fallback for messages - # which are not translated in the desiredlang catalog). - case "$desiredlang" in - "$presentlang"*) useit=yes;; - esac - done - if test $useit = yes; then - INST_LINGUAS="$INST_LINGUAS $presentlang" - fi - done - fi - CATALOGS= - if test -n "$INST_LINGUAS"; then - for lang in $INST_LINGUAS; do - CATALOGS="$CATALOGS $lang.gmo" - done - fi - test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" - sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" - for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do - if test -f "$f"; then - case "$f" in - *.orig | *.bak | *~) ;; - *) cat "$f" >> "$ac_dir/Makefile" ;; - esac - fi - done - fi - ;; - esac - done], - [# Capture the value of obsolete ALL_LINGUAS because we need it to compute - # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it - # from automake. - eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' - # Capture the value of LINGUAS because we need it to compute CATALOGS. - LINGUAS="${LINGUAS-%UNSET%}" - ]) -]) - -dnl Postprocesses a Makefile in a directory containing PO files. -AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], -[ - # When this code is run, in config.status, two variables have already been - # set: - # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, - # - LINGUAS is the value of the environment variable LINGUAS at configure - # time. - -changequote(,)dnl - # Adjust a relative srcdir. - ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" - ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` - # In autoconf-2.13 it is called $ac_given_srcdir. - # In autoconf-2.50 it is called $srcdir. - test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" - case "$ac_given_srcdir" in - .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; - /*) top_srcdir="$ac_given_srcdir" ;; - *) top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - # Find a way to echo strings without interpreting backslash. - if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then - gt_echo='echo' - else - if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then - gt_echo='printf %s\n' - else - echo_func () { - cat < "$ac_file.tmp" - if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then - # Add dependencies that cannot be formulated as a simple suffix rule. - for lang in $ALL_LINGUAS; do - frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` - cat >> "$ac_file.tmp" < /dev/null; then - # Add dependencies that cannot be formulated as a simple suffix rule. - for lang in $ALL_LINGUAS; do - frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` - cat >> "$ac_file.tmp" <> "$ac_file.tmp" < -#include -/* The string "%2$d %1$d", with dollar characters protected from the shell's - dollar expansion (possibly an autoconf bug). */ -static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; -static char buf[100]; -int main () -{ - sprintf (buf, format, 33, 55); - return (strcmp (buf, "55 33") != 0); -}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no, - [ - AC_EGREP_CPP(notposix, [ -#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ - notposix -#endif - ], gt_cv_func_printf_posix="guessing no", - gt_cv_func_printf_posix="guessing yes") - ]) - ]) - case $gt_cv_func_printf_posix in - *yes) - AC_DEFINE(HAVE_POSIX_PRINTF, 1, - [Define if your printf() function supports format strings with positions.]) - ;; - esac -]) diff -Nru soundtracker-0.6.8/m4/progtest.m4 soundtracker-1.0.2~pre2/m4/progtest.m4 --- soundtracker-0.6.8/m4/progtest.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/progtest.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -# progtest.m4 serial 4 (gettext-0.14.2) -dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1996. - -AC_PREREQ(2.50) - -# Search path for a program which passes the given test. - -dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, -dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) -AC_DEFUN([AM_PATH_PROG_WITH_TEST], -[ -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Find out how to test for executable files. Don't use a zero-byte file, -# as systems may use methods other than mode bits to determine executability. -cat >conf$$.file <<_ASEOF -#! /bin/sh -exit 0 -_ASEOF -chmod +x conf$$.file -if test -x conf$$.file >/dev/null 2>&1; then - ac_executable_p="test -x" -else - ac_executable_p="test -f" -fi -rm -f conf$$.file - -# Extract the first word of "$2", so it can be a program name with args. -set dummy $2; ac_word=[$]2 -AC_MSG_CHECKING([for $ac_word]) -AC_CACHE_VAL(ac_cv_path_$1, -[case "[$]$1" in - [[\\/]]* | ?:[[\\/]]*) - ac_cv_path_$1="[$]$1" # Let the user override the test with a path. - ;; - *) - ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in ifelse([$5], , $PATH, [$5]); do - IFS="$ac_save_IFS" - test -z "$ac_dir" && ac_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then - echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD - if [$3]; then - ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" - break 2 - fi - fi - done - done - IFS="$ac_save_IFS" -dnl If no 4th arg is given, leave the cache variable unset, -dnl so AC_PATH_PROGS will keep looking. -ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" -])dnl - ;; -esac])dnl -$1="$ac_cv_path_$1" -if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then - AC_MSG_RESULT([$]$1) -else - AC_MSG_RESULT(no) -fi -AC_SUBST($1)dnl -]) diff -Nru soundtracker-0.6.8/m4/signed.m4 soundtracker-1.0.2~pre2/m4/signed.m4 --- soundtracker-0.6.8/m4/signed.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/signed.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -# signed.m4 serial 1 (gettext-0.10.40) -dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_DEFUN([bh_C_SIGNED], -[ - AC_CACHE_CHECK([for signed], bh_cv_c_signed, - [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)]) - if test $bh_cv_c_signed = no; then - AC_DEFINE(signed, , - [Define to empty if the C compiler doesn't support this keyword.]) - fi -]) diff -Nru soundtracker-0.6.8/m4/size_max.m4 soundtracker-1.0.2~pre2/m4/size_max.m4 --- soundtracker-0.6.8/m4/size_max.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/size_max.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -# size_max.m4 serial 2 -dnl Copyright (C) 2003 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_DEFUN([gl_SIZE_MAX], -[ - AC_CHECK_HEADERS(stdint.h) - dnl First test whether the system already has SIZE_MAX. - AC_MSG_CHECKING([for SIZE_MAX]) - result= - AC_EGREP_CPP([Found it], [ -#include -#if HAVE_STDINT_H -#include -#endif -#ifdef SIZE_MAX -Found it -#endif -], result=yes) - if test -z "$result"; then - dnl Define it ourselves. Here we assume that the type 'size_t' is not wider - dnl than the type 'unsigned long'. - dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr', - dnl which is guaranteed to work from LONG_MIN to LONG_MAX. - _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi, - [#include ], result=?) - _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo, - [#include ], result=?) - _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint, - [#include ], result=?) - if test "$fits_in_uint" = 1; then - dnl Even though SIZE_MAX fits in an unsigned int, it must be of type - dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. - AC_TRY_COMPILE([#include - extern size_t foo; - extern unsigned long foo; - ], [], fits_in_uint=0) - fi - if test -z "$result"; then - if test "$fits_in_uint" = 1; then - result="$res_hi$res_lo"U - else - result="$res_hi$res_lo"UL - fi - else - dnl Shouldn't happen, but who knows... - result='~(size_t)0' - fi - fi - AC_MSG_RESULT([$result]) - if test "$result" != yes; then - AC_DEFINE_UNQUOTED([SIZE_MAX], [$result], - [Define as the maximum value of type 'size_t', if the system doesn't define it.]) - fi -]) diff -Nru soundtracker-0.6.8/m4/stdint_h.m4 soundtracker-1.0.2~pre2/m4/stdint_h.m4 --- soundtracker-0.6.8/m4/stdint_h.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/stdint_h.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -# stdint_h.m4 serial 5 -dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_STDINT_H_WITH_UINTMAX if exists, -# doesn't clash with , and declares uintmax_t. - -AC_DEFUN([gl_AC_HEADER_STDINT_H], -[ - AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h, - [AC_TRY_COMPILE( - [#include -#include ], - [uintmax_t i = (uintmax_t) -1;], - gl_cv_header_stdint_h=yes, - gl_cv_header_stdint_h=no)]) - if test $gl_cv_header_stdint_h = yes; then - AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, - [Define if exists, doesn't clash with , - and declares uintmax_t. ]) - fi -]) diff -Nru soundtracker-0.6.8/m4/uintmax_t.m4 soundtracker-1.0.2~pre2/m4/uintmax_t.m4 --- soundtracker-0.6.8/m4/uintmax_t.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/uintmax_t.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -# uintmax_t.m4 serial 9 -dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -AC_PREREQ(2.13) - -# Define uintmax_t to 'unsigned long' or 'unsigned long long' -# if it is not already defined in or . - -AC_DEFUN([gl_AC_TYPE_UINTMAX_T], -[ - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then - AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG]) - test $ac_cv_type_unsigned_long_long = yes \ - && ac_type='unsigned long long' \ - || ac_type='unsigned long' - AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, - [Define to unsigned long or unsigned long long - if and don't define.]) - else - AC_DEFINE(HAVE_UINTMAX_T, 1, - [Define if you have the 'uintmax_t' type in or .]) - fi -]) diff -Nru soundtracker-0.6.8/m4/ulonglong.m4 soundtracker-1.0.2~pre2/m4/ulonglong.m4 --- soundtracker-0.6.8/m4/ulonglong.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/ulonglong.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -# ulonglong.m4 serial 4 -dnl Copyright (C) 1999-2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works. - -AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG], -[ - AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, - [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;], - [unsigned long long ullmax = (unsigned long long) -1; - return ull << i | ull >> i | ullmax / ull | ullmax % ull;], - ac_cv_type_unsigned_long_long=yes, - ac_cv_type_unsigned_long_long=no)]) - if test $ac_cv_type_unsigned_long_long = yes; then - AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, - [Define if you have the 'unsigned long long' type.]) - fi -]) diff -Nru soundtracker-0.6.8/m4/wchar_t.m4 soundtracker-1.0.2~pre2/m4/wchar_t.m4 --- soundtracker-0.6.8/m4/wchar_t.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/wchar_t.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -# wchar_t.m4 serial 1 (gettext-0.12) -dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. -dnl Test whether has the 'wchar_t' type. -dnl Prerequisite: AC_PROG_CC - -AC_DEFUN([gt_TYPE_WCHAR_T], -[ - AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t, - [AC_TRY_COMPILE([#include - wchar_t foo = (wchar_t)'\0';], , - gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)]) - if test $gt_cv_c_wchar_t = yes; then - AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.]) - fi -]) diff -Nru soundtracker-0.6.8/m4/wint_t.m4 soundtracker-1.0.2~pre2/m4/wint_t.m4 --- soundtracker-0.6.8/m4/wint_t.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/wint_t.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -# wint_t.m4 serial 1 (gettext-0.12) -dnl Copyright (C) 2003 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. -dnl Test whether has the 'wint_t' type. -dnl Prerequisite: AC_PROG_CC - -AC_DEFUN([gt_TYPE_WINT_T], -[ - AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t, - [AC_TRY_COMPILE([#include - wint_t foo = (wchar_t)'\0';], , - gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)]) - if test $gt_cv_c_wint_t = yes; then - AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.]) - fi -]) diff -Nru soundtracker-0.6.8/m4/xsize.m4 soundtracker-1.0.2~pre2/m4/xsize.m4 --- soundtracker-0.6.8/m4/xsize.m4 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/m4/xsize.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -# xsize.m4 serial 3 -dnl Copyright (C) 2003-2004 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_XSIZE], -[ - dnl Prerequisites of lib/xsize.h. - AC_REQUIRE([gl_SIZE_MAX]) - AC_REQUIRE([AC_C_INLINE]) - AC_CHECK_HEADERS(stdint.h) -]) diff -Nru soundtracker-0.6.8/Makefile.am soundtracker-1.0.2~pre2/Makefile.am --- soundtracker-0.6.8/Makefile.am 2006-02-25 13:40:49.000000000 +0000 +++ soundtracker-1.0.2~pre2/Makefile.am 2020-08-26 19:34:01.000000000 +0000 @@ -2,45 +2,30 @@ SUBDIRS = po doc app -EXTRA_DIST = config.rpath m4/ChangeLog TODO FAQ ABOUT-NLS soundtracker.spec \ +EXTRA_DIST = config.rpath TODO FAQ ABOUT-NLS soundtracker.spec \ soundtracker.desktop \ - soundtracker_splash.png flat.xpm sharp.xpm muted.png \ - downarrow.xpm rightarrow.xpm play.xpm play_cur.xpm stop.xpm lock.xpm \ - ChangeLog-v0.5 ChangeLog-v0.3 ChangeLog-v0.1 - -if USE_GNOME - -util_DATA = soundtracker.desktop -utildir = $(datadir)/gnome/apps/Multimedia - -endif - -st_DATA = soundtracker_splash.png flat.xpm sharp.xpm muted.png downarrow.xpm \ - rightarrow.xpm play.xpm play_cur.xpm stop.xpm lock.xpm + soundtracker_splash.png muted.png unmuted.png \ + icons/*.xpm icons/*.png \ + ChangeLog-v0.6 ChangeLog-v0.5 ChangeLog-v0.3 ChangeLog-v0.1 \ + soundtracker.xml envelope-box.xml sample-editor.xml cheat-sheet.*.txt \ + soundtracker-icon.png soundtracker.1 soundtracker.desktop \ + soundtracker.appdata.xml + +man_MANS = soundtracker.1 +dist_bin_SCRIPTS = soundtracker_convert_config + +app_DATA = soundtracker.desktop +appdir = $(datadir)/applications +appdata_DATA = soundtracker.appdata.xml +appdatadir = $(datadir)/appdata +icon_DATA = soundtracker-icon.png +icondir = $(datadir)/pixmaps + +st_DATA = soundtracker_splash.png muted.png unmuted.png \ + icons/*.xpm icons/*.png \ + soundtracker.xml cheat-sheet.*.txt envelope-box.xml sample-editor.xml \ + soundtracker-icon.png stdir = $(pkgdatadir) -bindist: - ./configure --disable-gnome --disable-nls --disable-alsa --disable-esd --disable-splash --disable-sndfile - make - rm -rf soundtracker-$(VERSION)-bin - mkdir soundtracker-$(VERSION)-bin - cp -a README FAQ NEWS AUTHORS INSTALL \ - soundtracker-$(VERSION)-bin - strip app/soundtracker -o soundtracker-$(VERSION)-bin/soundtracker - tar zcf soundtracker-$(VERSION)-bin.tar.gz \ - soundtracker-$(VERSION)-bin - ./configure - -## disthelp is to be executed by root so that the rpm -tb works well -disthelp: - make dist - cp soundtracker-$(VERSION).tar.gz /home/rawstyle/dev/soundtracker-WWW/dl/v0.6/ -# make bindist -# cp soundtracker-$(VERSION)-bin.tar.gz /home/rawstyle/dev/soundtracker-WWW/dl/v0.6/ - /home/rawstyle/dev/soundtracker/bin/rpm -tb soundtracker-$(VERSION).tar.gz - cp /usr/src/packages/RPMS/i386/soundtracker-$(VERSION)-* /home/rawstyle/dev/soundtracker-WWW/dl/v0.6/ - chown -R rawstyle.users /home/rawstyle/dev/soundtracker/* - chown -R rawstyle.users /home/rawstyle/dev/soundtracker-WWW/* - ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST += m4 diff -Nru soundtracker-0.6.8/Makefile.in soundtracker-1.0.2~pre2/Makefile.in --- soundtracker-0.6.8/Makefile.in 2006-02-25 13:40:51.000000000 +0000 +++ soundtracker-1.0.2~pre2/Makefile.in 2021-02-26 19:46:40.000000000 +0000 @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.7.9 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 -# Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,16 +14,68 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = . - +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -35,21 +87,174 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : +build_triplet = @build@ host_triplet = @host@ +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(dist_bin_SCRIPTS) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ + "$(DESTDIR)$(appdir)" "$(DESTDIR)$(appdatadir)" \ + "$(DESTDIR)$(icondir)" "$(DESTDIR)$(stdir)" +SCRIPTS = $(dist_bin_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man_MANS) +DATA = $(app_DATA) $(appdata_DATA) $(icon_DATA) $(st_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS README TODO \ + compile config.guess config.rpath config.sub depcomp \ + install-sh missing +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +ARFLAGS = @ARFLAGS@ AUDIOFILE_CFLAGS = @AUDIOFILE_CFLAGS@ -AUDIOFILE_CONFIG = @AUDIOFILE_CONFIG@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +CANVAS_CFLAGS = @CANVAS_CFLAGS@ +CANVAS_LIBS = @CANVAS_LIBS@ CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ @@ -57,45 +262,26 @@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DRIVER_ALSA_050_FALSE = @DRIVER_ALSA_050_FALSE@ -DRIVER_ALSA_050_TRUE = @DRIVER_ALSA_050_TRUE@ -DRIVER_ALSA_09x_FALSE = @DRIVER_ALSA_09x_FALSE@ -DRIVER_ALSA_09x_TRUE = @DRIVER_ALSA_09x_TRUE@ -DRIVER_ALSA_FALSE = @DRIVER_ALSA_FALSE@ -DRIVER_ALSA_TRUE = @DRIVER_ALSA_TRUE@ -DRIVER_ESD_FALSE = @DRIVER_ESD_FALSE@ -DRIVER_ESD_TRUE = @DRIVER_ESD_TRUE@ -DRIVER_IRIX_FALSE = @DRIVER_IRIX_FALSE@ -DRIVER_IRIX_TRUE = @DRIVER_IRIX_TRUE@ -DRIVER_JACK_FALSE = @DRIVER_JACK_FALSE@ -DRIVER_JACK_TRUE = @DRIVER_JACK_TRUE@ -DRIVER_OSS_FALSE = @DRIVER_OSS_FALSE@ -DRIVER_OSS_TRUE = @DRIVER_OSS_TRUE@ -DRIVER_SDL_FALSE = @DRIVER_SDL_FALSE@ -DRIVER_SDL_TRUE = @DRIVER_SDL_TRUE@ -DRIVER_SUN_FALSE = @DRIVER_SUN_FALSE@ -DRIVER_SUN_TRUE = @DRIVER_SUN_TRUE@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ESD_CFLAGS = @ESD_CFLAGS@ -ESD_CONFIG = @ESD_CONFIG@ -ESD_LIBS = @ESD_LIBS@ EXEEXT = @EXEEXT@ -GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ -GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@ -GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ -GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ @@ -105,205 +291,350 @@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ -MKINSTALLDIRS = @MKINSTALLDIRS@ +MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ -NO_ASM_FALSE = @NO_ASM_FALSE@ -NO_ASM_TRUE = @NO_ASM_TRUE@ -NO_GDK_PIXBUF_FALSE = @NO_GDK_PIXBUF_FALSE@ -NO_GDK_PIXBUF_TRUE = @NO_GDK_PIXBUF_TRUE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ +PULSE_CFLAGS = @PULSE_CFLAGS@ +PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ -ST_S_JACK_INCLUDES = @ST_S_JACK_INCLUDES@ -ST_S_JACK_LIBS = @ST_S_JACK_LIBS@ -USE_GNOME_FALSE = @USE_GNOME_FALSE@ -USE_GNOME_TRUE = @USE_GNOME_TRUE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ -gnomepath = @gnomepath@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ +mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ +sedpath = @sedpath@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ -target = @target@ target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ - +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ SUBDIRS = po doc app - -EXTRA_DIST = config.rpath m4/ChangeLog TODO FAQ ABOUT-NLS soundtracker.spec \ - soundtracker.desktop \ - soundtracker_splash.png flat.xpm sharp.xpm muted.png \ - downarrow.xpm rightarrow.xpm play.xpm play_cur.xpm stop.xpm lock.xpm \ - ChangeLog-v0.5 ChangeLog-v0.3 ChangeLog-v0.1\ -m4 - -@USE_GNOME_TRUE@util_DATA = soundtracker.desktop -@USE_GNOME_TRUE@utildir = $(datadir)/gnome/apps/Multimedia - -st_DATA = soundtracker_splash.png flat.xpm sharp.xpm muted.png downarrow.xpm \ - rightarrow.xpm play.xpm play_cur.xpm stop.xpm lock.xpm +EXTRA_DIST = config.rpath TODO FAQ ABOUT-NLS soundtracker.spec \ + soundtracker.desktop soundtracker_splash.png muted.png \ + unmuted.png icons/*.xpm icons/*.png ChangeLog-v0.6 \ + ChangeLog-v0.5 ChangeLog-v0.3 ChangeLog-v0.1 soundtracker.xml \ + envelope-box.xml sample-editor.xml cheat-sheet.*.txt \ + soundtracker-icon.png soundtracker.1 soundtracker.desktop \ + soundtracker.appdata.xml m4 +man_MANS = soundtracker.1 +dist_bin_SCRIPTS = soundtracker_convert_config +app_DATA = soundtracker.desktop +appdir = $(datadir)/applications +appdata_DATA = soundtracker.appdata.xml +appdatadir = $(datadir)/appdata +icon_DATA = soundtracker-icon.png +icondir = $(datadir)/pixmaps +st_DATA = soundtracker_splash.png muted.png unmuted.png \ + icons/*.xpm icons/*.png \ + soundtracker.xml cheat-sheet.*.txt envelope-box.xml sample-editor.xml \ + soundtracker-icon.png stdir = $(pkgdatadir) - ACLOCAL_AMFLAGS = -I m4 -subdir = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = -DIST_SOURCES = -DATA = $(st_DATA) $(util_DATA) - - -RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ - ps-recursive install-info-recursive uninstall-info-recursive \ - all-recursive install-data-recursive install-exec-recursive \ - installdirs-recursive install-recursive uninstall-recursive \ - check-recursive installcheck-recursive -DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/configure \ - ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL Makefile.am NEWS \ - TODO aclocal.m4 config.guess config.h.in config.rpath \ - config.sub configure configure.in depcomp install-sh missing \ - mkinstalldirs -DIST_SUBDIRS = $(SUBDIRS) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno -$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) - -$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck -$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) - cd $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): configure.in m4/codeset.m4 m4/gettext.m4 m4/glibc2.m4 m4/glibc21.m4 m4/iconv.m4 m4/intdiv0.m4 m4/intmax.m4 m4/inttypes-pri.m4 m4/inttypes.m4 m4/inttypes_h.m4 m4/isc-posix.m4 m4/lcmessage.m4 m4/lib-ld.m4 m4/lib-link.m4 m4/lib-prefix.m4 m4/longdouble.m4 m4/longlong.m4 m4/nls.m4 m4/po.m4 m4/printf-posix.m4 m4/progtest.m4 m4/signed.m4 m4/size_max.m4 m4/stdint_h.m4 m4/uintmax_t.m4 m4/ulonglong.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/xsize.m4 - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) stamp-h1; \ - else :; fi + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h - -$(srcdir)/config.h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOHEADER) - touch $(srcdir)/config.h.in +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ distclean-hdr: -rm -f config.h stamp-h1 -uninstall-info-am: -stDATA_INSTALL = $(INSTALL_DATA) -install-stDATA: $(st_DATA) +install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-dist_binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +install-appDATA: $(app_DATA) @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(stdir) - @list='$(st_DATA)'; for p in $$list; do \ + @list='$(app_DATA)'; test -n "$(appdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(appdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(appdir)" || exit 1; \ + fi; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f="`echo $$p | sed -e 's|^.*/||'`"; \ - echo " $(stDATA_INSTALL) $$d$$p $(DESTDIR)$(stdir)/$$f"; \ - $(stDATA_INSTALL) $$d$$p $(DESTDIR)$(stdir)/$$f; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(appdir)" || exit $$?; \ done -uninstall-stDATA: +uninstall-appDATA: @$(NORMAL_UNINSTALL) - @list='$(st_DATA)'; for p in $$list; do \ - f="`echo $$p | sed -e 's|^.*/||'`"; \ - echo " rm -f $(DESTDIR)$(stdir)/$$f"; \ - rm -f $(DESTDIR)$(stdir)/$$f; \ + @list='$(app_DATA)'; test -n "$(appdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(appdir)'; $(am__uninstall_files_from_dir) +install-appdataDATA: $(appdata_DATA) + @$(NORMAL_INSTALL) + @list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(appdatadir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(appdatadir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(appdatadir)" || exit $$?; \ done -utilDATA_INSTALL = $(INSTALL_DATA) -install-utilDATA: $(util_DATA) + +uninstall-appdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(appdatadir)'; $(am__uninstall_files_from_dir) +install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(utildir) - @list='$(util_DATA)'; for p in $$list; do \ + @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ + fi; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f="`echo $$p | sed -e 's|^.*/||'`"; \ - echo " $(utilDATA_INSTALL) $$d$$p $(DESTDIR)$(utildir)/$$f"; \ - $(utilDATA_INSTALL) $$d$$p $(DESTDIR)$(utildir)/$$f; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done -uninstall-utilDATA: +uninstall-iconDATA: @$(NORMAL_UNINSTALL) - @list='$(util_DATA)'; for p in $$list; do \ - f="`echo $$p | sed -e 's|^.*/||'`"; \ - echo " rm -f $(DESTDIR)$(utildir)/$$f"; \ - rm -f $(DESTDIR)$(utildir)/$$f; \ + @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) +install-stDATA: $(st_DATA) + @$(NORMAL_INSTALL) + @list='$(st_DATA)'; test -n "$(stdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(stdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(stdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(stdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(stdir)" || exit $$?; \ done +uninstall-stDATA: + @$(NORMAL_UNINSTALL) + @list='$(st_DATA)'; test -n "$(stdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(stdir)'; $(am__uninstall_files_from_dir) + # This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @set fnord $$MAKEFLAGS; amf=$$2; \ +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ @@ -311,196 +642,221 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @set fnord $$MAKEFLAGS; amf=$$2; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ETAGS = etags -ETAGSFLAGS = - -CTAGS = ctags -CTAGSFLAGS = - -tags: TAGS +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique - -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ here=`pwd`; \ - if (etags --etags-include --version) >/dev/null 2>&1; then \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ + empty_fix=.; \ else \ include_option=--include; \ + empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ - test -f $$subdir/TAGS && \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$tags$$unique" \ - || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique - -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - -top_distdir = . -distdir = $(PACKAGE)-$(VERSION) - -am__remove_distdir = \ - { test ! -d $(distdir) \ - || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr $(distdir); }; } - -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) - mkdir $(distdir) - $(mkinstalldirs) $(distdir)/m4 $(distdir)/po - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkinstalldirs) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ - test -d $(distdir)/$$subdir \ - || mkdir $(distdir)/$$subdir \ - || exit 1; \ - (cd $$subdir && \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" \ - distdir=../$(distdir)/$$subdir \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" dist-gzip: distdir - $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) -dist dist-all: distdir - $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist - $(am__remove_distdir) - GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && cd $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ @@ -511,22 +867,33 @@ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ - (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ - && rm -f $(distdir).tar.gz \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck - $(am__remove_distdir) - @echo "$(distdir).tar.gz is ready for distribution" | \ - sed 'h;s/./=/g;p;x;p;x' + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: - @cd $(distuninstallcheck_dir) \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ @@ -544,11 +911,12 @@ exit 1; } >&2 check-am: all-am check: check-recursive -all-am: Makefile $(DATA) config.h +all-am: Makefile $(SCRIPTS) $(MANS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: - $(mkinstalldirs) $(DESTDIR)$(stdir) $(DESTDIR)$(utildir) - + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(appdir)" "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(icondir)" "$(DESTDIR)$(stdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive @@ -559,16 +927,22 @@ installcheck: installcheck-recursive install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi mostlyclean-generic: clean-generic: distclean-generic: - -rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -586,17 +960,40 @@ dvi-am: +html: html-recursive + +html-am: + info: info-recursive info-am: -install-data-am: install-stDATA install-utilDATA +install-data-am: install-appDATA install-appdataDATA install-iconDATA \ + install-man install-stDATA + +install-dvi: install-dvi-recursive -install-exec-am: +install-dvi-am: + +install-exec-am: install-dist_binSCRIPTS + +install-html: install-html-recursive + +install-html-am: install-info: install-info-recursive -install-man: +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: installcheck-am: @@ -618,50 +1015,37 @@ ps-am: -uninstall-am: uninstall-info-am uninstall-stDATA uninstall-utilDATA +uninstall-am: uninstall-appDATA uninstall-appdataDATA \ + uninstall-dist_binSCRIPTS uninstall-iconDATA uninstall-man \ + uninstall-stDATA + +uninstall-man: uninstall-man1 + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ + dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-hdr \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-appDATA install-appdataDATA install-data \ + install-data-am install-dist_binSCRIPTS install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-iconDATA install-info install-info-am \ + install-man install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-stDATA install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-appDATA uninstall-appdataDATA \ + uninstall-dist_binSCRIPTS uninstall-iconDATA uninstall-man \ + uninstall-man1 uninstall-stDATA + +.PRECIOUS: Makefile -uninstall-info: uninstall-info-recursive -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ - clean-generic clean-recursive ctags ctags-recursive dist \ - dist-all dist-gzip distcheck distclean distclean-generic \ - distclean-hdr distclean-recursive distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am dvi-recursive info \ - info-am info-recursive install install-am install-data \ - install-data-am install-data-recursive install-exec \ - install-exec-am install-exec-recursive install-info \ - install-info-am install-info-recursive install-man \ - install-recursive install-stDATA install-strip install-utilDATA \ - installcheck installcheck-am installdirs installdirs-am \ - installdirs-recursive maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-generic \ - mostlyclean-recursive pdf pdf-am pdf-recursive ps ps-am \ - ps-recursive tags tags-recursive uninstall uninstall-am \ - uninstall-info-am uninstall-info-recursive uninstall-recursive \ - uninstall-stDATA uninstall-utilDATA - - -bindist: - ./configure --disable-gnome --disable-nls --disable-alsa --disable-esd --disable-splash --disable-sndfile - make - rm -rf soundtracker-$(VERSION)-bin - mkdir soundtracker-$(VERSION)-bin - cp -a README FAQ NEWS AUTHORS INSTALL \ - soundtracker-$(VERSION)-bin - strip app/soundtracker -o soundtracker-$(VERSION)-bin/soundtracker - tar zcf soundtracker-$(VERSION)-bin.tar.gz \ - soundtracker-$(VERSION)-bin - ./configure - -disthelp: - make dist - cp soundtracker-$(VERSION).tar.gz /home/rawstyle/dev/soundtracker-WWW/dl/v0.6/ -# make bindist -# cp soundtracker-$(VERSION)-bin.tar.gz /home/rawstyle/dev/soundtracker-WWW/dl/v0.6/ - /home/rawstyle/dev/soundtracker/bin/rpm -tb soundtracker-$(VERSION).tar.gz - cp /usr/src/packages/RPMS/i386/soundtracker-$(VERSION)-* /home/rawstyle/dev/soundtracker-WWW/dl/v0.6/ - chown -R rawstyle.users /home/rawstyle/dev/soundtracker/* - chown -R rawstyle.users /home/rawstyle/dev/soundtracker-WWW/* # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru soundtracker-0.6.8/missing soundtracker-1.0.2~pre2/missing --- soundtracker-0.6.8/missing 2005-02-13 13:31:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/missing 2019-03-13 08:52:38.000000000 +0000 @@ -1,7 +1,10 @@ #! /bin/sh -# Common stub for a few missing GNU programs while installing. -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,9 +17,7 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -24,313 +25,191 @@ # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" + echo 1>&2 "Try '$0 --help' for more information" exit 1 fi -run=: - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi +case $1 in -case "$1" in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - ;; -esac + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case "$1" in + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing 0.4 - GNU automake" + echo "missing $scriptversion (GNU Automake)" + exit $? ;; -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; - aclocal*) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - fi - - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - fi - - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - fi - - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case "$f" in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - fi - - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - fi - - echo 1>&2 "\ -WARNING: \`$1' is needed, and you do not seem to have it handy on your - system. You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` - test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison|yacc) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if [ ! -f y.tab.h ]; then - echo >y.tab.h - fi - if [ ! -f y.tab.c ]; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex|flex) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if [ ! -f lex.yy.c ]; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - fi - - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` - fi - if [ -f "$file" ]; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit 1 - fi - ;; +esac - makeinfo) - if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then - # We have makeinfo, but it failed. - exit 1 - fi - - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` - fi - touch $file - ;; +# Run the given program, remember its exit status. +"$@"; st=$? - tar) - shift - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - fi - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case "$firstarg" in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case "$firstarg" in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; +# If it succeeded, we are done. +test $st -eq 0 && exit 0 - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and you do not seem to have it handy on your - system. You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi -exit 0 +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff -Nru soundtracker-0.6.8/mkinstalldirs soundtracker-1.0.2~pre2/mkinstalldirs --- soundtracker-0.6.8/mkinstalldirs 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/mkinstalldirs 1970-01-01 00:00:00.000000000 +0000 @@ -1,150 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy - -scriptversion=2004-02-15.20 - -# Original author: Noah Friedman -# Created: 1993-05-16 -# Public domain. -# -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -errstatus=0 -dirmode="" - -usage="\ -Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... - -Create each directory DIR (with mode MODE, if specified), including all -leading file name components. - -Report bugs to ." - -# process command line arguments -while test $# -gt 0 ; do - case $1 in - -h | --help | --h*) # -h for help - echo "$usage" - exit 0 - ;; - -m) # -m PERM arg - shift - test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } - dirmode=$1 - shift - ;; - --version) - echo "$0 $scriptversion" - exit 0 - ;; - --) # stop option processing - shift - break - ;; - -*) # unknown option - echo "$usage" 1>&2 - exit 1 - ;; - *) # first non-opt arg - break - ;; - esac -done - -for file -do - if test -d "$file"; then - shift - else - break - fi -done - -case $# in - 0) exit 0 ;; -esac - -# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and -# mkdir -p a/c at the same time, both will detect that a is missing, -# one will create a, then the other will try to create a and die with -# a "File exists" error. This is a problem when calling mkinstalldirs -# from a parallel make. We use --version in the probe to restrict -# ourselves to GNU mkdir, which is thread-safe. -case $dirmode in - '') - if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - echo "mkdir -p -- $*" - exec mkdir -p -- "$@" - else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - test -d ./-p && rmdir ./-p - test -d ./--version && rmdir ./--version - fi - ;; - *) - if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && - test ! -d ./--version; then - echo "mkdir -m $dirmode -p -- $*" - exec mkdir -m "$dirmode" -p -- "$@" - else - # Clean up after NextStep and OpenStep mkdir. - for d in ./-m ./-p ./--version "./$dirmode"; - do - test -d $d && rmdir $d - done - fi - ;; -esac - -for file -do - set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` - shift - - pathcomp= - for d - do - pathcomp="$pathcomp$d" - case $pathcomp in - -*) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - else - if test ! -z "$dirmode"; then - echo "chmod $dirmode $pathcomp" - lasterr="" - chmod "$dirmode" "$pathcomp" || lasterr=$? - - if test ! -z "$lasterr"; then - errstatus=$lasterr - fi - fi - fi - fi - - pathcomp="$pathcomp/" - done -done - -exit $errstatus - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff -Nru soundtracker-0.6.8/NEWS soundtracker-1.0.2~pre2/NEWS --- soundtracker-0.6.8/NEWS 2006-02-25 13:52:04.000000000 +0000 +++ soundtracker-1.0.2~pre2/NEWS 2021-02-26 19:45:12.000000000 +0000 @@ -4,6 +4,129 @@ responsible for having coded a particular feature (full names in AUTHORS file). +------------------------------------------------------------------------------ + +What is new in soundtracker-1.0.2-pre2 (26-Feb-2021): + +* Clavier look is improved (selectable font, better keys' shape) (yaliaev) + +* Some keybindings are added to the Sample editor (yaliaev) + +* When moving an envelope point, pressing CTRL restricts movement to either + vertical or horizontal direction (yaliaev) + +* Polyphonic try mode is improved: user can switch on/off same note + retrigging on different channels (yaliaev) + +* Rendering of the song / pattern / track /block into a sample is implemented + (yaliaev) + +* Volume / FX interpolation is improved: added the facility to interpolate + matching effects only (yaliaev) + +* Whole sample (data + parameters) copying / pasting is implemented (yaliaev) + +* Volumes of all samples can be adjusted (multiplied) by a given value at + once (yaliaev) + +* Added an option to paste a block without cursor movement (yaliaev) + +* PulseAudio output driver (yaliaev) + +* Compatibility with FastTracker II is improved (yaliaev) + +* Some fixes and small improvements (yaliaev) + +------------------------------------------------------------------------------ + +What is new in soundtracker-1.0.2-pre1 (12-Oct-2020): + +* New sample editor design (yaliaev) +* User operations logging with support of undo / redo facilities (yaliaev) +* Some fixes and small improvements (tugruettmueller, yaliaev) + +------------------------------------------------------------------------------ + +What is new in soundtracker-1.0.1 (29-Jul-2020): + +* This is the bugfixing release. Many bugs are fixed after thorough testing + (yaliaev) + +------------------------------------------------------------------------------ + +What is new in soundtracker-1.0.1-pre1 (21-Feb-2020): + +* Improved mouse usage in the instrument editor (yaliaev) +* Indication of pressed keys in the instrument editor (yaliaev) +* Better look of the scopes (yaliaev) +* Record indicator in the sampling monitor (yaliaev) +* More configurable colors (yaliaev) +* Logarithmic scale of the amplification slider; numeric entry in addition to + the slider; ability to determine the optimal amplification (yaliaev) +* Extended editor on the module info page with functions of exchanging and + copying samples and instruments, mixing samples and tuning a sample using + another one as a reference (yaliaev) +* Different selection modes in tracker, selection can be extended with SHIFT + (yaliaev) +* A new method of waveforms' drawing in the sample displays in addition to + the existing one (yaliaev) +* Automatic file extension adding (optional) (yaliaev) +* More convenient keybindings; new keybindings are added (see README) + (yaliaev) +* Some more keys are made configurable including that for song / pattern + playback (yaliaev) +* New playing modes are added: Playing selected block and Playng from cursor, + playback looping control (yaliaev) +* Facility for loading somewhat broken modules (yaliaev) +* Stepping volume / FX parameter with mouse wheel (yaliaev) +* Improved export to audio file (yaliaev) +* Volume column can be displayed like in FT2, with letters, mnemonics and + optional decimal volume representation (yaliaev) +* Jack input driver (yaliaev) +* Improved live recording using PC keyboard: better key pressing / releasing + times are recorded using FXes (yaliaev) +* Some other small improvements (GUI, usability) (yaliaev) +* Some bugfixes including the CPU overhead with graphics (yaliaev) + +------------------------------------------------------------------------------ + +What is new in soundtracker-1.0.0.1 (10-Jan-2020): + +* This is the bugfixing release. Fixed possible crashes when using Jack sound + output (yaliaev) + +------------------------------------------------------------------------------ + +What is new in soundtracker-1.0.0 (13-Dec-2019): + +* Dropped dependency on deprecated GtkHTML. Cheat sheet uses the plain text + again (but with possible localization) (yaliaev) +* Improved compatibility with FastTracker 2 FXes (yaliaev) +* Numerous bugfixes (yaliaev) + +------------------------------------------------------------------------------ + +What is new in soundtracker-1.0.0-pre1 (06-Jul-2019): + +* Interface ported to Gtk+-2 (stephanek / mshatlev / yaliaev) +* Numerous fixes and improvements (mshatlev / binnocenti / yaliaev) +* Alsa 1.x playback and samling drivers, contemporary Jack driver (yaliaev) +* Configurable tracker colors (yaliaev) +* Polyphonic trying mode (yaliaev) +* Sampling drivers now works in a separate thread to be more robust (yaliaev) +* Updated for latest autoconf, automake and gettext +* Updated ru translation (yalaev) +* Note that some keybindings have changed: + - default keybindings for the fast access of channels 16--31 now uses Alt + Shift modifiers instead of Ctrl + + Shift + - muting and unmuting channels is performed by pressing Ctrl + M when the cursor is at the selected channel + - transposition is performed by pressing Alt + = (halftone up), Alt + - (halftone down), Alt + + (octave + up), Alt + _ (octave down) instead of Alt + q / Alt + a / Alt + Shift + q / Alt + Shift + a + +------------------------------------------------------------------------------ +older GTK+-1 based versions: +------------------------------------------------------------------------------ + What is new in soundtracker-0.6.8 (25-Feb-2006): * Permanent channels support: any samples which might have been diff -Nru soundtracker-0.6.8/play_cur.xpm soundtracker-1.0.2~pre2/play_cur.xpm --- soundtracker-0.6.8/play_cur.xpm 2003-08-04 08:59:49.000000000 +0000 +++ soundtracker-1.0.2~pre2/play_cur.xpm 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -/* XPM */ -static char * play_pat_xpm[] = { -"16 16 39 1", -" c None", -". c #171717", -"+ c #191919", -"@ c #181818", -"# c #FFFF9B", -"$ c #FFFFFB", -"% c #FFFFE0", -"& c #FFFF86", -"* c #EEEE7D", -"= c #EBEB6D", -"- c #FFFF73", -"; c #FFFFFF", -"> c #E9E967", -", c #E2E263", -"' c #CFCF5B", -") c #DEDE61", -"! c #D3D35D", -"~ c #BCBC53", -"{ c #DADA60", -"] c #FAFA71", -"^ c #D2D25D", -"/ c #151515", -"( c #F1F16C", -"_ c #D6D65E", -": c #EAEA67", -"< c #E5E565", -"[ c #BFBF54", -"} c #F3F36C", -"| c #CCCC5A", -"1 c #F4F46D", -"2 c #E7E766", -"3 c #CECE5B", -"4 c #E3E363", -"5 c #DEDE63", -"6 c #D5D55E", -"7 c #FBFB71", -"8 c #DBDB61", -"9 c #D6D65F", -"0 c #161616", -"...++++++++++@..", -"..#$%&&&&**&&=+.", -" .-;;>>,')),!~. ", -" .+-,{{]^,-,~/. ", -" .-())]_:<,~/ ", -" ..-,,,!:<[~/ ", -" .}|,12,,~/ ", -" ..~324,~~. ", -" .~~125~/ ", -" ./~67~/. ", -" .~88~. ", -" ./9{/. ", -" 0~~. ", -" .~~. ", -" .. ", -" .. "}; diff -Nru soundtracker-0.6.8/play.xpm soundtracker-1.0.2~pre2/play.xpm --- soundtracker-0.6.8/play.xpm 2003-08-04 08:59:49.000000000 +0000 +++ soundtracker-1.0.2~pre2/play.xpm 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -/* XPM */ -static char * play_xpm[] = { -"16 16 35 1", -" c None", -". c #000000", -"+ c #010101", -"@ c #78FC69", -"# c #7EFA6D", -"$ c #202020", -"% c #171717", -"& c #040404", -"* c #90FF7F", -"= c #90FE7F", -"- c #7DF56F", -"; c #6EE761", -"> c #090909", -", c #050505", -"' c #080808", -") c #88FA7A", -"! c #FEFFFE", -"~ c #D2FFBE", -"{ c #5EC653", -"] c #8DFB78", -"^ c #D6FFB9", -"/ c #5DC852", -"( c #51AA47", -"_ c #5BC050", -": c #51AE47", -"< c #45903C", -"[ c #448E3B", -"} c #0D0D0D", -"| c #5DC352", -"1 c #49953F", -"2 c #397631", -"3 c #3F8436", -"4 c #5CC352", -"5 c #3A7A32", -"6 c #3D7F36", -".. ", -"...+ ", -".@#+$% ", -"&*=-;>,+ ", -"')!~{{{... ", -".]^/((_{{... ", -".{((((((_{{++. ", -"+{((((((((:{_...", -".{(((((((<[[[.+}", -".{((((([[[[+.. ", -".{((([[[[+.. ", -".|(123[... ", -".4522... ", -".46..+ ", -".... ", -".. "}; diff -Nru soundtracker-0.6.8/po/ChangeLog soundtracker-1.0.2~pre2/po/ChangeLog --- soundtracker-0.6.8/po/ChangeLog 2006-01-15 15:39:26.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/ChangeLog 2018-10-22 16:08:35.000000000 +0000 @@ -1,3 +1,13 @@ +2018-09-23 gettextize + + * Makefile.in.in: Upgrade to gettext-0.19.7. + * Rules-quot: Upgrade to gettext-0.19.7. + +2013-10-13 gettextize + + * Makefile.in.in: Upgrade to gettext-0.18.2. + * Rules-quot: Upgrade to gettext-0.18.2. + 2006-01-15 gettextize * Makefile.in.in: Upgrade to gettext-0.14.4. Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/da.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/da.gmo differ diff -Nru soundtracker-0.6.8/po/da.po soundtracker-1.0.2~pre2/po/da.po --- soundtracker-0.6.8/po/da.po 2006-02-25 13:25:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/da.po 2020-05-27 18:54:26.000000000 +0000 @@ -6,15 +6,23 @@ msgstr "" "Project-Id-Version: soundtracker 0.6.5\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2002-11-09 22:44+0100\n" "Last-Translator: Keld Simonsen \n" "Language-Team: Danish \n" +"Language: da\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "Afspilningsenhed" @@ -22,2127 +30,3666 @@ msgid "Editing Output" msgstr "Redigerer afspilning" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Sampling" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "Drivrutinemodul" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "Mixermodul" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Beskrivelse" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "Lydkonfiguration" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Drivrutiner" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Mixere" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Luk" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d byte)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Beregnet lydforsinkelse: %f µs" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "_XM-effekter..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." -msgstr "Disse ændringer vil ikke gælde før du genstarter afspilning." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Trackerfrekvens" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Opløsning:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Kanaler:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Frekvens [Hz]:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Bufferstørrelse:" +#: app/colors.c:44 +msgid "Major lines" +msgstr "" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "ALSA-kortnummer:" - -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "ALSA-enhedsnummer:" +#: app/colors.c:44 +msgid "Major lines highlighting" +msgstr "" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +#: app/colors.c:45 +msgid "Minor lines" msgstr "" -"Kunne ikke åbne ALSA-enhed for lydindlæsning (kort: %d, enhed: %d):\n" -"%s" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Det lydafspilningsformat som kræves understøttes ikke.\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "De lydafspilningsparametre som kræves understøttes ikke.\n" +#: app/colors.c:45 +msgid "Minor lines highlighting" +msgstr "" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Beregnet lydforsinkelse: %f ms" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Markering:" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Trackerfrekvens" + +#: app/colors.c:47 +msgid "Notes, waveforms" msgstr "" -"Kunne ikke åbne ALSA-enhed for lydafspilning (kort: %d, enhed: %d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" +msgstr "" + +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "Fjern" + +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "Fjern" + +#: app/colors.c:49 #, fuzzy -msgid "Required output-channel parameters not supported.\n" -msgstr "De lydafspilningsparametre som kræves understøttes ikke.\n" +msgid "Channel numbers, loops" +msgstr "Kanaler:" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" msgstr "" -"Bemærk at ESD-uddata er ubrugeligt i\n" -"interaktiv tilstand på grund af den forsinkelse som\n" -"tilføjes gennem ESD. Brug OSS- eller ALSA-\n" -"udskriftsindstiksmodulerne for seriøst arbejde." -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:51 +msgid "Cursor editing" msgstr "" -"Kunne ikke tilslutte til ESD for lydafspilning:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "ingen indstillinger (endnu), desværre!" +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Kan ikke åbne fil for skrivning." +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "Zoom til markering" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." -msgstr "Disse ændringer vil ikke gælde før du genstarter sampling." +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" +msgstr "" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Inddataenhed (fx \"/dev/dsp\"):" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "Genstartsposition" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:53 +msgid "Mixer position indicator" msgstr "" -"Kunne ikke åbne %s for sampling:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d samplingsværdier)" +#: app/colors.c:54 +msgid "Zero line" +msgstr "" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "Uddataenhed (t.ex. \"/dev/dsp\"):" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:56 +msgid "White keys" msgstr "" -"Kunne ikke åbne %s for lydafspilning:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" +#: app/colors.c:57 +msgid "Black keys" msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" +#: app/colors.c:58 +msgid "White keys pressed" msgstr "" -#: app/drivers/jack-output.c:327 -#, fuzzy, c-format -msgid "soundtracker" -msgstr "Brug SoundTracker!" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" +#: app/colors.c:59 +msgid "Black keys pressed" msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:209 -#, fuzzy -msgid "Output device (e.g. '/dev/audio'):" -msgstr "Uddataenhed (t.ex. \"/dev/dsp\"):" +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" +#: app/colors.c:61 +msgid "Black text pressed" msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 +#: app/colors.c:395 #, fuzzy, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "Det lydafspilningsformat som kræves understøttes ikke.\n" +msgid "%s colors configuration" +msgstr "Tastaturkonfiguration" + +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Baglæns" + +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" + +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" + +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 +#: app/drivers/alsa1x.c:261 #, c-format -msgid "%s: Cannot set block size (%s)" +msgid "%f milliseconds" msgstr "" -#: app/drivers/sun-input.c:117 +#: app/drivers/alsa1x.c:320 #, fuzzy -msgid "Input device (e.g. '/dev/audio'):" -msgstr "Inddataenhed (fx \"/dev/dsp\"):" +msgid "ALSA device opening error" +msgstr "ALSA-enhedsnummer:" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" msgstr "" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Længde" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Aktuel" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +msgid "Unable to set channels number" +msgstr "" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Forskydning" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Værdi" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Indsæt" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Fjern" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" msgstr "" -"Grafisk\n" -"envelopredigerer\n" -"kun i\n" -"GNOME-versionen" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Udklingning" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Punkt" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Løkke" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Start" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Slut" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Indlæs modul" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Gem modul" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d samplingsværdier)" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Rendér WAV" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Gem sang" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Indlæs sampling" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Gem sampling" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8-bit" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Indlæs instrument" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16-bit" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Gem instrument" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +#, fuzzy +msgid "Mono" +msgstr "Monitor" -#: app/file-operations.c:175 -msgid "File" -msgstr "Fil" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +#, fuzzy +msgid "Stereo" +msgstr "Stop" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Handlingen understøttes ikke." +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "Disse ændringer vil ikke gælde før du genstarter afspilning." -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Oscilloskopfrekvens" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "Disse ændringer vil ikke gælde før du genstarter sampling." -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Trackerfrekvens" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "Konfiguration af brugergrænsesnit" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "Heksadecimale linjenumre" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Opløsning:" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Brug store bogstaver i heksadecimale tal" +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Kanaler:" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" -msgstr "Asynkron mønsterredigering (IT-metoden)" +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Frekvens [Hz]:" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" -msgstr "Fxx-kommando opdaterer glidere for tempo/BPM" +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Bufferstørrelse:" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" -msgstr "Skift til tracker efter indlæsning/gemning" +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "Antal kanaler:" -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" -msgstr "Gem vinduegeometri ved afslut" +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Beregnet lydforsinkelse: %f ms" -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." msgstr "" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" msgstr "" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Oscilloskopbufferstørrelse [MB]" +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Linjeformat for spor:" +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." -msgstr "Klar." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Spiller sang..." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Spiller mønster..." +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Indlæser modul..." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Modul indlæst." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Gemmer modul..." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Modul gemt." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "Indlæser sampling..." +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "Fejl ved indlæsning af mønster." -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Sampling indlæst." +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Gemmer sampling..." +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Sampling gemt." +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "Indlæser instrument..." +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Instrument indlæst." +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Gemmer instrument..." +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Instrument gemt." +#: app/drivers/alsa1x.c:1328 +msgid "Unable to enable timestamping for playback" +msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Gemmer sang..." +#: app/drivers/alsa1x.c:1329 +msgid "Unable to enable timestamping for capture" +msgstr "" -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "Sang gemt." +#: app/drivers/alsa1x.c:1335 +msgid "Unable to set timestamp type for playback" +msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Spørgsmål" +#: app/drivers/alsa1x.c:1336 +msgid "Unable to set timestamp type for capture" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" msgstr "" -#: app/gui-subs.c:500 -#, fuzzy -msgid "No" -msgstr "Ingen" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "" -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Afbryd" +#: app/drivers/alsa1x.c:1352 +msgid "Unable to prepare playback" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Advarsel" +#: app/drivers/alsa1x.c:1353 +msgid "Unable to prepare capture" +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "Fejl!" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" +msgstr "" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" +msgstr "" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "" + +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "ingen indstillinger (endnu), desværre!" + +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." msgstr "" -#: app/gui.c:301 +#: app/drivers/irix-output.c:178 #, fuzzy -msgid "Highlight rows (major / minor):" -msgstr "Markér rækker:" +msgid "16 Bit output not supported." +msgstr "Handlingen understøttes ikke." -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "Handlingen understøttes ikke." + +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." msgstr "" +"Kunne ikke Ã¥bne %s for sampling:\n" +"%s" -#: app/gui.c:506 -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" +#: app/drivers/oss.c:130 +#, fuzzy +msgid "OSS input: reading error" +msgstr "Instrumentskifte" + +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" msgstr "" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Beregnet lydforsinkelse: %f ms" + +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d samplingsværdier)" + +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "Inddataenhed (fx \"/dev/dsp\"):" + +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "Uddataenhed (t.ex. \"/dev/dsp\"):" + +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" msgstr "" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" msgstr "" -"Er du sikker på at du vil frigøre det aktuelle projekt?\n" -"Alle ændringer vil blive tabt!" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Er du sikker på at du vil overskrive filen?" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"Kunne ikke Ã¥bne %s for sampling:\n" +"%s" -#: app/gui.c:638 -#, fuzzy -msgid "Error when opening pattern file!" -msgstr "Fejl ved indlæsning af mønster." +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "Det lydafspilningsformat som kræves understøttes ikke.\n" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" msgstr "" -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "SoundTracker-opstart" - -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "Indlæser..." +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "" -#: app/gui.c:1804 -msgid "Use SoundTracker!" -msgstr "Brug SoundTracker!" +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Indlæs XM..." - -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Gem XM..." - -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Rendér modul som WAV..." - -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "Gem sang som XM..." +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/gui.c:1872 -#, fuzzy -msgid "Load current pattern..." -msgstr "Aktuelt mønster" +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/gui.c:1874 -#, fuzzy -msgid "Save current pattern..." -msgstr "Aktuelt mønster" +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Afspil sang" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Afspil mønster" +#: app/drivers/jack.c:610 +msgid "Jack server is not running or some error occured." +msgstr "" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Stop" +#: app/drivers/sdl-output.c:76 +#, fuzzy +msgid "Experimental SDL support." +msgstr "Handlingen understøttes ikke." -#: app/gui.c:1973 +#: app/drivers/sun-output.c:212 #, fuzzy -msgid "Pat" -msgstr "Indsæt" +msgid "Output device (e.g. '/dev/audio'):" +msgstr "Uddataenhed (t.ex. \"/dev/dsp\"):" -#: app/gui.c:1979 -msgid "Edited pattern" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" msgstr "" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" msgstr "" -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Antal kanaler:" +#: app/drivers/sun-output.c:402 +#, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "" -#: app/gui.c:2025 -#, fuzzy -msgid "Pattern Length" -msgstr "Mønsterlængde" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "Det lydafspilningsformat som kræves understøttes ikke.\n" -#: app/gui.c:2060 -msgid "Set preferred accidental type" +#: app/drivers/sun-output.c:455 +#, c-format +msgid "SUN output (%s): Cannot set block size" msgstr "" -#: app/gui.c:2066 +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" + +#: app/drivers/sun-input.c:77 #, fuzzy -msgid "Measure" -msgstr "firkant" +msgid "SUN input: reading error" +msgstr "Instrumentskifte" -#: app/gui.c:2067 -msgid "Enable row highlighting" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" msgstr "" -#: app/gui.c:2093 +#: app/drivers/sun-input.c:131 #, fuzzy -msgid "Other..." -msgstr "Andre taster..." +msgid "Input device (e.g. '/dev/audio'):" +msgstr "Inddataenhed (fx \"/dev/dsp\"):" -#: app/gui.c:2129 -#, fuzzy -msgid "Change effect column editing direction" -msgstr "Vandret bevægelse ved effektredigering" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" msgstr "" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" +#: app/drivers/sun-input.c:273 +#, c-format +msgid "SUN input (%s): Cannot handle %d Hz" msgstr "" -#: app/gui.c:2216 -#, fuzzy -msgid "Editing" -msgstr "_Redigér" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "Det lydafspilningsformat som kræves understøttes ikke.\n" -#: app/gui.c:2223 -msgid "Octave" -msgstr "Oktav" +#: app/drivers/sun-input.c:332 +#, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "" -#: app/gui.c:2232 -msgid "Jump" -msgstr "Hop" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Længde" -#: app/gui.c:2241 -msgid "Instr" -msgstr "Instrument" +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Aktuel" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Sampling" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Forskydning" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "Velkommen til SoundTracker!" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Værdi" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Indsæt" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "Volumennedtoning" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "Fjern" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "Vib.hast." +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"Grafisk\n" +"envelopredigerer\n" +"kun i\n" +"GNOME-versionen" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "Vib.dybde" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Udklingning" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "Vib.svep" +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Punkt" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Kan ikke åbne fil." +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "Løkke" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sinus" +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "Start" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Firkant" +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Slut" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "Savtak ned" +#: app/file-operations.c:127 +#, c-format +msgid "" +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "Savtak op" +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Instrumentredigerer" +#: app/file-operations.c:245 +msgid "All files" +msgstr "" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Volumenenvelop" +#: app/file-operations.c:388 +msgid "File" +msgstr "Fil" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Panoreringsenvelop" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Indlæs instrument..." - -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Gem instrument..." +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "Indlæs XI" +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "Mixere" -# src/menus.c:280 -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "Gem XI" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "Konfiguration af brugergrænsesnit" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Vibratotype:" +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Oscilloskopfrekvens" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Note:" +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Trackerfrekvens" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Initiér" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Heksadecimale linjenumre" -#: app/keys.c:57 -msgid "" -msgstr "" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Brug store bogstaver i heksadecimale tal" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "Tasten som indsætter den specielle aftastnote for FastTracker-moduler." +#: app/gui-settings.c:343 +#, fuzzy +msgid "FT2-like volume column" +msgstr "Fin volumenglidning op" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" msgstr "" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" msgstr "" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "Øvre oktavtaster..." - -#: app/keys.c:146 -msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +#: app/gui-settings.c:361 +msgid "Decimal volume representation" msgstr "" -"Dette er tasterne på den øvre dele af tastaturet. C-tasten er normalt tasten " -"til højre for tabulatortasten. Resten af tasterne, inklusive taltasterne " -"ovenfor, er arrangeret på pianoklaviatursvis." -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Lavere oktavtaster..." +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" +msgstr "Asynkron mønsterredigering (IT-metoden)" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" msgstr "" -"Dette er tasterne på den nedre dele af tastaturet. C-tasten er normalt " -"tasten til venstre for skiftetasten. Resten af tasterne, inklusive linjen " -"ovenfor, er arrangeret på pianoklaviatursvis." -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "Andre taster..." +#: app/gui-settings.c:379 +msgid "Record keyreleases" +msgstr "" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Diverse andre taster" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" +msgstr "" -#: app/keys.c:513 -msgid "Function" -msgstr "Funktion" +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Tildeling" +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Tastaturkonfiguration" +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "Fxx-kommando opdaterer glidere for tempo/BPM" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Tastegruppeforklaring" +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Tasteforklaring" +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "Skift til tracker efter indlæsning/gemning" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Ændrere:" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Lær vagt tast" +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" +msgstr "Gem vinduegeometri ved afslut" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Lær alle taster" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "" + +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/keys.c:661 +#: app/gui-settings.c:451 msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." msgstr "" -"Tryk på den ønskede tastekombination!\n" -"Klik i den venstre liste for at afbryde" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "O.K." +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Markering:" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Anvend" +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Oscilloskopbufferstørrelse [MB]" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." -msgstr "" -"Tastaturkonfigurationsfilen er beskidt\n" -"Brug tastaturkonfigurationsdialogen." +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Sampling indlæst." -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" +#: app/gui-settings.c:484 +msgid "Scopes" msgstr "" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" -msgstr "" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Redigér" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:490 +msgid "Strobo" msgstr "" -"Automatisk tastaturkonfiguration mislykkedes.\n" -"Vælg tastaturkonfigurationsdialogen i\n" -"Indstillinger-menuen." -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" msgstr "" -"Er du sikker på at du vil gøre dette?\n" -"Alle ændringer vil blive tabt!" -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +#: app/gui-settings.c:494 +msgid "Minmax" msgstr "" -"Er du sikker på at du vil afslutte?\n" -"Alle ændringer vil blive tabt!" - -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Åbna..." -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Gem so_m..." +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Gem modul som _WAV..." +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Linjeformat for spor:" -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Gem XM uden samplinger..." +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "A_fslut" +#: app/gui-settings.c:573 +#, fuzzy +msgid "Tracker colors configuration" +msgstr "Tastaturkonfiguration" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Tøm _alle" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "Klar." -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Tøm kun _mønstre" +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Spiller sang..." -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Optimér modul" +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Spiller mønster..." -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "Klip _ud" +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "Indlæser modul..." -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Kopiér" +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "Modul indlæst." -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "_Indsæt" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Gemmer modul..." -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Dræb noter" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "Modul gemt." -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "_Indsæt spor" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "Indlæser sampling..." -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "_Fjern spor" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Sampling indlæst." -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Øg kommandoværdi" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Gemmer sampling..." -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Formindsk kommandoværdi" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Sampling gemt." -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "_Markeringstilstand" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "Indlæser instrument..." -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "T_øm blokmærker" +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Instrument indlæst." -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "_Interpolér effekter" +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Gemmer instrument..." -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Transponér halvt tonetrin opad" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Instrument gemt." -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Transponér halvt tonetrin nedad" +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Gemmer sang..." -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Transponér oktav opad" +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "Sang gemt." -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Transponér oktav nedad" +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "Fejl!" -#: app/menubar.c:526 -#, fuzzy -msgid "P_aste" -msgstr "Indsæt" +#: app/gui-subs.c:414 +msgid "Question" +msgstr "SpørgsmÃ¥l" -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "_Jazzredigeringstilstand" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" -#: app/menubar.c:534 -msgid "_Record keyreleases" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" msgstr "" -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "Transp_onering..." +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "M_ønster" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Advarsel" -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "S_por" +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "Konfiguration af brugergrænsesnit" -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Markering" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "" -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_Find ubrugt mønster" +#: app/gui.c:260 +#, fuzzy +msgid "Highlight rows (major / minor):" +msgstr "Markér rækker:" -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Kopiér fra aktuelt til ubrugt mønster" +#: app/gui.c:330 +msgid "" +msgstr "" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "T_øm ubrugte mønstre" +#: app/gui.c:451 +#, fuzzy +msgid "Saving module failed" +msgstr "Gemmer modul..." -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "_Pak mønstre" +#: app/gui.c:535 +msgid "File output" +msgstr "" -#: app/menubar.c:592 +#: app/gui.c:612 #, fuzzy -msgid "_Save Current Pattern" -msgstr "Aktuelt mønster" +msgid "Can't open file for writing" +msgstr "Kan ikke Ã¥bne fil for skrivning." -#: app/menubar.c:594 +#: app/gui.c:618 #, fuzzy -msgid "L_oad Pattern" -msgstr "M_ønster" +msgid "Can't change file ownership" +msgstr "Kan ikke Ã¥bne fil for skrivning." -#: app/menubar.c:599 -#, fuzzy -msgid "Sh_rink Current Pattern" -msgstr "Aktuelt mønster" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "" -#: app/menubar.c:601 -#, fuzzy -msgid "_Expand Current Pattern" -msgstr "Aktuelt mønster" +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "" -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" msgstr "" -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" +#: app/gui.c:715 +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" msgstr "" -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Indlæs XI..." +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"Er du sikker pÃ¥ at du vil frigøre det aktuelle projekt?\n" +"Alle ændringer vil blive tabt!" -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_Gem XI..." +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "Fejl ved indlæsning af mønster." -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_Tøm aktuel" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" +msgstr "" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Fjern ubrugte instrumenter" +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "Start" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "_Flimmerfri rulning" +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "Indlæser..." -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "_Foregående skrifttype" +#: app/gui.c:2195 +msgid "Use SoundTracker!" +msgstr "Brug SoundTracker!" + +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"Er du sikker pÃ¥ at du vil afslutte?\n" +"Alle ændringer vil blive tabt!" -#: app/menubar.c:642 -msgid "_Next font" -msgstr "_Næste skrifttype" +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." msgstr "" -#: app/menubar.c:649 +#: app/gui.c:2296 #, fuzzy -msgid "Change effect column editing _direction" -msgstr "Vandret bevægelse ved effektredigering" +msgid "Estimating..." +msgstr "Indlæser..." -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Vis _oscilloskop" +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Tracker" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "_Tastaturkonfiguration..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "_Lydkonfiguration..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "Konfiguration af bruger_grænsesnit..." +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "_MIDI-konfiguration..." +#: app/gui.c:2400 +msgid "Extended pattern (*.xp)" +msgstr "" -#: app/menubar.c:679 -msgid "Disable splash screen" +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" msgstr "" -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Gem indstillinger nu" +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Indlæs modul" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Gem indstillinger ved a_fslutning" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" +msgstr "" -#: app/menubar.c:690 -msgid "_About..." -msgstr "_Om..." +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Gem modul" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Vis _tips..." +#: app/gui.c:2434 +#, fuzzy +msgid "Save the current module" +msgstr "Aktuelt mønster" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "_XM-effekter..." +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Rendér WAV" -# Arkiv Arkiv Arkiv Arkiv Arkiv Arkiv Arkiv og intet andet end Arkiv! -#: app/menubar.c:704 -msgid "_File" -msgstr "_Arkiv" +#: app/gui.c:2436 +#, fuzzy +msgid "Render the current module as WAV file" +msgstr "Rendér modul som WAV..." -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Modul" +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Gem XM uden samplinger..." -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Redigér" +#: app/gui.c:2439 +#, fuzzy +msgid "Load current pattern..." +msgstr "Aktuelt mønster" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Instrument" +#: app/gui.c:2440 +#, fuzzy +msgid "Save current pattern..." +msgstr "Aktuelt mønster" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Indstillinger" +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Afspil sang" -#: app/menubar.c:711 -msgid "_Help" -msgstr "_Hjælp" +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Afspil mønster" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/gui.c:2525 +msgid "Play From Cursor" msgstr "" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Instrumentnavn" +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "Afspil sang" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#smpl" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Stop" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Samplingsnavn" +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Lineær" +#: app/gui.c:2562 +#, fuzzy +msgid "Pat" +msgstr "Indsæt" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/gui.c:2568 +msgid "Edited pattern" +msgstr "" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Modulinformation" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "" -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Sangnavn:" +#: app/gui.c:2583 +#, fuzzy +msgid "Pattern Length" +msgstr "Mønsterlængde" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Frekvenser:" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "ProTracker-tilstand" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Antal kanaler:" -#: app/module-info.c:395 -#, c-format -msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +#: app/gui.c:2632 +msgid "Set preferred accidental type" msgstr "" -"Ubrugte mønstre: %d (brugt: %d)\n" -"Ubrugte instrumenter: %d (brugt: %d)\n" -"\n" -"Tøm ubrugte og omsortér spillelisten?\n" -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" +#: app/gui.c:2638 +#, fuzzy +msgid "Measure" +msgstr "firkant" + +#: app/gui.c:2639 +msgid "Enable row highlighting" msgstr "" -#: app/playlist.c:535 +#: app/gui.c:2660 #, fuzzy -msgid "Remove current playlist entry" -msgstr "Aktuelt mønster" +msgid "Other..." +msgstr "Andre taster..." -#: app/playlist.c:543 -msgid "Add + Cpy" +#: app/gui.c:2687 +#, fuzzy +msgid "Change effect column editing direction" +msgstr "Vandret bevægelse ved effektredigering" + +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" msgstr "" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" msgstr "" -#: app/playlist.c:548 -msgid "Add Free" +#: app/gui.c:2740 +msgid "Pitchbend" msgstr "" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" msgstr "" -#: app/playlist.c:560 +#: app/gui.c:2760 #, fuzzy -msgid "Len" -msgstr "Længde" +msgid "Editing" +msgstr "_Redigér" -#: app/playlist.c:574 -msgid "Song length" -msgstr "Sanglængde" +#: app/gui.c:2767 +msgid "Octave" +msgstr "Oktav" -#: app/playlist.c:580 -#, fuzzy -msgid "Rstrt" +#: app/gui.c:2776 +msgid "Jump" +msgstr "Hop" + +#: app/gui.c:2785 +msgid "Instr" msgstr "Instrument" -#: app/playlist.c:593 -#, fuzzy -msgid "Song restart position" -msgstr "Genstartsposition" +#: app/gui.c:2801 +msgid "Sample" +msgstr "Sampling" -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" +#: app/gui.c:2827 +msgid "dB" msgstr "" -"Et katalog med navnet \".soundtracker\" er oprettet i dit\n" -"hjemmekatalog for lagring af konfigurationsfiler.\n" - -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Ingen løkke" - -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "PingPong" - -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8-bit" - -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16-bit" - -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Samplingsredigering" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Volumen" +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "Velkommen til SoundTracker!" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Panorering" +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Finjustér" +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Kan ikke Ã¥bne fil." -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Markering:" +#: app/instrument-editor.c:209 +#, fuzzy +msgid "Saving instrument failed." +msgstr "Gemmer instrument..." -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Ingen" +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "Aktuelt instrument" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Alle" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sinus" -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Længde:" +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Firkant" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Sæt som løkke" +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "Savtak ned" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "Rel.not" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "Savtak op" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Indlæs sampling..." +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" +msgstr "" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Gem WAV..." +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Instrumentredigerer" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "Gem område som WAV..." +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Volumenenvelop" -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "Gem WAV" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Panoreringsenvelop" -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "Gem område" +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Indlæs instrument" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Monitor" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Volumenramp" +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Gem instrument" -#: app/sample-editor.c:425 +#: app/instrument-editor.c:297 #, fuzzy -msgid "Trim" -msgstr "Tremor" - -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Zoom til markering" +msgid "Save the current instrument" +msgstr "Aktuelt instrument" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Vis alle" +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "Indlæs XI" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Zoom ind (+50%)" +# src/menus.c:280 +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "Gem XI" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Zoom ud (-50%)" +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "Volumenglidning op" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Baglæns" +#: app/instrument-editor.c:344 +#, fuzzy +msgid "Vibrato:" +msgstr "Vibrato" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Klip ud" +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Fjern" +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "Vib.hast." -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Kopiér" +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "Vib.dybde" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Indsæt" +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "Vib.svep" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "Tøm sampling" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Note:" -#: app/sample-editor.c:500 -#, fuzzy -msgid "Crop" -msgstr "Kopiér" +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "Initiér" -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(ingen markering)" +#: app/keys.c:58 +msgid "" +msgstr "" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" +#: app/keys.c:134 +msgid "KOFF" msgstr "" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "Tasten som indsætter den specielle aftastnote for FastTracker-moduler." -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." +#: app/keys.c:136 +msgid "JMP+" msgstr "" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Læsefejl." +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Indlæs stereosampling" +#: app/keys.c:138 +msgid "JMP-" +msgstr "" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." msgstr "" -"Du har valgt en stereosampling!\n" -"(SoundTracker kan kun håndtere monosamplinger!)\n" -"\n" -"Vælg hvilken kanal som skal indlæses:" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Venstre" +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Afspil sang" -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Mix" +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Gemmer modul..." -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Højre" +#: app/keys.c:142 +msgid "RecMod" +msgstr "" -#: app/sample-editor.c:1575 +#: app/keys.c:142 #, fuzzy -msgid "Signed" -msgstr "Sinus" +msgid "Play module + recording." +msgstr "Spiller mønster..." -#: app/sample-editor.c:1575 +#: app/keys.c:144 #, fuzzy -msgid "Unsigned" -msgstr "sinus" +msgid "PlayPat" +msgstr "Afspil mønster" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Afspil mønster" -#: app/sample-editor.c:1576 -msgid "Big-Endian" +#: app/keys.c:146 +msgid "RecPat" msgstr "" -#: app/sample-editor.c:1577 +#: app/keys.c:146 #, fuzzy -msgid "Mono" -msgstr "Monitor" +msgid "Play pattern + recording." +msgstr "Spiller mønster..." -#: app/sample-editor.c:1577 -#, fuzzy -msgid "Stereo" -msgstr "Stop" +#: app/keys.c:148 +msgid "PlayCur" +msgstr "" -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "Indlæs rå sampling" +#: app/keys.c:148 +msgid "Play module from cursor." +msgstr "" -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" +#: app/keys.c:150 +msgid "RecCur" msgstr "" -"Du har valgt en sampling som ikke er i et kendt\n" -"format. Du kan indlæse de rå data nu.\n" -"\n" -"Vælg et format:" -#: app/sample-editor.c:1623 -msgid "Word format:" -msgstr "Ordformat:" +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Spiller mønster..." -#: app/sample-editor.c:1670 +#: app/keys.c:152 #, fuzzy -msgid "Sampling Rate:" -msgstr "Sampling" +msgid "PlayRow" +msgstr "Afspil sang" + +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Aktuelt mønster" -#: app/sample-editor.c:1681 -msgid "8363" +#: app/keys.c:154 +msgid "PlayBlk" msgstr "" -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "O.K." +#: app/keys.c:154 +#, fuzzy +msgid "Play selected block." +msgstr "Lær vagt tast" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Kan ikke læse sampling" +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Øvre oktavtaster..." -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." +#: app/keys.c:167 +msgid "" +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." msgstr "" -"Samplingen er for lang for det aktuelle mixermodul. Indlæser alligevel." +"Dette er tasterne pÃ¥ den øvre dele af tastaturet. C-tasten er normalt tasten " +"til højre for tabulatortasten. Resten af tasterne, inklusive taltasterne " +"ovenfor, er arrangeret pÃ¥ pianoklaviatursvis." -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Kan kun håndtere 8- og 16-bitsamplinger med op til to kanaler" +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Lavere oktavtaster..." -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "Vælg region først." +#: app/keys.c:173 +msgid "" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." +msgstr "" +"Dette er tasterne pÃ¥ den nedre dele af tastaturet. C-tasten er normalt " +"tasten til venstre for skiftetasten. Resten af tasterne, inklusive linjen " +"ovenfor, er arrangeret pÃ¥ pianoklaviatursvis." -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Påbegynd sampling" +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "Andre taster..." -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "Ingen samplingsdrivrutine tilgængelig" +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Diverse andre taster" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Samplingsvindue" +#: app/keys.c:578 +msgid "Function" +msgstr "Funktion" -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" +#: app/keys.c:579 +msgid "Assignment" +msgstr "Tildeling" + +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Tastaturkonfiguration" + +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Tastegruppeforklaring" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Tasteforklaring" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Ændrere:" + +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "Lær vagt tast" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "Lær alle taster" + +#: app/keys.c:702 +msgid "" +"Please press the desired key combination!\n" +"Click into left list to cancel" msgstr "" +"Tryk pÃ¥ den ønskede tastekombination!\n" +"Klik i den venstre liste for at afbryde" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "" -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" msgstr "" -"Indlæst samplingen er for lang for det aktuelle mixermodul. Bruger den " -"alligevel." -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normalisér" +#: app/keys.c:1028 +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." +msgstr "" +"Automatisk tastaturkonfiguration mislykkedes.\n" +"Vælg tastaturkonfigurationsdialogen i\n" +"Indstillinger-menuen." + +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" +msgstr "" -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Kør" +#: app/menubar.c:126 +msgid "" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." +msgstr "" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Volumenrampning" +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"Er du sikker pÃ¥ at du vil gøre dette?\n" +"Alle ændringer vil blive tabt!" -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Udfør lineær volumennedtoning på markering" +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Venstre [%]:" +#: app/mixers/kbfloat.c:838 +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "H" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "D" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Cyclic" +msgstr "" -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Højre [%]:" +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/module-info.c:64 +msgid "Coupled" msgstr "" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/module-info.c:481 +msgid "Period" msgstr "" -#: app/tips-dialog.c:50 +#: app/module-info.c:484 +msgid "s" +msgstr "" + +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Note:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Instrumentnavn" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#smpl" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Samplingsnavn" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "Lineær" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Modulinformation" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Sangnavn:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Frekvenser:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "ProTracker-tilstand" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Instrumentredigerer" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Aktuelt instrument" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Gem instrument" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "Skift 1 <-> 2" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 msgid "" -"Welcome to SoundTracker!\n" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Finjustér" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "Rel.not" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" "\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +"Clear unused and reorder playlist?\n" msgstr "" -"Velkommen til SoundTracker!\n" +"Ubrugte mønstre: %d (brugt: %d)\n" +"Ubrugte instrumenter: %d (brugt: %d)\n" "\n" -"Hvis du ikke har tidligere erfaring med denne type programmer, vil du\n" -"måske gerne have fat på en del XM- eller MOD-filer først og lege med dem." +"Tøm ubrugte og omsortér spillelisten?\n" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "" -#: app/tips-dialog.c:55 +#: app/playlist.c:511 +#, fuzzy +msgid "Remove current playlist entry" +msgstr "Aktuelt mønster" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "" + +#: app/playlist.c:519 msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +"Add a free pattern behind current position, and copy current pattern to it" msgstr "" -"Du kan gøre SoundTrackers redigeringstilstand mere følsomt for\n" -"tastaturindtastning gennem at mindske bufferstørrelsen i\n" -"\"Redigering\"-objektet i lydkonfigurationen." -#: app/tips-dialog.c:59 +#: app/playlist.c:522 +msgid "Add Free" +msgstr "" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Længde" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "Sanglængde" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Instrument" + +#: app/playlist.c:567 +#, fuzzy +msgid "Song restart position" +msgstr "Genstartsposition" + +#: app/preferences.c:60 +#, fuzzy msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"Et katalog med navnet \".soundtracker\" er oprettet i dit\n" +"hjemmekatalog for lagring af konfigurationsfiler.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" msgstr "" -"Du kan justere løkkepunkterne i samplingsredigereren ved at holde Skift\n" -"nede og bruge venstre og højre museknap.\n" -#: app/tips-dialog.c:62 +#: app/preferences.c:94 +#, c-format msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +"An error is occured during converting config:\n" +"%s" msgstr "" -"Hvis du vil vide mere om tracking og hvordan de forskellige kommandoer " -"fungerer\n" -"kan du tage en kig på http://www.united-trackers.org/" -#: app/tips-dialog.c:65 +#: app/preferences.c:109 +#, c-format msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +"An error is occured during reading or parsing config:\n" +"%s" msgstr "" -"Du kan tildele samplinger fra et instrument til de individuelle\n" -"taster ved at aktivere dets sampling og siden klikke på\n" -"tastaturet i instrumentredigeringssiden." -#: app/tips-dialog.c:69 +#: app/preferences.c:133 +#, c-format msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +"An error is occured during saving config:\n" +"%s" msgstr "" -"Er din markør fast i et talindtastningsfelt?\n" -"Tryk bare Retur eller Tab til at frigøre!" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Ingen løkke" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "PingPong" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8-bit" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16-bit" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Samplingsredigering" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "Volumen" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Panorering" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Markering:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "Ingen" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Alle" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Længde:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "Sæt som løkke" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Indlæs sampling" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "Gem XM uden samplinger..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Gem sampling" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "Gem XM uden samplinger..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "Gem omrÃ¥de som WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "Gem WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "Gem omrÃ¥de" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Volumenramp" + +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "Tremor" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "Zoom til markering" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "Vis alle" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "Zoom ind (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "Zoom ud (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Baglæns" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Klip ud" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Fjern" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Kopiér" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Indsæt" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "Tøm sampling" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Kopiér" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(ingen markering)" + +#: app/sample-editor.c:1279 +msgid "Out of memory for copybuffer." +msgstr "" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Mix" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Venstre" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Højre" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d samplingsværdier)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "" + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "Læsefejl." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"Du har valgt en stereosampling!\n" +"(SoundTracker kan kun hÃ¥ndtere monosamplinger!)\n" +"\n" +"Vælg hvilken kanal som skal indlæses:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "PÃ¥begynd sampling" + +#: app/sample-editor.c:1756 +#, fuzzy +msgid "Signed" +msgstr "Sinus" + +#: app/sample-editor.c:1756 +#, fuzzy +msgid "Unsigned" +msgstr "sinus" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "Indlæs rÃ¥ sampling" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"Du har valgt en sampling som ikke er i et kendt\n" +"format. Du kan indlæse de rÃ¥ data nu.\n" +"\n" +"Vælg et format:" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "Ordformat:" + +#: app/sample-editor.c:1829 +#, fuzzy +msgid "Sampling Rate:" +msgstr "Sampling" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Kan ikke læse sampling" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "" +"Samplingen er for lang for det aktuelle mixermodul. Indlæser alligevel." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "Kan kun hÃ¥ndtere 8- og 16-bitsamplinger med op til to kanaler" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Kan ikke Ã¥bne fil for skrivning." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "Vælg region først." + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "Ingen samplingsdrivrutine tilgængelig" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Samplingsvindue" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "Tøm _alle" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Sampling" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"Du har valgt en stereosampling!\n" +"(SoundTracker kan kun hÃ¥ndtere monosamplinger!)\n" +"\n" +"Vælg hvilken kanal som skal indlæses:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Indlæs stereosampling" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"Indlæst samplingen er for lang for det aktuelle mixermodul. Bruger den " +"alligevel." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Volumenrampning" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normalisér" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "Udfør lineær volumennedtoning pÃ¥ markering" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Venstre [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "H" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "D" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Højre [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"Velkommen til SoundTracker!\n" +"\n" +"Hvis du ikke har tidligere erfaring med denne type programmer, vil du\n" +"mÃ¥ske gerne have fat pÃ¥ en del XM- eller MOD-filer først og lege med dem." + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"Du kan gøre SoundTrackers redigeringstilstand mere følsomt for\n" +"tastaturindtastning gennem at mindske bufferstørrelsen i\n" +"\"Redigering\"-objektet i lydkonfigurationen." + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"Du kan justere løkkepunkterne i samplingsredigereren ved at holde Skift\n" +"nede og bruge venstre og højre museknap.\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"Hvis du vil vide mere om tracking og hvordan de forskellige kommandoer " +"fungerer\n" +"kan du tage en kig pÃ¥ http://www.united-trackers.org/" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Du kan tildele samplinger fra et instrument til de individuelle\n" +"taster ved at aktivere dets sampling og siden klikke pÃ¥\n" +"tastaturet i instrumentredigeringssiden." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" +"Er din markør fast i et talindtastningsfelt?\n" +"Tryk bare Retur eller Tab til at frigøre!" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "ForegÃ¥ende tip" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "Næste tip" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "Vis tip næste gang" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" msgstr "Dagens SoundTracker-tip" -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Foregående tip" +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "Arpeggio" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "Porta op" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "Porta ned" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "Toneporta" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "Vibrato" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "Toneporta + volumenglidning" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "Vibrato + volumenglidning" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "Tremolo" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "Sæt panorering" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Sampling gemt." + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "Sæt volumen" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Positions-hop" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "Mønsterbrydning" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "Sæt tempo/taktslag per minut" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "Sæt global volumen" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "Global volumenglidning" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "Tast af" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "Sæt envelopposition" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "Panoreringsglidning" + +# src/header_stuff.c:479 +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "LP-filterresonans" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "Fleromtrigningsnote" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "Tremor" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "LP-filterafskæring" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "Finporta op" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "Finporta ned" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "Sæt glisskontrol" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "Sæt vibratokontrol" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "Sæt finjustering" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "Mønster" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "Sæt tremolokontrol" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "Omtrigningsnote" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "Fin volumenglidning op" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "Fin volumenglidning ned" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "Nodeklip" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "Nodeforsinkelse" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "Mønsterforsinkelse" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "Volumenglidning ned" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "Volumenglidning op" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "Sæt vibratohastighed" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "Panoreringsglidning venstre" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "Panoreringsglidning højre" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "sinus" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "ramp ned" + +#: app/track-editor.c:203 +msgid "square" +msgstr "firkant" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +#, fuzzy +msgid "Extra fine porta up" +msgstr "Finporta op" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "Finporta ned" + +#: app/track-editor.c:257 +#, fuzzy +msgid "None ]" +msgstr "Ingen" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Jazzredigering:" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Tracker" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "Skrifttypeliste" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "Tilføj skrifttype" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "Fjern skrifttype" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "Anvend skrifttype" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "Vælg skrifttype..." + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "Hel sang" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "Alle mønstre" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "Aktuelt mønster" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "Aktuelt spor" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Aktuelt instrument" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "Alle instrumenter" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "Halvnode op" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "Halvnode ned" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "Oktav op" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "Oktav ned" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "Skift 1 <-> 2" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "Ændr 1 -> 2" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "Transponeringsværktøj" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "OmrÃ¥de for handlingen:" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Nodetransponering" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Instrumentskifte" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Instrument 1:" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Aktuelt instrument" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Instrument 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "Mønsterlængde uden for intervallet: %d.\n" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Fejl ved indlæsning af mønster." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Instrument indlæst." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Instrumentskifte" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Panoreringsenvelop" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Panoreringsenvelop" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Panoreringsenvelop" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "Ugyldig vibratotype %d, bruger sinus.\n" + +#: app/xm.c:678 app/xm.c:1233 +msgid "Out of memory error!" +msgstr "" + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "Filen er intet XI-instrument." + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Instrument indlæst." + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Panoreringsenvelop" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Panoreringsenvelop" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Instrument indlæst." + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "Ugyldig vibratotype %d, bruger sinus.\n" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "Fejl ved indlæsning af mønster." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Kan ikke Ã¥bne fil" + +#: app/xm.c:1215 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "Fejl ved indlæsning af mønster." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"Modulet indeholder samplinger som er for lange for den aktuelle mixer.\n" +"Største samplingslængde er %d." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "Ikke FastTracker XM og intet MOD-format som understøttes!" + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "" + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "" + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "" + +#: app/xm.c:1761 app/xm.c:1787 +#, fuzzy +msgid "Error during saving pattern!" +msgstr "Fejl ved indlæsning af mønster." + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "" + +#: app/midi-settings.c:414 +#, fuzzy +msgid "Channel" +msgstr "Kanaler:" + +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "" + +#: app/midi-settings.c:434 +#, fuzzy +msgid "Port number" +msgstr "Porta op" + +#: app/midi-settings.c:453 +#, fuzzy +msgid "Input" +msgstr "Instrument" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "" + +#: app/midi-settings.c:468 +#, fuzzy +msgid "Output" +msgstr "Redigerer afspilning" + +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "" + +#: app/midi-settings.c:492 +#, fuzzy +msgid "Misc" +msgstr "Mixere" + +#: app/midi-settings.c:532 +#, fuzzy +msgid "MIDI Configuration" +msgstr "_MIDI-konfiguration..." + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Mønster" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "S_por" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_Dræb noter" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "_Indsæt spor" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "_Fjern spor" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "Øg kommandoværdi" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Formindsk kommandoværdi" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "T_øm blokmærker" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "_Interpolér effekter" + +# Arkiv Arkiv Arkiv Arkiv Arkiv Arkiv Arkiv og intet andet end Arkiv! +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Arkiv" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_Ã…bna..." + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Gem so_m..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Gem modul som _WAV..." + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "Gem XM uden samplinger..." + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Modul" + +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "Tøm _alle" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Tøm kun _mønstre" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Optimér modul" + +#: soundtracker.glade:346 +msgid "_Set Optimal Amplification" +msgstr "" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Redigér" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "_Jazzredigeringstilstand" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "Transp_onering..." + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "M_ønster" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "S_por" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Markering" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "_Markeringstilstand" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Transponér halvt tonetrin opad" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Transponér halvt tonetrin nedad" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Transponér oktav opad" + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Transponér oktav nedad" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Næste tip" +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "M_ønster" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Vis tip næste gang" +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "Aktuelt mønster" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "Arpeggio" +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_Find ubrugt mønster" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "Porta op" +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Kopiér fra aktuelt til ubrugt mønster" -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "Porta ned" +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "Aktuelt mønster" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" -msgstr "Toneporta" +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "Vibrato" +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "T_øm ubrugte mønstre" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" -msgstr "Toneporta + volumenglidning" +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "_Pak mønstre" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" -msgstr "Vibrato + volumenglidning" +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "Aktuelt mønster" -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "Tremolo" +#: soundtracker.glade:753 +#, fuzzy +msgid "_Expand Current Pattern" +msgstr "Aktuelt mønster" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "Sæt panorering" +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Positions-hop" +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "Sæt volumen" +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "Aktuelt spor" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "Mønsterbrydning" +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "Aktuelt spor" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "Sæt tempo/taktslag per minut" +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "Aktuelt spor" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Sæt global volumen" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Instrument" -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "Global volumenglidning" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "Indlæs XI" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "Tast af" +# src/menus.c:280 +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "Gem XI" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "Sæt envelopposition" +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_Tøm aktuel" -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "Panoreringsglidning" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_Fjern ubrugte instrumenter" -# src/header_stuff.c:479 -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "LP-filterresonans" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Indstillinger" -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "Fleromtrigningsnote" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Vis _oscilloskop" -#: app/track-editor.c:142 -msgid "Tremor" -msgstr "Tremor" +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "LP-filterafskæring" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Tracker" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "Finporta op" +#: soundtracker.glade:913 +#, fuzzy +msgid "_Flicker-free Scrolling" +msgstr "_Flimmerfri rulning" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "Finporta ned" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "_ForegÃ¥ende skrifttype" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "Sæt glisskontrol" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "_Næste skrifttype" -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "Sæt vibratokontrol" +#: soundtracker.glade:944 +msgid "Change Preferred _Accidental Type" +msgstr "" -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "Sæt finjustering" +#: soundtracker.glade:953 +#, fuzzy +msgid "Change Effect Column _Editing Direction" +msgstr "Vandret bevægelse ved effektredigering" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Sæt løkkebegyndelse/løkkeslutning" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "Tastaturkonfiguration" -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "Sæt tremolokontrol" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "Lydkonfiguration" -#: app/track-editor.c:161 -msgid "Retrig note" -msgstr "Omtrigningsnote" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "Konfiguration af brugergrænsesnit" -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "Fin volumenglidning op" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "_MIDI-konfiguration..." -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "Fin volumenglidning ned" +#: soundtracker.glade:1016 +msgid "_Disable Splash Screen" +msgstr "" -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "Nodeklip" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_Gem indstillinger nu" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "Nodeforsinkelse" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Gem indstillinger ved a_fslutning" -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "Mønsterforsinkelse" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_Hjælp" -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "Volumenglidning ned" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "_Om..." -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "Volumenglidning op" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "Vis _tips..." -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "Sæt vibratohastighed" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "_XM-effekter..." -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "Panoreringsglidning venstre" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Afspil sang" -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "Panoreringsglidning højre" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Afspil sang" -#: app/track-editor.c:184 -msgid "sine" -msgstr "sinus" +#~ msgid "SoundTracker Startup" +#~ msgstr "SoundTracker-opstart" -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "ramp ned" +#~ msgid "Vibrato Type:" +#~ msgstr "Vibratotype:" -#: app/track-editor.c:186 -msgid "square" -msgstr "firkant" +#~ msgid "VolFade" +#~ msgstr "Volumennedtoning" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, fuzzy, c-format -msgid "None ]" -msgstr "Ingen" +#~ msgid "Set loop begin/loop" +#~ msgstr "Sæt løkkebegyndelse/løkkeslutning" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Jazzredigering:" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Note:" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Tracker" +#~ msgid "Error while loading instruments." +#~ msgstr "Fejl ved indlæsning af instrument." -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "Skrifttypeliste" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "Bemærk at ESD-uddata er ubrugeligt i\n" +#~ "interaktiv tilstand pÃ¥ grund af den forsinkelse som\n" +#~ "tilføjes gennem ESD. Brug OSS- eller ALSA-\n" +#~ "udskriftsindstiksmodulerne for seriøst arbejde." -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "Tilføj skrifttype" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Kunne ikke tilslutte til ESD for lydafspilning:\n" +#~ "%s" -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "Fjern skrifttype" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "Disse ændringer vil ikke gælde før du genstarter sampling." -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "Anvend skrifttype" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Instrumentskifte" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Op" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Ned" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "Det lydafspilningsformat som kræves understøttes ikke.\n" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "Vælg skrifttype..." +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Ukendt XI-version 0x%x\n" -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "Hel sang" +#~ msgid "Monitor" +#~ msgstr "Monitor" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Alle mønstre" +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#smpl" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "Aktuelt mønster" +#~ msgid "OK" +#~ msgstr "O.K." -#: app/transposition.c:201 -msgid "Current Track" -msgstr "Aktuelt spor" +#~ msgid "Cancel" +#~ msgstr "Afbryd" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Aktuelt instrument" +#~ msgid "(%d bytes)" +#~ msgstr "(%d byte)" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Alle instrumenter" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Beregnet lydforsinkelse: %f µs" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Halvnode op" +#~ msgid "ALSA card number:" +#~ msgstr "ALSA-kortnummer:" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "Halvnode ned" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Kunne ikke Ã¥bne ALSA-enhed for lydindlæsning (kort: %d, enhed: %d):\n" +#~ "%s" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "Oktav op" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "De lydafspilningsparametre som kræves understøttes ikke.\n" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "Oktav ned" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Kunne ikke Ã¥bne ALSA-enhed for lydafspilning (kort: %d, enhed: %d):\n" +#~ "%s" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "Skift 1 <-> 2" +#, fuzzy +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "De lydafspilningsparametre som kræves understøttes ikke.\n" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "Ændr 1 -> 2" +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "Kunne ikke Ã¥bne %s for lydafspilning:\n" +#~ "%s" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "Transponeringsværktøj" +#, fuzzy +#~ msgid "soundtracker" +#~ msgstr "Brug SoundTracker!" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Område for handlingen:" +#~ msgid "Save Song" +#~ msgstr "Gem sang" -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Nodetransponering" +#, fuzzy +#~ msgid "No" +#~ msgstr "Ingen" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Instrumentskifte" +#~ msgid "Close" +#~ msgstr "Luk" -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Instrument 1:" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Er du sikker pÃ¥ at du vil overskrive filen?" -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Aktuelt instrument" +#~ msgid "Load XM..." +#~ msgstr "Indlæs XM..." -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Instrument 2:" +#~ msgid "Save XM..." +#~ msgstr "Gem XM..." -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Mønsterlængde uden for intervallet: %d.\n" +#~ msgid "Save song as XM..." +#~ msgstr "Gem sang som XM..." -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "Filen er intet XI-instrument." +#~ msgid "Load Instrument..." +#~ msgstr "Indlæs instrument..." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Ukendt XI-version 0x%x\n" +#~ msgid "Save Instrument..." +#~ msgstr "Gem instrument..." -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "Ugyldig vibratotype %d, bruger sinus.\n" +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "Tastaturkonfigurationsfilen er beskidt\n" +#~ "Brug tastaturkonfigurationsdialogen." -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "Fejl ved indlæsning af mønster." +#~ msgid "Ok" +#~ msgstr "O.K." -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Kan ikke åbne fil" +#~ msgid "_Quit" +#~ msgstr "A_fslut" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Fejl ved indlæsning af instrument." +#~ msgid "C_ut" +#~ msgstr "Klip _ud" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"Modulet indeholder samplinger som er for lange for den aktuelle mixer.\n" -"Største samplingslængde er %d." +#~ msgid "_Copy" +#~ msgstr "_Kopiér" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "Ikke FastTracker XM og intet MOD-format som understøttes!" +#~ msgid "_Paste" +#~ msgstr "_Indsæt" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "" +#, fuzzy +#~ msgid "P_aste" +#~ msgstr "Indsæt" -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "" +#~ msgid "_Load XI..." +#~ msgstr "_Indlæs XI..." -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "" +#~ msgid "_Save XI..." +#~ msgstr "_Gem XI..." -#: app/xm.c:1468 #, fuzzy -msgid "Error during saving pattern!" -msgstr "Fejl ved indlæsning af mønster." +#~ msgid "Change effect column editing _direction" +#~ msgstr "Vandret bevægelse ved effektredigering" -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "_Tastaturkonfiguration..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -#, fuzzy -msgid "Channel" -msgstr "Kanaler:" +#~ msgid "_Audio Configuration..." +#~ msgstr "_Lydkonfiguration..." -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "" +#~ msgid "_GUI Configuration..." +#~ msgstr "Konfiguration af bruger_grænsesnit..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -#, fuzzy -msgid "Port number" -msgstr "Porta op" +#~ msgid "_MIDI Configuration..." +#~ msgstr "_MIDI-konfiguration..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -#, fuzzy -msgid "Input" -msgstr "Instrument" +#~ msgid "Load Sample..." +#~ msgstr "Indlæs sampling..." -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "" +#~ msgid "Save WAV..." +#~ msgstr "Gem WAV..." -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -#, fuzzy -msgid "Output" -msgstr "Redigerer afspilning" +#~ msgid "Execute" +#~ msgstr "Kør" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "" +#~ msgid "Apply" +#~ msgstr "Anvend" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -#, fuzzy -msgid "Misc" -msgstr "Mixere" +#~ msgid "Drivers" +#~ msgstr "Drivrutiner" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -#, fuzzy -msgid "MIDI Configuration" -msgstr "_MIDI-konfiguration..." +#~ msgid "Up" +#~ msgstr "Op" -#~ msgid "Pattern" -#~ msgstr "Mønster" +#~ msgid "Down" +#~ msgstr "Ned" #~ msgid "Current pos" #~ msgstr "Aktuel position" #~ msgid "`Save XM' saves all non-empty patterns" -#~ msgstr "\"Gem XM\" gemmer alle mønstre som ikke er tomme" +#~ msgstr "\"Gem XM\" gemmer alle mønstre som ikke er tomme" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/de.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/de.gmo differ diff -Nru soundtracker-0.6.8/po/de.po soundtracker-1.0.2~pre2/po/de.po --- soundtracker-0.6.8/po/de.po 2006-02-25 13:25:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/de.po 2020-05-27 18:54:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Deutsche Lokalisierung für SoundTracker +# Deutsche Lokalisierung für SoundTracker # Copyright (C) 1999 Free Software Foundation, Inc. # Thomas R. Koll , 2001 # Colin Marquardt , 1999 @@ -7,15 +7,23 @@ msgstr "" "Project-Id-Version: soundtracker 0.6.4\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2001-08-16 12:15+0200\n" "Last-Translator: Thomas R. Koll \n" "Language-Team: German \n" +"Language: de\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "Playbackausgang" @@ -23,2130 +31,3668 @@ msgid "Editing Output" msgstr "Editierausgang" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Samplen" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "Treibermodul" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "Mixer Modul" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Beschreibung" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "Audio-Konfiguration" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Treiber" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Mixer" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Schließen" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d Bytes)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Geschätzte Audio-Verzögerung: %f Mikrosekunden" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "_XM-Effekte..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." -msgstr "Diese Änderungen werden erst beim nächsten Neustart wirksam." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Tracker-Frequenz" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Auflösung:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Kanäle:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Frequenz [Hz]:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Puffergröße:" +#: app/colors.c:44 +msgid "Major lines" +msgstr "" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "ALSA-Kartennummer:" +#: app/colors.c:44 +msgid "Major lines highlighting" +msgstr "" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "ALSA-Gerätenummer:" +#: app/colors.c:45 +msgid "Minor lines" +msgstr "" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +#: app/colors.c:45 +msgid "Minor lines highlighting" msgstr "" -"Konnte ALSA-Gerät nicht für Soundeingabe öffnen (Karte:%d, Gerät:%d):\n" -"%s" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Erforderliches Soundausgabeformat nicht unterstützt.\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Erforderliche Soundausgabeparameter nicht unterstützt..\n" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Auswahl:" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Geschätzte Ton Verzögerung: %f Mikrosekunden" +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Tracker-Frequenz" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "" + +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" msgstr "" -"Konnte ALSA-Gerät nicht für Soundausgabe öffnen (Karte:%d, Gerät:%d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 +#: app/colors.c:48 #, fuzzy -msgid "Required output-channel parameters not supported.\n" -msgstr "Erforderliche Soundausgabeparameter nicht unterstützt..\n" +msgid "Delimiters" +msgstr "Löschen" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "Löschen" + +#: app/colors.c:49 +#, fuzzy +msgid "Channel numbers, loops" +msgstr "Kanäle:" + +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" msgstr "" -"Beachte dass der ESD Output unbenutzbar ist im\n" -"interaktive Modus wegen der Verzögerung die vom\n" -"ESD hinzugefügt werden. Verwende die OSS oder\n" -"ALSA Output Plugins für ernsthafte Arbeiten." -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:51 +msgid "Cursor editing" msgstr "" -"Konnte keine Verbindung zum ESD zur Soundausgabe öffnen:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "Keine Einstellungen (zur Zeit), sorry!" +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Kann Datei nicht zum Schreiben öffnen." +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "Zoom in Auswahl" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." -msgstr "Diese Änderungen werden erst beim Neustart des Samplens wirksam." +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" +msgstr "" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Eingabegerät (z.B. '/dev/dsp'):" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "Restart-Pos" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:53 +msgid "Mixer position indicator" msgstr "" -"Konnte %s nicht zum Samplen öffnen:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d Samples)" +#: app/colors.c:54 +msgid "Zero line" +msgstr "" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "Ausgabegerät (z.B. '/dev/dsp'):" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:56 +msgid "White keys" msgstr "" -"Konnte %s nicht für Soundausgabe öffnen:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" +#: app/colors.c:57 +msgid "Black keys" msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" +#: app/colors.c:58 +msgid "White keys pressed" msgstr "" -#: app/drivers/jack-output.c:327 -#, fuzzy, c-format -msgid "soundtracker" -msgstr "Tracker" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" +#: app/colors.c:59 +msgid "Black keys pressed" msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" -msgstr "Ausgabegerät (z.B. '/dev/audio'):" +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" +#: app/colors.c:61 +msgid "Black text pressed" msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 +#: app/colors.c:395 #, fuzzy, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "Erforderliches Soundausgabeformat nicht unterstützt.\n" +msgid "%s colors configuration" +msgstr "Tastatur-Konfiguration" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 -#, c-format -msgid "%s: Cannot set block size (%s)" +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Umkehren" + +#: app/colors.c:405 +msgid "Reset the color scheme to standard" msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" -msgstr "Eingabegerät (z.B. '/dev/audio'):" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" + +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/drivers/sun-input.c:242 +#: app/drivers/alsa1x.c:261 #, c-format -msgid "%s: Cannot record (%s)" +msgid "%f milliseconds" msgstr "" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Länge" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "ALSA-Gerätenummer:" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Aktuell" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Offset" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Wert" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +msgid "Unable to set channels number" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Einfügen" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Löschen" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" msgstr "" -"Grafischer\n" -"Hüllkurven-\n" -"Editor\n" -"nur in der\n" -"GNOME-Version" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Sustain" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Punkt" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Loop" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Anfang" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Ende" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Lade Modul" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Speichere Modul" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "WAV erstellen" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Speichere Song" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d Samples)" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Lade Sample" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Speichere Sample" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Lade Instrument" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Speichere Instrument" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8 Bits" -#: app/file-operations.c:175 -msgid "File" -msgstr "Datei" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16 Bits" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Operation nicht unterstützt." +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +#, fuzzy +msgid "Mono" +msgstr "Monitor" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Scope-Frequenz" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +#, fuzzy +msgid "Stereo" +msgstr "Stop" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Tracker-Frequenz" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "Diese Änderungen werden erst beim nächsten Neustart wirksam." -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "GUI-Konfiguration" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "Diese Änderungen werden erst beim Neustart des Samplens wirksam." -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "Hexadezimale Zahlen für Reihen" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Großbuchstaben für Hexadezimalzahlen" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "" + +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Auflösung:" + +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Kanäle:" + +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Frequenz [Hz]:" + +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Puffergröße:" -#: app/gui-settings.c:368 +#: app/drivers/alsa1x.c:914 #, fuzzy -msgid "Asynchronous (IT-style) pattern editing" -msgstr "Asynchrone Bearbeitung" +msgid "Number of Periods:" +msgstr "Anzahl der Kanäle:" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Geschätzte Ton Verzögerung: %f Mikrosekunden" + +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." msgstr "" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" msgstr "" -#: app/gui-settings.c:389 -#, fuzzy -msgid "Save window geometry on exit" -msgstr "Speichere Einstellungen beim _Verlassen" +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" msgstr "" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" msgstr "" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Puffergröße der Scopes [MB]" +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Format der Trackzeile" +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" msgstr "" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Spiele Song..." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Spiele Pattern..." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Lade Modul..." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Modul geladen." +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "Fehler beim Laden der Pattern." -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Speichere Modul..." +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Modul gespeichert." +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "Lade Sample..." +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Sample geladen" +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Speichere Sample..." +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Sample gespeichert." +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "Lade Instrument..." +#: app/drivers/alsa1x.c:1328 +msgid "Unable to enable timestamping for playback" +msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Instrumenten geladen." - -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Speichere Instrument..." +#: app/drivers/alsa1x.c:1329 +msgid "Unable to enable timestamping for capture" +msgstr "" -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Instrumenten gespeichert." +#: app/drivers/alsa1x.c:1335 +msgid "Unable to set timestamp type for playback" +msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Speichere Song..." +#: app/drivers/alsa1x.c:1336 +msgid "Unable to set timestamp type for capture" +msgstr "" -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "Song gespeichert." +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" +msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Frage" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" +#: app/drivers/alsa1x.c:1352 +msgid "Unable to prepare playback" msgstr "" -#: app/gui-subs.c:500 -#, fuzzy -msgid "No" -msgstr "Keine" +#: app/drivers/alsa1x.c:1353 +msgid "Unable to prepare capture" +msgstr "" -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Abbrechen" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Warnung" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "Fehler!" +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "Keine Einstellungen (zur Zeit), sorry!" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." msgstr "" -#: app/gui.c:301 +#: app/drivers/irix-output.c:178 #, fuzzy -msgid "Highlight rows (major / minor):" -msgstr "Reihen hervorheben:" +msgid "16 Bit output not supported." +msgstr "Operation nicht unterstützt." -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "Operation nicht unterstützt." + +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." msgstr "" +"Konnte %s nicht zum Samplen öffnen:\n" +"%s" -#: app/gui.c:506 -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" +#: app/drivers/oss.c:130 +#, fuzzy +msgid "OSS input: reading error" +msgstr "Instrumentenwechsel" + +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" msgstr "" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Geschätzte Ton Verzögerung: %f Mikrosekunden" + +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d Samples)" + +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "Eingabegerät (z.B. '/dev/dsp'):" + +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "Ausgabegerät (z.B. '/dev/dsp'):" + +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" msgstr "" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" msgstr "" -"Sind Sie sicher, daß Sie das aktuelle Projekt schließen wollen?\n" -"Alle Änderungen gehen verloren!" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Sind sie sicher, daß Sie die Datei überschreiben wollen?" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"Konnte %s nicht zum Samplen öffnen:\n" +"%s" -#: app/gui.c:638 -#, fuzzy -msgid "Error when opening pattern file!" -msgstr "Fehler beim Laden der Pattern." +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "Erforderliches Soundausgabeformat nicht unterstützt.\n" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" msgstr "" -#: app/gui.c:1719 -#, fuzzy -msgid "SoundTracker Startup" -msgstr "SoundTracker Tip des Tages" +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "" -#: app/gui.c:1778 app/gui.c:1815 -#, fuzzy -msgid "Loading..." -msgstr "Lade Sample..." +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/gui.c:1804 -msgid "Use SoundTracker!" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." msgstr "" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Lade XM..." - -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Speichere XM..." +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Modul als WAV erstellen..." +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "Speichere Song als XM..." +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "" -#: app/gui.c:1872 -#, fuzzy -msgid "Load current pattern..." -msgstr "Aktuelles Pattern" +#: app/drivers/jack.c:610 +msgid "Jack server is not running or some error occured." +msgstr "" -#: app/gui.c:1874 +#: app/drivers/sdl-output.c:76 #, fuzzy -msgid "Save current pattern..." -msgstr "Aktuelles Pattern" - -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Spiele Song" - -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Spiele Pattern" +msgid "Experimental SDL support." +msgstr "Operation nicht unterstützt." -#: app/gui.c:1968 -msgid "Stop" -msgstr "Stop" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "Ausgabegerät (z.B. '/dev/audio'):" -#: app/gui.c:1973 -#, fuzzy -msgid "Pat" -msgstr "Einfügen" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:1979 -#, fuzzy -msgid "Edited pattern" -msgstr "/Bearbeiten/_Pattern" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/sun-output.c:402 +#, c-format +msgid "SUN output (%s): Cannot handle %d Hz" msgstr "" -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Anzahl der Kanäle:" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "Erforderliches Soundausgabeformat nicht unterstützt.\n" -#: app/gui.c:2025 -#, fuzzy -msgid "Pattern Length" -msgstr "PatLänge" +#: app/drivers/sun-output.c:455 +#, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "" -#: app/gui.c:2060 -msgid "Set preferred accidental type" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" msgstr "" -#: app/gui.c:2066 +#: app/drivers/sun-input.c:77 #, fuzzy -msgid "Measure" -msgstr "Rechteck" +msgid "SUN input: reading error" +msgstr "Instrumentenwechsel" -#: app/gui.c:2067 -msgid "Enable row highlighting" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" msgstr "" -#: app/gui.c:2093 -#, fuzzy -msgid "Other..." -msgstr "Andere Tasten..." +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "Eingabegerät (z.B. '/dev/audio'):" -#: app/gui.c:2129 -msgid "Change effect column editing direction" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" msgstr "" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" +#: app/drivers/sun-input.c:273 +#, c-format +msgid "SUN input (%s): Cannot handle %d Hz" msgstr "" -#: app/gui.c:2216 -#, fuzzy -msgid "Editing" -msgstr "_Bearbeiten" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "Erforderliches Soundausgabeformat nicht unterstützt.\n" -#: app/gui.c:2223 -msgid "Octave" -msgstr "Oktave" +#: app/drivers/sun-input.c:332 +#, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "" -#: app/gui.c:2232 -msgid "Jump" -msgstr "Springe" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Länge" -#: app/gui.c:2241 -msgid "Instr" -msgstr "Instr" +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Aktuell" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Sample" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Offset" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Wert" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Einfügen" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "VolFade" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "Löschen" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "VibSpeed" +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"Grafischer\n" +"Hüllkurven-\n" +"Editor\n" +"nur in der\n" +"GNOME-Version" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "VibTiefe" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Sustain" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "VibSweep" +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Punkt" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Kann Datei nicht öffnen." +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "Loop" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sinus" +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "Anfang" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Rechteck" +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Ende" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "Säge Fall" +#: app/file-operations.c:127 +#, c-format +msgid "" +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "Säge Steig" +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Instrumenten-Editor" +#: app/file-operations.c:245 +msgid "All files" +msgstr "" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Lautstärken-Hüllkurve" +#: app/file-operations.c:388 +msgid "File" +msgstr "Datei" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Balance-Hüllkurve" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Lade Instrument..." +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Speichere Instrument..." +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "Mixer" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "Lade XI" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "GUI-Konfiguration" -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "Speichere XI" +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Scope-Frequenz" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Vibrato-Typ:" +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Tracker-Frequenz" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Note:" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Hexadezimale Zahlen für Reihen" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Initialisieren" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Großbuchstaben für Hexadezimalzahlen" -#: app/keys.c:57 -msgid "" -msgstr "" +#: app/gui-settings.c:343 +#, fuzzy +msgid "FT2-like volume column" +msgstr "Sanfte Luatstärkenerhöhung" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" msgstr "" -"Die Taste, die die spezielle keyoff-Note für FastTracker-Module einfügt." -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" msgstr "" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." +#: app/gui-settings.c:361 +msgid "Decimal volume representation" msgstr "" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "Tasten für obere Oktave..." +#: app/gui-settings.c:367 +#, fuzzy +msgid "Asynchronous (IT-style) pattern editing" +msgstr "Asynchrone Bearbeitung" -#: app/keys.c:146 -msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" msgstr "" -"Dies sind die Tasten in der oberen Hälfte der Tastatur. Die c-Taste liegt " -"normalerweise rechts neben der TAB-Taste. Die restlichen Tasten sind in der " -"Art einer Klaviertastatur angeordnet, inklusive der Zifferntasten darüber." -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Taste für untere Oktave..." - -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -"Dies sind die Tasten in der unteren Hälfte der Tastatur. Die c-Taste ist " -"normalerweise die erste Zeichentaste rechts neben der Shift-Taste. Die " -"restlichen Tasten sind in der Art einer Klaviertastatur angeordnet, " -"inklusive der Tastenreihe darüber." -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "Andere Tasten..." +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" +msgstr "" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Verschiedene andere Tasten" +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "" -#: app/keys.c:513 -msgid "Function" -msgstr "Funktion" +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Zuordnung" +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Tastatur-Konfiguration" +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Tastengruppen-Erklärung" +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Tastenerklärung" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Modifizierer:" +#: app/gui-settings.c:430 +#, fuzzy +msgid "Save window geometry on exit" +msgstr "Speichere Einstellungen beim _Verlassen" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Lerne gewählte Taste" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Lerne alle Tasten" +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/keys.c:661 +#: app/gui-settings.c:451 msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." msgstr "" -"Bitte drücken Sie die gewünschte Tastenkombination!\n" -"Klicken Sie in die linke Liste, um abzubrechen" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "OK" +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Auswahl:" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Übernehmen" +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Puffergröße der Scopes [MB]" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." -msgstr "" -"Die Datei für die Tastaturkonfiguration ist fehlerhaft.\n" -"Bitte verwenden Sie den Dialog für die Tastatur-Konfiguration." +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Sample geladen" -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" +#: app/gui-settings.c:484 +msgid "Scopes" msgstr "" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" -msgstr "" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Bearbeiten" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:490 +msgid "Strobo" msgstr "" -"Automatische Tastenkonfiguration nicht erfolgreich.\n" -"Bitte verwenden Sie den Dialog für die Tastatur-Konfiguration\n" -"im Menü Einstellungen." -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" msgstr "" -"Sind Sie sicher, daß Sie das tun wollen?\n" -"Alle Änderungen gehen verloren!" -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +#: app/gui-settings.c:494 +msgid "Minmax" msgstr "" -"Sind Sie sicher, daß Sie das Programm beenden wollen?\n" -"Alle Änderungen gehen verloren!" -#: app/menubar.c:419 -msgid "_Open..." -msgstr "Ö_ffnen..." +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Speichern _unter..." +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Format der Trackzeile" -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Speichere Modul als _WAV..." +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Speichere XM ohne Samples..." +#: app/gui-settings.c:573 +#, fuzzy +msgid "Tracker colors configuration" +msgstr "Tastatur-Konfiguration" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "_Beenden" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "_Alles löschen" +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Spiele Song..." -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Nur _Pattern löschen" +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Spiele Pattern..." -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "Modul _optimieren" +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "Lade Modul..." -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "_Ausschneiden" - -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Kopieren" - -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "E_infügen" +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "Modul geladen." -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "Noten _löschen" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Speichere Modul..." -#: app/menubar.c:480 -#, fuzzy -msgid "_Insert track" -msgstr "_Einfügen" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "Modul gespeichert." -#: app/menubar.c:482 -#, fuzzy -msgid "_Delete track" -msgstr "_Löschen" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "Lade Sample..." -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "cmd Wert erhöhen" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Sample geladen" -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "cmd Wert verringern" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Speichere Sample..." -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "_Markier Modus" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Sample gespeichert." -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "Blockmarkierungen _löschen" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "Lade Instrument..." -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "Interpoliere Effekte" +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Instrumenten geladen." -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "" +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Speichere Instrument..." -#: app/menubar.c:510 -#, fuzzy -msgid "Transpose half-note down" -msgstr "Halbe Note runter" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Instrumenten gespeichert." -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "" +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Speichere Song..." -#: app/menubar.c:514 -#, fuzzy -msgid "Transpose octave down" -msgstr "Oktave runter" +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "Song gespeichert." -#: app/menubar.c:526 -#, fuzzy -msgid "P_aste" -msgstr "Einfügen" +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "Fehler!" -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "_Jazz-Edit-Modus" +#: app/gui-subs.c:414 +msgid "Question" +msgstr "Frage" -#: app/menubar.c:534 -msgid "_Record keyreleases" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." msgstr "" -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "_Transposition..." - -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "_Pattern" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "_Track" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Auswahl" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Warnung" -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_Finde unbenutztes Pattern" +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "GUI-Konfiguration" -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Kopiere aktuelles zu unbenutztem Pattern" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "_Lösche unbenutzte Pattern" +#: app/gui.c:260 +#, fuzzy +msgid "Highlight rows (major / minor):" +msgstr "Reihen hervorheben:" -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "_Packe Pattern" +#: app/gui.c:330 +msgid "" +msgstr "" -#: app/menubar.c:592 +#: app/gui.c:451 #, fuzzy -msgid "_Save Current Pattern" -msgstr "Aktuelles Pattern" +msgid "Saving module failed" +msgstr "Speichere Modul..." -#: app/menubar.c:594 -#, fuzzy -msgid "L_oad Pattern" -msgstr "_Pattern" +#: app/gui.c:535 +msgid "File output" +msgstr "" -#: app/menubar.c:599 +#: app/gui.c:612 #, fuzzy -msgid "Sh_rink Current Pattern" -msgstr "Aktuelles Pattern" +msgid "Can't open file for writing" +msgstr "Kann Datei nicht zum Schreiben öffnen." -#: app/menubar.c:601 +#: app/gui.c:618 #, fuzzy -msgid "_Expand Current Pattern" -msgstr "Aktuelles Pattern" +msgid "Can't change file ownership" +msgstr "Kann Datei nicht zum Schreiben öffnen." -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." msgstr "" -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" +#: app/gui.c:660 +msgid "An error occured while writing to file" msgstr "" -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Lade XI..." +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_Speichere XI..." +#: app/gui.c:715 +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_Lösche aktuelles" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"Sind Sie sicher, daß Sie das aktuelle Projekt schließen wollen?\n" +"Alle Änderungen gehen verloren!" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "Lösche unbenutzte _Instrumente" +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "Fehler beim Laden der Pattern." -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" msgstr "" -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "_Vorherige Schriftart" +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "Anfang" -#: app/menubar.c:642 -msgid "_Next font" -msgstr "_Nächste Schriftart" +#: app/gui.c:2178 app/gui.c:2206 +#, fuzzy +msgid "Loading..." +msgstr "Lade Sample..." -#: app/menubar.c:647 -msgid "Change preferred _accidental type" +#: app/gui.c:2195 +msgid "Use SoundTracker!" msgstr "" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" msgstr "" +"Sind Sie sicher, daß Sie das Programm beenden wollen?\n" +"Alle Änderungen gehen verloren!" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Zeige _Oszilloskope" +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Tracker" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "_Tastatur-Konfiguration..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "_Audio-Konfiguration..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "_GUI-Konfiguration..." +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "Lade Sample..." -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "_MIDI-Konfiguration..." +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" -#: app/menubar.c:679 -msgid "Disable splash screen" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" msgstr "" -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Speichere Einstellungen jetzt" +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Speichere Einstellungen beim _Verlassen" +#: app/gui.c:2400 +#, fuzzy +msgid "Extended pattern (*.xp)" +msgstr "/Bearbeiten/_Pattern" -#: app/menubar.c:690 -msgid "_About..." -msgstr "Ü_ber..." +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" +msgstr "" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Zeige _Tips..." +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Lade Modul" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "_XM-Effekte..." +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" +msgstr "" -#: app/menubar.c:704 -msgid "_File" -msgstr "_Datei" +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Speichere Modul" -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Modul" +#: app/gui.c:2434 +#, fuzzy +msgid "Save the current module" +msgstr "Aktuelles Pattern" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Bearbeiten" +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "WAV erstellen" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Instrument" +#: app/gui.c:2436 +#, fuzzy +msgid "Render the current module as WAV file" +msgstr "Modul als WAV erstellen..." -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Einstellungen" +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Speichere XM ohne Samples..." -#: app/menubar.c:711 -msgid "_Help" -msgstr "_Hilfe" +#: app/gui.c:2439 +#, fuzzy +msgid "Load current pattern..." +msgstr "Aktuelles Pattern" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/gui.c:2440 +#, fuzzy +msgid "Save current pattern..." +msgstr "Aktuelles Pattern" + +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Spiele Song" + +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Spiele Pattern" + +#: app/gui.c:2525 +msgid "Play From Cursor" msgstr "" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Instrumentenname" +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "Spiele Song" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#smpl" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Stop" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Samplename" +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Linear" +#: app/gui.c:2562 +#, fuzzy +msgid "Pat" +msgstr "Einfügen" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/gui.c:2568 +#, fuzzy +msgid "Edited pattern" +msgstr "/Bearbeiten/_Pattern" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Modul-Info" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "" -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Songname:" +#: app/gui.c:2583 +#, fuzzy +msgid "Pattern Length" +msgstr "PatLänge" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Frequenzen:" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "ProTracker-Modus" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Anzahl der Kanäle:" -#: app/module-info.c:395 -#, c-format -msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +#: app/gui.c:2632 +msgid "Set preferred accidental type" msgstr "" -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" +#: app/gui.c:2638 +#, fuzzy +msgid "Measure" +msgstr "Rechteck" + +#: app/gui.c:2639 +msgid "Enable row highlighting" msgstr "" -#: app/playlist.c:535 +#: app/gui.c:2660 #, fuzzy -msgid "Remove current playlist entry" -msgstr "Aktuelles Pattern" +msgid "Other..." +msgstr "Andere Tasten..." -#: app/playlist.c:543 -msgid "Add + Cpy" +#: app/gui.c:2687 +msgid "Change effect column editing direction" msgstr "" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" msgstr "" -#: app/playlist.c:548 -msgid "Add Free" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" msgstr "" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" +#: app/gui.c:2740 +msgid "Pitchbend" msgstr "" -#: app/playlist.c:560 -#, fuzzy -msgid "Len" -msgstr "Länge" +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "" -#: app/playlist.c:574 +#: app/gui.c:2760 #, fuzzy -msgid "Song length" -msgstr "Song-Länge" +msgid "Editing" +msgstr "_Bearbeiten" -#: app/playlist.c:580 -#, fuzzy -msgid "Rstrt" +#: app/gui.c:2767 +msgid "Octave" +msgstr "Oktave" + +#: app/gui.c:2776 +msgid "Jump" +msgstr "Springe" + +#: app/gui.c:2785 +msgid "Instr" msgstr "Instr" -#: app/playlist.c:593 -#, fuzzy -msgid "Song restart position" -msgstr "Restart-Pos" +#: app/gui.c:2801 +msgid "Sample" +msgstr "Sample" -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" +#: app/gui.c:2827 +msgid "dB" msgstr "" -"Ein Verzeichnis namens '.soundtracker' wurde in Ihrem Home-Verzeichnis \n" -"angelegt, um Konfigurationsdateien darin zu speichern.\n" -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Keine Loop" - -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "PingPong" +#: app/gui.c:2866 +#, c-format +msgid "Welcome to %s!" +msgstr "" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8 Bits" +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16 Bits" +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Kann Datei nicht öffnen." -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Sample-Editor" +#: app/instrument-editor.c:209 +#, fuzzy +msgid "Saving instrument failed." +msgstr "Speichere Instrument..." -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Lautstärke" +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "Aktuelles Instrument" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Balance" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sinus" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Feineinstellung" +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Rechteck" -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Auswahl:" +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "Säge Fall" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Keine" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "Säge Steig" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Alle" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" +msgstr "" -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Länge:" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Instrumenten-Editor" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Schleife setzen" +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Lautstärken-Hüllkurve" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "RelNote" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Balance-Hüllkurve" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Lade Sample..." +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Lade Instrument" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Speichere WAV..." +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "Speichere Bereich als WAV..." +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Speichere Instrument" -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "Speichere WAV" +#: app/instrument-editor.c:297 +#, fuzzy +msgid "Save the current instrument" +msgstr "Aktuelles Instrument" -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "Speichere Bereich" +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "Lade XI" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Monitor" +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "Speichere XI" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Lautstärke" +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "Lautstärke aufdrehen" -#: app/sample-editor.c:425 +#: app/instrument-editor.c:344 #, fuzzy -msgid "Trim" -msgstr "Tremor" +msgid "Vibrato:" +msgstr "Vibrato" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Zoom in Auswahl" +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Zeige alles" +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "VibSpeed" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Zoom in (+50%)" +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "VibTiefe" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Zoom out (-50%)" +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "VibSweep" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Umkehren" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Note:" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Ausschneiden" +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "Initialisieren" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Entfernen" +#: app/keys.c:58 +msgid "" +msgstr "" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Kopieren" +#: app/keys.c:134 +msgid "KOFF" +msgstr "" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Einfügen" +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "" +"Die Taste, die die spezielle keyoff-Note für FastTracker-Module einfügt." -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "Sample leeren" +#: app/keys.c:136 +msgid "JMP+" +msgstr "" -#: app/sample-editor.c:500 -#, fuzzy -msgid "Crop" -msgstr "Kopieren" +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "" -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(keine Auswahl)" +#: app/keys.c:138 +msgid "JMP-" +msgstr "" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." msgstr "" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Spiele Song" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Speichere Modul..." + +#: app/keys.c:142 +msgid "RecMod" msgstr "" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Lesefehler." +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Spiele Pattern..." -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Lade Stereo Sample" +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "Spiele Pattern" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Spiele Pattern" + +#: app/keys.c:146 +msgid "RecPat" msgstr "" -"Du hast ein Stereo Sample gewählt!\n" -"(Soundtracker kann nur Mono Samples verarbeiten!)\n" -"\n" -"Bitte wähle den zu ladenen Kanal:" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Links" +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Spiele Pattern..." -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Mix" +#: app/keys.c:148 +msgid "PlayCur" +msgstr "" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Rechts" +#: app/keys.c:148 +msgid "Play module from cursor." +msgstr "" + +#: app/keys.c:150 +msgid "RecCur" +msgstr "" -#: app/sample-editor.c:1575 +#: app/keys.c:150 #, fuzzy -msgid "Signed" -msgstr "Sinus" +msgid "Play module from cursor + recording." +msgstr "Spiele Pattern..." -#: app/sample-editor.c:1575 +#: app/keys.c:152 #, fuzzy -msgid "Unsigned" -msgstr "Sinus" +msgid "PlayRow" +msgstr "Spiele Song" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "" +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Aktuelles Pattern" -#: app/sample-editor.c:1576 -msgid "Big-Endian" +#: app/keys.c:154 +msgid "PlayBlk" msgstr "" -#: app/sample-editor.c:1577 +#: app/keys.c:154 #, fuzzy -msgid "Mono" -msgstr "Monitor" +msgid "Play selected block." +msgstr "Lerne gewählte Taste" -#: app/sample-editor.c:1577 -#, fuzzy -msgid "Stereo" -msgstr "Stop" +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Tasten für obere Oktave..." -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "Lade einfaches Sample" +#: app/keys.c:167 +msgid "" +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." +msgstr "" +"Dies sind die Tasten in der oberen Hälfte der Tastatur. Die c-Taste liegt " +"normalerweise rechts neben der TAB-Taste. Die restlichen Tasten sind in der " +"Art einer Klaviertastatur angeordnet, inklusive der Zifferntasten darüber." -#: app/sample-editor.c:1597 +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Taste für untere Oktave..." + +#: app/keys.c:173 msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." msgstr "" -"Du hast ein Sample von unbekannten Format gewählt.\n" -"Du kannst du die unformatierten Daten jetzt laden.\n" -"\n" -"Bitte wählen ein Format:" +"Dies sind die Tasten in der unteren Hälfte der Tastatur. Die c-Taste ist " +"normalerweise die erste Zeichentaste rechts neben der Shift-Taste. Die " +"restlichen Tasten sind in der Art einer Klaviertastatur angeordnet, " +"inklusive der Tastenreihe darüber." -#: app/sample-editor.c:1623 -#, fuzzy -msgid "Word format:" -msgstr "Format der Trackzeile" +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "Andere Tasten..." -#: app/sample-editor.c:1670 -#, fuzzy -msgid "Sampling Rate:" -msgstr "Samplen" +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Verschiedene andere Tasten" -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "" +#: app/keys.c:578 +msgid "Function" +msgstr "Funktion" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "Zuordnung" -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "OK" +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Tastatur-Konfiguration" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Kann Sample nicht lesen" +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Tastengruppen-Erklärung" -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." -msgstr "Sample ist zu lang für aktuelles Mixer-Modul. Lade trotzdem." +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Tastenerklärung" -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Kann nur 8 und 16 Bit Samples mit bis zu 2 Kanälen verarbeiten" +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Modifizierer:" -#: app/sample-editor.c:1968 -msgid "Please select region first." +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "Lerne gewählte Taste" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "Lerne alle Tasten" + +#: app/keys.c:702 +msgid "" +"Please press the desired key combination!\n" +"Click into left list to cancel" msgstr "" +"Bitte drücken Sie die gewünschte Tastenkombination!\n" +"Klicken Sie in die linke Liste, um abzubrechen" -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Starte Sampling" +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "Kein Treiber zum Samplen vorhanden" +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Sampling-Fenster" +#: app/keys.c:1028 +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." +msgstr "" +"Automatische Tastenkonfiguration nicht erfolgreich.\n" +"Bitte verwenden Sie den Dialog für die Tastatur-Konfiguration\n" +"im Menü Einstellungen." -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" msgstr "" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/menubar.c:126 +msgid "" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." +msgstr "" -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" msgstr "" -"Aufgezeichnetes Sample ist zu lang für aktuelles Mixer-Modul. Verwende es " -"trotzdem." +"Sind Sie sicher, daß Sie das tun wollen?\n" +"Alle Änderungen gehen verloren!" -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normalisieren" +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "" -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Ausführen" +#: app/mixers/kbfloat.c:838 +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Lautstärke-Anpassung" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Lineare Lautstärkenverringerung auf Markierung" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Cyclic" +msgstr "" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Links [%]:" +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" +#: app/module-info.c:64 +msgid "Coupled" msgstr "" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" msgstr "" -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Rechts [%]:" +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/module-info.c:481 +msgid "Period" msgstr "" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/module-info.c:484 +msgid "s" msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/module-info.c:499 +msgid "Mode" msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Note:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." msgstr "" -#: app/tips-dialog.c:50 -msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Instrumentenname" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#smpl" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Samplename" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "Linear" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Modul-Info" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Songname:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Frequenzen:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "ProTracker-Modus" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Instrumenten-Editor" + +#: app/module-info.c:765 +msgid "Ins. 1" msgstr "" -"Willkommen zu SoundTracker!\n" -"\n" -"Wenn Ihnen dieser Typ von Programm neu ist, so werden sie sicher erst einmal " -"einige\n" -"XM- oder MOD-Dateien holen wollen, um mit ihnen zu spielen." -#: app/tips-dialog.c:55 -msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +#: app/module-info.c:768 +msgid "Smp. 1" msgstr "" -"Sie können die Ansprechzeit der Tastatur in SoundTracker's Editier-Modus " -"geringer halten,\n" -"indem Sie die Puffergröße für den Editierausgang verringern\n" -"(Menü Einstellungen, Audio-Konfiguration)." -#: app/tips-dialog.c:59 -msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +#: app/module-info.c:770 +msgid "Ins. 2" msgstr "" -"Sie können die Loop-Punkte im Sample-Editor einstellen, indem Sie\n" -"die Shift-Taste halten und die rechten und linken Maustasten benutzen.\n" -"\n" -#: app/tips-dialog.c:62 -msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +#: app/module-info.c:772 +msgid "Smp. 2" msgstr "" -"Wenn Sie mehr über Tracker und die Arbeitsweise der einzelnen Befehle wissen " -"wollen, \n" -"schauen Sie unter http://www.united-trackers.org/ nach." -#: app/tips-dialog.c:65 -msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +#: app/module-info.c:781 +msgid "I1 => I2" msgstr "" -"Sie können Samples eines Instruments einzelnen Tasten zuweisen, indem Sie \n" -"das Sample aktivieren und dann auf die Tastatur im Instrumenten-Editor " -"klicken." -#: app/tips-dialog.c:69 -msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Aktuelles Instrument" + +#: app/module-info.c:786 +msgid "I1 <=> I2" msgstr "" -"Ist dein Cursor in einem Zahlen Eingabefeld gefangen?\n" -"Einfach nur Enter oder Tab drücken um dich zu befreien!" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "SoundTracker Tip des Tages" +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Speichere Instrument" -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Vorheriger Tip" +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Nächster Tip" +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Zeige Tip nächstes Mal" +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" -#: app/track-editor.c:113 -msgid "Arpeggio" +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "Tausche 1 <-> 2" + +#: app/module-info.c:808 +msgid "Mixing balance" msgstr "" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "Porta rauf" +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "Porta runter" +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" +#: app/module-info.c:863 +msgid "Preview" msgstr "" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "Vibrato" +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" +#: app/module-info.c:868 +msgid "Mix!" msgstr "" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Feineinstellung" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "RelNote" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "" + +#: app/playlist.c:511 +#, fuzzy +msgid "Remove current playlist entry" +msgstr "Aktuelles Pattern" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Länge" + +#: app/playlist.c:548 +#, fuzzy +msgid "Song length" +msgstr "Song-Länge" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Instr" + +#: app/playlist.c:567 +#, fuzzy +msgid "Song restart position" +msgstr "Restart-Pos" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"Ein Verzeichnis namens '.soundtracker' wurde in Ihrem Home-Verzeichnis \n" +"angelegt, um Konfigurationsdateien darin zu speichern.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Keine Loop" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "PingPong" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8 Bits" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16 Bits" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Sample-Editor" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "Lautstärke" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Balance" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Auswahl:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "Keine" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Alle" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Länge:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "Schleife setzen" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Lade Sample" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "Speichere XM ohne Samples..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Speichere Sample" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "Speichere XM ohne Samples..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "Speichere Bereich als WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "Speichere WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "Speichere Bereich" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Lautstärke" + +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "Tremor" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "Zoom in Auswahl" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "Zeige alles" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "Zoom in (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "Zoom out (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Umkehren" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Ausschneiden" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Entfernen" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Kopieren" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Einfügen" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "Sample leeren" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Kopieren" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(keine Auswahl)" + +#: app/sample-editor.c:1279 +msgid "Out of memory for copybuffer." +msgstr "" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Mix" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Links" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Rechts" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d Samples)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "" + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "Lesefehler." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"Du hast ein Stereo Sample gewählt!\n" +"(Soundtracker kann nur Mono Samples verarbeiten!)\n" +"\n" +"Bitte wähle den zu ladenen Kanal:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "Starte Sampling" + +#: app/sample-editor.c:1756 +#, fuzzy +msgid "Signed" +msgstr "Sinus" + +#: app/sample-editor.c:1756 +#, fuzzy +msgid "Unsigned" +msgstr "Sinus" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "Lade einfaches Sample" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"Du hast ein Sample von unbekannten Format gewählt.\n" +"Du kannst du die unformatierten Daten jetzt laden.\n" +"\n" +"Bitte wählen ein Format:" + +#: app/sample-editor.c:1798 +#, fuzzy +msgid "Word format:" +msgstr "Format der Trackzeile" + +#: app/sample-editor.c:1829 +#, fuzzy +msgid "Sampling Rate:" +msgstr "Samplen" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Kann Sample nicht lesen" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "Sample ist zu lang für aktuelles Mixer-Modul. Lade trotzdem." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "Kann nur 8 und 16 Bit Samples mit bis zu 2 Kanälen verarbeiten" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Kann Datei nicht zum Schreiben öffnen." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "" + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "Kein Treiber zum Samplen vorhanden" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Sampling-Fenster" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "_Alles löschen" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Samplen" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"Du hast ein Stereo Sample gewählt!\n" +"(Soundtracker kann nur Mono Samples verarbeiten!)\n" +"\n" +"Bitte wähle den zu ladenen Kanal:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Lade Stereo Sample" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"Aufgezeichnetes Sample ist zu lang für aktuelles Mixer-Modul. Verwende es " +"trotzdem." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Lautstärke-Anpassung" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normalisieren" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "Lineare Lautstärkenverringerung auf Markierung" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Links [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Rechts [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"Willkommen zu SoundTracker!\n" +"\n" +"Wenn Ihnen dieser Typ von Programm neu ist, so werden sie sicher erst einmal " +"einige\n" +"XM- oder MOD-Dateien holen wollen, um mit ihnen zu spielen." + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"Sie können die Ansprechzeit der Tastatur in SoundTracker's Editier-Modus " +"geringer halten,\n" +"indem Sie die Puffergröße für den Editierausgang verringern\n" +"(Menü Einstellungen, Audio-Konfiguration)." + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"Sie können die Loop-Punkte im Sample-Editor einstellen, indem Sie\n" +"die Shift-Taste halten und die rechten und linken Maustasten benutzen.\n" +"\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"Wenn Sie mehr über Tracker und die Arbeitsweise der einzelnen Befehle wissen " +"wollen, \n" +"schauen Sie unter http://www.united-trackers.org/ nach." + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Sie können Samples eines Instruments einzelnen Tasten zuweisen, indem Sie \n" +"das Sample aktivieren und dann auf die Tastatur im Instrumenten-Editor " +"klicken." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" +"Ist dein Cursor in einem Zahlen Eingabefeld gefangen?\n" +"Einfach nur Enter oder Tab drücken um dich zu befreien!" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "Vorheriger Tip" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "Nächster Tip" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "Zeige Tip nächstes Mal" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "SoundTracker Tip des Tages" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "Porta rauf" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "Porta runter" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "Vibrato" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "Tremolo" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "Setze Balance" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Sample gespeichert." + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "setze Lautstärke" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Positionssprung" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "Pattern Umbruch" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "Setze Tempo/BPM" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "Setze globale Lautstärke" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "Globale Lautstärkenveränderung" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "Setze Position der Hüllkurve" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "Balance Slide" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "LP Filter Resonanz" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "Tremor" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "LP-Filter Ende" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "Feine Porta rauf" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "Feine Porta runter" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "Setze Gliss Kontrolle" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "Setze Vibrato Kontrolle" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "Pattern" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "Setze Tremolo Kontrolle" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "Sanfte Luatstärkenerhöhung" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "Sanfte Lautstärkenverringerung" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "Noten Ende" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "Noten Verzögerung" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "Pattern Verzögerung" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "Laustärke runterdrehen" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "Lautstärke aufdrehen" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "Setzte Vibrato Geschwindigkeit" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "Balance nach links" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "Balance nach rechts" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "Sinus" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "Säge runter" + +#: app/track-editor.c:203 +msgid "square" +msgstr "Rechteck" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +#, fuzzy +msgid "Extra fine porta up" +msgstr "Feine Porta rauf" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "Feine Porta runter" + +#: app/track-editor.c:257 +#, fuzzy +msgid "None ]" +msgstr "Keine" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Jazz-Editor:" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Tracker" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "Schriftarten Liste" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "Schriftart hinzufügen" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "Schriftart löschen" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "Schriftart übernehmen" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "Schriftart wählen..." + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "Ganzer Song" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "Alle Pattern" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "Aktuelles Pattern" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "Aktueller Track" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Aktuelles Instrument" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "Alle Instrumente" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "Halbe Note hoch" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "Halbe Note runter" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "Oktave hoch" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "Oktave runter" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "Tausche 1 <-> 2" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "Ändere 1 -> 2" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "Transpositions-Werkzeuge" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "Bereich der Anwendung:" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Noten-Transposition" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Instrumentenwechsel" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Instrument 1:" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Aktuelles Instrument" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Instrument 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "Patternlänge außerhalb des Bereiches: %d.\n" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Fehler beim Laden der Pattern." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Instrumenten geladen." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Instrumentenwechsel" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Balance-Hüllkurve" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Balance-Hüllkurve" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Balance-Hüllkurve" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "Ungültiger vibtype %d, verwende Sinus.\n" + +#: app/xm.c:678 app/xm.c:1233 +msgid "Out of memory error!" +msgstr "" + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "Datei ist kein XI-Instrument." + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Instrumenten geladen." + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Balance-Hüllkurve" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Balance-Hüllkurve" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Instrumenten geladen." + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "Ungültiger vibtype %d, verwende Sinus.\n" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "Fehler beim Laden der Pattern." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Kann Datei nicht öffnen" + +#: app/xm.c:1215 +#, fuzzy +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" +"XM-Header-Länge != 276. Vielleicht ein pre-0.0.12 SoundTracker-Modul? :-)\n" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "Fehler beim Laden der Pattern." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"Modul enthält Sample(s), die zu lang für den aktuellen Mixer sind..\n" +"Maximale Sample-Länge ist %d." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "Kein FastTracker XM und kein unterstütztes MOD-Format!" + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "" + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "" + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "" + +#: app/xm.c:1761 app/xm.c:1787 +#, fuzzy +msgid "Error during saving pattern!" +msgstr "Fehler beim Laden der Pattern." + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "" + +#: app/midi-settings.c:414 +#, fuzzy +msgid "Channel" +msgstr "Kanäle:" + +#: app/midi-settings.c:423 +#, fuzzy +msgid "Client number" +msgstr "Kanal Benummerung" + +#: app/midi-settings.c:434 +#, fuzzy +msgid "Port number" +msgstr "Porta rauf" + +#: app/midi-settings.c:453 +#, fuzzy +msgid "Input" +msgstr "Instr" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "" + +#: app/midi-settings.c:468 +#, fuzzy +msgid "Output" +msgstr "Editierausgang" + +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "" + +#: app/midi-settings.c:492 +#, fuzzy +msgid "Misc" +msgstr "Mixer" + +#: app/midi-settings.c:532 +#, fuzzy +msgid "MIDI Configuration" +msgstr "_MIDI-Konfiguration..." + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Pattern" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "_Track" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "Noten _löschen" + +#: soundtracker.glade:104 soundtracker.glade:527 +#, fuzzy +msgid "_Insert track" +msgstr "_Einfügen" + +#: soundtracker.glade:112 soundtracker.glade:536 +#, fuzzy +msgid "_Delete track" +msgstr "_Löschen" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "cmd Wert erhöhen" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "cmd Wert verringern" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "Blockmarkierungen _löschen" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "Interpoliere Effekte" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Datei" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "Ö_ffnen..." + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Speichern _unter..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Speichere Modul als _WAV..." + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "Speichere XM ohne Samples..." + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Modul" + +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "/Modul/Lösche _alle" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Nur _Pattern löschen" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "Modul _optimieren" + +#: soundtracker.glade:346 +msgid "_Set Optimal Amplification" +msgstr "" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Bearbeiten" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "_Jazz-Edit-Modus" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "_Transposition..." + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Pattern" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "_Track" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Auswahl" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "_Markier Modus" + +#: soundtracker.glade:614 +#, fuzzy +msgid "Transpose half-note up" +msgstr "Halbe Note runter" + +#: soundtracker.glade:622 +#, fuzzy +msgid "Transpose half-note down" +msgstr "Halbe Note runter" + +#: soundtracker.glade:630 +#, fuzzy +msgid "Transpose octave up" +msgstr "Oktave runter" + +#: soundtracker.glade:638 +#, fuzzy +msgid "Transpose octave down" +msgstr "Oktave runter" + +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "_Pattern" + +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "Aktuelles Pattern" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_Finde unbenutztes Pattern" + +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Kopiere aktuelles zu unbenutztem Pattern" + +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "Aktuelles Pattern" + +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" msgstr "" -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "Tremolo" - -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "Setze Balance" +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "_Lösche unbenutzte Pattern" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Positionssprung" +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "_Packe Pattern" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "setze Lautstärke" +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "Aktuelles Pattern" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "Pattern Umbruch" +#: soundtracker.glade:753 +#, fuzzy +msgid "_Expand Current Pattern" +msgstr "Aktuelles Pattern" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "Setze Tempo/BPM" +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Setze globale Lautstärke" +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "Globale Lautstärkenveränderung" +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "Aktueller Track" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "" +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "Aktueller Track" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "Setze Position der Hüllkurve" +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "Aktueller Track" -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "Balance Slide" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Instrument" -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "LP Filter Resonanz" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "Lade XI" -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "" +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "Speichere XI" -#: app/track-editor.c:142 -msgid "Tremor" -msgstr "Tremor" +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_Lösche aktuelles" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "LP-Filter Ende" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "Lösche unbenutzte _Instrumente" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "Feine Porta rauf" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Einstellungen" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "Feine Porta runter" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Zeige _Oszilloskope" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "Setze Gliss Kontrolle" +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "" -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "Setze Vibrato Kontrolle" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Tracker" -#: app/track-editor.c:157 -msgid "Set finetune" +#: soundtracker.glade:913 +msgid "_Flicker-free Scrolling" msgstr "" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Setze Schleifen-Start/Ende" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "_Vorherige Schriftart" -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "Setze Tremolo Kontrolle" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "_Nächste Schriftart" -#: app/track-editor.c:161 -msgid "Retrig note" +#: soundtracker.glade:944 +msgid "Change Preferred _Accidental Type" msgstr "" -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "Sanfte Luatstärkenerhöhung" +#: soundtracker.glade:953 +msgid "Change Effect Column _Editing Direction" +msgstr "" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "Sanfte Lautstärkenverringerung" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "Tastatur-Konfiguration" -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "Noten Ende" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "Audio-Konfiguration" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "Noten Verzögerung" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "GUI-Konfiguration" -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "Pattern Verzögerung" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "_MIDI-Konfiguration..." -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "Laustärke runterdrehen" +#: soundtracker.glade:1016 +msgid "_Disable Splash Screen" +msgstr "" -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "Lautstärke aufdrehen" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_Speichere Einstellungen jetzt" -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "Setzte Vibrato Geschwindigkeit" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Speichere Einstellungen beim _Verlassen" -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "Balance nach links" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_Hilfe" -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "Balance nach rechts" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "Ãœ_ber..." -#: app/track-editor.c:184 -msgid "sine" -msgstr "Sinus" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "Zeige _Tips..." -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "Säge runter" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "_XM-Effekte..." -#: app/track-editor.c:186 -msgid "square" -msgstr "Rechteck" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Spiele Song" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, fuzzy, c-format -msgid "None ]" -msgstr "Keine" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Spiele Song" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Jazz-Editor:" +#, fuzzy +#~ msgid "SoundTracker Startup" +#~ msgstr "SoundTracker Tip des Tages" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Tracker" +#~ msgid "Vibrato Type:" +#~ msgstr "Vibrato-Typ:" -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "Schriftarten Liste" +#~ msgid "VolFade" +#~ msgstr "VolFade" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "Schriftart hinzufügen" +#~ msgid "Set loop begin/loop" +#~ msgstr "Setze Schleifen-Start/Ende" -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "Schriftart löschen" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Note:" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "Schriftart übernehmen" +#~ msgid "Error while loading instruments." +#~ msgstr "Fehler beim Laden der Instrumente." -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Hoch" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "Beachte dass der ESD Output unbenutzbar ist im\n" +#~ "interaktive Modus wegen der Verzögerung die vom\n" +#~ "ESD hinzugefügt werden. Verwende die OSS oder\n" +#~ "ALSA Output Plugins für ernsthafte Arbeiten." -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Runter" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Konnte keine Verbindung zum ESD zur Soundausgabe öffnen:\n" +#~ "%s" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "Schriftart wählen..." +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "Diese Änderungen werden erst beim Neustart des Samplens wirksam." -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "Ganzer Song" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Instrumentenwechsel" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Alle Pattern" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "Erforderliches Soundausgabeformat nicht unterstützt.\n" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "Aktuelles Pattern" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Unbekannte XI-Version 0x%x\n" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "Aktueller Track" +#~ msgid "Monitor" +#~ msgstr "Monitor" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Aktuelles Instrument" +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#smpl" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Alle Instrumente" +#~ msgid "OK" +#~ msgstr "OK" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Halbe Note hoch" +#~ msgid "Cancel" +#~ msgstr "Abbrechen" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "Halbe Note runter" +#~ msgid "(%d bytes)" +#~ msgstr "(%d Bytes)" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "Oktave hoch" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Geschätzte Audio-Verzögerung: %f Mikrosekunden" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "Oktave runter" +#~ msgid "ALSA card number:" +#~ msgstr "ALSA-Kartennummer:" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "Tausche 1 <-> 2" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Konnte ALSA-Gerät nicht für Soundeingabe öffnen (Karte:%d, Gerät:%d):\n" +#~ "%s" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "Ändere 1 -> 2" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "Erforderliche Soundausgabeparameter nicht unterstützt..\n" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "Transpositions-Werkzeuge" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Konnte ALSA-Gerät nicht für Soundausgabe öffnen (Karte:%d, Gerät:%d):\n" +#~ "%s" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Bereich der Anwendung:" +#, fuzzy +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "Erforderliche Soundausgabeparameter nicht unterstützt..\n" -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Noten-Transposition" +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "Konnte %s nicht für Soundausgabe öffnen:\n" +#~ "%s" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Instrumentenwechsel" +#, fuzzy +#~ msgid "soundtracker" +#~ msgstr "Tracker" -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Instrument 1:" +#~ msgid "Save Song" +#~ msgstr "Speichere Song" -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Aktuelles Instrument" +#, fuzzy +#~ msgid "No" +#~ msgstr "Keine" -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Instrument 2:" +#~ msgid "Close" +#~ msgstr "Schließen" -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Patternlänge außerhalb des Bereiches: %d.\n" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Sind sie sicher, daß Sie die Datei überschreiben wollen?" -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "Datei ist kein XI-Instrument." +#~ msgid "Load XM..." +#~ msgstr "Lade XM..." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Unbekannte XI-Version 0x%x\n" +#~ msgid "Save XM..." +#~ msgstr "Speichere XM..." -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "Ungültiger vibtype %d, verwende Sinus.\n" +#~ msgid "Save song as XM..." +#~ msgstr "Speichere Song als XM..." -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "Fehler beim Laden der Pattern." +#~ msgid "Load Instrument..." +#~ msgstr "Lade Instrument..." -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Kann Datei nicht öffnen" +#~ msgid "Save Instrument..." +#~ msgstr "Speichere Instrument..." -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Fehler beim Laden der Instrumente." +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "Die Datei für die Tastaturkonfiguration ist fehlerhaft.\n" +#~ "Bitte verwenden Sie den Dialog für die Tastatur-Konfiguration." -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"Modul enthält Sample(s), die zu lang für den aktuellen Mixer sind..\n" -"Maximale Sample-Länge ist %d." +#~ msgid "Ok" +#~ msgstr "OK" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "Kein FastTracker XM und kein unterstütztes MOD-Format!" +#~ msgid "_Quit" +#~ msgstr "_Beenden" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "" +#~ msgid "C_ut" +#~ msgstr "_Ausschneiden" -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "" +#~ msgid "_Copy" +#~ msgstr "_Kopieren" -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "" +#~ msgid "_Paste" +#~ msgstr "E_infügen" -#: app/xm.c:1468 #, fuzzy -msgid "Error during saving pattern!" -msgstr "Fehler beim Laden der Pattern." +#~ msgid "P_aste" +#~ msgstr "Einfügen" -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "" +#~ msgid "_Load XI..." +#~ msgstr "_Lade XI..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -#, fuzzy -msgid "Channel" -msgstr "Kanäle:" +#~ msgid "_Save XI..." +#~ msgstr "_Speichere XI..." -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -#, fuzzy -msgid "Client number" -msgstr "Kanal Benummerung" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "_Tastatur-Konfiguration..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -#, fuzzy -msgid "Port number" -msgstr "Porta rauf" +#~ msgid "_Audio Configuration..." +#~ msgstr "_Audio-Konfiguration..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -#, fuzzy -msgid "Input" -msgstr "Instr" +#~ msgid "_GUI Configuration..." +#~ msgstr "_GUI-Konfiguration..." -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "" +#~ msgid "_MIDI Configuration..." +#~ msgstr "_MIDI-Konfiguration..." -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -#, fuzzy -msgid "Output" -msgstr "Editierausgang" +#~ msgid "Load Sample..." +#~ msgstr "Lade Sample..." -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "" +#~ msgid "Save WAV..." +#~ msgstr "Speichere WAV..." -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -#, fuzzy -msgid "Misc" -msgstr "Mixer" +#~ msgid "Execute" +#~ msgstr "Ausführen" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -#, fuzzy -msgid "MIDI Configuration" -msgstr "_MIDI-Konfiguration..." +#~ msgid "Apply" +#~ msgstr "Ãœbernehmen" + +#~ msgid "Drivers" +#~ msgstr "Treiber" + +#~ msgid "Up" +#~ msgstr "Hoch" -#~ msgid "Pattern" -#~ msgstr "Pattern" +#~ msgid "Down" +#~ msgstr "Runter" #~ msgid "Current pos" #~ msgstr "Aktuelle Pos" @@ -2164,15 +3710,15 @@ #~ msgstr "Automatischer Wechsel" #~ msgid "Use anti-aliased envelope editor" -#~ msgstr "Verwende Antialiasing im Hüllkurven-Editor" +#~ msgstr "Verwende Antialiasing im Hüllkurven-Editor" #~ msgid "" #~ "You need to restart SoundTracker for this change to come into effect." #~ msgstr "" -#~ "Sie müssen SoundTracker neustarten, damit diese Änderungen wirksam werden." +#~ "Sie müssen SoundTracker neustarten, damit diese Änderungen wirksam werden." #~ msgid "Idle." -#~ msgstr "Untätig." +#~ msgstr "Untätig." #~ msgid "Use _Backing Store" #~ msgstr "Verwende _Backing Store" @@ -2181,7 +3727,7 @@ #~ msgstr "/_Datei" #~ msgid "/File/_Open..." -#~ msgstr "/Datei/Ö_ffnen..." +#~ msgstr "/Datei/Ö_ffnen..." #~ msgid "/File/Save _as..." #~ msgstr "/Datei/Speichern _unter..." @@ -2201,11 +3747,8 @@ #~ msgid "/_Module" #~ msgstr "/_Modul" -#~ msgid "/Module/Clear _All" -#~ msgstr "/Modul/Lösche _alle" - #~ msgid "/Module/Clear _Patterns Only" -#~ msgstr "/Modul/Lösche nur _Pattern" +#~ msgstr "/Modul/Lösche nur _Pattern" #~ msgid "/Module/_Optimize Module" #~ msgstr "/Modul/_Optimiere Modul" @@ -2229,7 +3772,7 @@ #~ msgstr "/Bearbeiten/Pattern/_Kopieren" #~ msgid "/Edit/Pattern/_Paste" -#~ msgstr "/Bearbeiten/Pattern/E_infügen" +#~ msgstr "/Bearbeiten/Pattern/E_infügen" #~ msgid "/Edit/_Track" #~ msgstr "/Bearbeiten/_Track" @@ -2241,16 +3784,16 @@ #~ msgstr "/Bearbeiten/Track/_Kopieren" #~ msgid "/Edit/Track/_Paste" -#~ msgstr "/Bearbeiten/Track/E_infügen" +#~ msgstr "/Bearbeiten/Track/E_infügen" #~ msgid "/Edit/Track/_Kill notes" -#~ msgstr "/Bearbeiten/Track/Noten _löschen" +#~ msgstr "/Bearbeiten/Track/Noten _löschen" #~ msgid "/Edit/Track/_Insert" -#~ msgstr "/Bearbeiten/Track/E_infügen" +#~ msgstr "/Bearbeiten/Track/E_infügen" #~ msgid "/Edit/Track/_Delete" -#~ msgstr "/Bearbeiten/Track/_Löschen" +#~ msgstr "/Bearbeiten/Track/_Löschen" #~ msgid "/Edit/_Selection" #~ msgstr "/Bearbeiten/_Auswahl" @@ -2259,7 +3802,7 @@ #~ msgstr "/Bearbeiten/Auswahl/_Markier Modus" #~ msgid "/Edit/Selection/C_lear block marks" -#~ msgstr "/Bearbeiten/Auswahl/Blockmarkierungen _löschen" +#~ msgstr "/Bearbeiten/Auswahl/Blockmarkierungen _löschen" #~ msgid "/Edit/Selection/C_ut" #~ msgstr "/Bearbeiten/Auswahl/_Ausschneiden" @@ -2268,13 +3811,13 @@ #~ msgstr "/Bearbeiten/Auswahl/_Kopieren" #~ msgid "/Edit/Selection/_Paste" -#~ msgstr "/Bearbeiten/Auswahl/E_infügen" +#~ msgstr "/Bearbeiten/Auswahl/E_infügen" #~ msgid "/Edit/Selection/_Interpolate effects" #~ msgstr "/Bearbeiten/Auswahl/_Interpoliere Effekte" #~ msgid "/Edit/Track/Increment cmd value" -#~ msgstr "/Bearbeiten/Track/cmd Wert erhöhen" +#~ msgstr "/Bearbeiten/Track/cmd Wert erhöhen" #~ msgid "/Edit/Track/Decrement cmd value" #~ msgstr "/Bearbeiten/Track/cmd Wert verringern" @@ -2289,7 +3832,7 @@ #~ msgstr "/Pattern/_Kopiere aktuelles zu unbenutztem Pattern" #~ msgid "/Pattern/C_lear Unused Patterns" -#~ msgstr "/Pattern/_Lösche unbenutzte Pattern" +#~ msgstr "/Pattern/_Lösche unbenutzte Pattern" #~ msgid "/Pattern/_Pack Patterns" #~ msgstr "/Pattern/_Packe Pattern" @@ -2307,10 +3850,10 @@ #~ msgstr "/Instrument/-" #~ msgid "/Instrument/_Clear Current" -#~ msgstr "/Instrument/_Lösche aktuelles" +#~ msgstr "/Instrument/_Lösche aktuelles" #~ msgid "/Instrument/_Delete Unused Instruments" -#~ msgstr "/Instrument/_Lösche unbenutzte Instrumente" +#~ msgstr "/Instrument/_Lösche unbenutzte Instrumente" #~ msgid "/_Settings" #~ msgstr "/_Einstellungen" @@ -2328,7 +3871,7 @@ #~ msgstr "/Einstellungen/Tracker/_Vorherige Schriftart" #~ msgid "/Settings/Tracker/_Next font" -#~ msgstr "/Einstellungen/Tracker/_Nächste Schriftart" +#~ msgstr "/Einstellungen/Tracker/_Nächste Schriftart" #~ msgid "/Settings/-" #~ msgstr "/Einstellungen/-" @@ -2355,7 +3898,7 @@ #~ msgstr "/_Hilfe" #~ msgid "/Help/_About..." -#~ msgstr "/Hilfe/Ü_ber..." +#~ msgstr "/Hilfe/Ãœ_ber..." #~ msgid "/Help/-" #~ msgstr "/Hilfe/-" @@ -2368,9 +3911,3 @@ #~ msgid "Nothing to save." #~ msgstr "Nichts zu speichern." - -#~ msgid "" -#~ "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n" -#~ msgstr "" -#~ "XM-Header-Länge != 276. Vielleicht ein pre-0.0.12 SoundTracker-" -#~ "Modul? :-)\n" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/en@boldquot.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/en@boldquot.gmo differ diff -Nru soundtracker-0.6.8/po/en@boldquot.po soundtracker-1.0.2~pre2/po/en@boldquot.po --- soundtracker-0.6.8/po/en@boldquot.po 2006-02-25 13:37:42.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/en@boldquot.po 2020-05-27 18:54:26.000000000 +0000 @@ -1,7 +1,7 @@ # English translations for soundtracker package. -# Copyright (C) 2006 Michael Krause +# Copyright (C) 2020 Michael Krause # This file is distributed under the same license as the soundtracker package. -# Automatically generated, 2006. +# Automatically generated, 2020. # # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation @@ -30,18 +30,26 @@ # msgid "" msgstr "" -"Project-Id-Version: soundtracker 0.6.8\n" +"Project-Id-Version: soundtracker 1.0.1-pre1\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" -"PO-Revision-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" +"PO-Revision-Date: 2020-05-27 21:54+0300\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" +"Language: en@boldquot\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "Connection with audio thread failed!" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "Playback Output" @@ -49,531 +57,1053 @@ msgid "Editing Output" msgstr "Editing Output" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Sampling" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "Driver Module" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "Mixer Module" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Description" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "Audio Configuration" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Drivers" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Mixers" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Close" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "No Cheat Sheet pages are found!" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d bytes)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" + +#: app/cheat-sheet.c:91 +msgid "XM Effects Cheat Sheet" +msgstr "XM Effects Cheat Sheet" + +#: app/colors.c:42 +msgid "Background" +msgstr "Background" + +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "Background for tracker and sample dislays" + +#: app/colors.c:43 +msgid "Cursor background" +msgstr "Cursor background" + +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "Background for the tracker cursor line" + +#: app/colors.c:44 +msgid "Major lines" +msgstr "Major lines" + +#: app/colors.c:44 +msgid "Major lines highlighting" +msgstr "Major lines highlighting" + +#: app/colors.c:45 +msgid "Minor lines" +msgstr "Minor lines" + +#: app/colors.c:45 +msgid "Minor lines highlighting" +msgstr "Minor lines highlighting" + +#: app/colors.c:46 soundtracker.glade:142 +msgid "Selection" +msgstr "Selection" + +#: app/colors.c:46 +msgid "Tracker selection" +msgstr "Tracker selection" + +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "Notes, waveforms" + +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" +msgstr "Tracker text (notes, effects) and waveforms" + +#: app/colors.c:48 +msgid "Delimiters" +msgstr "Delimiters" + +#: app/colors.c:48 +msgid "Tracker delimiters" +msgstr "Tracker delimiters" + +#: app/colors.c:49 +msgid "Channel numbers, loops" +msgstr "Channel numbers, loops" + +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" +msgstr "Channel numbers and loops in the sample editor" + +#: app/colors.c:50 +msgid "Cursor idle" +msgstr "Cursor idle" + +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "Tracker cursor in idle mode" + +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "Cursor editing" + +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "Tracker cursor in editing mode" + +#: app/colors.c:52 +msgid "Cursor bg in selection" +msgstr "Cursor bg in selection" + +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" +msgstr "Background for the tracker cursor in the selection" + +#: app/colors.c:53 +msgid "Mixer position" +msgstr "Mixer position" + +#: app/colors.c:53 +msgid "Mixer position indicator" +msgstr "Mixer position indicator" + +#: app/colors.c:54 +msgid "Zero line" +msgstr "Zero line" + +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "Sample display zero line" + +#: app/colors.c:56 +msgid "White keys" +msgstr "White keys" + +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "White clavier keys, text on black keys" + +#: app/colors.c:57 +msgid "Black keys" +msgstr "Black keys" + +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" +msgstr "Black clavier keys, text on white keys" + +#: app/colors.c:58 +msgid "White keys pressed" +msgstr "White keys pressed" + +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "White clavier keys in pressed state" + +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "Black keys pressed" + +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "Black clavier keys in pressed state" + +#: app/colors.c:60 +msgid "White text pressed" +msgstr "White text pressed" + +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "Text on white clavier keys in pressed state" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "Black text pressed" + +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "Text on black clavier keys in pressed state" + +#: app/colors.c:395 +#, c-format +msgid "%s colors configuration" +msgstr "%s colors configuration" + +#: app/colors.c:398 +msgid "Reset" +msgstr "Reset" + +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "Reset the color scheme to standard" + +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "Reset colors to the latest set values" + +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "Gtk clavier colors" + +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" +msgstr "%f milliseconds" + +#: app/drivers/alsa1x.c:320 +msgid "ALSA device opening error" +msgstr "ALSA device opening error" + +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "hw params obtaining error" + +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "Unable to set audio format" + +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +msgid "Unable to set channels number" +msgstr "Unable to set channels number" + +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "Unable to set appropriate buffer size" + +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "Unable to get minimal period size" + +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "Unable to get maximal period size" + +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "Unable to get minimal sample rate" + +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "Unable to get maximal sample rate" + +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "Unable to get minimal buffer size" + +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "Unable to get maximal buffer size" + +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "Unable to get minimal channels number" + +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "Unable to get maximal channels number" + +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "Both mono and stereo are not supported by ALSA device!" + +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "Neither 8 nor 16 bit resolution is supported by ALSA device!" + +#: app/drivers/alsa1x.c:675 #, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Estimated audio delay: %f microseconds" +msgid " = %u samples" +msgstr " = %u samples" + +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "Dev" + +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "No soundcards found..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "Devices list" + +#: app/drivers/alsa1x.c:811 app/gui.c:476 +msgid "8 bit" +msgstr "8 bit" + +#: app/drivers/alsa1x.c:811 app/gui.c:476 +msgid "16 bit" +msgstr "16 bit" + +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "Mono" + +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "Stereo" + +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 msgid "These changes won't take effect until you restart playing." msgstr "These changes won't take effect until you restart playing." -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "These changes won't take effect until you restart sampling." + +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "Device:" + +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "List available hardware devices" + +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 msgid "Resolution:" msgstr "Resolution:" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 msgid "Channels:" msgstr "Channels:" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 msgid "Frequency [Hz]:" msgstr "Frequency [Hz]:" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 msgid "Buffer Size:" msgstr "Buffer Size:" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "ALSA card number:" +#: app/drivers/alsa1x.c:914 +msgid "Number of Periods:" +msgstr "Number of Periods:" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "ALSA device number:" +#: app/drivers/alsa1x.c:938 +msgid "Estimated audio delay:" +msgstr "Estimated audio delay:" -#: app/drivers/alsa-input.c:374 -#, c-format +#: app/drivers/alsa1x.c:943 msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." msgstr "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Required sound output format not supported.\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Required sound output parameters not supported.\n" +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" +msgstr "Unable to restart stream from suspending" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Estimated audio delay: %f milliseconds" +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "Stream preparation error" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" -msgstr "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "Sound playing error" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "Required output-channel parameters not supported.\n" +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "Sound recording error" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "Unable to prepare ALSA channel.\n" +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "ALSA driver: Out of memory error!" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "Alsa setup error.\n" +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "Error attaching sound output" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." -msgstr "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "Unable to set access" -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" -msgstr "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "Unable to set sample rate" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "no settings (yet), sorry!" +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "Unable to set periods number" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Can't open file for writing." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "Unable to get period size" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." -msgstr "These changes won't take effect until you restart sampling." +#: app/drivers/alsa1x.c:1293 +msgid "Error setting hw parameters" +msgstr "Error setting hw parameters" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Input device (e.g. '/dev/dsp'):" +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "Unable to determine current swparams for playback" + +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "Unable to determine current swparams for capture" + +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "Unable to set start threshold mode for playback" + +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "Unable to set start threshold mode for capture" + +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "Unable to set avail min for playback" + +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "Unable to set avail min for capture" + +#: app/drivers/alsa1x.c:1328 +msgid "Unable to enable timestamping for playback" +msgstr "Unable to enable timestamping for playback" + +#: app/drivers/alsa1x.c:1329 +msgid "Unable to enable timestamping for capture" +msgstr "Unable to enable timestamping for capture" + +#: app/drivers/alsa1x.c:1335 +msgid "Unable to set timestamp type for playback" +msgstr "Unable to set timestamp type for playback" -#: app/drivers/oss-input.c:234 +#: app/drivers/alsa1x.c:1336 +msgid "Unable to set timestamp type for capture" +msgstr "Unable to set timestamp type for capture" + +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" +msgstr "Unable to set sw params for playback" + +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "Unable to set sw params for capture" + +#: app/drivers/alsa1x.c:1352 +msgid "Unable to prepare playback" +msgstr "Unable to prepare playback" + +#: app/drivers/alsa1x.c:1353 +msgid "Unable to prepare capture" +msgstr "Unable to prepare capture" + +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" +msgstr "Unable to obtain poll descriptors for playback" + +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" +msgstr "Unable to start capture" + +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "No driver available for your system." + +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "no settings (yet), sorry!" + +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "ALnewconfig() failed." + +#: app/drivers/irix-output.c:178 +msgid "16 Bit output not supported." +msgstr "16 Bit output not supported." + +#: app/drivers/irix-output.c:184 +msgid "Stereo output not supported." +msgstr "Stereo output not supported." + +#: app/drivers/irix-output.c:192 +msgid "Couldn't open audio port." +msgstr "Couldn't open audio port." + +#: app/drivers/oss.c:130 +msgid "OSS input: reading error" +msgstr "OSS input: reading error" + +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "OSS input: out of memory error" + +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 #, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" -msgstr "" -"Couldn't open %s for sampling:\n" -"%s" +msgid "Estimated audio delay: %f milliseconds" +msgstr "Estimated audio delay: %f milliseconds" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 #, c-format msgid "(%d samples)" msgstr "(%d samples)" -#: app/drivers/oss-output.c:217 +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "Input device (e.g. '/dev/dsp'):" + +#: app/drivers/oss.c:248 msgid "Output device (e.g. '/dev/dsp'):" msgstr "Output device (e.g. '/dev/dsp'):" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" -msgstr "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" +msgstr "OSS driver: setting format failed" -#: app/drivers/jack-output.c:254 -msgid "transport master" -msgstr "transport master" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "OSS driver: setting number of channels failed" -#: app/drivers/jack-output.c:259 -msgid "declick" -msgstr "declick" +#: app/drivers/oss.c:445 +#, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "OSS driver (%s): Couldn't open %s" + +#: app/drivers/oss.c:480 +#, c-format +msgid "Required %s format not supported." +msgstr "Required %s format not supported." -#: app/drivers/jack-output.c:279 +#: app/drivers/jack.c:367 #, c-format msgid "Running at %d Hz with %d frames" msgstr "Running at %d Hz with %d frames" -#: app/drivers/jack-output.c:283 -#, c-format +#: app/drivers/jack.c:371 msgid "Jack server not running?" msgstr "Jack server not running?" -#: app/drivers/jack-output.c:327 +#: app/drivers/jack.c:403 #, c-format -msgid "soundtracker" -msgstr "soundtracker" +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" +"Jack driver error:\n" +"%s" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "out_1" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "Jack driver activation failed." + +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "Update" + +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "Jack autostart" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "out_2" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "declick" + +#: app/drivers/jack.c:610 +msgid "Jack server is not running or some error occured." +msgstr "Jack server is not running or some error occured." + +#: app/drivers/sdl-output.c:76 +msgid "Experimental SDL support." +msgstr "Experimental SDL support." -#: app/drivers/sun-output.c:209 +#: app/drivers/sun-output.c:212 msgid "Output device (e.g. '/dev/audio'):" msgstr "Output device (e.g. '/dev/audio'):" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 +#: app/drivers/sun-output.c:385 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "SUN output (%s): Cannot open device" +msgstr "SUN output (%s): Cannot open device" -#: app/drivers/sun-output.c:395 +#: app/drivers/sun-output.c:393 #, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: Cannot play (%s)" +msgid "SUN output (%s) does not support playback" +msgstr "SUN output (%s) does not support playback" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 +#: app/drivers/sun-output.c:402 #, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: Cannot handle %dHz (%s)" +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "SUN output (%s): Cannot handle %d Hz" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 +#: app/drivers/sun-output.c:432 #, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s: Required sound encoding not supported.\n" +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "SUN output (%s): Required sound encoding not supported" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 +#: app/drivers/sun-output.c:455 #, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: Cannot set block size (%s)" +msgid "SUN output (%s): Cannot set block size" +msgstr "SUN output (%s): Cannot set block size" + +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "SUN input (%s): Cannot get device information" + +#: app/drivers/sun-input.c:77 +msgid "SUN input: reading error" +msgstr "SUN input: reading error" -#: app/drivers/sun-input.c:117 +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "SUN input: out of memory error" + +#: app/drivers/sun-input.c:131 msgid "Input device (e.g. '/dev/audio'):" msgstr "Input device (e.g. '/dev/audio'):" -#: app/drivers/sun-input.c:242 +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "SUN input (%s): Cannot open device" + +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "SUN input (%s) does not support full-duplex operation" + +#: app/drivers/sun-input.c:264 #, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: Cannot record (%s)" +msgid "SUN input (%s) does not support recording" +msgstr "SUN input (%s) does not support recording" -#: app/envelope-box.c:878 +#: app/drivers/sun-input.c:273 +#, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "SUN input (%s): Cannot handle %d Hz" + +#: app/drivers/sun-input.c:304 +#, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "SUN input (%s): Required sound encoding not supported." + +#: app/drivers/sun-input.c:332 +#, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "SUN input (%s): Cannot set block size" + +#: app/envelope-box.c:1279 app/gui.c:2589 msgid "Length" msgstr "Length" -#: app/envelope-box.c:879 +#: app/envelope-box.c:1280 msgid "Current" msgstr "Current" -#: app/envelope-box.c:880 +#: app/envelope-box.c:1281 msgid "Offset" msgstr "Offset" -#: app/envelope-box.c:881 +#: app/envelope-box.c:1282 msgid "Value" msgstr "Value" -#: app/envelope-box.c:887 app/playlist.c:524 +#: app/envelope-box.c:1288 app/playlist.c:503 msgid "Insert" msgstr "Insert" -#: app/envelope-box.c:893 app/playlist.c:533 +#: app/envelope-box.c:1294 app/playlist.c:509 msgid "Delete" msgstr "Delete" -#: app/envelope-box.c:985 +#: app/envelope-box.c:1369 msgid "" "Graphical\n" "Envelope\n" "Editor\n" -"only in\n" -"GNOME Version" +"only with\n" +"GooCanvas" msgstr "" "Graphical\n" "Envelope\n" "Editor\n" -"only in\n" -"GNOME Version" +"only with\n" +"GooCanvas" -#: app/envelope-box.c:1000 +#: app/envelope-box.c:1384 msgid "Sustain" msgstr "Sustain" -#: app/envelope-box.c:1008 +#: app/envelope-box.c:1392 msgid "Point" msgstr "Point" -#: app/envelope-box.c:1010 +#: app/envelope-box.c:1394 msgid "Loop" msgstr "Loop" -#: app/envelope-box.c:1018 app/sample-editor.c:275 +#: app/envelope-box.c:1402 app/sample-editor.c:441 msgid "Start" msgstr "Start" -#: app/envelope-box.c:1019 app/sample-editor.c:276 +#: app/envelope-box.c:1403 app/sample-editor.c:442 msgid "End" msgstr "End" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Load Module" - -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Save Module" - -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Render WAV" - -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Save Song" - -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Load Sample" +#: app/file-operations.c:127 +#, c-format +msgid "" +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" +msgstr "" +"The file named “%s†already exists.\n" +"Do you want to replace it?" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Save Sample" +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "All supported types" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Load Instrument" +#: app/file-operations.c:245 +msgid "All files" +msgstr "All files" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Save Instrument" - -#: app/file-operations.c:175 +#: app/file-operations.c:388 msgid "File" msgstr "File" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Operation not supported." +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "Classic ST" + +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "FT2" + +#: app/gui-settings.c:293 +msgid "Mixed" +msgstr "Mixed" + +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "GUI Configuration" -#: app/gui-settings.c:100 +#: app/gui-settings.c:321 msgid "Scopes Frequency" msgstr "Scopes Frequency" -#: app/gui-settings.c:103 +#: app/gui-settings.c:326 msgid "Tracker Frequency" msgstr "Tracker Frequency" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "GUI Configuration" - -#: app/gui-settings.c:354 +#: app/gui-settings.c:331 msgid "Hexadecimal row numbers" msgstr "Hexadecimal row numbers" -#: app/gui-settings.c:361 +#: app/gui-settings.c:337 msgid "Use upper case letters for hex numbers" msgstr "Use upper case letters for hex numbers" -#: app/gui-settings.c:368 +#: app/gui-settings.c:343 +msgid "FT2-like volume column" +msgstr "FT2-like volume column" + +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" +msgstr "Use symbols in the volume column" + +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" +msgstr "Leave Tone Porta as symbol “mâ€" + +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "Decimal volume representation" + +#: app/gui-settings.c:367 msgid "Asynchronous (IT-style) pattern editing" msgstr "Asynchronous (IT-style) pattern editing" -#: app/gui-settings.c:375 +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "Polyphonic try (non-editing) mode" + +#: app/gui-settings.c:379 +msgid "Record keyreleases" +msgstr "Record keyreleases" + +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" +msgstr "Human-made delay compensation [s]" + +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "Record precise timings" + +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "Use FXes to record note press/release timings with tick accuracy" + +#: app/gui-settings.c:406 msgid "Fxx command updates Tempo/BPM sliders" msgstr "Fxx command updates Tempo/BPM sliders" -#: app/gui-settings.c:382 +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "Emulate FastTracker Rxx bug" + +#: app/gui-settings.c:418 msgid "Switch to tracker after loading/saving" msgstr "Switch to tracker after loading/saving" -#: app/gui-settings.c:389 +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "Automatically add file extensions" + +#: app/gui-settings.c:430 msgid "Save window geometry on exit" msgstr "Save window geometry on exit" -#: app/gui-settings.c:396 +#: app/gui-settings.c:436 msgid "Use note name B instead of H" msgstr "Use note name B instead of H" -#: app/gui-settings.c:403 +#: app/gui-settings.c:442 msgid "Save and restore permanent channels" msgstr "Save and restore permanent channels" -#: app/gui-settings.c:417 +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." +msgstr "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." + +#: app/gui-settings.c:456 +msgid "Selection mode" +msgstr "Selection mode" + +#: app/gui-settings.c:472 msgid "Scopes buffer size [MB]" msgstr "Scopes buffer size [MB]" -#: app/gui-settings.c:436 +#: app/gui-settings.c:481 +msgid "Sample displays' mode" +msgstr "Sample displays' mode" + +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "Scopes" + +#: app/gui-settings.c:486 +msgid "Editor" +msgstr "Editor" + +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "Strobo" + +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "Fast, but not so much accurate method for waveforms' drawing" + +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "Minmax" + +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "More realistic waveform drawing method with higher CPU load" + +#: app/gui-settings.c:511 msgid "Track line format:" msgstr "Track line format:" -#: app/gui-subs.c:32 app/gui.c:2369 +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "Color scheme" + +#: app/gui-settings.c:573 +msgid "Tracker colors configuration" +msgstr "Tracker colors configuration" + +#: app/gui-subs.c:34 app/gui.c:2975 msgid "Ready." msgstr "Ready." -#: app/gui-subs.c:33 +#: app/gui-subs.c:35 msgid "Playing song..." msgstr "Playing song..." -#: app/gui-subs.c:34 +#: app/gui-subs.c:36 msgid "Playing pattern..." msgstr "Playing pattern..." -#: app/gui-subs.c:35 +#: app/gui-subs.c:37 msgid "Loading module..." msgstr "Loading module..." -#: app/gui-subs.c:36 +#: app/gui-subs.c:38 msgid "Module loaded." msgstr "Module loaded." -#: app/gui-subs.c:37 +#: app/gui-subs.c:39 msgid "Saving module..." msgstr "Saving module..." -#: app/gui-subs.c:38 +#: app/gui-subs.c:40 msgid "Module saved." msgstr "Module saved." -#: app/gui-subs.c:39 +#: app/gui-subs.c:41 msgid "Loading sample..." msgstr "Loading sample..." -#: app/gui-subs.c:40 +#: app/gui-subs.c:42 msgid "Sample loaded." msgstr "Sample loaded." -#: app/gui-subs.c:41 +#: app/gui-subs.c:43 msgid "Saving sample..." msgstr "Saving sample..." -#: app/gui-subs.c:42 +#: app/gui-subs.c:44 msgid "Sample saved." msgstr "Sample saved." -#: app/gui-subs.c:43 +#: app/gui-subs.c:45 msgid "Loading instrument..." msgstr "Loading instrument..." -#: app/gui-subs.c:44 +#: app/gui-subs.c:46 msgid "Instrument loaded." msgstr "Instrument loaded." -#: app/gui-subs.c:45 +#: app/gui-subs.c:47 msgid "Saving instrument..." msgstr "Saving instrument..." -#: app/gui-subs.c:46 +#: app/gui-subs.c:48 msgid "Instrument saved." msgstr "Instrument saved." -#: app/gui-subs.c:47 +#: app/gui-subs.c:49 msgid "Saving song..." msgstr "Saving song..." -#: app/gui-subs.c:48 +#: app/gui-subs.c:50 msgid "Song saved." msgstr "Song saved." -#: app/gui-subs.c:483 app/gui-subs.c:554 +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "Error!" + +#: app/gui-subs.c:414 msgid "Question" msgstr "Question" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "Yes" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "No" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Cancel" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." + +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" -#: app/gui-subs.c:589 +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "GUI creation error: Widget ‘%s’ is not found in %s file." + +#: app/gui-subs.h:223 msgid "Warning" msgstr "Warning" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "Error!" +#: app/gui-subs.h:225 +msgid "Information" +msgstr "Information" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" - -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 +#: app/gui.c:251 app/gui.c:2666 msgid "Row highlighting configuration" msgstr "Row highlighting configuration" -#: app/gui.c:301 +#: app/gui.c:260 msgid "Highlight rows (major / minor):" msgstr "Highlight rows (major / minor):" -#: app/gui.c:478 +#: app/gui.c:330 +msgid "" +msgstr "" + +#: app/gui.c:451 +msgid "Saving module failed" +msgstr "Saving module failed" + +#: app/gui.c:535 +msgid "File output" +msgstr "File output" + +#: app/gui.c:612 +msgid "Can't open file for writing" +msgstr "Can't open file for writing" + +#: app/gui.c:618 +msgid "Can't change file ownership" +msgstr "Can't change file ownership" + +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "Can't allocate mix buffer." + +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "An error occured while writing to file" + +#: app/gui.c:691 msgid "" "Odd pattern rows contain data which will be lost after shrinking.\n" "Do you want to continue anyway?" @@ -581,7 +1111,7 @@ "Odd pattern rows contain data which will be lost after shrinking.\n" "Do you want to continue anyway?" -#: app/gui.c:506 +#: app/gui.c:715 msgid "" "The pattern is too long for expanding.\n" "Some data at the end of the pattern will be lost.\n" @@ -591,12 +1121,7 @@ "Some data at the end of the pattern will be lost.\n" "Do you want to continue anyway?" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "No file selected." - -#: app/gui.c:563 +#: app/gui.c:757 msgid "" "Are you sure you want to free the current project?\n" "All changes will be lost!" @@ -604,16 +1129,12 @@ "Are you sure you want to free the current project?\n" "All changes will be lost!" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Are you sure you want to overwrite the file?" - -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "Error when opening pattern file!" +#: app/gui.c:810 +#, c-format +msgid "Error when opening pattern file %s!" +msgstr "Error when opening pattern file %s!" -#: app/gui.c:651 +#: app/gui.c:829 msgid "" "The length of the pattern being loaded doesn't match with that of current " "pattern in module.\n" @@ -623,232 +1144,423 @@ "pattern in module.\n" "Do you want to change the current pattern length?" -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "SoundTracker Startup" +#: app/gui.c:2124 +#, c-format +msgid "%s Startup" +msgstr "%s Startup" -#: app/gui.c:1778 app/gui.c:1815 +#: app/gui.c:2178 app/gui.c:2206 msgid "Loading..." msgstr "Loading..." -#: app/gui.c:1804 +#: app/gui.c:2195 msgid "Use SoundTracker!" msgstr "Use SoundTracker!" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Load XM..." - -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Save XM..." - -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Render module as WAV..." - -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "Save song as XM..." +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"Are you sure you want to quit?\n" +"All changes will be lost!" + +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "Amplification estimation" + +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." + +#: app/gui.c:2296 +msgid "Estimating..." +msgstr "Estimating..." + +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "FastTracker modules (*.xm)" + +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "Original SoundTracker modules (*.mod)" + +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "Microsoft RIFF (*.wav)" + +#: app/gui.c:2400 +msgid "Extended pattern (*.xp)" +msgstr "Extended pattern (*.xp)" -#: app/gui.c:1872 +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" +msgstr "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" + +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Load Module" + +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" +msgstr "Load the selected module into the tracker" + +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Save Module" + +#: app/gui.c:2434 +msgid "Save the current module" +msgstr "Save the current module" + +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Render WAV" + +#: app/gui.c:2436 +msgid "Render the current module as WAV file" +msgstr "Render the current module as WAV file" + +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Save XM without samples..." + +#: app/gui.c:2439 msgid "Load current pattern..." msgstr "Load current pattern..." -#: app/gui.c:1874 +#: app/gui.c:2440 msgid "Save current pattern..." msgstr "Save current pattern..." -#: app/gui.c:1944 +#: app/gui.c:2507 msgid "Play Song" msgstr "Play Song" -#: app/gui.c:1956 +#: app/gui.c:2516 msgid "Play Pattern" msgstr "Play Pattern" -#: app/gui.c:1968 +#: app/gui.c:2525 +msgid "Play From Cursor" +msgstr "Play From Cursor" + +#: app/gui.c:2534 +msgid "Play Block" +msgstr "Play Block" + +#: app/gui.c:2543 msgid "Stop" msgstr "Stop" -#: app/gui.c:1973 +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "Loop Playback" + +#: app/gui.c:2562 msgid "Pat" msgstr "Pat" -#: app/gui.c:1979 +#: app/gui.c:2568 msgid "Edited pattern" msgstr "Edited pattern" -#: app/gui.c:1992 +#: app/gui.c:2578 msgid "When enabled, browsing the playlist does not change the edited pattern." msgstr "" "When enabled, browsing the playlist does not change the edited pattern." -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Number of Channels:" - -#: app/gui.c:2025 +#: app/gui.c:2583 msgid "Pattern Length" msgstr "Pattern Length" -#: app/gui.c:2060 +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" + +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Number of Channels:" + +#: app/gui.c:2632 msgid "Set preferred accidental type" msgstr "Set preferred accidental type" -#: app/gui.c:2066 +#: app/gui.c:2638 msgid "Measure" msgstr "Measure" -#: app/gui.c:2067 +#: app/gui.c:2639 msgid "Enable row highlighting" msgstr "Enable row highlighting" -#: app/gui.c:2093 +#: app/gui.c:2660 msgid "Other..." msgstr "Other..." -#: app/gui.c:2129 +#: app/gui.c:2687 msgid "Change effect column editing direction" msgstr "Change effect column editing direction" -#: app/gui.c:2160 +#: app/gui.c:2715 app/gui.c:2820 msgid "Global amplification" msgstr "Global amplification" -#: app/gui.c:2196 +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "Estimate the best amplification by pressing on the clipping indicator" + +#: app/gui.c:2740 msgid "Pitchbend" msgstr "Pitchbend" -#: app/gui.c:2204 +#: app/gui.c:2748 msgid "Reset pitchbend to its normal value" msgstr "Reset pitchbend to its normal value" -#: app/gui.c:2216 +#: app/gui.c:2760 msgid "Editing" msgstr "Editing" -#: app/gui.c:2223 +#: app/gui.c:2767 msgid "Octave" msgstr "Octave" -#: app/gui.c:2232 +#: app/gui.c:2776 msgid "Jump" msgstr "Jump" -#: app/gui.c:2241 +#: app/gui.c:2785 msgid "Instr" msgstr "Instr" -#: app/gui.c:2257 +#: app/gui.c:2801 msgid "Sample" msgstr "Sample" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "Welcome to SoundTracker!" +#: app/gui.c:2827 +msgid "dB" +msgstr "dB" + +#: app/gui.c:2866 +#, c-format +msgid "Welcome to %s!" +msgstr "Welcome to %s!" -#: app/gui.c:2323 +#: app/gui.c:2883 app/sample-editor.c:2238 msgid "%M:%S" msgstr "%M:%S" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "VolFade" - -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "VibSpeed" - -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "VibDepth" - -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "VibSweep" - -#: app/instrument-editor.c:163 app/instrument-editor.c:186 +#: app/instrument-editor.c:184 app/instrument-editor.c:216 msgid "Can't open file." msgstr "Can't open file." -#: app/instrument-editor.c:229 +#: app/instrument-editor.c:209 +msgid "Saving instrument failed." +msgstr "Saving instrument failed." + +#: app/instrument-editor.c:232 +msgid "Clear current instrument?" +msgstr "Clear current instrument?" + +#: app/instrument-editor.c:252 msgid "Sine" msgstr "Sine" -#: app/instrument-editor.c:229 +#: app/instrument-editor.c:252 msgid "Square" msgstr "Square" -#: app/instrument-editor.c:229 +#: app/instrument-editor.c:252 msgid "Saw Down" msgstr "Saw Down" -#: app/instrument-editor.c:229 +#: app/instrument-editor.c:252 msgid "Saw Up" msgstr "Saw Up" -#: app/instrument-editor.c:233 +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" +msgstr "FastTracker instruments (*.xi)" + +#: app/instrument-editor.c:259 msgid "Instrument Editor" msgstr "Instrument Editor" -#: app/instrument-editor.c:242 +#: app/instrument-editor.c:268 msgid "Volume envelope" msgstr "Volume envelope" -#: app/instrument-editor.c:250 +#: app/instrument-editor.c:276 msgid "Panning envelope" msgstr "Panning envelope" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Load Instrument..." - -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Save Instrument..." +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Load Instrument" + +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "Load instrument in the current instrument slot" + +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Save Instrument" + +#: app/instrument-editor.c:297 +msgid "Save the current instrument" +msgstr "Save the current instrument" -#: app/instrument-editor.c:271 +#: app/instrument-editor.c:299 msgid "Load XI" msgstr "Load XI" -#: app/instrument-editor.c:277 +#: app/instrument-editor.c:305 msgid "Save XI" msgstr "Save XI" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Vibrato Type:" +#: app/instrument-editor.c:320 +msgid "Volume Fadeout" +msgstr "Volume Fadeout" + +#: app/instrument-editor.c:344 +msgid "Vibrato:" +msgstr "Vibrato:" + +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "Type" + +#: app/instrument-editor.c:356 +msgid "Speed" +msgstr "Speed" + +#: app/instrument-editor.c:359 +msgid "Depth" +msgstr "Depth" + +#: app/instrument-editor.c:361 +msgid "Sweep" +msgstr "Sweep" -#: app/instrument-editor.c:368 +#: app/instrument-editor.c:413 msgid "Note:" msgstr "Note:" -#: app/instrument-editor.c:386 +#: app/instrument-editor.c:431 msgid "Initialize" msgstr "Initialize" -#: app/keys.c:57 +#: app/keys.c:58 msgid "" msgstr "" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "The key that inserts the special keyoff note for FastTracker modules." +#: app/keys.c:134 +msgid "KOFF" +msgstr "KOFF" + +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "The key that inserts the special keyoff note for FastTracker modules." + +#: app/keys.c:136 +msgid "JMP+" +msgstr "JMP+" + +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "The key that increases “jump†value." + +#: app/keys.c:138 +msgid "JMP-" +msgstr "JMP-" + +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "The key that decreases “jump†value." + +#: app/keys.c:140 +msgid "PlayMod" +msgstr "PlayMod" + +#: app/keys.c:140 +msgid "Play module." +msgstr "Play module." + +#: app/keys.c:142 +msgid "RecMod" +msgstr "RecMod" + +#: app/keys.c:142 +msgid "Play module + recording." +msgstr "Play module + recording." + +#: app/keys.c:144 +msgid "PlayPat" +msgstr "PlayPat" + +#: app/keys.c:144 +msgid "Play pattern." +msgstr "Play pattern." + +#: app/keys.c:146 +msgid "RecPat" +msgstr "RecPat" + +#: app/keys.c:146 +msgid "Play pattern + recording." +msgstr "Play pattern + recording." + +#: app/keys.c:148 +msgid "PlayCur" +msgstr "PlayCur" + +#: app/keys.c:148 +msgid "Play module from cursor." +msgstr "Play module from cursor." + +#: app/keys.c:150 +msgid "RecCur" +msgstr "RecCur" + +#: app/keys.c:150 +msgid "Play module from cursor + recording." +msgstr "Play module from cursor + recording." + +#: app/keys.c:152 +msgid "PlayRow" +msgstr "PlayRow" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." -msgstr "The key that increases “jump†value." +#: app/keys.c:152 +msgid "Play current pattern row." +msgstr "Play current pattern row." -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." -msgstr "The key that decreases “jump†value." +#: app/keys.c:154 +msgid "PlayBlk" +msgstr "PlayBlk" + +#: app/keys.c:154 +msgid "Play selected block." +msgstr "Play selected block." -#: app/keys.c:145 +#: app/keys.c:166 msgid "Upper Octave Keys..." msgstr "Upper Octave Keys..." -#: app/keys.c:146 +#: app/keys.c:167 msgid "" "These are the keys on the upper half of the keyboard. The c key is normally " "the key to the right of the TAB key. The rest of the keys should be ordered " @@ -858,11 +1570,11 @@ "the key to the right of the TAB key. The rest of the keys should be ordered " "in a piano keyboard fashion, including the number keys row above." -#: app/keys.c:152 +#: app/keys.c:172 msgid "Lower Octave Keys..." msgstr "Lower Octave Keys..." -#: app/keys.c:153 +#: app/keys.c:173 msgid "" "These are the keys on the lower half of the keyboard. The c key is normally " "the first character key to the right of the left Shift key. The rest of the " @@ -872,47 +1584,47 @@ "the first character key to the right of the left Shift key. The rest of the " "keys should be ordered in a piano keyboard fashion, including the row above." -#: app/keys.c:159 +#: app/keys.c:178 msgid "Other Keys..." msgstr "Other Keys..." -#: app/keys.c:160 +#: app/keys.c:179 msgid "Various other keys" msgstr "Various other keys" -#: app/keys.c:513 +#: app/keys.c:578 msgid "Function" msgstr "Function" -#: app/keys.c:514 +#: app/keys.c:579 msgid "Assignment" msgstr "Assignment" -#: app/keys.c:523 app/keys.c:526 +#: app/keys.c:588 msgid "Keyboard Configuration" msgstr "Keyboard Configuration" -#: app/keys.c:575 +#: app/keys.c:630 msgid "Key Group Explanation" msgstr "Key Group Explanation" -#: app/keys.c:592 +#: app/keys.c:643 msgid "Key Explanation" msgstr "Key Explanation" -#: app/keys.c:623 +#: app/keys.c:668 msgid "Modifiers:" msgstr "Modifiers:" -#: app/keys.c:649 +#: app/keys.c:687 msgid "Learn selected key" msgstr "Learn selected key" -#: app/keys.c:655 +#: app/keys.c:692 msgid "Learn all keys" msgstr "Learn all keys" -#: app/keys.c:661 +#: app/keys.c:702 msgid "" "Please press the desired key combination!\n" "Click into left list to cancel" @@ -920,34 +1632,17 @@ "Please press the desired key combination!\n" "Click into left list to cancel" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Ok" - -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Apply" - -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." -msgstr "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." - -#: app/keys.c:1000 +#: app/keys.c:948 #, c-format msgid "CH%02d" msgstr "CH%02d" -#: app/keys.c:1001 +#: app/keys.c:949 #, c-format msgid "Fast jump to channel %d" msgstr "Fast jump to channel %d" -#: app/keys.c:1076 +#: app/keys.c:1028 msgid "" "Automatic key configuration unsuccessful.\n" "Please use the Keyboard Configuration dialog\n" @@ -957,331 +1652,252 @@ "Please use the Keyboard Configuration dialog\n" "in the Settings menu." -#: app/menubar.c:140 +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" +msgstr "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" + +#: app/menubar.c:126 msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." msgstr "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." -#: app/menubar.c:162 +#: app/menubar.c:151 msgid "" -"Are you sure you want to quit?\n" +"Are you sure you want to do this?\n" "All changes will be lost!" msgstr "" -"Are you sure you want to quit?\n" +"Are you sure you want to do this?\n" "All changes will be lost!" -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Open..." - -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Save _as..." - -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Save Module as _WAV..." - -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Save XM without samples..." - -#: app/menubar.c:434 -msgid "_Quit" -msgstr "_Quit" - -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Clear _All" - -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Clear _Patterns Only" - -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Optimize Module" - -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "C_ut" - -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Copy" - -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "_Paste" - -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Kill notes" - -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "_Insert track" +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "Integers mixer, no interpolation, no filters, maximum sample length 1M" -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "_Delete track" +#: app/mixers/kbfloat.c:838 +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Increment cmd value" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "Single" -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Decrement cmd value" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Cyclic" +msgstr "Cyclic" -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "_Mark mode" +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "Keyboard" -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "C_lear block marks" +#: app/module-info.c:64 +msgid "Coupled" +msgstr "Coupled" -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "_Interpolate effects" +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "%sIns. %i, Smp. %i" -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Transpose half-note up" +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "I%i, S%i" -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Transpose half-note down" +#: app/module-info.c:481 +msgid "Period" +msgstr "Period" -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Transpose octave up" +#: app/module-info.c:484 +msgid "s" +msgstr "s" -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Transpose octave down" +#: app/module-info.c:499 +msgid "Mode" +msgstr "Mode" -#: app/menubar.c:526 -msgid "P_aste" -msgstr "P_aste" - -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "_Jazz Edit Mode" - -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "_Record keyreleases" - -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "Transp_osition..." +#: app/module-info.c:517 app/module-info.c:844 +msgid "Note" +msgstr "Note" -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "_Pattern" +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "Mixing a sample with itself is not a useful idea..." -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "_Track" +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Instrument Name" -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Selection" +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#smpl" -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_Find Unused Pattern" +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Sample Name" -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Copy Current to Unused Pattern" +#: app/module-info.c:665 +msgid "Linear" +msgstr "Linear" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "C_lear Unused Patterns" +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "_Pack Patterns" +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Module Info" -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "_Save Current Pattern" - -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "L_oad Pattern" - -#: app/menubar.c:599 -msgid "Sh_rink Current Pattern" -msgstr "Sh_rink Current Pattern" +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Songname:" -#: app/menubar.c:601 -msgid "_Expand Current Pattern" -msgstr "_Expand Current Pattern" +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Frequencies:" -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" -msgstr "_Toggle Current Channel Permanentness" - -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" -msgstr "Toggle _All Channels Permanentness" - -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Load XI..." - -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_Save XI..." +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "ProTracker Mode" -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_Clear Current" +#: app/module-info.c:756 +msgid "Extended Instrument/Sample Editor" +msgstr "Extended Instrument/Sample Editor" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Delete Unused Instruments" +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "Ins. 1" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "_Flicker-free scrolling" - -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "_Previous font" - -#: app/menubar.c:642 -msgid "_Next font" -msgstr "_Next font" - -#: app/menubar.c:647 -msgid "Change preferred _accidental type" -msgstr "Change preferred _accidental type" - -#: app/menubar.c:649 -msgid "Change effect column editing _direction" -msgstr "Change effect column editing _direction" +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "Smp. 1" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Display _Oscilloscopes" +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "Ins. 2" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Tracker" +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "Smp. 2" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "_Keyboard Configuration..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "_Audio Configuration..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "_GUI Configuration..." - -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "_MIDI Configuration..." - -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "Disable splash screen" - -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Save Settings now" +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "I1 => I2" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Save Settings on _Exit" +#: app/module-info.c:782 +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Copy Instrument 1 to Instrument 2" -#: app/menubar.c:690 -msgid "_About..." -msgstr "_About..." - -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Show _Tips..." - -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "_XM Effects..." +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "I1 <=> I2" -#: app/menubar.c:704 -msgid "_File" -msgstr "_File" +#: app/module-info.c:787 +msgid "Exchange Instruments 1 and 2" +msgstr "Exchange Instruments 1 and 2" -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Module" +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "S1 => S2" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Edit" +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "Copy Sample 1 to Sample 2" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Instrument" +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "S1 <=> S2" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Settings" +#: app/module-info.c:797 +msgid "Exchange Samples 1 and 2" +msgstr "Exchange Samples 1 and 2" -#: app/menubar.c:711 -msgid "_Help" -msgstr "_Help" +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "Mixing balance" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" -msgstr "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "I1, S0" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Instrument Name" +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "Note to play preview" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#smpl" +#: app/module-info.c:863 +msgid "Preview" +msgstr "Preview" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Sample Name" +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "Play the mixed sample without module modification" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Linear" +#: app/module-info.c:868 +msgid "Mix!" +msgstr "Mix!" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Module Info" +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "Tuning: " -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Songname:" +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Finetune" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Frequencies:" +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "RelNote" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "ProTracker Mode" +#: app/module-info.c:898 +msgid "Reference: " +msgstr "Reference: " -#: app/module-info.c:395 +#: app/module-info.c:1136 #, c-format msgid "" "Unused patterns: %d (used: %d)\n" @@ -1294,266 +1910,396 @@ "\n" "Clear unused and reorder playlist?\n" -#: app/playlist.c:526 +#: app/playlist.c:505 msgid "Insert pattern that is being edited" msgstr "Insert pattern that is being edited" -#: app/playlist.c:535 +#: app/playlist.c:511 msgid "Remove current playlist entry" msgstr "Remove current playlist entry" -#: app/playlist.c:543 +#: app/playlist.c:517 msgid "Add + Cpy" msgstr "Add + Cpy" -#: app/playlist.c:545 +#: app/playlist.c:519 msgid "" "Add a free pattern behind current position, and copy current pattern to it" msgstr "" "Add a free pattern behind current position, and copy current pattern to it" -#: app/playlist.c:548 +#: app/playlist.c:522 msgid "Add Free" msgstr "Add Free" -#: app/playlist.c:550 +#: app/playlist.c:524 msgid "Add a free pattern behind current position" msgstr "Add a free pattern behind current position" -#: app/playlist.c:560 +#: app/playlist.c:534 msgid "Len" msgstr "Len" -#: app/playlist.c:574 +#: app/playlist.c:548 msgid "Song length" msgstr "Song length" -#: app/playlist.c:580 +#: app/playlist.c:554 msgid "Rstrt" msgstr "Rstrt" -#: app/playlist.c:593 +#: app/playlist.c:567 msgid "Song restart position" msgstr "Song restart position" -#: app/preferences.c:74 +#: app/preferences.c:60 msgid "" -"A directory called '.soundtracker' has been created in your\n" +"A directory called \".soundtracker\" has been created in your\n" "home directory to store configuration files.\n" msgstr "" -"A directory called ‘.soundtracker’ has been created in your\n" +"A directory called “.soundtracker†has been created in your\n" "home directory to store configuration files.\n" -#: app/sample-editor.c:234 +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "Would you like to import settings from old version of Soundtracker?" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" +"An error is occured during converting config:\n" +"%s" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" +"An error is occured during reading or parsing config:\n" +"%s" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" +"An error is occured during saving config:\n" +"%s" + +#: app/sample-editor.c:356 msgid "No loop" msgstr "No loop" -#: app/sample-editor.c:236 +#: app/sample-editor.c:358 msgid "PingPong" msgstr "PingPong" -#: app/sample-editor.c:240 app/sample-editor.c:1574 +#: app/sample-editor.c:361 app/sample-editor.c:1755 msgid "8 bits" msgstr "8 bits" -#: app/sample-editor.c:241 app/sample-editor.c:1574 +#: app/sample-editor.c:362 app/sample-editor.c:1755 msgid "16 bits" msgstr "16 bits" -#: app/sample-editor.c:247 +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "Apple/SGI audio (*aif, *.aiff, *.aifc)" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "SUN/NeXT audio (*.au, *.snd)" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "Audio Visual Research files (*.avr)" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "Apple Core Audio files (*.caf)" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "Amiga IFF/SV8/SV16 (*.iff)" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "Berkeley/IRCAM/CARL audio (*.sf)" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "Creative Labs audio (*.voc)" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "Microsoft RIFF/NIST Sphere (*.wav)" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "FLAC lossless audio (*.flac)" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "Psion audio (*.wve)" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "OGG compressed audio (*.ogg, *.vorbis)" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "RIFF 64 files (*.rf64)" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "HMM Tool Kit files (*.htk)" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "GNU Octave/Matlab files (*.mat)" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "Ensoniq PARIS files (*.paf)" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "Portable Voice Format files (*.pvf)" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "Headerless raw data (*.raw, *.r8)" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "Sound Designer II files (*.sd2)" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "Midi Sample Dump Standard files (*.sds)" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "SoundFoundry WAVE 64 files (*.w64)" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "Sample Vision files (*.smp)" + +#: app/sample-editor.c:406 msgid "Sample Editor" msgstr "Sample Editor" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 +#: app/sample-editor.c:453 app/midi-settings.c:406 msgid "Volume" msgstr "Volume" -#: app/sample-editor.c:288 +#: app/sample-editor.c:454 msgid "Panning" msgstr "Panning" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Finetune" - -#: app/sample-editor.c:309 +#: app/sample-editor.c:475 msgid "Selection:" msgstr "Selection:" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 +#: app/sample-editor.c:479 app/track-editor.c:215 msgid "None" msgstr "None" -#: app/sample-editor.c:319 +#: app/sample-editor.c:485 msgid "All" msgstr "All" -#: app/sample-editor.c:340 +#: app/sample-editor.c:506 msgid "Length:" msgstr "Length:" -#: app/sample-editor.c:356 +#: app/sample-editor.c:522 msgid "Set as loop" msgstr "Set as loop" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "RelNote" +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Load Sample" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Load Sample..." +#: app/sample-editor.c:541 +msgid "Load sample into the current sample slot" +msgstr "Load sample into the current sample slot" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Save WAV..." +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Save Sample" + +#: app/sample-editor.c:542 +msgid "Save the current sample" +msgstr "Save the current sample" -#: app/sample-editor.c:379 +#: app/sample-editor.c:543 msgid "Save region as WAV..." msgstr "Save region as WAV..." -#: app/sample-editor.c:392 +#: app/sample-editor.c:557 msgid "Save WAV" msgstr "Save WAV" -#: app/sample-editor.c:402 +#: app/sample-editor.c:569 msgid "Save Region" msgstr "Save Region" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Monitor" - -#: app/sample-editor.c:419 +#: app/sample-editor.c:587 msgid "Volume Ramp" msgstr "Volume Ramp" -#: app/sample-editor.c:425 +#: app/sample-editor.c:593 msgid "Trim" msgstr "Trim" -#: app/sample-editor.c:436 +#: app/sample-editor.c:603 msgid "Zoom to selection" msgstr "Zoom to selection" -#: app/sample-editor.c:442 +#: app/sample-editor.c:609 msgid "Show all" msgstr "Show all" -#: app/sample-editor.c:448 +#: app/sample-editor.c:615 msgid "Zoom in (+50%)" msgstr "Zoom in (+50%)" -#: app/sample-editor.c:454 +#: app/sample-editor.c:621 msgid "Zoom out (-50%)" msgstr "Zoom out (-50%)" -#: app/sample-editor.c:460 +#: app/sample-editor.c:627 msgid "Reverse" msgstr "Reverse" -#: app/sample-editor.c:470 +#: app/sample-editor.c:637 msgid "Cut" msgstr "Cut" -#: app/sample-editor.c:476 +#: app/sample-editor.c:643 msgid "Remove" msgstr "Remove" -#: app/sample-editor.c:482 +#: app/sample-editor.c:649 msgid "Copy" msgstr "Copy" -#: app/sample-editor.c:488 +#: app/sample-editor.c:655 msgid "Paste" msgstr "Paste" -#: app/sample-editor.c:494 +#: app/sample-editor.c:661 msgid "Clear Sample" msgstr "Clear Sample" -#: app/sample-editor.c:500 +#: app/sample-editor.c:667 msgid "Crop" msgstr "Crop" -#: app/sample-editor.c:564 +#: app/sample-editor.c:730 msgid "(no selection)" msgstr "(no selection)" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "Out of memory for copybuffer.\n" +#: app/sample-editor.c:1279 +msgid "Out of memory for copybuffer." +msgstr "Out of memory for copybuffer." -#: app/sample-editor.c:1188 +#: app/sample-editor.c:1400 msgid "" msgstr "" -#: app/sample-editor.c:1301 +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Mix" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Left" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Right" + +#: app/sample-editor.c:1479 +msgid "2 samples" +msgstr "2 samples" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "Load left and right channels into the current sample and the next one" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 msgid "Out of memory for sample data." msgstr "Out of memory for sample data." -#: app/sample-editor.c:1317 app/sample-editor.c:1329 +#: app/sample-editor.c:1575 app/sample-editor.c:1585 msgid "Read error." msgstr "Read error." -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Load stereo sample" - -#: app/sample-editor.c:1484 +#: app/sample-editor.c:1723 +#, c-format msgid "" "You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" +"(%s can only handle mono samples!)\n" "\n" "Please choose which channel to load:" msgstr "" "You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" +"(%s can only handle mono samples!)\n" "\n" "Please choose which channel to load:" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Left" - -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Mix" - -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Right" +#: app/sample-editor.c:1726 +msgid "Stereo sample loading" +msgstr "Stereo sample loading" -#: app/sample-editor.c:1575 +#: app/sample-editor.c:1756 msgid "Signed" msgstr "Signed" -#: app/sample-editor.c:1575 +#: app/sample-editor.c:1756 msgid "Unsigned" msgstr "Unsigned" -#: app/sample-editor.c:1576 +#: app/sample-editor.c:1757 msgid "Little-Endian" msgstr "Little-Endian" -#: app/sample-editor.c:1576 +#: app/sample-editor.c:1757 msgid "Big-Endian" msgstr "Big-Endian" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "Mono" - -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "Stereo" - -#: app/sample-editor.c:1589 +#: app/sample-editor.c:1764 msgid "Load raw sample" msgstr "Load raw sample" -#: app/sample-editor.c:1597 +#: app/sample-editor.c:1772 msgid "" "You have selected a sample that is not\n" "in a known format. You can load the raw data now.\n" @@ -1565,111 +2311,136 @@ "\n" "Please choose a format:" -#: app/sample-editor.c:1623 +#: app/sample-editor.c:1798 msgid "Word format:" msgstr "Word format:" -#: app/sample-editor.c:1670 +#: app/sample-editor.c:1829 msgid "Sampling Rate:" msgstr "Sampling Rate:" -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" - -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "OK" - -#: app/sample-editor.c:1748 +#: app/sample-editor.c:1915 msgid "Can't read sample" msgstr "Can't read sample" -#: app/sample-editor.c:1761 +#: app/sample-editor.c:1929 msgid "Sample is too long for current mixer module. Loading anyway." msgstr "Sample is too long for current mixer module. Loading anyway." -#: app/sample-editor.c:1785 +#: app/sample-editor.c:1954 msgid "Can only handle 8 and 16 bit samples with up to 2 channels" msgstr "Can only handle 8 and 16 bit samples with up to 2 channels" -#: app/sample-editor.c:1968 +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Can't open file for writing." + +#: app/sample-editor.c:2079 msgid "Please select region first." msgstr "Please select region first." -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Start sampling" - -#: app/sample-editor.c:2042 +#: app/sample-editor.c:2194 msgid "No sampling driver available" msgstr "No sampling driver available" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 +#: app/sample-editor.c:2203 msgid "Sampling Window" msgstr "Sampling Window" -#: app/sample-editor.c:2104 +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "Record" + +#: app/sample-editor.c:2232 +msgid "Clear" +msgstr "Clear" + +#: app/sample-editor.c:2263 +msgid "Sampling failed!" +msgstr "Sampling failed!" + +#: app/sample-editor.c:2298 msgid "Out of memory while sampling!" msgstr "Out of memory while sampling!" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" + +#: app/sample-editor.c:2372 +msgid "Converting stereo sample" +msgstr "Converting stereo sample" -#: app/sample-editor.c:2186 +#: app/sample-editor.c:2599 msgid "Recorded sample is too long for current mixer module. Using it anyway." msgstr "Recorded sample is too long for current mixer module. Using it anyway." -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normalize" - -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Execute" - -#: app/sample-editor.c:2250 app/sample-editor.c:2253 +#: app/sample-editor.c:2657 msgid "Volume Ramping" msgstr "Volume Ramping" -#: app/sample-editor.c:2269 +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normalize" + +#: app/sample-editor.c:2667 msgid "Perform linear volume fade on Selection" msgstr "Perform linear volume fade on Selection" -#: app/sample-editor.c:2281 +#: app/sample-editor.c:2676 msgid "Left [%]:" msgstr "Left [%]:" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 +#: app/sample-editor.c:2679 app/sample-editor.c:2696 msgid "H" msgstr "H" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "Half" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 msgid "D" msgstr "D" -#: app/sample-editor.c:2298 +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "Double" + +#: app/sample-editor.c:2693 msgid "Right [%]:" msgstr "Right [%]:" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 +#: app/sample-editor.c:2786 msgid "Trim parameters" msgstr "Trim parameters" -#: app/sample-editor.c:2498 +#: app/sample-editor.c:2792 msgid "Trim at the beginning" msgstr "Trim at the beginning" -#: app/sample-editor.c:2505 +#: app/sample-editor.c:2796 msgid "Trim at the end" msgstr "Trim at the end" -#: app/sample-editor.c:2512 +#: app/sample-editor.c:2802 msgid "Threshold (dB)" msgstr "Threshold (dB)" -#: app/tips-dialog.c:50 +#: app/tips-dialog.c:45 msgid "" "Welcome to SoundTracker!\n" "\n" @@ -1681,7 +2452,7 @@ "If you are new to this type of program, you will want to get hold of\n" "some XM or MOD files first and play with them." -#: app/tips-dialog.c:55 +#: app/tips-dialog.c:50 msgid "" "You can make SoundTracker's edit mode more responsive to keyboard\n" "input by decreasing the mixing buffer size of the \"Editing\" object in\n" @@ -1691,7 +2462,7 @@ "input by decreasing the mixing buffer size of the “Editing†object in\n" "the Audio Configuration." -#: app/tips-dialog.c:59 +#: app/tips-dialog.c:54 msgid "" "You can adjust the loop points in the sample editor by holding Shift\n" "and using the left and right mousebuttons.\n" @@ -1699,7 +2470,7 @@ "You can adjust the loop points in the sample editor by holding Shift\n" "and using the left and right mousebuttons.\n" -#: app/tips-dialog.c:62 +#: app/tips-dialog.c:57 msgid "" "If you want to know more about tracking, and how the various commands\n" "work, have a look at http://www.united-trackers.org/" @@ -1707,7 +2478,7 @@ "If you want to know more about tracking, and how the various commands\n" "work, have a look at http://www.united-trackers.org/" -#: app/tips-dialog.c:65 +#: app/tips-dialog.c:60 msgid "" "You can assign samples of an instrument to the individual keys by\n" "activating its sample and then clicking on the keyboard in the\n" @@ -1717,7 +2488,7 @@ "activating its sample and then clicking on the keyboard in the\n" "instrument editor page." -#: app/tips-dialog.c:69 +#: app/tips-dialog.c:64 msgid "" "Is your cursor trapped in a number entry field?\n" "Just press Return or Tab to free yourself!" @@ -1725,344 +2496,529 @@ "Is your cursor trapped in a number entry field?\n" "Just press Return or Tab to free yourself!" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "SoundTracker Tip of the day" - -#: app/tips-dialog.c:154 +#: app/tips-dialog.c:111 msgid "Previous Tip" msgstr "Previous Tip" -#: app/tips-dialog.c:162 +#: app/tips-dialog.c:118 msgid "Next Tip" msgstr "Next Tip" -#: app/tips-dialog.c:174 +#: app/tips-dialog.c:129 msgid "Show tip next time" msgstr "Show tip next time" -#: app/track-editor.c:113 +#: app/tips-dialog.c:146 +#, c-format +msgid "%s Tip of the day" +msgstr "%s Tip of the day" + +#: app/track-editor.c:130 msgid "Arpeggio" msgstr "Arpeggio" -#: app/track-editor.c:114 +#: app/track-editor.c:131 msgid "Porta up" msgstr "Porta up" -#: app/track-editor.c:115 +#: app/track-editor.c:132 msgid "Porta down" msgstr "Porta down" -#: app/track-editor.c:116 app/track-editor.c:180 +#: app/track-editor.c:133 app/track-editor.c:197 msgid "Tone porta" msgstr "Tone porta" -#: app/track-editor.c:117 app/track-editor.c:176 +#: app/track-editor.c:134 app/track-editor.c:193 msgid "Vibrato" msgstr "Vibrato" -#: app/track-editor.c:118 +#: app/track-editor.c:135 msgid "Tone porta + Volume slide" msgstr "Tone porta + Volume slide" -#: app/track-editor.c:119 +#: app/track-editor.c:136 msgid "Vibrato + Volume slide" msgstr "Vibrato + Volume slide" -#: app/track-editor.c:120 +#: app/track-editor.c:137 msgid "Tremolo" msgstr "Tremolo" -#: app/track-editor.c:121 app/track-editor.c:177 +#: app/track-editor.c:138 app/track-editor.c:194 msgid "Set panning" msgstr "Set panning" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Position jump" +#: app/track-editor.c:139 +msgid "Sample offset" +msgstr "Sample offset" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 msgid "Set volume" msgstr "Set volume" -#: app/track-editor.c:126 +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Position jump" + +#: app/track-editor.c:143 msgid "Pattern break" msgstr "Pattern break" -#: app/track-editor.c:128 +#: app/track-editor.c:145 msgid "Set tempo/bpm" msgstr "Set tempo/bpm" -#: app/track-editor.c:129 +#: app/track-editor.c:146 msgid "Set global volume" msgstr "Set global volume" -#: app/track-editor.c:130 +#: app/track-editor.c:147 msgid "Global volume slide" msgstr "Global volume slide" -#: app/track-editor.c:133 +#: app/track-editor.c:150 msgid "Key off" msgstr "Key off" -#: app/track-editor.c:134 +#: app/track-editor.c:151 msgid "Set envelop position" msgstr "Set envelop position" -#: app/track-editor.c:138 +#: app/track-editor.c:155 msgid "Panning slide" msgstr "Panning slide" -#: app/track-editor.c:139 +#: app/track-editor.c:156 msgid "LP filter resonance" msgstr "LP filter resonance" -#: app/track-editor.c:140 +#: app/track-editor.c:157 msgid "Multi retrig note" msgstr "Multi retrig note" -#: app/track-editor.c:142 +#: app/track-editor.c:159 msgid "Tremor" msgstr "Tremor" -#: app/track-editor.c:148 +#: app/track-editor.c:165 msgid "LP filter cutoff" msgstr "LP filter cutoff" -#: app/track-editor.c:153 +#: app/track-editor.c:170 msgid "Fine porta up" msgstr "Fine porta up" -#: app/track-editor.c:154 +#: app/track-editor.c:171 msgid "Fine porta down" msgstr "Fine porta down" -#: app/track-editor.c:155 +#: app/track-editor.c:172 msgid "Set gliss control" msgstr "Set gliss control" -#: app/track-editor.c:156 +#: app/track-editor.c:173 msgid "Set vibrato control" msgstr "Set vibrato control" -#: app/track-editor.c:157 +#: app/track-editor.c:174 msgid "Set finetune" msgstr "Set finetune" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Set loop begin/loop" +#: app/track-editor.c:175 +msgid "Pattern loop" +msgstr "Pattern loop" -#: app/track-editor.c:159 +#: app/track-editor.c:176 msgid "Set tremolo control" msgstr "Set tremolo control" -#: app/track-editor.c:161 +#: app/track-editor.c:178 msgid "Retrig note" msgstr "Retrig note" -#: app/track-editor.c:162 app/track-editor.c:174 +#: app/track-editor.c:179 app/track-editor.c:191 msgid "Fine volume slide up" msgstr "Fine volume slide up" -#: app/track-editor.c:163 app/track-editor.c:173 +#: app/track-editor.c:180 app/track-editor.c:190 msgid "Fine volume slide down" msgstr "Fine volume slide down" -#: app/track-editor.c:164 +#: app/track-editor.c:181 msgid "Note cut" msgstr "Note cut" -#: app/track-editor.c:165 +#: app/track-editor.c:182 msgid "Note delay" msgstr "Note delay" -#: app/track-editor.c:166 +#: app/track-editor.c:183 msgid "Pattern delay" msgstr "Pattern delay" -#: app/track-editor.c:171 +#: app/track-editor.c:188 msgid "Volume slide down" msgstr "Volume slide down" -#: app/track-editor.c:172 +#: app/track-editor.c:189 msgid "Volume slide up" msgstr "Volume slide up" -#: app/track-editor.c:175 +#: app/track-editor.c:192 msgid "Set vibrato speed" msgstr "Set vibrato speed" -#: app/track-editor.c:178 +#: app/track-editor.c:195 msgid "Panning slide left" msgstr "Panning slide left" -#: app/track-editor.c:179 +#: app/track-editor.c:196 msgid "Panning slide right" msgstr "Panning slide right" -#: app/track-editor.c:184 +#: app/track-editor.c:201 msgid "sine" msgstr "sine" -#: app/track-editor.c:185 +#: app/track-editor.c:202 msgid "ramp down" msgstr "ramp down" -#: app/track-editor.c:186 +#: app/track-editor.c:203 msgid "square" msgstr "square" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 +#: app/track-editor.c:206 #, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "[Cmd: " + +#: app/track-editor.c:244 +msgid "Extra fine porta up" +msgstr "Extra fine porta up" + +#: app/track-editor.c:247 +msgid "Extra fine porta down" +msgstr "Extra fine porta down" + +#: app/track-editor.c:257 msgid "None ]" msgstr "None ]" -#: app/track-editor.c:360 +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr " => tempo: %02d ]" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr " => BPM: %03d ]" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr " => offset: %d ]" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr ", continuous mode" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr " begin ]" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr " %02d times ]" + +#: app/track-editor.c:470 msgid "Jazz Edit:" msgstr "Jazz Edit:" -#: app/track-editor.c:405 +#: app/track-editor.c:524 msgid "Tracker" msgstr "Tracker" -#: app/tracker-settings.c:235 +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" + +#: app/tracker-settings.c:262 msgid "Font list" msgstr "Font list" -#: app/tracker-settings.c:255 +#: app/tracker-settings.c:284 msgid "Add font" msgstr "Add font" -#: app/tracker-settings.c:261 +#: app/tracker-settings.c:290 msgid "Delete font" msgstr "Delete font" -#: app/tracker-settings.c:267 +#: app/tracker-settings.c:296 msgid "Apply font" msgstr "Apply font" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Up" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Down" - -#: app/tracker-settings.c:288 +#: app/tracker-settings.c:312 msgid "Select font..." msgstr "Select font..." -#: app/transposition.c:198 +#: app/transposition.c:189 msgid "Whole Song" msgstr "Whole Song" -#: app/transposition.c:199 +#: app/transposition.c:190 msgid "All Patterns" msgstr "All Patterns" -#: app/transposition.c:200 +#: app/transposition.c:191 msgid "Current Pattern" msgstr "Current Pattern" -#: app/transposition.c:201 +#: app/transposition.c:192 msgid "Current Track" msgstr "Current Track" -#: app/transposition.c:205 +#: app/transposition.c:195 msgid "Current Instrument" msgstr "Current Instrument" -#: app/transposition.c:206 +#: app/transposition.c:196 msgid "All Instruments" msgstr "All Instruments" -#: app/transposition.c:210 +#: app/transposition.c:199 msgid "Half note up" msgstr "Half note up" -#: app/transposition.c:211 +#: app/transposition.c:200 msgid "Half note down" msgstr "Half note down" -#: app/transposition.c:212 +#: app/transposition.c:201 msgid "Octave up" msgstr "Octave up" -#: app/transposition.c:213 +#: app/transposition.c:202 msgid "Octave down" msgstr "Octave down" -#: app/transposition.c:216 +#: app/transposition.c:205 msgid "Exchange 1 <-> 2" msgstr "Exchange 1 <-> 2" -#: app/transposition.c:217 +#: app/transposition.c:206 msgid "Change 1 -> 2" msgstr "Change 1 -> 2" -#: app/transposition.c:226 app/transposition.c:229 +#: app/transposition.c:215 msgid "Transposition Tools" msgstr "Transposition Tools" -#: app/transposition.c:250 +#: app/transposition.c:225 msgid "Scope of the operation:" msgstr "Scope of the operation:" -#: app/transposition.c:257 +#: app/transposition.c:230 msgid "Note Transposition" msgstr "Note Transposition" -#: app/transposition.c:288 +#: app/transposition.c:256 msgid "Instrument Changing" msgstr "Instrument Changing" -#: app/transposition.c:303 +#: app/transposition.c:268 msgid "Instrument 1:" msgstr "Instrument 1:" -#: app/transposition.c:305 app/transposition.c:315 +#: app/transposition.c:270 app/transposition.c:279 msgid "Current instrument" msgstr "Current instrument" -#: app/transposition.c:313 +#: app/transposition.c:277 msgid "Instrument 2:" msgstr "Instrument 2:" -#: app/xm.c:196 +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "Transposition is possible only in editing mode" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "Pattern header reading error." + +#: app/xm.c:200 +#, c-format +msgid "Pattern length out of range: %d." +msgstr "Pattern length out of range: %d." + +#: app/xm.c:226 +msgid "Error loading notes." +msgstr "Error loading notes." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "Sample header reading error." + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "Sample data reading error." + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +msgid "Instrument header reading error." +msgstr "Instrument header reading error." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "XM Load Error: Sample header size != 40." + +#: app/xm.c:598 +msgid "Sample map reading error." +msgstr "Sample map reading error." + +#: app/xm.c:602 +msgid "Volume envelope points reading error." +msgstr "Volume envelope points reading error." + +#: app/xm.c:607 +msgid "Panning envelope points reading error." +msgstr "Panning envelope points reading error." + +#: app/xm.c:613 +msgid "Envelope parameters reading error." +msgstr "Envelope parameters reading error." + +#: app/xm.c:632 #, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Pattern length out of range: %d.\n" +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "XM Load Warning: Invalid vibtype %d, using Sine." + +#: app/xm.c:678 app/xm.c:1233 +msgid "Out of memory error!" +msgstr "Out of memory error!" -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "File is no XI instrument." +#: app/xm.c:694 +msgid "The file is not an XI instrument." +msgstr "The file is not an XI instrument." -#: app/xm.c:557 +#: app/xm.c:717 #, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Unknown XI version 0x%x\n" +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" -#: app/xm.c:587 +#: app/xm.c:729 +msgid "Instrument sample map reading error." +msgstr "Instrument sample map reading error." + +#: app/xm.c:735 +msgid "Instrument volume envelope points reading error." +msgstr "Instrument volume envelope points reading error." + +#: app/xm.c:742 +msgid "Instrument panning envelope points reading error." +msgstr "Instrument panning envelope points reading error." + +#: app/xm.c:750 +msgid "Instrument envelope parameters reading error." +msgstr "Instrument envelope parameters reading error." + +#: app/xm.c:769 #, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "Invalid vibtype %d, using Sine.\n" +msgid "Invalid vibtype %d, using Sine." +msgstr "Invalid vibtype %d, using Sine." + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "Module header reading error." -#: app/xm.c:859 app/xm.c:984 +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "Pattern order table reading error." + +#: app/xm.c:1122 app/xm.c:1271 msgid "Error while loading patterns." msgstr "Error while loading patterns." -#: app/xm.c:927 +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" + +#: app/xm.c:1200 msgid "Can't open file" msgstr "Can't open file" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Error while loading instruments." +#: app/xm.c:1215 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "Invalid number of channels in XM (only 1..32 allowed)." + +#: app/xm.c:1266 +msgid "Error while loading pattern order table." +msgstr "Error while loading pattern order table." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" +"Instruments loading error. Some of instruments can be missing or corrupted." -#: app/xm.c:1001 +#: app/xm.c:1291 #, c-format msgid "" "Module contains sample(s) that are too long for the current mixer.\n" @@ -2071,62 +3027,408 @@ "Module contains sample(s) that are too long for the current mixer.\n" "Maximum sample length is %d." -#: app/xm.c:1399 +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "Bzzzz, error extracting song, aborting operation." + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "%s (Err 0)" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "%s (Err 1)" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "%s (Err 2)" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "%s (Err 3)" + +#: app/xm.c:1686 msgid "Not FastTracker XM and not supported MOD format!" msgstr "Not FastTracker XM and not supported MOD format!" -#: app/xm.c:1414 app/xm.c:1435 +#: app/xm.c:1704 app/xm.c:1731 msgid "Error when file reading or unexpected end of file" msgstr "Error when file reading or unexpected end of file" -#: app/xm.c:1418 +#: app/xm.c:1710 msgid "Incorrect or unsupported version of pattern file!" msgstr "Incorrect or unsupported version of pattern file!" -#: app/xm.c:1422 +#: app/xm.c:1716 msgid "Incorrect pattern length!" msgstr "Incorrect pattern length!" -#: app/xm.c:1468 +#: app/xm.c:1761 app/xm.c:1787 msgid "Error during saving pattern!" msgstr "Error during saving pattern!" -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "error opening ALSA MIDI input stream (%s)\n" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "Get client info error: %s\n" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "Set client info error: %s\n" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "error creating sequencer port (%s)\n" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "error subscribing sequencer port (%s)\n" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "error closing handle (%s)\n" + +#: app/midi-settings.c:399 msgid "Auto connect" msgstr "Auto connect" -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 +#: app/midi-settings.c:414 msgid "Channel" msgstr "Channel" -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 +#: app/midi-settings.c:423 msgid "Client number" msgstr "Client number" -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 +#: app/midi-settings.c:434 msgid "Port number" msgstr "Port number" -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 +#: app/midi-settings.c:453 msgid "Input" msgstr "Input" -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 +#: app/midi-settings.c:462 msgid "For future development" msgstr "For future development" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 +#: app/midi-settings.c:468 msgid "Output" msgstr "Output" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 +#: app/midi-settings.c:479 msgid "Debug level" msgstr "Debug level" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 +#: app/midi-settings.c:492 msgid "Misc" msgstr "Misc" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 +#: app/midi-settings.c:532 msgid "MIDI Configuration" msgstr "MIDI Configuration" + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Pattern" + +#: soundtracker.glade:49 +msgid "Track" +msgstr "Track" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_Kill notes" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "_Insert track" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "_Delete track" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "Increment cmd value" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Decrement cmd value" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "C_lear block marks" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "_Interpolate effects" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_File" + +#: soundtracker.glade:217 +msgid "_Open…" +msgstr "_Open…" + +#: soundtracker.glade:237 +msgid "Save _as…" +msgstr "Save _as…" + +#: soundtracker.glade:252 +msgid "Save Module as _WAV…" +msgstr "Save Module as _WAV…" + +#: soundtracker.glade:261 +msgid "Save _XM without samples…" +msgstr "Save _XM without samples…" + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "_Recent" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Module" + +#: soundtracker.glade:309 +msgid "Clear _All" +msgstr "Clear _All" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Clear _Patterns Only" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Optimize Module" + +#: soundtracker.glade:346 +msgid "_Set Optimal Amplification" +msgstr "_Set Optimal Amplification" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Edit" + +#: soundtracker.glade:398 +msgid "_Jazz edit mode" +msgstr "_Jazz edit mode" + +#: soundtracker.glade:412 +msgid "Transp_osition…" +msgstr "Transp_osition…" + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Pattern" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "_Track" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Selection" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "_Mark mode" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Transpose half-note up" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Transpose half-note down" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Transpose octave up" + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Transpose octave down" + +#: soundtracker.glade:661 +msgid "_Load Pattern…" +msgstr "_Load Pattern…" + +#: soundtracker.glade:670 +msgid "_Save Current Pattern…" +msgstr "_Save Current Pattern…" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_Find Unused Pattern" + +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Copy Current to Unused Pattern" + +#: soundtracker.glade:703 +msgid "_Add Free Pattern" +msgstr "_Add Free Pattern" + +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "Add Free _Pattern and Copy" + +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "C_lear Unused Patterns" + +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "_Pack Patterns" + +#: soundtracker.glade:745 +msgid "S_hrink Current Pattern" +msgstr "S_hrink Current Pattern" + +#: soundtracker.glade:753 +msgid "_Expand Current Pattern" +msgstr "_Expand Current Pattern" + +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "_Toggle Current Track Permanentness" + +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "Toggle _All Tracks Permanentness" + +#: soundtracker.glade:789 +msgid "_Mute / Unmute Current Track" +msgstr "_Mute / Unmute Current Track" + +#: soundtracker.glade:798 +msgid "_Unmute All Tracks" +msgstr "_Unmute All Tracks" + +#: soundtracker.glade:807 +msgid "Current Track _Solo" +msgstr "Current Track _Solo" + +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Instrument" + +#: soundtracker.glade:827 +msgid "_Load XI…" +msgstr "_Load XI…" + +#: soundtracker.glade:836 +msgid "_Save XI…" +msgstr "_Save XI…" + +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_Clear Current" + +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_Delete Unused Instruments" + +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Settings" + +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Display _Oscilloscopes" + +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "_Loop playback" + +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Tracker" + +#: soundtracker.glade:913 +msgid "_Flicker-free Scrolling" +msgstr "_Flicker-free Scrolling" + +#: soundtracker.glade:921 +msgid "_Previous Font" +msgstr "_Previous Font" + +#: soundtracker.glade:930 +msgid "_Next Font" +msgstr "_Next Font" + +#: soundtracker.glade:944 +msgid "Change Preferred _Accidental Type" +msgstr "Change Preferred _Accidental Type" + +#: soundtracker.glade:953 +msgid "Change Effect Column _Editing Direction" +msgstr "Change Effect Column _Editing Direction" + +#: soundtracker.glade:970 +msgid "_Keyboard Configuration…" +msgstr "_Keyboard Configuration…" + +#: soundtracker.glade:980 +msgid "_Audio Configuration…" +msgstr "_Audio Configuration…" + +#: soundtracker.glade:990 +msgid "_GUI Configuration…" +msgstr "_GUI Configuration…" + +#: soundtracker.glade:1000 +msgid "_MIDI Configuration…" +msgstr "_MIDI Configuration…" + +#: soundtracker.glade:1016 +msgid "_Disable Splash Screen" +msgstr "_Disable Splash Screen" + +#: soundtracker.glade:1023 +msgid "_Save Settings Now" +msgstr "_Save Settings Now" + +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Save Settings on _Exit" + +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_Help" + +#: soundtracker.glade:1053 +msgid "_About…" +msgstr "_About…" + +#: soundtracker.glade:1068 +msgid "Show _Tips…" +msgstr "Show _Tips…" + +#: soundtracker.glade:1078 +msgid "_XM Effects" +msgstr "_XM Effects" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/en@quot.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/en@quot.gmo differ diff -Nru soundtracker-0.6.8/po/en@quot.po soundtracker-1.0.2~pre2/po/en@quot.po --- soundtracker-0.6.8/po/en@quot.po 2006-02-25 13:37:42.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/en@quot.po 2020-05-27 18:54:26.000000000 +0000 @@ -1,7 +1,7 @@ # English translations for soundtracker package. -# Copyright (C) 2006 Michael Krause +# Copyright (C) 2020 Michael Krause # This file is distributed under the same license as the soundtracker package. -# Automatically generated, 2006. +# Automatically generated, 2020. # # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation @@ -27,18 +27,26 @@ # msgid "" msgstr "" -"Project-Id-Version: soundtracker 0.6.8\n" +"Project-Id-Version: soundtracker 1.0.1-pre1\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" -"PO-Revision-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" +"PO-Revision-Date: 2020-05-27 21:54+0300\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" +"Language: en@quot\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "Connection with audio thread failed!" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "Playback Output" @@ -46,531 +54,1053 @@ msgid "Editing Output" msgstr "Editing Output" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Sampling" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "Driver Module" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "Mixer Module" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Description" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "Audio Configuration" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Drivers" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Mixers" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Close" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "No Cheat Sheet pages are found!" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d bytes)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" + +#: app/cheat-sheet.c:91 +msgid "XM Effects Cheat Sheet" +msgstr "XM Effects Cheat Sheet" + +#: app/colors.c:42 +msgid "Background" +msgstr "Background" + +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "Background for tracker and sample dislays" + +#: app/colors.c:43 +msgid "Cursor background" +msgstr "Cursor background" + +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "Background for the tracker cursor line" + +#: app/colors.c:44 +msgid "Major lines" +msgstr "Major lines" + +#: app/colors.c:44 +msgid "Major lines highlighting" +msgstr "Major lines highlighting" + +#: app/colors.c:45 +msgid "Minor lines" +msgstr "Minor lines" + +#: app/colors.c:45 +msgid "Minor lines highlighting" +msgstr "Minor lines highlighting" + +#: app/colors.c:46 soundtracker.glade:142 +msgid "Selection" +msgstr "Selection" + +#: app/colors.c:46 +msgid "Tracker selection" +msgstr "Tracker selection" + +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "Notes, waveforms" + +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" +msgstr "Tracker text (notes, effects) and waveforms" + +#: app/colors.c:48 +msgid "Delimiters" +msgstr "Delimiters" + +#: app/colors.c:48 +msgid "Tracker delimiters" +msgstr "Tracker delimiters" + +#: app/colors.c:49 +msgid "Channel numbers, loops" +msgstr "Channel numbers, loops" + +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" +msgstr "Channel numbers and loops in the sample editor" + +#: app/colors.c:50 +msgid "Cursor idle" +msgstr "Cursor idle" + +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "Tracker cursor in idle mode" + +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "Cursor editing" + +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "Tracker cursor in editing mode" + +#: app/colors.c:52 +msgid "Cursor bg in selection" +msgstr "Cursor bg in selection" + +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" +msgstr "Background for the tracker cursor in the selection" + +#: app/colors.c:53 +msgid "Mixer position" +msgstr "Mixer position" + +#: app/colors.c:53 +msgid "Mixer position indicator" +msgstr "Mixer position indicator" + +#: app/colors.c:54 +msgid "Zero line" +msgstr "Zero line" + +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "Sample display zero line" + +#: app/colors.c:56 +msgid "White keys" +msgstr "White keys" + +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "White clavier keys, text on black keys" + +#: app/colors.c:57 +msgid "Black keys" +msgstr "Black keys" + +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" +msgstr "Black clavier keys, text on white keys" + +#: app/colors.c:58 +msgid "White keys pressed" +msgstr "White keys pressed" + +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "White clavier keys in pressed state" + +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "Black keys pressed" + +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "Black clavier keys in pressed state" + +#: app/colors.c:60 +msgid "White text pressed" +msgstr "White text pressed" + +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "Text on white clavier keys in pressed state" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "Black text pressed" + +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "Text on black clavier keys in pressed state" + +#: app/colors.c:395 +#, c-format +msgid "%s colors configuration" +msgstr "%s colors configuration" + +#: app/colors.c:398 +msgid "Reset" +msgstr "Reset" + +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "Reset the color scheme to standard" + +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "Reset colors to the latest set values" + +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "Gtk clavier colors" + +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" +msgstr "%f milliseconds" + +#: app/drivers/alsa1x.c:320 +msgid "ALSA device opening error" +msgstr "ALSA device opening error" + +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "hw params obtaining error" + +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "Unable to set audio format" + +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +msgid "Unable to set channels number" +msgstr "Unable to set channels number" + +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "Unable to set appropriate buffer size" + +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "Unable to get minimal period size" + +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "Unable to get maximal period size" + +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "Unable to get minimal sample rate" + +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "Unable to get maximal sample rate" + +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "Unable to get minimal buffer size" + +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "Unable to get maximal buffer size" + +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "Unable to get minimal channels number" + +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "Unable to get maximal channels number" + +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "Both mono and stereo are not supported by ALSA device!" + +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "Neither 8 nor 16 bit resolution is supported by ALSA device!" + +#: app/drivers/alsa1x.c:675 #, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Estimated audio delay: %f microseconds" +msgid " = %u samples" +msgstr " = %u samples" + +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "Dev" + +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "No soundcards found..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "Devices list" + +#: app/drivers/alsa1x.c:811 app/gui.c:476 +msgid "8 bit" +msgstr "8 bit" + +#: app/drivers/alsa1x.c:811 app/gui.c:476 +msgid "16 bit" +msgstr "16 bit" + +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "Mono" + +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "Stereo" + +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 msgid "These changes won't take effect until you restart playing." msgstr "These changes won't take effect until you restart playing." -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "These changes won't take effect until you restart sampling." + +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "Device:" + +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "List available hardware devices" + +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 msgid "Resolution:" msgstr "Resolution:" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 msgid "Channels:" msgstr "Channels:" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 msgid "Frequency [Hz]:" msgstr "Frequency [Hz]:" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 msgid "Buffer Size:" msgstr "Buffer Size:" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "ALSA card number:" +#: app/drivers/alsa1x.c:914 +msgid "Number of Periods:" +msgstr "Number of Periods:" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "ALSA device number:" +#: app/drivers/alsa1x.c:938 +msgid "Estimated audio delay:" +msgstr "Estimated audio delay:" -#: app/drivers/alsa-input.c:374 -#, c-format +#: app/drivers/alsa1x.c:943 msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." msgstr "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Required sound output format not supported.\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Required sound output parameters not supported.\n" +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" +msgstr "Unable to restart stream from suspending" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Estimated audio delay: %f milliseconds" +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "Stream preparation error" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" -msgstr "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "Sound playing error" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "Required output-channel parameters not supported.\n" +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "Sound recording error" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "Unable to prepare ALSA channel.\n" +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "ALSA driver: Out of memory error!" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "Alsa setup error.\n" +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "Error attaching sound output" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." -msgstr "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "Unable to set access" -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" -msgstr "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "Unable to set sample rate" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "no settings (yet), sorry!" +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "Unable to set periods number" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Can't open file for writing." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "Unable to get period size" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." -msgstr "These changes won't take effect until you restart sampling." +#: app/drivers/alsa1x.c:1293 +msgid "Error setting hw parameters" +msgstr "Error setting hw parameters" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Input device (e.g. '/dev/dsp'):" +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "Unable to determine current swparams for playback" + +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "Unable to determine current swparams for capture" + +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "Unable to set start threshold mode for playback" + +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "Unable to set start threshold mode for capture" + +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "Unable to set avail min for playback" + +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "Unable to set avail min for capture" + +#: app/drivers/alsa1x.c:1328 +msgid "Unable to enable timestamping for playback" +msgstr "Unable to enable timestamping for playback" + +#: app/drivers/alsa1x.c:1329 +msgid "Unable to enable timestamping for capture" +msgstr "Unable to enable timestamping for capture" + +#: app/drivers/alsa1x.c:1335 +msgid "Unable to set timestamp type for playback" +msgstr "Unable to set timestamp type for playback" -#: app/drivers/oss-input.c:234 +#: app/drivers/alsa1x.c:1336 +msgid "Unable to set timestamp type for capture" +msgstr "Unable to set timestamp type for capture" + +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" +msgstr "Unable to set sw params for playback" + +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "Unable to set sw params for capture" + +#: app/drivers/alsa1x.c:1352 +msgid "Unable to prepare playback" +msgstr "Unable to prepare playback" + +#: app/drivers/alsa1x.c:1353 +msgid "Unable to prepare capture" +msgstr "Unable to prepare capture" + +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" +msgstr "Unable to obtain poll descriptors for playback" + +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" +msgstr "Unable to start capture" + +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "No driver available for your system." + +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "no settings (yet), sorry!" + +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "ALnewconfig() failed." + +#: app/drivers/irix-output.c:178 +msgid "16 Bit output not supported." +msgstr "16 Bit output not supported." + +#: app/drivers/irix-output.c:184 +msgid "Stereo output not supported." +msgstr "Stereo output not supported." + +#: app/drivers/irix-output.c:192 +msgid "Couldn't open audio port." +msgstr "Couldn't open audio port." + +#: app/drivers/oss.c:130 +msgid "OSS input: reading error" +msgstr "OSS input: reading error" + +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "OSS input: out of memory error" + +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 #, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" -msgstr "" -"Couldn't open %s for sampling:\n" -"%s" +msgid "Estimated audio delay: %f milliseconds" +msgstr "Estimated audio delay: %f milliseconds" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 #, c-format msgid "(%d samples)" msgstr "(%d samples)" -#: app/drivers/oss-output.c:217 +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "Input device (e.g. '/dev/dsp'):" + +#: app/drivers/oss.c:248 msgid "Output device (e.g. '/dev/dsp'):" msgstr "Output device (e.g. '/dev/dsp'):" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" -msgstr "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" +msgstr "OSS driver: setting format failed" -#: app/drivers/jack-output.c:254 -msgid "transport master" -msgstr "transport master" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "OSS driver: setting number of channels failed" -#: app/drivers/jack-output.c:259 -msgid "declick" -msgstr "declick" +#: app/drivers/oss.c:445 +#, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "OSS driver (%s): Couldn't open %s" + +#: app/drivers/oss.c:480 +#, c-format +msgid "Required %s format not supported." +msgstr "Required %s format not supported." -#: app/drivers/jack-output.c:279 +#: app/drivers/jack.c:367 #, c-format msgid "Running at %d Hz with %d frames" msgstr "Running at %d Hz with %d frames" -#: app/drivers/jack-output.c:283 -#, c-format +#: app/drivers/jack.c:371 msgid "Jack server not running?" msgstr "Jack server not running?" -#: app/drivers/jack-output.c:327 +#: app/drivers/jack.c:403 #, c-format -msgid "soundtracker" -msgstr "soundtracker" +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" +"Jack driver error:\n" +"%s" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "out_1" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "Jack driver activation failed." + +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "Update" + +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "Jack autostart" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "out_2" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "declick" + +#: app/drivers/jack.c:610 +msgid "Jack server is not running or some error occured." +msgstr "Jack server is not running or some error occured." + +#: app/drivers/sdl-output.c:76 +msgid "Experimental SDL support." +msgstr "Experimental SDL support." -#: app/drivers/sun-output.c:209 +#: app/drivers/sun-output.c:212 msgid "Output device (e.g. '/dev/audio'):" msgstr "Output device (e.g. '/dev/audio'):" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 +#: app/drivers/sun-output.c:385 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "SUN output (%s): Cannot open device" +msgstr "SUN output (%s): Cannot open device" -#: app/drivers/sun-output.c:395 +#: app/drivers/sun-output.c:393 #, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: Cannot play (%s)" +msgid "SUN output (%s) does not support playback" +msgstr "SUN output (%s) does not support playback" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 +#: app/drivers/sun-output.c:402 #, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: Cannot handle %dHz (%s)" +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "SUN output (%s): Cannot handle %d Hz" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 +#: app/drivers/sun-output.c:432 #, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s: Required sound encoding not supported.\n" +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "SUN output (%s): Required sound encoding not supported" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 +#: app/drivers/sun-output.c:455 #, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: Cannot set block size (%s)" +msgid "SUN output (%s): Cannot set block size" +msgstr "SUN output (%s): Cannot set block size" + +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "SUN input (%s): Cannot get device information" + +#: app/drivers/sun-input.c:77 +msgid "SUN input: reading error" +msgstr "SUN input: reading error" -#: app/drivers/sun-input.c:117 +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "SUN input: out of memory error" + +#: app/drivers/sun-input.c:131 msgid "Input device (e.g. '/dev/audio'):" msgstr "Input device (e.g. '/dev/audio'):" -#: app/drivers/sun-input.c:242 +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "SUN input (%s): Cannot open device" + +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "SUN input (%s) does not support full-duplex operation" + +#: app/drivers/sun-input.c:264 #, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: Cannot record (%s)" +msgid "SUN input (%s) does not support recording" +msgstr "SUN input (%s) does not support recording" -#: app/envelope-box.c:878 +#: app/drivers/sun-input.c:273 +#, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "SUN input (%s): Cannot handle %d Hz" + +#: app/drivers/sun-input.c:304 +#, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "SUN input (%s): Required sound encoding not supported." + +#: app/drivers/sun-input.c:332 +#, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "SUN input (%s): Cannot set block size" + +#: app/envelope-box.c:1279 app/gui.c:2589 msgid "Length" msgstr "Length" -#: app/envelope-box.c:879 +#: app/envelope-box.c:1280 msgid "Current" msgstr "Current" -#: app/envelope-box.c:880 +#: app/envelope-box.c:1281 msgid "Offset" msgstr "Offset" -#: app/envelope-box.c:881 +#: app/envelope-box.c:1282 msgid "Value" msgstr "Value" -#: app/envelope-box.c:887 app/playlist.c:524 +#: app/envelope-box.c:1288 app/playlist.c:503 msgid "Insert" msgstr "Insert" -#: app/envelope-box.c:893 app/playlist.c:533 +#: app/envelope-box.c:1294 app/playlist.c:509 msgid "Delete" msgstr "Delete" -#: app/envelope-box.c:985 +#: app/envelope-box.c:1369 msgid "" "Graphical\n" "Envelope\n" "Editor\n" -"only in\n" -"GNOME Version" +"only with\n" +"GooCanvas" msgstr "" "Graphical\n" "Envelope\n" "Editor\n" -"only in\n" -"GNOME Version" +"only with\n" +"GooCanvas" -#: app/envelope-box.c:1000 +#: app/envelope-box.c:1384 msgid "Sustain" msgstr "Sustain" -#: app/envelope-box.c:1008 +#: app/envelope-box.c:1392 msgid "Point" msgstr "Point" -#: app/envelope-box.c:1010 +#: app/envelope-box.c:1394 msgid "Loop" msgstr "Loop" -#: app/envelope-box.c:1018 app/sample-editor.c:275 +#: app/envelope-box.c:1402 app/sample-editor.c:441 msgid "Start" msgstr "Start" -#: app/envelope-box.c:1019 app/sample-editor.c:276 +#: app/envelope-box.c:1403 app/sample-editor.c:442 msgid "End" msgstr "End" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Load Module" - -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Save Module" - -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Render WAV" - -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Save Song" - -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Load Sample" +#: app/file-operations.c:127 +#, c-format +msgid "" +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" +msgstr "" +"The file named “%s†already exists.\n" +"Do you want to replace it?" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Save Sample" +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "All supported types" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Load Instrument" +#: app/file-operations.c:245 +msgid "All files" +msgstr "All files" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Save Instrument" - -#: app/file-operations.c:175 +#: app/file-operations.c:388 msgid "File" msgstr "File" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Operation not supported." +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "Classic ST" + +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "FT2" + +#: app/gui-settings.c:293 +msgid "Mixed" +msgstr "Mixed" + +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "GUI Configuration" -#: app/gui-settings.c:100 +#: app/gui-settings.c:321 msgid "Scopes Frequency" msgstr "Scopes Frequency" -#: app/gui-settings.c:103 +#: app/gui-settings.c:326 msgid "Tracker Frequency" msgstr "Tracker Frequency" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "GUI Configuration" - -#: app/gui-settings.c:354 +#: app/gui-settings.c:331 msgid "Hexadecimal row numbers" msgstr "Hexadecimal row numbers" -#: app/gui-settings.c:361 +#: app/gui-settings.c:337 msgid "Use upper case letters for hex numbers" msgstr "Use upper case letters for hex numbers" -#: app/gui-settings.c:368 +#: app/gui-settings.c:343 +msgid "FT2-like volume column" +msgstr "FT2-like volume column" + +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" +msgstr "Use symbols in the volume column" + +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" +msgstr "Leave Tone Porta as symbol “mâ€" + +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "Decimal volume representation" + +#: app/gui-settings.c:367 msgid "Asynchronous (IT-style) pattern editing" msgstr "Asynchronous (IT-style) pattern editing" -#: app/gui-settings.c:375 +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "Polyphonic try (non-editing) mode" + +#: app/gui-settings.c:379 +msgid "Record keyreleases" +msgstr "Record keyreleases" + +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" +msgstr "Human-made delay compensation [s]" + +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "Record precise timings" + +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "Use FXes to record note press/release timings with tick accuracy" + +#: app/gui-settings.c:406 msgid "Fxx command updates Tempo/BPM sliders" msgstr "Fxx command updates Tempo/BPM sliders" -#: app/gui-settings.c:382 +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "Emulate FastTracker Rxx bug" + +#: app/gui-settings.c:418 msgid "Switch to tracker after loading/saving" msgstr "Switch to tracker after loading/saving" -#: app/gui-settings.c:389 +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "Automatically add file extensions" + +#: app/gui-settings.c:430 msgid "Save window geometry on exit" msgstr "Save window geometry on exit" -#: app/gui-settings.c:396 +#: app/gui-settings.c:436 msgid "Use note name B instead of H" msgstr "Use note name B instead of H" -#: app/gui-settings.c:403 +#: app/gui-settings.c:442 msgid "Save and restore permanent channels" msgstr "Save and restore permanent channels" -#: app/gui-settings.c:417 +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." +msgstr "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." + +#: app/gui-settings.c:456 +msgid "Selection mode" +msgstr "Selection mode" + +#: app/gui-settings.c:472 msgid "Scopes buffer size [MB]" msgstr "Scopes buffer size [MB]" -#: app/gui-settings.c:436 +#: app/gui-settings.c:481 +msgid "Sample displays' mode" +msgstr "Sample displays' mode" + +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "Scopes" + +#: app/gui-settings.c:486 +msgid "Editor" +msgstr "Editor" + +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "Strobo" + +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "Fast, but not so much accurate method for waveforms' drawing" + +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "Minmax" + +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "More realistic waveform drawing method with higher CPU load" + +#: app/gui-settings.c:511 msgid "Track line format:" msgstr "Track line format:" -#: app/gui-subs.c:32 app/gui.c:2369 +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "Color scheme" + +#: app/gui-settings.c:573 +msgid "Tracker colors configuration" +msgstr "Tracker colors configuration" + +#: app/gui-subs.c:34 app/gui.c:2975 msgid "Ready." msgstr "Ready." -#: app/gui-subs.c:33 +#: app/gui-subs.c:35 msgid "Playing song..." msgstr "Playing song..." -#: app/gui-subs.c:34 +#: app/gui-subs.c:36 msgid "Playing pattern..." msgstr "Playing pattern..." -#: app/gui-subs.c:35 +#: app/gui-subs.c:37 msgid "Loading module..." msgstr "Loading module..." -#: app/gui-subs.c:36 +#: app/gui-subs.c:38 msgid "Module loaded." msgstr "Module loaded." -#: app/gui-subs.c:37 +#: app/gui-subs.c:39 msgid "Saving module..." msgstr "Saving module..." -#: app/gui-subs.c:38 +#: app/gui-subs.c:40 msgid "Module saved." msgstr "Module saved." -#: app/gui-subs.c:39 +#: app/gui-subs.c:41 msgid "Loading sample..." msgstr "Loading sample..." -#: app/gui-subs.c:40 +#: app/gui-subs.c:42 msgid "Sample loaded." msgstr "Sample loaded." -#: app/gui-subs.c:41 +#: app/gui-subs.c:43 msgid "Saving sample..." msgstr "Saving sample..." -#: app/gui-subs.c:42 +#: app/gui-subs.c:44 msgid "Sample saved." msgstr "Sample saved." -#: app/gui-subs.c:43 +#: app/gui-subs.c:45 msgid "Loading instrument..." msgstr "Loading instrument..." -#: app/gui-subs.c:44 +#: app/gui-subs.c:46 msgid "Instrument loaded." msgstr "Instrument loaded." -#: app/gui-subs.c:45 +#: app/gui-subs.c:47 msgid "Saving instrument..." msgstr "Saving instrument..." -#: app/gui-subs.c:46 +#: app/gui-subs.c:48 msgid "Instrument saved." msgstr "Instrument saved." -#: app/gui-subs.c:47 +#: app/gui-subs.c:49 msgid "Saving song..." msgstr "Saving song..." -#: app/gui-subs.c:48 +#: app/gui-subs.c:50 msgid "Song saved." msgstr "Song saved." -#: app/gui-subs.c:483 app/gui-subs.c:554 +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "Error!" + +#: app/gui-subs.c:414 msgid "Question" msgstr "Question" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "Yes" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "No" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Cancel" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." + +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" -#: app/gui-subs.c:589 +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "GUI creation error: Widget ‘%s’ is not found in %s file." + +#: app/gui-subs.h:223 msgid "Warning" msgstr "Warning" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "Error!" +#: app/gui-subs.h:225 +msgid "Information" +msgstr "Information" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" - -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 +#: app/gui.c:251 app/gui.c:2666 msgid "Row highlighting configuration" msgstr "Row highlighting configuration" -#: app/gui.c:301 +#: app/gui.c:260 msgid "Highlight rows (major / minor):" msgstr "Highlight rows (major / minor):" -#: app/gui.c:478 +#: app/gui.c:330 +msgid "" +msgstr "" + +#: app/gui.c:451 +msgid "Saving module failed" +msgstr "Saving module failed" + +#: app/gui.c:535 +msgid "File output" +msgstr "File output" + +#: app/gui.c:612 +msgid "Can't open file for writing" +msgstr "Can't open file for writing" + +#: app/gui.c:618 +msgid "Can't change file ownership" +msgstr "Can't change file ownership" + +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "Can't allocate mix buffer." + +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "An error occured while writing to file" + +#: app/gui.c:691 msgid "" "Odd pattern rows contain data which will be lost after shrinking.\n" "Do you want to continue anyway?" @@ -578,7 +1108,7 @@ "Odd pattern rows contain data which will be lost after shrinking.\n" "Do you want to continue anyway?" -#: app/gui.c:506 +#: app/gui.c:715 msgid "" "The pattern is too long for expanding.\n" "Some data at the end of the pattern will be lost.\n" @@ -588,12 +1118,7 @@ "Some data at the end of the pattern will be lost.\n" "Do you want to continue anyway?" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "No file selected." - -#: app/gui.c:563 +#: app/gui.c:757 msgid "" "Are you sure you want to free the current project?\n" "All changes will be lost!" @@ -601,16 +1126,12 @@ "Are you sure you want to free the current project?\n" "All changes will be lost!" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Are you sure you want to overwrite the file?" - -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "Error when opening pattern file!" +#: app/gui.c:810 +#, c-format +msgid "Error when opening pattern file %s!" +msgstr "Error when opening pattern file %s!" -#: app/gui.c:651 +#: app/gui.c:829 msgid "" "The length of the pattern being loaded doesn't match with that of current " "pattern in module.\n" @@ -620,232 +1141,423 @@ "pattern in module.\n" "Do you want to change the current pattern length?" -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "SoundTracker Startup" +#: app/gui.c:2124 +#, c-format +msgid "%s Startup" +msgstr "%s Startup" -#: app/gui.c:1778 app/gui.c:1815 +#: app/gui.c:2178 app/gui.c:2206 msgid "Loading..." msgstr "Loading..." -#: app/gui.c:1804 +#: app/gui.c:2195 msgid "Use SoundTracker!" msgstr "Use SoundTracker!" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Load XM..." - -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Save XM..." - -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Render module as WAV..." - -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "Save song as XM..." +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"Are you sure you want to quit?\n" +"All changes will be lost!" + +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "Amplification estimation" + +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." + +#: app/gui.c:2296 +msgid "Estimating..." +msgstr "Estimating..." + +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "FastTracker modules (*.xm)" + +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "Original SoundTracker modules (*.mod)" + +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "Microsoft RIFF (*.wav)" + +#: app/gui.c:2400 +msgid "Extended pattern (*.xp)" +msgstr "Extended pattern (*.xp)" -#: app/gui.c:1872 +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" +msgstr "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" + +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Load Module" + +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" +msgstr "Load the selected module into the tracker" + +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Save Module" + +#: app/gui.c:2434 +msgid "Save the current module" +msgstr "Save the current module" + +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Render WAV" + +#: app/gui.c:2436 +msgid "Render the current module as WAV file" +msgstr "Render the current module as WAV file" + +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Save XM without samples..." + +#: app/gui.c:2439 msgid "Load current pattern..." msgstr "Load current pattern..." -#: app/gui.c:1874 +#: app/gui.c:2440 msgid "Save current pattern..." msgstr "Save current pattern..." -#: app/gui.c:1944 +#: app/gui.c:2507 msgid "Play Song" msgstr "Play Song" -#: app/gui.c:1956 +#: app/gui.c:2516 msgid "Play Pattern" msgstr "Play Pattern" -#: app/gui.c:1968 +#: app/gui.c:2525 +msgid "Play From Cursor" +msgstr "Play From Cursor" + +#: app/gui.c:2534 +msgid "Play Block" +msgstr "Play Block" + +#: app/gui.c:2543 msgid "Stop" msgstr "Stop" -#: app/gui.c:1973 +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "Loop Playback" + +#: app/gui.c:2562 msgid "Pat" msgstr "Pat" -#: app/gui.c:1979 +#: app/gui.c:2568 msgid "Edited pattern" msgstr "Edited pattern" -#: app/gui.c:1992 +#: app/gui.c:2578 msgid "When enabled, browsing the playlist does not change the edited pattern." msgstr "" "When enabled, browsing the playlist does not change the edited pattern." -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Number of Channels:" - -#: app/gui.c:2025 +#: app/gui.c:2583 msgid "Pattern Length" msgstr "Pattern Length" -#: app/gui.c:2060 +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" + +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Number of Channels:" + +#: app/gui.c:2632 msgid "Set preferred accidental type" msgstr "Set preferred accidental type" -#: app/gui.c:2066 +#: app/gui.c:2638 msgid "Measure" msgstr "Measure" -#: app/gui.c:2067 +#: app/gui.c:2639 msgid "Enable row highlighting" msgstr "Enable row highlighting" -#: app/gui.c:2093 +#: app/gui.c:2660 msgid "Other..." msgstr "Other..." -#: app/gui.c:2129 +#: app/gui.c:2687 msgid "Change effect column editing direction" msgstr "Change effect column editing direction" -#: app/gui.c:2160 +#: app/gui.c:2715 app/gui.c:2820 msgid "Global amplification" msgstr "Global amplification" -#: app/gui.c:2196 +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "Estimate the best amplification by pressing on the clipping indicator" + +#: app/gui.c:2740 msgid "Pitchbend" msgstr "Pitchbend" -#: app/gui.c:2204 +#: app/gui.c:2748 msgid "Reset pitchbend to its normal value" msgstr "Reset pitchbend to its normal value" -#: app/gui.c:2216 +#: app/gui.c:2760 msgid "Editing" msgstr "Editing" -#: app/gui.c:2223 +#: app/gui.c:2767 msgid "Octave" msgstr "Octave" -#: app/gui.c:2232 +#: app/gui.c:2776 msgid "Jump" msgstr "Jump" -#: app/gui.c:2241 +#: app/gui.c:2785 msgid "Instr" msgstr "Instr" -#: app/gui.c:2257 +#: app/gui.c:2801 msgid "Sample" msgstr "Sample" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "Welcome to SoundTracker!" +#: app/gui.c:2827 +msgid "dB" +msgstr "dB" + +#: app/gui.c:2866 +#, c-format +msgid "Welcome to %s!" +msgstr "Welcome to %s!" -#: app/gui.c:2323 +#: app/gui.c:2883 app/sample-editor.c:2238 msgid "%M:%S" msgstr "%M:%S" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "VolFade" - -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "VibSpeed" - -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "VibDepth" - -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "VibSweep" - -#: app/instrument-editor.c:163 app/instrument-editor.c:186 +#: app/instrument-editor.c:184 app/instrument-editor.c:216 msgid "Can't open file." msgstr "Can't open file." -#: app/instrument-editor.c:229 +#: app/instrument-editor.c:209 +msgid "Saving instrument failed." +msgstr "Saving instrument failed." + +#: app/instrument-editor.c:232 +msgid "Clear current instrument?" +msgstr "Clear current instrument?" + +#: app/instrument-editor.c:252 msgid "Sine" msgstr "Sine" -#: app/instrument-editor.c:229 +#: app/instrument-editor.c:252 msgid "Square" msgstr "Square" -#: app/instrument-editor.c:229 +#: app/instrument-editor.c:252 msgid "Saw Down" msgstr "Saw Down" -#: app/instrument-editor.c:229 +#: app/instrument-editor.c:252 msgid "Saw Up" msgstr "Saw Up" -#: app/instrument-editor.c:233 +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" +msgstr "FastTracker instruments (*.xi)" + +#: app/instrument-editor.c:259 msgid "Instrument Editor" msgstr "Instrument Editor" -#: app/instrument-editor.c:242 +#: app/instrument-editor.c:268 msgid "Volume envelope" msgstr "Volume envelope" -#: app/instrument-editor.c:250 +#: app/instrument-editor.c:276 msgid "Panning envelope" msgstr "Panning envelope" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Load Instrument..." - -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Save Instrument..." +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Load Instrument" + +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "Load instrument in the current instrument slot" + +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Save Instrument" + +#: app/instrument-editor.c:297 +msgid "Save the current instrument" +msgstr "Save the current instrument" -#: app/instrument-editor.c:271 +#: app/instrument-editor.c:299 msgid "Load XI" msgstr "Load XI" -#: app/instrument-editor.c:277 +#: app/instrument-editor.c:305 msgid "Save XI" msgstr "Save XI" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Vibrato Type:" +#: app/instrument-editor.c:320 +msgid "Volume Fadeout" +msgstr "Volume Fadeout" + +#: app/instrument-editor.c:344 +msgid "Vibrato:" +msgstr "Vibrato:" + +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "Type" + +#: app/instrument-editor.c:356 +msgid "Speed" +msgstr "Speed" + +#: app/instrument-editor.c:359 +msgid "Depth" +msgstr "Depth" + +#: app/instrument-editor.c:361 +msgid "Sweep" +msgstr "Sweep" -#: app/instrument-editor.c:368 +#: app/instrument-editor.c:413 msgid "Note:" msgstr "Note:" -#: app/instrument-editor.c:386 +#: app/instrument-editor.c:431 msgid "Initialize" msgstr "Initialize" -#: app/keys.c:57 +#: app/keys.c:58 msgid "" msgstr "" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "The key that inserts the special keyoff note for FastTracker modules." +#: app/keys.c:134 +msgid "KOFF" +msgstr "KOFF" + +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "The key that inserts the special keyoff note for FastTracker modules." + +#: app/keys.c:136 +msgid "JMP+" +msgstr "JMP+" + +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "The key that increases “jump†value." + +#: app/keys.c:138 +msgid "JMP-" +msgstr "JMP-" + +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "The key that decreases “jump†value." + +#: app/keys.c:140 +msgid "PlayMod" +msgstr "PlayMod" + +#: app/keys.c:140 +msgid "Play module." +msgstr "Play module." + +#: app/keys.c:142 +msgid "RecMod" +msgstr "RecMod" + +#: app/keys.c:142 +msgid "Play module + recording." +msgstr "Play module + recording." + +#: app/keys.c:144 +msgid "PlayPat" +msgstr "PlayPat" + +#: app/keys.c:144 +msgid "Play pattern." +msgstr "Play pattern." + +#: app/keys.c:146 +msgid "RecPat" +msgstr "RecPat" + +#: app/keys.c:146 +msgid "Play pattern + recording." +msgstr "Play pattern + recording." + +#: app/keys.c:148 +msgid "PlayCur" +msgstr "PlayCur" + +#: app/keys.c:148 +msgid "Play module from cursor." +msgstr "Play module from cursor." + +#: app/keys.c:150 +msgid "RecCur" +msgstr "RecCur" + +#: app/keys.c:150 +msgid "Play module from cursor + recording." +msgstr "Play module from cursor + recording." + +#: app/keys.c:152 +msgid "PlayRow" +msgstr "PlayRow" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." -msgstr "The key that increases “jump†value." +#: app/keys.c:152 +msgid "Play current pattern row." +msgstr "Play current pattern row." -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." -msgstr "The key that decreases “jump†value." +#: app/keys.c:154 +msgid "PlayBlk" +msgstr "PlayBlk" + +#: app/keys.c:154 +msgid "Play selected block." +msgstr "Play selected block." -#: app/keys.c:145 +#: app/keys.c:166 msgid "Upper Octave Keys..." msgstr "Upper Octave Keys..." -#: app/keys.c:146 +#: app/keys.c:167 msgid "" "These are the keys on the upper half of the keyboard. The c key is normally " "the key to the right of the TAB key. The rest of the keys should be ordered " @@ -855,11 +1567,11 @@ "the key to the right of the TAB key. The rest of the keys should be ordered " "in a piano keyboard fashion, including the number keys row above." -#: app/keys.c:152 +#: app/keys.c:172 msgid "Lower Octave Keys..." msgstr "Lower Octave Keys..." -#: app/keys.c:153 +#: app/keys.c:173 msgid "" "These are the keys on the lower half of the keyboard. The c key is normally " "the first character key to the right of the left Shift key. The rest of the " @@ -869,47 +1581,47 @@ "the first character key to the right of the left Shift key. The rest of the " "keys should be ordered in a piano keyboard fashion, including the row above." -#: app/keys.c:159 +#: app/keys.c:178 msgid "Other Keys..." msgstr "Other Keys..." -#: app/keys.c:160 +#: app/keys.c:179 msgid "Various other keys" msgstr "Various other keys" -#: app/keys.c:513 +#: app/keys.c:578 msgid "Function" msgstr "Function" -#: app/keys.c:514 +#: app/keys.c:579 msgid "Assignment" msgstr "Assignment" -#: app/keys.c:523 app/keys.c:526 +#: app/keys.c:588 msgid "Keyboard Configuration" msgstr "Keyboard Configuration" -#: app/keys.c:575 +#: app/keys.c:630 msgid "Key Group Explanation" msgstr "Key Group Explanation" -#: app/keys.c:592 +#: app/keys.c:643 msgid "Key Explanation" msgstr "Key Explanation" -#: app/keys.c:623 +#: app/keys.c:668 msgid "Modifiers:" msgstr "Modifiers:" -#: app/keys.c:649 +#: app/keys.c:687 msgid "Learn selected key" msgstr "Learn selected key" -#: app/keys.c:655 +#: app/keys.c:692 msgid "Learn all keys" msgstr "Learn all keys" -#: app/keys.c:661 +#: app/keys.c:702 msgid "" "Please press the desired key combination!\n" "Click into left list to cancel" @@ -917,34 +1629,17 @@ "Please press the desired key combination!\n" "Click into left list to cancel" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Ok" - -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Apply" - -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." -msgstr "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." - -#: app/keys.c:1000 +#: app/keys.c:948 #, c-format msgid "CH%02d" msgstr "CH%02d" -#: app/keys.c:1001 +#: app/keys.c:949 #, c-format msgid "Fast jump to channel %d" msgstr "Fast jump to channel %d" -#: app/keys.c:1076 +#: app/keys.c:1028 msgid "" "Automatic key configuration unsuccessful.\n" "Please use the Keyboard Configuration dialog\n" @@ -954,331 +1649,252 @@ "Please use the Keyboard Configuration dialog\n" "in the Settings menu." -#: app/menubar.c:140 +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" +msgstr "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" + +#: app/menubar.c:126 msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." msgstr "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." -#: app/menubar.c:162 +#: app/menubar.c:151 msgid "" -"Are you sure you want to quit?\n" +"Are you sure you want to do this?\n" "All changes will be lost!" msgstr "" -"Are you sure you want to quit?\n" +"Are you sure you want to do this?\n" "All changes will be lost!" -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Open..." - -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Save _as..." - -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Save Module as _WAV..." - -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Save XM without samples..." - -#: app/menubar.c:434 -msgid "_Quit" -msgstr "_Quit" - -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Clear _All" - -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Clear _Patterns Only" - -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Optimize Module" - -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "C_ut" - -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Copy" - -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "_Paste" - -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Kill notes" - -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "_Insert track" +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "Integers mixer, no interpolation, no filters, maximum sample length 1M" -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "_Delete track" +#: app/mixers/kbfloat.c:838 +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Increment cmd value" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "Single" -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Decrement cmd value" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Cyclic" +msgstr "Cyclic" -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "_Mark mode" +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "Keyboard" -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "C_lear block marks" +#: app/module-info.c:64 +msgid "Coupled" +msgstr "Coupled" -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "_Interpolate effects" +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "%sIns. %i, Smp. %i" -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Transpose half-note up" +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "I%i, S%i" -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Transpose half-note down" +#: app/module-info.c:481 +msgid "Period" +msgstr "Period" -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Transpose octave up" +#: app/module-info.c:484 +msgid "s" +msgstr "s" -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Transpose octave down" +#: app/module-info.c:499 +msgid "Mode" +msgstr "Mode" -#: app/menubar.c:526 -msgid "P_aste" -msgstr "P_aste" - -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "_Jazz Edit Mode" - -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "_Record keyreleases" - -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "Transp_osition..." +#: app/module-info.c:517 app/module-info.c:844 +msgid "Note" +msgstr "Note" -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "_Pattern" +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "Mixing a sample with itself is not a useful idea..." -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "_Track" +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Instrument Name" -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Selection" +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#smpl" -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_Find Unused Pattern" +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Sample Name" -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Copy Current to Unused Pattern" +#: app/module-info.c:665 +msgid "Linear" +msgstr "Linear" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "C_lear Unused Patterns" +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "_Pack Patterns" +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Module Info" -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "_Save Current Pattern" - -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "L_oad Pattern" - -#: app/menubar.c:599 -msgid "Sh_rink Current Pattern" -msgstr "Sh_rink Current Pattern" +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Songname:" -#: app/menubar.c:601 -msgid "_Expand Current Pattern" -msgstr "_Expand Current Pattern" +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Frequencies:" -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" -msgstr "_Toggle Current Channel Permanentness" - -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" -msgstr "Toggle _All Channels Permanentness" - -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Load XI..." - -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_Save XI..." +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "ProTracker Mode" -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_Clear Current" +#: app/module-info.c:756 +msgid "Extended Instrument/Sample Editor" +msgstr "Extended Instrument/Sample Editor" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Delete Unused Instruments" +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "Ins. 1" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "_Flicker-free scrolling" - -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "_Previous font" - -#: app/menubar.c:642 -msgid "_Next font" -msgstr "_Next font" - -#: app/menubar.c:647 -msgid "Change preferred _accidental type" -msgstr "Change preferred _accidental type" - -#: app/menubar.c:649 -msgid "Change effect column editing _direction" -msgstr "Change effect column editing _direction" +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "Smp. 1" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Display _Oscilloscopes" +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "Ins. 2" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Tracker" +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "Smp. 2" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "_Keyboard Configuration..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "_Audio Configuration..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "_GUI Configuration..." - -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "_MIDI Configuration..." - -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "Disable splash screen" - -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Save Settings now" +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "I1 => I2" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Save Settings on _Exit" +#: app/module-info.c:782 +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Copy Instrument 1 to Instrument 2" -#: app/menubar.c:690 -msgid "_About..." -msgstr "_About..." - -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Show _Tips..." - -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "_XM Effects..." +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "I1 <=> I2" -#: app/menubar.c:704 -msgid "_File" -msgstr "_File" +#: app/module-info.c:787 +msgid "Exchange Instruments 1 and 2" +msgstr "Exchange Instruments 1 and 2" -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Module" +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "S1 => S2" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Edit" +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "Copy Sample 1 to Sample 2" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Instrument" +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "S1 <=> S2" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Settings" +#: app/module-info.c:797 +msgid "Exchange Samples 1 and 2" +msgstr "Exchange Samples 1 and 2" -#: app/menubar.c:711 -msgid "_Help" -msgstr "_Help" +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "Mixing balance" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" -msgstr "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "I1, S0" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Instrument Name" +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "Note to play preview" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#smpl" +#: app/module-info.c:863 +msgid "Preview" +msgstr "Preview" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Sample Name" +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "Play the mixed sample without module modification" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Linear" +#: app/module-info.c:868 +msgid "Mix!" +msgstr "Mix!" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Module Info" +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "Tuning: " -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Songname:" +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Finetune" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Frequencies:" +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "RelNote" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "ProTracker Mode" +#: app/module-info.c:898 +msgid "Reference: " +msgstr "Reference: " -#: app/module-info.c:395 +#: app/module-info.c:1136 #, c-format msgid "" "Unused patterns: %d (used: %d)\n" @@ -1291,266 +1907,396 @@ "\n" "Clear unused and reorder playlist?\n" -#: app/playlist.c:526 +#: app/playlist.c:505 msgid "Insert pattern that is being edited" msgstr "Insert pattern that is being edited" -#: app/playlist.c:535 +#: app/playlist.c:511 msgid "Remove current playlist entry" msgstr "Remove current playlist entry" -#: app/playlist.c:543 +#: app/playlist.c:517 msgid "Add + Cpy" msgstr "Add + Cpy" -#: app/playlist.c:545 +#: app/playlist.c:519 msgid "" "Add a free pattern behind current position, and copy current pattern to it" msgstr "" "Add a free pattern behind current position, and copy current pattern to it" -#: app/playlist.c:548 +#: app/playlist.c:522 msgid "Add Free" msgstr "Add Free" -#: app/playlist.c:550 +#: app/playlist.c:524 msgid "Add a free pattern behind current position" msgstr "Add a free pattern behind current position" -#: app/playlist.c:560 +#: app/playlist.c:534 msgid "Len" msgstr "Len" -#: app/playlist.c:574 +#: app/playlist.c:548 msgid "Song length" msgstr "Song length" -#: app/playlist.c:580 +#: app/playlist.c:554 msgid "Rstrt" msgstr "Rstrt" -#: app/playlist.c:593 +#: app/playlist.c:567 msgid "Song restart position" msgstr "Song restart position" -#: app/preferences.c:74 +#: app/preferences.c:60 msgid "" -"A directory called '.soundtracker' has been created in your\n" +"A directory called \".soundtracker\" has been created in your\n" "home directory to store configuration files.\n" msgstr "" -"A directory called ‘.soundtracker’ has been created in your\n" +"A directory called “.soundtracker†has been created in your\n" "home directory to store configuration files.\n" -#: app/sample-editor.c:234 +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "Would you like to import settings from old version of Soundtracker?" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" +"An error is occured during converting config:\n" +"%s" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" +"An error is occured during reading or parsing config:\n" +"%s" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" +"An error is occured during saving config:\n" +"%s" + +#: app/sample-editor.c:356 msgid "No loop" msgstr "No loop" -#: app/sample-editor.c:236 +#: app/sample-editor.c:358 msgid "PingPong" msgstr "PingPong" -#: app/sample-editor.c:240 app/sample-editor.c:1574 +#: app/sample-editor.c:361 app/sample-editor.c:1755 msgid "8 bits" msgstr "8 bits" -#: app/sample-editor.c:241 app/sample-editor.c:1574 +#: app/sample-editor.c:362 app/sample-editor.c:1755 msgid "16 bits" msgstr "16 bits" -#: app/sample-editor.c:247 +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "Apple/SGI audio (*aif, *.aiff, *.aifc)" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "SUN/NeXT audio (*.au, *.snd)" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "Audio Visual Research files (*.avr)" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "Apple Core Audio files (*.caf)" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "Amiga IFF/SV8/SV16 (*.iff)" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "Berkeley/IRCAM/CARL audio (*.sf)" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "Creative Labs audio (*.voc)" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "Microsoft RIFF/NIST Sphere (*.wav)" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "FLAC lossless audio (*.flac)" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "Psion audio (*.wve)" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "OGG compressed audio (*.ogg, *.vorbis)" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "RIFF 64 files (*.rf64)" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "HMM Tool Kit files (*.htk)" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "GNU Octave/Matlab files (*.mat)" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "Ensoniq PARIS files (*.paf)" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "Portable Voice Format files (*.pvf)" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "Headerless raw data (*.raw, *.r8)" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "Sound Designer II files (*.sd2)" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "Midi Sample Dump Standard files (*.sds)" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "SoundFoundry WAVE 64 files (*.w64)" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "Sample Vision files (*.smp)" + +#: app/sample-editor.c:406 msgid "Sample Editor" msgstr "Sample Editor" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 +#: app/sample-editor.c:453 app/midi-settings.c:406 msgid "Volume" msgstr "Volume" -#: app/sample-editor.c:288 +#: app/sample-editor.c:454 msgid "Panning" msgstr "Panning" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Finetune" - -#: app/sample-editor.c:309 +#: app/sample-editor.c:475 msgid "Selection:" msgstr "Selection:" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 +#: app/sample-editor.c:479 app/track-editor.c:215 msgid "None" msgstr "None" -#: app/sample-editor.c:319 +#: app/sample-editor.c:485 msgid "All" msgstr "All" -#: app/sample-editor.c:340 +#: app/sample-editor.c:506 msgid "Length:" msgstr "Length:" -#: app/sample-editor.c:356 +#: app/sample-editor.c:522 msgid "Set as loop" msgstr "Set as loop" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "RelNote" +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Load Sample" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Load Sample..." +#: app/sample-editor.c:541 +msgid "Load sample into the current sample slot" +msgstr "Load sample into the current sample slot" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Save WAV..." +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Save Sample" + +#: app/sample-editor.c:542 +msgid "Save the current sample" +msgstr "Save the current sample" -#: app/sample-editor.c:379 +#: app/sample-editor.c:543 msgid "Save region as WAV..." msgstr "Save region as WAV..." -#: app/sample-editor.c:392 +#: app/sample-editor.c:557 msgid "Save WAV" msgstr "Save WAV" -#: app/sample-editor.c:402 +#: app/sample-editor.c:569 msgid "Save Region" msgstr "Save Region" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Monitor" - -#: app/sample-editor.c:419 +#: app/sample-editor.c:587 msgid "Volume Ramp" msgstr "Volume Ramp" -#: app/sample-editor.c:425 +#: app/sample-editor.c:593 msgid "Trim" msgstr "Trim" -#: app/sample-editor.c:436 +#: app/sample-editor.c:603 msgid "Zoom to selection" msgstr "Zoom to selection" -#: app/sample-editor.c:442 +#: app/sample-editor.c:609 msgid "Show all" msgstr "Show all" -#: app/sample-editor.c:448 +#: app/sample-editor.c:615 msgid "Zoom in (+50%)" msgstr "Zoom in (+50%)" -#: app/sample-editor.c:454 +#: app/sample-editor.c:621 msgid "Zoom out (-50%)" msgstr "Zoom out (-50%)" -#: app/sample-editor.c:460 +#: app/sample-editor.c:627 msgid "Reverse" msgstr "Reverse" -#: app/sample-editor.c:470 +#: app/sample-editor.c:637 msgid "Cut" msgstr "Cut" -#: app/sample-editor.c:476 +#: app/sample-editor.c:643 msgid "Remove" msgstr "Remove" -#: app/sample-editor.c:482 +#: app/sample-editor.c:649 msgid "Copy" msgstr "Copy" -#: app/sample-editor.c:488 +#: app/sample-editor.c:655 msgid "Paste" msgstr "Paste" -#: app/sample-editor.c:494 +#: app/sample-editor.c:661 msgid "Clear Sample" msgstr "Clear Sample" -#: app/sample-editor.c:500 +#: app/sample-editor.c:667 msgid "Crop" msgstr "Crop" -#: app/sample-editor.c:564 +#: app/sample-editor.c:730 msgid "(no selection)" msgstr "(no selection)" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "Out of memory for copybuffer.\n" +#: app/sample-editor.c:1279 +msgid "Out of memory for copybuffer." +msgstr "Out of memory for copybuffer." -#: app/sample-editor.c:1188 +#: app/sample-editor.c:1400 msgid "" msgstr "" -#: app/sample-editor.c:1301 +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Mix" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Left" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Right" + +#: app/sample-editor.c:1479 +msgid "2 samples" +msgstr "2 samples" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "Load left and right channels into the current sample and the next one" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 msgid "Out of memory for sample data." msgstr "Out of memory for sample data." -#: app/sample-editor.c:1317 app/sample-editor.c:1329 +#: app/sample-editor.c:1575 app/sample-editor.c:1585 msgid "Read error." msgstr "Read error." -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Load stereo sample" - -#: app/sample-editor.c:1484 +#: app/sample-editor.c:1723 +#, c-format msgid "" "You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" +"(%s can only handle mono samples!)\n" "\n" "Please choose which channel to load:" msgstr "" "You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" +"(%s can only handle mono samples!)\n" "\n" "Please choose which channel to load:" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Left" - -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Mix" - -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Right" +#: app/sample-editor.c:1726 +msgid "Stereo sample loading" +msgstr "Stereo sample loading" -#: app/sample-editor.c:1575 +#: app/sample-editor.c:1756 msgid "Signed" msgstr "Signed" -#: app/sample-editor.c:1575 +#: app/sample-editor.c:1756 msgid "Unsigned" msgstr "Unsigned" -#: app/sample-editor.c:1576 +#: app/sample-editor.c:1757 msgid "Little-Endian" msgstr "Little-Endian" -#: app/sample-editor.c:1576 +#: app/sample-editor.c:1757 msgid "Big-Endian" msgstr "Big-Endian" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "Mono" - -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "Stereo" - -#: app/sample-editor.c:1589 +#: app/sample-editor.c:1764 msgid "Load raw sample" msgstr "Load raw sample" -#: app/sample-editor.c:1597 +#: app/sample-editor.c:1772 msgid "" "You have selected a sample that is not\n" "in a known format. You can load the raw data now.\n" @@ -1562,111 +2308,136 @@ "\n" "Please choose a format:" -#: app/sample-editor.c:1623 +#: app/sample-editor.c:1798 msgid "Word format:" msgstr "Word format:" -#: app/sample-editor.c:1670 +#: app/sample-editor.c:1829 msgid "Sampling Rate:" msgstr "Sampling Rate:" -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" - -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "OK" - -#: app/sample-editor.c:1748 +#: app/sample-editor.c:1915 msgid "Can't read sample" msgstr "Can't read sample" -#: app/sample-editor.c:1761 +#: app/sample-editor.c:1929 msgid "Sample is too long for current mixer module. Loading anyway." msgstr "Sample is too long for current mixer module. Loading anyway." -#: app/sample-editor.c:1785 +#: app/sample-editor.c:1954 msgid "Can only handle 8 and 16 bit samples with up to 2 channels" msgstr "Can only handle 8 and 16 bit samples with up to 2 channels" -#: app/sample-editor.c:1968 +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Can't open file for writing." + +#: app/sample-editor.c:2079 msgid "Please select region first." msgstr "Please select region first." -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Start sampling" - -#: app/sample-editor.c:2042 +#: app/sample-editor.c:2194 msgid "No sampling driver available" msgstr "No sampling driver available" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 +#: app/sample-editor.c:2203 msgid "Sampling Window" msgstr "Sampling Window" -#: app/sample-editor.c:2104 +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "Record" + +#: app/sample-editor.c:2232 +msgid "Clear" +msgstr "Clear" + +#: app/sample-editor.c:2263 +msgid "Sampling failed!" +msgstr "Sampling failed!" + +#: app/sample-editor.c:2298 msgid "Out of memory while sampling!" msgstr "Out of memory while sampling!" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" + +#: app/sample-editor.c:2372 +msgid "Converting stereo sample" +msgstr "Converting stereo sample" -#: app/sample-editor.c:2186 +#: app/sample-editor.c:2599 msgid "Recorded sample is too long for current mixer module. Using it anyway." msgstr "Recorded sample is too long for current mixer module. Using it anyway." -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normalize" - -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Execute" - -#: app/sample-editor.c:2250 app/sample-editor.c:2253 +#: app/sample-editor.c:2657 msgid "Volume Ramping" msgstr "Volume Ramping" -#: app/sample-editor.c:2269 +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normalize" + +#: app/sample-editor.c:2667 msgid "Perform linear volume fade on Selection" msgstr "Perform linear volume fade on Selection" -#: app/sample-editor.c:2281 +#: app/sample-editor.c:2676 msgid "Left [%]:" msgstr "Left [%]:" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 +#: app/sample-editor.c:2679 app/sample-editor.c:2696 msgid "H" msgstr "H" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "Half" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 msgid "D" msgstr "D" -#: app/sample-editor.c:2298 +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "Double" + +#: app/sample-editor.c:2693 msgid "Right [%]:" msgstr "Right [%]:" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 +#: app/sample-editor.c:2786 msgid "Trim parameters" msgstr "Trim parameters" -#: app/sample-editor.c:2498 +#: app/sample-editor.c:2792 msgid "Trim at the beginning" msgstr "Trim at the beginning" -#: app/sample-editor.c:2505 +#: app/sample-editor.c:2796 msgid "Trim at the end" msgstr "Trim at the end" -#: app/sample-editor.c:2512 +#: app/sample-editor.c:2802 msgid "Threshold (dB)" msgstr "Threshold (dB)" -#: app/tips-dialog.c:50 +#: app/tips-dialog.c:45 msgid "" "Welcome to SoundTracker!\n" "\n" @@ -1678,7 +2449,7 @@ "If you are new to this type of program, you will want to get hold of\n" "some XM or MOD files first and play with them." -#: app/tips-dialog.c:55 +#: app/tips-dialog.c:50 msgid "" "You can make SoundTracker's edit mode more responsive to keyboard\n" "input by decreasing the mixing buffer size of the \"Editing\" object in\n" @@ -1688,7 +2459,7 @@ "input by decreasing the mixing buffer size of the “Editing†object in\n" "the Audio Configuration." -#: app/tips-dialog.c:59 +#: app/tips-dialog.c:54 msgid "" "You can adjust the loop points in the sample editor by holding Shift\n" "and using the left and right mousebuttons.\n" @@ -1696,7 +2467,7 @@ "You can adjust the loop points in the sample editor by holding Shift\n" "and using the left and right mousebuttons.\n" -#: app/tips-dialog.c:62 +#: app/tips-dialog.c:57 msgid "" "If you want to know more about tracking, and how the various commands\n" "work, have a look at http://www.united-trackers.org/" @@ -1704,7 +2475,7 @@ "If you want to know more about tracking, and how the various commands\n" "work, have a look at http://www.united-trackers.org/" -#: app/tips-dialog.c:65 +#: app/tips-dialog.c:60 msgid "" "You can assign samples of an instrument to the individual keys by\n" "activating its sample and then clicking on the keyboard in the\n" @@ -1714,7 +2485,7 @@ "activating its sample and then clicking on the keyboard in the\n" "instrument editor page." -#: app/tips-dialog.c:69 +#: app/tips-dialog.c:64 msgid "" "Is your cursor trapped in a number entry field?\n" "Just press Return or Tab to free yourself!" @@ -1722,344 +2493,529 @@ "Is your cursor trapped in a number entry field?\n" "Just press Return or Tab to free yourself!" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "SoundTracker Tip of the day" - -#: app/tips-dialog.c:154 +#: app/tips-dialog.c:111 msgid "Previous Tip" msgstr "Previous Tip" -#: app/tips-dialog.c:162 +#: app/tips-dialog.c:118 msgid "Next Tip" msgstr "Next Tip" -#: app/tips-dialog.c:174 +#: app/tips-dialog.c:129 msgid "Show tip next time" msgstr "Show tip next time" -#: app/track-editor.c:113 +#: app/tips-dialog.c:146 +#, c-format +msgid "%s Tip of the day" +msgstr "%s Tip of the day" + +#: app/track-editor.c:130 msgid "Arpeggio" msgstr "Arpeggio" -#: app/track-editor.c:114 +#: app/track-editor.c:131 msgid "Porta up" msgstr "Porta up" -#: app/track-editor.c:115 +#: app/track-editor.c:132 msgid "Porta down" msgstr "Porta down" -#: app/track-editor.c:116 app/track-editor.c:180 +#: app/track-editor.c:133 app/track-editor.c:197 msgid "Tone porta" msgstr "Tone porta" -#: app/track-editor.c:117 app/track-editor.c:176 +#: app/track-editor.c:134 app/track-editor.c:193 msgid "Vibrato" msgstr "Vibrato" -#: app/track-editor.c:118 +#: app/track-editor.c:135 msgid "Tone porta + Volume slide" msgstr "Tone porta + Volume slide" -#: app/track-editor.c:119 +#: app/track-editor.c:136 msgid "Vibrato + Volume slide" msgstr "Vibrato + Volume slide" -#: app/track-editor.c:120 +#: app/track-editor.c:137 msgid "Tremolo" msgstr "Tremolo" -#: app/track-editor.c:121 app/track-editor.c:177 +#: app/track-editor.c:138 app/track-editor.c:194 msgid "Set panning" msgstr "Set panning" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Position jump" +#: app/track-editor.c:139 +msgid "Sample offset" +msgstr "Sample offset" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 msgid "Set volume" msgstr "Set volume" -#: app/track-editor.c:126 +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Position jump" + +#: app/track-editor.c:143 msgid "Pattern break" msgstr "Pattern break" -#: app/track-editor.c:128 +#: app/track-editor.c:145 msgid "Set tempo/bpm" msgstr "Set tempo/bpm" -#: app/track-editor.c:129 +#: app/track-editor.c:146 msgid "Set global volume" msgstr "Set global volume" -#: app/track-editor.c:130 +#: app/track-editor.c:147 msgid "Global volume slide" msgstr "Global volume slide" -#: app/track-editor.c:133 +#: app/track-editor.c:150 msgid "Key off" msgstr "Key off" -#: app/track-editor.c:134 +#: app/track-editor.c:151 msgid "Set envelop position" msgstr "Set envelop position" -#: app/track-editor.c:138 +#: app/track-editor.c:155 msgid "Panning slide" msgstr "Panning slide" -#: app/track-editor.c:139 +#: app/track-editor.c:156 msgid "LP filter resonance" msgstr "LP filter resonance" -#: app/track-editor.c:140 +#: app/track-editor.c:157 msgid "Multi retrig note" msgstr "Multi retrig note" -#: app/track-editor.c:142 +#: app/track-editor.c:159 msgid "Tremor" msgstr "Tremor" -#: app/track-editor.c:148 +#: app/track-editor.c:165 msgid "LP filter cutoff" msgstr "LP filter cutoff" -#: app/track-editor.c:153 +#: app/track-editor.c:170 msgid "Fine porta up" msgstr "Fine porta up" -#: app/track-editor.c:154 +#: app/track-editor.c:171 msgid "Fine porta down" msgstr "Fine porta down" -#: app/track-editor.c:155 +#: app/track-editor.c:172 msgid "Set gliss control" msgstr "Set gliss control" -#: app/track-editor.c:156 +#: app/track-editor.c:173 msgid "Set vibrato control" msgstr "Set vibrato control" -#: app/track-editor.c:157 +#: app/track-editor.c:174 msgid "Set finetune" msgstr "Set finetune" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Set loop begin/loop" +#: app/track-editor.c:175 +msgid "Pattern loop" +msgstr "Pattern loop" -#: app/track-editor.c:159 +#: app/track-editor.c:176 msgid "Set tremolo control" msgstr "Set tremolo control" -#: app/track-editor.c:161 +#: app/track-editor.c:178 msgid "Retrig note" msgstr "Retrig note" -#: app/track-editor.c:162 app/track-editor.c:174 +#: app/track-editor.c:179 app/track-editor.c:191 msgid "Fine volume slide up" msgstr "Fine volume slide up" -#: app/track-editor.c:163 app/track-editor.c:173 +#: app/track-editor.c:180 app/track-editor.c:190 msgid "Fine volume slide down" msgstr "Fine volume slide down" -#: app/track-editor.c:164 +#: app/track-editor.c:181 msgid "Note cut" msgstr "Note cut" -#: app/track-editor.c:165 +#: app/track-editor.c:182 msgid "Note delay" msgstr "Note delay" -#: app/track-editor.c:166 +#: app/track-editor.c:183 msgid "Pattern delay" msgstr "Pattern delay" -#: app/track-editor.c:171 +#: app/track-editor.c:188 msgid "Volume slide down" msgstr "Volume slide down" -#: app/track-editor.c:172 +#: app/track-editor.c:189 msgid "Volume slide up" msgstr "Volume slide up" -#: app/track-editor.c:175 +#: app/track-editor.c:192 msgid "Set vibrato speed" msgstr "Set vibrato speed" -#: app/track-editor.c:178 +#: app/track-editor.c:195 msgid "Panning slide left" msgstr "Panning slide left" -#: app/track-editor.c:179 +#: app/track-editor.c:196 msgid "Panning slide right" msgstr "Panning slide right" -#: app/track-editor.c:184 +#: app/track-editor.c:201 msgid "sine" msgstr "sine" -#: app/track-editor.c:185 +#: app/track-editor.c:202 msgid "ramp down" msgstr "ramp down" -#: app/track-editor.c:186 +#: app/track-editor.c:203 msgid "square" msgstr "square" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 +#: app/track-editor.c:206 #, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "[Cmd: " + +#: app/track-editor.c:244 +msgid "Extra fine porta up" +msgstr "Extra fine porta up" + +#: app/track-editor.c:247 +msgid "Extra fine porta down" +msgstr "Extra fine porta down" + +#: app/track-editor.c:257 msgid "None ]" msgstr "None ]" -#: app/track-editor.c:360 +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr " => tempo: %02d ]" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr " => BPM: %03d ]" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr " => offset: %d ]" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr ", continuous mode" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr " begin ]" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr " %02d times ]" + +#: app/track-editor.c:470 msgid "Jazz Edit:" msgstr "Jazz Edit:" -#: app/track-editor.c:405 +#: app/track-editor.c:524 msgid "Tracker" msgstr "Tracker" -#: app/tracker-settings.c:235 +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" + +#: app/tracker-settings.c:262 msgid "Font list" msgstr "Font list" -#: app/tracker-settings.c:255 +#: app/tracker-settings.c:284 msgid "Add font" msgstr "Add font" -#: app/tracker-settings.c:261 +#: app/tracker-settings.c:290 msgid "Delete font" msgstr "Delete font" -#: app/tracker-settings.c:267 +#: app/tracker-settings.c:296 msgid "Apply font" msgstr "Apply font" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Up" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Down" - -#: app/tracker-settings.c:288 +#: app/tracker-settings.c:312 msgid "Select font..." msgstr "Select font..." -#: app/transposition.c:198 +#: app/transposition.c:189 msgid "Whole Song" msgstr "Whole Song" -#: app/transposition.c:199 +#: app/transposition.c:190 msgid "All Patterns" msgstr "All Patterns" -#: app/transposition.c:200 +#: app/transposition.c:191 msgid "Current Pattern" msgstr "Current Pattern" -#: app/transposition.c:201 +#: app/transposition.c:192 msgid "Current Track" msgstr "Current Track" -#: app/transposition.c:205 +#: app/transposition.c:195 msgid "Current Instrument" msgstr "Current Instrument" -#: app/transposition.c:206 +#: app/transposition.c:196 msgid "All Instruments" msgstr "All Instruments" -#: app/transposition.c:210 +#: app/transposition.c:199 msgid "Half note up" msgstr "Half note up" -#: app/transposition.c:211 +#: app/transposition.c:200 msgid "Half note down" msgstr "Half note down" -#: app/transposition.c:212 +#: app/transposition.c:201 msgid "Octave up" msgstr "Octave up" -#: app/transposition.c:213 +#: app/transposition.c:202 msgid "Octave down" msgstr "Octave down" -#: app/transposition.c:216 +#: app/transposition.c:205 msgid "Exchange 1 <-> 2" msgstr "Exchange 1 <-> 2" -#: app/transposition.c:217 +#: app/transposition.c:206 msgid "Change 1 -> 2" msgstr "Change 1 -> 2" -#: app/transposition.c:226 app/transposition.c:229 +#: app/transposition.c:215 msgid "Transposition Tools" msgstr "Transposition Tools" -#: app/transposition.c:250 +#: app/transposition.c:225 msgid "Scope of the operation:" msgstr "Scope of the operation:" -#: app/transposition.c:257 +#: app/transposition.c:230 msgid "Note Transposition" msgstr "Note Transposition" -#: app/transposition.c:288 +#: app/transposition.c:256 msgid "Instrument Changing" msgstr "Instrument Changing" -#: app/transposition.c:303 +#: app/transposition.c:268 msgid "Instrument 1:" msgstr "Instrument 1:" -#: app/transposition.c:305 app/transposition.c:315 +#: app/transposition.c:270 app/transposition.c:279 msgid "Current instrument" msgstr "Current instrument" -#: app/transposition.c:313 +#: app/transposition.c:277 msgid "Instrument 2:" msgstr "Instrument 2:" -#: app/xm.c:196 +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "Transposition is possible only in editing mode" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "Pattern header reading error." + +#: app/xm.c:200 +#, c-format +msgid "Pattern length out of range: %d." +msgstr "Pattern length out of range: %d." + +#: app/xm.c:226 +msgid "Error loading notes." +msgstr "Error loading notes." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "Sample header reading error." + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "Sample data reading error." + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +msgid "Instrument header reading error." +msgstr "Instrument header reading error." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "XM Load Error: Sample header size != 40." + +#: app/xm.c:598 +msgid "Sample map reading error." +msgstr "Sample map reading error." + +#: app/xm.c:602 +msgid "Volume envelope points reading error." +msgstr "Volume envelope points reading error." + +#: app/xm.c:607 +msgid "Panning envelope points reading error." +msgstr "Panning envelope points reading error." + +#: app/xm.c:613 +msgid "Envelope parameters reading error." +msgstr "Envelope parameters reading error." + +#: app/xm.c:632 #, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Pattern length out of range: %d.\n" +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "XM Load Warning: Invalid vibtype %d, using Sine." + +#: app/xm.c:678 app/xm.c:1233 +msgid "Out of memory error!" +msgstr "Out of memory error!" -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "File is no XI instrument." +#: app/xm.c:694 +msgid "The file is not an XI instrument." +msgstr "The file is not an XI instrument." -#: app/xm.c:557 +#: app/xm.c:717 #, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Unknown XI version 0x%x\n" +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" -#: app/xm.c:587 +#: app/xm.c:729 +msgid "Instrument sample map reading error." +msgstr "Instrument sample map reading error." + +#: app/xm.c:735 +msgid "Instrument volume envelope points reading error." +msgstr "Instrument volume envelope points reading error." + +#: app/xm.c:742 +msgid "Instrument panning envelope points reading error." +msgstr "Instrument panning envelope points reading error." + +#: app/xm.c:750 +msgid "Instrument envelope parameters reading error." +msgstr "Instrument envelope parameters reading error." + +#: app/xm.c:769 #, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "Invalid vibtype %d, using Sine.\n" +msgid "Invalid vibtype %d, using Sine." +msgstr "Invalid vibtype %d, using Sine." + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "Module header reading error." -#: app/xm.c:859 app/xm.c:984 +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "Pattern order table reading error." + +#: app/xm.c:1122 app/xm.c:1271 msgid "Error while loading patterns." msgstr "Error while loading patterns." -#: app/xm.c:927 +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" + +#: app/xm.c:1200 msgid "Can't open file" msgstr "Can't open file" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Error while loading instruments." +#: app/xm.c:1215 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "Invalid number of channels in XM (only 1..32 allowed)." + +#: app/xm.c:1266 +msgid "Error while loading pattern order table." +msgstr "Error while loading pattern order table." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" +"Instruments loading error. Some of instruments can be missing or corrupted." -#: app/xm.c:1001 +#: app/xm.c:1291 #, c-format msgid "" "Module contains sample(s) that are too long for the current mixer.\n" @@ -2068,62 +3024,408 @@ "Module contains sample(s) that are too long for the current mixer.\n" "Maximum sample length is %d." -#: app/xm.c:1399 +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "Bzzzz, error extracting song, aborting operation." + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "%s (Err 0)" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "%s (Err 1)" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "%s (Err 2)" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "%s (Err 3)" + +#: app/xm.c:1686 msgid "Not FastTracker XM and not supported MOD format!" msgstr "Not FastTracker XM and not supported MOD format!" -#: app/xm.c:1414 app/xm.c:1435 +#: app/xm.c:1704 app/xm.c:1731 msgid "Error when file reading or unexpected end of file" msgstr "Error when file reading or unexpected end of file" -#: app/xm.c:1418 +#: app/xm.c:1710 msgid "Incorrect or unsupported version of pattern file!" msgstr "Incorrect or unsupported version of pattern file!" -#: app/xm.c:1422 +#: app/xm.c:1716 msgid "Incorrect pattern length!" msgstr "Incorrect pattern length!" -#: app/xm.c:1468 +#: app/xm.c:1761 app/xm.c:1787 msgid "Error during saving pattern!" msgstr "Error during saving pattern!" -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "error opening ALSA MIDI input stream (%s)\n" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "Get client info error: %s\n" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "Set client info error: %s\n" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "error creating sequencer port (%s)\n" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "error subscribing sequencer port (%s)\n" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "error closing handle (%s)\n" + +#: app/midi-settings.c:399 msgid "Auto connect" msgstr "Auto connect" -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 +#: app/midi-settings.c:414 msgid "Channel" msgstr "Channel" -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 +#: app/midi-settings.c:423 msgid "Client number" msgstr "Client number" -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 +#: app/midi-settings.c:434 msgid "Port number" msgstr "Port number" -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 +#: app/midi-settings.c:453 msgid "Input" msgstr "Input" -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 +#: app/midi-settings.c:462 msgid "For future development" msgstr "For future development" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 +#: app/midi-settings.c:468 msgid "Output" msgstr "Output" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 +#: app/midi-settings.c:479 msgid "Debug level" msgstr "Debug level" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 +#: app/midi-settings.c:492 msgid "Misc" msgstr "Misc" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 +#: app/midi-settings.c:532 msgid "MIDI Configuration" msgstr "MIDI Configuration" + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Pattern" + +#: soundtracker.glade:49 +msgid "Track" +msgstr "Track" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_Kill notes" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "_Insert track" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "_Delete track" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "Increment cmd value" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Decrement cmd value" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "C_lear block marks" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "_Interpolate effects" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_File" + +#: soundtracker.glade:217 +msgid "_Open…" +msgstr "_Open…" + +#: soundtracker.glade:237 +msgid "Save _as…" +msgstr "Save _as…" + +#: soundtracker.glade:252 +msgid "Save Module as _WAV…" +msgstr "Save Module as _WAV…" + +#: soundtracker.glade:261 +msgid "Save _XM without samples…" +msgstr "Save _XM without samples…" + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "_Recent" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Module" + +#: soundtracker.glade:309 +msgid "Clear _All" +msgstr "Clear _All" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Clear _Patterns Only" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Optimize Module" + +#: soundtracker.glade:346 +msgid "_Set Optimal Amplification" +msgstr "_Set Optimal Amplification" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Edit" + +#: soundtracker.glade:398 +msgid "_Jazz edit mode" +msgstr "_Jazz edit mode" + +#: soundtracker.glade:412 +msgid "Transp_osition…" +msgstr "Transp_osition…" + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Pattern" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "_Track" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Selection" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "_Mark mode" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Transpose half-note up" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Transpose half-note down" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Transpose octave up" + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Transpose octave down" + +#: soundtracker.glade:661 +msgid "_Load Pattern…" +msgstr "_Load Pattern…" + +#: soundtracker.glade:670 +msgid "_Save Current Pattern…" +msgstr "_Save Current Pattern…" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_Find Unused Pattern" + +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Copy Current to Unused Pattern" + +#: soundtracker.glade:703 +msgid "_Add Free Pattern" +msgstr "_Add Free Pattern" + +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "Add Free _Pattern and Copy" + +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "C_lear Unused Patterns" + +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "_Pack Patterns" + +#: soundtracker.glade:745 +msgid "S_hrink Current Pattern" +msgstr "S_hrink Current Pattern" + +#: soundtracker.glade:753 +msgid "_Expand Current Pattern" +msgstr "_Expand Current Pattern" + +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "_Toggle Current Track Permanentness" + +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "Toggle _All Tracks Permanentness" + +#: soundtracker.glade:789 +msgid "_Mute / Unmute Current Track" +msgstr "_Mute / Unmute Current Track" + +#: soundtracker.glade:798 +msgid "_Unmute All Tracks" +msgstr "_Unmute All Tracks" + +#: soundtracker.glade:807 +msgid "Current Track _Solo" +msgstr "Current Track _Solo" + +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Instrument" + +#: soundtracker.glade:827 +msgid "_Load XI…" +msgstr "_Load XI…" + +#: soundtracker.glade:836 +msgid "_Save XI…" +msgstr "_Save XI…" + +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_Clear Current" + +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_Delete Unused Instruments" + +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Settings" + +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Display _Oscilloscopes" + +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "_Loop playback" + +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Tracker" + +#: soundtracker.glade:913 +msgid "_Flicker-free Scrolling" +msgstr "_Flicker-free Scrolling" + +#: soundtracker.glade:921 +msgid "_Previous Font" +msgstr "_Previous Font" + +#: soundtracker.glade:930 +msgid "_Next Font" +msgstr "_Next Font" + +#: soundtracker.glade:944 +msgid "Change Preferred _Accidental Type" +msgstr "Change Preferred _Accidental Type" + +#: soundtracker.glade:953 +msgid "Change Effect Column _Editing Direction" +msgstr "Change Effect Column _Editing Direction" + +#: soundtracker.glade:970 +msgid "_Keyboard Configuration…" +msgstr "_Keyboard Configuration…" + +#: soundtracker.glade:980 +msgid "_Audio Configuration…" +msgstr "_Audio Configuration…" + +#: soundtracker.glade:990 +msgid "_GUI Configuration…" +msgstr "_GUI Configuration…" + +#: soundtracker.glade:1000 +msgid "_MIDI Configuration…" +msgstr "_MIDI Configuration…" + +#: soundtracker.glade:1016 +msgid "_Disable Splash Screen" +msgstr "_Disable Splash Screen" + +#: soundtracker.glade:1023 +msgid "_Save Settings Now" +msgstr "_Save Settings Now" + +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Save Settings on _Exit" + +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_Help" + +#: soundtracker.glade:1053 +msgid "_About…" +msgstr "_About…" + +#: soundtracker.glade:1068 +msgid "Show _Tips…" +msgstr "Show _Tips…" + +#: soundtracker.glade:1078 +msgid "_XM Effects" +msgstr "_XM Effects" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/es.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/es.gmo differ diff -Nru soundtracker-0.6.8/po/es.po soundtracker-1.0.2~pre2/po/es.po --- soundtracker-0.6.8/po/es.po 2006-02-25 13:25:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/es.po 2020-05-27 18:54:27.000000000 +0000 @@ -1,2167 +1,3773 @@ -# Mensajes en español para SoundTracker. +# Mensajes en español para SoundTracker. # Copyright (C) 1999, 2001 Free Software Foundation, Inc. # Vicente E. Llorens , 2001. -# Germán Gómez , 1999. +# Germán Gómez , 1999. # msgid "" msgstr "" "Project-Id-Version: soundtracker 0.6.7\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2005-08-19 17:45+0200\n" "Last-Translator: Vicente E. Llorens \n" "Language-Team: Spanish \n" +"Language: es\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" -msgstr "Salida para Reproducción" +msgstr "Salida para Reproducción" #: app/audioconfig.c:69 msgid "Editing Output" -msgstr "Salida para Edición" +msgstr "Salida para Edición" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Muestreo" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" -msgstr "Módulo del Controlador" +msgstr "Módulo del Controlador" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" -msgstr "Módulo del mezclador" +msgstr "Módulo del mezclador" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" -msgstr "Descripción" +msgstr "Descripción" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" -msgstr "Configuración de Audio" +msgstr "Configuración de Audio" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Controladores" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Mezcladores" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Cerrar" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d bytes)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Retraso de audio estimado: %f microsegundos" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "Efectos _XM..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." -msgstr "Estos cambios no tendrán efecto hasta que reinicie la reproducción." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Frecuencia del Rastreador" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Resolución:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Canales:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Frecuencia [Hz]:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -# Nota: Algunas veces hemos utilizado "búfer", lo dejo a tu elección. sv -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Tamaño del búfer:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines" +msgstr "Habilitar el resaltado de filas" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "Número de la tarjeta ALSA:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines highlighting" +msgstr "Habilitar el resaltado de filas" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "Número de dispositivo ALSA:" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines" +msgstr "Habilitar el resaltado de filas" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines highlighting" +msgstr "Habilitar el resaltado de filas" + +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Selección:" + +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Frecuencia del Rastreador" + +#: app/colors.c:47 +msgid "Notes, waveforms" msgstr "" -"No se pudo abrir el dispositivo ALSA para entrada de sonido (tarjeta:%d, " -"dispositivo:%d):\n" -"%s" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "El formato sonoro solicitado no está soportado.\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Los parámetros de salida de sonido no están soportados.\n" +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" +msgstr "" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Retraso de audio estimado: %f milisegundos" +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "Eliminar" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "Eliminar" + +#: app/colors.c:49 +#, fuzzy +msgid "Channel numbers, loops" +msgstr "Canales:" + +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -"No se pudo abrir el dispositivo ALSA para salida de sonido (tarjeta:%d, " -"dispositivo:%d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "Los parámetros requeridos del canal de salida no están soportados.\n" +#: app/colors.c:50 +msgid "Cursor idle" +msgstr "" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "Incapaz de preparar el canal ALSA.\n" +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "Error de iniciación ALSA.\n" +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" msgstr "" -"Obsérvese que la salida ESD es inutilizable en\n" -"modo interactivo a causa de la latencia añadida\n" -"por ESD. Use los plug-ins de salida de OSS o ALSA\n" -"para trabajos serios." -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "Zoom en selección" + +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" msgstr "" -"No se pudo conectar a ESD para la salida de sonido:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "no hay preferencias (todavía), ¡lo siento!" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "Posición de reinicio de la canción" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "No se puede abrir el fichero para escritura." +#: app/colors.c:53 +msgid "Mixer position indicator" +msgstr "" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." -msgstr "Estos cambios no tendrán efecto hasta que reinicie el muestreo." +#: app/colors.c:54 +msgid "Zero line" +msgstr "" -# app/drivers/oss-input.c:117 -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Dispositivo de entrada (ej. '/dev/dsp'):" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:56 +msgid "White keys" msgstr "" -"No se pudo abrir %s para muestreo:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d muestras)" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "" -# app/drivers/oss-output.c:211 -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "Dispositivo de salida (ej. '/dev/dsp'):" +#: app/colors.c:57 +msgid "Black keys" +msgstr "" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" +msgstr "" + +#: app/colors.c:58 +msgid "White keys pressed" msgstr "" -"No se pudo abrir %s para salida de sonido:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" -msgstr "transportador maestro" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" -msgstr "declick" +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" -msgstr "Ejecutar a %d Hz con %d marcos " +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" -msgstr "¿El servidor Jack no está ejecutándose?" +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/jack-output.c:327 -#, c-format -msgid "soundtracker" -msgstr "soundtracker" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "out_1" +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "out_2" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "" -# app/drivers/oss-output.c:211 -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" -msgstr "Dispositivo de salida (ej. '/dev/audio'):" +#: app/colors.c:395 +#, fuzzy, c-format +msgid "%s colors configuration" +msgstr "Configuración de Efectos de Reproducción" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Invertir" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: No se puede reproducir (%s)" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: No se puede manejar %dHz (%s)" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s: La codificación del sonido requerido no está soportado.\n" +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 +#: app/drivers/alsa1x.c:261 #, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: No se puede establecer el tamaño del bloque (%s)" +msgid "%f milliseconds" +msgstr "" -# app/drivers/oss-input.c:117 -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" -msgstr "Dispositivo de entrada (ej. '/dev/audio'):" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "Número de dispositivo ALSA:" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: No se puede registrar (%s)" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Longitud" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Actual" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +#, fuzzy +msgid "Unable to set channels number" +msgstr "Incapaz de preparar el canal ALSA.\n" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Desplazamiento" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Valor" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Insertar" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Eliminar" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" msgstr "" -"Editor\n" -"Gráfico\n" -"de la Envolvente\n" -"sólo en la\n" -"Versión GNOME" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Sostenido" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Punto" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Ciclo" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Comienzo" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Final" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Cargar Módulo" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Guardar Módulo" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d muestras)" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Crear WAV" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Guardar Canción" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Cargar Muestra" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Guardar Muestra" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8 bits" -# O también cargar. sv -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Cargar Instrumento" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16 bits" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Guardar Instrumento" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "Mono" -#: app/file-operations.c:175 -msgid "File" -msgstr "Fichero" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "Estéreo" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Operación no soportada." +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "Estos cambios no tendrán efecto hasta que reinicie la reproducción." -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Frecuencia de alcance" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "Estos cambios no tendrán efecto hasta que reinicie el muestreo." -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Frecuencia del Rastreador" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "Configuracion del GUI" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "Usar los números hexadecimales" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Resolución:" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Usar letras mayúsculas en los números hexadecimales" +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Canales:" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" -msgstr "Edición asíncrona de patrón (estilo IT)" +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Frecuencia [Hz]:" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" -msgstr "Actualiza la orden Fxx de las envolventes Tiempo/BPM" +# Nota: Algunas veces hemos utilizado "búfer", lo dejo a tu elección. sv +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Tamaño del búfer:" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" -msgstr "Cambiar al rastreador después de cargar/guardar" +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "Número de Canales:" -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" -msgstr "Guardar la geometía de la ventana al salir" +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Retraso de audio estimado: %f milisegundos" -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" -msgstr "Utilizar el nombre de nota B en lugar de H" +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." +msgstr "" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" msgstr "" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Tamaño del búfer para los osciloscopios [MB]" +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Formato de la línea de la Pista:" +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." -msgstr "Listo." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Reproduciendo la canción..." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Reproduciendo el patrón..." +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Cargando el módulo..." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Módulo cargado." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Guardando el módulo..." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Módulo guardado." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "Cargando la muestra..." - -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Muestra cargada." +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "Error al cargar los patrones." -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Guardando la muestra..." +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Muestra guardada." +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "Cargando el instrumento..." +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Instrumento cargado." +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Guardando el instrumento..." +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Instrumento guardado." +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Guardando la canción..." +#: app/drivers/alsa1x.c:1328 +#, fuzzy +msgid "Unable to enable timestamping for playback" +msgstr "Incapaz de preparar el canal ALSA.\n" -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "Canción guardada." +#: app/drivers/alsa1x.c:1329 +#, fuzzy +msgid "Unable to enable timestamping for capture" +msgstr "Incapaz de preparar el canal ALSA.\n" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Pregunta" +#: app/drivers/alsa1x.c:1335 +#, fuzzy +msgid "Unable to set timestamp type for playback" +msgstr "Incapaz de preparar el canal ALSA.\n" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "Si" - -# También podría ser ninguno/a. Ver el contexto. sv -# Tienes razón -#: app/gui-subs.c:500 -msgid "No" -msgstr "No" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Cancelar" +#: app/drivers/alsa1x.c:1336 +#, fuzzy +msgid "Unable to set timestamp type for capture" +msgstr "Incapaz de preparar el canal ALSA.\n" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Aviso" +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "¡Error!" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tiempo" +#: app/drivers/alsa1x.c:1352 +#, fuzzy +msgid "Unable to prepare playback" +msgstr "Incapaz de preparar el canal ALSA.\n" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" -msgstr "Configuración del resaltado de filas" +#: app/drivers/alsa1x.c:1353 +#, fuzzy +msgid "Unable to prepare capture" +msgstr "Incapaz de preparar el canal ALSA.\n" -#: app/gui.c:301 -msgid "Highlight rows (major / minor):" -msgstr "Resaltar filas (mayor / menor):" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" +msgstr "" -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" msgstr "" -"Las filas del patrón impares contienen datos que se perderá después de " -"acortarse.¿Quiere continuar sin embargo?" -#: app/gui.c:506 -#, fuzzy -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." msgstr "" -"El patrón es demasiado largo para extender.\n" -"Se perderán algunos datos al final del patrón. ¿Quiere, sin embargo, " -"continuar?" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "Ningún fichero seleccionado." +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "no hay preferencias (todavía), ¡lo siento!" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." msgstr "" -"¿Seguro que quiere descartar el projecto actual?\n" -"¡Se perderán todos los cambios!" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "¿Seguro que quiere sobrescribir el fichero?" - -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "¡Error al abrir el fichero de patrones!" +#: app/drivers/irix-output.c:178 +#, fuzzy +msgid "16 Bit output not supported." +msgstr "Operación no soportada." -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "Operación no soportada." + +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." msgstr "" -"La longitud del patrón que está cargado no concuerda con el del patrón " -"actual en módulo.\n" -"¿Quiere cambiar la longitud del patrón actual?" - -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "Iniciar SoundTracker" +"No se pudo abrir %s para muestreo:\n" +"%s" -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "Cargando..." +#: app/drivers/oss.c:130 +#, fuzzy +msgid "OSS input: reading error" +msgstr "Cambio de Instrumento" -#: app/gui.c:1804 -msgid "Use SoundTracker!" -msgstr "¡Use SoundTracker!" +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Cargar XM..." +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Retraso de audio estimado: %f milisegundos" -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Guardar XM..." +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d muestras)" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Crear un WAV del módulo..." +# app/drivers/oss-input.c:117 +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "Dispositivo de entrada (ej. '/dev/dsp'):" -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "Guardar canción como XM..." +# app/drivers/oss-output.c:211 +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "Dispositivo de salida (ej. '/dev/dsp'):" -#: app/gui.c:1872 -msgid "Load current pattern..." -msgstr "Cargando el patrón actual..." +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" +msgstr "" -#: app/gui.c:1874 -msgid "Save current pattern..." -msgstr "Guardando el patrón actual..." +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Reproducir Canción" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"No se pudo abrir %s para muestreo:\n" +"%s" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Reproducir Patrón" +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "El formato sonoro solicitado no está soportado.\n" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Parar" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" +msgstr "Ejecutar a %d Hz con %d marcos " -#: app/gui.c:1973 -msgid "Pat" -msgstr "Patrón" +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "¿El servidor Jack no está ejecutándose?" -#: app/gui.c:1979 -msgid "Edited pattern" -msgstr "Editar patrón" +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." -msgstr "Cuando activó, la navegación de la lista no cambia el patrón editado." +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Número de Canales:" +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/gui.c:2025 -msgid "Pattern Length" -msgstr "Longitud del Patrón" +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -#: app/gui.c:2060 -msgid "Set preferred accidental type" -msgstr "Iniciar el tipo accidental escogido" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "declick" -#: app/gui.c:2066 -msgid "Measure" -msgstr "Compás" +#: app/drivers/jack.c:610 +#, fuzzy +msgid "Jack server is not running or some error occured." +msgstr "¿El servidor Jack no está ejecutándose?" -#: app/gui.c:2067 -msgid "Enable row highlighting" -msgstr "Habilitar el resaltado de filas" +#: app/drivers/sdl-output.c:76 +#, fuzzy +msgid "Experimental SDL support." +msgstr "Operación no soportada." -#: app/gui.c:2093 -msgid "Other..." -msgstr "Otras..." +# app/drivers/oss-output.c:211 +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "Dispositivo de salida (ej. '/dev/audio'):" -#: app/gui.c:2129 -msgid "Change effect column editing direction" -msgstr "Cambiar la dirección de la edición de los efectos de la columna" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" -msgstr "Amplificación global" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" -msgstr "Pitchbend" +#: app/drivers/sun-output.c:402 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "%s: No se puede manejar %dHz (%s)" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" -msgstr "Restaurar pitchbend a su valor normal" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "%s: La codificación del sonido requerido no está soportado.\n" -#: app/gui.c:2216 -msgid "Editing" -msgstr "Edición" +#: app/drivers/sun-output.c:455 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "%s: No se puede establecer el tamaño del bloque (%s)" -#: app/gui.c:2223 -msgid "Octave" -msgstr "Octava" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" -#: app/gui.c:2232 -msgid "Jump" -msgstr "Saltar" +#: app/drivers/sun-input.c:77 +#, fuzzy +msgid "SUN input: reading error" +msgstr "Cambio de Instrumento" -#: app/gui.c:2241 -msgid "Instr" -msgstr "Instrumento" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Muestra" +# app/drivers/oss-input.c:117 +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "Dispositivo de entrada (ej. '/dev/audio'):" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "¡Bienvenido a SoundTracker!" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "Apagado de volumen" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" +msgstr "" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "Velocidad del vibrato" +#: app/drivers/sun-input.c:273 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "%s: No se puede manejar %dHz (%s)" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "Profundidad del vibrato" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "%s: La codificación del sonido requerido no está soportado.\n" + +#: app/drivers/sun-input.c:332 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "%s: No se puede establecer el tamaño del bloque (%s)" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "Barrido del vibrato" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Longitud" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "No se puede abrir el fichero." +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Actual" -# Es sinusoidal. Te lo dice un matemático. sv -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sinusoidal" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Desplazamiento" -# Nota: Onda cuadrada -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Cuadrada" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Valor" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "Sierra abajo" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Insertar" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "Sierra arriba" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "Eliminar" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Editor de Instrumentos" +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"Editor\n" +"Gráfico\n" +"de la Envolvente\n" +"sólo en la\n" +"Versión GNOME" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Envolvente de Volumen" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Sostenido" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Envolvente de Balance" +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Punto" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Cargar Instrumento..." - -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Guardar Instrumento..." +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "Ciclo" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "Cargar XI" +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "Comienzo" -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "Guardar XI" +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Final" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Tipo de Vibrato:" +#: app/file-operations.c:127 +#, c-format +msgid "" +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" +msgstr "" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Nota:" +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Iniciar" +#: app/file-operations.c:245 +msgid "All files" +msgstr "" -# También podría ser ninguno/a. Ver el contexto. sv -# Tienes razón -#: app/keys.c:57 -msgid "" -msgstr "" +#: app/file-operations.c:388 +msgid "File" +msgstr "Fichero" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." +#: app/gui-settings.c:293 +msgid "Classic ST" msgstr "" -"La tecla que inserta la nota special keyoff para los módulos FastTracker." -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." -msgstr "La tecla que incrementa el valor \"jump\"." +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." -msgstr "La tecla que disminuye el valor \"jump\"." +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "Mezcladores" -# En todas las traducciones es Teclas de la Octava Superior -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "Teclas de la Octava Superior..." +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "Configuracion del GUI" -#: app/keys.c:146 -msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." -msgstr "" -"Estas son las teclas de la mitad superior del teclado. La nota c es " -"normalmente la tecla a la derecha de la tecla TAB. El resto de las notas " -"deberían estar ordenadas de la misma forma que en un piano, incluyendo la " -"fila númerica." +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Frecuencia de alcance" -# Lo mismo pero inferior -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Teclas de la Octava Inferior..." +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Frecuencia del Rastreador" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." -msgstr "" -"Estas son las teclas de la mitad inferior del teclado. La nota c es " -"normalmente la tecla a la derecha de la tecla TAB. El resto de las notas " -"deberían estar ordenadas de la misma forma que en un piano, incluyendo la " -"fila númerica." +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Usar los números hexadecimales" -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "Otras Teclas..." +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Usar letras mayúsculas en los números hexadecimales" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Varias teclas adicionales" +#: app/gui-settings.c:343 +#, fuzzy +msgid "FT2-like volume column" +msgstr "Volumen de la envolvente afinado alto" -#: app/keys.c:513 -msgid "Function" -msgstr "Función" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" +msgstr "" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Asignación" +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" +msgstr "" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Configuración del Teclado" +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Información sobre el Grupo de Teclas" +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" +msgstr "Edición asíncrona de patrón (estilo IT)" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Información sobre la tecla" +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Modificadores:" +#: app/gui-settings.c:379 +msgid "Record keyreleases" +msgstr "" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Aprender la tecla seleccionada" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" +msgstr "" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Aprender todas las teclas" +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "" -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" msgstr "" -"¡Por favor, pulse la combinación de teclas correspondiente!\n" -"Pulsar en la lista de la izquierda para cancelar" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Aceptar" +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "Actualiza la orden Fxx de las envolventes Tiempo/BPM" + +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Aplicar" +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "Cambiar al rastreador después de cargar/guardar" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" msgstr "" -"El fichero de configuración del teclado es defectuoso.\n" -"Por favor, use el diálogo de Configuración del Teclado." -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" -msgstr "CH%02d" +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" +msgstr "Guardar la geometía de la ventana al salir" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" -msgstr "Salta con rapidez al canal %d" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "Utilizar el nombre de nota B en lugar de H" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" msgstr "" -"Falló la configuración automática de teclas.\n" -"Por favor, use el diálogo de Configuración del Teclado\n" -"del menú Configuración." -#: app/menubar.c:140 +#: app/gui-settings.c:451 msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." msgstr "" -"¿Está seguro de que quiere hacer esto?\n" -"¡Perderá todos los cambios!" -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" -msgstr "" -"¿Está seguro de que quiere salir?\n" -"¡Perderá todos los cambios" +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Selección:" -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Abrir..." +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Tamaño del búfer para los osciloscopios [MB]" -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Guardar _como..." +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Muestra cargada." -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Guardar Módulo como _WAV..." +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "" -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Guardar XM fuera de las muestras..." +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Edición" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "_Salir" +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Limpiarlo _Todo" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Limpiar Sólo los _Patrones" +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "" -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Optimizar Módulo" +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "C_ortar" +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Formato de la línea de la Pista:" -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Copiar" +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "_Pegar" +#: app/gui-settings.c:573 +#, fuzzy +msgid "Tracker colors configuration" +msgstr "Configuración de Efectos de Reproducción" -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Cancelar las notas" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "Listo." -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "_Insertar pista" +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Reproduciendo la canción..." -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "_Borrar pista" +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Reproduciendo el patrón..." -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Aumentar el valor cmd" +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "Cargando el módulo..." -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Reducir el valor cmd" +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "Módulo cargado." -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "Modo _Marcar" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Guardando el módulo..." -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "_Limpiar los bloques marcados" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "Módulo guardado." -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "_Interpolar efectos" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "Cargando la muestra..." -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Trasladar media nota arriba" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Muestra cargada." -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Trasladar media nota abajo" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Guardando la muestra..." -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Trasladar una octava arriba" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Muestra guardada." -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Trasladar una octava abajo" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "Cargando el instrumento..." -#: app/menubar.c:526 -msgid "P_aste" -msgstr "P_egar" +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Instrumento cargado." -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "Modo de Edición _Jazz" +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Guardando el instrumento..." -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Instrumento guardado." -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "Trasp_osiciones..." +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Guardando la canción..." -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "_Patrón" +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "Canción guardada." -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "_Pista" +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "¡Error!" -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Selección" +#: app/gui-subs.c:414 +msgid "Question" +msgstr "Pregunta" -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_Buscar Patrones sin Usar" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Copiar lo Seleccionado a un Patrón sin Usar" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "_Limpiar Patrones sin Usar" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "Em_paquetar Patrones" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Aviso" -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "_Guardar Patrón Actual" - -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "C_argar Patrón" - -#: app/menubar.c:599 -msgid "Sh_rink Current Pattern" -msgstr "Reduci_r el Patrón Actual" +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "Configuracion del GUI" -#: app/menubar.c:601 -msgid "_Expand Current Pattern" -msgstr "_Expandir el Patrón Actual" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "Configuración del resaltado de filas" -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" -msgstr "" +#: app/gui.c:260 +msgid "Highlight rows (major / minor):" +msgstr "Resaltar filas (mayor / menor):" -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" +#: app/gui.c:330 +msgid "" msgstr "" -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Cargar XI..." +#: app/gui.c:451 +#, fuzzy +msgid "Saving module failed" +msgstr "Guardando el módulo..." -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_Guardar XI..." +#: app/gui.c:535 +msgid "File output" +msgstr "" -# He puesto suprimir por no repetir la _C de cancelar -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_Suprimir lo actual" +#: app/gui.c:612 +#, fuzzy +msgid "Can't open file for writing" +msgstr "No se puede abrir el fichero para escritura." -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Borrar los Instrumentos sin Usar" +#: app/gui.c:618 +#, fuzzy +msgid "Can't change file ownership" +msgstr "No se puede abrir el fichero para escritura." -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." msgstr "" -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "Fuente _anterior" +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "" -#: app/menubar.c:642 -msgid "_Next font" -msgstr "_Nueva fuente" +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" +"Las filas del patrón impares contienen datos que se perderá después de " +"acortarse.¿Quiere continuar sin embargo?" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" -msgstr "Cambiar el tipo _accidental escogido" +#: app/gui.c:715 +#, fuzzy +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" +"El patrón es demasiado largo para extender.\n" +"Se perderán algunos datos al final del patrón. ¿Quiere, sin embargo, " +"continuar?" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" -msgstr "Cambiar el efecto de la _dirección de la edición de la columna" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"¿Seguro que quiere descartar el projecto actual?\n" +"¡Se perderán todos los cambios!" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Mostrar los _Osciloscopios" +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "¡Error al abrir el fichero de patrones!" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Rastreo" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" +msgstr "" +"La longitud del patrón que está cargado no concuerda con el del patrón " +"actual en módulo.\n" +"¿Quiere cambiar la longitud del patrón actual?" + +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "Comienzo" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "Configuración del _Teclado..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "Configuración del _Audio..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "Configuración del _GUI..." - -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "Configuración del _MIDI..." +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "Cargando..." -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "Desactivar la pantalla splash" +#: app/gui.c:2195 +msgid "Use SoundTracker!" +msgstr "¡Use SoundTracker!" -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Guardar la Configuración ahora" +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"¿Está seguro de que quiere salir?\n" +"¡Perderá todos los cambios" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Guardar la Configuración al _Salir" - -#: app/menubar.c:690 -msgid "_About..." -msgstr "_Acerca de..." +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Mostrar _Consejos..." +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "Efectos _XM..." +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "Cargando..." -#: app/menubar.c:704 -msgid "_File" -msgstr "_Fichero" +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Módulo" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Edición" +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Instrumento" +#: app/gui.c:2400 +#, fuzzy +msgid "Extended pattern (*.xp)" +msgstr "Editar patrón" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Configuración" +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" +msgstr "" -#: app/menubar.c:711 -msgid "_Help" -msgstr "_Ayuda" +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Cargar Módulo" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" msgstr "" -"Mezclador de enteros, sin interpolación, sin filtros, la longitud de " -"muestras máximas es de 1M" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Nombre del Instrumento" +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Guardar Módulo" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#smpl" +#: app/gui.c:2434 +#, fuzzy +msgid "Save the current module" +msgstr "Guardando el patrón actual..." -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Nombre de la Muestra" +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Crear WAV" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Lineal" +#: app/gui.c:2436 +#, fuzzy +msgid "Render the current module as WAV file" +msgstr "Crear un WAV del módulo..." -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Guardar XM fuera de las muestras..." -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Información del Módulo" +#: app/gui.c:2439 +msgid "Load current pattern..." +msgstr "Cargando el patrón actual..." -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Nombre de la Pieza:" +#: app/gui.c:2440 +msgid "Save current pattern..." +msgstr "Guardando el patrón actual..." -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Frecuencias:" +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Reproducir Canción" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "Modo ProTracker" +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Reproducir Patrón" -#: app/module-info.c:395 -#, c-format -msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +#: app/gui.c:2525 +msgid "Play From Cursor" msgstr "" -"Patrones sin usar: %d (usado: %d)\n" -"Instrumentos sin usar: %d (usado: %d)\n" -"\n" -"¿Limpiar los sin usar y reordenar la lista de reproducción?\n" - -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" -msgstr "Insertar patrón que está editado" -#: app/playlist.c:535 -msgid "Remove current playlist entry" -msgstr "Borra la entrada actual de la lista de reproducción" +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "Reproducir Canción" -#: app/playlist.c:543 -msgid "Add + Cpy" -msgstr "Añade + copia" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Parar" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +#: app/gui.c:2553 +msgid "Loop Playback" msgstr "" -"Añade un patrón libre detrás de la posición actual, y copia el patrón actual " -"a él" -#: app/playlist.c:548 -msgid "Add Free" -msgstr "Añade patrón libre" +#: app/gui.c:2562 +msgid "Pat" +msgstr "Patrón" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" -msgstr "Añade un patrón libre detrás de la posición actual" +#: app/gui.c:2568 +msgid "Edited pattern" +msgstr "Editar patrón" -#: app/playlist.c:560 -#, fuzzy -msgid "Len" -msgstr "Longitud" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "Cuando activó, la navegación de la lista no cambia el patrón editado." -#: app/playlist.c:574 -msgid "Song length" -msgstr "Longitud de la cancion" +#: app/gui.c:2583 +msgid "Pattern Length" +msgstr "Longitud del Patrón" -#: app/playlist.c:580 -#, fuzzy -msgid "Rstrt" -msgstr "Instrumento" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tiempo" -#: app/playlist.c:593 -msgid "Song restart position" -msgstr "Posición de reinicio de la canción" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Número de Canales:" -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" -msgstr "" -"Se creó un directorio llamado '.soundtracker' en su\n" -"directorio home para guardar los ficheros de configuración.\n" +#: app/gui.c:2632 +msgid "Set preferred accidental type" +msgstr "Iniciar el tipo accidental escogido" -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Sin ciclo" +#: app/gui.c:2638 +msgid "Measure" +msgstr "Compás" -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "PingPong" +#: app/gui.c:2639 +msgid "Enable row highlighting" +msgstr "Habilitar el resaltado de filas" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8 bits" +#: app/gui.c:2660 +msgid "Other..." +msgstr "Otras..." -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16 bits" +#: app/gui.c:2687 +msgid "Change effect column editing direction" +msgstr "Cambiar la dirección de la edición de los efectos de la columna" -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Editor de Muestras" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" +msgstr "Amplificación global" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Volumen" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Balance" +#: app/gui.c:2740 +msgid "Pitchbend" +msgstr "Pitchbend" -# ajuste afinado -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Ajuste fino" +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "Restaurar pitchbend a su valor normal" -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Selección:" +#: app/gui.c:2760 +msgid "Editing" +msgstr "Edición" -# También podría ser ninguno/a. Ver el contexto. sv -# Tienes razón -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Ninguno" +#: app/gui.c:2767 +msgid "Octave" +msgstr "Octava" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Todo" +#: app/gui.c:2776 +msgid "Jump" +msgstr "Saltar" -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Longitud" +#: app/gui.c:2785 +msgid "Instr" +msgstr "Instrumento" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Fijar como ciclo" +#: app/gui.c:2801 +msgid "Sample" +msgstr "Muestra" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "Nota Relativa" +#: app/gui.c:2827 +msgid "dB" +msgstr "" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Cargar Muestra..." +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "¡Bienvenido a SoundTracker!" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Guardar WAV..." +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "Guardar parte como WAV..." +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "No se puede abrir el fichero." -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "Guardar WAV" +#: app/instrument-editor.c:209 +#, fuzzy +msgid "Saving instrument failed." +msgstr "Guardando el instrumento..." -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "Guardar Parte" +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "Instrumento actual" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Monitor" +# Es sinusoidal. Te lo dice un matemático. sv +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sinusoidal" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Rampa de Volumen" +# Nota: Onda cuadrada +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Cuadrada" -#: app/sample-editor.c:425 -#, fuzzy -msgid "Trim" -msgstr "Vibración" +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "Sierra abajo" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Zoom en selección" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "Sierra arriba" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Mostrar todo" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" +msgstr "" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Acercar zoom (+50%)" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Editor de Instrumentos" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Alejar zoom (-50%)" +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Envolvente de Volumen" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Invertir" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Envolvente de Balance" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Cortar" +# O también cargar. sv +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Cargar Instrumento" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Suprimir" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Copiar" +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Guardar Instrumento" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Pegar" +#: app/instrument-editor.c:297 +#, fuzzy +msgid "Save the current instrument" +msgstr "Instrumento actual" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "Borrar Muestra" +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "Cargar XI" + +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "Guardar XI" -#: app/sample-editor.c:500 +#: app/instrument-editor.c:320 #, fuzzy -msgid "Crop" -msgstr "Copiar" +msgid "Volume Fadeout" +msgstr "Subir la envolvente de volumen" -# ninguna selección -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(no seleccionado)" +#: app/instrument-editor.c:344 +#, fuzzy +msgid "Vibrato:" +msgstr "Vibrato" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "Fuera de memoria para la copia del bufer.\n" +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "Velocidad del vibrato" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." -msgstr "Fuera de memoria para los datos de la muestra." +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "Profundidad del vibrato" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Error de lectura." +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "Barrido del vibrato" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Cargar la muestra estéreo" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Nota:" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" -msgstr "" -"¡Seleccionó una muestra estéreo!\n" -"(¡Soundtraker sólo puede manejar muestras mono!)\n" -"\n" -"Por favor, escoja el canal a cargar:" +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "Iniciar" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Izquierda" +# También podría ser ninguno/a. Ver el contexto. sv +# Tienes razón +#: app/keys.c:58 +msgid "" +msgstr "" -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Mezcla" +#: app/keys.c:134 +msgid "KOFF" +msgstr "" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Derecha" +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "" +"La tecla que inserta la nota special keyoff para los módulos FastTracker." -# Es sinusoidal. Te lo dice un matemático. sv -#: app/sample-editor.c:1575 -msgid "Signed" -msgstr "Firma" +#: app/keys.c:136 +msgid "JMP+" +msgstr "" -#: app/sample-editor.c:1575 -msgid "Unsigned" -msgstr "Sin firma" +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "La tecla que incrementa el valor \"jump\"." -#: app/sample-editor.c:1576 -msgid "Little-Endian" +#: app/keys.c:138 +msgid "JMP-" msgstr "" -#: app/sample-editor.c:1576 -msgid "Big-Endian" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "La tecla que disminuye el valor \"jump\"." + +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Reproducir Canción" + +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Guardando el módulo..." + +#: app/keys.c:142 +msgid "RecMod" msgstr "" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "Mono" +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Reproduciendo el patrón..." -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "Estéreo" +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "Reproducir Patrón" -# Normalmente se llama "raw" a los datos en bruto, sin ninguna -# cabecera que indique cuántos datos hay, de qué tipo son o cómo -# están organizados internamente. -# Nunca lo he visto traducido como "tosco", pero tampoco he visto -# una traducción que sea perfecta. sv -# En otras traducciones raw lo traducen como algo tosco, sin pulir. -# Lo mejor es normalizar, así que dejo raw en bruto. -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "Cargar la muestra en bruto" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Reproducir Patrón" -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" +#: app/keys.c:146 +msgid "RecPat" msgstr "" -"Seleccionó una muestra de un formato\n" -"no conocido. Puede cargar los datos brutos ahora.\n" -"\n" -"Por favor, escoja el formato:" -#: app/sample-editor.c:1623 -msgid "Word format:" -msgstr "Formato de la palabra:" - -#: app/sample-editor.c:1670 -msgid "Sampling Rate:" -msgstr "Ritmo de muestreo:" +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Reproduciendo el patrón..." -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" - -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "Aceptar" +#: app/keys.c:148 +msgid "PlayCur" +msgstr "" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "No se puede leer la muestra" +#: app/keys.c:148 +msgid "Play module from cursor." +msgstr "" -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." +#: app/keys.c:150 +msgid "RecCur" msgstr "" -"La muestra es demasiado larga para el módulo mezclador actual. Cargando de " -"todas formas." -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Sólo se pueden manejar muestras de 8 y 16 bit con hasta dos canales" +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Reproduciendo el patrón..." -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "Por favor seleccione la primera región." +#: app/keys.c:152 +#, fuzzy +msgid "PlayRow" +msgstr "Reproducir Canción" -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Comenzar el muestreo" +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Cargando el patrón actual..." -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "No hay un controlador accesible de muestreo" +#: app/keys.c:154 +msgid "PlayBlk" +msgstr "" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Ventana de Muestreo" +#: app/keys.c:154 +#, fuzzy +msgid "Play selected block." +msgstr "Aprender la tecla seleccionada" -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" -msgstr "¡Fuera de memoria mientras se muestreaba|" +# En todas las traducciones es Teclas de la Octava Superior +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Teclas de la Octava Superior..." -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/keys.c:167 +msgid "" +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." +msgstr "" +"Estas son las teclas de la mitad superior del teclado. La nota c es " +"normalmente la tecla a la derecha de la tecla TAB. El resto de las notas " +"deberían estar ordenadas de la misma forma que en un piano, incluyendo la " +"fila númerica." -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +# Lo mismo pero inferior +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Teclas de la Octava Inferior..." + +#: app/keys.c:173 +msgid "" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." msgstr "" -"La muestra grabada es demasiado larga para el módulo mezclador actual. " -"Usándolo de todas formas." +"Estas son las teclas de la mitad inferior del teclado. La nota c es " +"normalmente la tecla a la derecha de la tecla TAB. El resto de las notas " +"deberían estar ordenadas de la misma forma que en un piano, incluyendo la " +"fila númerica." -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normalizar" +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "Otras Teclas..." -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Ejecutar" +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Varias teclas adicionales" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Rampa del Volumen" +#: app/keys.c:578 +msgid "Function" +msgstr "Función" -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Hacer un desvanecimiento lineal de sonido en lo seleccionado" +#: app/keys.c:579 +msgid "Assignment" +msgstr "Asignación" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Izquierda [%]:" +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Configuración del Teclado" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "H" +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Información sobre el Grupo de Teclas" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "D" +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Información sobre la tecla" -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Derecha [%]:" +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Modificadores:" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" -msgstr "" +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "Aprender la tecla seleccionada" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" -msgstr "" +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "Aprender todas las teclas" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/keys.c:702 +msgid "" +"Please press the desired key combination!\n" +"Click into left list to cancel" msgstr "" +"¡Por favor, pulse la combinación de teclas correspondiente!\n" +"Pulsar en la lista de la izquierda para cancelar" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "CH%02d" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "Salta con rapidez al canal %d" + +#: app/keys.c:1028 +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." msgstr "" +"Falló la configuración automática de teclas.\n" +"Por favor, use el diálogo de Configuración del Teclado\n" +"del menú Configuración." -#: app/tips-dialog.c:50 +#: app/menubar.c:115 +#, c-format msgid "" -"Welcome to SoundTracker!\n" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" "\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." -msgstr "" -"Bienvenido a SoundTracker\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" "\n" -"Si es nuevo en este tipo de programas, puede que quiera obtener algunos\n" -"ficheros XM o MOD y jugar con ellos." +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" +msgstr "" -#: app/tips-dialog.c:55 +#: app/menubar.c:126 msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." msgstr "" -"Puede hacer que el modo de edición de SoundTracker responda más rápido\n" -"al teclado reduciendo el tamaño del búfer de mezcla en el objeto \"Edición" -"\"\n" -"en la Configuración de Audio." -#: app/tips-dialog.c:59 +#: app/menubar.c:151 msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +"Are you sure you want to do this?\n" +"All changes will be lost!" msgstr "" -"Puede ajustar los puntos de ciclo en el editor de muestras pulsando la tecla " -"de\n" -"mayúsculas a la vez que los botones izquierdo o derecho del ratón.\n" +"¿Está seguro de que quiere hacer esto?\n" +"¡Perderá todos los cambios!" -#: app/tips-dialog.c:62 -msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" msgstr "" -"Si quiere saber más del rastreo, y como funcionan los comandos, visite\n" -"http://www.united-trackers.org/" +"Mezclador de enteros, sin interpolación, sin filtros, la longitud de " +"muestras máximas es de 1M" -#: app/tips-dialog.c:65 +#: app/mixers/kbfloat.c:838 +#, fuzzy msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" msgstr "" -"Puede asignar muestras de un instrumento a teclas individuales activando la\n" -"muestra y luego pulsando en el teclado de la página de edición de " -"instrumentos." +"Mezclador de enteros, sin interpolación, sin filtros, la longitud de " +"muestras máximas es de 1M" -#: app/tips-dialog.c:69 -msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" msgstr "" -"¿Su cursor está atrapado en un campo de entrada de número?\n" -"¡Sólo tiene que pulsar Retorno o Tab para librarse!" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "Consejo de SoundTraker para hoy" +#: app/module-info.c:63 app/module-info.c:64 +#, fuzzy +msgid "Cyclic" +msgstr "declick" -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Consejo anterior" +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Siguiente consejo" +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" + +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" + +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" + +#: app/module-info.c:481 +msgid "Period" +msgstr "" + +#: app/module-info.c:484 +msgid "s" +msgstr "" + +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Nota:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Nombre del Instrumento" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#smpl" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Nombre de la Muestra" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "Lineal" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Información del Módulo" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Nombre de la Pieza:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Frecuencias:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "Modo ProTracker" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Editor de Instrumentos" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Instrumento Actual" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Guardar Instrumento" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "Intercambio 1 <-> 2" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +# ajuste afinado +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Ajuste fino" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "Nota Relativa" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" +"Patrones sin usar: %d (usado: %d)\n" +"Instrumentos sin usar: %d (usado: %d)\n" +"\n" +"¿Limpiar los sin usar y reordenar la lista de reproducción?\n" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "Insertar patrón que está editado" + +#: app/playlist.c:511 +msgid "Remove current playlist entry" +msgstr "Borra la entrada actual de la lista de reproducción" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "Añade + copia" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" +"Añade un patrón libre detrás de la posición actual, y copia el patrón actual " +"a él" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "Añade patrón libre" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "Añade un patrón libre detrás de la posición actual" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Longitud" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "Longitud de la cancion" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Instrumento" + +#: app/playlist.c:567 +msgid "Song restart position" +msgstr "Posición de reinicio de la canción" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"Se creó un directorio llamado '.soundtracker' en su\n" +"directorio home para guardar los ficheros de configuración.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Sin ciclo" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "PingPong" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8 bits" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16 bits" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Editor de Muestras" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "Volumen" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Balance" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Selección:" + +# También podría ser ninguno/a. Ver el contexto. sv +# Tienes razón +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "Ninguno" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Todo" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Longitud" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "Fijar como ciclo" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Cargar Muestra" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "Guardar XM fuera de las muestras..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Guardar Muestra" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "Guardar XM fuera de las muestras..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "Guardar parte como WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "Guardar WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "Guardar Parte" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Rampa de Volumen" + +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "Vibración" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "Zoom en selección" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "Mostrar todo" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "Acercar zoom (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "Alejar zoom (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Invertir" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Cortar" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Suprimir" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Copiar" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Pegar" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "Borrar Muestra" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Copiar" + +# ninguna selección +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(no seleccionado)" + +#: app/sample-editor.c:1279 +#, fuzzy +msgid "Out of memory for copybuffer." +msgstr "Fuera de memoria para la copia del bufer.\n" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Mezcla" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Izquierda" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Derecha" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d muestras)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "Fuera de memoria para los datos de la muestra." + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "Error de lectura." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"¡Seleccionó una muestra estéreo!\n" +"(¡Soundtraker sólo puede manejar muestras mono!)\n" +"\n" +"Por favor, escoja el canal a cargar:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "Comenzar el muestreo" + +# Es sinusoidal. Te lo dice un matemático. sv +#: app/sample-editor.c:1756 +msgid "Signed" +msgstr "Firma" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "Sin firma" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "" + +# Normalmente se llama "raw" a los datos en bruto, sin ninguna +# cabecera que indique cuántos datos hay, de qué tipo son o cómo +# están organizados internamente. +# Nunca lo he visto traducido como "tosco", pero tampoco he visto +# una traducción que sea perfecta. sv +# En otras traducciones raw lo traducen como algo tosco, sin pulir. +# Lo mejor es normalizar, así que dejo raw en bruto. +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "Cargar la muestra en bruto" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"Seleccionó una muestra de un formato\n" +"no conocido. Puede cargar los datos brutos ahora.\n" +"\n" +"Por favor, escoja el formato:" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "Formato de la palabra:" + +#: app/sample-editor.c:1829 +msgid "Sampling Rate:" +msgstr "Ritmo de muestreo:" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "No se puede leer la muestra" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "" +"La muestra es demasiado larga para el módulo mezclador actual. Cargando de " +"todas formas." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "Sólo se pueden manejar muestras de 8 y 16 bit con hasta dos canales" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "No se puede abrir el fichero para escritura." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "Por favor seleccione la primera región." + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "No hay un controlador accesible de muestreo" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Ventana de Muestreo" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "Limpiarlo _Todo" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Ritmo de muestreo:" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "¡Fuera de memoria mientras se muestreaba|" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"¡Seleccionó una muestra estéreo!\n" +"(¡Soundtraker sólo puede manejar muestras mono!)\n" +"\n" +"Por favor, escoja el canal a cargar:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Cargar la muestra estéreo" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"La muestra grabada es demasiado larga para el módulo mezclador actual. " +"Usándolo de todas formas." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Rampa del Volumen" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normalizar" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "Hacer un desvanecimiento lineal de sonido en lo seleccionado" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Izquierda [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "H" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "D" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Derecha [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"Bienvenido a SoundTracker\n" +"\n" +"Si es nuevo en este tipo de programas, puede que quiera obtener algunos\n" +"ficheros XM o MOD y jugar con ellos." + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"Puede hacer que el modo de edición de SoundTracker responda más rápido\n" +"al teclado reduciendo el tamaño del búfer de mezcla en el objeto \"Edición" +"\"\n" +"en la Configuración de Audio." + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"Puede ajustar los puntos de ciclo en el editor de muestras pulsando la tecla " +"de\n" +"mayúsculas a la vez que los botones izquierdo o derecho del ratón.\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"Si quiere saber más del rastreo, y como funcionan los comandos, visite\n" +"http://www.united-trackers.org/" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Puede asignar muestras de un instrumento a teclas individuales activando la\n" +"muestra y luego pulsando en el teclado de la página de edición de " +"instrumentos." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" +"¿Su cursor está atrapado en un campo de entrada de número?\n" +"¡Sólo tiene que pulsar Retorno o Tab para librarse!" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "Consejo anterior" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "Siguiente consejo" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "Mostrar consejos la próxima vez" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "Consejo de SoundTraker para hoy" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "Arpegio" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "Subir porta" + +# En otra traducción (de) : Bajar octava. +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "Bajar porta" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "Tono porta" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "Vibrato" + +# puede ser variación de volumen? +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "Porta tono + envolvente de volumen" + +# variación de volumen? +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "Vibrato + Envolvente de volumen" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "Trémolo" + +# en otras traducciones set se define como activar. +# Si crees que es mejor activar a fijar puedes hacer el cambio. +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "Fijar balance" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Muestra guardada." + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "Fijar el volumen" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Saltar posición" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "Interrupción del patrón" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "Fijar tiempo/bpm" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "Fijar volumen global" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "Variación del volumen general" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "Tecla apagada" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "Fijar la posición envolvente" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "Envolvente de balance" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "Resonancia del filtro del LP" + +# Nota Multi de retorno +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "Nota Multi del retrig" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "Vibración" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "Atajo del filtro del LP" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "Subir porta afinada" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "Bajar porta afinada" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "Fijar el control de gliss" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "Fijar el control del vibrato" + +# Regular la afinación +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "Fijar el ajuste afinado" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "Patrón" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "Fijar el control de trémolo" + +# nota de retorno +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "Nota de retorno" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "Volumen de la envolvente afinado alto" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "Volumen de la envolvente afinado bajo" + +# Podría ser "cortar nota" o algo así. sv +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "Cortar nota" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "Observe el retardo" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "Retraso del patrón" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "Bajar la envolvente de volumen" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "Subir la envolvente de volumen" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "Fijar la velocidad del vibrato" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "Envolvente de balance izquierdo" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "Envolvente de balance derecho" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "sinusoidal" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "bajar una octava" + +#: app/track-editor.c:203 +msgid "square" +msgstr "cuadrada" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +#, fuzzy +msgid "Extra fine porta up" +msgstr "Subir porta afinada" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "Bajar porta afinada" + +# También podría ser ninguno/a. Ver el contexto. sv +# Tienes razón +#: app/track-editor.c:257 +msgid "None ]" +msgstr "Ninguno ]" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Edición Jazz:" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Rastreador" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "Lista de fuentes" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "Añadir fuente" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "Borrar fuente" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "Aplicar fuente" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "Seleccionar fuente..." + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "Pieza entera" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "Todos los Patrones" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "Patrón Actual" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "Pista Actual" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Instrumento Actual" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "Todos los Instrumentos" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "Subir media nota" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "Bajar media nota" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "Subir una octava" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "Bajar una octava" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "Intercambio 1 <-> 2" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "Cambiar 1 -> 2" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "Herramientas de Transposición" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "Alcance de la operación:" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Transposición de las Notas" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Cambio de Instrumento" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Instrumento 1:" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Instrumento actual" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Instrumento 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "Longitud del patrón fuera de rango: %d.\n" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Error al cargar los patrones." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Instrumento cargado." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Cambio de Instrumento" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Envolvente de Balance" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Envolvente de Balance" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Envolvente de Balance" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "Tipo de vibrato %d no válido, usando Sinusoidal.\n" + +#: app/xm.c:678 app/xm.c:1233 +#, fuzzy +msgid "Out of memory error!" +msgstr "Fuera de memoria para la copia del bufer.\n" + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "El fichero no es un instrumento XI." + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Instrumento cargado." + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Envolvente de Balance" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Envolvente de Balance" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Instrumento cargado." + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "Tipo de vibrato %d no válido, usando Sinusoidal.\n" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "Error al cargar los patrones." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "No se puede abrir el fichero" + +#: app/xm.c:1215 +#, fuzzy +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" +"La cabecera del XM tiene una longitud != 276. Quizás sea un módulo de " +"SoundTracker pre-0.0.12? :-)\n" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "Error al cargar los patrones." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"El módulo contiene muestra(s) que son demasiado largas para el mezclador " +"actual.\n" +"La longitud máxima de muestra es %d." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "¡No es un XM de FastTracker ni un formato MOD soportado!" + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "Error cuando se leía el fichero o final de fichero inesperado" + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "¡Versión incorrecta o sin apoyo del fichero patrón!" + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "¡Longitud del patrón incorrecta!" + +#: app/xm.c:1761 app/xm.c:1787 +msgid "Error during saving pattern!" +msgstr "¡Error al guardar los patrones!" + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "Auto conección" + +#: app/midi-settings.c:414 +msgid "Channel" +msgstr "Canal" + +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "Número de cliente" + +#: app/midi-settings.c:434 +msgid "Port number" +msgstr "Número de puerto" + +#: app/midi-settings.c:453 +msgid "Input" +msgstr "Entrada" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "para desarrollo futuro" + +#: app/midi-settings.c:468 +msgid "Output" +msgstr "Salida" + +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "Nivel de depuración" + +#: app/midi-settings.c:492 +#, fuzzy +msgid "Misc" +msgstr "Mezcladores" + +#: app/midi-settings.c:532 +msgid "MIDI Configuration" +msgstr "Configuración de MIDI" + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Patrón" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "_Pista" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_Cancelar las notas" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "_Insertar pista" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "_Borrar pista" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "Aumentar el valor cmd" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Reducir el valor cmd" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "_Limpiar los bloques marcados" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "_Interpolar efectos" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Fichero" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_Abrir..." + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Guardar _como..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Guardar Módulo como _WAV..." + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "Guardar XM fuera de las muestras..." + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Módulo" + +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "/Módulo/Limpiarlo _Todo" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Limpiar Sólo los _Patrones" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Optimizar Módulo" + +#: soundtracker.glade:346 +#, fuzzy +msgid "_Set Optimal Amplification" +msgstr "Amplificación global" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Edición" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "Modo de Edición _Jazz" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "Trasp_osiciones..." + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Patrón" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "_Pista" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Selección" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "Modo _Marcar" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Trasladar media nota arriba" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Trasladar media nota abajo" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Trasladar una octava arriba" + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Trasladar una octava abajo" + +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "C_argar Patrón" + +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "_Guardar Patrón Actual" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_Buscar Patrones sin Usar" + +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Copiar lo Seleccionado a un Patrón sin Usar" + +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "_Expandir el Patrón Actual" + +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "" + +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "_Limpiar Patrones sin Usar" + +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "Em_paquetar Patrones" + +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "Reduci_r el Patrón Actual" + +#: soundtracker.glade:753 +msgid "_Expand Current Pattern" +msgstr "_Expandir el Patrón Actual" + +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" + +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Mostrar consejos la próxima vez" +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "Pista Actual" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "Arpegio" +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "Pista Actual" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "Subir porta" +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "Pista Actual" -# En otra traducción (de) : Bajar octava. -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "Bajar porta" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Instrumento" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" -msgstr "Tono porta" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "Cargar XI" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "Vibrato" +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "Guardar XI" -# puede ser variación de volumen? -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" -msgstr "Porta tono + envolvente de volumen" +# He puesto suprimir por no repetir la _C de cancelar +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_Suprimir lo actual" -# variación de volumen? -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" -msgstr "Vibrato + Envolvente de volumen" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_Borrar los Instrumentos sin Usar" -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "Trémolo" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Configuración" -# en otras traducciones set se define como activar. -# Si crees que es mejor activar a fijar puedes hacer el cambio. -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "Fijar balance" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Mostrar los _Osciloscopios" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Saltar posición" +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "Fijar el volumen" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Rastreo" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "Interrupción del patrón" +#: soundtracker.glade:913 +msgid "_Flicker-free Scrolling" +msgstr "" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "Fijar tiempo/bpm" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "Fuente _anterior" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Fijar volumen global" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "_Nueva fuente" -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "Variación del volumen general" +#: soundtracker.glade:944 +#, fuzzy +msgid "Change Preferred _Accidental Type" +msgstr "Cambiar el tipo _accidental escogido" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "Tecla apagada" +#: soundtracker.glade:953 +#, fuzzy +msgid "Change Effect Column _Editing Direction" +msgstr "Cambiar la dirección de la edición de los efectos de la columna" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "Fijar la posición envolvente" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "Configuración del Teclado" -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "Envolvente de balance" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "Configuración de Audio" -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "Resonancia del filtro del LP" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "Configuracion del GUI" -# Nota Multi de retorno -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "Nota Multi del retrig" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "Configuración de MIDI" -#: app/track-editor.c:142 -msgid "Tremor" -msgstr "Vibración" +#: soundtracker.glade:1016 +#, fuzzy +msgid "_Disable Splash Screen" +msgstr "Desactivar la pantalla splash" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "Atajo del filtro del LP" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_Guardar la Configuración ahora" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "Subir porta afinada" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Guardar la Configuración al _Salir" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "Bajar porta afinada" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_Ayuda" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "Fijar el control de gliss" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "_Acerca de..." -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "Fijar el control del vibrato" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "Mostrar _Consejos..." -# Regular la afinación -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "Fijar el ajuste afinado" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "Efectos _XM..." -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Fijar el cilo principio/ciclo" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Reproducir Canción" -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "Fijar el control de trémolo" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Reproducir Canción" -# nota de retorno -#: app/track-editor.c:161 -msgid "Retrig note" -msgstr "Nota de retorno" +#~ msgid "transport master" +#~ msgstr "transportador maestro" -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "Volumen de la envolvente afinado alto" +#~ msgid "SoundTracker Startup" +#~ msgstr "Iniciar SoundTracker" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "Volumen de la envolvente afinado bajo" +#~ msgid "Vibrato Type:" +#~ msgstr "Tipo de Vibrato:" -# Podría ser "cortar nota" o algo así. sv -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "Cortar nota" +#~ msgid "VolFade" +#~ msgstr "Apagado de volumen" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "Observe el retardo" +#~ msgid "Set loop begin/loop" +#~ msgstr "Fijar el cilo principio/ciclo" -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "Retraso del patrón" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Nota:" -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "Bajar la envolvente de volumen" +#~ msgid "Error while loading instruments." +#~ msgstr "Se produjo un error al cargar los instrumentos." -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "Subir la envolvente de volumen" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "Obsérvese que la salida ESD es inutilizable en\n" +#~ "modo interactivo a causa de la latencia añadida\n" +#~ "por ESD. Use los plug-ins de salida de OSS o ALSA\n" +#~ "para trabajos serios." -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "Fijar la velocidad del vibrato" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "No se pudo conectar a ESD para la salida de sonido:\n" +#~ "%s" -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "Envolvente de balance izquierdo" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "Estos cambios no tendrán efecto hasta que reinicie el muestreo." -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "Envolvente de balance derecho" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Cambio de Instrumento" -#: app/track-editor.c:184 -msgid "sine" -msgstr "sinusoidal" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "%s: La codificación del sonido requerido no está soportado.\n" -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "bajar una octava" +#~ msgid "%s: %s" +#~ msgstr "%s: %s" -#: app/track-editor.c:186 -msgid "square" -msgstr "cuadrada" +#~ msgid "%s: Cannot play (%s)" +#~ msgstr "%s: No se puede reproducir (%s)" -# También podría ser ninguno/a. Ver el contexto. sv -# Tienes razón -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, c-format -msgid "None ]" -msgstr "Ninguno ]" +#~ msgid "%s: Cannot record (%s)" +#~ msgstr "%s: No se puede registrar (%s)" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Edición Jazz:" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Versión de XI 0x%x desconocida\n" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Rastreador" +#~ msgid "out_1" +#~ msgstr "out_1" -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "Lista de fuentes" +#~ msgid "out_2" +#~ msgstr "out_2" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "Añadir fuente" +#~ msgid "Monitor" +#~ msgstr "Monitor" -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "Borrar fuente" +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#smpl" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "Aplicar fuente" +#~ msgid "OK" +#~ msgstr "Aceptar" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Subir" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Abajo" +#~ msgid "Cancel" +#~ msgstr "Cancelar" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "Seleccionar fuente..." +#~ msgid "(%d bytes)" +#~ msgstr "(%d bytes)" -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "Pieza entera" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Retraso de audio estimado: %f microsegundos" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Todos los Patrones" +#~ msgid "ALSA card number:" +#~ msgstr "Número de la tarjeta ALSA:" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "Patrón Actual" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "No se pudo abrir el dispositivo ALSA para entrada de sonido (tarjeta:%d, " +#~ "dispositivo:%d):\n" +#~ "%s" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "Pista Actual" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "Los parámetros de salida de sonido no están soportados.\n" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Instrumento Actual" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "No se pudo abrir el dispositivo ALSA para salida de sonido (tarjeta:%d, " +#~ "dispositivo:%d):\n" +#~ "%s" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Todos los Instrumentos" +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "" +#~ "Los parámetros requeridos del canal de salida no están soportados.\n" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Subir media nota" +#~ msgid "Alsa setup error.\n" +#~ msgstr "Error de iniciación ALSA.\n" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "Bajar media nota" +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "No se pudo abrir %s para salida de sonido:\n" +#~ "%s" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "Subir una octava" +#~ msgid "soundtracker" +#~ msgstr "soundtracker" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "Bajar una octava" +#~ msgid "Save Song" +#~ msgstr "Guardar Canción" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "Intercambio 1 <-> 2" +#~ msgid "Yes" +#~ msgstr "Si" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "Cambiar 1 -> 2" +# También podría ser ninguno/a. Ver el contexto. sv +# Tienes razón +#~ msgid "No" +#~ msgstr "No" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "Herramientas de Transposición" +#~ msgid "Close" +#~ msgstr "Cerrar" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Alcance de la operación:" +#~ msgid "No file selected." +#~ msgstr "Ningún fichero seleccionado." -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Transposición de las Notas" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "¿Seguro que quiere sobrescribir el fichero?" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Cambio de Instrumento" +#~ msgid "Load XM..." +#~ msgstr "Cargar XM..." -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Instrumento 1:" +#~ msgid "Save XM..." +#~ msgstr "Guardar XM..." -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Instrumento actual" +#~ msgid "Save song as XM..." +#~ msgstr "Guardar canción como XM..." -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Instrumento 2:" +#~ msgid "Load Instrument..." +#~ msgstr "Cargar Instrumento..." -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Longitud del patrón fuera de rango: %d.\n" +#~ msgid "Save Instrument..." +#~ msgstr "Guardar Instrumento..." -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "El fichero no es un instrumento XI." +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "El fichero de configuración del teclado es defectuoso.\n" +#~ "Por favor, use el diálogo de Configuración del Teclado." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Versión de XI 0x%x desconocida\n" +#~ msgid "Ok" +#~ msgstr "Aceptar" -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "Tipo de vibrato %d no válido, usando Sinusoidal.\n" +#~ msgid "_Quit" +#~ msgstr "_Salir" -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "Error al cargar los patrones." +#~ msgid "C_ut" +#~ msgstr "C_ortar" -#: app/xm.c:927 -msgid "Can't open file" -msgstr "No se puede abrir el fichero" +#~ msgid "_Copy" +#~ msgstr "_Copiar" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Se produjo un error al cargar los instrumentos." +#~ msgid "_Paste" +#~ msgstr "_Pegar" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"El módulo contiene muestra(s) que son demasiado largas para el mezclador " -"actual.\n" -"La longitud máxima de muestra es %d." +#~ msgid "P_aste" +#~ msgstr "P_egar" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "¡No es un XM de FastTracker ni un formato MOD soportado!" +#~ msgid "_Load XI..." +#~ msgstr "_Cargar XI..." -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "Error cuando se leía el fichero o final de fichero inesperado" +#~ msgid "_Save XI..." +#~ msgstr "_Guardar XI..." -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "¡Versión incorrecta o sin apoyo del fichero patrón!" +#~ msgid "Change effect column editing _direction" +#~ msgstr "Cambiar el efecto de la _dirección de la edición de la columna" -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "¡Longitud del patrón incorrecta!" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "Configuración del _Teclado..." -#: app/xm.c:1468 -msgid "Error during saving pattern!" -msgstr "¡Error al guardar los patrones!" +#~ msgid "_Audio Configuration..." +#~ msgstr "Configuración del _Audio..." -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "Auto conección" +#~ msgid "_GUI Configuration..." +#~ msgstr "Configuración del _GUI..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -msgid "Channel" -msgstr "Canal" +#~ msgid "_MIDI Configuration..." +#~ msgstr "Configuración del _MIDI..." -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "Número de cliente" +#~ msgid "Load Sample..." +#~ msgstr "Cargar Muestra..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" -msgstr "Número de puerto" +#~ msgid "Save WAV..." +#~ msgstr "Guardar WAV..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -msgid "Input" -msgstr "Entrada" +#~ msgid "8363" +#~ msgstr "8363" -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "para desarrollo futuro" +#~ msgid "Execute" +#~ msgstr "Ejecutar" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -msgid "Output" -msgstr "Salida" +#~ msgid "Apply" +#~ msgstr "Aplicar" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "Nivel de depuración" +#~ msgid "Drivers" +#~ msgstr "Controladores" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -#, fuzzy -msgid "Misc" -msgstr "Mezcladores" +#~ msgid "Up" +#~ msgstr "Subir" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -msgid "MIDI Configuration" -msgstr "Configuración de MIDI" +#~ msgid "Down" +#~ msgstr "Abajo" #~ msgid "Advance cursor horizontally in effect columns" #~ msgstr "Avanzar horizontalmente el cursor en las columnas de los efectos" @@ -2180,15 +3786,12 @@ #~ msgstr "Necesita reinicar SoundTracker para que este cambio tenga efecto." #~ msgid "`Save XM' saves all non-empty patterns" -#~ msgstr "`Guardar XM' guarda todos los patrones no vacíos" +#~ msgstr "`Guardar XM' guarda todos los patrones no vacíos" # Nota: Inactivo #~ msgid "Idle." #~ msgstr "En espera." -#~ msgid "Pattern" -#~ msgstr "Patrón" - #~ msgid "Use _Backing Store" #~ msgstr "Usar Espacio de _Respaldo" @@ -2205,7 +3808,7 @@ #~ msgstr "/Fichero/-" #~ msgid "/File/Save Module as _WAV..." -#~ msgstr "/Fichero/Guardar Módulo como _WAV..." +#~ msgstr "/Fichero/Guardar Módulo como _WAV..." #~ msgid "/File/Save XM without samples..." #~ msgstr "/Fichero/Guardar XM fuera de las muestras..." @@ -2214,100 +3817,97 @@ #~ msgstr "/Fichero/_Salir" #~ msgid "/_Module" -#~ msgstr "/_Módulo" - -#~ msgid "/Module/Clear _All" -#~ msgstr "/Módulo/Limpiarlo _Todo" +#~ msgstr "/_Módulo" #~ msgid "/Module/Clear _Patterns Only" -#~ msgstr "/Módulo/Limpiar Sólo los _Patrones" +#~ msgstr "/Módulo/Limpiar Sólo los _Patrones" #~ msgid "/Module/_Optimize Module" -#~ msgstr "/Módulo/_Optimizar Módulo" +#~ msgstr "/Módulo/_Optimizar Módulo" #~ msgid "/_Edit" -#~ msgstr "/_Edición" +#~ msgstr "/_Edición" #~ msgid "/Edit/_Jazz Edit Mode" -#~ msgstr "/Edición/Modo de Edición _Jazz" +#~ msgstr "/Edición/Modo de Edición _Jazz" #~ msgid "/Edit/-" -#~ msgstr "/Edición/-" +#~ msgstr "/Edición/-" #~ msgid "/Edit/_Transposition..." -#~ msgstr "/Edición/_Transposiciones..." +#~ msgstr "/Edición/_Transposiciones..." #~ msgid "/Edit/Pattern/C_ut" -#~ msgstr "/Edición/Patrón/C_ortar" +#~ msgstr "/Edición/Patrón/C_ortar" #~ msgid "/Edit/Pattern/_Copy" -#~ msgstr "/Edición/Patrón/_Copiar" +#~ msgstr "/Edición/Patrón/_Copiar" #~ msgid "/Edit/Pattern/_Paste" -#~ msgstr "/Edición/Patrón/_Pegar" +#~ msgstr "/Edición/Patrón/_Pegar" #~ msgid "/Edit/_Track" -#~ msgstr "/Edición/_Pista" +#~ msgstr "/Edición/_Pista" #~ msgid "/Edit/Track/C_ut" -#~ msgstr "/Edición/Pista/C_ortar" +#~ msgstr "/Edición/Pista/C_ortar" #~ msgid "/Edit/Track/_Copy" -#~ msgstr "/Edición/Pista/_Copiar" +#~ msgstr "/Edición/Pista/_Copiar" #~ msgid "/Edit/Track/_Paste" -#~ msgstr "/Edición/Pista/_Pegar" +#~ msgstr "/Edición/Pista/_Pegar" #~ msgid "/Edit/Track/_Kill notes" -#~ msgstr "/Edición/Pista/Cancelar _notas" +#~ msgstr "/Edición/Pista/Cancelar _notas" #~ msgid "/Edit/Track/_Insert" -#~ msgstr "/Edición/Pista/_Insertar" +#~ msgstr "/Edición/Pista/_Insertar" #~ msgid "/Edit/Track/_Delete" -#~ msgstr "/Edición/Pista/_Suprimir" +#~ msgstr "/Edición/Pista/_Suprimir" #~ msgid "/Edit/_Selection" -#~ msgstr "/Edición/_Selección" +#~ msgstr "/Edición/_Selección" #~ msgid "/Edit/Selection/_Mark mode" -#~ msgstr "/Edición/Selección/_Modo marcar" +#~ msgstr "/Edición/Selección/_Modo marcar" #~ msgid "/Edit/Selection/C_lear block marks" -#~ msgstr "/Edición/Selección/_Limpiar bloques marcados" +#~ msgstr "/Edición/Selección/_Limpiar bloques marcados" #~ msgid "/Edit/Selection/C_ut" -#~ msgstr "/Edición/Selección/C_ortar" +#~ msgstr "/Edición/Selección/C_ortar" #~ msgid "/Edit/Selection/_Copy" -#~ msgstr "/Edición/Selección/_Copiar" +#~ msgstr "/Edición/Selección/_Copiar" #~ msgid "/Edit/Selection/_Paste" -#~ msgstr "/Edición/Selección/_Pegar" +#~ msgstr "/Edición/Selección/_Pegar" #~ msgid "/Edit/Selection/_Interpolate effects" -#~ msgstr "/Edición/Selección/_Intercalar efectos" +#~ msgstr "/Edición/Selección/_Intercalar efectos" #~ msgid "/Edit/Track/Increment cmd value" -#~ msgstr "/Edición/Pista/Incrementar el valor de cmd" +#~ msgstr "/Edición/Pista/Incrementar el valor de cmd" #~ msgid "/Edit/Track/Decrement cmd value" -#~ msgstr "/Edición/Pista/Reducir el valor de cmd" +#~ msgstr "/Edición/Pista/Reducir el valor de cmd" #~ msgid "/_Pattern" -#~ msgstr "/_Patrón" +#~ msgstr "/_Patrón" #~ msgid "/Pattern/_Find Unused Pattern" -#~ msgstr "/Patrón/_Buscar Patrones sin Uso" +#~ msgstr "/Patrón/_Buscar Patrones sin Uso" #~ msgid "/Pattern/_Copy Current to Unused Pattern" -#~ msgstr "/Patrón/_Copiar lo Seleccionado a un Patrón sin Uso" +#~ msgstr "/Patrón/_Copiar lo Seleccionado a un Patrón sin Uso" #~ msgid "/Pattern/C_lear Unused Patterns" -#~ msgstr "/Patrón/_Borrar los patrones sin Uso" +#~ msgstr "/Patrón/_Borrar los patrones sin Uso" #~ msgid "/Pattern/_Pack Patterns" -#~ msgstr "/Patrón/Em_paquetar Patrones" +#~ msgstr "/Patrón/Em_paquetar Patrones" #~ msgid "/_Instrument" #~ msgstr "/_Instrumento" @@ -2328,43 +3928,43 @@ #~ msgstr "/Instrumento/Borrar _Instrumentos sin Uso" #~ msgid "/_Settings" -#~ msgstr "/_Configuración" +#~ msgstr "/_Configuración" #~ msgid "/Settings/Display _Oscilloscopes" -#~ msgstr "/Configuración/Mostrar _Osciloscopios" +#~ msgstr "/Configuración/Mostrar _Osciloscopios" #~ msgid "/Settings/_Tracker" -#~ msgstr "/Configuración/_Rastreo" +#~ msgstr "/Configuración/_Rastreo" #~ msgid "/Settings/Tracker/Use _Backing Store" -#~ msgstr "/Configuración/Rastreo/Usar _Espacio de Respaldo" +#~ msgstr "/Configuración/Rastreo/Usar _Espacio de Respaldo" #~ msgid "/Settings/Tracker/_Previous font" -#~ msgstr "Configuración/Rastreo/Fuente _anterior" +#~ msgstr "Configuración/Rastreo/Fuente _anterior" #~ msgid "/Settings/Tracker/_Next font" -#~ msgstr "Configuración/Rastreo/_Nueva fuente" +#~ msgstr "Configuración/Rastreo/_Nueva fuente" #~ msgid "/Settings/-" -#~ msgstr "/Configuración/-" +#~ msgstr "/Configuración/-" #~ msgid "/Settings/_Keyboard Configuration..." -#~ msgstr "/Configuración/Configuración del _Teclado..." +#~ msgstr "/Configuración/Configuración del _Teclado..." #~ msgid "/Settings/_Audio Configuration..." -#~ msgstr "/Configuración/Configuración del _Audio..." +#~ msgstr "/Configuración/Configuración del _Audio..." #~ msgid "/Settings/_GUI Configuration..." -#~ msgstr "/Configuración/Configuración del _GUI..." +#~ msgstr "/Configuración/Configuración del _GUI..." #~ msgid "/Settings/_MIDI Configuration..." -#~ msgstr "/Configuración/Configuración del _MIDI..." +#~ msgstr "/Configuración/Configuración del _MIDI..." #~ msgid "/Settings/_Save Settings now" -#~ msgstr "/Configuración/_Guardar la Configuración Ahora" +#~ msgstr "/Configuración/_Guardar la Configuración Ahora" #~ msgid "/Settings/Save Settings on _Exit" -#~ msgstr "/Configuración/Guardar la Configuración al _Salir" +#~ msgstr "/Configuración/Guardar la Configuración al _Salir" #~ msgid "/_Help" #~ msgstr "/_Ayuda" @@ -2387,20 +3987,11 @@ #~ msgid "Nothing to save." #~ msgstr "Nada para guardar." -#~ msgid "" -#~ "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n" -#~ msgstr "" -#~ "La cabecera del XM tiene una longitud != 276. Quizás sea un módulo de " -#~ "SoundTracker pre-0.0.12? :-)\n" - #~ msgid "Save Song as XM..." -#~ msgstr "Guardar Canción como XM..." +#~ msgstr "Guardar Canción como XM..." #~ msgid "Master Reverb" -#~ msgstr "Reverberación principal" - -#~ msgid "Playback Effects Configuration" -#~ msgstr "Configuración de Efectos de Reproducción" +#~ msgstr "Reverberación principal" #~ msgid "Saving Instruments not yet supported." -#~ msgstr "Guardar los Instrumentos no está soportado todavía." +#~ msgstr "Guardar los Instrumentos no está soportado todavía." Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/fr.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/fr.gmo differ diff -Nru soundtracker-0.6.8/po/fr.po soundtracker-1.0.2~pre2/po/fr.po --- soundtracker-0.6.8/po/fr.po 2006-02-25 13:25:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/fr.po 2020-05-27 18:54:27.000000000 +0000 @@ -1,2139 +1,3744 @@ -# Messages français pour GNU concernant soundtracker. -# Copyright © 2004 Free Software Foundation, Inc. +# Messages français pour GNU concernant soundtracker. +# Copyright © 2004 Free Software Foundation, Inc. # Michel Robitaille , traducteur depuis/since 1996. # msgid "" msgstr "" "Project-Id-Version: GNU soundtracker 0.6.7\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2004-05-10 08:00-0500\n" "Last-Translator: Michel Robitaille \n" "Language-Team: French \n" +"Language: fr\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "Sortie du playback" #: app/audioconfig.c:69 msgid "Editing Output" -msgstr "Édition de la sortie" +msgstr "Édition de la sortie" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" -msgstr "Échantillonnage" +msgstr "Échantillonnage" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "Module pilote" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "Module du mixeur" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Description" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "Configuration audio" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Pilotes" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Mixeurs" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Fermer" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d octets)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Délai audio estimé: %f microsecondes" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "Effet _XM..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." -msgstr "Ces changements ne prendront effet que lors de la prochaine écoute." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Fréequence du pistage" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Résolution:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Canaux:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Fréquence [Hz]:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Taille du tampon:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines" +msgstr "Permettre le surlignage par rangée" + +#: app/colors.c:44 +#, fuzzy +msgid "Major lines highlighting" +msgstr "Permettre le surlignage par rangée" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "Numéro de carte ALSA:" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines" +msgstr "Permettre le surlignage par rangée" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "Numéro de périphérique ALSA:" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines highlighting" +msgstr "Permettre le surlignage par rangée" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Sélection:" + +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Fréequence du pistage" + +#: app/colors.c:47 +msgid "Notes, waveforms" msgstr "" -"Ne peut ouvrir le périphérique ALSA pour l'entrée de son (carte:%d, " -"périphérique:%d):\n" -"%s" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Le format de sortie du son requis n'est pas supporté.\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Les paramètres requis de sortie du son ne sont pas supportés.\n" +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" +msgstr "" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Délais audio estimé: %f millisecondes" +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "Détruire" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "Détruire" + +#: app/colors.c:49 +#, fuzzy +msgid "Channel numbers, loops" +msgstr "Canaux:" + +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -"Ne peut ouvrir le périphérique ALSA pour la sortie de son (carte:%d, " -"périphérique:%d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "Les paramètres requis des canaux de sortie ne sont pas supportés.\n" +#: app/colors.c:50 +msgid "Cursor idle" +msgstr "" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "Incapable de préparer un canal ALSA.\n" +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "Erreur d'initialisation ALSA.\n" +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" msgstr "" -"Noter que la sortie ESD est inutilisable en mode\n" -"intéractif en raison des temps de latence ajoutés par\n" -"le ESD. Utiliser le module de sortie OSS ou ALSA\n" -"pour un travail sérieux." -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "Faire un zoom sur la sélection" + +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" msgstr "" -"Ne peut établir de connexion avec le ESD pour la sortie du son:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "pas de paramètrage (pas encore), désolé!" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "Position de redémarrage de la chanson" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Ne peut ouvrir le fichier en écriture." +#: app/colors.c:53 +msgid "Mixer position indicator" +msgstr "" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." +#: app/colors.c:54 +msgid "Zero line" msgstr "" -"Ces changements ne prendront effet qu'au moment du redémarrage de " -"l'échantillonnage." -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Périphérique d'entrée (i.e. '/dev/dsp'):" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:56 +msgid "White keys" msgstr "" -"Ne peut ouvrir %s pour l'échantillonnage:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d échantillons)" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "Périphérique de sortie (i.e. '/dev/dsp'):" +#: app/colors.c:57 +msgid "Black keys" +msgstr "" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" msgstr "" -"Ne peut ouvrir %s pour la sortie de son:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" -msgstr "transporteur maître" +#: app/colors.c:58 +msgid "White keys pressed" +msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" -msgstr "déclic" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" -msgstr "Éxécution à %d Hz avec %d trames" +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" -msgstr "Serveur Jack n'est pas en marche?" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "" -#: app/drivers/jack-output.c:327 -#, c-format -msgid "soundtracker" -msgstr "soundtracker " +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "out_1" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "out_2" +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" -msgstr "Périphérique de sortie (i.e. « /dev/audio »):" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: app/colors.c:395 +#, fuzzy, c-format +msgid "%s colors configuration" +msgstr "Configuration clavier" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: ne peut jouer (%s)" +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Renverser" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: ¸ne peut traiter %dHz (%s)" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s: encodage requis du son n'est pas supporté.\n" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" + +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 +#: app/drivers/alsa1x.c:261 #, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: ne peut fixer la taille des blocs (%s)" +msgid "%f milliseconds" +msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" -msgstr "Périphérique d'entrée (i.e. « /dev/audio»):" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "Numéro de périphérique ALSA:" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: ne peut enregistrer (%s)" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Longueur" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Courant" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +#, fuzzy +msgid "Unable to set channels number" +msgstr "Incapable de préparer un canal ALSA.\n" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Décalage" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Valeur" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Insérer" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Détruire" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" msgstr "" -"Éditeur de l'»\n" -"Enveloppe\n" -"Graphique\n" -"disponible seulement dans la\n" -"version GNOME" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Soutenir" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Point" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Boucle" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Début" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Fin" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Charger le module" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Sauvegarder le module" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d échantillons)" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Rendu WAV" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Sauvegarder la chanson" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Charger l'échantillon" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Sauvegarder l'échantillon" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8 bits" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Charger l'instrument" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16 bits" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Sauvegarde l'instrument" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "Mono" -#: app/file-operations.c:175 -msgid "File" -msgstr "Fichier" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "Stéréo" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Opération non supportée" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "Ces changements ne prendront effet que lors de la prochaine écoute." -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Fréquence de l'oscilloscope" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "" +"Ces changements ne prendront effet qu'au moment du redémarrage de " +"l'échantillonnage." -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Fréequence du pistage" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "Configuration du GUI (interface usagère)" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "Numérotation hexadécimale des rangées" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Résolution:" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Utiliser les lettres en majuscule pour les nombres hexadécimaux" +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Canaux:" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" -msgstr "Édition asynchrone de motif (style IT)" +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Fréquence [Hz]:" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" -msgstr "Mise à jour de commande Fxx des glissières Tempon/BPM" +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Taille du tampon:" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" -msgstr "Basculer au pisteur après le chargement/sauvegarde" +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "Nombre de canaux:" -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" -msgstr "Sauvegarder la géométrie de la fenêtre la fin de l'exécution" +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Délais audio estimé: %f millisecondes" -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" -msgstr "Utiliser le nom de note B au lieu de H" +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." +msgstr "" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" msgstr "" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Taille du tampon [Mo]" +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Format de ligne de piste:" +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." -msgstr "Prêt." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Écoute de la chanson..." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Écoute du motif..." +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Chargement de module..." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Module chargé." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Sauvegarde du module..." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Module sauvegardé." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "Chargement de l'échantillon..." +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "Erreur lors du chargement des motifs." -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Échantillon chargé." +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Sauvegarde de l'échantillon..." +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Échantillon sauvegardé." +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "Chargement de l'instrument..." +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Instrument chargé." +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Sauvegarde de l'instrument..." +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Instrument sauvegardé." +#: app/drivers/alsa1x.c:1328 +#, fuzzy +msgid "Unable to enable timestamping for playback" +msgstr "Incapable de préparer un canal ALSA.\n" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Sauvegarde de la chanson..." - -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "Chanson sauvegardée..." +#: app/drivers/alsa1x.c:1329 +#, fuzzy +msgid "Unable to enable timestamping for capture" +msgstr "Incapable de préparer un canal ALSA.\n" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Question" +#: app/drivers/alsa1x.c:1335 +#, fuzzy +msgid "Unable to set timestamp type for playback" +msgstr "Incapable de préparer un canal ALSA.\n" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "Oui" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "Non" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Annuler" +#: app/drivers/alsa1x.c:1336 +#, fuzzy +msgid "Unable to set timestamp type for capture" +msgstr "Incapable de préparer un canal ALSA.\n" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "AVERTISSEMENT" +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "Erreur!" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" +#: app/drivers/alsa1x.c:1352 +#, fuzzy +msgid "Unable to prepare playback" +msgstr "Incapable de préparer un canal ALSA.\n" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" -msgstr "Surlignage de la configuration par rangée" +#: app/drivers/alsa1x.c:1353 +#, fuzzy +msgid "Unable to prepare capture" +msgstr "Incapable de préparer un canal ALSA.\n" -#: app/gui.c:301 -msgid "Highlight rows (major / minor):" -msgstr "Surligner les rangées (majeures / mineures):" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" +msgstr "" -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" msgstr "" -"Rangée de motif bizarre contient des données qui seront perdues après " -"réduction.\n" -"Désirez-vous poursuivre malgré tout?" -#: app/gui.c:506 -#, fuzzy -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." msgstr "" -"Le motif est trop long pour l'expansion.\n" -"Certaines données à la fin seront perdues. Désirez-vous poursuivre malgré " -"tout?" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "Aucun fichier sélectionné" +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "pas de paramètrage (pas encore), désolé!" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." msgstr "" -"Êtes-vous certain de ne pas vouloir conserver le projet en cours?\n" -"Tous les changements seront perdus!" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Êtes-vous certain de vouloir écraser le fichier?" +#: app/drivers/irix-output.c:178 +#, fuzzy +msgid "16 Bit output not supported." +msgstr "Opération non supportée" -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "Erreur lors de l'ouverture du fichier des motif!" +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "Opération non supportée" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." msgstr "" -"La longeur du motif chargé ne concorde par avec le motif courant dans le " -"module.\n" -"Désirez-vous changer la longueur du motif courant?" - -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "Démarrage de SoundTracker" - -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "En chargement..." +"Ne peut ouvrir %s pour l'échantillonnage:\n" +"%s" -#: app/gui.c:1804 -msgid "Use SoundTracker!" -msgstr "Utiliser Soundtracker!" +#: app/drivers/oss.c:130 +#, fuzzy +msgid "OSS input: reading error" +msgstr "Changement d'instrument" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Chargement de XM" - -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Sauvegarde du XM..." +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Module de rendu en tant que WAV..." +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Délais audio estimé: %f millisecondes" -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "sauvegarde de la chanson en tant que XM..." +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d échantillons)" -#: app/gui.c:1872 -msgid "Load current pattern..." -msgstr "Chargement du motif courant..." +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "Périphérique d'entrée (i.e. '/dev/dsp'):" -#: app/gui.c:1874 -msgid "Save current pattern..." -msgstr "Sauvegarde du motif courant..." +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "Périphérique de sortie (i.e. '/dev/dsp'):" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Jouer la chanson" +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" +msgstr "" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Jouer le motif" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Arrêter" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"Ne peut ouvrir %s pour l'échantillonnage:\n" +"%s" -#: app/gui.c:1973 -msgid "Pat" -msgstr "Motif" +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "Le format de sortie du son requis n'est pas supporté.\n" -#: app/gui.c:1979 -msgid "Edited pattern" -msgstr "/Éditer motif" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" +msgstr "Éxécution à %d Hz avec %d trames" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." -msgstr "Lorsqu'activé, la navigation de la liste ne change pas le motif édité" +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "Serveur Jack n'est pas en marche?" -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Nombre de canaux:" +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/gui.c:2025 -msgid "Pattern Length" -msgstr "Longueur du motif" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/gui.c:2060 -msgid "Set preferred accidental type" -msgstr "Initialiser le type accidental recommandé" +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/gui.c:2066 -msgid "Measure" -msgstr "Mesure" +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -#: app/gui.c:2067 -msgid "Enable row highlighting" -msgstr "Permettre le surlignage par rangée" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "déclic" -#: app/gui.c:2093 -msgid "Other..." -msgstr "Autres..." +#: app/drivers/jack.c:610 +#, fuzzy +msgid "Jack server is not running or some error occured." +msgstr "Serveur Jack n'est pas en marche?" -#: app/gui.c:2129 -msgid "Change effect column editing direction" -msgstr "Modifier la direction de l'édition de colonne" +#: app/drivers/sdl-output.c:76 +#, fuzzy +msgid "Experimental SDL support." +msgstr "Opération non supportée" -#: app/gui.c:2160 -msgid "Global amplification" -msgstr "amplification globale" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "Périphérique de sortie (i.e. « /dev/audio »):" -#: app/gui.c:2196 -msgid "Pitchbend" -msgstr "Pitchbend" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" -msgstr "Réinitialiser le pitchbend à sa valeur normale" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/gui.c:2216 -msgid "Editing" -msgstr "Édition" +#: app/drivers/sun-output.c:402 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "%s: ¸ne peut traiter %dHz (%s)" -#: app/gui.c:2223 -msgid "Octave" -msgstr "Octave" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "%s: encodage requis du son n'est pas supporté.\n" -#: app/gui.c:2232 -msgid "Jump" -msgstr "Saut" +#: app/drivers/sun-output.c:455 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "%s: ne peut fixer la taille des blocs (%s)" -#: app/gui.c:2241 -msgid "Instr" -msgstr "Instr" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Échantillon" +#: app/drivers/sun-input.c:77 +#, fuzzy +msgid "SUN input: reading error" +msgstr "Changement d'instrument" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "Bienvenue à Soundtracker!" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "Périphérique d'entrée (i.e. « /dev/audio»):" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "Abaissement du volume" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "Vitesse de la vibration" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "Profondeur de la vibration" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" +msgstr "" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "Balayage de la vibration" +#: app/drivers/sun-input.c:273 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "%s: ¸ne peut traiter %dHz (%s)" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Ne peut ouvrir le fichier." +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "%s: encodage requis du son n'est pas supporté.\n" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sinusoïdale" +#: app/drivers/sun-input.c:332 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "%s: ne peut fixer la taille des blocs (%s)" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Carrée" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Longueur" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "En dent de scie vers le bas" +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Courant" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "En dent de scie vers le haut" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Décalage" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Éditeur d'instrument" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Valeur" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Enveloppe du volume" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Insérer" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Enveloppe du panoramique" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "Détruire" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Chargement d'instrument..." - -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Sauvegarde d'instrument..." +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"Éditeur de l'»\n" +"Enveloppe\n" +"Graphique\n" +"disponible seulement dans la\n" +"version GNOME" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "Charger XI" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Soutenir" -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "Sauvegarder XI" +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Point" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Type de vibrato:" +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "Boucle" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Note:" +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "Début" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Initialiser" +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Fin" -#: app/keys.c:57 -msgid "" -msgstr "" +#: app/file-operations.c:127 +#, c-format +msgid "" +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" +msgstr "" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." +#: app/file-operations.c:225 +msgid "All supported types" msgstr "" -"La touche qui insère la note spéciale de keyoff pour les modules FastTracker." -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." -msgstr "La clé qui a augmenté la valeur \"jump\"" +#: app/file-operations.c:245 +msgid "All files" +msgstr "" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." -msgstr "La clé qui a dimiué la valeur \"jump\"" +#: app/file-operations.c:388 +msgid "File" +msgstr "Fichier" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "Touches du haut de l'octave..." +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/keys.c:146 -msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +#: app/gui-settings.c:293 +msgid "FT2" msgstr "" -"Ce sont les touches situées sur la moitié supérieure du clavier. La touche « " -"c » est normalement située à la droite de la touche de tabulation. Le reste " -"des autres touches doivent être ordonnées un peu comme celles d'un clavier " -"de piano, incluant les touches numériques de la rangée supérieure." -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Touches du bas de l'octave..." +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "Mixeurs" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." -msgstr "" -"Ce sont les touches situées sur la moitié inférieure du clavier. La touche « " -"c » est normalement la première touche située à la droite de la touche de " -"mise en majuscule (« Shift »). Le reste des autres touches doivent être " -"ordonnées un peu comme celles d'un clavier de piano, incluant les touches de " -"la rangée supérieure." +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "Configuration du GUI (interface usagère)" -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "Autres touches..." +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Fréquence de l'oscilloscope" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Autres touches diverses..." +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Fréequence du pistage" -#: app/keys.c:513 -msgid "Function" -msgstr "Fonction" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Numérotation hexadécimale des rangées" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Affectation" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Utiliser les lettres en majuscule pour les nombres hexadécimaux" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Configuration clavier" +#: app/gui-settings.c:343 +#, fuzzy +msgid "FT2-like volume column" +msgstr "Montée fine du volume glissée" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Explication de groupe de clés" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" +msgstr "" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Explication de la clé" +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" +msgstr "" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Modificateurs:" +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Apprendre les touches sélectionnées" +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" +msgstr "Édition asynchrone de motif (style IT)" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Apprendre toutes les touches" +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "" -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -"SVP appuyer sur la combinaison désirée de touches!\n" -"Cliquer sur la liste de gauche pour annuler." -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Ok" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" +msgstr "" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Appliquer" +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" msgstr "" -"Le fichier de configuration du clavier est défectueux.\n" -"SVP utiliser le dialogue de configuration du clavier." -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" -msgstr "CH%02d" +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "Mise à jour de commande Fxx des glissières Tempon/BPM" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" -msgstr "Saut rapide au canal %d" +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "Basculer au pisteur après le chargement/sauvegarde" + +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" msgstr "" -"La configuration automatique des touches a échoué.\n" -"SVP utiliser le dialogue de configuration du clavier\n" -"à partir du menu de configurations." -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" +msgstr "Sauvegarder la géométrie de la fenêtre la fin de l'exécution" + +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "Utiliser le nom de note B au lieu de H" + +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" msgstr "" -"Êtes-vous certain de vouloir faire cela?\n" -"Tous les changements seront perdus!" -#: app/menubar.c:162 +#: app/gui-settings.c:451 msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." msgstr "" -"Êtes-vous certain de vouloir quitter?\n" -"Tous les changements seront perdus!" -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Ouverture..." +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Sélection:" -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Sauvegader _sous..." +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Taille du tampon [Mo]" -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Sauvegarder le module sous _WAV..." +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Échantillon chargé." -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Sauvegarde XM sans les échantillons..." +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "_Quitter" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Édition" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Effacer _Tout" +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Effacer _Pattrons seulement" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "" -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "Module d» _Optimisation" +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "C_ouper" +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Copier" +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Format de ligne de piste:" -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "_Coller" +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_K Effacer les notes" +#: app/gui-settings.c:573 +#, fuzzy +msgid "Tracker colors configuration" +msgstr "Configuration clavier" -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "_Insérer la piste" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "Prêt." -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "_Détruire la piste" +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Écoute de la chanson..." -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Valeur de la commande d'incrémentation" +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Écoute du motif..." -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Valeur de la commande de décrémentation" +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "Chargement de module..." -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "Mode de _Marquage" +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "Module chargé." -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "_l Effacer les marques de blocs" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Sauvegarde du module..." -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "_Interpoler les effets" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "Module sauvegardé." -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Transposer d'une demi-note vers le haut" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "Chargement de l'échantillon..." -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Transposer d'une demie-note vers le bas" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Échantillon chargé." -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Transposer d'un octave plus haut" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Sauvegarde de l'échantillon..." -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Transposer d'un octave plus bas" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Échantillon sauvegardé." -#: app/menubar.c:526 -msgid "P_aste" -msgstr "C_oller" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "Chargement de l'instrument..." -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "Passer en mode d'édition _Jazz" +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Instrument chargé." -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "" +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Sauvegarde de l'instrument..." -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "Transp_osition..." +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Instrument sauvegardé." -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "_Motif" +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Sauvegarde de la chanson..." -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "_T Pistage" +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "Chanson sauvegardée..." -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Sélection" +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "Erreur!" -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_F trouver un motif inutilisé" +#: app/gui-subs.c:414 +msgid "Question" +msgstr "Question" -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_COpier le courant vers le motif inutilisé" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "_L Effacer les motifs inutilisés" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "_Empaqueter les motifs" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "_Sauvegarde du motif courant" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "AVERTISSEMENT" -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "_Chargement du motif" +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "Configuration du GUI (interface usagère)" -#: app/menubar.c:599 -msgid "Sh_rink Current Pattern" -msgstr "_Réduire le motif courant" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "Surlignage de la configuration par rangée" -#: app/menubar.c:601 -msgid "_Expand Current Pattern" -msgstr "_Expandre le motif courant" +#: app/gui.c:260 +msgid "Highlight rows (major / minor):" +msgstr "Surligner les rangées (majeures / mineures):" -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" +#: app/gui.c:330 +msgid "" msgstr "" -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" +#: app/gui.c:451 +#, fuzzy +msgid "Saving module failed" +msgstr "Sauvegarde du module..." + +#: app/gui.c:535 +msgid "File output" msgstr "" -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Charger XI..." +#: app/gui.c:612 +#, fuzzy +msgid "Can't open file for writing" +msgstr "Ne peut ouvrir le fichier en écriture." -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_Sauvegarder XI..." +#: app/gui.c:618 +#, fuzzy +msgid "Can't change file ownership" +msgstr "Ne peut ouvrir le fichier en écriture." -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_C effacer le courant" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Détruire les instruments inutilisés" +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "Défilement sans _F vacillement" - -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "Fonte _Précédente" +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" +"Rangée de motif bizarre contient des données qui seront perdues après " +"réduction.\n" +"Désirez-vous poursuivre malgré tout?" -#: app/menubar.c:642 -msgid "_Next font" -msgstr "Fonte _N suivante" +#: app/gui.c:715 +#, fuzzy +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" +"Le motif est trop long pour l'expansion.\n" +"Certaines données à la fin seront perdues. Désirez-vous poursuivre malgré " +"tout?" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" -msgstr "Modifier le type préféré _accidental" - -#: app/menubar.c:649 -msgid "Change effect column editing _direction" -msgstr "modifier l'effet de la direction l'édition de colonne" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"Êtes-vous certain de ne pas vouloir conserver le projet en cours?\n" +"Tous les changements seront perdus!" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Afficher l'_Oscilloscope" +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "Erreur lors de l'ouverture du fichier des motif!" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Tracker" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" +msgstr "" +"La longeur du motif chargé ne concorde par avec le motif courant dans le " +"module.\n" +"Désirez-vous changer la longueur du motif courant?" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "_K configuration clavier..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "Configuration _Audio..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "Configuration _GUI..." - -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "Configuration _MIDI..." - -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "DÉsactiver l'écran splash" - -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Sauvegarder le paramètrage maintenant" +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "Début" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Sauvegarder le paramétrage à la _E fin de l'exécution" +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "En chargement..." -#: app/menubar.c:690 -msgid "_About..." -msgstr "_À propos..." +#: app/gui.c:2195 +msgid "Use SoundTracker!" +msgstr "Utiliser Soundtracker!" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Afficher les _Trucs..." +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"Êtes-vous certain de vouloir quitter?\n" +"Tous les changements seront perdus!" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "Effet _XM..." +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" -#: app/menubar.c:704 -msgid "_File" -msgstr "_Fichier" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Module" +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "En chargement..." -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Édition" +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Instrument" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_S paramétrage" +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" -#: app/menubar.c:711 -msgid "_Help" -msgstr "_H Aide" +#: app/gui.c:2400 +#, fuzzy +msgid "Extended pattern (*.xp)" +msgstr "/Éditer motif" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" msgstr "" -"Mélangeur entier, sans interpolation, sans filtre, longeur maximum de " -"l'échantillon 1M" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Nom de l'instrument" +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Charger le module" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#échantillons" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" +msgstr "" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Nom de l'échantillon" +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Sauvegarder le module" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Linéaire" +#: app/gui.c:2434 +#, fuzzy +msgid "Save the current module" +msgstr "Sauvegarde du motif courant..." -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Rendu WAV" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Info du module" +#: app/gui.c:2436 +#, fuzzy +msgid "Render the current module as WAV file" +msgstr "Module de rendu en tant que WAV..." -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Nom de la chanson:" +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Sauvegarde XM sans les échantillons..." -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Fréquences:" +#: app/gui.c:2439 +msgid "Load current pattern..." +msgstr "Chargement du motif courant..." -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "Mode protracker" +#: app/gui.c:2440 +msgid "Save current pattern..." +msgstr "Sauvegarde du motif courant..." -#: app/module-info.c:395 -#, c-format -msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" -msgstr "" -"Motifs inutilisés: %d (utilisés: %d)\n" -"Instruments inutilisés: %d (utilisés: %d)\n" -"\n" -"Enlever les inutilisés et réordonner la liste d'écoute?\n" - -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" -msgstr "Insérer un motif qui a été édité" - -#: app/playlist.c:535 -msgid "Remove current playlist entry" -msgstr "Retirer la liste courante d'écoute" +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Jouer la chanson" -#: app/playlist.c:543 -msgid "Add + Cpy" -msgstr "Ajouter + Copier" +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Jouer le motif" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +#: app/gui.c:2525 +msgid "Play From Cursor" msgstr "" -"Ajouter un motif libre derrière la position courant et y copier le motif " -"courant" - -#: app/playlist.c:548 -msgid "Add Free" -msgstr "Ajouter un motif libre" - -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" -msgstr "Ajouter un motif libre derrière la position courante" -#: app/playlist.c:560 +#: app/gui.c:2534 #, fuzzy -msgid "Len" -msgstr "Longueur" +msgid "Play Block" +msgstr "Jouer la chanson" -#: app/playlist.c:574 -msgid "Song length" -msgstr "Longueur de la chanson" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Arrêter" -#: app/playlist.c:580 -#, fuzzy -msgid "Rstrt" -msgstr "Instr" +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" -#: app/playlist.c:593 -msgid "Song restart position" -msgstr "Position de redémarrage de la chanson" +#: app/gui.c:2562 +msgid "Pat" +msgstr "Motif" -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" -msgstr "" -"Un répertoire « .soundtracker » a été créé dans votre\n" -"répertoire usager pour y stocker les fichiers de configuration.\n" +#: app/gui.c:2568 +msgid "Edited pattern" +msgstr "/Éditer motif" -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Aucune boucle" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "Lorsqu'activé, la navigation de la liste ne change pas le motif édité" -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "PingPong" +#: app/gui.c:2583 +msgid "Pattern Length" +msgstr "Longueur du motif" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8 bits" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16 bits" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Nombre de canaux:" -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Éditeur d'échantillon" +#: app/gui.c:2632 +msgid "Set preferred accidental type" +msgstr "Initialiser le type accidental recommandé" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Volume" +#: app/gui.c:2638 +msgid "Measure" +msgstr "Mesure" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Panoramique" +#: app/gui.c:2639 +msgid "Enable row highlighting" +msgstr "Permettre le surlignage par rangée" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Ajustemetn fin" +#: app/gui.c:2660 +msgid "Other..." +msgstr "Autres..." -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Sélection:" +#: app/gui.c:2687 +msgid "Change effect column editing direction" +msgstr "Modifier la direction de l'édition de colonne" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Aucun" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" +msgstr "amplification globale" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Tout" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "" -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Longueur:" +#: app/gui.c:2740 +msgid "Pitchbend" +msgstr "Pitchbend" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Définir comme boucle" +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "Réinitialiser le pitchbend à sa valeur normale" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "Note relative" +#: app/gui.c:2760 +msgid "Editing" +msgstr "Édition" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Charger l'échantillon..." +#: app/gui.c:2767 +msgid "Octave" +msgstr "Octave" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Sauvegarde WAV..." +#: app/gui.c:2776 +msgid "Jump" +msgstr "Saut" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "Sauvegarder la région en tant que WAV..." +#: app/gui.c:2785 +msgid "Instr" +msgstr "Instr" -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "Sauvegarde WAV" +#: app/gui.c:2801 +msgid "Sample" +msgstr "Échantillon" -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "Sauvegarder la région" +#: app/gui.c:2827 +msgid "dB" +msgstr "" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Moniteur" +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "Bienvenue à Soundtracker!" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Rampe du volume" +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" + +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Ne peut ouvrir le fichier." -#: app/sample-editor.c:425 +#: app/instrument-editor.c:209 #, fuzzy -msgid "Trim" -msgstr "Trémolo" +msgid "Saving instrument failed." +msgstr "Sauvegarde de l'instrument..." -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Faire un zoom sur la sélection" +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "Instrument courant" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Tout afficher" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sinusoïdale" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Faire un zoom vers l'intérieur (+50%)" +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Carrée" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Faire un zoom vers l'extérieur (+50%)" +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "En dent de scie vers le bas" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Renverser" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "En dent de scie vers le haut" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Couper" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" +msgstr "" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Enlever" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Éditeur d'instrument" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Copier" +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Enveloppe du volume" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Coller" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Enveloppe du panoramique" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "Effacer l'échantillon" +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Charger l'instrument" -#: app/sample-editor.c:500 -#, fuzzy -msgid "Crop" -msgstr "Copier" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(pas de sélection)" +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Sauvegarde l'instrument" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "Mémoire épuisée pour la copie d'un tampon.\n" +#: app/instrument-editor.c:297 +#, fuzzy +msgid "Save the current instrument" +msgstr "Instrument courant" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "Charger XI" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." -msgstr "Mémoire épuisée pour un échantillon de données" +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "Sauvegarder XI" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Erreur de lecture." +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "Montée glissée du volume" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Charger l'échantillon stéréo" +#: app/instrument-editor.c:344 +#, fuzzy +msgid "Vibrato:" +msgstr "Vibrato" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" +#: app/instrument-editor.c:354 +msgid "Type" msgstr "" -"Vous avez sélectionné un échantillon en stéréo!\n" -"(SoundTracker peut seulement traiter les échantillon en mono!)\n" -"\n" -"SVP sélectionner le canal à charger:" - -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Gauche" -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Mix" - -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Droite" +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "Vitesse de la vibration" -#: app/sample-editor.c:1575 -msgid "Signed" -msgstr "Signé" +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "Profondeur de la vibration" -#: app/sample-editor.c:1575 -msgid "Unsigned" -msgstr "Non signé" +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "Balayage de la vibration" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "Poids faible" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Note:" -#: app/sample-editor.c:1576 -msgid "Big-Endian" -msgstr "Poids fort" +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "Initialiser" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "Mono" +#: app/keys.c:58 +msgid "" +msgstr "" -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "Stéréo" +#: app/keys.c:134 +msgid "KOFF" +msgstr "" -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "Charger l'échantillon brut" +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "" +"La touche qui insère la note spéciale de keyoff pour les modules FastTracker." -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" +#: app/keys.c:136 +msgid "JMP+" msgstr "" -"Vous avez sélectionné un échantillon qui a un\n" -"format inconnu. Vous pouvez charger les données brutes maintenant.\n" -"\n" -"SVP choisir un format:" -#: app/sample-editor.c:1623 -msgid "Word format:" -msgstr "Format Word:" +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "La clé qui a augmenté la valeur \"jump\"" -#: app/sample-editor.c:1670 -msgid "Sampling Rate:" -msgstr "Taux d'échantillonnage" +#: app/keys.c:138 +msgid "JMP-" +msgstr "" -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "La clé qui a dimiué la valeur \"jump\"" -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "OK" +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Jouer la chanson" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Ne peut lire l'échantillon" +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Sauvegarde du module..." -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." +#: app/keys.c:142 +msgid "RecMod" msgstr "" -"L'échantillon est trop long pour le module de mixage courant. On le charge " -"malgré tout." -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Ne traiter que des échantillons de 8 ou 16 bits sur 2 canaux" +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Écoute du motif..." -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "SVP sélectionner d'abord une région" +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "Jouer le motif" -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Démarre l'échantillonnage" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Jouer le motif" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "Aucun pilote d'échantillonngage disponible" +#: app/keys.c:146 +msgid "RecPat" +msgstr "" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Fenêtre d'échantillonnage" +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Écoute du motif..." -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" -msgstr "Mémoire épuisée lors de l'échantillonnage!" +#: app/keys.c:148 +msgid "PlayCur" +msgstr "" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/keys.c:148 +msgid "Play module from cursor." +msgstr "" -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/keys.c:150 +msgid "RecCur" msgstr "" -"L'échantillon enregistré est trop long pour le module de mixage courant. On " -"l'utilise malgré tout." -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normaliser" +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Écoute du motif..." -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Exécuter" +#: app/keys.c:152 +#, fuzzy +msgid "PlayRow" +msgstr "Jouer la chanson" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Rampe du volume" +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Chargement du motif courant..." -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Effectuer un abaissement linéraire du volume sur la sélection" +#: app/keys.c:154 +msgid "PlayBlk" +msgstr "" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Gauche [%]:" +#: app/keys.c:154 +#, fuzzy +msgid "Play selected block." +msgstr "Apprendre les touches sélectionnées" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "H" +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Touches du haut de l'octave..." -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "D" +#: app/keys.c:167 +msgid "" +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." +msgstr "" +"Ce sont les touches situées sur la moitié supérieure du clavier. La touche « " +"c » est normalement située à la droite de la touche de tabulation. Le reste " +"des autres touches doivent être ordonnées un peu comme celles d'un clavier " +"de piano, incluant les touches numériques de la rangée supérieure." -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Droite [%]:" +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Touches du bas de l'octave..." -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/keys.c:173 +msgid "" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." msgstr "" +"Ce sont les touches situées sur la moitié inférieure du clavier. La touche « " +"c » est normalement la première touche située à la droite de la touche de " +"mise en majuscule (« Shift »). Le reste des autres touches doivent être " +"ordonnées un peu comme celles d'un clavier de piano, incluant les touches de " +"la rangée supérieure." -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "Autres touches..." + +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Autres touches diverses..." + +#: app/keys.c:578 +msgid "Function" +msgstr "Fonction" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "Affectation" + +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Configuration clavier" + +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Explication de groupe de clés" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Explication de la clé" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Modificateurs:" + +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "Apprendre les touches sélectionnées" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "Apprendre toutes les touches" + +#: app/keys.c:702 +msgid "" +"Please press the desired key combination!\n" +"Click into left list to cancel" msgstr "" +"SVP appuyer sur la combinaison désirée de touches!\n" +"Cliquer sur la liste de gauche pour annuler." -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "CH%02d" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "Saut rapide au canal %d" + +#: app/keys.c:1028 +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." msgstr "" +"La configuration automatique des touches a échoué.\n" +"SVP utiliser le dialogue de configuration du clavier\n" +"à partir du menu de configurations." -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" msgstr "" -#: app/tips-dialog.c:50 +#: app/menubar.c:126 msgid "" -"Welcome to SoundTracker!\n" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" "\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." +msgstr "" + +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"Êtes-vous certain de vouloir faire cela?\n" +"Tous les changements seront perdus!" + +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "" +"Mélangeur entier, sans interpolation, sans filtre, longeur maximum de " +"l'échantillon 1M" + +#: app/mixers/kbfloat.c:838 +#, fuzzy +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" +"Mélangeur entier, sans interpolation, sans filtre, longeur maximum de " +"l'échantillon 1M" + +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" + +#: app/module-info.c:63 app/module-info.c:64 +#, fuzzy +msgid "Cyclic" +msgstr "déclic" + +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" + +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" + +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" + +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" + +#: app/module-info.c:481 +msgid "Period" +msgstr "" + +#: app/module-info.c:484 +msgid "s" +msgstr "" + +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Note:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Nom de l'instrument" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#échantillons" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Nom de l'échantillon" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "Linéaire" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Info du module" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Nom de la chanson:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Fréquences:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "Mode protracker" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Éditeur d'instrument" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Instrument courant" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Sauvegarde l'instrument" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "Échanger 1 <-> 2" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Ajustemetn fin" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "Note relative" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" msgstr "" -"Bienvenue à SoundTracker!\n" +"Motifs inutilisés: %d (utilisés: %d)\n" +"Instruments inutilisés: %d (utilisés: %d)\n" "\n" -"Si vous utiliser pour la première fois ce type de programme, vous pouvez\n" -"utiliser quelques fichiers XM ou MOD pour vous faire la main d'abord." +"Enlever les inutilisés et réordonner la liste d'écoute?\n" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "Insérer un motif qui a été édité" + +#: app/playlist.c:511 +msgid "Remove current playlist entry" +msgstr "Retirer la liste courante d'écoute" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "Ajouter + Copier" -#: app/tips-dialog.c:55 +#: app/playlist.c:519 msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +"Add a free pattern behind current position, and copy current pattern to it" msgstr "" -"Vous pouvez rendre le mode d'édition de SoundTracker plus sensible aux " -"entrées\n" -"du clavier en diminuant la taille du tampon de mixage de l'objet « Edition » " -"dans\n" -"la Configuration Audio." +"Ajouter un motif libre derrière la position courant et y copier le motif " +"courant" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "Ajouter un motif libre" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "Ajouter un motif libre derrière la position courante" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Longueur" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "Longueur de la chanson" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Instr" + +#: app/playlist.c:567 +msgid "Song restart position" +msgstr "Position de redémarrage de la chanson" -#: app/tips-dialog.c:59 +#: app/preferences.c:60 +#, fuzzy msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"Un répertoire « .soundtracker » a été créé dans votre\n" +"répertoire usager pour y stocker les fichiers de configuration.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" msgstr "" -"Vous pouvez ajuster des points de boucles dans l'éditeur d'échantillon en " -"maintenant\n" -"la touche Majuscule enfoncée et en utilisant le bouton gauche ou droit de la " -"souris\n" -#: app/tips-dialog.c:62 +#: app/preferences.c:94 +#, c-format msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +"An error is occured during converting config:\n" +"%s" msgstr "" -"Si vous désirez en savoir plus à propos du pistage (tracking) et connaître " -"les différentes\n" -"commandes, aller voir http://www.united-trackers.org/" -#: app/tips-dialog.c:65 +#: app/preferences.c:109 +#, c-format msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +"An error is occured during reading or parsing config:\n" +"%s" msgstr "" -"Vous pouvez assigner les échantillons d'un instrument à des touches " -"individuelles\n" -"en activant son échantillonnage et en cliquant sur le clavier dans la page\n" -"d'édition d'instrument." -#: app/tips-dialog.c:69 -msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Aucune boucle" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "PingPong" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8 bits" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16 bits" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Éditeur d'échantillon" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "Volume" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Panoramique" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Sélection:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "Aucun" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Tout" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Longueur:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "Définir comme boucle" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Charger l'échantillon" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "Sauvegarde XM sans les échantillons..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Sauvegarder l'échantillon" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "Sauvegarde XM sans les échantillons..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "Sauvegarder la région en tant que WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "Sauvegarde WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "Sauvegarder la région" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Rampe du volume" + +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "Trémolo" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "Faire un zoom sur la sélection" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "Tout afficher" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "Faire un zoom vers l'intérieur (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "Faire un zoom vers l'extérieur (+50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Renverser" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Couper" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Enlever" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Copier" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Coller" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "Effacer l'échantillon" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Copier" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(pas de sélection)" + +#: app/sample-editor.c:1279 +#, fuzzy +msgid "Out of memory for copybuffer." +msgstr "Mémoire épuisée pour la copie d'un tampon.\n" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Mix" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Gauche" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Droite" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d échantillons)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "Mémoire épuisée pour un échantillon de données" + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "Erreur de lecture." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"Vous avez sélectionné un échantillon en stéréo!\n" +"(SoundTracker peut seulement traiter les échantillon en mono!)\n" +"\n" +"SVP sélectionner le canal à charger:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "Démarre l'échantillonnage" + +#: app/sample-editor.c:1756 +msgid "Signed" +msgstr "Signé" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "Non signé" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "Poids faible" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "Poids fort" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "Charger l'échantillon brut" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"Vous avez sélectionné un échantillon qui a un\n" +"format inconnu. Vous pouvez charger les données brutes maintenant.\n" +"\n" +"SVP choisir un format:" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "Format Word:" + +#: app/sample-editor.c:1829 +msgid "Sampling Rate:" +msgstr "Taux d'échantillonnage" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Ne peut lire l'échantillon" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "" +"L'échantillon est trop long pour le module de mixage courant. On le charge " +"malgré tout." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "Ne traiter que des échantillons de 8 ou 16 bits sur 2 canaux" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Ne peut ouvrir le fichier en écriture." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "SVP sélectionner d'abord une région" + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "Aucun pilote d'échantillonngage disponible" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Fenêtre d'échantillonnage" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "Effacer _Tout" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Taux d'échantillonnage" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "Mémoire épuisée lors de l'échantillonnage!" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"Vous avez sélectionné un échantillon en stéréo!\n" +"(SoundTracker peut seulement traiter les échantillon en mono!)\n" +"\n" +"SVP sélectionner le canal à charger:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Charger l'échantillon stéréo" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"L'échantillon enregistré est trop long pour le module de mixage courant. On " +"l'utilise malgré tout." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Rampe du volume" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normaliser" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "Effectuer un abaissement linéraire du volume sur la sélection" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Gauche [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "H" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "D" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Droite [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"Bienvenue à SoundTracker!\n" +"\n" +"Si vous utiliser pour la première fois ce type de programme, vous pouvez\n" +"utiliser quelques fichiers XM ou MOD pour vous faire la main d'abord." + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"Vous pouvez rendre le mode d'édition de SoundTracker plus sensible aux " +"entrées\n" +"du clavier en diminuant la taille du tampon de mixage de l'objet « Edition » " +"dans\n" +"la Configuration Audio." + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"Vous pouvez ajuster des points de boucles dans l'éditeur d'échantillon en " +"maintenant\n" +"la touche Majuscule enfoncée et en utilisant le bouton gauche ou droit de la " +"souris\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"Si vous désirez en savoir plus à propos du pistage (tracking) et connaître " +"les différentes\n" +"commandes, aller voir http://www.united-trackers.org/" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Vous pouvez assigner les échantillons d'un instrument à des touches " +"individuelles\n" +"en activant son échantillonnage et en cliquant sur le clavier dans la page\n" +"d'édition d'instrument." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" +"Est-ce que le curseur est dans un champ de saisie numérique?\n" +"Appuyer sur la touche retour de chariot ou de tabulation pour libérer le " +"processus!" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "Truc précédent" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "Prochain truc" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "Afficher un truc la prochaine fois" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "SoundTracker - Truc du jour" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "Arpège" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "Monter le portamento" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "Descendre le portamento" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "Portamento de la tonalité" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "Vibrato" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "Portamento de la tonalité + glissière du volume" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "Vibrato + glissière du volume" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "Trémolo" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "Définir le panning" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Échantillon sauvegardé." + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "Fixer le volume" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Saut de position" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "Bris de motifs" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "Fixer le tempo/bpm" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "Fixer le volume global" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "Glissière globale du volume" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "Clé de seuil" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "Définir la position de l'enveloppe" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "Glissement du panoramique" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "Résonance du filtre LP" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "Note de multi re-déclenchement" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "Trémolo" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "Seuil de fermeture du filtre LP" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "Montée fine du portamento" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "Descente fine du portamento" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "Fixer le contrôle de la glissière" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "Fixer le contrôle du vibrato" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "Fixer l'ajustement fin" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "Patron" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "Fixer le contrôle du trémolo" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "Note de re-déclenchement" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "Montée fine du volume glissée" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "Descente fine du volume glissée" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "Note de seuil" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "Délai de note" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "Délai du motif" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "Descente glissée du volume" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "Montée glissée du volume" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "Définir la vitesse du vibrato" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "Glissement du panoramique vers la gauche" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "Glissement du panoramique vers la droite" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "sinus" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "chute du son en marche d'escalier" + +#: app/track-editor.c:203 +msgid "square" +msgstr "carré" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +#, fuzzy +msgid "Extra fine porta up" +msgstr "Montée fine du portamento" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "Descente fine du portamento" + +#: app/track-editor.c:257 +msgid "None ]" +msgstr "Aucun ]" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Éditeur Jazz:" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Tracker" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "Liste des fontes" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "Ajouter la fonte" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "Enlever la fonte" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "Appliquer la fonte" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "Sélectionner la fonte..." + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "Chanson complète" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "Tous les motifs" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "Motif courant" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "Piste courante" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Instrument courant" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "Tous les instruments" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "Monter d'une demi note" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "Descendre d'une demi note" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "Monter d'un octave" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "Descendre d'un octave" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "Échanger 1 <-> 2" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "Placer 1 -> 2" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "TOutils de transposition" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "Étendue de l'opération:" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Transposition de note" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Changement d'instrument" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Instrument 1:" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Instrument courant" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Instrument 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "Longueur de motif en dehors des bornes: %d.\n" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Erreur lors du chargement des motifs." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Instrument chargé." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Changement d'instrument" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Enveloppe du panoramique" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Enveloppe du panoramique" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Enveloppe du panoramique" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "vibtype invalide %d, on utilise le type sinus.\n" + +#: app/xm.c:678 app/xm.c:1233 +#, fuzzy +msgid "Out of memory error!" +msgstr "Mémoire épuisée pour la copie d'un tampon.\n" + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "Le fichier ne contient un instrument XI." + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Instrument chargé." + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Enveloppe du panoramique" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Enveloppe du panoramique" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Instrument chargé." + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "vibtype invalide %d, on utilise le type sinus.\n" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "Erreur lors du chargement des motifs." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Ne peut ouvrir le fichier" + +#: app/xm.c:1215 +#, fuzzy +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" +"Longueur de l'en-tête XM != 276. Peut-être un module de SoundTracker d'avant " +"la version 0.0.12? :-)\n" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "Erreur lors du chargement des motifs." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"Module contient des échantillons qui sont trop longs pour le mixeur actuel.\n" +"Longeur maximum de l'échantillon est %d." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "N'est pas un FastTracker XM et format MOD non supporté!" + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "Erreur lors de la lecture ou fin inattendue du fichier" + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "Version incorrecte ou non supportée du fichier de motifs!" + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "Longueur incorrect des motifs!" + +#: app/xm.c:1761 app/xm.c:1787 +msgid "Error during saving pattern!" +msgstr "Erreur lors de la sauvegarde des motifs!" + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "Auto connexion" + +#: app/midi-settings.c:414 +msgid "Channel" +msgstr "Canal" + +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "Numérotation de client" + +#: app/midi-settings.c:434 +msgid "Port number" +msgstr "Numéro de port" + +#: app/midi-settings.c:453 +msgid "Input" +msgstr "Entrée" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "Pour développement futur" + +#: app/midi-settings.c:468 +msgid "Output" +msgstr "Sortie" + +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "Niveau de mise au point" + +#: app/midi-settings.c:492 +msgid "Misc" +msgstr "Divers" + +#: app/midi-settings.c:532 +msgid "MIDI Configuration" +msgstr "Configuration MIDI" + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Patron" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "_T Pistage" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_K Effacer les notes" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "_Insérer la piste" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "_Détruire la piste" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "Valeur de la commande d'incrémentation" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Valeur de la commande de décrémentation" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "_l Effacer les marques de blocs" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "_Interpoler les effets" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Fichier" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_Ouverture..." + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Sauvegader _sous..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Sauvegarder le module sous _WAV..." + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "Sauvegarde XM sans les échantillons..." + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Module" + +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "/Module/Effacer _A tout" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Effacer _Pattrons seulement" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "Module d» _Optimisation" + +#: soundtracker.glade:346 +#, fuzzy +msgid "_Set Optimal Amplification" +msgstr "amplification globale" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Édition" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "Passer en mode d'édition _Jazz" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "Transp_osition..." + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Motif" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "_T Pistage" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Sélection" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "Mode de _Marquage" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Transposer d'une demi-note vers le haut" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Transposer d'une demie-note vers le bas" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Transposer d'un octave plus haut" + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Transposer d'un octave plus bas" + +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "_Chargement du motif" + +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "_Sauvegarde du motif courant" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_F trouver un motif inutilisé" + +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_COpier le courant vers le motif inutilisé" + +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "_Expandre le motif courant" + +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" msgstr "" -"Est-ce que le curseur est dans un champ de saisie numérique?\n" -"Appuyer sur la touche retour de chariot ou de tabulation pour libérer le " -"processus!" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "SoundTracker - Truc du jour" +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "_L Effacer les motifs inutilisés" -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Truc précédent" +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "_Empaqueter les motifs" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Prochain truc" +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "_Réduire le motif courant" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Afficher un truc la prochaine fois" +#: soundtracker.glade:753 +msgid "_Expand Current Pattern" +msgstr "_Expandre le motif courant" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "Arpège" +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "Monter le portamento" +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "Descendre le portamento" +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "Piste courante" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" -msgstr "Portamento de la tonalité" +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "Piste courante" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "Vibrato" +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "Piste courante" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" -msgstr "Portamento de la tonalité + glissière du volume" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Instrument" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" -msgstr "Vibrato + glissière du volume" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "Charger XI" -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "Trémolo" +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "Sauvegarder XI" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "Définir le panning" +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_C effacer le courant" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Saut de position" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_Détruire les instruments inutilisés" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "Fixer le volume" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_S paramétrage" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "Bris de motifs" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Afficher l'_Oscilloscope" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "Fixer le tempo/bpm" +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Fixer le volume global" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Tracker" -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "Glissière globale du volume" +#: soundtracker.glade:913 +#, fuzzy +msgid "_Flicker-free Scrolling" +msgstr "Défilement sans _F vacillement" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "Clé de seuil" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "Fonte _Précédente" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "Définir la position de l'enveloppe" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "Fonte _N suivante" -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "Glissement du panoramique" +#: soundtracker.glade:944 +#, fuzzy +msgid "Change Preferred _Accidental Type" +msgstr "Modifier le type préféré _accidental" -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "Résonance du filtre LP" +#: soundtracker.glade:953 +#, fuzzy +msgid "Change Effect Column _Editing Direction" +msgstr "Modifier la direction de l'édition de colonne" -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "Note de multi re-déclenchement" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "Configuration clavier" -#: app/track-editor.c:142 -msgid "Tremor" -msgstr "Trémolo" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "Configuration audio" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "Seuil de fermeture du filtre LP" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "Configuration du GUI (interface usagère)" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "Montée fine du portamento" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "Configuration MIDI" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "Descente fine du portamento" +#: soundtracker.glade:1016 +#, fuzzy +msgid "_Disable Splash Screen" +msgstr "DÉsactiver l'écran splash" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "Fixer le contrôle de la glissière" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_Sauvegarder le paramètrage maintenant" -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "Fixer le contrôle du vibrato" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Sauvegarder le paramétrage à la _E fin de l'exécution" -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "Fixer l'ajustement fin" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_H Aide" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Fixer la boucle début/boucle" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "_À propos..." -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "Fixer le contrôle du trémolo" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "Afficher les _Trucs..." -#: app/track-editor.c:161 -msgid "Retrig note" -msgstr "Note de re-déclenchement" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "Effet _XM..." -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "Montée fine du volume glissée" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Jouer la chanson" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "Descente fine du volume glissée" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Jouer la chanson" -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "Note de seuil" +#~ msgid "transport master" +#~ msgstr "transporteur maître" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "Délai de note" +#~ msgid "SoundTracker Startup" +#~ msgstr "Démarrage de SoundTracker" -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "Délai du motif" +#~ msgid "Vibrato Type:" +#~ msgstr "Type de vibrato:" -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "Descente glissée du volume" +#~ msgid "VolFade" +#~ msgstr "Abaissement du volume" -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "Montée glissée du volume" +#~ msgid "Set loop begin/loop" +#~ msgstr "Fixer la boucle début/boucle" -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "Définir la vitesse du vibrato" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Note:" -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "Glissement du panoramique vers la gauche" +#~ msgid "Error while loading instruments." +#~ msgstr "Erreur lors du chargement des instruments" -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "Glissement du panoramique vers la droite" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "Noter que la sortie ESD est inutilisable en mode\n" +#~ "intéractif en raison des temps de latence ajoutés par\n" +#~ "le ESD. Utiliser le module de sortie OSS ou ALSA\n" +#~ "pour un travail sérieux." -#: app/track-editor.c:184 -msgid "sine" -msgstr "sinus" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Ne peut établir de connexion avec le ESD pour la sortie du son:\n" +#~ "%s" -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "chute du son en marche d'escalier" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "" +#~ "Ces changements ne prendront effet qu'au moment du redémarrage de " +#~ "l'échantillonnage." -#: app/track-editor.c:186 -msgid "square" -msgstr "carré" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Changement d'instrument" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, c-format -msgid "None ]" -msgstr "Aucun ]" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "%s: encodage requis du son n'est pas supporté.\n" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Éditeur Jazz:" +#~ msgid "%s: %s" +#~ msgstr "%s: %s" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Tracker" +#~ msgid "%s: Cannot play (%s)" +#~ msgstr "%s: ne peut jouer (%s)" -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "Liste des fontes" +#~ msgid "%s: Cannot record (%s)" +#~ msgstr "%s: ne peut enregistrer (%s)" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "Ajouter la fonte" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Version XI inconnue 0x%x\n" -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "Enlever la fonte" +#~ msgid "out_1" +#~ msgstr "out_1" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "Appliquer la fonte" +#~ msgid "out_2" +#~ msgstr "out_2" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Haut" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Bas" +#~ msgid "Monitor" +#~ msgstr "Moniteur" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "Sélectionner la fonte..." +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#échantillons" -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "Chanson complète" +#~ msgid "OK" +#~ msgstr "OK" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Tous les motifs" +#~ msgid "Cancel" +#~ msgstr "Annuler" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "Motif courant" +#~ msgid "(%d bytes)" +#~ msgstr "(%d octets)" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "Piste courante" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Délai audio estimé: %f microsecondes" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Instrument courant" +#~ msgid "ALSA card number:" +#~ msgstr "Numéro de carte ALSA:" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Tous les instruments" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Ne peut ouvrir le périphérique ALSA pour l'entrée de son (carte:%d, " +#~ "périphérique:%d):\n" +#~ "%s" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Monter d'une demi note" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "Les paramètres requis de sortie du son ne sont pas supportés.\n" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "Descendre d'une demi note" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Ne peut ouvrir le périphérique ALSA pour la sortie de son (carte:%d, " +#~ "périphérique:%d):\n" +#~ "%s" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "Monter d'un octave" +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "Les paramètres requis des canaux de sortie ne sont pas supportés.\n" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "Descendre d'un octave" +#~ msgid "Alsa setup error.\n" +#~ msgstr "Erreur d'initialisation ALSA.\n" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "Échanger 1 <-> 2" +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "Ne peut ouvrir %s pour la sortie de son:\n" +#~ "%s" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "Placer 1 -> 2" +#~ msgid "soundtracker" +#~ msgstr "soundtracker " -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "TOutils de transposition" +#~ msgid "Save Song" +#~ msgstr "Sauvegarder la chanson" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Étendue de l'opération:" +#~ msgid "Yes" +#~ msgstr "Oui" -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Transposition de note" +#~ msgid "No" +#~ msgstr "Non" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Changement d'instrument" +#~ msgid "Close" +#~ msgstr "Fermer" -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Instrument 1:" +#~ msgid "No file selected." +#~ msgstr "Aucun fichier sélectionné" -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Instrument courant" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Êtes-vous certain de vouloir écraser le fichier?" -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Instrument 2:" +#~ msgid "Load XM..." +#~ msgstr "Chargement de XM" -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Longueur de motif en dehors des bornes: %d.\n" +#~ msgid "Save XM..." +#~ msgstr "Sauvegarde du XM..." -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "Le fichier ne contient un instrument XI." +#~ msgid "Save song as XM..." +#~ msgstr "sauvegarde de la chanson en tant que XM..." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Version XI inconnue 0x%x\n" +#~ msgid "Load Instrument..." +#~ msgstr "Chargement d'instrument..." -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "vibtype invalide %d, on utilise le type sinus.\n" +#~ msgid "Save Instrument..." +#~ msgstr "Sauvegarde d'instrument..." -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "Erreur lors du chargement des motifs." +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "Le fichier de configuration du clavier est défectueux.\n" +#~ "SVP utiliser le dialogue de configuration du clavier." -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Ne peut ouvrir le fichier" +#~ msgid "Ok" +#~ msgstr "Ok" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Erreur lors du chargement des instruments" +#~ msgid "_Quit" +#~ msgstr "_Quitter" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"Module contient des échantillons qui sont trop longs pour le mixeur actuel.\n" -"Longeur maximum de l'échantillon est %d." +#~ msgid "C_ut" +#~ msgstr "C_ouper" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "N'est pas un FastTracker XM et format MOD non supporté!" +#~ msgid "_Copy" +#~ msgstr "_Copier" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "Erreur lors de la lecture ou fin inattendue du fichier" +#~ msgid "_Paste" +#~ msgstr "_Coller" -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "Version incorrecte ou non supportée du fichier de motifs!" +#~ msgid "P_aste" +#~ msgstr "C_oller" -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "Longueur incorrect des motifs!" +#~ msgid "_Load XI..." +#~ msgstr "_Charger XI..." -#: app/xm.c:1468 -msgid "Error during saving pattern!" -msgstr "Erreur lors de la sauvegarde des motifs!" +#~ msgid "_Save XI..." +#~ msgstr "_Sauvegarder XI..." -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "Auto connexion" +#~ msgid "Change effect column editing _direction" +#~ msgstr "modifier l'effet de la direction l'édition de colonne" -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -msgid "Channel" -msgstr "Canal" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "_K configuration clavier..." -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "Numérotation de client" +#~ msgid "_Audio Configuration..." +#~ msgstr "Configuration _Audio..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" -msgstr "Numéro de port" +#~ msgid "_GUI Configuration..." +#~ msgstr "Configuration _GUI..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -msgid "Input" -msgstr "Entrée" +#~ msgid "_MIDI Configuration..." +#~ msgstr "Configuration _MIDI..." -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "Pour développement futur" +#~ msgid "Load Sample..." +#~ msgstr "Charger l'échantillon..." -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -msgid "Output" -msgstr "Sortie" +#~ msgid "Save WAV..." +#~ msgstr "Sauvegarde WAV..." -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "Niveau de mise au point" +#~ msgid "8363" +#~ msgstr "8363" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -msgid "Misc" -msgstr "Divers" +#~ msgid "Execute" +#~ msgstr "Exécuter" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -msgid "MIDI Configuration" -msgstr "Configuration MIDI" +#~ msgid "Apply" +#~ msgstr "Appliquer" + +#~ msgid "Drivers" +#~ msgstr "Pilotes" + +#~ msgid "Up" +#~ msgstr "Haut" -#~ msgid "Pattern" -#~ msgstr "Patron" +#~ msgid "Down" +#~ msgstr "Bas" #~ msgid "_Accidentals" #~ msgstr "_Accidentels" @@ -2142,7 +3747,7 @@ #~ msgstr "# _Accidentels" #~ msgid "`Save XM' saves all non-empty patterns" -#~ msgstr "« Save XM » sauvegarde tous les patrons qui ne sont pas vides" +#~ msgstr "« Save XM » sauvegarde tous les patrons qui ne sont pas vides" #~ msgid "Current pos" #~ msgstr "Position courante" @@ -2151,25 +3756,25 @@ #~ msgstr "Avancer le curseur horizontalement " #~ msgid "Tempo and BPM update" -#~ msgstr "Mise-à-jour du tempo et du BPM" +#~ msgstr "Mise-à-jour du tempo et du BPM" #~ msgid "Auto switch" #~ msgstr "Commutation automatique" #~ msgid "Use anti-aliased envelope editor" -#~ msgstr "Utiliser l'éditeur de l'enveloppe anti-aliasé" +#~ msgstr "Utiliser l'éditeur de l'enveloppe anti-aliasé" #~ msgid "" #~ "You need to restart SoundTracker for this change to come into effect." #~ msgstr "" -#~ "Vous devez redémarrer SoundTracker pour que le changement soit pris en " -#~ "considération." +#~ "Vous devez redémarrer SoundTracker pour que le changement soit pris en " +#~ "considération." #~ msgid "Idle." #~ msgstr "Au ralenti." #~ msgid "Use _Backing Store" -#~ msgstr "Utiliser le stockage arrière _Back" +#~ msgstr "Utiliser le stockage arrière _Back" #~ msgid "/_File" #~ msgstr "/_Fichier" @@ -2187,7 +3792,7 @@ #~ msgstr "/Fichier/Sauvegarder le module sous _WAV..." #~ msgid "/File/Save XM without samples..." -#~ msgstr "/Fichier/Sauvegarder XM sans échantillons..." +#~ msgstr "/Fichier/Sauvegarder XM sans échantillons..." #~ msgid "/File/_Quit" #~ msgstr "/Fichier/_Quitter" @@ -2195,9 +3800,6 @@ #~ msgid "/_Module" #~ msgstr "/_Module" -#~ msgid "/Module/Clear _All" -#~ msgstr "/Module/Effacer _A tout" - #~ msgid "/Module/Clear _Patterns Only" #~ msgstr "/Module/Effacer _Patrons seulement" @@ -2208,82 +3810,82 @@ #~ msgstr "/_Editer" #~ msgid "/Edit/_Jazz Edit Mode" -#~ msgstr "/Éditer/Mode d'édition _Jazz" +#~ msgstr "/Éditer/Mode d'édition _Jazz" #~ msgid "/Edit/-" -#~ msgstr "/Éditer/-" +#~ msgstr "/Éditer/-" #~ msgid "/Edit/_Transposition..." -#~ msgstr "/Éditer/_Transposition..." +#~ msgstr "/Éditer/_Transposition..." #~ msgid "/Edit/Pattern/C_ut" -#~ msgstr "/Éditer/Patron/C_ouper" +#~ msgstr "/Éditer/Patron/C_ouper" #~ msgid "/Edit/Pattern/_Copy" -#~ msgstr "/Éditer/Patron/_Copier" +#~ msgstr "/Éditer/Patron/_Copier" #~ msgid "/Edit/Pattern/_Paste" -#~ msgstr "/Éditer/Pattron/_P Coller" +#~ msgstr "/Éditer/Pattron/_P Coller" #~ msgid "/Edit/_Track" -#~ msgstr "/Éditer/_T Piste" +#~ msgstr "/Éditer/_T Piste" #~ msgid "/Edit/Track/C_ut" -#~ msgstr "/Éditer/Pister/C_ouper" +#~ msgstr "/Éditer/Pister/C_ouper" #~ msgid "/Edit/Track/_Copy" -#~ msgstr "/Éditer/Piste/_Copier" +#~ msgstr "/Éditer/Piste/_Copier" #~ msgid "/Edit/Track/_Paste" -#~ msgstr "/Éditer/Piste/_P coller" +#~ msgstr "/Éditer/Piste/_P coller" #~ msgid "/Edit/Track/_Kill notes" -#~ msgstr "/Éditer/Piste/_K Effacer les notes" +#~ msgstr "/Éditer/Piste/_K Effacer les notes" #~ msgid "/Edit/Track/_Insert" -#~ msgstr "/Éditer/Piste/_Insérer" +#~ msgstr "/Éditer/Piste/_Insérer" #~ msgid "/Edit/Track/_Delete" -#~ msgstr "/Éditer/Piste/_Détruire" +#~ msgstr "/Éditer/Piste/_Détruire" #~ msgid "/Edit/_Selection" -#~ msgstr "/Éditer/_Sélection" +#~ msgstr "/Éditer/_Sélection" #~ msgid "/Edit/Selection/_Mark mode" -#~ msgstr "/Éditer/Sélection/Mode _Marquage" +#~ msgstr "/Éditer/Sélection/Mode _Marquage" #~ msgid "/Edit/Selection/C_lear block marks" -#~ msgstr "/Éditer/Sélection/_l Effacer les marques de blocs" +#~ msgstr "/Éditer/Sélection/_l Effacer les marques de blocs" #~ msgid "/Edit/Selection/C_ut" -#~ msgstr "/Éditer/Sélection/C_ouper" +#~ msgstr "/Éditer/Sélection/C_ouper" #~ msgid "/Edit/Selection/_Copy" -#~ msgstr "/Éditer/Sélection/_Copier" +#~ msgstr "/Éditer/Sélection/_Copier" #~ msgid "/Edit/Selection/_Paste" -#~ msgstr "/Éditer/Sélection/_P coller" +#~ msgstr "/Éditer/Sélection/_P coller" #~ msgid "/Edit/Selection/_Interpolate effects" -#~ msgstr "/Éditer/Sélection/_Interpoler les effets" +#~ msgstr "/Éditer/Sélection/_Interpoler les effets" #~ msgid "/Edit/Track/Increment cmd value" -#~ msgstr "/Éditer/Piste/valeur de la commande d'incrémentation" +#~ msgstr "/Éditer/Piste/valeur de la commande d'incrémentation" #~ msgid "/Edit/Track/Decrement cmd value" -#~ msgstr "/Éditer/Piste/valeur de la commande d'incrémentation" +#~ msgstr "/Éditer/Piste/valeur de la commande d'incrémentation" #~ msgid "/_Pattern" #~ msgstr "/_Patron" #~ msgid "/Pattern/_Find Unused Pattern" -#~ msgstr "/Patron/_F trouver un patron inutilisé" +#~ msgstr "/Patron/_F trouver un patron inutilisé" #~ msgid "/Pattern/_Copy Current to Unused Pattern" -#~ msgstr "/Patron/_Copier le patron courant en un patron inutilisé" +#~ msgstr "/Patron/_Copier le patron courant en un patron inutilisé" #~ msgid "/Pattern/C_lear Unused Patterns" -#~ msgstr "/Patron/_l Effacer les patrons inutilisés" +#~ msgstr "/Patron/_l Effacer les patrons inutilisés" #~ msgid "/Pattern/_Pack Patterns" #~ msgstr "/Patron/_Paqueter les patrons" @@ -2304,46 +3906,46 @@ #~ msgstr "/Instrument/_C effacer le courant" #~ msgid "/Instrument/_Delete Unused Instruments" -#~ msgstr "/Instrument/_Détruire les instruments inutilisés" +#~ msgstr "/Instrument/_Détruire les instruments inutilisés" #~ msgid "/_Settings" -#~ msgstr "/_S paramétrage" +#~ msgstr "/_S paramétrage" #~ msgid "/Settings/Display _Oscilloscopes" -#~ msgstr "/Paramétrage/Afficher les _Oscilloscopes" +#~ msgstr "/Paramétrage/Afficher les _Oscilloscopes" #~ msgid "/Settings/_Tracker" -#~ msgstr "/Paramétrage/_T des pistes" +#~ msgstr "/Paramétrage/_T des pistes" #~ msgid "/Settings/Tracker/Use _Backing Store" -#~ msgstr "/Paramétrage/Pistes/Utiliser le stockage arrière _B" +#~ msgstr "/Paramétrage/Pistes/Utiliser le stockage arrière _B" #~ msgid "/Settings/Tracker/_Previous font" -#~ msgstr "/Paramétrage/Pistes/fonte _Précédente" +#~ msgstr "/Paramétrage/Pistes/fonte _Précédente" #~ msgid "/Settings/Tracker/_Next font" -#~ msgstr "/Paramétrage/Pistes/fonte _N suivante" +#~ msgstr "/Paramétrage/Pistes/fonte _N suivante" #~ msgid "/Settings/-" -#~ msgstr "/Paramétrage/-" +#~ msgstr "/Paramétrage/-" #~ msgid "/Settings/_Keyboard Configuration..." -#~ msgstr "/Paramétrage/Configuration _K clavier..." +#~ msgstr "/Paramétrage/Configuration _K clavier..." #~ msgid "/Settings/_Audio Configuration..." -#~ msgstr "/Paramétrage/Configuration _Audio..." +#~ msgstr "/Paramétrage/Configuration _Audio..." #~ msgid "/Settings/_GUI Configuration..." -#~ msgstr "/Paramétrage/Configuration _GUI..." +#~ msgstr "/Paramétrage/Configuration _GUI..." #~ msgid "/Settings/_MIDI Configuration..." -#~ msgstr "/Paramétrage/Configuration _MIDI..." +#~ msgstr "/Paramétrage/Configuration _MIDI..." #~ msgid "/Settings/_Save Settings now" -#~ msgstr "/Paramétrage/_Sauvegarder le paramétrage maintenant" +#~ msgstr "/Paramétrage/_Sauvegarder le paramétrage maintenant" #~ msgid "/Settings/Save Settings on _Exit" -#~ msgstr "/Paramétrage/Sauvagarder le paramétrage à la fin de l'exécution _E" +#~ msgstr "/Paramétrage/Sauvagarder le paramétrage à la fin de l'exécution _E" #~ msgid "/_Help" #~ msgstr "/_H Aide" @@ -2361,10 +3963,4 @@ #~ msgstr "/Aide/Effets _XM..." #~ msgid "Nothing to save." -#~ msgstr "Rien à sauvegarder." - -#~ msgid "" -#~ "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n" -#~ msgstr "" -#~ "Longueur de l'en-tête XM != 276. Peut-être un module de SoundTracker " -#~ "d'avant la version 0.0.12? :-)\n" +#~ msgstr "Rien à sauvegarder." Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/gl.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/gl.gmo differ diff -Nru soundtracker-0.6.8/po/gl.po soundtracker-1.0.2~pre2/po/gl.po --- soundtracker-0.6.8/po/gl.po 2006-02-25 13:25:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/gl.po 2020-05-27 18:54:27.000000000 +0000 @@ -1,2212 +1,3753 @@ # Mensaxes en galego pra o SoundTracker # Copyright (C) 2000 Free Software Foundation, Inc. -# Xosé Anxo Pereira Torreiro , 2000. +# Xosé Anxo Pereira Torreiro , 2000. # msgid "" msgstr "" "Project-Id-Version: soundtracker 0.3.9\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2000-11-01 17:07+01:00\n" -"Last-Translator: Xosé Anxo Pereira Torreiro \n" +"Last-Translator: Xosé Anxo Pereira Torreiro \n" "Language-Team: Galician \n" +"Language: gl\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" -msgstr "Saída de Reproducción" +msgstr "Saída de Reproducción" #: app/audioconfig.c:69 msgid "Editing Output" -msgstr "Saída de Edición" +msgstr "Saída de Edición" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Sampleado" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" -msgstr "Módulo do Controlador" +msgstr "Módulo do Controlador" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 #, fuzzy msgid "Mixer Module" -msgstr "Módulo do Controlador" +msgstr "Módulo do Controlador" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 #, fuzzy msgid "Description" msgstr "Pregunta" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" -msgstr "Configuración do Son" - -#: app/audioconfig.c:289 -#, fuzzy -msgid "Drivers" -msgstr "Módulo do Controlador" +msgstr "Configuración do Son" -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 #, fuzzy msgid "Mixers" msgstr "Mesturado" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Pechar" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d bytes)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Retraso estimado no son: %f microsegundos" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "Efectos _XM..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." -msgstr "Estes cambios non terán efecto ata que reinicie a reproducción." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Frecuencia de Rastreo" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Resolución:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Canles:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Frecuencia [Hz]:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Tamaño de Buffer:" +#: app/colors.c:44 +msgid "Major lines" +msgstr "" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "Número de tarxeta ALSA" +#: app/colors.c:44 +msgid "Major lines highlighting" +msgstr "" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "Número de dispositivo ALSA" +#: app/colors.c:45 +msgid "Minor lines" +msgstr "" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +#: app/colors.c:45 +msgid "Minor lines highlighting" msgstr "" -"Non se puido abri-lo dispositivo ALSA para entrada de son (tarxeta:%d, " -"dispositivo:%d):\n" -"%s" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "O formato requirido para a saída de son non está soportado.\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Os parámetros requiridos para a saída de son non están soportados.\n" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "_Selección" + +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Frecuencia de Rastreo" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, fuzzy, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Retraso estimado no son: %f microsegundos" +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" msgstr "" -"Non se puido abri-lo dispositivo ALSA para a saída de son (tarxeta:%d, " -"dispositivo:%d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "Suprimir" + +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "Suprimir" + +#: app/colors.c:49 #, fuzzy -msgid "Required output-channel parameters not supported.\n" -msgstr "Os parámetros requiridos para a saída de son non están soportados.\n" +msgid "Channel numbers, loops" +msgstr "Canles:" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -#: app/drivers/esd-output.c:96 -#, fuzzy -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" msgstr "" -"Advirta que a saída ESD non se pode\n" -"usar de xeito interactivo.\n" -"Use os plug-ins de ALSA ou OSS\n" -"para traballos serios.\n" -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:51 +msgid "Cursor editing" msgstr "" -"Non se puido conectar coa saída de son ESD:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "non é configurable (ainda), síntoo" +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Non se pode abri-lo ficheiro para escritura" +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "Zoom á selección" + +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" +msgstr "" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 +#: app/colors.c:53 #, fuzzy -msgid "These changes won't take effect until you restart sampling." -msgstr "Estes cambios non terán efecto ata que reinicie a reproducción." +msgid "Mixer position" +msgstr "Transposición de Notas" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" +#: app/colors.c:53 +msgid "Mixer position indicator" msgstr "" -#: app/drivers/oss-input.c:234 -#, fuzzy, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:54 +msgid "Zero line" msgstr "" -"Non se puido abrir /dev/dsp para sampleado:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d samples)" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" +#: app/colors.c:56 +msgid "White keys" msgstr "" -#: app/drivers/oss-output.c:391 -#, fuzzy, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" msgstr "" -"Non se puido abrir /dev/dsp para a saída de son:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" +#: app/colors.c:57 +msgid "Black keys" msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" +#: app/colors.c:58 +msgid "White keys pressed" msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" + +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "" + +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "" + +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" + +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "" + +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "" + +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" msgstr "" -#: app/drivers/jack-output.c:327 +#: app/colors.c:395 #, fuzzy, c-format -msgid "soundtracker" -msgstr "Tracker" +msgid "%s colors configuration" +msgstr "Configuración de Efectos na Reproducción" + +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Inverter" -#: app/drivers/jack-output.c:347 -msgid "out_1" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" +#: app/colors.c:414 +msgid "Gtk clavier colors" msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 +#: app/drivers/alsa1x.c:261 #, c-format -msgid "%s: %s" +msgid "%f milliseconds" msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "Número de dispositivo ALSA" + +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, fuzzy, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "O formato requirido para a saída de son non está soportado.\n" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +msgid "Unable to set channels number" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 -#, c-format -msgid "%s: Cannot set block size (%s)" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" msgstr "" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" msgstr "" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Lonxitude" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Actual" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Desprazamento" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Valor" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Inserir" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Suprimir" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" msgstr "" -"Editor de\n" -"Envolvente\n" -"Gráfico\n" -"só na\n" -"Versión GNOME" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Soster" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Punto" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d samples)" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Lazo" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Comezo" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Remate" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Cargar Módulo" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8 bits" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Gardar Módulo" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16 bits" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Crear WAV" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +#, fuzzy +msgid "Mono" +msgstr "Monitor" -#: app/file-operations.c:165 +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 #, fuzzy -msgid "Save Song" -msgstr "Reproducir Peza" +msgid "Stereo" +msgstr "Deter" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Cargar Sample" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "Estes cambios non terán efecto ata que reinicie a reproducción." -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Gardar Sample" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +#, fuzzy +msgid "These changes won't take effect until you restart sampling." +msgstr "Estes cambios non terán efecto ata que reinicie a reproducción." -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Cargar Instrumento" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Gardar Instrumento" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "" -#: app/file-operations.c:175 -msgid "File" -msgstr "Ficheiro" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Resolución:" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Operación non soportada." +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Canles:" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Frecuencia de alcance" +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Frecuencia [Hz]:" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Frecuencia de Rastreo" +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Tamaño de Buffer:" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "Configuración GUI" +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "Número de Canles:" -#: app/gui-settings.c:354 +#: app/drivers/alsa1x.c:938 #, fuzzy -msgid "Hexadecimal row numbers" -msgstr "Usar Números Hexadecimais" +msgid "Estimated audio delay:" +msgstr "Retraso estimado no son: %f microsegundos" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Usar letras maiúsculas nos números hexadecimais" +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." +msgstr "" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" msgstr "" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" msgstr "" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" msgstr "" -#: app/gui-settings.c:389 -#, fuzzy -msgid "Save window geometry on exit" -msgstr "Garda-la Configuración ao _Saír" +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" msgstr "" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" msgstr "" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Tamaño do Buffer dos Osciloscopios [MB]" +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-settings.c:436 -msgid "Track line format:" +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" msgstr "" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" msgstr "" -#: app/gui-subs.c:33 -#, fuzzy -msgid "Playing song..." -msgstr "Reproducir Peza" +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:34 +#: app/drivers/alsa1x.c:1293 #, fuzzy -msgid "Playing pattern..." -msgstr "Reproducir Patrón" +msgid "Error setting hw parameters" +msgstr "Erro ao cargar os patróns." -#: app/gui-subs.c:35 -#, fuzzy -msgid "Loading module..." -msgstr "Cargar Módulo" +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:36 -#, fuzzy -msgid "Module loaded." -msgstr "Información do Módulo" +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:37 -#, fuzzy -msgid "Saving module..." -msgstr "Gardar Módulo" +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:38 -#, fuzzy -msgid "Module saved." -msgstr "_Módulo" +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui-subs.c:39 -#, fuzzy -msgid "Loading sample..." -msgstr "Cargar Sample.." +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui-subs.c:40 -#, fuzzy -msgid "Sample loaded." -msgstr "Nome do Sample" +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui-subs.c:41 -#, fuzzy -msgid "Saving sample..." -msgstr "Gardar Sample" +#: app/drivers/alsa1x.c:1328 +msgid "Unable to enable timestamping for playback" +msgstr "" -#: app/gui-subs.c:42 -#, fuzzy -msgid "Sample saved." -msgstr "Nome do Sample" +#: app/drivers/alsa1x.c:1329 +msgid "Unable to enable timestamping for capture" +msgstr "" -#: app/gui-subs.c:43 -#, fuzzy -msgid "Loading instrument..." -msgstr "Cargar Instrumento" +#: app/drivers/alsa1x.c:1335 +msgid "Unable to set timestamp type for playback" +msgstr "" -#: app/gui-subs.c:44 -#, fuzzy -msgid "Instrument loaded." -msgstr "Nome do Instrumento" +#: app/drivers/alsa1x.c:1336 +msgid "Unable to set timestamp type for capture" +msgstr "" -#: app/gui-subs.c:45 -#, fuzzy -msgid "Saving instrument..." -msgstr "Gardar Instrumento.." +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" +msgstr "" -#: app/gui-subs.c:46 -#, fuzzy -msgid "Instrument saved." -msgstr "Nome do Instrumento" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "" -#: app/gui-subs.c:47 -#, fuzzy -msgid "Saving song..." -msgstr "Gardar _coma..." +#: app/drivers/alsa1x.c:1352 +msgid "Unable to prepare playback" +msgstr "" -#: app/gui-subs.c:48 -#, fuzzy -msgid "Song saved." -msgstr "Nome da Peza:" +#: app/drivers/alsa1x.c:1353 +msgid "Unable to prepare capture" +msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Pregunta" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" msgstr "" -#: app/gui-subs.c:500 -#, fuzzy -msgid "No" -msgstr "Sel Nada" +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "" -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Cancelar" +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "non é configurable (ainda), síntoo" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Aviso" +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "¡Erro!" +#: app/drivers/irix-output.c:178 +#, fuzzy +msgid "16 Bit output not supported." +msgstr "Operación non soportada." -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "Operación non soportada." -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." msgstr "" +"Non se puido abrir /dev/dsp para sampleado:\n" +"%s" -#: app/gui.c:301 +#: app/drivers/oss.c:130 #, fuzzy -msgid "Highlight rows (major / minor):" -msgstr "Salientar filas" +msgid "OSS input: reading error" +msgstr "Cambio de Instrumento" -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" msgstr "" -#: app/gui.c:506 -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" -msgstr "" +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, fuzzy, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Retraso estimado no son: %f microsegundos" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "" +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d samples)" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" msgstr "" -"¿Esta certo de que quere deixa-lo proxecto actual?\n" -"Ha perder todolos cambios" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "¿Esta certo de que quere sobrescribi-lo ficheiro?" +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "" -#: app/gui.c:638 -#, fuzzy -msgid "Error when opening pattern file!" -msgstr "Erro ao cargar os patróns." +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" +msgstr "" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" msgstr "" -#: app/gui.c:1719 -#, fuzzy -msgid "SoundTracker Startup" -msgstr "Consello SoundTraker de hoxe" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"Non se puido abrir /dev/dsp para sampleado:\n" +"%s" -#: app/gui.c:1778 app/gui.c:1815 -#, fuzzy -msgid "Loading..." -msgstr "Cargar Sample.." +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "O formato requirido para a saída de son non está soportado.\n" -#: app/gui.c:1804 -msgid "Use SoundTracker!" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" msgstr "" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Cargar XM..." +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "" -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Gardar XM..." +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Crear un WAV do módulo..." +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/gui.c:1870 -#, fuzzy -msgid "Save song as XM..." -msgstr "Gardar XM..." +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/gui.c:1872 -#, fuzzy -msgid "Load current pattern..." -msgstr "Patrón Actual" +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -#: app/gui.c:1874 -#, fuzzy -msgid "Save current pattern..." -msgstr "Patrón Actual" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Reproducir Peza" +#: app/drivers/jack.c:610 +msgid "Jack server is not running or some error occured." +msgstr "" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Reproducir Patrón" +#: app/drivers/sdl-output.c:76 +#, fuzzy +msgid "Experimental SDL support." +msgstr "Operación non soportada." -#: app/gui.c:1968 -msgid "Stop" -msgstr "Deter" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "" -#: app/gui.c:1973 -#, fuzzy -msgid "Pat" -msgstr "Pegar" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:1979 -#, fuzzy -msgid "Edited pattern" -msgstr "/Edición/_Patrón" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/sun-output.c:402 +#, c-format +msgid "SUN output (%s): Cannot handle %d Hz" msgstr "" -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Número de Canles:" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "O formato requirido para a saída de son non está soportado.\n" -#: app/gui.c:2025 -#, fuzzy -msgid "Pattern Length" -msgstr "LonxPat" +#: app/drivers/sun-output.c:455 +#, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "" -#: app/gui.c:2060 -msgid "Set preferred accidental type" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" msgstr "" -#: app/gui.c:2066 +#: app/drivers/sun-input.c:77 #, fuzzy -msgid "Measure" -msgstr "Cadrada" +msgid "SUN input: reading error" +msgstr "Cambio de Instrumento" -#: app/gui.c:2067 -msgid "Enable row highlighting" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" msgstr "" -#: app/gui.c:2093 -#, fuzzy -msgid "Other..." -msgstr "Outras teclas.." +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "" -#: app/gui.c:2129 -msgid "Change effect column editing direction" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" msgstr "" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" +#: app/drivers/sun-input.c:273 +#, c-format +msgid "SUN input (%s): Cannot handle %d Hz" msgstr "" -#: app/gui.c:2216 -#, fuzzy -msgid "Editing" -msgstr "_Edición" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "O formato requirido para a saída de son non está soportado.\n" -#: app/gui.c:2223 -msgid "Octave" -msgstr "Oitava" +#: app/drivers/sun-input.c:332 +#, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "" -#: app/gui.c:2232 -msgid "Jump" -msgstr "Salto" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Lonxitude" -#: app/gui.c:2241 -msgid "Instr" -msgstr "Instr" +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Actual" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Sample" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Desprazamento" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Valor" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Inserir" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "DiminVol" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "Suprimir" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "VelocVib" +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"Editor de\n" +"Envolvente\n" +"Gráfico\n" +"só na\n" +"Versión GNOME" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "ProfVib" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Soster" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "ArrastVib" +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Punto" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Non se pode abri-lo ficheiro" +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "Lazo" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Seo" +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "Comezo" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Cadrada" +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Remate" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "Serra Abaixo" +#: app/file-operations.c:127 +#, c-format +msgid "" +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "Serra Arriba" +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Editor de Instrumentos" +#: app/file-operations.c:245 +msgid "All files" +msgstr "" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Envolvente de Volume" +#: app/file-operations.c:388 +msgid "File" +msgstr "Ficheiro" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Envolvente de Canle" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/instrument-editor.c:267 -#, fuzzy -msgid "Load Instrument..." -msgstr "Cargar Instrumento" +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/instrument-editor.c:269 +#: app/gui-settings.c:293 #, fuzzy -msgid "Save Instrument..." -msgstr "Gardar Instrumento.." - -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "Cargar XI" - -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "Gardar XI" +msgid "Mixed" +msgstr "Mesturado" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Tipo de Vibrato:" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "Configuración GUI" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Nota:" +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Frecuencia de alcance" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Inicializar" +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Frecuencia de Rastreo" -#: app/keys.c:57 +#: app/gui-settings.c:331 #, fuzzy -msgid "" -msgstr "Sel Nada" +msgid "Hexadecimal row numbers" +msgstr "Usar Números Hexadecimais" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Usar letras maiúsculas nos números hexadecimais" + +#: app/gui-settings.c:343 +msgid "FT2-like volume column" msgstr "" -"A tecla que inserta a nota especial 'keyoff' para os módulos de FastTracker" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" msgstr "" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" msgstr "" -#: app/keys.c:145 -#, fuzzy -msgid "Upper Octave Keys..." -msgstr "Teclas da Oitava Superior" +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "" -#: app/keys.c:146 -msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" msgstr "" -"Estas son a teclas da metade alta do teclado. A tecla Do adoita se-la tecla " -"da dereita do tabulador. O resto das teclas están ordeadas coma as dun " -"organo electrónico, incluíndo as teclas dos números." -#: app/keys.c:152 -#, fuzzy -msgid "Lower Octave Keys..." -msgstr "Teclas da Oitava Inferior.." +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -"Estas son a teclas da metade inferior do teclado. A tecla Do adoita se-la " -"primeira á dereita da tecla de maiúsculas da esquerda. O resto das teclas " -"están ordeadas coma as dun organo electrónico, incluindo a fila de enriba." -#: app/keys.c:159 -#, fuzzy -msgid "Other Keys..." -msgstr "Outras teclas.." +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" +msgstr "" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Outras teclas" +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "" -#: app/keys.c:513 -msgid "Function" -msgstr "Función" +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Asignación" +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Configuración do Teclado" +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Comentario do Grupo de Teclas" +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Comentario da tecla" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Modificadores:" +#: app/gui-settings.c:430 +#, fuzzy +msgid "Save window geometry on exit" +msgstr "Garda-la Configuración ao _Saír" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Aprende-la tecla seleccionada" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Aprender tódalas teclas" +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/keys.c:661 +#: app/gui-settings.c:451 msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." msgstr "" -"Prema a combinación de teclas correspondente\n" -"Prema na lista da esquerda para cancelar" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Aceptar" +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "_Selección" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "" +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Tamaño do Buffer dos Osciloscopios [MB]" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." -msgstr "" -"O ficheiro de configuración do teclado é defectuoso.\n" -"Por favor, use o diálogo de Configuración do Teclado." +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Nome do Sample" -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" +#: app/gui-settings.c:484 +msgid "Scopes" msgstr "" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" -msgstr "" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Edición" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:490 +msgid "Strobo" msgstr "" -"Fallou a configuración automática de teclas.\n" -"Por favor, use a opción Configuración do Teclado\n" -"do menú Configuración." -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" msgstr "" -"¿Está certo de que quere facer isto?\n" -"Ha perder tódolos cambios" -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +#: app/gui-settings.c:494 +msgid "Minmax" msgstr "" -"¿Está certo de que quere saír?\n" -"Ha perder tódolos cambios" - -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Abrir..." - -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Gardar _coma..." - -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Gardar Módulo coma _WAV..." -#: app/menubar.c:429 -msgid "Save XM without samples..." +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" msgstr "" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "_Saír" +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Limpalo _Todo" +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Limpar Só os _Patróns" +#: app/gui-settings.c:573 +#, fuzzy +msgid "Tracker colors configuration" +msgstr "Configuración de Efectos na Reproducción" -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Optimizar Módulo" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "C_ortar" +#: app/gui-subs.c:35 +#, fuzzy +msgid "Playing song..." +msgstr "Reproducir Peza" -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Copiar" +#: app/gui-subs.c:36 +#, fuzzy +msgid "Playing pattern..." +msgstr "Reproducir Patrón" -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "_Pegar" +#: app/gui-subs.c:37 +#, fuzzy +msgid "Loading module..." +msgstr "Cargar Módulo" -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "" +#: app/gui-subs.c:38 +#, fuzzy +msgid "Module loaded." +msgstr "Información do Módulo" -#: app/menubar.c:480 +#: app/gui-subs.c:39 #, fuzzy -msgid "_Insert track" -msgstr "_Inserir" +msgid "Saving module..." +msgstr "Gardar Módulo" -#: app/menubar.c:482 +#: app/gui-subs.c:40 #, fuzzy -msgid "_Delete track" -msgstr "_Borrar" +msgid "Module saved." +msgstr "_Módulo" -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "" +#: app/gui-subs.c:41 +#, fuzzy +msgid "Loading sample..." +msgstr "Cargar Sample.." -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "" +#: app/gui-subs.c:42 +#, fuzzy +msgid "Sample loaded." +msgstr "Nome do Sample" -#: app/menubar.c:496 +#: app/gui-subs.c:43 #, fuzzy -msgid "_Mark mode" -msgstr "_Marcar" +msgid "Saving sample..." +msgstr "Gardar Sample" -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "" +#: app/gui-subs.c:44 +#, fuzzy +msgid "Sample saved." +msgstr "Nome do Sample" -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "" +#: app/gui-subs.c:45 +#, fuzzy +msgid "Loading instrument..." +msgstr "Cargar Instrumento" -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "" +#: app/gui-subs.c:46 +#, fuzzy +msgid "Instrument loaded." +msgstr "Nome do Instrumento" -#: app/menubar.c:510 +#: app/gui-subs.c:47 #, fuzzy -msgid "Transpose half-note down" -msgstr "Baixar media nota" +msgid "Saving instrument..." +msgstr "Gardar Instrumento.." -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "" +#: app/gui-subs.c:48 +#, fuzzy +msgid "Instrument saved." +msgstr "Nome do Instrumento" -#: app/menubar.c:514 +#: app/gui-subs.c:49 #, fuzzy -msgid "Transpose octave down" -msgstr "Baixar unha oitava" +msgid "Saving song..." +msgstr "Gardar _coma..." -#: app/menubar.c:526 +#: app/gui-subs.c:50 #, fuzzy -msgid "P_aste" -msgstr "Pegar" +msgid "Song saved." +msgstr "Nome da Peza:" -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "Modo de Edición _Jazz" +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "¡Erro!" -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "" +#: app/gui-subs.c:414 +msgid "Question" +msgstr "Pregunta" -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "Trasp_osicións..." +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "_Patrón" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "_Pista" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Selección" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Aviso" -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_Buscar Patróns sen Usar" +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "Configuración GUI" -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Copia-lo Seleccionado a un Patrón sen Usar" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "_Limpar Patrons sen Usar" +#: app/gui.c:260 +#, fuzzy +msgid "Highlight rows (major / minor):" +msgstr "Salientar filas" -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "Em_pacar Patróns" +#: app/gui.c:330 +msgid "" +msgstr "" -#: app/menubar.c:592 +#: app/gui.c:451 #, fuzzy -msgid "_Save Current Pattern" -msgstr "Patrón Actual" +msgid "Saving module failed" +msgstr "Gardar Módulo" -#: app/menubar.c:594 -#, fuzzy -msgid "L_oad Pattern" -msgstr "_Patrón" +#: app/gui.c:535 +msgid "File output" +msgstr "" -#: app/menubar.c:599 +#: app/gui.c:612 #, fuzzy -msgid "Sh_rink Current Pattern" -msgstr "Patrón Actual" +msgid "Can't open file for writing" +msgstr "Non se pode abri-lo ficheiro para escritura" -#: app/menubar.c:601 +#: app/gui.c:618 #, fuzzy -msgid "_Expand Current Pattern" -msgstr "Patrón Actual" +msgid "Can't change file ownership" +msgstr "Non se pode abri-lo ficheiro para escritura" -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." msgstr "" -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" +#: app/gui.c:660 +msgid "An error occured while writing to file" msgstr "" -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Cargar XI..." +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_Gardar XI..." +#: app/gui.c:715 +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_Limpa-lo Seleccionado" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"¿Esta certo de que quere deixa-lo proxecto actual?\n" +"Ha perder todolos cambios" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Borra-los Instrumentos sen Usar" +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "Erro ao cargar os patróns." -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" msgstr "" -#: app/menubar.c:640 +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "Comezo" + +#: app/gui.c:2178 app/gui.c:2206 #, fuzzy -msgid "_Previous font" -msgstr "Consello anterior" +msgid "Loading..." +msgstr "Cargar Sample.." -#: app/menubar.c:642 -msgid "_Next font" +#: app/gui.c:2195 +msgid "Use SoundTracker!" msgstr "" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" msgstr "" +"¿Está certo de que quere saír?\n" +"Ha perder tódolos cambios" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" +#: app/gui.c:2279 +msgid "Amplification estimation" msgstr "" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Amosa-los _Osciloscopios" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" -#: app/menubar.c:660 +#: app/gui.c:2296 #, fuzzy -msgid "_Tracker" -msgstr "Tracker" +msgid "Estimating..." +msgstr "Cargar Sample.." -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "Configuración do _Teclado..." +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "_Configuración de Son..." +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "Configuración _GUI..." +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" -#: app/menubar.c:674 +#: app/gui.c:2400 #, fuzzy -msgid "_MIDI Configuration..." -msgstr "Configuración _GUI..." +msgid "Extended pattern (*.xp)" +msgstr "/Edición/_Patrón" -#: app/menubar.c:679 -msgid "Disable splash screen" +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" msgstr "" -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Garda-la Configuración agora" +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Cargar Módulo" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Garda-la Configuración ao _Saír" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" +msgstr "" -#: app/menubar.c:690 -msgid "_About..." -msgstr "_Acerca de..." +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Gardar Módulo" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Amosar _Consellos..." +#: app/gui.c:2434 +#, fuzzy +msgid "Save the current module" +msgstr "Patrón Actual" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "Efectos _XM..." +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Crear WAV" -#: app/menubar.c:704 -msgid "_File" -msgstr "_Ficheiro" +#: app/gui.c:2436 +#, fuzzy +msgid "Render the current module as WAV file" +msgstr "Crear un WAV do módulo..." -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Módulo" +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Edición" +#: app/gui.c:2439 +#, fuzzy +msgid "Load current pattern..." +msgstr "Patrón Actual" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Instrumento" +#: app/gui.c:2440 +#, fuzzy +msgid "Save current pattern..." +msgstr "Patrón Actual" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Configuración" +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Reproducir Peza" -#: app/menubar.c:711 -msgid "_Help" -msgstr "_Axuda" +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Reproducir Patrón" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/gui.c:2525 +msgid "Play From Cursor" msgstr "" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Nome do Instrumento" +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "Reproducir Peza" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#smpl" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Deter" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Nome do Sample" +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Lineal" +#: app/gui.c:2562 +#, fuzzy +msgid "Pat" +msgstr "Pegar" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/gui.c:2568 +#, fuzzy +msgid "Edited pattern" +msgstr "/Edición/_Patrón" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Información do Módulo" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "" -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Nome da Peza:" +#: app/gui.c:2583 +#, fuzzy +msgid "Pattern Length" +msgstr "LonxPat" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Frecuencias:" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "Modo ProTracker" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Número de Canles:" -#: app/module-info.c:395 -#, c-format -msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +#: app/gui.c:2632 +msgid "Set preferred accidental type" msgstr "" -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" +#: app/gui.c:2638 +#, fuzzy +msgid "Measure" +msgstr "Cadrada" + +#: app/gui.c:2639 +msgid "Enable row highlighting" msgstr "" -#: app/playlist.c:535 +#: app/gui.c:2660 #, fuzzy -msgid "Remove current playlist entry" -msgstr "Patrón Actual" +msgid "Other..." +msgstr "Outras teclas.." -#: app/playlist.c:543 -msgid "Add + Cpy" +#: app/gui.c:2687 +msgid "Change effect column editing direction" msgstr "" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" msgstr "" -#: app/playlist.c:548 -msgid "Add Free" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" msgstr "" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" +#: app/gui.c:2740 +msgid "Pitchbend" +msgstr "" + +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" msgstr "" -#: app/playlist.c:560 +#: app/gui.c:2760 #, fuzzy -msgid "Len" -msgstr "Lonxitude" +msgid "Editing" +msgstr "_Edición" -#: app/playlist.c:574 -msgid "Song length" +#: app/gui.c:2767 +msgid "Octave" +msgstr "Oitava" + +#: app/gui.c:2776 +msgid "Jump" +msgstr "Salto" + +#: app/gui.c:2785 +msgid "Instr" +msgstr "Instr" + +#: app/gui.c:2801 +msgid "Sample" +msgstr "Sample" + +#: app/gui.c:2827 +msgid "dB" +msgstr "" + +#: app/gui.c:2866 +#, c-format +msgid "Welcome to %s!" +msgstr "" + +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" msgstr "" -#: app/playlist.c:580 +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Non se pode abri-lo ficheiro" + +#: app/instrument-editor.c:209 #, fuzzy -msgid "Rstrt" -msgstr "Instr" +msgid "Saving instrument failed." +msgstr "Gardar Instrumento.." -#: app/playlist.c:593 +#: app/instrument-editor.c:232 #, fuzzy -msgid "Song restart position" -msgstr "Transposición de Notas" +msgid "Clear current instrument?" +msgstr "Instrumento actual" -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" -msgstr "" -"Creouse un directorio chamado '.soundtracker' no seu\n" -"directorio home para garda-los ficheiros de configuración.\n" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Seo" -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Sen lazo" +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Cadrada" -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "PingPong" +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "Serra Abaixo" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8 bits" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "Serra Arriba" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16 bits" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" +msgstr "" -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Editor de Sample" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Editor de Instrumentos" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Volume" +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Envolvente de Volume" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Panning" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Envolvente de Canle" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Axuste fino" +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Cargar Instrumento" -#: app/sample-editor.c:309 -#, fuzzy -msgid "Selection:" -msgstr "_Selección" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" + +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Gardar Instrumento" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 +#: app/instrument-editor.c:297 #, fuzzy -msgid "None" -msgstr "Sel Nada" +msgid "Save the current instrument" +msgstr "Instrumento actual" -#: app/sample-editor.c:319 +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "Cargar XI" + +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "Gardar XI" + +#: app/instrument-editor.c:320 #, fuzzy -msgid "All" -msgstr "Sel Todo" +msgid "Volume Fadeout" +msgstr "Rampla de Volume" -#: app/sample-editor.c:340 +#: app/instrument-editor.c:344 #, fuzzy -msgid "Length:" -msgstr "Lonxitude" +msgid "Vibrato:" +msgstr "Tipo de Vibrato:" -#: app/sample-editor.c:356 -msgid "Set as loop" +#: app/instrument-editor.c:354 +msgid "Type" msgstr "" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "NotaRel" - -#: app/sample-editor.c:375 +#: app/instrument-editor.c:356 #, fuzzy -msgid "Load Sample..." -msgstr "Cargar Sample.." +msgid "Speed" +msgstr "VelocVib" -#: app/sample-editor.c:377 +#: app/instrument-editor.c:359 #, fuzzy -msgid "Save WAV..." -msgstr "Gardar WAV.." +msgid "Depth" +msgstr "ProfVib" -#: app/sample-editor.c:379 +#: app/instrument-editor.c:361 #, fuzzy -msgid "Save region as WAV..." -msgstr "Gardar Módulo coma _WAV..." - -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "Gardar WAV" - -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "" +msgid "Sweep" +msgstr "ArrastVib" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Monitor" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Nota:" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Rampla de Volume" +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "Inicializar" -#: app/sample-editor.c:425 +#: app/keys.c:58 #, fuzzy -msgid "Trim" -msgstr "Tempo" +msgid "" +msgstr "Sel Nada" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Zoom á selección" +#: app/keys.c:134 +msgid "KOFF" +msgstr "" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Amosar todo" +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "" +"A tecla que inserta a nota especial 'keyoff' para os módulos de FastTracker" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Achegar zoom (+50%)" +#: app/keys.c:136 +msgid "JMP+" +msgstr "" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Alonxar zoom (-50%)" +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Inverter" +#: app/keys.c:138 +msgid "JMP-" +msgstr "" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Cortar" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Suprimir" +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Reproducir Peza" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Copiar" +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Gardar Módulo" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Pegar" +#: app/keys.c:142 +msgid "RecMod" +msgstr "" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "Limpar Sample" +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Reproducir Patrón" -#: app/sample-editor.c:500 +#: app/keys.c:144 #, fuzzy -msgid "Crop" -msgstr "Copiar" +msgid "PlayPat" +msgstr "Reproducir Patrón" -#: app/sample-editor.c:564 +#: app/keys.c:144 #, fuzzy -msgid "(no selection)" -msgstr "Zoom á selección" +msgid "Play pattern." +msgstr "Reproducir Patrón" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" +#: app/keys.c:146 +msgid "RecPat" msgstr "" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Reproducir Patrón" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." +#: app/keys.c:148 +msgid "PlayCur" msgstr "" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Erro de lectura." +#: app/keys.c:148 +msgid "Play module from cursor." +msgstr "" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Cargando o sample estéreo" +#: app/keys.c:150 +msgid "RecCur" +msgstr "" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" -msgstr "" -"¡Seleccionou un sample estéreo!\n" -"(Soundtraker so pode manexar samples mono)\n" -"\n" -"Por favor, escolla a canle para cargar:" +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Reproducir Patrón" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Esquerda" +#: app/keys.c:152 +#, fuzzy +msgid "PlayRow" +msgstr "Reproducir Peza" -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Mesturado" +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Patrón Actual" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Dereita" +#: app/keys.c:154 +msgid "PlayBlk" +msgstr "" -#: app/sample-editor.c:1575 +#: app/keys.c:154 #, fuzzy -msgid "Signed" -msgstr "Seo" +msgid "Play selected block." +msgstr "Aprende-la tecla seleccionada" -#: app/sample-editor.c:1575 +#: app/keys.c:166 #, fuzzy -msgid "Unsigned" -msgstr "Seo" +msgid "Upper Octave Keys..." +msgstr "Teclas da Oitava Superior" -#: app/sample-editor.c:1576 -msgid "Little-Endian" +#: app/keys.c:167 +msgid "" +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." msgstr "" +"Estas son a teclas da metade alta do teclado. A tecla Do adoita se-la tecla " +"da dereita do tabulador. O resto das teclas están ordeadas coma as dun " +"organo electrónico, incluíndo as teclas dos números." -#: app/sample-editor.c:1576 -msgid "Big-Endian" +#: app/keys.c:172 +#, fuzzy +msgid "Lower Octave Keys..." +msgstr "Teclas da Oitava Inferior.." + +#: app/keys.c:173 +msgid "" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." msgstr "" +"Estas son a teclas da metade inferior do teclado. A tecla Do adoita se-la " +"primeira á dereita da tecla de maiúsculas da esquerda. O resto das teclas " +"están ordeadas coma as dun organo electrónico, incluindo a fila de enriba." -#: app/sample-editor.c:1577 +#: app/keys.c:178 #, fuzzy -msgid "Mono" -msgstr "Monitor" +msgid "Other Keys..." +msgstr "Outras teclas.." -#: app/sample-editor.c:1577 -#, fuzzy -msgid "Stereo" -msgstr "Deter" +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Outras teclas" -#: app/sample-editor.c:1589 -#, fuzzy -msgid "Load raw sample" -msgstr "Cargando o sample estéreo" +#: app/keys.c:578 +msgid "Function" +msgstr "Función" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "Asignación" + +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Configuración do Teclado" + +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Comentario do Grupo de Teclas" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Comentario da tecla" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Modificadores:" + +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "Aprende-la tecla seleccionada" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "Aprender tódalas teclas" -#: app/sample-editor.c:1597 +#: app/keys.c:702 msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" +"Please press the desired key combination!\n" +"Click into left list to cancel" +msgstr "" +"Prema a combinación de teclas correspondente\n" +"Prema na lista da esquerda para cancelar" + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "" + +#: app/keys.c:1028 +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." +msgstr "" +"Fallou a configuración automática de teclas.\n" +"Por favor, use a opción Configuración do Teclado\n" +"do menú Configuración." + +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" "\n" -"Please choose a format:" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" msgstr "" -#: app/sample-editor.c:1623 -msgid "Word format:" +#: app/menubar.c:126 +msgid "" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." msgstr "" -#: app/sample-editor.c:1670 -#, fuzzy -msgid "Sampling Rate:" -msgstr "Sampleado" +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"¿Está certo de que quere facer isto?\n" +"Ha perder tódolos cambios" -#: app/sample-editor.c:1681 -msgid "8363" +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" msgstr "" -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "Aceptar" +#: app/mixers/kbfloat.c:838 +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Non se pode le-lo sample" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." +#: app/module-info.c:63 app/module-info.c:64 +msgid "Cyclic" msgstr "" -"O sample é demasiado longo pra o módulo mesturador actual. Cargando de todo-" -"los xeitos." -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "So se poden manexar samples de 8 e 16 bit con ata dúas canles" +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" -#: app/sample-editor.c:1968 -msgid "Please select region first." +#: app/module-info.c:64 +msgid "Coupled" msgstr "" -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Comezando o Sampleado" +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" msgstr "" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Xanela de Sampleado" +#: app/module-info.c:481 +msgid "Period" +msgstr "" -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" +#: app/module-info.c:484 +msgid "s" msgstr "" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/module-info.c:499 +msgid "Mode" +msgstr "" -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Nota:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." msgstr "" -"O sample gravado é demasiado longo para o módulo mesturador actual. Usándoo " -"de tódolos xeitos." -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normalizar" +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Nome do Instrumento" -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Executar" +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#smpl" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Rampleando Volume" +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Nome do Sample" -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Facer un desvaecemento lineal de son no seleccionado" +#: app/module-info.c:665 +msgid "Linear" +msgstr "Lineal" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Esquerda [%]:" +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Información do Módulo" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Nome da Peza:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Frecuencias:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "Modo ProTracker" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Editor de Instrumentos" + +#: app/module-info.c:765 +msgid "Ins. 1" msgstr "" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" +#: app/module-info.c:768 +msgid "Smp. 1" msgstr "" -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Dereita [%]:" +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/module-info.c:772 +msgid "Smp. 2" msgstr "" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/module-info.c:781 +msgid "I1 => I2" msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Instrumento Actual" + +#: app/module-info.c:786 +msgid "I1 <=> I2" msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Gardar Instrumento" + +#: app/module-info.c:791 +msgid "S1 => S2" msgstr "" -#: app/tips-dialog.c:50 -msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" msgstr "" -"Benvido a SoundTracker\n" -"\n" -"Se é novo neste tipo de programas, poida que queira obter algúns\n" -"ficheiros XM ou MOD e fuchicar con eles." -#: app/tips-dialog.c:55 +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 #, fuzzy -msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +msgid "Exchange Samples 1 and 2" +msgstr "Intercambio 1 <-> 2" + +#: app/module-info.c:808 +msgid "Mixing balance" msgstr "" -"Pode facer que o modo de edición de SoundTracker responda máis rápido\n" -"ao teclado reducindo o tamaño do buffer de mestura no obxecto \"Edición\"\n" -"na configuración de son.\n" -#: app/tips-dialog.c:59 -msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" msgstr "" -"Pode axusta-los puntos de lazo no editor de samples premendo a tecla de\n" -"maiúsculas á vez que os botóns esquerdo ou dereito do rato.\n" -#: app/tips-dialog.c:62 -msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +#: app/module-info.c:845 +msgid "Note to play preview" msgstr "" -"Se quere saber máis do tracking, e como funcionan os comandos, visite\n" -"http://www.united-trackers.org/" -#: app/tips-dialog.c:65 -msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" msgstr "" -"Pode asignar samples dun instrumento a teclas individuais activando o\n" -"sample e logo premendo no teclado na páxina de edición de instrumentos." -#: app/tips-dialog.c:69 +#: app/module-info.c:870 msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" msgstr "" -#: app/tips-dialog.c:81 -#, fuzzy -msgid "SoundTracker Tip of the day" -msgstr "Consello SoundTraker de hoxe" +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Consello anterior" +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Axuste fino" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Seguinte consello" +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "NotaRel" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Mostrar consellos a próxima vez" +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" -#: app/track-editor.c:113 -msgid "Arpeggio" +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" msgstr "" -#: app/track-editor.c:114 -msgid "Porta up" +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" msgstr "" -#: app/track-editor.c:115 +#: app/playlist.c:511 #, fuzzy -msgid "Porta down" -msgstr "Baixar unha oitava" +msgid "Remove current playlist entry" +msgstr "Patrón Actual" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" +#: app/playlist.c:517 +msgid "Add + Cpy" msgstr "" -#: app/track-editor.c:117 app/track-editor.c:176 -#, fuzzy -msgid "Vibrato" -msgstr "Tipo de Vibrato:" +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" +#: app/playlist.c:522 +msgid "Add Free" msgstr "" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" msgstr "" -#: app/track-editor.c:120 +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Lonxitude" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Instr" + +#: app/playlist.c:567 +#, fuzzy +msgid "Song restart position" +msgstr "Transposición de Notas" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"Creouse un directorio chamado '.soundtracker' no seu\n" +"directorio home para garda-los ficheiros de configuración.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Sen lazo" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "PingPong" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8 bits" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16 bits" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Editor de Sample" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "Volume" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Panning" + +#: app/sample-editor.c:475 +#, fuzzy +msgid "Selection:" +msgstr "_Selección" + +#: app/sample-editor.c:479 app/track-editor.c:215 +#, fuzzy +msgid "None" +msgstr "Sel Nada" + +#: app/sample-editor.c:485 +#, fuzzy +msgid "All" +msgstr "Sel Todo" + +#: app/sample-editor.c:506 +#, fuzzy +msgid "Length:" +msgstr "Lonxitude" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Cargar Sample" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "Patrón Actual" + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Gardar Sample" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "Patrón Actual" + +#: app/sample-editor.c:543 +#, fuzzy +msgid "Save region as WAV..." +msgstr "Gardar Módulo coma _WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "Gardar WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Rampla de Volume" + +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "Tempo" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "Zoom á selección" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "Amosar todo" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "Achegar zoom (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "Alonxar zoom (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Inverter" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Cortar" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Suprimir" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Copiar" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Pegar" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "Limpar Sample" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Copiar" + +#: app/sample-editor.c:730 +#, fuzzy +msgid "(no selection)" +msgstr "Zoom á selección" + +#: app/sample-editor.c:1279 +msgid "Out of memory for copybuffer." +msgstr "" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Mesturado" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Esquerda" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Dereita" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d samples)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "" + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "Erro de lectura." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"¡Seleccionou un sample estéreo!\n" +"(Soundtraker so pode manexar samples mono)\n" +"\n" +"Por favor, escolla a canle para cargar:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "Comezando o Sampleado" + +#: app/sample-editor.c:1756 +#, fuzzy +msgid "Signed" +msgstr "Seo" + +#: app/sample-editor.c:1756 +#, fuzzy +msgid "Unsigned" +msgstr "Seo" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "" + +#: app/sample-editor.c:1764 +#, fuzzy +msgid "Load raw sample" +msgstr "Cargando o sample estéreo" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "" + +#: app/sample-editor.c:1829 +#, fuzzy +msgid "Sampling Rate:" +msgstr "Sampleado" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Non se pode le-lo sample" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "" +"O sample é demasiado longo pra o módulo mesturador actual. Cargando de todo-" +"los xeitos." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "So se poden manexar samples de 8 e 16 bit con ata dúas canles" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Non se pode abri-lo ficheiro para escritura" + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "" + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Xanela de Sampleado" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "Limpalo _Todo" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Sampleado" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"¡Seleccionou un sample estéreo!\n" +"(Soundtraker so pode manexar samples mono)\n" +"\n" +"Por favor, escolla a canle para cargar:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Cargando o sample estéreo" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"O sample gravado é demasiado longo para o módulo mesturador actual. Usándoo " +"de tódolos xeitos." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Rampleando Volume" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normalizar" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "Facer un desvaecemento lineal de son no seleccionado" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Esquerda [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Dereita [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"Benvido a SoundTracker\n" +"\n" +"Se é novo neste tipo de programas, poida que queira obter algúns\n" +"ficheiros XM ou MOD e fuchicar con eles." + +#: app/tips-dialog.c:50 +#, fuzzy +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"Pode facer que o modo de edición de SoundTracker responda máis rápido\n" +"ao teclado reducindo o tamaño do buffer de mestura no obxecto \"Edición\"\n" +"na configuración de son.\n" + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"Pode axusta-los puntos de lazo no editor de samples premendo a tecla de\n" +"maiúsculas á vez que os botóns esquerdo ou dereito do rato.\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"Se quere saber máis do tracking, e como funcionan os comandos, visite\n" +"http://www.united-trackers.org/" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Pode asignar samples dun instrumento a teclas individuais activando o\n" +"sample e logo premendo no teclado na páxina de edición de instrumentos." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "Consello anterior" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "Seguinte consello" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "Mostrar consellos a próxima vez" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "Consello SoundTraker de hoxe" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "" + +#: app/track-editor.c:132 +#, fuzzy +msgid "Porta down" +msgstr "Baixar unha oitava" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "" + +#: app/track-editor.c:134 app/track-editor.c:193 +#, fuzzy +msgid "Vibrato" +msgstr "Tipo de Vibrato:" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "" + +#: app/track-editor.c:137 +#, fuzzy +msgid "Tremolo" +msgstr "Tempo" + +#: app/track-editor.c:138 app/track-editor.c:194 +#, fuzzy +msgid "Set panning" +msgstr "Panning" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Nome do Sample" + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +#, fuzzy +msgid "Set volume" +msgstr "Volume" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "" + +#: app/track-editor.c:143 +#, fuzzy +msgid "Pattern break" +msgstr "Patrón" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "" + +#: app/track-editor.c:155 +#, fuzzy +msgid "Panning slide" +msgstr "Panning" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "" + +#: app/track-editor.c:159 +#, fuzzy +msgid "Tremor" +msgstr "Tempo" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "" + +#: app/track-editor.c:174 +#, fuzzy +msgid "Set finetune" +msgstr "Axuste fino" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "Patrón" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "" + +#: app/track-editor.c:181 +#, fuzzy +msgid "Note cut" +msgstr "Nota:" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "" + +#: app/track-editor.c:183 +#, fuzzy +msgid "Pattern delay" +msgstr "Patrón" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "" + +#: app/track-editor.c:189 +#, fuzzy +msgid "Volume slide up" +msgstr "Rampla de Volume" + +#: app/track-editor.c:192 +#, fuzzy +msgid "Set vibrato speed" +msgstr "Tipo de Vibrato:" + +#: app/track-editor.c:195 +#, fuzzy +msgid "Panning slide left" +msgstr "Envolvente de Canle" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "" + +#: app/track-editor.c:201 +#, fuzzy +msgid "sine" +msgstr "Seo" + +#: app/track-editor.c:202 +#, fuzzy +msgid "ramp down" +msgstr "Baixar unha oitava" + +#: app/track-editor.c:203 +#, fuzzy +msgid "square" +msgstr "Cadrada" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +msgid "Extra fine porta up" +msgstr "" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "Baixar unha oitava" + +#: app/track-editor.c:257 +#, fuzzy +msgid "None ]" +msgstr "Sel Nada" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Edición Jazz:" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Tracker" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "" + +#: app/tracker-settings.c:290 +#, fuzzy +msgid "Delete font" +msgstr "Suprimir" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "" + +#: app/tracker-settings.c:312 +#, fuzzy +msgid "Select font..." +msgstr "_Selección" + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "Peza" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "Tódolos Patróns" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "Patrón Actual" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "Pista Actual" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Instrumento Actual" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "Tódolos Instrumentos" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "Subir media nota" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "Baixar media nota" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "Subir unha oitava" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "Baixar unha oitava" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "Intercambio 1 <-> 2" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "Cambiar 1 -> 2" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "Ferramentas de Transposición" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "Alcance da operación:" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Transposición de Notas" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Cambio de Instrumento" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Instrumento 1:" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Instrumento actual" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Instrumento 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "Lonxitude de patrón fóra de rango: %d.\n" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Erro ao cargar os patróns." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Nome do Instrumento" + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Cambio de Instrumento" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Envolvente de Canle" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Envolvente de Canle" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Envolvente de Canle" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "vibtype non válido %d, usando Seo.\n" + +#: app/xm.c:678 app/xm.c:1233 +msgid "Out of memory error!" +msgstr "" + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "O ficheiro non é un instrumento XI." + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Nome do Instrumento" + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Envolvente de Canle" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Envolvente de Canle" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Nome do Instrumento" + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "vibtype non válido %d, usando Seo.\n" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "Erro ao cargar os patróns." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Non se pode abrir o ficheiro" + +#: app/xm.c:1215 +#, fuzzy +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" +"A cabeceira do XM ten unha lonxitude != 276. Poida que sexa un módulo de " +"SoundTracker pre-0.0.12 \n" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "Erro ao cargar os patróns." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"O módulo contén sample(s) que son longos de máis para o mesturador actual.\n" +"A lonxitude máxima de sample é %d." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +#, fuzzy +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "¡Non é un XM de FastTracker nin un formato MOD soportado!" + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "" + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "" + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "" + +#: app/xm.c:1761 app/xm.c:1787 +#, fuzzy +msgid "Error during saving pattern!" +msgstr "Erro ao cargar os patróns." + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "" + +#: app/midi-settings.c:414 +#, fuzzy +msgid "Channel" +msgstr "Canles:" + +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "" + +#: app/midi-settings.c:434 +msgid "Port number" +msgstr "" + +#: app/midi-settings.c:453 +#, fuzzy +msgid "Input" +msgstr "Instr" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "" + +#: app/midi-settings.c:468 +#, fuzzy +msgid "Output" +msgstr "Saída de Edición" + +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "" + +#: app/midi-settings.c:492 +#, fuzzy +msgid "Misc" +msgstr "Mesturado" + +#: app/midi-settings.c:532 +#, fuzzy +msgid "MIDI Configuration" +msgstr "Configuración _GUI..." + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Patrón" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "_Pista" + +#: soundtracker.glade:88 soundtracker.glade:510 +#, fuzzy +msgid "_Kill notes" +msgstr "/Edición/Pista/_Suprimir" + +#: soundtracker.glade:104 soundtracker.glade:527 +#, fuzzy +msgid "_Insert track" +msgstr "_Inserir" + +#: soundtracker.glade:112 soundtracker.glade:536 +#, fuzzy +msgid "_Delete track" +msgstr "_Borrar" + +#: soundtracker.glade:125 soundtracker.glade:550 +#, fuzzy +msgid "Increment cmd value" +msgstr "/Edición/Pista/_Inserir" + +#: soundtracker.glade:131 soundtracker.glade:557 +#, fuzzy +msgid "Decrement cmd value" +msgstr "/Edición/Pista/_Suprimir" + +#: soundtracker.glade:150 soundtracker.glade:586 +#, fuzzy +msgid "C_lear block marks" +msgstr "/Edición/Selección/_Marcar" + +#: soundtracker.glade:185 soundtracker.glade:600 +#, fuzzy +msgid "_Interpolate effects" +msgstr "/Edición/Selección/_Pegar" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Ficheiro" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_Abrir..." + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Gardar _coma..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Gardar Módulo coma _WAV..." + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "/Ficheiro/Gardar Módulo coma _WAV..." + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Módulo" + +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "/Módulo/Limpalo _Todo" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Limpar Só os _Patróns" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Optimizar Módulo" + +#: soundtracker.glade:346 +msgid "_Set Optimal Amplification" +msgstr "" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Edición" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "Modo de Edición _Jazz" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "Trasp_osicións..." + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Patrón" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "_Pista" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Selección" + +#: soundtracker.glade:577 +#, fuzzy +msgid "_Mark mode" +msgstr "_Marcar" + +#: soundtracker.glade:614 +#, fuzzy +msgid "Transpose half-note up" +msgstr "Baixar media nota" + +#: soundtracker.glade:622 +#, fuzzy +msgid "Transpose half-note down" +msgstr "Baixar media nota" + +#: soundtracker.glade:630 +#, fuzzy +msgid "Transpose octave up" +msgstr "Baixar unha oitava" + +#: soundtracker.glade:638 +#, fuzzy +msgid "Transpose octave down" +msgstr "Baixar unha oitava" + +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "_Patrón" + +#: soundtracker.glade:670 #, fuzzy -msgid "Tremolo" -msgstr "Tempo" +msgid "_Save Current Pattern…" +msgstr "Patrón Actual" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_Buscar Patróns sen Usar" -#: app/track-editor.c:121 app/track-editor.c:177 +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Copia-lo Seleccionado a un Patrón sen Usar" + +#: soundtracker.glade:703 #, fuzzy -msgid "Set panning" -msgstr "Panning" +msgid "_Add Free Pattern" +msgstr "Patrón Actual" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" msgstr "" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -#, fuzzy -msgid "Set volume" -msgstr "Volume" +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "_Limpar Patrons sen Usar" + +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "Em_pacar Patróns" -#: app/track-editor.c:126 +#: soundtracker.glade:745 #, fuzzy -msgid "Pattern break" -msgstr "Patrón" +msgid "S_hrink Current Pattern" +msgstr "Patrón Actual" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "" +#: soundtracker.glade:753 +#, fuzzy +msgid "_Expand Current Pattern" +msgstr "Patrón Actual" -#: app/track-editor.c:129 -msgid "Set global volume" +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" msgstr "" -#: app/track-editor.c:130 -msgid "Global volume slide" +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" msgstr "" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "" +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "Pista Actual" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "" +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "Pista Actual" -#: app/track-editor.c:138 +#: soundtracker.glade:807 #, fuzzy -msgid "Panning slide" -msgstr "Panning" +msgid "Current Track _Solo" +msgstr "Pista Actual" -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Instrumento" -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "Cargar XI" -#: app/track-editor.c:142 +#: soundtracker.glade:836 #, fuzzy -msgid "Tremor" -msgstr "Tempo" +msgid "_Save XI…" +msgstr "Gardar XI" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "" +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_Limpa-lo Seleccionado" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_Borra-los Instrumentos sen Usar" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Configuración" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Amosa-los _Osciloscopios" -#: app/track-editor.c:156 -msgid "Set vibrato control" +#: soundtracker.glade:896 +msgid "_Loop playback" msgstr "" -#: app/track-editor.c:157 +#: soundtracker.glade:905 #, fuzzy -msgid "Set finetune" -msgstr "Axuste fino" +msgid "_Tracker" +msgstr "Tracker" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" +#: soundtracker.glade:913 +msgid "_Flicker-free Scrolling" msgstr "" -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "Consello anterior" -#: app/track-editor.c:161 -msgid "Retrig note" +#: soundtracker.glade:930 +msgid "_Next Font" msgstr "" -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" +#: soundtracker.glade:944 +msgid "Change Preferred _Accidental Type" msgstr "" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" +#: soundtracker.glade:953 +msgid "Change Effect Column _Editing Direction" msgstr "" -#: app/track-editor.c:164 +#: soundtracker.glade:970 #, fuzzy -msgid "Note cut" -msgstr "Nota:" +msgid "_Keyboard Configuration…" +msgstr "Configuración do Teclado" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "" - -#: app/track-editor.c:166 +#: soundtracker.glade:980 #, fuzzy -msgid "Pattern delay" -msgstr "Patrón" - -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "" +msgid "_Audio Configuration…" +msgstr "Configuración do Son" -#: app/track-editor.c:172 +#: soundtracker.glade:990 #, fuzzy -msgid "Volume slide up" -msgstr "Rampla de Volume" +msgid "_GUI Configuration…" +msgstr "Configuración GUI" -#: app/track-editor.c:175 +#: soundtracker.glade:1000 #, fuzzy -msgid "Set vibrato speed" -msgstr "Tipo de Vibrato:" +msgid "_MIDI Configuration…" +msgstr "Configuración _GUI..." -#: app/track-editor.c:178 +#: soundtracker.glade:1016 +msgid "_Disable Splash Screen" +msgstr "" + +#: soundtracker.glade:1023 #, fuzzy -msgid "Panning slide left" -msgstr "Envolvente de Canle" +msgid "_Save Settings Now" +msgstr "_Garda-la Configuración agora" -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Garda-la Configuración ao _Saír" + +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_Axuda" -#: app/track-editor.c:184 +#: soundtracker.glade:1053 #, fuzzy -msgid "sine" -msgstr "Seo" +msgid "_About…" +msgstr "_Acerca de..." -#: app/track-editor.c:185 +#: soundtracker.glade:1068 #, fuzzy -msgid "ramp down" -msgstr "Baixar unha oitava" +msgid "Show _Tips…" +msgstr "Amosar _Consellos..." -#: app/track-editor.c:186 +#: soundtracker.glade:1078 #, fuzzy -msgid "square" -msgstr "Cadrada" +msgid "_XM Effects" +msgstr "Efectos _XM..." -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, fuzzy, c-format -msgid "None ]" -msgstr "Sel Nada" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Reproducir Peza" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Edición Jazz:" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Reproducir Peza" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Tracker" +#, fuzzy +#~ msgid "SoundTracker Startup" +#~ msgstr "Consello SoundTraker de hoxe" -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "" +#~ msgid "Vibrato Type:" +#~ msgstr "Tipo de Vibrato:" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "" +#~ msgid "VolFade" +#~ msgstr "DiminVol" -#: app/tracker-settings.c:261 #, fuzzy -msgid "Delete font" -msgstr "Suprimir" +#~ msgid "Notes" +#~ msgstr "Nota:" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "" +#~ msgid "Error while loading instruments." +#~ msgstr "Produciuse un erro ao carga-los instrumentos." -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "" +#, fuzzy +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "Advirta que a saída ESD non se pode\n" +#~ "usar de xeito interactivo.\n" +#~ "Use os plug-ins de ALSA ou OSS\n" +#~ "para traballos serios.\n" -#: app/tracker-settings.c:285 #, fuzzy -msgid "Down" -msgstr "Serra Abaixo" +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Non se puido conectar coa saída de son ESD:\n" +#~ "%s" -#: app/tracker-settings.c:288 #, fuzzy -msgid "Select font..." -msgstr "_Selección" +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "Estes cambios non terán efecto ata que reinicie a reproducción." -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "Peza" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Cambio de Instrumento" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Tódolos Patróns" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "O formato requirido para a saída de son non está soportado.\n" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "Patrón Actual" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Versión descoñecida de XI 0x%x\n" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "Pista Actual" +#~ msgid "Monitor" +#~ msgstr "Monitor" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Instrumento Actual" +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#smpl" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Tódolos Instrumentos" +#~ msgid "OK" +#~ msgstr "Aceptar" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Subir media nota" +#~ msgid "Cancel" +#~ msgstr "Cancelar" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "Baixar media nota" +#~ msgid "(%d bytes)" +#~ msgstr "(%d bytes)" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "Subir unha oitava" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Retraso estimado no son: %f microsegundos" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "Baixar unha oitava" +#~ msgid "ALSA card number:" +#~ msgstr "Número de tarxeta ALSA" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "Intercambio 1 <-> 2" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Non se puido abri-lo dispositivo ALSA para entrada de son (tarxeta:%d, " +#~ "dispositivo:%d):\n" +#~ "%s" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "Cambiar 1 -> 2" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "" +#~ "Os parámetros requiridos para a saída de son non están soportados.\n" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "Ferramentas de Transposición" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Non se puido abri-lo dispositivo ALSA para a saída de son (tarxeta:%d, " +#~ "dispositivo:%d):\n" +#~ "%s" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Alcance da operación:" +#, fuzzy +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "" +#~ "Os parámetros requiridos para a saída de son non están soportados.\n" -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Transposición de Notas" +#, fuzzy +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "Non se puido abrir /dev/dsp para a saída de son:\n" +#~ "%s" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Cambio de Instrumento" +#, fuzzy +#~ msgid "soundtracker" +#~ msgstr "Tracker" -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Instrumento 1:" +#, fuzzy +#~ msgid "Save Song" +#~ msgstr "Reproducir Peza" -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Instrumento actual" +#, fuzzy +#~ msgid "No" +#~ msgstr "Sel Nada" -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Instrumento 2:" +#~ msgid "Close" +#~ msgstr "Pechar" -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Lonxitude de patrón fóra de rango: %d.\n" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "¿Esta certo de que quere sobrescribi-lo ficheiro?" -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "O ficheiro non é un instrumento XI." +#~ msgid "Load XM..." +#~ msgstr "Cargar XM..." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Versión descoñecida de XI 0x%x\n" +#~ msgid "Save XM..." +#~ msgstr "Gardar XM..." -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "vibtype non válido %d, usando Seo.\n" +#, fuzzy +#~ msgid "Save song as XM..." +#~ msgstr "Gardar XM..." -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "Erro ao cargar os patróns." +#, fuzzy +#~ msgid "Load Instrument..." +#~ msgstr "Cargar Instrumento" -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Non se pode abrir o ficheiro" +#, fuzzy +#~ msgid "Save Instrument..." +#~ msgstr "Gardar Instrumento.." -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Produciuse un erro ao carga-los instrumentos." +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "O ficheiro de configuración do teclado é defectuoso.\n" +#~ "Por favor, use o diálogo de Configuración do Teclado." -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"O módulo contén sample(s) que son longos de máis para o mesturador actual.\n" -"A lonxitude máxima de sample é %d." +#~ msgid "Ok" +#~ msgstr "Aceptar" -#: app/xm.c:1399 -#, fuzzy -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "¡Non é un XM de FastTracker nin un formato MOD soportado!" +#~ msgid "_Quit" +#~ msgstr "_Saír" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "" +#~ msgid "C_ut" +#~ msgstr "C_ortar" -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "" +#~ msgid "_Copy" +#~ msgstr "_Copiar" -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "" +#~ msgid "_Paste" +#~ msgstr "_Pegar" -#: app/xm.c:1468 #, fuzzy -msgid "Error during saving pattern!" -msgstr "Erro ao cargar os patróns." +#~ msgid "P_aste" +#~ msgstr "Pegar" -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "" +#~ msgid "_Load XI..." +#~ msgstr "_Cargar XI..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -#, fuzzy -msgid "Channel" -msgstr "Canles:" +#~ msgid "_Save XI..." +#~ msgstr "_Gardar XI..." -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "Configuración do _Teclado..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" -msgstr "" +#~ msgid "_Audio Configuration..." +#~ msgstr "_Configuración de Son..." + +#~ msgid "_GUI Configuration..." +#~ msgstr "Configuración _GUI..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 #, fuzzy -msgid "Input" -msgstr "Instr" +#~ msgid "_MIDI Configuration..." +#~ msgstr "Configuración _GUI..." -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "" +#, fuzzy +#~ msgid "Load Sample..." +#~ msgstr "Cargar Sample.." -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 #, fuzzy -msgid "Output" -msgstr "Saída de Edición" +#~ msgid "Save WAV..." +#~ msgstr "Gardar WAV.." -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "" +#~ msgid "Execute" +#~ msgstr "Executar" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 #, fuzzy -msgid "Misc" -msgstr "Mesturado" +#~ msgid "Drivers" +#~ msgstr "Módulo do Controlador" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 #, fuzzy -msgid "MIDI Configuration" -msgstr "Configuración _GUI..." - -#~ msgid "Pattern" -#~ msgstr "Patrón" +#~ msgid "Down" +#~ msgstr "Serra Abaixo" #, fuzzy #~ msgid "Current pos" #~ msgstr "Actual" #~ msgid "`Save XM' saves all non-empty patterns" -#~ msgstr "'Gardar XM' garda todolos patróns que non estean baleiros" +#~ msgstr "'Gardar XM' garda todolos patróns que non estean baleiros" #, fuzzy #~ msgid "Advance cursor horizontally in effect columns" @@ -2217,7 +3758,7 @@ #~ msgid "" #~ "You need to restart SoundTracker for this change to come into effect." -#~ msgstr "Precisa reiniciar SoundTraker para que os cambios teñan efecto" +#~ msgstr "Precisa reiniciar SoundTraker para que os cambios teñan efecto" #~ msgid "Use _Backing Store" #~ msgstr "Usar Espacio de _Respaldo" @@ -2235,116 +3776,89 @@ #~ msgstr "/Ficheiro/-" #~ msgid "/File/Save Module as _WAV..." -#~ msgstr "/Ficheiro/Gardar Módulo coma _WAV..." - -#, fuzzy -#~ msgid "/File/Save XM without samples..." -#~ msgstr "/Ficheiro/Gardar Módulo coma _WAV..." +#~ msgstr "/Ficheiro/Gardar Módulo coma _WAV..." #~ msgid "/File/_Quit" -#~ msgstr "/Ficheiro/_Saír" +#~ msgstr "/Ficheiro/_Saír" #~ msgid "/_Module" -#~ msgstr "/_Módulo" - -#~ msgid "/Module/Clear _All" -#~ msgstr "/Módulo/Limpalo _Todo" +#~ msgstr "/_Módulo" #~ msgid "/Module/Clear _Patterns Only" -#~ msgstr "/Módulo/Limpar Só os _Patróns" +#~ msgstr "/Módulo/Limpar Só os _Patróns" #~ msgid "/Module/_Optimize Module" -#~ msgstr "/Módulo/_Optimizar Módulo" +#~ msgstr "/Módulo/_Optimizar Módulo" #~ msgid "/_Edit" -#~ msgstr "/_Edición" +#~ msgstr "/_Edición" #~ msgid "/Edit/_Jazz Edit Mode" -#~ msgstr "/Edición/Modo de Edición _Jazz" +#~ msgstr "/Edición/Modo de Edición _Jazz" #~ msgid "/Edit/-" -#~ msgstr "/Edición/-" +#~ msgstr "/Edición/-" #~ msgid "/Edit/_Transposition..." -#~ msgstr "/Edición/_Transposicións..." +#~ msgstr "/Edición/_Transposicións..." #~ msgid "/Edit/Pattern/C_ut" -#~ msgstr "/Edición/Patrón/C_ortar" +#~ msgstr "/Edición/Patrón/C_ortar" #~ msgid "/Edit/Pattern/_Copy" -#~ msgstr "/Edición/Patrón/_Copiar" +#~ msgstr "/Edición/Patrón/_Copiar" #~ msgid "/Edit/Pattern/_Paste" -#~ msgstr "/Edición/Patrón/_Pegar" +#~ msgstr "/Edición/Patrón/_Pegar" #~ msgid "/Edit/_Track" -#~ msgstr "/Edición/_Pista" +#~ msgstr "/Edición/_Pista" #~ msgid "/Edit/Track/C_ut" -#~ msgstr "/Edición/Pista/C_ortar" +#~ msgstr "/Edición/Pista/C_ortar" #~ msgid "/Edit/Track/_Copy" -#~ msgstr "/Edición/Pista/_Copiar" +#~ msgstr "/Edición/Pista/_Copiar" #~ msgid "/Edit/Track/_Paste" -#~ msgstr "/Edición/Pista/_Pegar" - -#, fuzzy -#~ msgid "/Edit/Track/_Kill notes" -#~ msgstr "/Edición/Pista/_Suprimir" +#~ msgstr "/Edición/Pista/_Pegar" #~ msgid "/Edit/Track/_Insert" -#~ msgstr "/Edición/Pista/_Inserir" +#~ msgstr "/Edición/Pista/_Inserir" #~ msgid "/Edit/Track/_Delete" -#~ msgstr "/Edición/Pista/_Suprimir" +#~ msgstr "/Edición/Pista/_Suprimir" #~ msgid "/Edit/_Selection" -#~ msgstr "/Edición/_Selección" +#~ msgstr "/Edición/_Selección" #, fuzzy #~ msgid "/Edit/Selection/_Mark mode" -#~ msgstr "/Edición/Selección/_Marcar" - -#, fuzzy -#~ msgid "/Edit/Selection/C_lear block marks" -#~ msgstr "/Edición/Selección/_Marcar" +#~ msgstr "/Edición/Selección/_Marcar" #~ msgid "/Edit/Selection/C_ut" -#~ msgstr "/Edición/Selección/C_ortar" +#~ msgstr "/Edición/Selección/C_ortar" #~ msgid "/Edit/Selection/_Copy" -#~ msgstr "/Edición/Selección/_Copiar" +#~ msgstr "/Edición/Selección/_Copiar" #~ msgid "/Edit/Selection/_Paste" -#~ msgstr "/Edición/Selección/_Pegar" - -#, fuzzy -#~ msgid "/Edit/Selection/_Interpolate effects" -#~ msgstr "/Edición/Selección/_Pegar" - -#, fuzzy -#~ msgid "/Edit/Track/Increment cmd value" -#~ msgstr "/Edición/Pista/_Inserir" - -#, fuzzy -#~ msgid "/Edit/Track/Decrement cmd value" -#~ msgstr "/Edición/Pista/_Suprimir" +#~ msgstr "/Edición/Selección/_Pegar" #~ msgid "/_Pattern" -#~ msgstr "/_Patrón" +#~ msgstr "/_Patrón" #~ msgid "/Pattern/_Find Unused Pattern" -#~ msgstr "/Patrón/_Buscar Patróns sen Uso" +#~ msgstr "/Patrón/_Buscar Patróns sen Uso" #~ msgid "/Pattern/_Copy Current to Unused Pattern" -#~ msgstr "/Patrón/_Copia-lo Seleccionado a un Patrón sen Uso" +#~ msgstr "/Patrón/_Copia-lo Seleccionado a un Patrón sen Uso" #~ msgid "/Pattern/C_lear Unused Patterns" -#~ msgstr "/Patrón/_Borra-los patrons sen Uso" +#~ msgstr "/Patrón/_Borra-los patrons sen Uso" #~ msgid "/Pattern/_Pack Patterns" -#~ msgstr "/Patrón/Em_pacar Patróns" +#~ msgstr "/Patrón/Em_pacar Patróns" #~ msgid "/_Instrument" #~ msgstr "/_Instrumento" @@ -2365,44 +3879,44 @@ #~ msgstr "Instrumento/Borrar _Instrumentos sen Uso" #~ msgid "/_Settings" -#~ msgstr "/_Configuración" +#~ msgstr "/_Configuración" #~ msgid "/Settings/Display _Oscilloscopes" -#~ msgstr "/Configuración/Amosar _Osciloscopios" +#~ msgstr "/Configuración/Amosar _Osciloscopios" #, fuzzy #~ msgid "/Settings/_Tracker" -#~ msgstr "/Configuración/-" +#~ msgstr "/Configuración/-" #, fuzzy #~ msgid "/Settings/Tracker/Use _Backing Store" -#~ msgstr "/Configuración/Usar _Espacio de Respaldo" +#~ msgstr "/Configuración/Usar _Espacio de Respaldo" #, fuzzy #~ msgid "/Settings/Tracker/_Next font" -#~ msgstr "/Configuración/Garda-la Configuración ao _Saír" +#~ msgstr "/Configuración/Garda-la Configuración ao _Saír" #~ msgid "/Settings/-" -#~ msgstr "/Configuración/-" +#~ msgstr "/Configuración/-" #~ msgid "/Settings/_Keyboard Configuration..." -#~ msgstr "/Configuración/Configuración do _Teclado..." +#~ msgstr "/Configuración/Configuración do _Teclado..." #~ msgid "/Settings/_Audio Configuration..." -#~ msgstr "/Configuración/Configuración de _Son..." +#~ msgstr "/Configuración/Configuración de _Son..." #~ msgid "/Settings/_GUI Configuration..." -#~ msgstr "/Configuracións/Configuración _GUI..." +#~ msgstr "/Configuracións/Configuración _GUI..." #, fuzzy #~ msgid "/Settings/_MIDI Configuration..." -#~ msgstr "/Configuracións/Configuración _GUI..." +#~ msgstr "/Configuracións/Configuración _GUI..." #~ msgid "/Settings/_Save Settings now" -#~ msgstr "/Configuración/_Garda-la Configuración Agora" +#~ msgstr "/Configuración/_Garda-la Configuración Agora" #~ msgid "/Settings/Save Settings on _Exit" -#~ msgstr "/Configuración/Garda-la Configuración ao _Saír" +#~ msgstr "/Configuración/Garda-la Configuración ao _Saír" #~ msgid "/_Help" #~ msgstr "/_Axuda" @@ -2419,23 +3933,14 @@ #~ msgid "/Help/_XM Effects..." #~ msgstr "/Axuda/Efectos _XM..." -#~ msgid "" -#~ "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n" -#~ msgstr "" -#~ "A cabeceira do XM ten unha lonxitude != 276. Poida que sexa un módulo de " -#~ "SoundTracker pre-0.0.12 \n" - #~ msgid "Master Reverb" -#~ msgstr "Reberveración Principal" - -#~ msgid "Playback Effects Configuration" -#~ msgstr "Configuración de Efectos na Reproducción" +#~ msgstr "Reberveración Principal" #~ msgid "_Playback Effects..." -#~ msgstr "Efectos de _Reproducción" +#~ msgstr "Efectos de _Reproducción" #~ msgid "/Settings/_Playback Effects..." -#~ msgstr "/Configuración/_Efectos de Reproducción..." +#~ msgstr "/Configuración/_Efectos de Reproducción..." #~ msgid "SelStart" #~ msgstr "ComezoSel" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/hr.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/hr.gmo differ diff -Nru soundtracker-0.6.8/po/hr.po soundtracker-1.0.2~pre2/po/hr.po --- soundtracker-0.6.8/po/hr.po 2006-02-25 13:25:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/hr.po 2020-05-27 18:54:27.000000000 +0000 @@ -6,17 +6,25 @@ msgstr "" "Project-Id-Version: soundtracker 0.6.5\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2002-06-14 14:25-01\n" "Last-Translator: Denis Lackovic \n" "Language-Team: Croatian \n" +"Language: hr\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==1?0:1);\n" "X-Generator: TransDict server\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "Izlaz Sviranja" @@ -24,2089 +32,3593 @@ msgid "Editing Output" msgstr "UreÄ‘ivanje Izlaz" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Sampliranje" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "Driver Modul" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "Mikser Modul" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Opis" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "PodeÅ¡avanje Zvuka" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "UpravljaÄi" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Mikseri" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Zatvori" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d bajtova)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Preostalo zvuk trajanje: %f mikrosekunde" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "_XM Efekti..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." -msgstr "Ove promjene ne utjeÄu sve do ponovnog pokretanja." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Traker Frekvencija" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Rezolucija:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Kanali:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Frekvencija [Hz]:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Buffer VeliÄina:" +#: app/colors.c:44 +msgid "Major lines" +msgstr "" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "ALSA broj kartice:" - -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "ALSA broj ureÄ‘aja:" +#: app/colors.c:44 +msgid "Major lines highlighting" +msgstr "" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +#: app/colors.c:45 +msgid "Minor lines" msgstr "" -"Nemogu otvoriti ALSA ureÄ‘aj za ulaz zvuka (kartica:%d, ureÄ‘aj: %d):\n" -"%s" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Traženi izlazni zvuÄni format nije podržan.\n" +#: app/colors.c:45 +msgid "Minor lines highlighting" +msgstr "" -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Traženi izlazni zvuÄni parametri nisu podržani.\n" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Izbor:" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Preostalo zvuk trajanje: %f milisekunda" +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Traker Frekvencija" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:47 +msgid "Notes, waveforms" msgstr "" -"Nemogu otvoriti ALSA ureÄ‘aj za izlaz zvuka (kartica:%d, ureÄ‘aj: %d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" +msgstr "" + +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "BriÅ¡i" + +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "BriÅ¡i" + +#: app/colors.c:49 #, fuzzy -msgid "Required output-channel parameters not supported.\n" -msgstr "Traženi izlazni zvuÄni parametri nisu podržani.\n" +msgid "Channel numbers, loops" +msgstr "Kanali:" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" msgstr "" -"BiljeÅ¡ka ESD izlaz je neiskoriÅ¡ten u \n" -"interaktivnom modu zbog dodavanja latency\n" -"od ESD. Koristite OSS ili ALSA izlazne dodatke\n" -"za ozbiljan rad." -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:51 +msgid "Cursor editing" msgstr "" -"Nemože spojiti u ESD za izlazni zvuk:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "nema postavki (joÅ¡), žalim!" +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Nemogu otvoriti datoteku za snimanje." +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "Zumiranje izbora" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." -msgstr "Ove promjene neće utjecati dok ponove ne semplirate." +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" +msgstr "" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Ulazni ureÄ‘aj (npr. '/dev/dsp'):" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "Nanovo pos" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:53 +msgid "Mixer position indicator" msgstr "" -"Nemogu otvoriti %s za sampliranje:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d primjeri)" +#: app/colors.c:54 +msgid "Zero line" +msgstr "" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "Izlazni ureÄ‘aj (npr. '/dev/dsp'):" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:56 +msgid "White keys" msgstr "" -"Nemogu otvoriti %s za zvuÄni izlaz:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" +#: app/colors.c:57 +msgid "Black keys" msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" +#: app/colors.c:58 +msgid "White keys pressed" msgstr "" -#: app/drivers/jack-output.c:327 -#, fuzzy, c-format -msgid "soundtracker" -msgstr "Koristi SoundTracker!" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" +#: app/colors.c:59 +msgid "Black keys pressed" msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:209 -#, fuzzy -msgid "Output device (e.g. '/dev/audio'):" -msgstr "Izlazni ureÄ‘aj (npr. '/dev/dsp'):" +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" +#: app/colors.c:61 +msgid "Black text pressed" msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 +#: app/colors.c:395 #, fuzzy, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "Traženi izlazni zvuÄni format nije podržan.\n" +msgid "%s colors configuration" +msgstr "PodeÅ¡avanje Tipkovnice" + +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Obrnuti redoslijed" + +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" + +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" + +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 +#: app/drivers/alsa1x.c:261 #, c-format -msgid "%s: Cannot set block size (%s)" +msgid "%f milliseconds" msgstr "" -#: app/drivers/sun-input.c:117 +#: app/drivers/alsa1x.c:320 #, fuzzy -msgid "Input device (e.g. '/dev/audio'):" -msgstr "Ulazni ureÄ‘aj (npr. '/dev/dsp'):" +msgid "ALSA device opening error" +msgstr "ALSA broj ureÄ‘aja:" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" msgstr "" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Duljina" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Trenutni" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +msgid "Unable to set channels number" +msgstr "" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Pomak" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Vrijednost" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Umetanje" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "BriÅ¡i" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" msgstr "" -"GrafiÄki\n" -"Envelope\n" -"Editor\n" -"samo u\\ GNOME-InaÄici" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Održavati" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "ToÄka" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Kruži" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Pokreni" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Kraj" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "UÄitaj Modul" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Snimi Modul" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d primjeri)" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Daj WAV" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Snimi Pjesmu" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "UÄitaj Primjer" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Snimi Primjer" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8 bitova" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "UÄitaj Instrument" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16 bitova" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Snimi Instrument" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "" -#: app/file-operations.c:175 -msgid "File" -msgstr "Spis" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +#, fuzzy +msgid "Stereo" +msgstr "Zaustavi" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Operacija nije podržana." +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "Ove promjene ne utjeÄu sve do ponovnog pokretanja." -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Scopes Frekvencija" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "Ove promjene neće utjecati dok ponove ne semplirate." -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Traker Frekvencija" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "GUI PodeÅ¡avanje" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "Heksadecimalni red brojeva" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Rezolucija:" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Koristi veća slova za hex brojeve" +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Kanali:" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" -msgstr "" +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Frekvencija [Hz]:" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" -msgstr "Fxx naredba obnovljena Tempo/BPM klizaÄi" +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Buffer VeliÄina:" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" -msgstr "Prebaci na traker nakon uÄitavanja/snimanja" +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "Broj kanala:" -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" -msgstr "Snimi geometriju prozora kada izaÄ‘eÅ¡" +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Preostalo zvuk trajanje: %f milisekunda" -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." msgstr "" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" msgstr "" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Scopes buffer veliÄina [MB]" +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Traka crta format:" +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." -msgstr "Spreman." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Sviranje pjesme..." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Sviranje dijela..." +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Ubacivanje modula..." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Modul ubaÄen." - -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Snimam modul..." - -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Modul snimnjen." - -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "UÄitavam primjer..." - -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Primjer uÄitan." - -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Snimam primjer..." - -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Primjer snimnjen." - -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "UÄitavam instrument..." - -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Instrument uÄitan." - -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Snimam instrument..." - -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Instrument snimnjen." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Sniman pjesmu..." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "Pjesma snimnjena." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Pitanje" +#: app/drivers/alsa1x.c:1293 +msgid "Error setting hw parameters" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" msgstr "" -#: app/gui-subs.c:500 -#, fuzzy -msgid "No" -msgstr "NiÅ¡ta" +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Odustani" +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Upozorenje" +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "GreÅ¡ka!" +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" +#: app/drivers/alsa1x.c:1328 +msgid "Unable to enable timestamping for playback" msgstr "" -#: app/gui.c:301 -#, fuzzy -msgid "Highlight rows (major / minor):" -msgstr "Važniji redovi:" +#: app/drivers/alsa1x.c:1329 +msgid "Unable to enable timestamping for capture" +msgstr "" -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1335 +msgid "Unable to set timestamp type for playback" msgstr "" -#: app/gui.c:506 -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1336 +msgid "Unable to set timestamp type for capture" msgstr "" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" msgstr "" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" msgstr "" -"Jesi li siguran da želiÅ¡ izaći iz trenutnog projekta?\n" -"Sve promjene biti će izgubljene!" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Jesi li siguran da želiÅ¡ preko datoteke snimiti?" +#: app/drivers/alsa1x.c:1352 +msgid "Unable to prepare playback" +msgstr "" -#: app/gui.c:638 -msgid "Error when opening pattern file!" +#: app/drivers/alsa1x.c:1353 +msgid "Unable to prepare capture" msgstr "" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" msgstr "" -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "SoundTracker Podizanje" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" +msgstr "" -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "UÄitavam..." +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "" -#: app/gui.c:1804 -msgid "Use SoundTracker!" -msgstr "Koristi SoundTracker!" +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "nema postavki (joÅ¡), žalim!" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "UÄitaj XM..." - -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Snimi XM..." +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Daj modul kao WAV..." +#: app/drivers/irix-output.c:178 +#, fuzzy +msgid "16 Bit output not supported." +msgstr "Operacija nije podržana." -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "Snimi pjesmu kao XM..." +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "Operacija nije podržana." -#: app/gui.c:1872 +#: app/drivers/irix-output.c:192 #, fuzzy -msgid "Load current pattern..." -msgstr "Sviranje dijela..." +msgid "Couldn't open audio port." +msgstr "" +"Nemogu otvoriti %s za sampliranje:\n" +"%s" -#: app/gui.c:1874 +#: app/drivers/oss.c:130 #, fuzzy -msgid "Save current pattern..." -msgstr "Sviranje dijela..." +msgid "OSS input: reading error" +msgstr "Instrument Urednik" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Sviraj Pjesmu" +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Sviraj uzorak" +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Preostalo zvuk trajanje: %f milisekunda" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Zaustavi" +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d primjeri)" -#: app/gui.c:1973 -#, fuzzy -msgid "Pat" -msgstr "Umetni" +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "Ulazni ureÄ‘aj (npr. '/dev/dsp'):" -#: app/gui.c:1979 -msgid "Edited pattern" +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "Izlazni ureÄ‘aj (npr. '/dev/dsp'):" + +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" msgstr "" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" msgstr "" -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Broj kanala:" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"Nemogu otvoriti %s za sampliranje:\n" +"%s" -#: app/gui.c:2025 -#, fuzzy -msgid "Pattern Length" -msgstr "PatTrajanje" +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "Traženi izlazni zvuÄni format nije podržan.\n" -#: app/gui.c:2060 -msgid "Set preferred accidental type" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" msgstr "" -#: app/gui.c:2066 -msgid "Measure" +#: app/drivers/jack.c:371 +msgid "Jack server not running?" msgstr "" -#: app/gui.c:2067 -msgid "Enable row highlighting" +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" msgstr "" -#: app/gui.c:2093 -#, fuzzy -msgid "Other..." -msgstr "Ostale tipke..." +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/gui.c:2129 -#, fuzzy -msgid "Change effect column editing direction" -msgstr "Horizontalni efekt stupac ureÄ‘enje" +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" +#: app/drivers/jack.c:551 +msgid "Jack autostart" msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" +#: app/drivers/jack.c:562 +msgid "declick" msgstr "" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" +#: app/drivers/jack.c:610 +msgid "Jack server is not running or some error occured." msgstr "" -#: app/gui.c:2216 +#: app/drivers/sdl-output.c:76 #, fuzzy -msgid "Editing" -msgstr "_Uredi" - -#: app/gui.c:2223 -msgid "Octave" -msgstr "Oktave" - -#: app/gui.c:2232 -msgid "Jump" -msgstr "Skok" +msgid "Experimental SDL support." +msgstr "Operacija nije podržana." -#: app/gui.c:2241 -msgid "Instr" -msgstr "Instr" +#: app/drivers/sun-output.c:212 +#, fuzzy +msgid "Output device (e.g. '/dev/audio'):" +msgstr "Izlazni ureÄ‘aj (npr. '/dev/dsp'):" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Uzorak" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "Dobro doÅ¡li u SoundTracker!" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/gui.c:2323 -msgid "%M:%S" +#: app/drivers/sun-output.c:402 +#, c-format +msgid "SUN output (%s): Cannot handle %d Hz" msgstr "" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "VolSlabljene" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "Traženi izlazni zvuÄni format nije podržan.\n" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "VibBrzina" +#: app/drivers/sun-output.c:455 +#, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "VibDubina" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "VibÅ irenje" +#: app/drivers/sun-input.c:77 +#, fuzzy +msgid "SUN input: reading error" +msgstr "Instrument Urednik" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Nemogu otvoriti datoteku." +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sinus" +#: app/drivers/sun-input.c:131 +#, fuzzy +msgid "Input device (e.g. '/dev/audio'):" +msgstr "Ulazni ureÄ‘aj (npr. '/dev/dsp'):" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Kvadrat" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "Pila dolje" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "Pila Gore" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" +msgstr "" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Instrument Urednik" +#: app/drivers/sun-input.c:273 +#, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "JaÄina omotnice" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "Traženi izlazni zvuÄni format nije podržan.\n" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Pomicanje omotnice" +#: app/drivers/sun-input.c:332 +#, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "UÄitaj instrument..." - -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Snimi Instrument..." +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Duljina" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "UÄitaj XI" +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Trenutni" -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "Snimi XI" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Pomak" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Titrajna Vrsta:" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Vrijednost" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "BiljeÅ¡ka:" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Umetanje" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Inicijaliziraj" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "BriÅ¡i" -#: app/keys.c:57 -msgid "" -msgstr "" - -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" msgstr "" +"GrafiÄki\n" +"Envelope\n" +"Editor\n" +"samo u\\ GNOME-InaÄici" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." -msgstr "" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Održavati" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." -msgstr "" +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "ToÄka" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "ViÅ¡e Oktave Tipke..." +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "Kruži" -#: app/keys.c:146 -msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." -msgstr "" +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "Pokreni" -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Niže Oktave Tipke..." +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Kraj" -#: app/keys.c:153 +#: app/file-operations.c:127 +#, c-format msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" msgstr "" -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "Ostale tipke..." +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Ostale razliÄite tipke" +#: app/file-operations.c:245 +msgid "All files" +msgstr "" -#: app/keys.c:513 -msgid "Function" -msgstr "Funkcija" +#: app/file-operations.c:388 +msgid "File" +msgstr "Spis" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Zadatak" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "PodeÅ¡avanje Tipkovnice" +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Tipka Grupe ObjaÅ¡njenja" +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "Mikseri" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Tipka ObjaÅ¡njenja" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "GUI PodeÅ¡avanje" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Modifikacije:" +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Scopes Frekvencija" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "NauÄi odabrane tipke" +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Traker Frekvencija" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "NauÄi sve tipke" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Heksadecimalni red brojeva" -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" -msgstr "" -"Molim pritisni željenu kombinaciju tipke!\n" -"Klikni u lijevi ispis za poniÅ¡tavanje!" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Koristi veća slova za hex brojeve" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "U redu" +#: app/gui-settings.c:343 +msgid "FT2-like volume column" +msgstr "" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Primijeni" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" +msgstr "" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" msgstr "" -"Datoteka podeÅ¡avanja tipkovnice je nepotpuna.\n" -"Molim koristi PodeÅ¡avnje Tipkovnice." -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" +#: app/gui-settings.c:361 +msgid "Decimal volume representation" msgstr "" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" msgstr "" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" msgstr "" -"Automatsko podeÅ¡avanje tipke nije uspjeÅ¡no.\n" -"Molim koristi PodeÅ¡avnje Tipkovnice\n" -"u Opcijama." -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -"Jesi li siguran za uÄiniti to?\n" -"Sve promjene biti će izgubljene!" -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" msgstr "" -"Jesi li siguran da želiÅ¡ izaći?\n" -"Sve promjene biti će izgubljene!" -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Otvori..." +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "" -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Snimi _kao..." +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Snimi Modul kao _WAV..." +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "Fxx naredba obnovljena Tempo/BPM klizaÄi" -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Snimi XM bez primjera..." +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "_Izlaz" +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "Prebaci na traker nakon uÄitavanja/snimanja" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "OÄisti _Sve" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "OÄisti _Samo Uzorke" +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" +msgstr "Snimi geometriju prozora kada izaÄ‘eÅ¡" -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Optimiziraj Modul" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "R_eži" - -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Kopiraj" - -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "_Zaljepi" +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Ubij biljeÅ¡ke" +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." +msgstr "" -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "_Ubaci traku" +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Izbor:" -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "_IzbriÅ¡i traku" +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Scopes buffer veliÄina [MB]" -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Prevelik cmd vrijednost" +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Primjer uÄitan." -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Smanjena cmd vrijednost" +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "" -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "_OznaÄi mod" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Uredi" -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "O_Äisti oznaÄeni blok" +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "" -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "Interpolirani efekti" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "" -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Mjenjati pola-oznake gore" +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "" -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Mjenjati pola-oznake dolje" +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Mjenjati oktavu gore" +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Traka crta format:" -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Mjenjati oktavu dolje" +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:526 +#: app/gui-settings.c:573 #, fuzzy -msgid "P_aste" -msgstr "Umetni" - -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "_Jazz Uredi mod" +msgid "Tracker colors configuration" +msgstr "PodeÅ¡avanje Tipkovnice" -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "Spreman." -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "Premj_eÅ¡tanje..." +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Sviranje pjesme..." -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "_Uzorak" +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Sviranje dijela..." -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "_Traka" +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "Ubacivanje modula..." -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Selekcija" +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "Modul ubaÄen." -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_NaÄ‘i nekoriÅ¡tene Uzorke" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Snimam modul..." -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Kopiraj Trenutni u NekoriÅ¡teni Uzorak" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "Modul snimnjen." -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "O_Äisti NekoriÅ¡tene Uzorke" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "UÄitavam primjer..." -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "_Pakiraj Uzorke" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Primjer uÄitan." -#: app/menubar.c:592 -#, fuzzy -msgid "_Save Current Pattern" -msgstr "_Kopiraj Trenutni u NekoriÅ¡teni Uzorak" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Snimam primjer..." -#: app/menubar.c:594 -#, fuzzy -msgid "L_oad Pattern" -msgstr "_Uzorak" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Primjer snimnjen." -#: app/menubar.c:599 -#, fuzzy -msgid "Sh_rink Current Pattern" -msgstr "_Kopiraj Trenutni u NekoriÅ¡teni Uzorak" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "UÄitavam instrument..." -#: app/menubar.c:601 -#, fuzzy -msgid "_Expand Current Pattern" -msgstr "_Kopiraj Trenutni u NekoriÅ¡teni Uzorak" +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Instrument uÄitan." -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" -msgstr "" +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Snimam instrument..." -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" -msgstr "" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Instrument snimnjen." -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_UÄitaj XI..." +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Sniman pjesmu..." -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_Snimi XI..." +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "Pjesma snimnjena." -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_OÄisti Trenutni" +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "GreÅ¡ka!" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Brisanje NekoriÅ¡tenih Instrumenata" +#: app/gui-subs.c:414 +msgid "Question" +msgstr "Pitanje" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." msgstr "" -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "_PrijaÅ¡nje pismo" - -#: app/menubar.c:642 -msgid "_Next font" -msgstr "_Slijedeće pismo" - -#: app/menubar.c:647 -msgid "Change preferred _accidental type" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" msgstr "" -#: app/menubar.c:649 -#, fuzzy -msgid "Change effect column editing _direction" -msgstr "Horizontalni efekt stupac ureÄ‘enje" - -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Prikaz _Osciloskopa" - -#: app/menubar.c:660 -msgid "_Tracker" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." msgstr "" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "_PodeÅ¡avanje Tipkovnice" - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "_PodeÅ¡avanje Zvuka..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "_GUI PodeÅ¡avanje..." +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Upozorenje" -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "_MIDI PodeÅ¡avanje..." +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "GUI PodeÅ¡avanje" -#: app/menubar.c:679 -msgid "Disable splash screen" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" msgstr "" -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Snimi Opcije sad" - -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "_Snimi Opcije na Izlazu" +#: app/gui.c:260 +#, fuzzy +msgid "Highlight rows (major / minor):" +msgstr "Važniji redovi:" -#: app/menubar.c:690 -msgid "_About..." -msgstr "_O..." +#: app/gui.c:330 +msgid "" +msgstr "" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Prikaži _Savjete..." +#: app/gui.c:451 +#, fuzzy +msgid "Saving module failed" +msgstr "Snimam modul..." -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "_XM Efekti..." +#: app/gui.c:535 +msgid "File output" +msgstr "" -#: app/menubar.c:704 -msgid "_File" -msgstr "_Datoteka" +#: app/gui.c:612 +#, fuzzy +msgid "Can't open file for writing" +msgstr "Nemogu otvoriti datoteku za snimanje." -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Modul" +#: app/gui.c:618 +#, fuzzy +msgid "Can't change file ownership" +msgstr "Nemogu otvoriti datoteku za snimanje." -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Uredi" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Instrument" +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Opcije" +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/menubar.c:711 -msgid "_Help" -msgstr "_PomoÄ" +#: app/gui.c:715 +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" msgstr "" +"Jesi li siguran da želiÅ¡ izaći iz trenutnog projekta?\n" +"Sve promjene biti će izgubljene!" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Ime Instrumenta" +#: app/gui.c:810 +#, c-format +msgid "Error when opening pattern file %s!" +msgstr "" -#: app/module-info.c:115 -msgid "#smpl" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" msgstr "" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Primjer Imena" +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "Pokreni" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Linearno" +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "UÄitavam..." -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "" +#: app/gui.c:2195 +msgid "Use SoundTracker!" +msgstr "Koristi SoundTracker!" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Informacija Modula" +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"Jesi li siguran da želiÅ¡ izaći?\n" +"Sve promjene biti će izgubljene!" -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Ime pjesme:" +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Frekvencije:" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "ProTracker Mod" +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "UÄitavam..." -#: app/module-info.c:395 -#, c-format -msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" msgstr "" -"NekoriÅ¡teni uzorak: %d (koriÅ¡teno: %d)\n" -"NekoriÅ¡teni instrumenti: %d (koriÅ¡teno: %d)\n" -"\n" -"ObriÅ¡i nekoriÅ¡tene i ponovljene liste?\n" -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" msgstr "" -#: app/playlist.c:535 -#, fuzzy -msgid "Remove current playlist entry" -msgstr "Sviranje dijela..." +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" -#: app/playlist.c:543 -msgid "Add + Cpy" +#: app/gui.c:2400 +msgid "Extended pattern (*.xp)" msgstr "" -#: app/playlist.c:545 +#: app/gui.c:2408 +#, c-format msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" msgstr "" -#: app/playlist.c:548 -msgid "Add Free" -msgstr "" +#: app/gui.c:2433 +msgid "Load Module" +msgstr "UÄitaj Modul" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" msgstr "" -#: app/playlist.c:560 +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Snimi Modul" + +#: app/gui.c:2434 #, fuzzy -msgid "Len" -msgstr "Duljina" +msgid "Save the current module" +msgstr "Sviranje dijela..." + +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Daj WAV" -#: app/playlist.c:574 +#: app/gui.c:2436 #, fuzzy -msgid "Song length" -msgstr "Duljina Pjesme" +msgid "Render the current module as WAV file" +msgstr "Daj modul kao WAV..." + +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Snimi XM bez primjera..." -#: app/playlist.c:580 +#: app/gui.c:2439 #, fuzzy -msgid "Rstrt" -msgstr "Instr" +msgid "Load current pattern..." +msgstr "Sviranje dijela..." -#: app/playlist.c:593 +#: app/gui.c:2440 #, fuzzy -msgid "Song restart position" -msgstr "Nanovo pos" +msgid "Save current pattern..." +msgstr "Sviranje dijela..." -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" -msgstr "" -"Mapa nazvana '.soundtracker'je bila napravljena u tvojoj\n" -"poÄetnoj mapi snimnjena kao datoteka podeÅ¡avanja.\n" +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Sviraj Pjesmu" -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Ne ponavljaj" +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Sviraj uzorak" -#: app/sample-editor.c:236 -msgid "PingPong" +#: app/gui.c:2525 +msgid "Play From Cursor" msgstr "" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8 bitova" - -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16 bitova" - -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "UreÄ‘ivaÄ primjera" +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "Sviraj Pjesmu" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "JaÄina zvuka" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Zaustavi" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Pomicanje" +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "FinopodeÅ¡avanje" +#: app/gui.c:2562 +#, fuzzy +msgid "Pat" +msgstr "Umetni" -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Izbor:" +#: app/gui.c:2568 +msgid "Edited pattern" +msgstr "" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "NiÅ¡ta" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Sve" +#: app/gui.c:2583 +#, fuzzy +msgid "Pattern Length" +msgstr "PatTrajanje" -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Duljina:" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Postavi kao ponavljanje" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Broj kanala:" -#: app/sample-editor.c:364 -msgid "RelNote" +#: app/gui.c:2632 +msgid "Set preferred accidental type" msgstr "" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "UÄitaj primjer..." - -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Snimi WAV..." +#: app/gui.c:2638 +msgid "Measure" +msgstr "" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "Snimi podruÄje kao WAV..." +#: app/gui.c:2639 +msgid "Enable row highlighting" +msgstr "" -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "Snimi WAV" +#: app/gui.c:2660 +#, fuzzy +msgid "Other..." +msgstr "Ostale tipke..." -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "Snimi PodruÄje" +#: app/gui.c:2687 +#, fuzzy +msgid "Change effect column editing direction" +msgstr "Horizontalni efekt stupac ureÄ‘enje" -#: app/sample-editor.c:413 -msgid "Monitor" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" msgstr "" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "JaÄina Nagiba" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "" -#: app/sample-editor.c:425 -msgid "Trim" +#: app/gui.c:2740 +msgid "Pitchbend" msgstr "" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Zumiranje izbora" +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Prikaži sve" +#: app/gui.c:2760 +#, fuzzy +msgid "Editing" +msgstr "_Uredi" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Zoom na (+50%)" +#: app/gui.c:2767 +msgid "Octave" +msgstr "Oktave" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Zoom od (-50%)" +#: app/gui.c:2776 +msgid "Jump" +msgstr "Skok" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Obrnuti redoslijed" +#: app/gui.c:2785 +msgid "Instr" +msgstr "Instr" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Izreži" +#: app/gui.c:2801 +msgid "Sample" +msgstr "Uzorak" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Ukloni" +#: app/gui.c:2827 +msgid "dB" +msgstr "" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Kopiraj" +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "Dobro doÅ¡li u SoundTracker!" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Umetni" +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "BriÅ¡i Primjer" +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Nemogu otvoriti datoteku." -#: app/sample-editor.c:500 +#: app/instrument-editor.c:209 #, fuzzy -msgid "Crop" -msgstr "Kopiraj" - -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(nema izbora)" +msgid "Saving instrument failed." +msgstr "Snimam instrument..." -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "" +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "Snimi Instrument" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sinus" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." -msgstr "" +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Kvadrat" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "GreÅ¡ka Äitanja." +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "Pila dolje" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "UÄitaj stereo primjer" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "Pila Gore" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" msgstr "" -"Trebate odabrati stereo primjer!\n" -"(SoundTracker može hvatati samo mono primjere!)\n" -"\n" -"Birajte koji kanal uÄitati:" - -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Lijevo" - -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "MjeÅ¡anje" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Desno" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Instrument Urednik" -#: app/sample-editor.c:1575 -#, fuzzy -msgid "Signed" -msgstr "Sinus" +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "JaÄina omotnice" -#: app/sample-editor.c:1575 -msgid "Unsigned" -msgstr "" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Pomicanje omotnice" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "" +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "UÄitaj Instrument" -#: app/sample-editor.c:1576 -msgid "Big-Endian" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" msgstr "" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "" +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Snimi Instrument" -#: app/sample-editor.c:1577 +#: app/instrument-editor.c:297 #, fuzzy -msgid "Stereo" -msgstr "Zaustavi" +msgid "Save the current instrument" +msgstr "Snimi Instrument" -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "UÄitaj raw primjer" +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "UÄitaj XI" -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" -msgstr "" +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "Snimi XI" -#: app/sample-editor.c:1623 -msgid "Word format:" -msgstr "Oblik rijeÄi:" +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "VolSlabljene" -#: app/sample-editor.c:1670 +#: app/instrument-editor.c:344 #, fuzzy -msgid "Sampling Rate:" -msgstr "Sampliranje" +msgid "Vibrato:" +msgstr "Titrajna Vrsta:" -#: app/sample-editor.c:1681 -msgid "8363" +#: app/instrument-editor.c:354 +msgid "Type" msgstr "" -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "U redu" +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "VibBrzina" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Nemohu Äitati primjer" +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "VibDubina" -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." -msgstr "Primjer je previÅ¡e dug za trenutni mikser modul. UÄitaj bilo kako." +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "VibÅ irenje" -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Mogu hvatati samo 8 i 16 bitne primjere sa po 2 kanala" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "BiljeÅ¡ka:" -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "Molim birajte prvo podruÄje." +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "Inicijaliziraj" -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "PoÄinjem samplirati" +#: app/keys.c:58 +msgid "" +msgstr "" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "UpravljaÄki program za sampliranje nedostupan" +#: app/keys.c:134 +msgid "KOFF" +msgstr "" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Prozor Primjera (sampling)" +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "" -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" +#: app/keys.c:136 +msgid "JMP+" msgstr "" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "" -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/keys.c:138 +msgid "JMP-" msgstr "" -"Snimnjeni primjer je previÅ¡e dug za trenutni mikser modul. Koristi to bilo " -"kako." -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normaliziram" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "" -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "IzvrÅ¡i" +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Sviraj Pjesmu" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "JaÄina Nagiba" +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Snimam modul..." -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" +#: app/keys.c:142 +msgid "RecMod" msgstr "" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Lijevo [%]:" +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Sviranje dijela..." -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "" +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "Sviraj uzorak" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Sviraj uzorak" + +#: app/keys.c:146 +msgid "RecPat" msgstr "" -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Desno [%]:" +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Sviranje dijela..." -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/keys.c:148 +msgid "PlayCur" msgstr "" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/keys.c:148 +msgid "Play module from cursor." msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/keys.c:150 +msgid "RecCur" msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" -msgstr "" +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Sviranje dijela..." -#: app/tips-dialog.c:50 -msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." -msgstr "" +#: app/keys.c:152 +#, fuzzy +msgid "PlayRow" +msgstr "Sviraj Pjesmu" -#: app/tips-dialog.c:55 -msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." -msgstr "" +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Sviranje dijela..." -#: app/tips-dialog.c:59 -msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +#: app/keys.c:154 +msgid "PlayBlk" msgstr "" -#: app/tips-dialog.c:62 -msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" -msgstr "" +#: app/keys.c:154 +#, fuzzy +msgid "Play selected block." +msgstr "NauÄi odabrane tipke" + +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "ViÅ¡e Oktave Tipke..." -#: app/tips-dialog.c:65 +#: app/keys.c:167 msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." msgstr "" -#: app/tips-dialog.c:69 +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Niže Oktave Tipke..." + +#: app/keys.c:173 msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." msgstr "" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "SoundTracker Savjet dana" +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "Ostale tipke..." -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "PrijaÅ¡ni Savjet" +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Ostale razliÄite tipke" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Slijedeći Savjet" +#: app/keys.c:578 +msgid "Function" +msgstr "Funkcija" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Prikaži savjet slijedeći put" +#: app/keys.c:579 +msgid "Assignment" +msgstr "Zadatak" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "" +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "PodeÅ¡avanje Tipkovnice" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "Porta gore" +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Tipka Grupe ObjaÅ¡njenja" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Tipka ObjaÅ¡njenja" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Modifikacije:" + +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "NauÄi odabrane tipke" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "NauÄi sve tipke" + +#: app/keys.c:702 +msgid "" +"Please press the desired key combination!\n" +"Click into left list to cancel" +msgstr "" +"Molim pritisni željenu kombinaciju tipke!\n" +"Klikni u lijevi ispis za poniÅ¡tavanje!" + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "" + +#: app/keys.c:1028 +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." +msgstr "" +"Automatsko podeÅ¡avanje tipke nije uspjeÅ¡no.\n" +"Molim koristi PodeÅ¡avnje Tipkovnice\n" +"u Opcijama." + +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" +msgstr "" + +#: app/menubar.c:126 +msgid "" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." +msgstr "" + +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"Jesi li siguran za uÄiniti to?\n" +"Sve promjene biti će izgubljene!" + +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "" + +#: app/mixers/kbfloat.c:838 +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" + +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" + +#: app/module-info.c:63 app/module-info.c:64 +msgid "Cyclic" +msgstr "" + +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" + +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" + +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" + +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" + +#: app/module-info.c:481 +msgid "Period" +msgstr "" + +#: app/module-info.c:484 +msgid "s" +msgstr "" + +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "BiljeÅ¡ka:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Ime Instrumenta" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Primjer Imena" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "Linearno" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Informacija Modula" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Ime pjesme:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Frekvencije:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "ProTracker Mod" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Instrument Urednik" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +msgid "Copy Instrument 1 to Instrument 2" +msgstr "" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Snimi Instrument" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +msgid "Exchange Samples 1 and 2" +msgstr "" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "FinopodeÅ¡avanje" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" +"NekoriÅ¡teni uzorak: %d (koriÅ¡teno: %d)\n" +"NekoriÅ¡teni instrumenti: %d (koriÅ¡teno: %d)\n" +"\n" +"ObriÅ¡i nekoriÅ¡tene i ponovljene liste?\n" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "" + +#: app/playlist.c:511 +#, fuzzy +msgid "Remove current playlist entry" +msgstr "Sviranje dijela..." + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Duljina" + +#: app/playlist.c:548 +#, fuzzy +msgid "Song length" +msgstr "Duljina Pjesme" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Instr" + +#: app/playlist.c:567 +#, fuzzy +msgid "Song restart position" +msgstr "Nanovo pos" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"Mapa nazvana '.soundtracker'je bila napravljena u tvojoj\n" +"poÄetnoj mapi snimnjena kao datoteka podeÅ¡avanja.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Ne ponavljaj" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8 bitova" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16 bitova" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "UreÄ‘ivaÄ primjera" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "JaÄina zvuka" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Pomicanje" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Izbor:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "NiÅ¡ta" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Sve" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Duljina:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "Postavi kao ponavljanje" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "UÄitaj Primjer" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "Snimi XM bez primjera..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Snimi Primjer" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "Snimi XM bez primjera..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "Snimi podruÄje kao WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "Snimi WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "Snimi PodruÄje" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "JaÄina Nagiba" + +#: app/sample-editor.c:593 +msgid "Trim" +msgstr "" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "Zumiranje izbora" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "Prikaži sve" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "Zoom na (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "Zoom od (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Obrnuti redoslijed" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Izreži" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Ukloni" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Kopiraj" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Umetni" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "BriÅ¡i Primjer" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Kopiraj" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(nema izbora)" + +#: app/sample-editor.c:1279 +msgid "Out of memory for copybuffer." +msgstr "" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "MjeÅ¡anje" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Lijevo" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Desno" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d primjeri)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "" + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "GreÅ¡ka Äitanja." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"Trebate odabrati stereo primjer!\n" +"(SoundTracker može hvatati samo mono primjere!)\n" +"\n" +"Birajte koji kanal uÄitati:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "PoÄinjem samplirati" + +#: app/sample-editor.c:1756 +#, fuzzy +msgid "Signed" +msgstr "Sinus" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "UÄitaj raw primjer" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "Oblik rijeÄi:" + +#: app/sample-editor.c:1829 +#, fuzzy +msgid "Sampling Rate:" +msgstr "Sampliranje" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Nemohu Äitati primjer" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "Primjer je previÅ¡e dug za trenutni mikser modul. UÄitaj bilo kako." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "Mogu hvatati samo 8 i 16 bitne primjere sa po 2 kanala" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Nemogu otvoriti datoteku za snimanje." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "Molim birajte prvo podruÄje." + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "UpravljaÄki program za sampliranje nedostupan" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Prozor Primjera (sampling)" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "OÄisti _Sve" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Sampliranje" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"Trebate odabrati stereo primjer!\n" +"(SoundTracker može hvatati samo mono primjere!)\n" +"\n" +"Birajte koji kanal uÄitati:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "UÄitaj stereo primjer" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"Snimnjeni primjer je previÅ¡e dug za trenutni mikser modul. Koristi to bilo " +"kako." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "JaÄina Nagiba" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normaliziram" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Lijevo [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Desno [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "PrijaÅ¡ni Savjet" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "Slijedeći Savjet" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "Prikaži savjet slijedeći put" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "SoundTracker Savjet dana" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "Porta gore" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "Porta dolje" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Primjer snimnjen." + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "Uzorak" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "" + +#: app/track-editor.c:203 +msgid "square" +msgstr "" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +msgid "Extra fine porta up" +msgstr "" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "Mjenjati oktavu dolje" + +#: app/track-editor.c:257 +#, fuzzy +msgid "None ]" +msgstr "NiÅ¡ta" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "" + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, c-format +msgid "Pattern length out of range: %d." +msgstr "" + +#: app/xm.c:226 +msgid "Error loading notes." +msgstr "" + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Instrument uÄitan." -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "Porta dolje" +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." msgstr "" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Instrument Urednik" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Pomicanje omotnice" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Pomicanje omotnice" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Pomicanje omotnice" + +#: app/xm.c:632 +#, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." msgstr "" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" +#: app/xm.c:678 app/xm.c:1233 +msgid "Out of memory error!" msgstr "" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" +#: app/xm.c:694 +msgid "The file is not an XI instrument." msgstr "" -#: app/track-editor.c:120 -msgid "Tremolo" +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Instrument uÄitan." + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Pomicanje omotnice" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Pomicanje omotnice" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Instrument uÄitan." + +#: app/xm.c:769 +#, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "" + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Ne mogu otvoriti datoteku" + +#: app/xm.c:1215 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +msgid "Error while loading pattern order table." +msgstr "" + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "" + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "" + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "" + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "" + +#: app/xm.c:1761 app/xm.c:1787 +msgid "Error during saving pattern!" +msgstr "" + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "" + +#: app/midi-settings.c:414 +#, fuzzy +msgid "Channel" +msgstr "Kanali:" + +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "" + +#: app/midi-settings.c:434 +#, fuzzy +msgid "Port number" +msgstr "Porta gore" + +#: app/midi-settings.c:453 +#, fuzzy +msgid "Input" +msgstr "Instr" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "" + +#: app/midi-settings.c:468 +#, fuzzy +msgid "Output" +msgstr "UreÄ‘ivanje Izlaz" + +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "" + +#: app/midi-settings.c:492 +#, fuzzy +msgid "Misc" +msgstr "Mikseri" + +#: app/midi-settings.c:532 +#, fuzzy +msgid "MIDI Configuration" +msgstr "_MIDI PodeÅ¡avanje..." + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Uzorak" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "_Traka" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_Ubij biljeÅ¡ke" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "_Ubaci traku" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "_IzbriÅ¡i traku" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "Prevelik cmd vrijednost" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Smanjena cmd vrijednost" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "O_Äisti oznaÄeni blok" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "Interpolirani efekti" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Datoteka" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_Otvori..." + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Snimi _kao..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Snimi Modul kao _WAV..." + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "Snimi XM bez primjera..." + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Modul" + +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "OÄisti _Sve" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "OÄisti _Samo Uzorke" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Optimiziraj Modul" + +#: soundtracker.glade:346 +msgid "_Set Optimal Amplification" msgstr "" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "" +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Uredi" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "_Jazz Uredi mod" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "Premj_eÅ¡tanje..." + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Uzorak" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "_Traka" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Selekcija" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "_OznaÄi mod" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Mjenjati pola-oznake gore" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Mjenjati pola-oznake dolje" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Mjenjati oktavu gore" + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Mjenjati oktavu dolje" + +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "_Uzorak" + +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "_Kopiraj Trenutni u NekoriÅ¡teni Uzorak" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "" +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_NaÄ‘i nekoriÅ¡tene Uzorke" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "" +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Kopiraj Trenutni u NekoriÅ¡teni Uzorak" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "" +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "_Kopiraj Trenutni u NekoriÅ¡teni Uzorak" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" msgstr "" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "" +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "O_Äisti NekoriÅ¡tene Uzorke" -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "" +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "_Pakiraj Uzorke" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "" +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "_Kopiraj Trenutni u NekoriÅ¡teni Uzorak" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "" +#: soundtracker.glade:753 +#, fuzzy +msgid "_Expand Current Pattern" +msgstr "_Kopiraj Trenutni u NekoriÅ¡teni Uzorak" -#: app/track-editor.c:138 -msgid "Panning slide" +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" msgstr "" -#: app/track-editor.c:139 -msgid "LP filter resonance" +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" msgstr "" -#: app/track-editor.c:140 -msgid "Multi retrig note" +#: soundtracker.glade:789 +msgid "_Mute / Unmute Current Track" msgstr "" -#: app/track-editor.c:142 -msgid "Tremor" +#: soundtracker.glade:798 +msgid "_Unmute All Tracks" msgstr "" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "" +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "Trenutna poz" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Instrument" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "UÄitaj XI" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "" +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "Snimi XI" -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "" +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_OÄisti Trenutni" -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_Brisanje NekoriÅ¡tenih Instrumenata" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Opcije" -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Prikaz _Osciloskopa" -#: app/track-editor.c:161 -msgid "Retrig note" +#: soundtracker.glade:896 +msgid "_Loop playback" msgstr "" -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "" +#: soundtracker.glade:905 +#, fuzzy +msgid "_Tracker" +msgstr "_Traka" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" +#: soundtracker.glade:913 +msgid "_Flicker-free Scrolling" msgstr "" -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "_PrijaÅ¡nje pismo" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "_Slijedeće pismo" -#: app/track-editor.c:166 -msgid "Pattern delay" +#: soundtracker.glade:944 +msgid "Change Preferred _Accidental Type" msgstr "" -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "" +#: soundtracker.glade:953 +#, fuzzy +msgid "Change Effect Column _Editing Direction" +msgstr "Horizontalni efekt stupac ureÄ‘enje" -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "PodeÅ¡avanje Tipkovnice" -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "PodeÅ¡avanje Zvuka" -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "GUI PodeÅ¡avanje" -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "_MIDI PodeÅ¡avanje..." -#: app/track-editor.c:184 -msgid "sine" +#: soundtracker.glade:1016 +msgid "_Disable Splash Screen" msgstr "" -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_Snimi Opcije sad" -#: app/track-editor.c:186 -msgid "square" -msgstr "" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "_Snimi Opcije na Izlazu" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, fuzzy, c-format -msgid "None ]" -msgstr "NiÅ¡ta" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_PomoÄ" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "_O..." -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "Prikaži _Savjete..." -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "_XM Efekti..." -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Sviraj Pjesmu" -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Sviraj Pjesmu" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "" +#~ msgid "SoundTracker Startup" +#~ msgstr "SoundTracker Podizanje" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Gore" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Dolje" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "BiljeÅ¡ka:" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "BiljeÅ¡ka ESD izlaz je neiskoriÅ¡ten u \n" +#~ "interaktivnom modu zbog dodavanja latency\n" +#~ "od ESD. Koristite OSS ili ALSA izlazne dodatke\n" +#~ "za ozbiljan rad." -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Nemože spojiti u ESD za izlazni zvuk:\n" +#~ "%s" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "Ove promjene neće utjecati dok ponove ne semplirate." -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Instrument Urednik" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "Traženi izlazni zvuÄni format nije podržan.\n" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "" +#~ msgid "OK" +#~ msgstr "U redu" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "" +#~ msgid "Cancel" +#~ msgstr "Odustani" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "" +#~ msgid "(%d bytes)" +#~ msgstr "(%d bajtova)" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Preostalo zvuk trajanje: %f mikrosekunde" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "" +#~ msgid "ALSA card number:" +#~ msgstr "ALSA broj kartice:" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Nemogu otvoriti ALSA ureÄ‘aj za ulaz zvuka (kartica:%d, ureÄ‘aj: %d):\n" +#~ "%s" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "Traženi izlazni zvuÄni parametri nisu podržani.\n" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Nemogu otvoriti ALSA ureÄ‘aj za izlaz zvuka (kartica:%d, ureÄ‘aj: %d):\n" +#~ "%s" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "" +#, fuzzy +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "Traženi izlazni zvuÄni parametri nisu podržani.\n" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "" +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "Nemogu otvoriti %s za zvuÄni izlaz:\n" +#~ "%s" -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "" +#, fuzzy +#~ msgid "soundtracker" +#~ msgstr "Koristi SoundTracker!" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "" +#~ msgid "Save Song" +#~ msgstr "Snimi Pjesmu" -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "" +#, fuzzy +#~ msgid "No" +#~ msgstr "NiÅ¡ta" -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "" +#~ msgid "Close" +#~ msgstr "Zatvori" -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Jesi li siguran da želiÅ¡ preko datoteke snimiti?" -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "" +#~ msgid "Load XM..." +#~ msgstr "UÄitaj XM..." -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "" +#~ msgid "Save XM..." +#~ msgstr "Snimi XM..." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "" +#~ msgid "Save song as XM..." +#~ msgstr "Snimi pjesmu kao XM..." -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "" +#~ msgid "Load Instrument..." +#~ msgstr "UÄitaj instrument..." -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "" +#~ msgid "Save Instrument..." +#~ msgstr "Snimi Instrument..." -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Ne mogu otvoriti datoteku" +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "Datoteka podeÅ¡avanja tipkovnice je nepotpuna.\n" +#~ "Molim koristi PodeÅ¡avnje Tipkovnice." -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "" +#~ msgid "Ok" +#~ msgstr "U redu" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" +#~ msgid "_Quit" +#~ msgstr "_Izlaz" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "" +#~ msgid "C_ut" +#~ msgstr "R_eži" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "" +#~ msgid "_Copy" +#~ msgstr "_Kopiraj" -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "" +#~ msgid "_Paste" +#~ msgstr "_Zaljepi" -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "" +#, fuzzy +#~ msgid "P_aste" +#~ msgstr "Umetni" -#: app/xm.c:1468 -msgid "Error during saving pattern!" -msgstr "" +#~ msgid "_Load XI..." +#~ msgstr "_UÄitaj XI..." -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "" +#~ msgid "_Save XI..." +#~ msgstr "_Snimi XI..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 #, fuzzy -msgid "Channel" -msgstr "Kanali:" +#~ msgid "Change effect column editing _direction" +#~ msgstr "Horizontalni efekt stupac ureÄ‘enje" -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "_PodeÅ¡avanje Tipkovnice" -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -#, fuzzy -msgid "Port number" -msgstr "Porta gore" +#~ msgid "_Audio Configuration..." +#~ msgstr "_PodeÅ¡avanje Zvuka..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -#, fuzzy -msgid "Input" -msgstr "Instr" +#~ msgid "_GUI Configuration..." +#~ msgstr "_GUI PodeÅ¡avanje..." -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "" +#~ msgid "_MIDI Configuration..." +#~ msgstr "_MIDI PodeÅ¡avanje..." -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -#, fuzzy -msgid "Output" -msgstr "UreÄ‘ivanje Izlaz" +#~ msgid "Load Sample..." +#~ msgstr "UÄitaj primjer..." -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "" +#~ msgid "Save WAV..." +#~ msgstr "Snimi WAV..." -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -#, fuzzy -msgid "Misc" -msgstr "Mikseri" +#~ msgid "Execute" +#~ msgstr "IzvrÅ¡i" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -#, fuzzy -msgid "MIDI Configuration" -msgstr "_MIDI PodeÅ¡avanje..." +#~ msgid "Apply" +#~ msgstr "Primijeni" + +#~ msgid "Drivers" +#~ msgstr "UpravljaÄi" -#~ msgid "Pattern" -#~ msgstr "Uzorak" +#~ msgid "Up" +#~ msgstr "Gore" -#~ msgid "Current pos" -#~ msgstr "Trenutna poz" +#~ msgid "Down" +#~ msgstr "Dolje" #~ msgid "`Save XM' saves all non-empty patterns" #~ msgstr "'Snimi XM' snimanje svih ne-praznih dijelova" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/it.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/it.gmo differ diff -Nru soundtracker-0.6.8/po/it.po soundtracker-1.0.2~pre2/po/it.po --- soundtracker-0.6.8/po/it.po 2006-02-25 13:25:07.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/it.po 2020-05-27 18:54:27.000000000 +0000 @@ -7,15 +7,23 @@ msgstr "" "Project-Id-Version: soundtracker-0.6.7-pre6\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2003-08-15 12:18+0200\n" "Last-Translator: Yuri Bongiorno \n" "Language-Team: Italian \n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "Output per la riproduzione" @@ -23,2098 +31,3693 @@ msgid "Editing Output" msgstr "Output per l'editing" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Campionamento" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "Modulo del driver" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "Modulo del mixer" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Descrizione" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "Configurazione dell'audio" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Driver" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Mixer" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Chiudi" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d byte)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Ritardo stimato dell'audio: %f microsecondi" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "Effetti _XM" -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." -msgstr "Questi cambiamenti hanno effetto dalla prossima riproduzione." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Frequenza del tracker" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Risoluzione:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Canali:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Frequenza [Hz]:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Dimensione del buffer:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines" +msgstr "Abilita l'evidenziazione delle righe" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "Numero della scheda ALSA:" - -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "Numero del device ALSA:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines highlighting" +msgstr "Abilita l'evidenziazione delle righe" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" -msgstr "" -"Impossibile aprire il device ALSA per l'input del suono (scheda:%d, device:%" -"d):\n" -"%s" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines" +msgstr "Abilita l'evidenziazione delle righe" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Il formato sonoro di output richiesto non è supportato.\n" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines highlighting" +msgstr "Abilita l'evidenziazione delle righe" -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "I parametri sonori di output richiesti non sono supportati.\n" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Selezione:" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Ritardo stimato dell'audio: %f millisecondi" +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Frequenza del tracker" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:47 +msgid "Notes, waveforms" msgstr "" -"Impossibile aprire il device ALSA per l'output del suono (scheda:%d, device:%" -"d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "I parametri di output richiesti non sono supportati.\n" +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" +msgstr "" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "Impossibile allestire i canali ALSA.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "Elimina" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "Errore di impostazione di Alsa.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "Elimina" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." -msgstr "" -"Notare che l'output di ESD non è utilizzabile in modo\n" -"interattivo a causa della latenza aggiunta\n" -"da ESD. Usare i plug-in di output OSS o ALSA\n" -"per i lavori seri." +#: app/colors.c:49 +#, fuzzy +msgid "Channel numbers, loops" +msgstr "Canali:" -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -"Impossibile connettersi a ESD per l'output del suono:\n" -"%s" - -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "non ci sono (ancora) impostazioni." -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Impossibile aprire il file per la scrittura." - -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." -msgstr "Questi cambiamenti hanno effetto dal prossimo campionamento." +#: app/colors.c:50 +msgid "Cursor idle" +msgstr "" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Device di input (es. «/dev/dsp»):" +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:51 +msgid "Cursor editing" msgstr "" -"Impossibile aprire %s per il campionamento:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d campioni)" +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "Device di output (es. «/dev/dsp»):" +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "Ingrandisci la selezione" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" msgstr "" -"Impossibile aprire %s per l'output del suono:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" -msgstr "transport master" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "Il brano ricomincia da questa posizione" -#: app/drivers/jack-output.c:259 -msgid "declick" -msgstr "declick" +#: app/colors.c:53 +msgid "Mixer position indicator" +msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" -msgstr "In esecuizione a %d Hz con %d frame" +#: app/colors.c:54 +msgid "Zero line" +msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" -msgstr "Jack server è in esecuzione?" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/jack-output.c:327 -#, c-format -msgid "soundtracker" -msgstr "soundtracker" +#: app/colors.c:56 +msgid "White keys" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "out_1" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "out_2" +#: app/colors.c:57 +msgid "Black keys" +msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" -msgstr "Device di output (es. «/dev/audio»):" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" +msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: app/colors.c:58 +msgid "White keys pressed" +msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: impossibile riprodurre (%s)" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: impossibile gestire %dHz (%s)" +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s: la codifica sonora richiesta non è supportata.\n" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 -#, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: impossibile impostare la dimensione del blocco (%s)" +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" -msgstr "Device di input (es. «/dev/audio»):" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: impossibile registrare (%s)" +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Lunghezza" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Attuale" +#: app/colors.c:395 +#, fuzzy, c-format +msgid "%s colors configuration" +msgstr "Configurazione della tastiera" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Offset" +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Capovolgi" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Valore" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Inserisci" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Elimina" +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" msgstr "" -"Editor\n" -"grafico\n" -"dell'inviluppo\n" -"solo nella\n" -"versione GNOME" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Sustain" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "Numero del device ALSA:" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Punto" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Ciclo" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Inizio" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +#, fuzzy +msgid "Unable to set channels number" +msgstr "Impossibile allestire i canali ALSA.\n" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Fine" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Carica il modulo" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Salva il modulo" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Riversa su WAV" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Salva il brano" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Carica il campione" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Salva il campione" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Carica lo strumento" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Salva lo strumento" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/file-operations.c:175 -msgid "File" -msgstr "File" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Operazione non supportata." +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Frequenza degli oscilloscopi" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d campioni)" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Frequenza del tracker" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "Configurazione della GUI" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "Righe numerate in esadecimale" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Usa le lettere maiuscole per i numeri esadecimali" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8 bit" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" -msgstr "Modifica asincrona del pattern (stile IT)" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16 bit" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" -msgstr "Il comando Fxx aggiorna i cursori Tempo/BPM" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "Mono" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" -msgstr "Va nel tracker dopo il caricamento/salvataggio" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "Stereo" -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" -msgstr "Salva la geometria della finestra all'uscita" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "Questi cambiamenti hanno effetto dalla prossima riproduzione." -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" -msgstr "Usa il nome di nota B invece di H" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "Questi cambiamenti hanno effetto dal prossimo campionamento." -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:829 +msgid "Device:" msgstr "" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Dimensione del buffer degli oscilloscopi [MB]" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Formato della traccia:" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Risoluzione:" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." -msgstr "Pronto." +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Canali:" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Riproduzione del brano in corso..." +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Frequenza [Hz]:" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Riproduzione del pattern in corso..." +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Dimensione del buffer:" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Caricamento del modulo in corso..." +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "Numero di canali:" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Modulo caricato." +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Ritardo stimato dell'audio: %f millisecondi" -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Salvataggio del modulo in corso..." +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." +msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Modulo salvato." +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" +msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "Caricamento del campione in corso..." +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Campione caricato." +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Salvataggio del campione in corso..." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Campione salvato." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "Caricamento dello strumento in corso..." +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Strumento caricato." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Salvataggio dello strumento in corso..." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Strumento salvato." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Salvataggio del brano in corso..." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "Brano salvato." +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "Errore durante il caricamento dei pattern." -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Domanda" +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "Si" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "No" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Annulla" +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Attenzione" +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "Errore" +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" -msgstr "Configurazione delle righe evidenziate" +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui.c:301 -msgid "Highlight rows (major / minor):" -msgstr "Righe evidenziate (maggiore/minore):" +#: app/drivers/alsa1x.c:1328 +#, fuzzy +msgid "Unable to enable timestamping for playback" +msgstr "Impossibile allestire i canali ALSA.\n" -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" -msgstr "" +#: app/drivers/alsa1x.c:1329 +#, fuzzy +msgid "Unable to enable timestamping for capture" +msgstr "Impossibile allestire i canali ALSA.\n" -#: app/gui.c:506 -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" -msgstr "" +#: app/drivers/alsa1x.c:1335 +#, fuzzy +msgid "Unable to set timestamp type for playback" +msgstr "Impossibile allestire i canali ALSA.\n" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "Nessun file selezionato." +#: app/drivers/alsa1x.c:1336 +#, fuzzy +msgid "Unable to set timestamp type for capture" +msgstr "Impossibile allestire i canali ALSA.\n" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" msgstr "" -"Liberarsi dell'attuale progetto?\n" -"Si perdono i dati non salvati." -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Sovrascrivere veramente il file?" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "" -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "Errore durante l'apertura del file del pattern." +#: app/drivers/alsa1x.c:1352 +#, fuzzy +msgid "Unable to prepare playback" +msgstr "Impossibile allestire i canali ALSA.\n" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/alsa1x.c:1353 +#, fuzzy +msgid "Unable to prepare capture" +msgstr "Impossibile allestire i canali ALSA.\n" + +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" msgstr "" -"La lunghezza del pattern che è stata caricata non corrisponde con quella del " -"pattern attuale nel modulo.\n" -"Cambiare veramente la lunghezza del pattern attuale?" -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "Avvio di SoundTracker" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" +msgstr "" -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "Caricamento..." +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "" -#: app/gui.c:1804 -msgid "Use SoundTracker!" -msgstr "Usa SoundTracker" +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "non ci sono (ancora) impostazioni." -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Carica XM..." - -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Salva XM..." +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Riversa il modulo su file WAV..." +#: app/drivers/irix-output.c:178 +#, fuzzy +msgid "16 Bit output not supported." +msgstr "Operazione non supportata." -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "Salva il brano come XM..." +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "Operazione non supportata." -#: app/gui.c:1872 -msgid "Load current pattern..." -msgstr "Carica il pattern attuale..." +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." +msgstr "" +"Impossibile aprire %s per il campionamento:\n" +"%s" -#: app/gui.c:1874 -msgid "Save current pattern..." -msgstr "Salva il pattern attuale..." +#: app/drivers/oss.c:130 +#, fuzzy +msgid "OSS input: reading error" +msgstr "Cambiamento dello strumento" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Suona il brano" +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Suona il pattern" +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Ritardo stimato dell'audio: %f millisecondi" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Stop" +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d campioni)" -#: app/gui.c:1973 -msgid "Pat" -msgstr "Pat" +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "Device di input (es. «/dev/dsp»):" -#: app/gui.c:1979 -msgid "Edited pattern" -msgstr "Pattern modificato" +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "Device di output (es. «/dev/dsp»):" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" msgstr "" -"Se attivato, il pattern modificato non cambia quando si scorre la lista." -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Numero di canali:" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "" -#: app/gui.c:2025 -msgid "Pattern Length" -msgstr "Lunghezza del pattern" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"Impossibile aprire %s per il campionamento:\n" +"%s" -#: app/gui.c:2060 -msgid "Set preferred accidental type" -msgstr "Imposta il tipo di alterazione preferito" +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "Il formato sonoro di output richiesto non è supportato.\n" -#: app/gui.c:2066 -msgid "Measure" -msgstr "Battuta" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" +msgstr "In esecuizione a %d Hz con %d frame" -#: app/gui.c:2067 -msgid "Enable row highlighting" -msgstr "Abilita l'evidenziazione delle righe" +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "Jack server è in esecuzione?" -#: app/gui.c:2093 -msgid "Other..." -msgstr "Altro..." +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/gui.c:2129 -msgid "Change effect column editing direction" -msgstr "Cambia la direzione di modifica nella colonna degli effetti" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" -msgstr "Volume generale" +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" -msgstr "Intonazione" +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" -msgstr "Riporta l'intonazione al suo valore normale" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "declick" -#: app/gui.c:2216 -msgid "Editing" -msgstr "Modifica" +#: app/drivers/jack.c:610 +#, fuzzy +msgid "Jack server is not running or some error occured." +msgstr "Jack server è in esecuzione?" -#: app/gui.c:2223 -msgid "Octave" -msgstr "Ottava" +#: app/drivers/sdl-output.c:76 +#, fuzzy +msgid "Experimental SDL support." +msgstr "Operazione non supportata." -#: app/gui.c:2232 -msgid "Jump" -msgstr "Passo" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "Device di output (es. «/dev/audio»):" -#: app/gui.c:2241 -msgid "Instr" -msgstr "Strumento" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Campione" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "Benvenuto in SoundTracker" +#: app/drivers/sun-output.c:402 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "%s: impossibile gestire %dHz (%s)" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "%s: la codifica sonora richiesta non è supportata.\n" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "Dissolvenza" +#: app/drivers/sun-output.c:455 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "%s: impossibile impostare la dimensione del blocco (%s)" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "Velocità del vibrato" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "Profondità del vibrato" +#: app/drivers/sun-input.c:77 +#, fuzzy +msgid "SUN input: reading error" +msgstr "Cambiamento dello strumento" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "Sweep del vibrato" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Impossibile aprire il file." +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "Device di input (es. «/dev/audio»):" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sinusoidale" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Onda quadra" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "Sega giù" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "Sega su" +#: app/drivers/sun-input.c:273 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "%s: impossibile gestire %dHz (%s)" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Editor degli strumenti" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "%s: la codifica sonora richiesta non è supportata.\n" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Inviluppo del volume" +#: app/drivers/sun-input.c:332 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "%s: impossibile impostare la dimensione del blocco (%s)" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Inviluppo del pan" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Lunghezza" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Carica lo strumento..." - -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Salva lo strumento..." +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Attuale" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "Carica XI" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Offset" -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "Salva XI" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Valore" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Tipo di vibrato:" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Inserisci" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Nota:" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "Elimina" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Inizializza" +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"Editor\n" +"grafico\n" +"dell'inviluppo\n" +"solo nella\n" +"versione GNOME" -#: app/keys.c:57 -msgid "" -msgstr "" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Sustain" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "" -"Il tasto che inserisce la nota speciale «key off» per i moduli di " -"FastTracker." +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Punto" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." -msgstr "Il tasto che aumenta il valore del «passo»." +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "Ciclo" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." -msgstr "Il tasto che diminuisce il valore del «passo»." +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "Inizio" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "Tasti dell'ottava superiore..." +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Fine" -#: app/keys.c:146 +#: app/file-operations.c:127 +#, c-format msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" msgstr "" -"Questi sono i tasti della parte superiore della tastiera. Il do («c») è " -"normalmente il tasto alla destra del «Tab». Il resto dei tasti dovrebbe " -"essere ordinato come la tastiera del pianoforte, compresa la riga coi " -"numeri, quella sopra." -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Tasti dell'ottava inferiore..." +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." +#: app/file-operations.c:245 +msgid "All files" msgstr "" -"Questi sono i tasti della parte inferiore della tastiera. Il do («c») è " -"normalmente il primo tasto alla destra dello «shift» sinistro. Il resto dei " -"tasti dovrebbe essere ordinato come la tastiera del pianoforte, compresa la " -"riga sopra." -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "Altri tasti..." +#: app/file-operations.c:388 +msgid "File" +msgstr "File" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Altri tasti vari" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/keys.c:513 -msgid "Function" -msgstr "Funzione" +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Assegnazione" +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "Mixer" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Configurazione della tastiera" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "Configurazione della GUI" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Spiegazione del gruppo di tasti" +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Frequenza degli oscilloscopi" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Spiegazione del tasto" +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Frequenza del tracker" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Modificatori:" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Righe numerate in esadecimale" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Memorizza il tasto selezionato" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Usa le lettere maiuscole per i numeri esadecimali" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Memorizza tutti i tasti" +#: app/gui-settings.c:343 +#, fuzzy +msgid "FT2-like volume column" +msgstr "Scorrimento fine del volume in alto" -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" msgstr "" -"Premere la combinazione di tasti desiderata.\n" -"Cliccare sull'elenco a sinistra per annullare" - -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Ok" - -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Applica" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" msgstr "" -"Il file di configurazione della tastiera è difettoso.\n" -"Usare la finestra di dialogo «Configurazione della tastiera»." -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" -msgstr "CH%02d" +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" -msgstr "Passa rapidamente al canale %d" +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" +msgstr "Modifica asincrona del pattern (stile IT)" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" msgstr "" -"Configurazione automatica del tasto fallita.\n" -"Usare «Configurazione della tastiera»\n" -"nel menù «Impostazioni»." -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -"Sicuri di volerlo fare?\n" -"Si perdono i dati non salvati." -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" msgstr "" -"Uscire veramente?\n" -"Si perdono i dati non salvati." -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Apri" +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "" -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Sa_lva come..." +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Salva il modulo come _WAV" +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "Il comando Fxx aggiorna i cursori Tempo/BPM" -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Salva XM senza i campioni" +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "_Esci" +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "Va nel tracker dopo il caricamento/salvataggio" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Cancella _tutto" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Cancella solamente i _pattern" +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" +msgstr "Salva la geometria della finestra all'uscita" -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Ottimizza il modulo" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "Usa il nome di nota B invece di H" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "_Taglia" - -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Copia" - -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "_Incolla" +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Elimina le note" +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." +msgstr "" -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "I_nserisci una traccia" +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Selezione:" -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "Eli_mina la traccia" +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Dimensione del buffer degli oscilloscopi [MB]" -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Aumenta il valore «cmd»" +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Campione caricato." -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Diminuisci il valore «cmd»" +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "" -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "Modalità _selezione" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Modifica" -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "Annu_lla la selezione" +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "" -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "Interpola gli _effetti" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "" -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Alza di un semitono" +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "" -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Abbassa di un semitono" +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Alza di un'ottava" +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Formato della traccia:" -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Abbassa di un'ottava" +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:526 +#: app/gui-settings.c:573 #, fuzzy -msgid "P_aste" -msgstr "Incolla" +msgid "Tracker colors configuration" +msgstr "Configurazione della tastiera" -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "Modalità _Jazz Edit" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "Pronto." -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "" +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Riproduzione del brano in corso..." -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "Trasp_osizione" +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Riproduzione del pattern in corso..." -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "_Pattern" +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "Caricamento del modulo in corso..." -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "T_raccia" +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "Modulo caricato." -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Selezione" - -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "Tr_ova i pattern non usati" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Salvataggio del modulo in corso..." -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Copia l'attuale in un pattern non usato" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "Modulo salvato." -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "Cance_lla i pattern non usati" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "Caricamento del campione in corso..." -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "Com_patta i pattern" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Campione caricato." -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "_Salva il pattern attuale" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Salvataggio del campione in corso..." -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "Ca_rica il pattern" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Campione salvato." -#: app/menubar.c:599 -#, fuzzy -msgid "Sh_rink Current Pattern" -msgstr "L'attuale pattern" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "Caricamento dello strumento in corso..." -#: app/menubar.c:601 -#, fuzzy -msgid "_Expand Current Pattern" -msgstr "_Salva il pattern attuale" +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Strumento caricato." -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" -msgstr "" +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Salvataggio dello strumento in corso..." -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" -msgstr "" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Strumento salvato." -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "Ca_rica XI" +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Salvataggio del brano in corso..." -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_Salva XI" +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "Brano salvato." -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_Cancella l'attuale" +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "Errore" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "Eli_mina gli strumenti non usati" +#: app/gui-subs.c:414 +msgid "Question" +msgstr "Domanda" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "Scorrimento _fluido" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "Tipo di carattere _precedente" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" -#: app/menubar.c:642 -msgid "_Next font" -msgstr "Tipo di carattere _successivo" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" -msgstr "Cambia il tipo di _alterazione preferita" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Attenzione" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" -msgstr "Cambia la _direzione di modifica nella colonna degli effetti" +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "Configurazione della GUI" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Mostra gli _oscilloscopi" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "Configurazione delle righe evidenziate" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Tracker" +#: app/gui.c:260 +msgid "Highlight rows (major / minor):" +msgstr "Righe evidenziate (maggiore/minore):" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "_Configurazione della tastiera" - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "Configurazione dell'_audio" - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "Configurazione della _GUI" - -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "Configurazione _MIDI" +#: app/gui.c:330 +msgid "" +msgstr "" -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "Disabilita la schermata di avvio" +#: app/gui.c:451 +#, fuzzy +msgid "Saving module failed" +msgstr "Salvataggio del modulo in corso..." -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Salva le impostazioni adesso" +#: app/gui.c:535 +msgid "File output" +msgstr "" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Salva le impostazioni all'_uscita" +#: app/gui.c:612 +#, fuzzy +msgid "Can't open file for writing" +msgstr "Impossibile aprire il file per la scrittura." -#: app/menubar.c:690 -msgid "_About..." -msgstr "I_nformazioni" +#: app/gui.c:618 +#, fuzzy +msgid "Can't change file ownership" +msgstr "Impossibile aprire il file per la scrittura." -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Mostra i suggerimen_ti" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "Effetti _XM" +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "" -#: app/menubar.c:704 -msgid "_File" -msgstr "_File" +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/menubar.c:705 -msgid "_Module" -msgstr "Mo_dulo" +#: app/gui.c:715 +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Modifica" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"Liberarsi dell'attuale progetto?\n" +"Si perdono i dati non salvati." -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Strumento" +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "Errore durante l'apertura del file del pattern." -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Impostazioni" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" +msgstr "" +"La lunghezza del pattern che è stata caricata non corrisponde con quella del " +"pattern attuale nel modulo.\n" +"Cambiare veramente la lunghezza del pattern attuale?" -#: app/menubar.c:711 -msgid "_Help" -msgstr "A_iuto" +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "Inizio" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" -msgstr "" -"Mixer interi, nessuna interpolazione, nessun filtro, massima lunghezza del " -"campione 1M" +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "Caricamento..." -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Nome dello strumento" +#: app/gui.c:2195 +msgid "Use SoundTracker!" +msgstr "Usa SoundTracker" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#smpl" +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"Uscire veramente?\n" +"Si perdono i dati non salvati." -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Nome del campione" +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Lineare" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "Caricamento..." -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Informazioni sul modulo" +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Nome del brano:" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Frequenze:" +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "Modalità ProTracker" +#: app/gui.c:2400 +#, fuzzy +msgid "Extended pattern (*.xp)" +msgstr "Pattern modificato" -#: app/module-info.c:395 +#: app/gui.c:2408 #, c-format msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" msgstr "" -"Pattern non usati: %d (usati: %d)\n" -"Strumenti non usati: %d (usati: %d)\n" -"\n" -"Cancellare i non usati e riordinare la lista?\n" - -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" -msgstr "Inserisce il pattern che è stato modificato" - -#: app/playlist.c:535 -msgid "Remove current playlist entry" -msgstr "Rimuove la voce attuale della lista" -#: app/playlist.c:543 -msgid "Add + Cpy" -msgstr "Aggiungi e copia" +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Carica il modulo" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" msgstr "" -"Aggiunge un nuovo pattern dopo la posizione attuale e ci copia dentro il " -"pattern in uso" - -#: app/playlist.c:548 -msgid "Add Free" -msgstr "Aggiungi nuovo" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" -msgstr "Aggiunge un pattern nuovo dopo la posizione attuale" +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Salva il modulo" -#: app/playlist.c:560 +#: app/gui.c:2434 #, fuzzy -msgid "Len" -msgstr "Lunghezza" +msgid "Save the current module" +msgstr "Salva il pattern attuale..." -#: app/playlist.c:574 -msgid "Song length" -msgstr "Lunghezza del brano" +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Riversa su WAV" -#: app/playlist.c:580 +#: app/gui.c:2436 #, fuzzy -msgid "Rstrt" -msgstr "Strumento" - -#: app/playlist.c:593 -msgid "Song restart position" -msgstr "Il brano ricomincia da questa posizione" +msgid "Render the current module as WAV file" +msgstr "Riversa il modulo su file WAV..." -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" -msgstr "" -"Una directory di nome «.soundtracker» è stata creata nella\n" -"propria home per salvare i file di configurazione.\n" +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Salva XM senza i campioni" -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Nessun ciclo" +#: app/gui.c:2439 +msgid "Load current pattern..." +msgstr "Carica il pattern attuale..." -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "Ping Pong" +#: app/gui.c:2440 +msgid "Save current pattern..." +msgstr "Salva il pattern attuale..." -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8 bit" +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Suona il brano" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16 bit" +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Suona il pattern" -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Editor del campione" +#: app/gui.c:2525 +msgid "Play From Cursor" +msgstr "" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Volume" +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "Suona il brano" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Pan" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Stop" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Regolazione fine" +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Selezione:" +#: app/gui.c:2562 +msgid "Pat" +msgstr "Pat" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Niente" +#: app/gui.c:2568 +msgid "Edited pattern" +msgstr "Pattern modificato" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Tutto" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "" +"Se attivato, il pattern modificato non cambia quando si scorre la lista." -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Lunghezza:" +#: app/gui.c:2583 +msgid "Pattern Length" +msgstr "Lunghezza del pattern" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Imposta come ciclo" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "Nota relativa" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Numero di canali:" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Carica il campione..." +#: app/gui.c:2632 +msgid "Set preferred accidental type" +msgstr "Imposta il tipo di alterazione preferito" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Salva WAV..." +#: app/gui.c:2638 +msgid "Measure" +msgstr "Battuta" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "Salva la regione come WAV..." +#: app/gui.c:2639 +msgid "Enable row highlighting" +msgstr "Abilita l'evidenziazione delle righe" -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "Salva WAV" +#: app/gui.c:2660 +msgid "Other..." +msgstr "Altro..." -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "Salva la regione" +#: app/gui.c:2687 +msgid "Change effect column editing direction" +msgstr "Cambia la direzione di modifica nella colonna degli effetti" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Monitor" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" +msgstr "Volume generale" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Dissolvenza" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "" -#: app/sample-editor.c:425 -#, fuzzy -msgid "Trim" -msgstr "Tremor" +#: app/gui.c:2740 +msgid "Pitchbend" +msgstr "Intonazione" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Ingrandisci la selezione" +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "Riporta l'intonazione al suo valore normale" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Visualizza tutto" +#: app/gui.c:2760 +msgid "Editing" +msgstr "Modifica" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Ingrandimento (+50%)" +#: app/gui.c:2767 +msgid "Octave" +msgstr "Ottava" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Ingrandimento (-50%)" +#: app/gui.c:2776 +msgid "Jump" +msgstr "Passo" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Capovolgi" +#: app/gui.c:2785 +msgid "Instr" +msgstr "Strumento" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Taglia" +#: app/gui.c:2801 +msgid "Sample" +msgstr "Campione" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Rimuovi" +#: app/gui.c:2827 +msgid "dB" +msgstr "" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Copia" +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "Benvenuto in SoundTracker" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Incolla" +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "Cancella campione" +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Impossibile aprire il file." -#: app/sample-editor.c:500 +#: app/instrument-editor.c:209 #, fuzzy -msgid "Crop" -msgstr "Copia" - -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(nessuna selezione)" +msgid "Saving instrument failed." +msgstr "Salvataggio dello strumento in corso..." -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "Memoria esaurita per il copybuffer.\n" +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "Strumento attuale" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sinusoidale" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." -msgstr "Memoria esaurita per i dati del campione." +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Onda quadra" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Errore di lettura." +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "Sega giù" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Carica il campione stereo" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "Sega su" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" msgstr "" -"È stato selezionato un campione stereo.\n" -"(SoundTracker può gestire solo campioni mono.)\n" -"\n" -"Scegliere quale canale caricare:" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Sinistro" - -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Mescolati" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Editor degli strumenti" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Destro" +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Inviluppo del volume" -#: app/sample-editor.c:1575 -msgid "Signed" -msgstr "Con segno" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Inviluppo del pan" -#: app/sample-editor.c:1575 -msgid "Unsigned" -msgstr "Senza segno" +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Carica lo strumento" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "Little endian" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" -#: app/sample-editor.c:1576 -msgid "Big-Endian" -msgstr "Big endian" +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Salva lo strumento" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "Mono" +#: app/instrument-editor.c:297 +#, fuzzy +msgid "Save the current instrument" +msgstr "Strumento attuale" -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "Stereo" +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "Carica XI" -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "Carica campione raw" +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "Salva XI" -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" -msgstr "" -"È stato selezionato un campione che non è in\n" -"un formato conosciuto. È possibile comunque caricarlo come raw.\n" -"\n" -"Scegliere un formato:" +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "Scorrimento del volume in alto" -#: app/sample-editor.c:1623 -msgid "Word format:" -msgstr "Formato word:" +#: app/instrument-editor.c:344 +#, fuzzy +msgid "Vibrato:" +msgstr "Vibrato" -#: app/sample-editor.c:1670 -msgid "Sampling Rate:" -msgstr "Frequenza di campionamento:" +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "" -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" - -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "OK" +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "Velocità del vibrato" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Impossibile leggere il campione" +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "Profondità del vibrato" -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." -msgstr "Il campione è troppo lungo per l'attuale mixer. Lo carico comunque." +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "Sweep del vibrato" -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Può solo gestire campioni da 8 e 16 bit fino a 2 canali" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Nota:" -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "Selezionare prima una regione." +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "Inizializza" -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Inizia il campionamento" +#: app/keys.c:58 +msgid "" +msgstr "" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "Nessun driver di campionamento libero" +#: app/keys.c:134 +msgid "KOFF" +msgstr "" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Finestra di campionamento" +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "" +"Il tasto che inserisce la nota speciale «key off» per i moduli di " +"FastTracker." -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" -msgstr "Memoria esaurita durante il campionamento" +#: app/keys.c:136 +msgid "JMP+" +msgstr "" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "Il tasto che aumenta il valore del «passo»." -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/keys.c:138 +msgid "JMP-" msgstr "" -"Il campione registrato è troppo lungo per l'attuale mixer. Viene usato " -"comunque." -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normalizza" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "Il tasto che diminuisce il valore del «passo»." -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Esegui" +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Suona il brano" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Dissolvenza" +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Salvataggio del modulo in corso..." -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Esegue una dissolvenza lineare del volume sulla selezione" +#: app/keys.c:142 +msgid "RecMod" +msgstr "" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Sinistra [%]:" +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Riproduzione del pattern in corso..." -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "50" +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "Suona il pattern" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "200" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Suona il pattern" -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Destra [%]:" +#: app/keys.c:146 +msgid "RecPat" +msgstr "" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Riproduzione del pattern in corso..." + +#: app/keys.c:148 +msgid "PlayCur" msgstr "" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/keys.c:148 +msgid "Play module from cursor." msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/keys.c:150 +msgid "RecCur" msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Riproduzione del pattern in corso..." + +#: app/keys.c:152 +#, fuzzy +msgid "PlayRow" +msgstr "Suona il brano" + +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Carica il pattern attuale..." + +#: app/keys.c:154 +msgid "PlayBlk" msgstr "" -#: app/tips-dialog.c:50 +#: app/keys.c:154 +#, fuzzy +msgid "Play selected block." +msgstr "Memorizza il tasto selezionato" + +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Tasti dell'ottava superiore..." + +#: app/keys.c:167 msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." msgstr "" -"Benvenuti in SoundTracker\n" -"\n" -"Se non si ha familiarità con questo tipo di programma, è meglio\n" -"prima prendere qualche file XM o MOD e giocarci un po'." +"Questi sono i tasti della parte superiore della tastiera. Il do («c») è " +"normalmente il tasto alla destra del «Tab». Il resto dei tasti dovrebbe " +"essere ordinato come la tastiera del pianoforte, compresa la riga coi " +"numeri, quella sopra." -#: app/tips-dialog.c:55 +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Tasti dell'ottava inferiore..." + +#: app/keys.c:173 msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." msgstr "" -"È possibile rendere l'edit di SoundTracker più sollecito all'input della\n" -"tastiera diminuendo la dimensione del buffer dell'oggetto\n" -"«Editing» in «Configurazione dell'audio»." +"Questi sono i tasti della parte inferiore della tastiera. Il do («c») è " +"normalmente il primo tasto alla destra dello «shift» sinistro. Il resto dei " +"tasti dovrebbe essere ordinato come la tastiera del pianoforte, compresa la " +"riga sopra." + +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "Altri tasti..." + +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Altri tasti vari" + +#: app/keys.c:578 +msgid "Function" +msgstr "Funzione" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "Assegnazione" + +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Configurazione della tastiera" + +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Spiegazione del gruppo di tasti" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Spiegazione del tasto" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Modificatori:" + +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "Memorizza il tasto selezionato" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "Memorizza tutti i tasti" -#: app/tips-dialog.c:59 +#: app/keys.c:702 msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +"Please press the desired key combination!\n" +"Click into left list to cancel" msgstr "" -"È possibile regolare i punti del ciclo nell'editor del campione tenendo\n" -"premuto «shift» e usando i tasti destro e sinistro del mouse.\n" +"Premere la combinazione di tasti desiderata.\n" +"Cliccare sull'elenco a sinistra per annullare" + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "CH%02d" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "Passa rapidamente al canale %d" -#: app/tips-dialog.c:62 +#: app/keys.c:1028 msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." msgstr "" -"Per saperne di più sul tracking e su come funzionano i vari comandi,\n" -"consultare il sito web: http://www.united-trackers.org/" +"Configurazione automatica del tasto fallita.\n" +"Usare «Configurazione della tastiera»\n" +"nel menù «Impostazioni»." -#: app/tips-dialog.c:65 +#: app/menubar.c:115 +#, c-format msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" msgstr "" -"È possibile assegnare i campioni di uno strumento ai singoli tasti " -"attivando\n" -"il suo campione e poi cliccando sulla tastiera nella pagina dell'editor\n" -"degli strumenti." -#: app/tips-dialog.c:69 +#: app/menubar.c:126 msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." msgstr "" -"Se il cursore è intrappolato nella voce di un campo numerico,\n" -"basta premere «Invio» o «Tab» per liberarlo." -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "Suggerimento del giorno di SoundTracker" +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"Sicuri di volerlo fare?\n" +"Si perdono i dati non salvati." -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Suggerimento precedente" +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "" +"Mixer interi, nessuna interpolazione, nessun filtro, massima lunghezza del " +"campione 1M" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Suggerimento successivo" +#: app/mixers/kbfloat.c:838 +#, fuzzy +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" +"Mixer interi, nessuna interpolazione, nessun filtro, massima lunghezza del " +"campione 1M" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Mostra un suggerimento la prossima volta" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "Arpeggio" +#: app/module-info.c:63 app/module-info.c:64 +#, fuzzy +msgid "Cyclic" +msgstr "declick" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "Porta up" +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" + +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" + +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" + +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" + +#: app/module-info.c:481 +msgid "Period" +msgstr "" + +#: app/module-info.c:484 +msgid "s" +msgstr "" + +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Nota:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Nome dello strumento" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#smpl" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Nome del campione" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "Lineare" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Informazioni sul modulo" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Nome del brano:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Frequenze:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "Modalità ProTracker" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Editor degli strumenti" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Lo strumento attuale" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Salva lo strumento" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "Scambia 1 <-> 2" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Regolazione fine" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "Nota relativa" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" +"Pattern non usati: %d (usati: %d)\n" +"Strumenti non usati: %d (usati: %d)\n" +"\n" +"Cancellare i non usati e riordinare la lista?\n" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "Inserisce il pattern che è stato modificato" + +#: app/playlist.c:511 +msgid "Remove current playlist entry" +msgstr "Rimuove la voce attuale della lista" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "Aggiungi e copia" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" +"Aggiunge un nuovo pattern dopo la posizione attuale e ci copia dentro il " +"pattern in uso" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "Aggiungi nuovo" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "Aggiunge un pattern nuovo dopo la posizione attuale" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Lunghezza" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "Lunghezza del brano" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Strumento" + +#: app/playlist.c:567 +msgid "Song restart position" +msgstr "Il brano ricomincia da questa posizione" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"Una directory di nome «.soundtracker» è stata creata nella\n" +"propria home per salvare i file di configurazione.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Nessun ciclo" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "Ping Pong" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8 bit" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16 bit" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Editor del campione" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "Volume" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Pan" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Selezione:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "Niente" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Tutto" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Lunghezza:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "Imposta come ciclo" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Carica il campione" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "Salva XM senza i campioni" + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Salva il campione" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "Salva XM senza i campioni" + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "Salva la regione come WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "Salva WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "Salva la regione" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Dissolvenza" + +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "Tremor" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "Ingrandisci la selezione" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "Visualizza tutto" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "Ingrandimento (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "Ingrandimento (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Capovolgi" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Taglia" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Rimuovi" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Copia" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Incolla" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "Cancella campione" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Copia" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(nessuna selezione)" + +#: app/sample-editor.c:1279 +#, fuzzy +msgid "Out of memory for copybuffer." +msgstr "Memoria esaurita per il copybuffer.\n" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Mescolati" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Sinistro" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Destro" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d campioni)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "Memoria esaurita per i dati del campione." + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "Errore di lettura." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"È stato selezionato un campione stereo.\n" +"(SoundTracker può gestire solo campioni mono.)\n" +"\n" +"Scegliere quale canale caricare:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "Inizia il campionamento" + +#: app/sample-editor.c:1756 +msgid "Signed" +msgstr "Con segno" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "Senza segno" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "Little endian" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "Big endian" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "Carica campione raw" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"È stato selezionato un campione che non è in\n" +"un formato conosciuto. È possibile comunque caricarlo come raw.\n" +"\n" +"Scegliere un formato:" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "Formato word:" + +#: app/sample-editor.c:1829 +msgid "Sampling Rate:" +msgstr "Frequenza di campionamento:" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Impossibile leggere il campione" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "Il campione è troppo lungo per l'attuale mixer. Lo carico comunque." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "Può solo gestire campioni da 8 e 16 bit fino a 2 canali" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Impossibile aprire il file per la scrittura." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "Selezionare prima una regione." + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "Nessun driver di campionamento libero" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Finestra di campionamento" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "Cancella _tutto" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Frequenza di campionamento:" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "Memoria esaurita durante il campionamento" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"È stato selezionato un campione stereo.\n" +"(SoundTracker può gestire solo campioni mono.)\n" +"\n" +"Scegliere quale canale caricare:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Carica il campione stereo" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"Il campione registrato è troppo lungo per l'attuale mixer. Viene usato " +"comunque." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Dissolvenza" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normalizza" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "Esegue una dissolvenza lineare del volume sulla selezione" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Sinistra [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "50" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "200" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Destra [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"Benvenuti in SoundTracker\n" +"\n" +"Se non si ha familiarità con questo tipo di programma, è meglio\n" +"prima prendere qualche file XM o MOD e giocarci un po'." + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"È possibile rendere l'edit di SoundTracker più sollecito all'input della\n" +"tastiera diminuendo la dimensione del buffer dell'oggetto\n" +"«Editing» in «Configurazione dell'audio»." + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"È possibile regolare i punti del ciclo nell'editor del campione tenendo\n" +"premuto «shift» e usando i tasti destro e sinistro del mouse.\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"Per saperne di più sul tracking e su come funzionano i vari comandi,\n" +"consultare il sito web: http://www.united-trackers.org/" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"È possibile assegnare i campioni di uno strumento ai singoli tasti " +"attivando\n" +"il suo campione e poi cliccando sulla tastiera nella pagina dell'editor\n" +"degli strumenti." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" +"Se il cursore è intrappolato nella voce di un campo numerico,\n" +"basta premere «Invio» o «Tab» per liberarlo." + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "Suggerimento precedente" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "Suggerimento successivo" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "Mostra un suggerimento la prossima volta" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "Suggerimento del giorno di SoundTracker" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "Arpeggio" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "Porta up" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "Porta down" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "Tone porta" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "Vibrato" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "Tone porta + scorrimento volume" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "Vibrato + scorrimento volume" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "Tremolo" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "Imposta il pan" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Campione salvato." + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "Imposta il volume" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Position jump" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "Pattern break" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "Imposta il tempo/bpm" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "Imposta il volume generale" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "Scorrimento del volume generale" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "Key off" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "Imposta la posizione dell'inviluppo" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "Scorrimento del pan" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "Risonanza del filtro passa basso" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "Multi retrig note" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "Tremor" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "Frequenza di taglio del filtro passa basso" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "Fine porta up" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "Fine porta down" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "Imposta il glissando" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "Imposta il controllo del vibrato" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "Imposta la regolazione fine" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "_Pattern" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "Imposta il controllo del tremolo" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "Retrig note" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "Scorrimento fine del volume in alto" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "Scorrimento fine del volume in basso" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "Taglia nota" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "Ritarda nota" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "Ritarda pattern" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "Scorrimento del volume in basso" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "Scorrimento del volume in alto" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "Imposta la velocità del vibrato" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "Scorrimento del pan a sinistra" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "Scorrimento del pan a destra" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "sinusoidale" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "piano inclinato" + +#: app/track-editor.c:203 +msgid "square" +msgstr "onda quadra" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +#, fuzzy +msgid "Extra fine porta up" +msgstr "Fine porta up" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "Fine porta down" + +#: app/track-editor.c:257 +msgid "None ]" +msgstr "Nessuno ]" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Jazz Edit:" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Tracker" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "Elenco tipi di carattere" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "Aggiungi tipo di carattere" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "Elimina tipo di carattere" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "Applica tipo di carattere" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "Seleziona tipo di carattere..." + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "L'intero brano" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "Tutti i pattern" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "L'attuale pattern" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "L'attuale traccia" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Lo strumento attuale" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "Tutti gli strumenti" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "Un semitono su" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "Un semitono giù" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "Un'ottava su" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "Un'ottava giù" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "Scambia 1 <-> 2" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "Cambia 1 -> 2" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "Strumenti per la trasposizione" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "Zona d'influenza dell'operazione:" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Trasposizione della nota" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Cambiamento dello strumento" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Strumento 1:" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Strumento attuale" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Strumento 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "La lunghezza del pattern è fuori intervallo: %d.\n" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Errore durante il caricamento dei pattern." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Strumento caricato." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Cambiamento dello strumento" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Inviluppo del pan" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Inviluppo del pan" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Inviluppo del pan" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "Tipo di vibrato %d non valido, uso il seno.\n" + +#: app/xm.c:678 app/xm.c:1233 +#, fuzzy +msgid "Out of memory error!" +msgstr "Memoria esaurita per il copybuffer.\n" + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "Il file non è uno strumento XI." + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Strumento caricato." + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Inviluppo del pan" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Inviluppo del pan" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Strumento caricato." + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "Tipo di vibrato %d non valido, uso il seno.\n" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "Errore durante il caricamento dei pattern." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Impossibile aprire il file" + +#: app/xm.c:1215 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "Errore durante il caricamento dei pattern." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"Il modulo contiene campioni che sono troppo lunghi per l'attuale mixer.\n" +"La lunghezza massima del campione è %d." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "Non è un XM di FastTracker nè un formato MOD supportato." + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "Errore durante la lettura o fine del file inattesa" + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "Versione del file del pattern non corretta o non supportata." + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "Lunghezza del pattern non corretta." + +#: app/xm.c:1761 app/xm.c:1787 +msgid "Error during saving pattern!" +msgstr "Errore durante il salvataggio del pattern." + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "Autoconnetti" + +#: app/midi-settings.c:414 +msgid "Channel" +msgstr "Canale" + +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "Numero client" + +#: app/midi-settings.c:434 +msgid "Port number" +msgstr "Numero porta" + +#: app/midi-settings.c:453 +msgid "Input" +msgstr "Input" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "Sarà sviluppato in futuro" + +#: app/midi-settings.c:468 +msgid "Output" +msgstr "Output" + +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "Livello di debug" + +#: app/midi-settings.c:492 +msgid "Misc" +msgstr "Misc" + +#: app/midi-settings.c:532 +msgid "MIDI Configuration" +msgstr "Configurazione MIDI" + +#: soundtracker.glade:10 +#, fuzzy +msgid "Pattern" +msgstr "_Pattern" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "T_raccia" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_Elimina le note" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "I_nserisci una traccia" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "Eli_mina la traccia" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "Aumenta il valore «cmd»" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Diminuisci il valore «cmd»" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "Annu_lla la selezione" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "Interpola gli _effetti" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_File" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_Apri" + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Sa_lva come..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Salva il modulo come _WAV" + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "Salva XM senza i campioni" + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "Mo_dulo" + +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "Cancella _tutto" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Cancella solamente i _pattern" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Ottimizza il modulo" + +#: soundtracker.glade:346 +#, fuzzy +msgid "_Set Optimal Amplification" +msgstr "Volume generale" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Modifica" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "Modalità _Jazz Edit" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "Trasp_osizione" + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Pattern" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "T_raccia" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Selezione" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "Modalità _selezione" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Alza di un semitono" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Abbassa di un semitono" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Alza di un'ottava" + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Abbassa di un'ottava" + +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "Ca_rica il pattern" + +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "_Salva il pattern attuale" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "Tr_ova i pattern non usati" + +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Copia l'attuale in un pattern non usato" + +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "_Salva il pattern attuale" + +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "" + +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "Cance_lla i pattern non usati" + +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "Com_patta i pattern" + +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "L'attuale pattern" + +#: soundtracker.glade:753 +#, fuzzy +msgid "_Expand Current Pattern" +msgstr "_Salva il pattern attuale" + +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" + +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" + +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "L'attuale traccia" + +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "L'attuale traccia" + +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "L'attuale traccia" -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "Porta down" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Strumento" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" -msgstr "Tone porta" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "Carica XI" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "Vibrato" +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "Salva XI" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" -msgstr "Tone porta + scorrimento volume" +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_Cancella l'attuale" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" -msgstr "Vibrato + scorrimento volume" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "Eli_mina gli strumenti non usati" -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "Tremolo" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Impostazioni" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "Imposta il pan" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Mostra gli _oscilloscopi" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Position jump" +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "Imposta il volume" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Tracker" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "Pattern break" +#: soundtracker.glade:913 +#, fuzzy +msgid "_Flicker-free Scrolling" +msgstr "Scorrimento _fluido" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "Imposta il tempo/bpm" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "Tipo di carattere _precedente" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Imposta il volume generale" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "Tipo di carattere _successivo" -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "Scorrimento del volume generale" +#: soundtracker.glade:944 +#, fuzzy +msgid "Change Preferred _Accidental Type" +msgstr "Cambia il tipo di _alterazione preferita" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "Key off" +#: soundtracker.glade:953 +#, fuzzy +msgid "Change Effect Column _Editing Direction" +msgstr "Cambia la direzione di modifica nella colonna degli effetti" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "Imposta la posizione dell'inviluppo" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "Configurazione della tastiera" -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "Scorrimento del pan" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "Configurazione dell'audio" -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "Risonanza del filtro passa basso" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "Configurazione della GUI" -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "Multi retrig note" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "Configurazione MIDI" -#: app/track-editor.c:142 -msgid "Tremor" -msgstr "Tremor" +#: soundtracker.glade:1016 +#, fuzzy +msgid "_Disable Splash Screen" +msgstr "Disabilita la schermata di avvio" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "Frequenza di taglio del filtro passa basso" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_Salva le impostazioni adesso" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "Fine porta up" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Salva le impostazioni all'_uscita" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "Fine porta down" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "A_iuto" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "Imposta il glissando" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "I_nformazioni" -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "Imposta il controllo del vibrato" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "Mostra i suggerimen_ti" -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "Imposta la regolazione fine" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "Effetti _XM" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Imposta inizio/fine ciclo" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Suona il brano" -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "Imposta il controllo del tremolo" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Suona il brano" -#: app/track-editor.c:161 -msgid "Retrig note" -msgstr "Retrig note" +#~ msgid "transport master" +#~ msgstr "transport master" -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "Scorrimento fine del volume in alto" +#~ msgid "SoundTracker Startup" +#~ msgstr "Avvio di SoundTracker" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "Scorrimento fine del volume in basso" +#~ msgid "Vibrato Type:" +#~ msgstr "Tipo di vibrato:" -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "Taglia nota" +#~ msgid "VolFade" +#~ msgstr "Dissolvenza" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "Ritarda nota" +#~ msgid "Set loop begin/loop" +#~ msgstr "Imposta inizio/fine ciclo" -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "Ritarda pattern" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Nota:" -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "Scorrimento del volume in basso" +#~ msgid "Error while loading instruments." +#~ msgstr "Errore durante il caricamento degli strumenti." -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "Scorrimento del volume in alto" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "Notare che l'output di ESD non è utilizzabile in modo\n" +#~ "interattivo a causa della latenza aggiunta\n" +#~ "da ESD. Usare i plug-in di output OSS o ALSA\n" +#~ "per i lavori seri." -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "Imposta la velocità del vibrato" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Impossibile connettersi a ESD per l'output del suono:\n" +#~ "%s" -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "Scorrimento del pan a sinistra" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "Questi cambiamenti hanno effetto dal prossimo campionamento." -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "Scorrimento del pan a destra" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Cambiamento dello strumento" -#: app/track-editor.c:184 -msgid "sine" -msgstr "sinusoidale" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "%s: la codifica sonora richiesta non è supportata.\n" -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "piano inclinato" +#~ msgid "%s: %s" +#~ msgstr "%s: %s" -#: app/track-editor.c:186 -msgid "square" -msgstr "onda quadra" +#~ msgid "%s: Cannot play (%s)" +#~ msgstr "%s: impossibile riprodurre (%s)" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, c-format -msgid "None ]" -msgstr "Nessuno ]" +#~ msgid "%s: Cannot record (%s)" +#~ msgstr "%s: impossibile registrare (%s)" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Jazz Edit:" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Versione XI 0x%x sconosciuta\n" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Tracker" +#~ msgid "out_1" +#~ msgstr "out_1" -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "Elenco tipi di carattere" +#~ msgid "out_2" +#~ msgstr "out_2" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "Aggiungi tipo di carattere" +#~ msgid "Monitor" +#~ msgstr "Monitor" -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "Elimina tipo di carattere" +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#smpl" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "Applica tipo di carattere" +#~ msgid "OK" +#~ msgstr "OK" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Su" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Giù" +#~ msgid "Cancel" +#~ msgstr "Annulla" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "Seleziona tipo di carattere..." +#~ msgid "(%d bytes)" +#~ msgstr "(%d byte)" -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "L'intero brano" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Ritardo stimato dell'audio: %f microsecondi" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Tutti i pattern" +#~ msgid "ALSA card number:" +#~ msgstr "Numero della scheda ALSA:" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "L'attuale pattern" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Impossibile aprire il device ALSA per l'input del suono (scheda:%d, " +#~ "device:%d):\n" +#~ "%s" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "L'attuale traccia" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "I parametri sonori di output richiesti non sono supportati.\n" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Lo strumento attuale" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Impossibile aprire il device ALSA per l'output del suono (scheda:%d, " +#~ "device:%d):\n" +#~ "%s" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Tutti gli strumenti" +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "I parametri di output richiesti non sono supportati.\n" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Un semitono su" +#~ msgid "Alsa setup error.\n" +#~ msgstr "Errore di impostazione di Alsa.\n" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "Un semitono giù" +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "Impossibile aprire %s per l'output del suono:\n" +#~ "%s" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "Un'ottava su" +#~ msgid "soundtracker" +#~ msgstr "soundtracker" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "Un'ottava giù" +#~ msgid "Save Song" +#~ msgstr "Salva il brano" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "Scambia 1 <-> 2" +#~ msgid "Yes" +#~ msgstr "Si" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "Cambia 1 -> 2" +#~ msgid "No" +#~ msgstr "No" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "Strumenti per la trasposizione" +#~ msgid "Close" +#~ msgstr "Chiudi" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Zona d'influenza dell'operazione:" +#~ msgid "No file selected." +#~ msgstr "Nessun file selezionato." -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Trasposizione della nota" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Sovrascrivere veramente il file?" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Cambiamento dello strumento" +#~ msgid "Load XM..." +#~ msgstr "Carica XM..." -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Strumento 1:" +#~ msgid "Save XM..." +#~ msgstr "Salva XM..." -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Strumento attuale" +#~ msgid "Save song as XM..." +#~ msgstr "Salva il brano come XM..." -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Strumento 2:" +#~ msgid "Load Instrument..." +#~ msgstr "Carica lo strumento..." -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "La lunghezza del pattern è fuori intervallo: %d.\n" +#~ msgid "Save Instrument..." +#~ msgstr "Salva lo strumento..." -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "Il file non è uno strumento XI." +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "Il file di configurazione della tastiera è difettoso.\n" +#~ "Usare la finestra di dialogo «Configurazione della tastiera»." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Versione XI 0x%x sconosciuta\n" +#~ msgid "Ok" +#~ msgstr "Ok" -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "Tipo di vibrato %d non valido, uso il seno.\n" +#~ msgid "_Quit" +#~ msgstr "_Esci" -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "Errore durante il caricamento dei pattern." +#~ msgid "C_ut" +#~ msgstr "_Taglia" -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Impossibile aprire il file" +#~ msgid "_Copy" +#~ msgstr "_Copia" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Errore durante il caricamento degli strumenti." +#~ msgid "_Paste" +#~ msgstr "_Incolla" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"Il modulo contiene campioni che sono troppo lunghi per l'attuale mixer.\n" -"La lunghezza massima del campione è %d." +#, fuzzy +#~ msgid "P_aste" +#~ msgstr "Incolla" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "Non è un XM di FastTracker nè un formato MOD supportato." +#~ msgid "_Load XI..." +#~ msgstr "Ca_rica XI" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "Errore durante la lettura o fine del file inattesa" +#~ msgid "_Save XI..." +#~ msgstr "_Salva XI" -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "Versione del file del pattern non corretta o non supportata." +#~ msgid "Change effect column editing _direction" +#~ msgstr "Cambia la _direzione di modifica nella colonna degli effetti" -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "Lunghezza del pattern non corretta." +#~ msgid "_Keyboard Configuration..." +#~ msgstr "_Configurazione della tastiera" -#: app/xm.c:1468 -msgid "Error during saving pattern!" -msgstr "Errore durante il salvataggio del pattern." +#~ msgid "_Audio Configuration..." +#~ msgstr "Configurazione dell'_audio" -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "Autoconnetti" +#~ msgid "_GUI Configuration..." +#~ msgstr "Configurazione della _GUI" -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -msgid "Channel" -msgstr "Canale" +#~ msgid "_MIDI Configuration..." +#~ msgstr "Configurazione _MIDI" -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "Numero client" +#~ msgid "Load Sample..." +#~ msgstr "Carica il campione..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" -msgstr "Numero porta" +#~ msgid "Save WAV..." +#~ msgstr "Salva WAV..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -msgid "Input" -msgstr "Input" +#~ msgid "8363" +#~ msgstr "8363" -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "Sarà sviluppato in futuro" +#~ msgid "Execute" +#~ msgstr "Esegui" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -msgid "Output" -msgstr "Output" +#~ msgid "Apply" +#~ msgstr "Applica" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "Livello di debug" +#~ msgid "Drivers" +#~ msgstr "Driver" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -msgid "Misc" -msgstr "Misc" +#~ msgid "Up" +#~ msgstr "Su" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -msgid "MIDI Configuration" -msgstr "Configurazione MIDI" +#~ msgid "Down" +#~ msgstr "Giù" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/ja.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/ja.gmo differ diff -Nru soundtracker-0.6.8/po/ja.po soundtracker-1.0.2~pre2/po/ja.po --- soundtracker-0.6.8/po/ja.po 2006-02-25 13:25:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/ja.po 2020-05-27 18:54:28.000000000 +0000 @@ -8,2339 +8,3932 @@ msgstr "" "Project-Id-Version: SoundTracker 0.3.10\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2003-08-05 06:54+0900\n" "Last-Translator: Junichi Uekawa \n" "Language-Team: Debian Japanese project \n" +"Language: ja\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=EUC-JP\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" -msgstr "±éÁÕ½ÐÎÏ" +msgstr "æ¼”å¥å‡ºåŠ›" #: app/audioconfig.c:69 msgid "Editing Output" -msgstr "ÊÔ½¸½ÐÎÏ" +msgstr "編集出力" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" -msgstr "¥µ¥ó¥×¥ê¥ó¥°" +msgstr "サンプリング" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" -msgstr "¥É¥é¥¤¥Ð¡¦¥â¥¸¥å¡¼¥ë" +msgstr "ドライãƒãƒ»ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" -msgstr "¥ß¥­¥µ¡¦¥â¥¸¥å¡¼¥ë" +msgstr "ミキサ・モジュール" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" -msgstr "ÀâÌÀ" +msgstr "説明" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" -msgstr "¥ª¡¼¥Ç¥£¥ªÀßÄê" +msgstr "オーディオ設定" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "¥É¥é¥¤¥Ð" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" -msgstr "¥ß¥­¥µ" +msgstr "ミキサ" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "ÊĤ¸¤ë" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d¥Ð¥¤¥È)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "¿äÄꥪ¡¼¥Ç¥£¥ª¡¦¥Ç¥£¥ì¥¤: %f¥Þ¥¤¥¯¥íÉÃ" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "_XM効果..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." -msgstr "±éÁÕ¤òºÆ³«¤¹¤ë¤Þ¤Ç¤³¤ì¤é¤ÎÊѹ¹¤Ï¤Ê¤µ¤ì¤Þ¤»¤ó¡£" +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "トラッカー周波数" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "²òÁüÅÙ:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "¥Á¥ã¥ó¥Í¥ë:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "¼þÇÈ¿ô [Hz]:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "¥Ð¥Ã¥Õ¥¡¡¦¥µ¥¤¥º:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines" +msgstr "è¡Œãƒã‚¤ãƒ©ã‚¤ãƒˆã‚’有効ã«" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "ALSA¥«¡¼¥ÉÈÖ¹æ:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines highlighting" +msgstr "è¡Œãƒã‚¤ãƒ©ã‚¤ãƒˆã‚’有効ã«" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "ALSA¥Ç¥Ð¥¤¥¹ÈÖ¹æ:" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines" +msgstr "è¡Œãƒã‚¤ãƒ©ã‚¤ãƒˆã‚’有効ã«" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" -msgstr "" -"¥µ¥¦¥ó¥É½ÐÎϤËÂФ·¤ÆALSA¥Ç¥Ð¥¤¥¹(¥«¡¼¥É:%d¡¢¥Ç¥Ð¥¤¥¹:%d)¤¬³«¤±¤Þ¤»¤ó¤Ç¤·¤¿:\n" -"%s" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines highlighting" +msgstr "è¡Œãƒã‚¤ãƒ©ã‚¤ãƒˆã‚’有効ã«" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Í׵ᤵ¤ì¤¿¥µ¥¦¥ó¥É½ÐÎÏ¥Õ¥©¡¼¥Þ¥Ã¥È¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Í׵ᤵ¤ì¤¿¥µ¥¦¥ó¥É½ÐÎÏ¥Õ¥©¡¼¥Þ¥Ã¥È¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "é¸æŠž:" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "¿äÄꥪ¡¼¥Ç¥£¥ª¡¦¥Ç¥£¥ì¥¤: %f¥ß¥êÉÃ" +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "トラッカー周波数" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:47 +msgid "Notes, waveforms" msgstr "" -"¥µ¥¦¥ó¥É½ÐÎϤËÂФ·¤ÆALSA¥Ç¥Ð¥¤¥¹(¥«¡¼¥É:%d¡¢¥Ç¥Ð¥¤¥¹:%d)¤¬³«¤±¤Þ¤»¤ó¤Ç¤·¤¿:\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "Í׵ᤵ¤ì¤¿¥Á¥ã¥ó¥Í¥ë½ÐÎϥѥé¥á¡¼¥¿¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" +msgstr "" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "ALSA¥Á¥ã¥ó¥Í¥ë¤ò½àÈ÷¤Ç¤­¤Þ¤»¤ó¡¥\n" +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "削除" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "ALSA¥»¥Ã¥È¥¢¥Ã¥×¥¨¥é¡¼¡¥\n" +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "削除" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:49 +#, fuzzy +msgid "Channel numbers, loops" +msgstr "ãƒãƒ£ãƒ³ãƒãƒ«:" + +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -"ESD¤òÄɲä·¤¿ÂÔ¤Á»þ´Ö¤Ç¡¢ESD½ÐÎϤ¬\n" -"ÂÐÏå⡼¥É¤Ç»È¤¨¤Ê¤¤¤Î¤ÇÃí°Õ¤·¤Æ¤¯\n" -"¤À¤µ¤¤¡£½ÅÂç¤Êºî¶È¤Ë¤ÏOSS¤äALSA½Ð\n" -"Îϥץ饰¥¤¥ó¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£" -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -"¥µ¥¦¥ó¥É½ÐÎϤòESD¤ËÀܳ¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "¤¹¤ß¤Þ¤»¤ó¡¢(¤Þ¤À)ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó!" +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "½ñ¤­¹þ¤ß¤Î¤¿¤á¤Ë¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£" +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." -msgstr "¥µ¥ó¥×¥ê¥ó¥°¤òºÆ³«¤¹¤ë¤Þ¤Ç¤³¤ì¤é¤ÎÊѹ¹¤Ï¤Ê¤µ¤ì¤Þ¤»¤ó¡£" +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "ÆþÎϥǥХ¤¥¹ (Î㡧 ¡Ö/dev/dsp¡×):" +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "é¸æŠžéƒ¨åˆ†æ‹¡å¤§" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" msgstr "" -"¥µ¥ó¥×¥ê¥ó¥°¤¹¤ë¤Î¤Ë %s ¤¬³«¤±¤Þ¤»¤ó¤Ç¤·¤¿:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d¥µ¥ó¥×¥ë)" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "å†é–‹å§‹ä½ç½®" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "½ÐÎϥǥХ¤¥¹ (Î㡧¡Ö/dev/dsp¡×)" +#: app/colors.c:53 +msgid "Mixer position indicator" +msgstr "" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:54 +msgid "Zero line" msgstr "" -"¥µ¥¦¥ó¥É½ÐÎϤËÂФ·¤Æ %s ¤¬³«¤±¤Þ¤»¤ó¤Ç¤·¤¿:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" -msgstr "¥È¥é¥ó¥¹¥Ý¡¼¥È¥Þ¥¹¥¿¡¼" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" -msgstr "¥Ç¥¯¥ê¥Ã¥¯" +#: app/colors.c:56 +msgid "White keys" +msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" -msgstr "%d Hz ¤Ç %d ¥Õ¥ì¡¼¥à¤Ç¼Â¹ÔÃæ" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" -msgstr "Jack ¥µ¡¼¥Ð¤¬¼Â¹ÔÃæ¤Ç¤Ï¤Ê¤¤¡©" +#: app/colors.c:57 +msgid "Black keys" +msgstr "" -#: app/drivers/jack-output.c:327 -#, c-format -msgid "soundtracker" -msgstr "soundtracker" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "out_1" +#: app/colors.c:58 +msgid "White keys pressed" +msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "out_2" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" -msgstr "½ÐÎϥǥХ¤¥¹ (Î㡧¡Ö/dev/audio¡×)" +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: ºÆÀ¸¤Ç¤­¤Þ¤»¤ó (%s)" +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: %dHz ¤ËÂбþ¤·¤Æ¤¤¤Þ¤»¤ó (%s)" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s: Í׵ᤵ¤ì¤¿¥µ¥¦¥ó¥É¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 -#, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: ¥Ö¥í¥Ã¥¯¥µ¥¤¥º¤òÀßÄê¤Ç¤­¤Þ¤»¤ó (%s)" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" -msgstr "ÆþÎϥǥХ¤¥¹ (Î㡧 ¡Ö/dev/audio¡×):" +#: app/colors.c:395 +#, fuzzy, c-format +msgid "%s colors configuration" +msgstr "キーボード設定" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: Ï¿²»¤Ç¤­¤Þ¤»¤ó (%s)" +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "リãƒãƒ¼ã‚¹" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Ťµ" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "¥«¥ì¥ó¥È" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "¥ª¥Õ¥»¥Ã¥È" +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "ÃÍ" +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "ÁÞÆþ" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "ALSAデãƒã‚¤ã‚¹ç•ªå·:" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "ºï½ü" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" msgstr "" -"GNOMEÈÇ\n" -"¤Î¤ß¤Î\n" -"¥°¥é¥Õ¥£¥«¥ë\n" -"¥¨¥ó¥Ù¥í¡¼¥×\n" -"ÊÔ½¸¤Ç¤¹" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "¥µ¥¹¥Æ¥£¡¼¥ó" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +#, fuzzy +msgid "Unable to set channels number" +msgstr "ALSAãƒãƒ£ãƒ³ãƒãƒ«ã‚’準備ã§ãã¾ã›ã‚“.\n" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "¥Ý¥¤¥ó¥È" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "¥ë¡¼¥×" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "³«»Ï" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "½ªÎ»" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "¥â¥¸¥å¡¼¥ë¡¦¥í¡¼¥É" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "¥â¥¸¥å¡¼¥ëÊݸ" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "WAV¥ì¥ó¥À" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "¶ÊÊݸ" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "¥µ¥ó¥×¥ë¡¦¥í¡¼¥É" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "¥µ¥ó¥×¥ëÊݸ" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "³Ú´ï¥í¡¼¥É" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "³Ú´ïÊݸ" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%dサンプル)" -#: app/file-operations.c:175 -msgid "File" -msgstr "¥Õ¥¡¥¤¥ë" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤Áàºî¤Ç¤¹¡£" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "¥¹¥³¡¼¥×¼þÇÈ¿ô" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "¥È¥é¥Ã¥«¡¼¼þÇÈ¿ô" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8ビット" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "GUIÀßÄê" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16ビット" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "16¿Ê¹Ô¿ô" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "モノラル" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "16¿Ê¿ô¤Ë¤ÏÂçʸ»ú¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "ステレオ" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" -msgstr "ÈóƱ´ü(IT¥¹¥¿¥¤¥ë)¥Ñ¥¿¡¼¥óÊÔ½¸" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "æ¼”å¥ã‚’å†é–‹ã™ã‚‹ã¾ã§ã“れらã®å¤‰æ›´ã¯ãªã•ã‚Œã¾ã›ã‚“。" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" -msgstr "Fxx Ì¿Îá¤ÏTempo/BPM¥¹¥é¥¤¥À¤ò¹¹¿·¤·¤Þ¤¹" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "サンプリングをå†é–‹ã™ã‚‹ã¾ã§ã“れらã®å¤‰æ›´ã¯ãªã•ã‚Œã¾ã›ã‚“。" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" -msgstr "¥í¡¼¥É/¥»¡¼¥Ö¤·¤¿¸å¤Ë¥È¥é¥Ã¥«¡¼¤Ë°ÜÆ°¤¹¤ë" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" -msgstr "½ªÎ»»þ¤Ë¥¦¥£¥ó¥É¥¦ÀßÄê¤òÊݸ" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "" -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" -msgstr "H¤Î¤«¤ï¤ê¤Ë²»Ì¾B¤ò»È¤¦" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "解åƒåº¦:" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" -msgstr "" +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "ãƒãƒ£ãƒ³ãƒãƒ«:" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "¥¹¥³¡¼¥×¡¦¥Ð¥Ã¥Õ¥¡¡¦¥µ¥¤¥º [MB]" +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "周波数 [Hz]:" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "¥È¥é¥Ã¥¯¹Ô½ñ¼°" +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "ãƒãƒƒãƒ•ã‚¡ãƒ»ã‚µã‚¤ã‚º:" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." -msgstr "½àÈ÷´°Î»¡¥" +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "ãƒãƒ£ãƒ³ãƒãƒ«æ•°:" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "¶Ê±éÁÕ..." +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "推定オーディオ・ディレイ: %fミリ秒" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "¥Ñ¥¿¡¼¥ó±éÁÕ" +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." +msgstr "" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "¥â¥¸¥å¡¼¥ë¡¦¥í¡¼¥É..." +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" +msgstr "" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "¥â¥¸¥å¡¼¥ë¤¬¥í¡¼¥É¤µ¤ì¤Þ¤·¤¿¡£" +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "¥â¥¸¥å¡¼¥ëÊݸ..." +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "¥â¥¸¥å¡¼¥ë¤¬Êݸ¤µ¤ì¤Þ¤·¤¿¡£" +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "¥µ¥ó¥×¥ë¡¦¥í¡¼¥É..." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "¥µ¥ó¥×¥ë¤¬¥í¡¼¥É¤µ¤ì¤Þ¤·¤¿¡£" +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "¥µ¥ó¥×¥ëÊݸ..." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "¥µ¥ó¥×¥ë¤¬Êݸ¤µ¤ì¤Þ¤·¤¿¡£" +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "³Ú´ï¥í¡¼¥É..." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "³Ú´ï¤¬¥í¡¼¥É¤µ¤ì¤Þ¤·¤¿¡£" +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "³Ú´ïÊݸ..." +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "パターンã®ãƒ­ãƒ¼ãƒ‰ä¸­ã«ã‚¨ãƒ©ãƒ¼ã€‚" -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "³Ú´ï¤¬Êݸ¤µ¤ì¤Þ¤·¤¿¡£" +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "¶ÊÊݸ..." +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "¶Ê¤¬Êݸ¤µ¤ì¤Þ¤·¤¿¡£" +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "¼ÁÌä" +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "¤Ï¤¤" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "¤¤¤¤¤¨" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "¼è¾Ã" +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "·Ù¹ð" +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "¥¨¥é¡¼!" +#: app/drivers/alsa1x.c:1328 +#, fuzzy +msgid "Unable to enable timestamping for playback" +msgstr "ALSAãƒãƒ£ãƒ³ãƒãƒ«ã‚’準備ã§ãã¾ã›ã‚“.\n" -#: app/gui.c:140 -msgid "Tempo" -msgstr "¥Æ¥ó¥Ý" +#: app/drivers/alsa1x.c:1329 +#, fuzzy +msgid "Unable to enable timestamping for capture" +msgstr "ALSAãƒãƒ£ãƒ³ãƒãƒ«ã‚’準備ã§ãã¾ã›ã‚“.\n" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" -msgstr "¹Ô¥Ï¥¤¥é¥¤¥ÈÀßÄê" +#: app/drivers/alsa1x.c:1335 +#, fuzzy +msgid "Unable to set timestamp type for playback" +msgstr "ALSAãƒãƒ£ãƒ³ãƒãƒ«ã‚’準備ã§ãã¾ã›ã‚“.\n" -#: app/gui.c:301 -msgid "Highlight rows (major / minor):" -msgstr "¹Ô¤ò¥Ï¥¤¥é¥¤¥È (¥á¥¸¥ã¡¼ / ¥Þ¥¤¥Ê¡¼): " +#: app/drivers/alsa1x.c:1336 +#, fuzzy +msgid "Unable to set timestamp type for capture" +msgstr "ALSAãƒãƒ£ãƒ³ãƒãƒ«ã‚’準備ã§ãã¾ã›ã‚“.\n" -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" msgstr "" -#: app/gui.c:506 -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" msgstr "" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "¥Õ¥¡¥¤¥ë¤¬ÁªÂò¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" +#: app/drivers/alsa1x.c:1352 +#, fuzzy +msgid "Unable to prepare playback" +msgstr "ALSAãƒãƒ£ãƒ³ãƒãƒ«ã‚’準備ã§ãã¾ã›ã‚“.\n" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" -msgstr "" -"¥«¥ì¥ó¥È¡¦¥×¥í¥¸¥§¥¯¥È¤ò²òÊü¤·¤¿¤¤¤Î¤Ï³Î¤«¤Ç¤¹¤«?\n" -"Á´¤Æ¤ÎÊѹ¹¤¬¼º¤ï¤ì¤Þ¤¹!" +#: app/drivers/alsa1x.c:1353 +#, fuzzy +msgid "Unable to prepare capture" +msgstr "ALSAãƒãƒ£ãƒ³ãƒãƒ«ã‚’準備ã§ãã¾ã›ã‚“.\n" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¤·¤¿¤¤¤Î¤Ï³Î¤«¤Ç¤¹¤«?" - -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "¥Ñ¥¿¡¼¥ó¥Õ¥¡¥¤¥ë¤ÎÆɤ߹þ¤ßÃæ¤Ë¥¨¥é¡¼¡£" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" +msgstr "" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" msgstr "" -"¸½ºß¥í¡¼¥É¤µ¤ì¤è¤¦¤È¤·¤Æ¤¤¤ë¥Ñ¥¿¡¼¥ó¤ÎŤµ¤Ï¥â¥¸¥å¡¼¥ë¤Ë¤¢¤ë¥Ñ¥¿¡¼¥ó¤Î¤â¤Î¤È" -"¹çÃפ·¤Þ¤»¤ó¡£\n" -"¸½ºß¤Î¥Ñ¥¿¡¼¥óŤòÊѹ¹¤·¤Þ¤¹¤«¡©" - -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "SoundTrackerµ¯Æ°" -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "¥í¡¼¥É..." +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "" -#: app/gui.c:1804 -msgid "Use SoundTracker!" -msgstr "SoundTracker ¤ò¤Ä¤«¤¦¤¾¡ª" +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "ã™ã¿ã¾ã›ã‚“ã€(ã¾ã )設定ã•ã‚Œã¦ã„ã¾ã›ã‚“!" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "XM¥í¡¼¥É..." +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "" -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "XMÊݸ..." +#: app/drivers/irix-output.c:178 +#, fuzzy +msgid "16 Bit output not supported." +msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„æ“作ã§ã™ã€‚" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "WAV¤È¤·¤Æ¥â¥¸¥å¡¼¥ë¤ò¥ì¥ó¥À¥ê¥ó¥°¤¹¤ë..." +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„æ“作ã§ã™ã€‚" -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "XM¤È¤·¤Æ¶ÊÊݸ..." +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." +msgstr "" +"サンプリングã™ã‚‹ã®ã« %s ãŒé–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ:\n" +"%s" -#: app/gui.c:1872 -msgid "Load current pattern..." -msgstr "¸½ºß¤Î¥Ñ¥¿¡¼¥ó¤ò¥í¡¼¥É" +#: app/drivers/oss.c:130 +#, fuzzy +msgid "OSS input: reading error" +msgstr "楽器交æ›" -#: app/gui.c:1874 -msgid "Save current pattern..." -msgstr "¸½ºß¤Î¥Ñ¥¿¡¼¥ó¤ò¥»¡¼¥Ö" +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "¶Ê±éÁÕ" +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "推定オーディオ・ディレイ: %fミリ秒" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "¥Ñ¥¿¡¼¥ó±éÁÕ" +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%dサンプル)" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Ää»ß" +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "入力デãƒã‚¤ã‚¹ (例: 「/dev/dspã€):" -#: app/gui.c:1973 -msgid "Pat" -msgstr "¥Ñ¥¿¡¼¥ó" +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "出力デãƒã‚¤ã‚¹ (例:「/dev/dspã€)" -#: app/gui.c:1979 -msgid "Edited pattern" -msgstr "ÊÔ½¸¤·¤¿¥Ñ¥¿¡¼¥ó" +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" +msgstr "" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" msgstr "" -"Í­¸ú¤Ë¤·¤¿¤é¡¤¥×¥ì¥¤¥ê¥¹¥È¤ò±ÜÍ÷¤¹¤ë¤³¤È¤Ç¤ÏÊÔ½¸Ãæ¤Î¥Ñ¥¿¡¼¥ó¤ÏÊѹ¹¤µ¤ì¤Þ¤»¤ó" -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "¥Á¥ã¥ó¥Í¥ë¿ô:" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"サンプリングã™ã‚‹ã®ã« %s ãŒé–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ:\n" +"%s" -#: app/gui.c:2025 -msgid "Pattern Length" -msgstr "¥Ñ¥¿¡¼¥óĹ" +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "è¦æ±‚ã•ã‚ŒãŸã‚µã‚¦ãƒ³ãƒ‰å‡ºåŠ›ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" -#: app/gui.c:2060 -msgid "Set preferred accidental type" -msgstr "¹¥¤ß¤ÎÎ×»þµ­¹æ¤Î¥¿¥¤¥×¤ò»ØÄê" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" +msgstr "%d Hz 㧠%d フレームã§å®Ÿè¡Œä¸­" -#: app/gui.c:2066 -msgid "Measure" -msgstr "´Ö³Ö" +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "Jack サーãƒãŒå®Ÿè¡Œä¸­ã§ã¯ãªã„?" -#: app/gui.c:2067 -msgid "Enable row highlighting" -msgstr "¹Ô¥Ï¥¤¥é¥¤¥È¤òÍ­¸ú¤Ë" +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/gui.c:2093 -msgid "Other..." -msgstr "¤½¤Î¾..." +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/gui.c:2129 -msgid "Change effect column editing direction" -msgstr "¥¨¥Õ¥§¥¯¥È¥³¥é¥àÊÔ½¸¤ÎÊý¸þ¤òÊѤ¨¤ë" +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" -msgstr "Á´ÂÎŪ¤Ê²»ÎÌÁýÉý" +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" -msgstr "¥Ô¥Ã¥Á¥Ù¥ó¥É" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "デクリック" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" -msgstr "¥Ô¥Ã¥Á¥Ù¥ó¥É¤òÄ̾ï¤ÎÃͤËÌ᤹" +#: app/drivers/jack.c:610 +#, fuzzy +msgid "Jack server is not running or some error occured." +msgstr "Jack サーãƒãŒå®Ÿè¡Œä¸­ã§ã¯ãªã„?" -#: app/gui.c:2216 -msgid "Editing" -msgstr "ÊÔ½¸" +#: app/drivers/sdl-output.c:76 +#, fuzzy +msgid "Experimental SDL support." +msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„æ“作ã§ã™ã€‚" -#: app/gui.c:2223 -msgid "Octave" -msgstr "¥ª¥¯¥¿¡¼¥Ö" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "出力デãƒã‚¤ã‚¹ (例:「/dev/audioã€)" -#: app/gui.c:2232 -msgid "Jump" -msgstr "¥¸¥ã¥ó¥×" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:2241 -msgid "Instr" -msgstr "³Ú´ï" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/gui.c:2257 -msgid "Sample" -msgstr "¥µ¥ó¥×¥ë" +#: app/drivers/sun-output.c:402 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "%s: %dHz ã«å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“ (%s)" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "SoundTracker¤Ë¤è¤¦¤³¤½." +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "%s: è¦æ±‚ã•ã‚ŒãŸã‚µã‚¦ãƒ³ãƒ‰ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/drivers/sun-output.c:455 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "%s: ブロックサイズを設定ã§ãã¾ã›ã‚“ (%s)" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "²»ÎÌ¥Õ¥§¡¼¥É" - -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "¥Ð¥¤¥Ö¥ì¡¼¥·¥ç¥ó®ÅÙ" - -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "¥Ð¥¤¥Ö¥ì¡¼¥·¥ç¥ó¿¼ÅÙ" - -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "¥Ð¥¤¥Ö¥ì¡¼¥·¥ç¥ó¡¦¥¹¥¤¡¼¥×" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£" +#: app/drivers/sun-input.c:77 +#, fuzzy +msgid "SUN input: reading error" +msgstr "楽器交æ›" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Àµ¸¹ÇÈ" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "¶ë·ÁÇÈ" +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "入力デãƒã‚¤ã‚¹ (例: 「/dev/audioã€):" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "²¼¸þµøÇÈ" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "¾å¸þµøÇÈ" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "³Ú´ïÊÔ½¸" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" +msgstr "" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "²»ÎÌ¥¨¥ó¥Ù¥í¡¼¥×" +#: app/drivers/sun-input.c:273 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "%s: %dHz ã«å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“ (%s)" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "¥¨¥ó¥Ù¥í¡¼¥×¤ò¥Ñ¥ó¥Ë¥ó¥°¤¹¤ë" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "%s: è¦æ±‚ã•ã‚ŒãŸã‚µã‚¦ãƒ³ãƒ‰ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "³Ú´ï¥í¡¼¥É..." +#: app/drivers/sun-input.c:332 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "%s: ブロックサイズを設定ã§ãã¾ã›ã‚“ (%s)" -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "³Ú´ïÊݸ..." +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "é•·ã•" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "XI¥í¡¼¥É" +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "カレント" -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "XIÊݸ" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "オフセット" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "¥Ó¥Ö¥é¡¼¥È·¿:" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "値" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "²»Éä" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "挿入" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "½é´ü²½" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "削除" -#: app/keys.c:57 -msgid "" -msgstr "<̵>" +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"GNOME版\n" +"ã®ã¿ã®\n" +"グラフィカル\n" +"エンベロープ\n" +"編集ã§ã™" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "ÁÞÆþ¤µ¤ì¤¿¥­¡¼¤ÏFastTracker¥â¥¸¥å¡¼¥ë¤Ë´Ø¤¹¤ëÆÃÊ̤ʥ­¡¼¥ª¥Õ²»Éä¤Ç¤¹¡£" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "サスティーン" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." -msgstr "\"jump\"¤ÎÃͤòÁý¤ä¤¹¥­¡¼" +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "ãƒã‚¤ãƒ³ãƒˆ" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." -msgstr "\"jump\"¤ÎÃͤò¸º¤é¤¹¥­¡¼" +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "ループ" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "¥ª¥¯¥¿¡¼¥Ö¾å¤Î¥­¡¼..." +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "開始" -#: app/keys.c:146 +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "終了" + +#: app/file-operations.c:127 +#, c-format msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" msgstr "" -"¸°ÈפξåȾʬ¤Ë¥­¡¼¤¬¤¢¤ê¤Þ¤¹¡£¥­¡¼c¤ÏÉáÄÌTAB¥­¡¼¤Î±¦¤Î¥­¡¼¤Ç¤¹¡£»Ä¤ê¤Î\n" -"¥­¡¼¤Ï¡¢¾åÉô¤Î¿ô»ú¥­¡¼¤Î¹Ô¤ò´Þ¤ó¤Ç¡¢¥Ô¥¢¥Î¤Î¸°ÈפΤ褦¤Ëʤó¤Ç¤¤¤Þ¤¹¡£" -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "¥ª¥¯¥¿¡¼¥Ö²¼¤Î¥­¡¼..." +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." +#: app/file-operations.c:245 +msgid "All files" msgstr "" -"¸°Èפβ¼È¾Ê¬¤Ë¥­¡¼¤¬¤¢¤ê¤Þ¤¹¡£¥­¡¼c¤ÏÉáÄ̺¸Shift¥­¡¼¤Î±¦¤ÎºÇ½é¤Îʸ»ú¥­¡¼\n" -"¤Ç¤¹¡£»Ä¤ê¤Î¥­¡¼¤Ï¡¢¾åÉô¤Î¹Ô¤ò´Þ¤ó¤Ç¡¢¥Ô¥¢¥Î¤Î¸°ÈפΤ褦¤Ëʤó¤Ç¤¤¤Þ¤¹¡£" -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "¾¤Î¥­¡¼..." +#: app/file-operations.c:388 +msgid "File" +msgstr "ファイル" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "¾¤Î³Æ¼ï¥­¡¼" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/keys.c:513 -msgid "Function" -msgstr "µ¡Ç½" +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/keys.c:514 -msgid "Assignment" -msgstr "³äÅö" +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "ミキサ" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "¥­¡¼¥Ü¡¼¥ÉÀßÄê" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "GUI設定" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "¥­¡¼¡¦¥°¥ë¡¼¥×ÀâÌÀ" +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "スコープ周波数" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "¥­¡¼ÀâÌÀ" +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "トラッカー周波数" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "¥â¥Ç¥£¥Õ¥¡¥¤¥¢" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "16進行数" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "ÁªÂò¤µ¤ì¤¿¥­¡¼¤ò³Ð¤¨¤ë" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "16進数ã«ã¯å¤§æ–‡å­—を使ã£ã¦ãã ã•ã„" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Á´¤Æ¤Î¥­¡¼¤ò³Ð¤¨¤ë" +#: app/gui-settings.c:343 +#, fuzzy +msgid "FT2-like volume column" +msgstr "ç´°ã‹ã„ボリュームã®ã‚¹ãƒ©ã‚¤ãƒ‰ã‚¢ãƒƒãƒ—" -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" msgstr "" -"¤ªË¾¤ß¤ÎÁȹ礻¤Î¥­¡¼¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤!\n" -"¼è¾Ã¤¹¤Ë¤Ïº¸¤Î°ìÍ÷¤Ç¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "λ²ò" +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" +msgstr "" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "ŬÍÑ" +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" +msgstr "éžåŒæœŸ(ITスタイル)パターン編集" + +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" msgstr "" -"¥­¡¼¥Ü¡¼¥ÉÀßÄê¥Õ¥¡¥¤¥ë¤¬ÉÔ´°Á´¤Ç¤¹¡£\n" -"¥­¡¼¥Ü¡¼¥ÉÀßÄê¥À¥¤¥¢¥í¥°¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£" -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" -msgstr "CH%02d" +#: app/gui-settings.c:379 +msgid "Record keyreleases" +msgstr "" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" -msgstr "¥Á¥ã¥ó¥Í¥ë %d ¤Ø¤Î¹â®¥¸¥ã¥ó¥×" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" +msgstr "" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:398 +msgid "Record precise timings" msgstr "" -"¼«Æ°¥­¡¼ÀßÄê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" -"ÀßÄê¥á¥Ë¥å¡¼¤Î¥­¡¼¥Ü¡¼¥ÉÀßÄê¥À¥¤¥¢¥í¥°¤ò»ÈÍÑ\n" -"¤·¤Æ¤¯¤À¤µ¤¤¡£" -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" msgstr "" -"¤³¤¦¤·¤¿¤¤¤Î¤Ï³Î¤«¤Ç¤¹¤«?\n" -"Á´¤Æ¤ÎÊѹ¹¤¬¼º¤ï¤ì¤Þ¤¹!" -#: app/menubar.c:162 +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "Fxx 命令ã¯Tempo/BPMスライダを更新ã—ã¾ã™" + +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" + +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "ロード/セーブã—ãŸå¾Œã«ãƒˆãƒ©ãƒƒã‚«ãƒ¼ã«ç§»å‹•ã™ã‚‹" + +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" + +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" +msgstr "終了時ã«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦è¨­å®šã‚’ä¿å­˜" + +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "Hã®ã‹ã‚ã‚Šã«éŸ³åBを使ã†" + +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" + +#: app/gui-settings.c:451 msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." msgstr "" -"½ªÎ»¤·¤¿¤¤¤Î¤Ï³Î¤«¤Ç¤¹¤«?\n" -"Á´¤Æ¤ÎÊѹ¹¤¬¼º¤ï¤ì¤Þ¤¹!" -#: app/menubar.c:419 -msgid "_Open..." -msgstr "³«¤¯(_O)..." - -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Êݸ(_a)..." - -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "_WAV¤È¤·¤Æ¥â¥¸¥å¡¼¥ë¤òÊݸ..." +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "é¸æŠž:" -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "¥µ¥ó¥×¥ë̵¤·¤ËXMÊݸ..." +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "スコープ・ãƒãƒƒãƒ•ã‚¡ãƒ»ã‚µã‚¤ã‚º [MB]" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "½ªÎ»(_Q)" +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "サンプルãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸã€‚" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Á´¤Æ¾Ãµî(_A)" +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "¥Ñ¥¿¡¼¥ó¤Î¤ß¾Ãµî(_P)" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "編集(_E)" -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "¥â¥¸¥å¡¼¥ëºÇŬ²½(_O)" +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "ÀÚ¼è(_u)" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "" -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "¥³¥Ô¡¼(_C)" +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "" -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "ŽÉÕ(_P)" +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "²»Éä¤ò¾Ã¤¹(_K)" +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "トラック行書å¼" -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "¥È¥é¥Ã¥¯ÁÞÆþ(_I)" +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "¥È¥é¥Ã¥¯ºï½ü(_D)" +#: app/gui-settings.c:573 +#, fuzzy +msgid "Tracker colors configuration" +msgstr "キーボード設定" -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "cmdÃÍÁý²Ã" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "準備完了." -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "cmdÃ͸º¾¯" +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "曲演å¥..." -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "¥Þ¡¼¥¯¡¦¥â¡¼¥É(_M)" +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "パターン演å¥" -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "¥Ö¥í¥Ã¥¯¡¦¥Þ¡¼¥¯¾Ãµî(_l)" +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "モジュール・ロード..." -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "ÆâÁÞ¥¨¥Õ¥§¥¯¥È(_I)" +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "モジュールãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸã€‚" -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Ⱦ²»¾å¤²¤ë" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "モジュールä¿å­˜..." -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Ⱦ²»²¼¤²¤ë" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "モジュールãŒä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚" -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "¥ª¥¯¥¿¡¼¥Ö¾å¤²¤ë" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "サンプル・ロード..." -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "¥ª¥¯¥¿¡¼¥Ö²¼¤²¤ë" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "サンプルãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸã€‚" -#: app/menubar.c:526 -#, fuzzy -msgid "P_aste" -msgstr "ŽÉÕ" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "サンプルä¿å­˜..." -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "_JazzÊÔ½¸¥â¡¼¥É" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "サンプルãŒä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚" -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "楽器ロード..." -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "°ÜÄ´(_o)..." +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "楽器ãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸã€‚" -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "¥Ñ¥¿¡¼¥ó(_P)" +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "楽器ä¿å­˜..." -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "¥È¥é¥Ã¥¯(_T)" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "楽器ãŒä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚" -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "ÁªÂò(_S)" +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "曲ä¿å­˜..." -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "̤»ÈÍѥѥ¿¡¼¥ó¸¡º÷(_F)" +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "曲ãŒä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚" -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "̤»ÈÍѥѥ¿¡¼¥ó¤Ë¥«¥ì¥ó¥È¤ò¥³¥Ô¡¼(_C)" +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "エラー!" + +#: app/gui-subs.c:414 +msgid "Question" +msgstr "質å•" + +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" + +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" + +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" + +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "警告" + +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "GUI設定" + +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "è¡Œãƒã‚¤ãƒ©ã‚¤ãƒˆè¨­å®š" + +#: app/gui.c:260 +msgid "Highlight rows (major / minor):" +msgstr "行をãƒã‚¤ãƒ©ã‚¤ãƒˆ (メジャー / マイナー): " + +#: app/gui.c:330 +msgid "" +msgstr "" + +#: app/gui.c:451 +#, fuzzy +msgid "Saving module failed" +msgstr "モジュールä¿å­˜..." + +#: app/gui.c:535 +msgid "File output" +msgstr "" + +#: app/gui.c:612 +#, fuzzy +msgid "Can't open file for writing" +msgstr "書ãè¾¼ã¿ã®ãŸã‚ã«ãƒ•ã‚¡ã‚¤ãƒ«ãŒé–‹ã‘ã¾ã›ã‚“。" + +#: app/gui.c:618 +#, fuzzy +msgid "Can't change file ownership" +msgstr "書ãè¾¼ã¿ã®ãŸã‚ã«ãƒ•ã‚¡ã‚¤ãƒ«ãŒé–‹ã‘ã¾ã›ã‚“。" + +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "" + +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "" + +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" + +#: app/gui.c:715 +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" + +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"カレント・プロジェクトを解放ã—ãŸã„ã®ã¯ç¢ºã‹ã§ã™ã‹?\n" +"å…¨ã¦ã®å¤‰æ›´ãŒå¤±ã‚ã‚Œã¾ã™!" + +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "パターンファイルã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ã€‚" + +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" +msgstr "" +"ç¾åœ¨ãƒ­ãƒ¼ãƒ‰ã•ã‚Œã‚ˆã†ã¨ã—ã¦ã„るパターンã®é•·ã•ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚るパターンã®ã‚‚ã®ã¨" +"åˆè‡´ã—ã¾ã›ã‚“。\n" +"ç¾åœ¨ã®ãƒ‘ターン長を変更ã—ã¾ã™ã‹ï¼Ÿ" + +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "開始" + +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "ロード..." + +#: app/gui.c:2195 +msgid "Use SoundTracker!" +msgstr "SoundTracker ã‚’ã¤ã‹ã†ãžï¼" + +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"終了ã—ãŸã„ã®ã¯ç¢ºã‹ã§ã™ã‹?\n" +"å…¨ã¦ã®å¤‰æ›´ãŒå¤±ã‚ã‚Œã¾ã™!" + +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" + +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" + +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "ロード..." + +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" + +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" + +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" + +#: app/gui.c:2400 +#, fuzzy +msgid "Extended pattern (*.xp)" +msgstr "編集ã—ãŸãƒ‘ターン" + +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" +msgstr "" + +#: app/gui.c:2433 +msgid "Load Module" +msgstr "モジュール・ロード" + +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" +msgstr "" + +#: app/gui.c:2434 +msgid "Save Module" +msgstr "モジュールä¿å­˜" + +#: app/gui.c:2434 +#, fuzzy +msgid "Save the current module" +msgstr "ç¾åœ¨ã®ãƒ‘ターンをセーブ" + +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "WAVレンダ" + +#: app/gui.c:2436 +#, fuzzy +msgid "Render the current module as WAV file" +msgstr "WAVã¨ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’レンダリングã™ã‚‹..." + +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "サンプル無ã—ã«XMä¿å­˜..." + +#: app/gui.c:2439 +msgid "Load current pattern..." +msgstr "ç¾åœ¨ã®ãƒ‘ターンをロード" + +#: app/gui.c:2440 +msgid "Save current pattern..." +msgstr "ç¾åœ¨ã®ãƒ‘ターンをセーブ" + +#: app/gui.c:2507 +msgid "Play Song" +msgstr "曲演å¥" + +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "パターン演å¥" + +#: app/gui.c:2525 +msgid "Play From Cursor" +msgstr "" + +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "曲演å¥" + +#: app/gui.c:2543 +msgid "Stop" +msgstr "åœæ­¢" + +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" + +#: app/gui.c:2562 +msgid "Pat" +msgstr "パターン" + +#: app/gui.c:2568 +msgid "Edited pattern" +msgstr "編集ã—ãŸãƒ‘ターン" + +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "" +"有効ã«ã—ãŸã‚‰ï¼Œãƒ—レイリストを閲覧ã™ã‚‹ã“ã¨ã§ã¯ç·¨é›†ä¸­ã®ãƒ‘ターンã¯å¤‰æ›´ã•ã‚Œã¾ã›ã‚“" + +#: app/gui.c:2583 +msgid "Pattern Length" +msgstr "パターン長" + +#: app/gui.c:2593 +msgid "Tempo" +msgstr "テンãƒ" + +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "ãƒãƒ£ãƒ³ãƒãƒ«æ•°:" + +#: app/gui.c:2632 +msgid "Set preferred accidental type" +msgstr "好ã¿ã®è‡¨æ™‚記å·ã®ã‚¿ã‚¤ãƒ—を指定" + +#: app/gui.c:2638 +msgid "Measure" +msgstr "é–“éš”" + +#: app/gui.c:2639 +msgid "Enable row highlighting" +msgstr "è¡Œãƒã‚¤ãƒ©ã‚¤ãƒˆã‚’有効ã«" + +#: app/gui.c:2660 +msgid "Other..." +msgstr "ãã®ä»–..." + +#: app/gui.c:2687 +msgid "Change effect column editing direction" +msgstr "エフェクトコラム編集ã®æ–¹å‘を変ãˆã‚‹" + +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" +msgstr "全体的ãªéŸ³é‡å¢—å¹…" + +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "" + +#: app/gui.c:2740 +msgid "Pitchbend" +msgstr "ピッãƒãƒ™ãƒ³ãƒ‰" + +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "ピッãƒãƒ™ãƒ³ãƒ‰ã‚’通常ã®å€¤ã«æˆ»ã™" + +#: app/gui.c:2760 +msgid "Editing" +msgstr "編集" + +#: app/gui.c:2767 +msgid "Octave" +msgstr "オクターブ" + +#: app/gui.c:2776 +msgid "Jump" +msgstr "ジャンプ" + +#: app/gui.c:2785 +msgid "Instr" +msgstr "楽器" + +#: app/gui.c:2801 +msgid "Sample" +msgstr "サンプル" + +#: app/gui.c:2827 +msgid "dB" +msgstr "" + +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "SoundTrackerã«ã‚ˆã†ã“ã." + +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" + +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "ファイルãŒé–‹ã‘ã¾ã›ã‚“。" + +#: app/instrument-editor.c:209 +#, fuzzy +msgid "Saving instrument failed." +msgstr "楽器ä¿å­˜..." + +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "ç¾åœ¨ã®æ¥½å™¨" + +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "正弦波" + +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "矩形波" + +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "下å‘鋸波" + +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "上å‘鋸波" + +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" +msgstr "" + +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "楽器編集" + +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "音é‡ã‚¨ãƒ³ãƒ™ãƒ­ãƒ¼ãƒ—" + +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "エンベロープをパンニングã™ã‚‹" + +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "楽器ロード" + +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" + +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "楽器ä¿å­˜" + +#: app/instrument-editor.c:297 +#, fuzzy +msgid "Save the current instrument" +msgstr "ç¾åœ¨ã®æ¥½å™¨" + +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "XIロード" + +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "XIä¿å­˜" + +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "ボリューム・スライド・アップ" + +#: app/instrument-editor.c:344 +#, fuzzy +msgid "Vibrato:" +msgstr "ビブラート" + +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "" + +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "ãƒã‚¤ãƒ–レーション速度" + +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "ãƒã‚¤ãƒ–レーション深度" + +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "ãƒã‚¤ãƒ–レーション・スイープ" + +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "音符" + +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "åˆæœŸåŒ–" + +#: app/keys.c:58 +msgid "" +msgstr "<ç„¡>" + +#: app/keys.c:134 +msgid "KOFF" +msgstr "" + +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "挿入ã•ã‚ŒãŸã‚­ãƒ¼ã¯FastTrackerモジュールã«é–¢ã™ã‚‹ç‰¹åˆ¥ãªã‚­ãƒ¼ã‚ªãƒ•éŸ³ç¬¦ã§ã™ã€‚" + +#: app/keys.c:136 +msgid "JMP+" +msgstr "" + +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "\"jump\"ã®å€¤ã‚’増やã™ã‚­ãƒ¼" + +#: app/keys.c:138 +msgid "JMP-" +msgstr "" + +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "\"jump\"ã®å€¤ã‚’減らã™ã‚­ãƒ¼" + +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "曲演å¥" + +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "モジュールä¿å­˜..." + +#: app/keys.c:142 +msgid "RecMod" +msgstr "" + +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "パターン演å¥" + +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "パターン演å¥" + +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "パターン演å¥" + +#: app/keys.c:146 +msgid "RecPat" +msgstr "" + +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "パターン演å¥" + +#: app/keys.c:148 +msgid "PlayCur" +msgstr "" + +#: app/keys.c:148 +msgid "Play module from cursor." +msgstr "" + +#: app/keys.c:150 +msgid "RecCur" +msgstr "" + +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "パターン演å¥" + +#: app/keys.c:152 +#, fuzzy +msgid "PlayRow" +msgstr "曲演å¥" + +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "ç¾åœ¨ã®ãƒ‘ターンをロード" + +#: app/keys.c:154 +msgid "PlayBlk" +msgstr "" + +#: app/keys.c:154 +#, fuzzy +msgid "Play selected block." +msgstr "é¸æŠžã•ã‚ŒãŸã‚­ãƒ¼ã‚’覚ãˆã‚‹" + +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "オクターブ上ã®ã‚­ãƒ¼..." + +#: app/keys.c:167 +msgid "" +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." +msgstr "" +"éµç›¤ã®ä¸ŠåŠåˆ†ã«ã‚­ãƒ¼ãŒã‚ã‚Šã¾ã™ã€‚キーcã¯æ™®é€šTABキーã®å³ã®ã‚­ãƒ¼ã§ã™ã€‚残りã®\n" +"キーã¯ã€ä¸Šéƒ¨ã®æ•°å­—キーã®è¡Œã‚’å«ã‚“ã§ã€ãƒ”アノã®éµç›¤ã®ã‚ˆã†ã«ä¸¦ã‚“ã§ã„ã¾ã™ã€‚" + +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "オクターブ下ã®ã‚­ãƒ¼..." + +#: app/keys.c:173 +msgid "" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." +msgstr "" +"éµç›¤ã®ä¸‹åŠåˆ†ã«ã‚­ãƒ¼ãŒã‚ã‚Šã¾ã™ã€‚キーcã¯æ™®é€šå·¦Shiftキーã®å³ã®æœ€åˆã®æ–‡å­—キー\n" +"ã§ã™ã€‚残りã®ã‚­ãƒ¼ã¯ã€ä¸Šéƒ¨ã®è¡Œã‚’å«ã‚“ã§ã€ãƒ”アノã®éµç›¤ã®ã‚ˆã†ã«ä¸¦ã‚“ã§ã„ã¾ã™ã€‚" + +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "ä»–ã®ã‚­ãƒ¼..." + +#: app/keys.c:179 +msgid "Various other keys" +msgstr "ä»–ã®å„種キー" + +#: app/keys.c:578 +msgid "Function" +msgstr "機能" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "割当" + +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "キーボード設定" + +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "キー・グループ説明" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "キー説明" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "モディファイア" + +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "é¸æŠžã•ã‚ŒãŸã‚­ãƒ¼ã‚’覚ãˆã‚‹" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "å…¨ã¦ã®ã‚­ãƒ¼ã‚’覚ãˆã‚‹" + +#: app/keys.c:702 +msgid "" +"Please press the desired key combination!\n" +"Click into left list to cancel" +msgstr "" +"ãŠæœ›ã¿ã®çµ„åˆã›ã®ã‚­ãƒ¼ã‚’押ã—ã¦ãã ã•ã„!\n" +"å–消ã™ã«ã¯å·¦ã®ä¸€è¦§ã§ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã ã•ã„" + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "CH%02d" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "ãƒãƒ£ãƒ³ãƒãƒ« %d ã¸ã®é«˜é€Ÿã‚¸ãƒ£ãƒ³ãƒ—" + +#: app/keys.c:1028 +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." +msgstr "" +"自動キー設定ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" +"設定メニューã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰è¨­å®šãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã‚’使用\n" +"ã—ã¦ãã ã•ã„。" + +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" +msgstr "" + +#: app/menubar.c:126 +msgid "" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." +msgstr "" + +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"ã“ã†ã—ãŸã„ã®ã¯ç¢ºã‹ã§ã™ã‹?\n" +"å…¨ã¦ã®å¤‰æ›´ãŒå¤±ã‚ã‚Œã¾ã™!" + +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "整数ミキサー,a補間無ã—,フィルタ無ã—,最大サンプルサイズ1M" + +#: app/mixers/kbfloat.c:838 +#, fuzzy +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "整数ミキサー,a補間無ã—,フィルタ無ã—,最大サンプルサイズ1M" + +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" + +#: app/module-info.c:63 app/module-info.c:64 +#, fuzzy +msgid "Cyclic" +msgstr "デクリック" + +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" + +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" + +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" + +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" + +#: app/module-info.c:481 +msgid "Period" +msgstr "" + +#: app/module-info.c:484 +msgid "s" +msgstr "" + +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "音符" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "楽器å" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "サンプル数" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "サンプルå" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "ç·šåž‹" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "モジュール情報" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "曲å:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "周波数:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "ProTrackerモード" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "楽器編集" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "ç¾åœ¨ã®æ¥½å™¨" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "楽器ä¿å­˜" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "äº¤æ› 1 <-> 2" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "微調整" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "RelNote" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" +"未利用パターン: %d (利用: %d)\n" +"未利用 instrument: %d (利用: %d)\n" +"\n" +"未利用領域をクリアã—ã¦ãƒ—レイリストã®é †ç•ªã‚’æ›´æ–°ã—ã¾ã™ã‹ï¼Ÿ\n" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "編集中ã®ãƒ‘ターンを挿入" + +#: app/playlist.c:511 +msgid "Remove current playlist entry" +msgstr "ç¾åœ¨ã®ãƒ—レイリストエントリーを削除" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "追加+コピー" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "ç¾åœ¨ã®ä½ç½®ã®å¾Œã«ç©ºãパターンを追加ã—,ç¾åœ¨ã®ãƒ‘ターンをコピーã™ã‚‹" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "空ãパターンを追加" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "ç¾åœ¨ã®ä½ç½®ã®å¾Œã«ç©ºãパターンを追加" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "é•·ã•" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "曲長" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "楽器" + +#: app/playlist.c:567 +msgid "Song restart position" +msgstr "å†é–‹å§‹ä½ç½®" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"設定ファイルを記憶ã™ã‚‹ãŸã‚ã€ã‚ãªãŸã®ãƒ›ãƒ¼ãƒ ãƒ»ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«\n" +"ディレクトリ'.soundtracker'ãŒç”Ÿæˆã•ã‚Œã¾ã™ã€‚\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "ループ無ã—" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "ピンãƒãƒ³" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8ビット" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16ビット" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "サンプル編集" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "音é‡" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "パンニング" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "é¸æŠž:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "ç„¡" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "å…¨ã¦" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "é•·ã•:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "ループã¨ã—ã¦è¨­å®š" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "サンプル・ロード" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "サンプル無ã—ã«XMä¿å­˜..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "サンプルä¿å­˜" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "サンプル無ã—ã«XMä¿å­˜..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "WAVã¨ã—ã¦ç¯„囲ä¿å­˜..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "WAVä¿å­˜" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "範囲ä¿å­˜" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "ボリュームランプ" + +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "トレモロ" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "é¸æŠžéƒ¨åˆ†æ‹¡å¤§" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "å…¨ã¦è¡¨ç¤º" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "拡大(+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "縮å°(-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "リãƒãƒ¼ã‚¹" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "切å–" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "移動" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "コピー" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "貼付" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "サンプル消去" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "コピー" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(ç„¡é¸æŠž)" + +#: app/sample-editor.c:1279 +#, fuzzy +msgid "Out of memory for copybuffer." +msgstr "コピーãƒãƒƒãƒ•ã‚¡ã®ãŸã‚ã®ãƒ¡ãƒ¢ãƒªãŒç„¡ããªã‚Šã¾ã—ãŸ\n" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "<今貼付ã‘ã•ã‚Œã¾ã—ãŸ>" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "ミックス" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "å·¦" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "å³" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%dサンプル)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "サンプルデータã®ãŸã‚ã®ãƒ¡ãƒ¢ãƒªãŒç„¡ããªã‚Šã¾ã—ãŸã€‚" + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "読ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã€‚" + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"ステレオ・サンプルãŒé¸æŠžã•ã‚Œã¾ã—ãŸ!\n" +"(SoundTracker ã§ã¯ãƒ¢ãƒŽãƒ»ã‚µãƒ³ãƒ—ルã ã‘処ç†ã§ãã¾ã™!)\n" +"\n" +"ロードã™ã‚‹ãŸã‚ã®ãƒãƒ£ãƒ³ãƒãƒ«ã‚’é¸ã‚“ã§ãã ã•ã„:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "サンプリング開始" + +#: app/sample-editor.c:1756 +msgid "Signed" +msgstr "正負" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "正数" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "リトルエンディアン" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "ビッグエンディアン" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "生サンプル・ロード" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"既知ã§ãªã„サンプルをé¸æŠžã—ã¾ã—ãŸã€‚\n" +"生データを今ロードã§ãã¾ã™ã€‚\n" +"\n" +"書å¼ã‚’é¸æŠžã—ã¦ãã ã•ã„:" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "ワード書å¼" + +#: app/sample-editor.c:1829 +msgid "Sampling Rate:" +msgstr "サンプリングレート:" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "サンプルãŒèª­ã¿è¾¼ã‚ã¾ã›ã‚“" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "" +"サンプルãŒç¾åœ¨ã®ãƒŸã‚­ã‚µãƒ»ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯é•·éŽãŽã¾ã™ã€‚\n" +"ã¨ã«ã‹ãロードã—ã¾ã™ã€‚" + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "2ãƒãƒ£ãƒ³ãƒãƒ«ã¾ã§ã§ 8ã€16ビット・サンプルã®ã¿å‡¦ç†ã§ãã¾ã™" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "書ãè¾¼ã¿ã®ãŸã‚ã«ãƒ•ã‚¡ã‚¤ãƒ«ãŒé–‹ã‘ã¾ã›ã‚“。" + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "領域をé¸æŠžã—ã¦ãã ã•ã„." + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "サンプリング・ドライãƒãŒä½¿ç”¨ã§ãã¾ã›ã‚“" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "サンプリング・ウィンドウ" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "å…¨ã¦æ¶ˆåŽ»(_A)" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "サンプリングレート:" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "サンプリング中ã«ãƒ¡ãƒ¢ãƒªãŒç„¡ããªã‚Šã¾ã—ãŸã€‚" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "<今サンプリングã—ã¾ã—ãŸ>" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"ステレオ・サンプルãŒé¸æŠžã•ã‚Œã¾ã—ãŸ!\n" +"(SoundTracker ã§ã¯ãƒ¢ãƒŽãƒ»ã‚µãƒ³ãƒ—ルã ã‘処ç†ã§ãã¾ã™!)\n" +"\n" +"ロードã™ã‚‹ãŸã‚ã®ãƒãƒ£ãƒ³ãƒãƒ«ã‚’é¸ã‚“ã§ãã ã•ã„:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "ステレオ・サンプル・ロード" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"録音ã—ãŸã‚µãƒ³ãƒ—ルãŒç¾åœ¨ã®ãƒŸã‚­ã‚µãƒ»ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯é•·éŽãŽã¾ã™ã€‚\n" +"ã¨ã«ã‹ããれを使ã„ã¾ã™ã€‚" + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "ボリュームランプ化" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "è¦æ ¼åŒ–" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "é¸æŠžæ™‚ã«éŸ³é‡ã‚’ç·šåž‹ã«ãƒ•ã‚§ãƒ¼ãƒ‰ã™ã‚‹" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "å·¦ [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "H" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "D" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "å³ [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"SoundTrackerã¸ã‚ˆã†ã“ã!\n" +"\n" +"ã“ã†ã„ã£ãŸãƒ—ログラムã«çµŒé¨“ãŒãªã‘ã‚Œã°ã€ã„ãã¤ã‹XMã‚„MODファイルをæŒã£ã¦\n" +"ãã¦æ¼”å¥ã—ãŸæ–¹ãŒã„ã„ã­ã€‚" + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"オーディオ設定ã®\"編集ã—ã¦ã„ã‚‹\"オブジェクトã®ãƒŸã‚­ã‚·ãƒ³ã‚°ãƒ»ãƒãƒƒãƒ•ã‚¡ãƒ»ã‚µã‚¤ã‚º\n" +"を減らã›ã°ã€SoundTrackerã®ç·¨é›†ãƒ¢ãƒ¼ãƒ‰ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰å…¥åŠ›ã«å¯¾ã—ã¦ã‚‚ã£ã¨åå¿œã™\n" +"るよã†ã«ã§ãるよ。" + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"サンプル・エディタã§ã€ã‚·ãƒ•ãƒˆãƒ»ã‚­ãƒ¼ã‚’押ã—ãªãŒã‚‰ãƒžã‚¦ã‚¹ã®å³ã¨å·¦ã®ãƒœã‚¿ãƒ³ã‚’使\n" +"ã£ã¦ã€ãƒ«ãƒ¼ãƒ—・ãƒã‚¤ãƒ³ãƒˆã‚’åˆã›ã‚‰ã‚Œã‚‹ã‚ˆã€‚\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"トラッキングやã„ã‚ã„ã‚ãªã‚³ãƒžãƒ³ãƒ‰ãŒã©ã†ã„ã†ãµã†ã«å‹•ä½œã™ã‚‹ã®ã‹ã‚‚ã£ã¨çŸ¥ã‚ŠãŸ\n" +"ã‘ã‚Œã°ã€http://www.united-trackers.org/ã§æŽ¢ã—ã¦ã­ã€‚" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"楽器編集ページã§ã€ã‚µãƒ³ãƒ—ルをアクティブã«ã—ã¦ã‹ã‚‰ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’クリック\n" +"ã™ã‚‹ã¨å€‹ã€…ã®ã‚­ãƒ¼ã«æ¥½å™¨ã®ã‚µãƒ³ãƒ—ルを割当ã¦ã‚‰ã‚Œã‚‹ã‚ˆã€‚" + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" +"カーソルãŒæ•°å€¤å…¥åŠ›ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«å¼•ã£ã‹ã‹ã£ã¦ã„ãŸã‚Šã—ã¾ã™ã‹ï¼Ÿ\n" +"リターンã‹ã‚¿ãƒ–を押ã›ã°æŠœã‘出ã›ã¾ã™ã‚ˆï¼" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "å‰ã®æŠ€" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "次ã®æŠ€" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "次回も技を見ã›ã‚‹" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "今日ã®SoundTrackerã®æŠ€" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "アルペジオ" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "ãƒãƒ«ã‚¿ãƒ¡ãƒ³ãƒˆã‚¢ãƒƒãƒ—" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "ãƒãƒ«ã‚¿ãƒ¡ãƒ³ãƒˆãƒ€ã‚¦ãƒ³" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "トーンãƒãƒ«ã‚¿ãƒ¡ãƒ³ãƒˆ" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "ビブラート" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "トーンãƒãƒ«ã‚¿ãƒ¡ãƒ³ãƒˆï¼‹ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚¹ãƒ©ã‚¤ãƒ‰" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "ビブラート+ボリューム・スライド" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "トレモロ" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "パンニングã®è¨­å®š" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "サンプルãŒä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚" + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "音é‡è¨­å®š" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "ä½ç½®ã‚¸ãƒ£ãƒ³ãƒ—" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "パターンブレーク" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "テンãƒ/bpm設定" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "全体ボリューム設定" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "全体ボリューム・スライド" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "キーオフ" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "エンベロープä½ç½®è¨­å®š" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "パンニングスライド" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "LPフィルタ・レゾナンス" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "マルãƒãƒªãƒˆãƒªã‚¬ãƒŽãƒ¼ãƒˆ" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "トレモロ" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "LPフィルタ・カットオフ" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "ç´°ã‹ã„ãƒãƒ«ã‚¿ãƒ¡ãƒ³ãƒˆã‚¢ãƒƒãƒ—" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "ç´°ã‹ã„ãƒãƒ«ã‚¿ãƒ¡ãƒ³ãƒˆãƒ€ã‚¦ãƒ³" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "グリッサンドæ“作設定" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "ビブラートæ“作設定" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "微調整設定" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "パターン" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "トレモロæ“作設定" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "ノートリトリガ" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "ç´°ã‹ã„ボリュームã®ã‚¹ãƒ©ã‚¤ãƒ‰ã‚¢ãƒƒãƒ—" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "ç´°ã‹ã„ボリュームã®ã‚¹ãƒ©ã‚¤ãƒ‰ãƒ€ã‚¦ãƒ³" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "音符切å–" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "音符ã®é…延" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "パターンã®é…延" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "ボリューム・スライド・ダウン" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "ボリューム・スライド・アップ" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "ビブラート速度設定" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "パンニングを左ã«ã‚¹ãƒ©ã‚¤ãƒ‰" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "パンニングをå³ã«ã‚¹ãƒ©ã‚¤ãƒ‰" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "正弦波" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "̤»ÈÍѥѥ¿¡¼¥ó¾Ãµî(_l)" +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "ランプ下ã’" -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "¥Ñ¥¿¡¼¥ó¡¦¥Ñ¥Ã¥¯(_P)" +#: app/track-editor.c:203 +msgid "square" +msgstr "矩形波" -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "¸½ºß¤Î¥Ñ¥¿¡¼¥ó¤òÊݸ(_S)" +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "¥Ñ¥¿¡¼¥ó¤òÆɤ߹þ¤ß(_o)" +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" -#: app/menubar.c:599 +#: app/track-editor.c:244 #, fuzzy -msgid "Sh_rink Current Pattern" -msgstr "¸½ºß¤Î¥Ñ¥¿¡¼¥ó" +msgid "Extra fine porta up" +msgstr "ç´°ã‹ã„ãƒãƒ«ã‚¿ãƒ¡ãƒ³ãƒˆã‚¢ãƒƒãƒ—" -#: app/menubar.c:601 +#: app/track-editor.c:247 #, fuzzy -msgid "_Expand Current Pattern" -msgstr "¸½ºß¤Î¥Ñ¥¿¡¼¥ó¤òÊݸ(_S)" +msgid "Extra fine porta down" +msgstr "ç´°ã‹ã„ãƒãƒ«ã‚¿ãƒ¡ãƒ³ãƒˆãƒ€ã‚¦ãƒ³" -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" +#: app/track-editor.c:257 +msgid "None ]" +msgstr "ç„¡ ]" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" msgstr "" -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" msgstr "" -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "XI¥í¡¼¥É(_L)..." +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "XIÊݸ(_S)..." +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "¥«¥ì¥ó¥È¾Ãµî(_C)" +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "̤»ÈÍѳڴïºï½ü(_D)" +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "¥Õ¥ê¥Ã¥«Ìµ¤·¤Î¥¹¥¯¥í¡¼¥ë(_F)" +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Jazz編集:" -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "Á°¤Î¥Õ¥©¥ó¥È(_P)" +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "トラッカー" -#: app/menubar.c:642 -msgid "_Next font" -msgstr "¼¡¤Î¥Õ¥©¥ó¥È(_N)" +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" -msgstr "¹¥¤ß¤ÎÎ×»þµ­¹æ¥¿¥¤¥×¤ËÊѹ¹¤¹¤ë (_A)" +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" -msgstr "¥¨¥Õ¥§¥¯¥È¥³¥é¥àÊÔ½¸¤ÎÊý¸þ¤òÊѤ¨¤ë (_D)" +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "フォント一覧" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "¥ª¥·¥í¥¹¥³¡¼¥×ɽ¼¨(_O)" +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "フォント追加" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "¥È¥é¥Ã¥«¡¼(_T)" +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "フォント削除" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "¥­¡¼¥Ü¡¼¥ÉÀßÄê(_K)..." +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "フォントé©ç”¨" -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "¥ª¡¼¥Ç¥£¥ªÀßÄê(_A)..." +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "フォントé¸æŠž..." -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "GUIÀßÄê(_G)..." +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "曲全体" -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "MIDIÀßÄê..." +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "全パターン" -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "¥¹¥×¥é¥Ã¥·¥å¥¹¥¯¥ê¡¼¥ó¤ò̵¸ú¤Ë¤¹¤ë" +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "ç¾åœ¨ã®ãƒ‘ターン" -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "ÀßÄê¤òº£Êݸ(_S)" +#: app/transposition.c:192 +msgid "Current Track" +msgstr "ç¾åœ¨ã®ãƒˆãƒ©ãƒƒã‚¯" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "½ªÎ»»þ¤ËÀßÄê¤òÊݸ(_E)" +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "ç¾åœ¨ã®æ¥½å™¨" -#: app/menubar.c:690 -msgid "_About..." -msgstr "¾ðÊó(_A)..." +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "全楽器" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "µ»¤Îɽ¼¨(_T)..." +#: app/transposition.c:199 +msgid "Half note up" +msgstr "åŠéŸ³ä¸Šã’ã‚‹" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "_XM¸ú²Ì..." +#: app/transposition.c:200 +msgid "Half note down" +msgstr "åŠéŸ³ä¸‹ã’ã‚‹" -#: app/menubar.c:704 -msgid "_File" -msgstr "¥Õ¥¡¥¤¥ë(_F)" +#: app/transposition.c:201 +msgid "Octave up" +msgstr "オクターブ上ã’ã‚‹" -#: app/menubar.c:705 -msgid "_Module" -msgstr "¥â¥¸¥å¡¼¥ë(_M)" +#: app/transposition.c:202 +msgid "Octave down" +msgstr "オクターブ下ã’ã‚‹" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "ÊÔ½¸(_E)" +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "äº¤æ› 1 <-> 2" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "³Ú´ï(_I)" +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "äº¤æ› 1 -> 2" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "ÀßÄê(_S)" +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "移調ツール" -#: app/menubar.c:711 -msgid "_Help" -msgstr "¥Ø¥ë¥×(_H)" +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "æ“作スコープ:" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" -msgstr "À°¿ô¥ß¥­¥µ¡¼¡¤aÊä´Ö̵¤·¡¤¥Õ¥£¥ë¥¿Ìµ¤·¡¤ºÇÂ祵¥ó¥×¥ë¥µ¥¤¥º1M" +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "移調ã®èª¿" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "³Ú´ï̾" +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "楽器交æ›" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "¥µ¥ó¥×¥ë¿ô" +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "楽器 1:" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "¥µ¥ó¥×¥ë̾" +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "ç¾åœ¨ã®æ¥½å™¨" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Àþ·¿" +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "楽器 2:" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "¥â¥¸¥å¡¼¥ë¾ðÊó" +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" -#: app/module-info.c:164 -msgid "Songname:" -msgstr "¶Ê̾:" +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "パターン長ãŒç¯„囲を越ãˆã¾ã—ãŸ: %d.\n" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "¼þÇÈ¿ô:" +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "パターンã®ãƒ­ãƒ¼ãƒ‰ä¸­ã«ã‚¨ãƒ©ãƒ¼ã€‚" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "ProTracker¥â¡¼¥É" +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" -#: app/module-info.c:395 -#, c-format -msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." msgstr "" -"̤ÍøÍѥѥ¿¡¼¥ó¡§ %d (ÍøÍÑ: %d)\n" -"̤ÍøÍÑ instrument: %d (ÍøÍÑ: %d)\n" -"\n" -"̤ÍøÍÑÎΰè¤ò¥¯¥ê¥¢¤·¤Æ¥×¥ì¥¤¥ê¥¹¥È¤Î½çÈÖ¤ò¹¹¿·¤·¤Þ¤¹¤«¡©\n" -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" -msgstr "ÊÔ½¸Ãæ¤Î¥Ñ¥¿¡¼¥ó¤òÁÞÆþ" +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "楽器ãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸã€‚" -#: app/playlist.c:535 -msgid "Remove current playlist entry" -msgstr "¸½ºß¤Î¥×¥ì¥¤¥ê¥¹¥È¥¨¥ó¥È¥ê¡¼¤òºï½ü" +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" -#: app/playlist.c:543 -msgid "Add + Cpy" -msgstr "Äɲáܥ³¥Ô¡¼" +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" -msgstr "¸½ºß¤Î°ÌÃ֤θå¤Ë¶õ¤­¥Ñ¥¿¡¼¥ó¤òÄɲä·¡¤¸½ºß¤Î¥Ñ¥¿¡¼¥ó¤ò¥³¥Ô¡¼¤¹¤ë" +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "楽器交æ›" -#: app/playlist.c:548 -msgid "Add Free" -msgstr "¶õ¤­¥Ñ¥¿¡¼¥ó¤òÄɲÃ" +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "エンベロープをパンニングã™ã‚‹" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" -msgstr "¸½ºß¤Î°ÌÃ֤θå¤Ë¶õ¤­¥Ñ¥¿¡¼¥ó¤òÄɲÃ" +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "エンベロープをパンニングã™ã‚‹" -#: app/playlist.c:560 +#: app/xm.c:613 #, fuzzy -msgid "Len" -msgstr "Ťµ" +msgid "Envelope parameters reading error." +msgstr "エンベロープをパンニングã™ã‚‹" -#: app/playlist.c:574 -msgid "Song length" -msgstr "¶ÊĹ" +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "ä¸æ­£ãªãƒã‚¤ãƒ–レーション型%dã€æ­£å¼¦æ³¢ã‚’使用ã—ã¾ã™ã€‚\n" -#: app/playlist.c:580 +#: app/xm.c:678 app/xm.c:1233 #, fuzzy -msgid "Rstrt" -msgstr "³Ú´ï" +msgid "Out of memory error!" +msgstr "コピーãƒãƒƒãƒ•ã‚¡ã®ãŸã‚ã®ãƒ¡ãƒ¢ãƒªãŒç„¡ããªã‚Šã¾ã—ãŸ\n" -#: app/playlist.c:593 -msgid "Song restart position" -msgstr "ºÆ³«»Ï°ÌÃÖ" +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "ファイルãŒXI楽器ã§ã¯ã‚ã‚Šã¾ã›ã‚“。" -#: app/preferences.c:74 +#: app/xm.c:717 +#, c-format msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" msgstr "" -"ÀßÄê¥Õ¥¡¥¤¥ë¤òµ­²±¤¹¤ë¤¿¤á¡¢¤¢¤Ê¤¿¤Î¥Û¡¼¥à¡¦¥Ç¥£¥ì¥¯¥È¥ê¤Ë\n" -"¥Ç¥£¥ì¥¯¥È¥ê'.soundtracker'¤¬À¸À®¤µ¤ì¤Þ¤¹¡£\n" - -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "¥ë¡¼¥×̵¤·" -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "¥Ô¥ó¥Ý¥ó" +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "楽器ãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸã€‚" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8¥Ó¥Ã¥È" +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "エンベロープをパンニングã™ã‚‹" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16¥Ó¥Ã¥È" +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "エンベロープをパンニングã™ã‚‹" -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "¥µ¥ó¥×¥ëÊÔ½¸" +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "楽器ãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸã€‚" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "²»ÎÌ" +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "ä¸æ­£ãªãƒã‚¤ãƒ–レーション型%dã€æ­£å¼¦æ³¢ã‚’使用ã—ã¾ã™ã€‚\n" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "¥Ñ¥ó¥Ë¥ó¥°" +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "ÈùÄ´À°" +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "ÁªÂò:" +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "̵" +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "パターンã®ãƒ­ãƒ¼ãƒ‰ä¸­ã«ã‚¨ãƒ©ãƒ¼ã€‚" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Á´¤Æ" +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Ťµ:" +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "ファイルãŒé–‹ã‘ã¾ã›ã‚“" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "¥ë¡¼¥×¤È¤·¤ÆÀßÄê" +#: app/xm.c:1215 +#, fuzzy +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" +"XMヘッダ長ãŒ276ã§ã¯ã‚ã‚Šã¾ã›ã‚“。\n" +"æらãpre-0.0.12 SoundTrackerモジュールã§ã¯? :-)\n" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "RelNote" +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "¥µ¥ó¥×¥ë¡¦¥í¡¼¥É..." +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "WAVÊݸ..." +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "パターンã®ãƒ­ãƒ¼ãƒ‰ä¸­ã«ã‚¨ãƒ©ãƒ¼ã€‚" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "WAV¤È¤·¤ÆÈÏ°ÏÊݸ..." +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "WAVÊݸ" +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"モジュールãŒç¾åœ¨ã®ãƒŸã‚­ã‚µãƒ»ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã¯é•·éŽãŽã‚‹ã‚µãƒ³ãƒ—ルをå«ã‚“ã§ã„ã¾ã™ã€‚\n" +"サンプルã®æœ€å¤§é•·ã¯%dã§ã™ã€‚" -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "ÈÏ°ÏÊݸ" +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "¥â¥Ë¥¿" +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "¥Ü¥ê¥å¡¼¥à¥é¥ó¥×" +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" -#: app/sample-editor.c:425 -#, fuzzy -msgid "Trim" -msgstr "¥È¥ì¥â¥í" +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "ÁªÂòÉôʬ³ÈÂç" +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Á´¤Æɽ¼¨" +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "³ÈÂç(+50%)" +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "" +"FastTracker XMフォーマットã§ã‚‚サãƒãƒ¼ãƒˆã•ã‚ŒãŸMODフォーマットã§ã‚‚ã‚ã‚Šã¾ã›ã‚“!" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "½Ì¾®(-50%)" +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "" +"ファイルを読ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒèµ·ãã¾ã—ãŸã€ã‚‚ã—ãã¯äºˆæœŸã›ã¬ãƒ•ã‚¡ã‚¤ãƒ«ã®çµ‚了ã§ã™" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "¥ê¥Ð¡¼¥¹" +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "ä¸æ­£ã€ã‚‚ã—ãã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„パターンファイルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ï¼" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "ÀÚ¼è" +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "パターン長ãŒä¸æ­£ã§ã™ï¼" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "°ÜÆ°" +#: app/xm.c:1761 app/xm.c:1787 +msgid "Error during saving pattern!" +msgstr "パターンã®ã‚»ãƒ¼ãƒ–中ã«ã‚¨ãƒ©ãƒ¼ã€‚" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "¥³¥Ô¡¼" +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "ŽÉÕ" +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "¥µ¥ó¥×¥ë¾Ãµî" +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" -#: app/sample-editor.c:500 -#, fuzzy -msgid "Crop" -msgstr "¥³¥Ô¡¼" +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(̵ÁªÂò)" +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "¥³¥Ô¡¼¥Ð¥Ã¥Õ¥¡¤Î¤¿¤á¤Î¥á¥â¥ê¤¬Ìµ¤¯¤Ê¤ê¤Þ¤·¤¿\n" +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" -#: app/sample-editor.c:1188 -msgid "" -msgstr "<º£Å½ÉÕ¤±¤µ¤ì¤Þ¤·¤¿>" +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "自動接続" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." -msgstr "¥µ¥ó¥×¥ë¥Ç¡¼¥¿¤Î¤¿¤á¤Î¥á¥â¥ê¤¬Ìµ¤¯¤Ê¤ê¤Þ¤·¤¿¡£" +#: app/midi-settings.c:414 +msgid "Channel" +msgstr "ãƒãƒ£ãƒ³ãƒãƒ«" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Æɤ߹þ¤ß¥¨¥é¡¼¡£" +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "クライアント番å·" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "¥¹¥Æ¥ì¥ª¡¦¥µ¥ó¥×¥ë¡¦¥í¡¼¥É" +#: app/midi-settings.c:434 +msgid "Port number" +msgstr "ãƒãƒ¼ãƒˆç•ªå·" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" -msgstr "" -"¥¹¥Æ¥ì¥ª¡¦¥µ¥ó¥×¥ë¤¬ÁªÂò¤µ¤ì¤Þ¤·¤¿!\n" -"(SoundTracker ¤Ç¤Ï¥â¥Î¡¦¥µ¥ó¥×¥ë¤À¤±½èÍý¤Ç¤­¤Þ¤¹!)\n" -"\n" -"¥í¡¼¥É¤¹¤ë¤¿¤á¤Î¥Á¥ã¥ó¥Í¥ë¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤:" +#: app/midi-settings.c:453 +msgid "Input" +msgstr "入力" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "º¸" +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "å°†æ¥ã®ãŸã‚ã«äºˆç´„" -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "¥ß¥Ã¥¯¥¹" +#: app/midi-settings.c:468 +msgid "Output" +msgstr "出力" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "±¦" +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "デãƒãƒƒã‚°ãƒ¬ãƒ™ãƒ«" -#: app/sample-editor.c:1575 -msgid "Signed" -msgstr "ÀµÉé" +#: app/midi-settings.c:492 +msgid "Misc" +msgstr "ãã®ä»–" -#: app/sample-editor.c:1575 -msgid "Unsigned" -msgstr "Àµ¿ô" +#: app/midi-settings.c:532 +msgid "MIDI Configuration" +msgstr "MIDI設定" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó" +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "パターン" -#: app/sample-editor.c:1576 -msgid "Big-Endian" -msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó" +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "トラック(_T)" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "¥â¥Î¥é¥ë" +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "音符を消ã™(_K)" -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "¥¹¥Æ¥ì¥ª" +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "トラック挿入(_I)" -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "À¸¥µ¥ó¥×¥ë¡¦¥í¡¼¥É" +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "トラック削除(_D)" -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" -msgstr "" -"´ûÃΤǤʤ¤¥µ¥ó¥×¥ë¤òÁªÂò¤·¤Þ¤·¤¿¡£\n" -"À¸¥Ç¡¼¥¿¤òº£¥í¡¼¥É¤Ç¤­¤Þ¤¹¡£\n" -"\n" -"½ñ¼°¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤:" +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "cmd値増加" -#: app/sample-editor.c:1623 -msgid "Word format:" -msgstr "¥ï¡¼¥É½ñ¼°" +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "cmd値減少" -#: app/sample-editor.c:1670 -msgid "Sampling Rate:" -msgstr "¥µ¥ó¥×¥ê¥ó¥°¥ì¡¼¥È¡§" +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "ブロック・マーク消去(_l)" -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "内挿エフェクト(_I)" -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "λ²ò" +#: soundtracker.glade:210 +msgid "_File" +msgstr "ファイル(_F)" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "¥µ¥ó¥×¥ë¤¬Æɤ߹þ¤á¤Þ¤»¤ó" +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "é–‹ã(_O)..." -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." -msgstr "" -"¥µ¥ó¥×¥ë¤¬¸½ºß¤Î¥ß¥­¥µ¡¦¥â¥¸¥å¡¼¥ë¤Ë¤ÏĹ²á¤®¤Þ¤¹¡£\n" -"¤È¤Ë¤«¤¯¥í¡¼¥É¤·¤Þ¤¹¡£" +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "ä¿å­˜(_a)..." -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "2¥Á¥ã¥ó¥Í¥ë¤Þ¤Ç¤Ç 8¡¢16¥Ó¥Ã¥È¡¦¥µ¥ó¥×¥ë¤Î¤ß½èÍý¤Ç¤­¤Þ¤¹" +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "_WAVã¨ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ä¿å­˜..." -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "Îΰè¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡¥" +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "サンプル無ã—ã«XMä¿å­˜..." -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "¥µ¥ó¥×¥ê¥ó¥°³«»Ï" +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "¥µ¥ó¥×¥ê¥ó¥°¡¦¥É¥é¥¤¥Ð¤¬»ÈÍѤǤ­¤Þ¤»¤ó" +#: soundtracker.glade:302 +msgid "_Module" +msgstr "モジュール(_M)" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "¥µ¥ó¥×¥ê¥ó¥°¡¦¥¦¥£¥ó¥É¥¦" +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "/モジュール/å…¨ã¦æ¶ˆåŽ»(_A)" -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" -msgstr "¥µ¥ó¥×¥ê¥ó¥°Ãæ¤Ë¥á¥â¥ê¤¬Ìµ¤¯¤Ê¤ê¤Þ¤·¤¿¡£" +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "パターンã®ã¿æ¶ˆåŽ»(_P)" -#: app/sample-editor.c:2155 -msgid "" -msgstr "<º£¥µ¥ó¥×¥ê¥ó¥°¤·¤Þ¤·¤¿>" +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "モジュール最é©åŒ–(_O)" -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." -msgstr "" -"Ï¿²»¤·¤¿¥µ¥ó¥×¥ë¤¬¸½ºß¤Î¥ß¥­¥µ¡¦¥â¥¸¥å¡¼¥ë¤Ë¤ÏĹ²á¤®¤Þ¤¹¡£\n" -"¤È¤Ë¤«¤¯¤½¤ì¤ò»È¤¤¤Þ¤¹¡£" +#: soundtracker.glade:346 +#, fuzzy +msgid "_Set Optimal Amplification" +msgstr "全体的ãªéŸ³é‡å¢—å¹…" -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "µ¬³Ê²½" +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "編集(_E)" -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "¼Â¹Ô" +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "_Jazz編集モード" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "¥Ü¥ê¥å¡¼¥à¥é¥ó¥×²½" +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "移調(_o)..." -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "ÁªÂò»þ¤Ë²»Î̤òÀþ·¿¤Ë¥Õ¥§¡¼¥É¤¹¤ë" +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "パターン(_P)" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "º¸ [%]:" +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "トラック(_T)" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "H" +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "é¸æŠž(_S)" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "D" +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "マーク・モード(_M)" -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "±¦ [%]:" +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "åŠéŸ³ä¸Šã’ã‚‹" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" -msgstr "" +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "åŠéŸ³ä¸‹ã’ã‚‹" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" -msgstr "" +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "オクターブ上ã’ã‚‹" -#: app/sample-editor.c:2505 -msgid "Trim at the end" -msgstr "" +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "オクターブ下ã’ã‚‹" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" -msgstr "" +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "パターンを読ã¿è¾¼ã¿(_o)" -#: app/tips-dialog.c:50 -msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." -msgstr "" -"SoundTracker¤Ø¤è¤¦¤³¤½!\n" -"\n" -"¤³¤¦¤¤¤Ã¤¿¥×¥í¥°¥é¥à¤Ë·Ð¸³¤¬¤Ê¤±¤ì¤Ð¡¢¤¤¤¯¤Ä¤«XM¤äMOD¥Õ¥¡¥¤¥ë¤ò»ý¤Ã¤Æ\n" -"¤­¤Æ±éÁÕ¤·¤¿Êý¤¬¤¤¤¤¤Í¡£" +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "ç¾åœ¨ã®ãƒ‘ターンをä¿å­˜(_S)" -#: app/tips-dialog.c:55 -msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." -msgstr "" -"¥ª¡¼¥Ç¥£¥ªÀßÄê¤Î\"ÊÔ½¸¤·¤Æ¤¤¤ë\"¥ª¥Ö¥¸¥§¥¯¥È¤Î¥ß¥­¥·¥ó¥°¡¦¥Ð¥Ã¥Õ¥¡¡¦¥µ¥¤¥º\n" -"¤ò¸º¤é¤»¤Ð¡¢SoundTracker¤ÎÊÔ½¸¥â¡¼¥É¤Ç¥­¡¼¥Ü¡¼¥ÉÆþÎϤËÂФ·¤Æ¤â¤Ã¤ÈÈ¿±þ¤¹\n" -"¤ë¤è¤¦¤Ë¤Ç¤­¤ë¤è¡£" +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "未使用パターン検索(_F)" -#: app/tips-dialog.c:59 -msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" -msgstr "" -"¥µ¥ó¥×¥ë¡¦¥¨¥Ç¥£¥¿¤Ç¡¢¥·¥Õ¥È¡¦¥­¡¼¤ò²¡¤·¤Ê¤¬¤é¥Þ¥¦¥¹¤Î±¦¤Èº¸¤Î¥Ü¥¿¥ó¤ò»È\n" -"¤Ã¤Æ¡¢¥ë¡¼¥×¡¦¥Ý¥¤¥ó¥È¤ò¹ç¤»¤é¤ì¤ë¤è¡£\n" +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "未使用パターンã«ã‚«ãƒ¬ãƒ³ãƒˆã‚’コピー(_C)" -#: app/tips-dialog.c:62 -msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" -msgstr "" -"¥È¥é¥Ã¥­¥ó¥°¤ä¤¤¤í¤¤¤í¤Ê¥³¥Þ¥ó¥É¤¬¤É¤¦¤¤¤¦¤Õ¤¦¤ËÆ°ºî¤¹¤ë¤Î¤«¤â¤Ã¤ÈÃΤꤿ\n" -"¤±¤ì¤Ð¡¢http://www.united-trackers.org/¤Çõ¤·¤Æ¤Í¡£" +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "ç¾åœ¨ã®ãƒ‘ターンをä¿å­˜(_S)" -#: app/tips-dialog.c:65 -msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" msgstr "" -"³Ú´ïÊÔ½¸¥Ú¡¼¥¸¤Ç¡¢¥µ¥ó¥×¥ë¤ò¥¢¥¯¥Æ¥£¥Ö¤Ë¤·¤Æ¤«¤é¥­¡¼¥Ü¡¼¥É¤ò¥¯¥ê¥Ã¥¯\n" -"¤¹¤ë¤È¸Ä¡¹¤Î¥­¡¼¤Ë³Ú´ï¤Î¥µ¥ó¥×¥ë¤ò³äÅö¤Æ¤é¤ì¤ë¤è¡£" -#: app/tips-dialog.c:69 -msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" -msgstr "" -"¥«¡¼¥½¥ë¤¬¿ôÃÍÆþÎÏ¥Õ¥£¡¼¥ë¥É¤Ë°ú¤Ã¤«¤«¤Ã¤Æ¤¤¤¿¤ê¤·¤Þ¤¹¤«¡©\n" -"¥ê¥¿¡¼¥ó¤«¥¿¥Ö¤ò²¡¤»¤ÐÈ´¤±½Ð¤»¤Þ¤¹¤è¡ª" +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "未使用パターン消去(_l)" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "º£Æü¤ÎSoundTracker¤Îµ»" +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "パターン・パック(_P)" -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Á°¤Îµ»" +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "ç¾åœ¨ã®ãƒ‘ターン" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "¼¡¤Îµ»" +#: soundtracker.glade:753 +#, fuzzy +msgid "_Expand Current Pattern" +msgstr "ç¾åœ¨ã®ãƒ‘ターンをä¿å­˜(_S)" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "¼¡²ó¤âµ»¤ò¸«¤»¤ë" +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "¥¢¥ë¥Ú¥¸¥ª" +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "¥Ý¥ë¥¿¥á¥ó¥È¥¢¥Ã¥×" +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "ç¾åœ¨ã®ãƒˆãƒ©ãƒƒã‚¯" -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "¥Ý¥ë¥¿¥á¥ó¥È¥À¥¦¥ó" +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "ç¾åœ¨ã®ãƒˆãƒ©ãƒƒã‚¯" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" -msgstr "¥È¡¼¥ó¥Ý¥ë¥¿¥á¥ó¥È" +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "ç¾åœ¨ã®ãƒˆãƒ©ãƒƒã‚¯" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "¥Ó¥Ö¥é¡¼¥È" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "楽器(_I)" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" -msgstr "¥È¡¼¥ó¥Ý¥ë¥¿¥á¥ó¥È¡Ü¥Ü¥ê¥å¡¼¥à¥¹¥é¥¤¥É" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "XIロード" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" -msgstr "¥Ó¥Ö¥é¡¼¥È+¥Ü¥ê¥å¡¼¥à¡¦¥¹¥é¥¤¥É" +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "XIä¿å­˜" -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "¥È¥ì¥â¥í" +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "カレント消去(_C)" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "¥Ñ¥ó¥Ë¥ó¥°¤ÎÀßÄê" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "未使用楽器削除(_D)" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "°ÌÃÖ¥¸¥ã¥ó¥×" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "設定(_S)" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "²»ÎÌÀßÄê" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "オシロスコープ表示(_O)" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "¥Ñ¥¿¡¼¥ó¥Ö¥ì¡¼¥¯" +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "¥Æ¥ó¥Ý/bpmÀßÄê" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "トラッカー(_T)" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Á´ÂΥܥê¥å¡¼¥àÀßÄê" +#: soundtracker.glade:913 +#, fuzzy +msgid "_Flicker-free Scrolling" +msgstr "フリッカ無ã—ã®ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«(_F)" -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "Á´ÂΥܥê¥å¡¼¥à¡¦¥¹¥é¥¤¥É" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "å‰ã®ãƒ•ã‚©ãƒ³ãƒˆ(_P)" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "¥­¡¼¥ª¥Õ" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "次ã®ãƒ•ã‚©ãƒ³ãƒˆ(_N)" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "¥¨¥ó¥Ù¥í¡¼¥×°ÌÃÖÀßÄê" +#: soundtracker.glade:944 +#, fuzzy +msgid "Change Preferred _Accidental Type" +msgstr "好ã¿ã®è‡¨æ™‚記å·ã‚¿ã‚¤ãƒ—ã«å¤‰æ›´ã™ã‚‹ (_A)" -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "¥Ñ¥ó¥Ë¥ó¥°¥¹¥é¥¤¥É" +#: soundtracker.glade:953 +#, fuzzy +msgid "Change Effect Column _Editing Direction" +msgstr "エフェクトコラム編集ã®æ–¹å‘を変ãˆã‚‹" -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "LP¥Õ¥£¥ë¥¿¡¦¥ì¥¾¥Ê¥ó¥¹" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "キーボード設定" -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "¥Þ¥ë¥Á¥ê¥È¥ê¥¬¥Î¡¼¥È" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "オーディオ設定" -#: app/track-editor.c:142 -msgid "Tremor" -msgstr "¥È¥ì¥â¥í" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "GUI設定" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "LP¥Õ¥£¥ë¥¿¡¦¥«¥Ã¥È¥ª¥Õ" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "MIDI設定" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "ºÙ¤«¤¤¥Ý¥ë¥¿¥á¥ó¥È¥¢¥Ã¥×" +#: soundtracker.glade:1016 +#, fuzzy +msgid "_Disable Splash Screen" +msgstr "スプラッシュスクリーンを無効ã«ã™ã‚‹" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "ºÙ¤«¤¤¥Ý¥ë¥¿¥á¥ó¥È¥À¥¦¥ó" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "設定を今ä¿å­˜(_S)" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "¥°¥ê¥Ã¥µ¥ó¥ÉÁàºîÀßÄê" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "終了時ã«è¨­å®šã‚’ä¿å­˜(_E)" -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "¥Ó¥Ö¥é¡¼¥ÈÁàºîÀßÄê" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "ヘルプ(_H)" -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "ÈùÄ´À°ÀßÄê" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "情報(_A)..." -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "¥ë¡¼¥×³«»ÏÀßÄê/¥ë¡¼¥×" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "技ã®è¡¨ç¤º(_T)..." -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "¥È¥ì¥â¥íÁàºîÀßÄê" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "_XM効果..." -#: app/track-editor.c:161 -msgid "Retrig note" -msgstr "¥Î¡¼¥È¥ê¥È¥ê¥¬" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "曲演å¥" -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "ºÙ¤«¤¤¥Ü¥ê¥å¡¼¥à¤Î¥¹¥é¥¤¥É¥¢¥Ã¥×" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "曲演å¥" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "ºÙ¤«¤¤¥Ü¥ê¥å¡¼¥à¤Î¥¹¥é¥¤¥É¥À¥¦¥ó" +#~ msgid "transport master" +#~ msgstr "トランスãƒãƒ¼ãƒˆãƒžã‚¹ã‚¿ãƒ¼" -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "²»ÉäÀÚ¼è" +#~ msgid "SoundTracker Startup" +#~ msgstr "SoundTrackerèµ·å‹•" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "²»Éä¤ÎÃÙ±ä" +#~ msgid "Vibrato Type:" +#~ msgstr "ビブラート型:" -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "¥Ñ¥¿¡¼¥ó¤ÎÃÙ±ä" +#~ msgid "VolFade" +#~ msgstr "音é‡ãƒ•ã‚§ãƒ¼ãƒ‰" -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "¥Ü¥ê¥å¡¼¥à¡¦¥¹¥é¥¤¥É¡¦¥À¥¦¥ó" +#~ msgid "Set loop begin/loop" +#~ msgstr "ループ開始設定/ループ" -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "¥Ü¥ê¥å¡¼¥à¡¦¥¹¥é¥¤¥É¡¦¥¢¥Ã¥×" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "音符" -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "¥Ó¥Ö¥é¡¼¥È®ÅÙÀßÄê" +#~ msgid "Error while loading instruments." +#~ msgstr "楽器ã®ãƒ­ãƒ¼ãƒ‰ä¸­ã«ã‚¨ãƒ©ãƒ¼ã€‚" -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "¥Ñ¥ó¥Ë¥ó¥°¤òº¸¤Ë¥¹¥é¥¤¥É" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "ESDを追加ã—ãŸå¾…ã¡æ™‚é–“ã§ã€ESD出力ãŒ\n" +#~ "対話モードã§ä½¿ãˆãªã„ã®ã§æ³¨æ„ã—ã¦ã\n" +#~ "ã ã•ã„。é‡å¤§ãªä½œæ¥­ã«ã¯OSSã‚„ALSA出\n" +#~ "力プラグインを使ã£ã¦ãã ã•ã„。" -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "¥Ñ¥ó¥Ë¥ó¥°¤ò±¦¤Ë¥¹¥é¥¤¥É" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "サウンド出力をESDã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸ:\n" +#~ "%s" -#: app/track-editor.c:184 -msgid "sine" -msgstr "Àµ¸¹ÇÈ" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "サンプリングをå†é–‹ã™ã‚‹ã¾ã§ã“れらã®å¤‰æ›´ã¯ãªã•ã‚Œã¾ã›ã‚“。" -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "¥é¥ó¥×²¼¤²" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "楽器交æ›" -#: app/track-editor.c:186 -msgid "square" -msgstr "¶ë·ÁÇÈ" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "%s: è¦æ±‚ã•ã‚ŒãŸã‚µã‚¦ãƒ³ãƒ‰ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, c-format -msgid "None ]" -msgstr "̵ ]" +#~ msgid "%s: %s" +#~ msgstr "%s: %s" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "JazzÊÔ½¸:" +#~ msgid "%s: Cannot play (%s)" +#~ msgstr "%s: å†ç”Ÿã§ãã¾ã›ã‚“ (%s)" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "¥È¥é¥Ã¥«¡¼" +#~ msgid "%s: Cannot record (%s)" +#~ msgstr "%s: 録音ã§ãã¾ã›ã‚“ (%s)" -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "¥Õ¥©¥ó¥È°ìÍ÷" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "未知ã®XIãƒãƒ¼ã‚¸ãƒ§ãƒ³0x%xã§ã™\n" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "¥Õ¥©¥ó¥ÈÄɲÃ" +#~ msgid "out_1" +#~ msgstr "out_1" -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "¥Õ¥©¥ó¥Èºï½ü" +#~ msgid "out_2" +#~ msgstr "out_2" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "¥Õ¥©¥ó¥ÈŬÍÑ" +#~ msgid "Monitor" +#~ msgstr "モニタ" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "¾å" +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "サンプル数" -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "²¼" +#~ msgid "OK" +#~ msgstr "了解" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "¥Õ¥©¥ó¥ÈÁªÂò..." +#~ msgid "Cancel" +#~ msgstr "å–消" -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "¶ÊÁ´ÂÎ" +#~ msgid "(%d bytes)" +#~ msgstr "(%dãƒã‚¤ãƒˆ)" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Á´¥Ñ¥¿¡¼¥ó" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "推定オーディオ・ディレイ: %fマイクロ秒" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "¸½ºß¤Î¥Ñ¥¿¡¼¥ó" +#~ msgid "ALSA card number:" +#~ msgstr "ALSAカード番å·:" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "¸½ºß¤Î¥È¥é¥Ã¥¯" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "サウンド出力ã«å¯¾ã—ã¦ALSAデãƒã‚¤ã‚¹(カード:%dã€ãƒ‡ãƒã‚¤ã‚¹:%d)ãŒé–‹ã‘ã¾ã›ã‚“ã§ã—" +#~ "ãŸ:\n" +#~ "%s" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "¸½ºß¤Î³Ú´ï" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "è¦æ±‚ã•ã‚ŒãŸã‚µã‚¦ãƒ³ãƒ‰å‡ºåŠ›ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Á´³Ú´ï" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "サウンド出力ã«å¯¾ã—ã¦ALSAデãƒã‚¤ã‚¹(カード:%dã€ãƒ‡ãƒã‚¤ã‚¹:%d)ãŒé–‹ã‘ã¾ã›ã‚“ã§ã—" +#~ "ãŸ:\n" +#~ "%s" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Ⱦ²»¾å¤²¤ë" +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "è¦æ±‚ã•ã‚ŒãŸãƒãƒ£ãƒ³ãƒãƒ«å‡ºåŠ›ãƒ‘ラメータãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "Ⱦ²»²¼¤²¤ë" +#~ msgid "Alsa setup error.\n" +#~ msgstr "ALSAセットアップエラー.\n" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "¥ª¥¯¥¿¡¼¥Ö¾å¤²¤ë" +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "サウンド出力ã«å¯¾ã—㦠%s ãŒé–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ:\n" +#~ "%s" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "¥ª¥¯¥¿¡¼¥Ö²¼¤²¤ë" +#~ msgid "soundtracker" +#~ msgstr "soundtracker" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "¸ò´¹ 1 <-> 2" +#~ msgid "Save Song" +#~ msgstr "曲ä¿å­˜" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "¸ò´¹ 1 -> 2" +#~ msgid "Yes" +#~ msgstr "ã¯ã„" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "°ÜÄ´¥Ä¡¼¥ë" +#~ msgid "No" +#~ msgstr "ã„ã„ãˆ" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Áàºî¥¹¥³¡¼¥×:" +#~ msgid "Close" +#~ msgstr "é–‰ã˜ã‚‹" -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "°ÜÄ´¤ÎÄ´" +#~ msgid "No file selected." +#~ msgstr "ファイルãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "³Ú´ï¸ò´¹" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "ファイルを上書ãã—ãŸã„ã®ã¯ç¢ºã‹ã§ã™ã‹?" -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "³Ú´ï 1:" +#~ msgid "Load XM..." +#~ msgstr "XMロード..." -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "¸½ºß¤Î³Ú´ï" +#~ msgid "Save XM..." +#~ msgstr "XMä¿å­˜..." -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "³Ú´ï 2:" +#~ msgid "Save song as XM..." +#~ msgstr "XMã¨ã—ã¦æ›²ä¿å­˜..." -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "¥Ñ¥¿¡¼¥óŤ¬ÈϰϤò±Û¤¨¤Þ¤·¤¿: %d.\n" +#~ msgid "Load Instrument..." +#~ msgstr "楽器ロード..." -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "¥Õ¥¡¥¤¥ë¤¬XI³Ú´ï¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£" +#~ msgid "Save Instrument..." +#~ msgstr "楽器ä¿å­˜..." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "̤ÃΤÎXI¥Ð¡¼¥¸¥ç¥ó0x%x¤Ç¤¹\n" +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "キーボード設定ファイルãŒä¸å®Œå…¨ã§ã™ã€‚\n" +#~ "キーボード設定ダイアログを使用ã—ã¦ãã ã•ã„。" -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "ÉÔÀµ¤Ê¥Ð¥¤¥Ö¥ì¡¼¥·¥ç¥ó·¿%d¡¢Àµ¸¹ÇȤò»ÈÍѤ·¤Þ¤¹¡£\n" +#~ msgid "Ok" +#~ msgstr "了解" -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "¥Ñ¥¿¡¼¥ó¤Î¥í¡¼¥ÉÃæ¤Ë¥¨¥é¡¼¡£" +#~ msgid "_Quit" +#~ msgstr "終了(_Q)" -#: app/xm.c:927 -msgid "Can't open file" -msgstr "¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó" +#~ msgid "C_ut" +#~ msgstr "切å–(_u)" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "³Ú´ï¤Î¥í¡¼¥ÉÃæ¤Ë¥¨¥é¡¼¡£" +#~ msgid "_Copy" +#~ msgstr "コピー(_C)" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"¥â¥¸¥å¡¼¥ë¤¬¸½ºß¤Î¥ß¥­¥µ¡¦¥â¥¸¥å¡¼¥ë¤Ë¤ÏĹ²á¤®¤ë¥µ¥ó¥×¥ë¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¡£\n" -"¥µ¥ó¥×¥ë¤ÎºÇÂçŤÏ%d¤Ç¤¹¡£" +#~ msgid "_Paste" +#~ msgstr "貼付(_P)" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "" -"FastTracker XM¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤â¥µ¥Ý¡¼¥È¤µ¤ì¤¿MOD¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤â¤¢¤ê¤Þ¤»¤ó!" +#, fuzzy +#~ msgid "P_aste" +#~ msgstr "貼付" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "" -"¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤ßÃæ¤Ë¥¨¥é¡¼¤¬µ¯¤­¤Þ¤·¤¿¡¢¤â¤·¤¯¤Ïͽ´ü¤»¤Ì¥Õ¥¡¥¤¥ë¤Î½ªÎ»¤Ç¤¹" +#~ msgid "_Load XI..." +#~ msgstr "XIロード(_L)..." -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "ÉÔÀµ¡¢¤â¤·¤¯¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ñ¥¿¡¼¥ó¥Õ¥¡¥¤¥ë¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤¹¡ª" +#~ msgid "_Save XI..." +#~ msgstr "XIä¿å­˜(_S)..." -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "¥Ñ¥¿¡¼¥óŤ¬ÉÔÀµ¤Ç¤¹¡ª" +#~ msgid "Change effect column editing _direction" +#~ msgstr "エフェクトコラム編集ã®æ–¹å‘を変ãˆã‚‹ (_D)" -#: app/xm.c:1468 -msgid "Error during saving pattern!" -msgstr "¥Ñ¥¿¡¼¥ó¤Î¥»¡¼¥ÖÃæ¤Ë¥¨¥é¡¼¡£" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "キーボード設定(_K)..." -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "¼«Æ°Àܳ" +#~ msgid "_Audio Configuration..." +#~ msgstr "オーディオ設定(_A)..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -msgid "Channel" -msgstr "¥Á¥ã¥ó¥Í¥ë" +#~ msgid "_GUI Configuration..." +#~ msgstr "GUI設定(_G)..." -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "¥¯¥é¥¤¥¢¥ó¥ÈÈÖ¹æ" +#~ msgid "_MIDI Configuration..." +#~ msgstr "MIDI設定..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" -msgstr "¥Ý¡¼¥ÈÈÖ¹æ" +#~ msgid "Load Sample..." +#~ msgstr "サンプル・ロード..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -msgid "Input" -msgstr "ÆþÎÏ" +#~ msgid "Save WAV..." +#~ msgstr "WAVä¿å­˜..." -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "¾­Íè¤Î¤¿¤á¤ËͽÌó" +#~ msgid "8363" +#~ msgstr "8363" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -msgid "Output" -msgstr "½ÐÎÏ" +#~ msgid "Execute" +#~ msgstr "実行" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "¥Ç¥Ð¥Ã¥°¥ì¥Ù¥ë" +#~ msgid "Apply" +#~ msgstr "é©ç”¨" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -msgid "Misc" -msgstr "¤½¤Î¾" +#~ msgid "Drivers" +#~ msgstr "ドライãƒ" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -msgid "MIDI Configuration" -msgstr "MIDIÀßÄê" +#~ msgid "Up" +#~ msgstr "上" -#~ msgid "Pattern" -#~ msgstr "¥Ñ¥¿¡¼¥ó" +#~ msgid "Down" +#~ msgstr "下" #~ msgid "_Accidentals" -#~ msgstr "¥¢¥¯¥·¥Ç¥ó¥¿¥ë(_A)" +#~ msgstr "アクシデンタル(_A)" #~ msgid "# _Accidentals" -#~ msgstr "# ¥¢¥¯¥·¥Ç¥ó¥¿¥ë(_A)" +#~ msgstr "# アクシデンタル(_A)" #~ msgid "Current pos" -#~ msgstr "¸½ºß°ÌÃÖ" +#~ msgstr "ç¾åœ¨ä½ç½®" #~ msgid "`Save XM' saves all non-empty patterns" -#~ msgstr "`ÊݸXM'¤ÇÁ´¤Æ¤Î¶õ¤Ç¤Ê¤¤¥Ñ¥¿¡¼¥ó¤òÊݸ" +#~ msgstr "`ä¿å­˜XM'ã§å…¨ã¦ã®ç©ºã§ãªã„パターンをä¿å­˜" #~ msgid "Advance cursor horizontally in effect columns" -#~ msgstr "¥¨¥Õ¥§¥¯¥ÈÎó¤Ç¥«¡¼¥½¥ë¤ò¿åÊ¿¤Ë¿Ê¤á¤ë" +#~ msgstr "エフェクト列ã§ã‚«ãƒ¼ã‚½ãƒ«ã‚’æ°´å¹³ã«é€²ã‚ã‚‹" #~ msgid "Tempo and BPM update" -#~ msgstr "¥Æ¥ó¥Ý¤ÈBPM¤Î¹¹¿·" +#~ msgstr "テンãƒã¨BPMã®æ›´æ–°" #~ msgid "Auto switch" -#~ msgstr "¼«Æ°Àڤ괹¤¨" +#~ msgstr "自動切りæ›ãˆ" #~ msgid "Use anti-aliased envelope editor" -#~ msgstr "¥¢¥ó¥Á¡¦¥¨¥¤¥ê¥¢¥¹¡¦¥¨¥ó¥Ù¥í¡¼¥×¡¦¥¨¥Ç¥£¥¿»ÈÍÑ" +#~ msgstr "アンãƒãƒ»ã‚¨ã‚¤ãƒªã‚¢ã‚¹ãƒ»ã‚¨ãƒ³ãƒ™ãƒ­ãƒ¼ãƒ—・エディタ使用" #~ msgid "" #~ "You need to restart SoundTracker for this change to come into effect." -#~ msgstr "¤³¤ÎÊѹ¹¤òÈ¿±Ç¤¹¤ë¤Ë¤ÏSoundTracker¤òºÆµ¯Æ°¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£" +#~ msgstr "ã“ã®å¤‰æ›´ã‚’å映ã™ã‚‹ã«ã¯SoundTrackerã‚’å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" #~ msgid "Idle." -#~ msgstr "¥¢¥¤¥É¥ë¡£" +#~ msgstr "アイドル。" #~ msgid "Use _Backing Store" -#~ msgstr "_Backing Store»ÈÍÑ" +#~ msgstr "_Backing Store使用" #~ msgid "/_File" -#~ msgstr "/¥Õ¥¡¥¤¥ë" +#~ msgstr "/ファイル" #~ msgid "/File/_Open..." -#~ msgstr "/¥Õ¥¡¥¤¥ë/³«¤¯(_O)..." +#~ msgstr "/ファイル/é–‹ã(_O)..." #~ msgid "/File/Save _as..." -#~ msgstr "/¥Õ¥¡¥¤¥ë/Êݸ(_a)..." +#~ msgstr "/ファイル/ä¿å­˜(_a)..." #~ msgid "/File/-" -#~ msgstr "/¥Õ¥¡¥¤¥ë/-" +#~ msgstr "/ファイル/-" #~ msgid "/File/Save Module as _WAV..." -#~ msgstr "/¥Õ¥¡¥¤¥ë/_WAV¤È¤·¤Æ¥â¥¸¥å¡¼¥ë¤òÊݸ..." +#~ msgstr "/ファイル/_WAVã¨ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ä¿å­˜..." #~ msgid "/File/Save XM without samples..." -#~ msgstr "/¥Õ¥¡¥¤¥ë/¥µ¥ó¥×¥ë̵¤·¤ËXMÊݸ..." +#~ msgstr "/ファイル/サンプル無ã—ã«XMä¿å­˜..." #~ msgid "/File/_Quit" -#~ msgstr "/¥Õ¥¡¥¤¥ë/½ªÎ»(_Q)" +#~ msgstr "/ファイル/終了(_Q)" #~ msgid "/_Module" -#~ msgstr "/¥â¥¸¥å¡¼¥ë" - -#~ msgid "/Module/Clear _All" -#~ msgstr "/¥â¥¸¥å¡¼¥ë/Á´¤Æ¾Ãµî(_A)" +#~ msgstr "/モジュール" #~ msgid "/Module/Clear _Patterns Only" -#~ msgstr "/¥â¥¸¥å¡¼¥ë/¥Ñ¥¿¡¼¥ó¤Î¤ß¾Ãµî(_P)" +#~ msgstr "/モジュール/パターンã®ã¿æ¶ˆåŽ»(_P)" #~ msgid "/Module/_Optimize Module" -#~ msgstr "/¥â¥¸¥å¡¼¥ë/¥â¥¸¥å¡¼¥ëºÇŬ²½(_O)" +#~ msgstr "/モジュール/モジュール最é©åŒ–(_O)" #~ msgid "/_Edit" -#~ msgstr "/ÊÔ½¸" +#~ msgstr "/編集" #~ msgid "/Edit/_Jazz Edit Mode" -#~ msgstr "/ÊÔ½¸/_JazzÊÔ½¸¥â¡¼¥É" +#~ msgstr "/編集/_Jazz編集モード" #~ msgid "/Edit/-" -#~ msgstr "/ÊÔ½¸/-" +#~ msgstr "/編集/-" #~ msgid "/Edit/_Transposition..." -#~ msgstr "/ÊÔ½¸/°ÜÄ´(_T)..." +#~ msgstr "/編集/移調(_T)..." #~ msgid "/Edit/Pattern/C_ut" -#~ msgstr "/ÊÔ½¸/¥Ñ¥¿¡¼¥ó/ÀÚ¼è(_u)" +#~ msgstr "/編集/パターン/切å–(_u)" #~ msgid "/Edit/Pattern/_Copy" -#~ msgstr "/ÊÔ½¸/¥Ñ¥¿¡¼¥ó/¥³¥Ô¡¼(_C)" +#~ msgstr "/編集/パターン/コピー(_C)" #~ msgid "/Edit/Pattern/_Paste" -#~ msgstr "/ÊÔ½¸/¥Ñ¥¿¡¼¥ó/ŽÉÕ(_P)" +#~ msgstr "/編集/パターン/貼付(_P)" #~ msgid "/Edit/_Track" -#~ msgstr "/ÊÔ½¸/¥È¥é¥Ã¥¯" +#~ msgstr "/編集/トラック" #~ msgid "/Edit/Track/C_ut" -#~ msgstr "/ÊÔ½¸/¥È¥é¥Ã¥¯/ÀÚ¼è(_u)" +#~ msgstr "/編集/トラック/切å–(_u)" #~ msgid "/Edit/Track/_Copy" -#~ msgstr "/ÊÔ½¸/¥È¥é¥Ã¥¯/¥³¥Ô¡¼(_C)" +#~ msgstr "/編集/トラック/コピー(_C)" #~ msgid "/Edit/Track/_Paste" -#~ msgstr "/ÊÔ½¸/¥È¥é¥Ã¥¯/ŽÉÕ(_P)" +#~ msgstr "/編集/トラック/貼付(_P)" #~ msgid "/Edit/Track/_Kill notes" -#~ msgstr "/ÊÔ½¸/¥È¥é¥Ã¥¯/²»Éä¤ò¾Ã¤¹(_K)" +#~ msgstr "/編集/トラック/音符を消ã™(_K)" #~ msgid "/Edit/Track/_Insert" -#~ msgstr "/ÊÔ½¸/¥È¥é¥Ã¥¯/ÁÞÆþ(_I)" +#~ msgstr "/編集/トラック/挿入(_I)" #~ msgid "/Edit/Track/_Delete" -#~ msgstr "/ÊÔ½¸/¥È¥é¥Ã¥¯/ºï½ü(_D)" +#~ msgstr "/編集/トラック/削除(_D)" #~ msgid "/Edit/_Selection" -#~ msgstr "/ÊÔ½¸/ÁªÂò" +#~ msgstr "/編集/é¸æŠž" #~ msgid "/Edit/Selection/_Mark mode" -#~ msgstr "/ÊÔ½¸/ÁªÂò/¥Þ¡¼¥¯¡¦¥â¡¼¥É(_M)" +#~ msgstr "/編集/é¸æŠž/マーク・モード(_M)" #~ msgid "/Edit/Selection/C_lear block marks" -#~ msgstr "/ÊÔ½¸/ÁªÂò/¥Ö¥í¥Ã¥¯¡¦¥Þ¡¼¥¯¾Ãµî(_l)" +#~ msgstr "/編集/é¸æŠž/ブロック・マーク消去(_l)" #~ msgid "/Edit/Selection/C_ut" -#~ msgstr "/ÊÔ½¸/ÁªÂò/ÀÚ¼è(_u)" +#~ msgstr "/編集/é¸æŠž/切å–(_u)" #~ msgid "/Edit/Selection/_Copy" -#~ msgstr "/ÊÔ½¸/ÁªÂò/¥³¥Ô¡¼(_C)" +#~ msgstr "/編集/é¸æŠž/コピー(_C)" #~ msgid "/Edit/Selection/_Paste" -#~ msgstr "/ÊÔ½¸/ÁªÂò/ŽÉÕ(_P)" +#~ msgstr "/編集/é¸æŠž/貼付(_P)" #~ msgid "/Edit/Selection/_Interpolate effects" -#~ msgstr "/ÊÔ½¸/ÁªÂò/ÆâÁÞ¥¨¥Õ¥§¥¯¥È(_I)" +#~ msgstr "/編集/é¸æŠž/内挿エフェクト(_I)" #~ msgid "/Edit/Track/Increment cmd value" -#~ msgstr "/ÊÔ½¸/¥È¥é¥Ã¥¯/cmdÃÍÁý²Ã" +#~ msgstr "/編集/トラック/cmd値増加" #~ msgid "/Edit/Track/Decrement cmd value" -#~ msgstr "/ÊÔ½¸/¥È¥é¥Ã¥¯/cmdÃ͸º¾¯" +#~ msgstr "/編集/トラック/cmd値減少" #~ msgid "/_Pattern" -#~ msgstr "/¥Ñ¥¿¡¼¥ó" +#~ msgstr "/パターン" #~ msgid "/Pattern/_Find Unused Pattern" -#~ msgstr "/¥Ñ¥¿¡¼¥ó/̤»ÈÍѥѥ¿¡¼¥ó¸¡º÷(_F)" +#~ msgstr "/パターン/未使用パターン検索(_F)" #~ msgid "/Pattern/_Copy Current to Unused Pattern" -#~ msgstr "/¥Ñ¥¿¡¼¥ó/̤»ÈÍѥѥ¿¡¼¥ó¤Ë¥«¥ì¥ó¥È¤ò¥³¥Ô¡¼(_C)" +#~ msgstr "/パターン/未使用パターンã«ã‚«ãƒ¬ãƒ³ãƒˆã‚’コピー(_C)" #~ msgid "/Pattern/C_lear Unused Patterns" -#~ msgstr "/¥Ñ¥¿¡¼¥ó/̤»ÈÍѥѥ¿¡¼¥ó¾Ãµî(_l)" +#~ msgstr "/パターン/未使用パターン消去(_l)" #~ msgid "/Pattern/_Pack Patterns" -#~ msgstr "/¥Ñ¥¿¡¼¥ó/¥Ñ¥¿¡¼¥ó¡¦¥Ñ¥Ã¥¯(_P)" +#~ msgstr "/パターン/パターン・パック(_P)" #~ msgid "/_Instrument" -#~ msgstr "/³Ú´ï" +#~ msgstr "/楽器" #~ msgid "/Instrument/_Load XI..." -#~ msgstr "/³Ú´ï/XI¥í¡¼¥É(_L)..." +#~ msgstr "/楽器/XIロード(_L)..." #~ msgid "/Instrument/_Save XI..." -#~ msgstr "/³Ú´ï/XIÊݸ(_S)..." +#~ msgstr "/楽器/XIä¿å­˜(_S)..." #~ msgid "/Instrument/-" -#~ msgstr "/³Ú´ï/-" +#~ msgstr "/楽器/-" #~ msgid "/Instrument/_Clear Current" -#~ msgstr "/³Ú´ï/¥«¥ì¥ó¥È¾Ãµî(_C)" +#~ msgstr "/楽器/カレント消去(_C)" #~ msgid "/Instrument/_Delete Unused Instruments" -#~ msgstr "/³Ú´ï/̤»ÈÍѳڴïºï½ü(_D)" +#~ msgstr "/楽器/未使用楽器削除(_D)" #~ msgid "/_Settings" -#~ msgstr "/ÀßÄê" +#~ msgstr "/設定" #~ msgid "/Settings/Display _Oscilloscopes" -#~ msgstr "/ÀßÄê/¥ª¥·¥í¥¹¥³¡¼¥×ɽ¼¨(_O)" +#~ msgstr "/設定/オシロスコープ表示(_O)" #~ msgid "/Settings/_Tracker" -#~ msgstr "/ÀßÄê/¥È¥é¥Ã¥«¡¼(_T)" +#~ msgstr "/設定/トラッカー(_T)" #~ msgid "/Settings/Tracker/Use _Backing Store" -#~ msgstr "/ÀßÄê/¥È¥é¥Ã¥«¡¼/_Backing Store»ÈÍÑ" +#~ msgstr "/設定/トラッカー/_Backing Store使用" #~ msgid "/Settings/Tracker/_Previous font" -#~ msgstr "/ÀßÄê/¥È¥é¥Ã¥«¡¼/Á°¤Î¥Õ¥©¥ó¥È(_P)" +#~ msgstr "/設定/トラッカー/å‰ã®ãƒ•ã‚©ãƒ³ãƒˆ(_P)" #~ msgid "/Settings/Tracker/_Next font" -#~ msgstr "/ÀßÄê/¥È¥é¥Ã¥«¡¼/¼¡¤Î¥Õ¥©¥ó¥È(_N)" +#~ msgstr "/設定/トラッカー/次ã®ãƒ•ã‚©ãƒ³ãƒˆ(_N)" #~ msgid "/Settings/-" -#~ msgstr "/ÀßÄê/-" +#~ msgstr "/設定/-" #~ msgid "/Settings/_Keyboard Configuration..." -#~ msgstr "/ÀßÄê/¥­¡¼¥Ü¡¼¥ÉÀßÄê(_K)..." +#~ msgstr "/設定/キーボード設定(_K)..." #~ msgid "/Settings/_Audio Configuration..." -#~ msgstr "/ÀßÄê/¥ª¡¼¥Ç¥£¥ªÀßÄê(_A)..." +#~ msgstr "/設定/オーディオ設定(_A)..." #~ msgid "/Settings/_GUI Configuration..." -#~ msgstr "/ÀßÄê/GUIÀßÄê(_G)..." +#~ msgstr "/設定/GUI設定(_G)..." #~ msgid "/Settings/_MIDI Configuration..." -#~ msgstr "/ÀßÄê/MIDIÀßÄê..." +#~ msgstr "/設定/MIDI設定..." #~ msgid "/Settings/_Save Settings now" -#~ msgstr "/ÀßÄê/ÀßÄê¤òº£Êݸ(_S)" +#~ msgstr "/設定/設定を今ä¿å­˜(_S)" #~ msgid "/Settings/Save Settings on _Exit" -#~ msgstr "/ÀßÄê/½ªÎ»»þ¤ËÀßÄê¤òÊݸ(_E)" +#~ msgstr "/設定/終了時ã«è¨­å®šã‚’ä¿å­˜(_E)" #~ msgid "/_Help" -#~ msgstr "/¥Ø¥ë¥×" +#~ msgstr "/ヘルプ" #~ msgid "/Help/_About..." -#~ msgstr "/¥Ø¥ë¥×/¾ðÊó(_A)..." +#~ msgstr "/ヘルプ/情報(_A)..." #~ msgid "/Help/-" -#~ msgstr "/¥Ø¥ë¥×/-" +#~ msgstr "/ヘルプ/-" #~ msgid "/Help/Show _Tips..." -#~ msgstr "/¥Ø¥ë¥×/µ»¤Îɽ¼¨(_T)..." +#~ msgstr "/ヘルプ/技ã®è¡¨ç¤º(_T)..." #~ msgid "/Help/_XM Effects..." -#~ msgstr "/¥Ø¥ë¥×/_XM¸ú²Ì..." +#~ msgstr "/ヘルプ/_XM効果..." #~ msgid "Nothing to save." -#~ msgstr "²¿¤âÊݸ¤·¤Ê¤¤¡£" - -#~ msgid "" -#~ "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n" -#~ msgstr "" -#~ "XM¥Ø¥Ã¥ÀŤ¬276¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£\n" -#~ "¶²¤é¤¯pre-0.0.12 SoundTracker¥â¥¸¥å¡¼¥ë¤Ç¤Ï? :-)\n" +#~ msgstr "何もä¿å­˜ã—ãªã„。" diff -Nru soundtracker-0.6.8/po/Makefile.in.in soundtracker-1.0.2~pre2/po/Makefile.in.in --- soundtracker-0.6.8/po/Makefile.in.in 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/Makefile.in.in 2019-03-11 19:10:56.000000000 +0000 @@ -1,19 +1,19 @@ # Makefile for PO directory in any package using GNU gettext. -# Copyright (C) 1995-1997, 2000-2005 by Ulrich Drepper +# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper # -# This file can be copied and used freely without restrictions. It can -# be used in projects which are not available under the GNU General Public -# License but which still want to provide support for the GNU gettext -# functionality. -# Please note that the actual code of GNU gettext is covered by the GNU -# General Public License and is *not* in the public domain. +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved. This file is offered as-is, +# without any warranty. # -# Origin: gettext-0.14.4 +# Origin: gettext-0.19.8 +GETTEXT_MACRO_VERSION = 0.19 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +SED = @SED@ SHELL = /bin/sh @SET_MAKE@ @@ -23,18 +23,43 @@ prefix = @prefix@ exec_prefix = @exec_prefix@ +datarootdir = @datarootdir@ datadir = @datadir@ -localedir = $(datadir)/locale +localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -MKINSTALLDIRS = @MKINSTALLDIRS@ -mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) -GMSGFMT = @GMSGFMT@ -MSGFMT = @MSGFMT@ -XGETTEXT = @XGETTEXT@ +# We use $(mkdir_p). +# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as +# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, +# @install_sh@ does not start with $(SHELL), so we add it. +# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined +# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake +# versions, $(mkinstalldirs) and $(install_sh) are unused. +mkinstalldirs = $(SHELL) @install_sh@ -d +install_sh = $(SHELL) @install_sh@ +MKDIR_P = @MKDIR_P@ +mkdir_p = @mkdir_p@ + +# When building gettext-tools, we prefer to use the built programs +# rather than installed programs. However, we can't do that when we +# are cross compiling. +CROSS_COMPILING = @CROSS_COMPILING@ + +GMSGFMT_ = @GMSGFMT@ +GMSGFMT_no = @GMSGFMT@ +GMSGFMT_yes = @GMSGFMT_015@ +GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) +MSGFMT_ = @MSGFMT@ +MSGFMT_no = @MSGFMT@ +MSGFMT_yes = @MSGFMT_015@ +MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) +XGETTEXT_ = @XGETTEXT@ +XGETTEXT_no = @XGETTEXT@ +XGETTEXT_yes = @XGETTEXT_015@ +XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit @@ -55,6 +80,16 @@ CATALOGS = @CATALOGS@ +POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot +POFILESDEPS_yes = $(POFILESDEPS_) +POFILESDEPS_no = +POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT)) + +DISTFILESDEPS_ = update-po +DISTFILESDEPS_yes = $(DISTFILESDEPS_) +DISTFILESDEPS_no = +DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) + # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: @@ -67,8 +102,8 @@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ - cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ @@ -80,6 +115,13 @@ all-yes: stamp-po all-no: +# Ensure that the gettext macros and this Makefile.in.in are in sync. +CHECK_MACRO_VERSION = \ + test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ + || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ + exit 1; \ + } + # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that @@ -95,6 +137,7 @@ # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot + @$(CHECK_MACRO_VERSION) test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ @@ -109,18 +152,59 @@ # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +# The determination of whether the package xyz is a GNU one is based on the +# heuristic whether some file in the top level directory mentions "GNU xyz". +# If GNU 'find' is available, we avoid grepping through monster files. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + package_gnu="$(PACKAGE_GNU)"; \ + test -n "$$package_gnu" || { \ + if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ + LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \ + -size -10000000c -exec grep 'GNU @PACKAGE@' \ + /dev/null '{}' ';' 2>/dev/null; \ + else \ + LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ + fi; \ + } | grep -v 'libtool:' >/dev/null; then \ + package_gnu=yes; \ + else \ + package_gnu=no; \ + fi; \ + }; \ + if test "$$package_gnu" = "yes"; then \ + package_prefix='GNU '; \ + else \ + package_prefix=''; \ + fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ - $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ - --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ - --files-from=$(srcdir)/POTFILES.in \ - --copyright-holder='$(COPYRIGHT_HOLDER)' \ - --msgid-bugs-address="$$msgid_bugs_address" + case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + *) \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --package-name="$${package_prefix}@PACKAGE@" \ + --package-version='@VERSION@' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + esac test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot-header; then \ + sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \ + cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po; \ + rm -f $(DOMAIN).1po; \ + fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ @@ -143,12 +227,20 @@ # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. -$(POFILES): $(srcdir)/$(DOMAIN).pot +$(POFILES): $(POFILESDEPS) @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ + test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ - cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) \ + && { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ + esac; \ + }; \ else \ $(MAKE) $${lang}.po-create; \ fi @@ -158,7 +250,7 @@ install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ - $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ @@ -171,13 +263,12 @@ fi install-data-no: all install-data-yes: all - $(mkinstalldirs) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ - $(mkinstalldirs) $(DESTDIR)$$dir; \ + $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ @@ -217,19 +308,18 @@ installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ - $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: - $(mkinstalldirs) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ - $(mkinstalldirs) $(DESTDIR)$$dir; \ + $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ @@ -301,7 +391,7 @@ distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: - $(MAKE) update-po + test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) @@ -345,13 +435,19 @@ .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ - if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ + if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ - if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ + if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + esac; \ + }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ @@ -372,10 +468,13 @@ update-gmo: Makefile $(GMOFILES) @: +# Recreate Makefile by invoking config.status. Explicitly invoke the shell, +# because execution permission bits may not work on the current file system. +# Use @SHELL@, which is the shell determined by autoconf for the use by its +# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ - $(SHELL) ./config.status + && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: diff -Nru soundtracker-0.6.8/po/Makevars soundtracker-1.0.2~pre2/po/Makevars --- soundtracker-0.6.8/po/Makevars 2006-01-15 15:44:46.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/Makevars 2020-05-27 18:54:20.000000000 +0000 @@ -8,7 +8,7 @@ top_builddir = .. # These options get passed to xgettext. -XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --from-code=utf-8 # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding @@ -20,6 +20,13 @@ # their copyright. COPYRIGHT_HOLDER = Michael Krause +# This tells whether or not to prepend "GNU " prefix to the package +# name that gets inserted into the header of the $(DOMAIN).pot file. +# Possible values are "yes", "no", or empty. If it is empty, try to +# detect it automatically by scanning the files in $(top_srcdir) for +# "GNU packagename" string. +PACKAGE_GNU = + # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines @@ -39,3 +46,33 @@ # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = + +# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' +# context. Possible values are "yes" and "no". Set this to yes if the +# package uses functions taking also a message context, like pgettext(), or +# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. +USE_MSGCTXT = no + +# These options get passed to msgmerge. +# Useful options are in particular: +# --previous to keep previous msgids of translated messages, +# --quiet to reduce the verbosity. +MSGMERGE_OPTIONS = + +# These options get passed to msginit. +# If you want to disable line wrapping when writing PO files, add +# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and +# MSGINIT_OPTIONS. +MSGINIT_OPTIONS = + +# This tells whether or not to regenerate a PO file when $(DOMAIN).pot +# has changed. Possible values are "yes" and "no". Set this to no if +# the POT file is checked in the repository and the version control +# program ignores timestamps. +PO_DEPENDS_ON_POT = yes + +# This tells whether or not to forcibly update $(DOMAIN).pot and +# regenerate PO files on "make dist". Possible values are "yes" and +# "no". Set this to no if the POT file and PO files are maintained +# externally. +DIST_DEPENDS_ON_UPDATE_PO = yes diff -Nru soundtracker-0.6.8/po/Makevars.template soundtracker-1.0.2~pre2/po/Makevars.template --- soundtracker-0.6.8/po/Makevars.template 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/Makevars.template 2019-04-29 14:16:09.000000000 +0000 @@ -0,0 +1,78 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Free Software Foundation, Inc. + +# This tells whether or not to prepend "GNU " prefix to the package +# name that gets inserted into the header of the $(DOMAIN).pot file. +# Possible values are "yes", "no", or empty. If it is empty, try to +# detect it automatically by scanning the files in $(top_srcdir) for +# "GNU packagename" string. +PACKAGE_GNU = + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = + +# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' +# context. Possible values are "yes" and "no". Set this to yes if the +# package uses functions taking also a message context, like pgettext(), or +# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. +USE_MSGCTXT = no + +# These options get passed to msgmerge. +# Useful options are in particular: +# --previous to keep previous msgids of translated messages, +# --quiet to reduce the verbosity. +MSGMERGE_OPTIONS = + +# These options get passed to msginit. +# If you want to disable line wrapping when writing PO files, add +# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and +# MSGINIT_OPTIONS. +MSGINIT_OPTIONS = + +# This tells whether or not to regenerate a PO file when $(DOMAIN).pot +# has changed. Possible values are "yes" and "no". Set this to no if +# the POT file is checked in the repository and the version control +# program ignores timestamps. +PO_DEPENDS_ON_POT = yes + +# This tells whether or not to forcibly update $(DOMAIN).pot and +# regenerate PO files on "make dist". Possible values are "yes" and +# "no". Set this to no if the POT file and PO files are maintained +# externally. +DIST_DEPENDS_ON_UPDATE_PO = yes Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/no.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/no.gmo differ diff -Nru soundtracker-0.6.8/po/no.po soundtracker-1.0.2~pre2/po/no.po --- soundtracker-0.6.8/po/no.po 2006-02-25 13:25:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/no.po 2020-05-27 18:54:28.000000000 +0000 @@ -2,20 +2,27 @@ # Copyright (C) 2003 Free Software Foundation, Inc. # Petter Johan Olsen , 2003. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: soundtracker 0.6.7\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2003-05-21 12:30+0100\n" "Last-Translator: Petter Johan Olsen \n" "Language-Team: Petter Johan Olsen \n" +"Language: no\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "Innstillinger for avspilling" @@ -23,2099 +30,3679 @@ msgid "Editing Output" msgstr "Innstillinger for redigering" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Innstillinger for lydopptak" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "Lyddriver" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "Mikserdriver" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Beskrivelse" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "Lydoppsett" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Drivere" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Miksere" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Lukk" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d byte)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Beregnet latenstid: %f mikrosekunder" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "_XM-effektoversikt..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." -msgstr "Du må starte avspilling på nytt før endringene trer i kraft" +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Oppdateringsfrekvens for tracker" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Oppløsning:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Kanaler:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Frekvens (Hz):" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Bufferstørrelse:" +#: app/colors.c:44 +msgid "Major lines" +msgstr "" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "ALSA-kortnummer:" - -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "ALSA-enhetsnummer:" +#: app/colors.c:44 +msgid "Major lines highlighting" +msgstr "" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +#: app/colors.c:45 +msgid "Minor lines" msgstr "" -"Kunne ikke åpne ALSA-enhet for lydopptak (kort:%d, enhet:%d):\n" -"%s" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Nødvendig avspillingsformat støttes ikke.\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Nødvendige avspillingsparametre støttes ikke.\n" +#: app/colors.c:45 +msgid "Minor lines highlighting" +msgstr "" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Beregnet latenstid: %f millisekunder" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Utvalg:" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Oppdateringsfrekvens for tracker" + +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "" + +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" msgstr "" -"Kunne ikke åpne ALSA-enhet for lydavspilling (kort:%d, enhet:%d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "Nødvendige avspillingsparametre støttes ikke.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "Slett" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "Kunne ikke klargjøre ALSA-kanal.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "Slett" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "ALSA-oppsett mislyktes.\n" +#: app/colors.c:49 +#, fuzzy +msgid "Channel numbers, loops" +msgstr "Kanaler:" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -"Merk at ESD-avspilling er ubrukelig i\n" -"interaktiv modus på grunn av den ekstra\n" -"latenstiden som ESD lager. Bruk OSS eller ALSA\n" -"hvis du vil tracke seriøst." -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -"Kunne ikke koble til ESD for lydavspilling:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "ingen innstillinger (enda), beklager!" +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Kan ikke skrive til fil." +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." -msgstr "Endringene trer i kraft neste gang du starter lydopptak." +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Innspillingsenhet (f.eks. '/dev/dsp'):" +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "Vis utvalg" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" msgstr "" -"Kunne ikke åpne %s for innspilling:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d sampler)" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "Posisjon for sang-restart" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "Avspillingsenhet (f.eks. '/dev/dsp'):" +#: app/colors.c:53 +msgid "Mixer position indicator" +msgstr "" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:54 +msgid "Zero line" msgstr "" -"Kunne ikke åpne %s for lydavspilling:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" -msgstr "transport-leder" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" -msgstr "declick" +#: app/colors.c:56 +msgid "White keys" +msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" -msgstr "Kjører i %d Hz med %d frames" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" -msgstr "Kjører Jack-tjeneren?" +#: app/colors.c:57 +msgid "Black keys" +msgstr "" -#: app/drivers/jack-output.c:327 -#, c-format -msgid "soundtracker" -msgstr "soundtracker" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "ut_1" +#: app/colors.c:58 +msgid "White keys pressed" +msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "ut_2" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" -msgstr "Avspillingsenhet (f.eks. '/dev/audio'):" +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: Kan ikke spille av (%s)" +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: Kan ikke håndtere %dHz (%s)" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s: Nødvendig lydkodeformat støttes ikke.\n" +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 -#, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: Kan ikke sette blokkstørrelse (%s)" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" -msgstr "Innspillingsenhet (f.eks. '/dev/audio'):" +#: app/colors.c:395 +#, fuzzy, c-format +msgid "%s colors configuration" +msgstr "Tastaturoppsett" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: Kan ikke spille inn (%s)" +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Reverser" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Lengde" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Posisjon" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Startpunkt" +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Verdi" +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Sett inn" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "ALSA-enhetsnummer:" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Slett" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" msgstr "" -"Grafisk lyd-\n" -"parameter-\n" -"redigering\n" -"finnes bare i\n" -"GNOME-versjonen" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Sustain" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +#, fuzzy +msgid "Unable to set channels number" +msgstr "Kunne ikke klargjøre ALSA-kanal.\n" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Punkt" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Gjenta" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Start" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Slutt" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Last modul" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Lagre modul" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Produser WAV" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Lagre sang" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Last lyd" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Lagre lyd" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Last instrument" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Lagre instrument" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d sampler)" -#: app/file-operations.c:175 -msgid "File" -msgstr "Fil" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Operasjonen støttes ikke." +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Oppdateringsfrekvens for oscilloskop" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Oppdateringsfrekvens for tracker" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8 bit" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "GUI-innstillinger" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16 bit" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "Bruk heksadesimale radnumre" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "Mono" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Bruk store bokstaver i heksadesimale tall" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "Stereo" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" -msgstr "Asynkron redigering som i Impulse Tracker" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "Du mÃ¥ starte avspilling pÃ¥ nytt før endringene trer i kraft" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" -msgstr "Fxx-kommandoen oppdaterer tempo/BPM-glidere" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "Endringene trer i kraft neste gang du starter lydopptak." -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" -msgstr "Bytt tilbake til trackervindu etter last/lagre" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" -msgstr "Lagre vindusstørrelse/posisjon ved avslutning" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "" -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" -msgstr "Bruk notenavn B i stedet for H" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Oppløsning:" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" -msgstr "" +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Kanaler:" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Bufferstørrelse for oscilloskop (MB)" +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Frekvens (Hz):" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Radformat for spor:" +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Bufferstørrelse:" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." -msgstr "Klar." +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "Antall kanaler:" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Spiller sang..." +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Beregnet latenstid: %f millisekunder" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Spiller ark..." +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." +msgstr "" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Laster modul..." +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" +msgstr "" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Modul lastet." +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Lagrer modul..." - -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Modul lagret." - -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "Laster lyd..." - -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Lyd lastet." - -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Lagrer lyd..." - -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Lyd lagret." - -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "Laster instrument..." - -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Instrument lastet." - -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Lagrer instrument..." - -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Instrument lagret." - -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Lagrer sang..." +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "Sang lagret." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Spørsmål" +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "Ja" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "Nei" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Avbryt" +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Advarsel" +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "Feil!" +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" msgstr "" -#: app/gui.c:301 +#: app/drivers/alsa1x.c:1293 #, fuzzy -msgid "Highlight rows (major / minor):" -msgstr "Uthev disse radene:" +msgid "Error setting hw parameters" +msgstr "Feil under innlesing av ark." -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" msgstr "" -#: app/gui.c:506 -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" msgstr "" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" msgstr "" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" msgstr "" -"Er du sikker på at du vil forkaste sangen?\n" -"Alle endringer vil gå tapt!" - -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Er du sikker på at du vil overskrive filen?" - -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "Feil under innlesing av ark fra fil!" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" msgstr "" -"Lengden på det innleste arket er forskjellig fra det som er i sangen.\n" -"Ønsker du å endre lengden på arket i sangen?" - -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "SoundTracker oppstart" - -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "Laster..." - -#: app/gui.c:1804 -msgid "Use SoundTracker!" -msgstr "Start SoundTracker!" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Last XM..." - -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Lagre XM..." +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Lagre modul som WAV..." +#: app/drivers/alsa1x.c:1328 +#, fuzzy +msgid "Unable to enable timestamping for playback" +msgstr "Kunne ikke klargjøre ALSA-kanal.\n" -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "Lagre bare sangark som XM..." +#: app/drivers/alsa1x.c:1329 +#, fuzzy +msgid "Unable to enable timestamping for capture" +msgstr "Kunne ikke klargjøre ALSA-kanal.\n" -#: app/gui.c:1872 -msgid "Load current pattern..." -msgstr "Last inn nåværende ark..." +#: app/drivers/alsa1x.c:1335 +#, fuzzy +msgid "Unable to set timestamp type for playback" +msgstr "Kunne ikke klargjøre ALSA-kanal.\n" -#: app/gui.c:1874 -msgid "Save current pattern..." -msgstr "Lagre gjeldende ark..." +#: app/drivers/alsa1x.c:1336 +#, fuzzy +msgid "Unable to set timestamp type for capture" +msgstr "Kunne ikke klargjøre ALSA-kanal.\n" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Spill sang" +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" +msgstr "" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Spill ark" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Stopp" +#: app/drivers/alsa1x.c:1352 +#, fuzzy +msgid "Unable to prepare playback" +msgstr "Kunne ikke klargjøre ALSA-kanal.\n" -#: app/gui.c:1973 +#: app/drivers/alsa1x.c:1353 #, fuzzy -msgid "Pat" -msgstr "Lim inn" +msgid "Unable to prepare capture" +msgstr "Kunne ikke klargjøre ALSA-kanal.\n" -#: app/gui.c:1979 -msgid "Edited pattern" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" msgstr "" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" msgstr "" -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Antall kanaler:" - -#: app/gui.c:2025 -#, fuzzy -msgid "Pattern Length" -msgstr "Arklengde" - -#: app/gui.c:2060 -msgid "Set preferred accidental type" +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." msgstr "" -#: app/gui.c:2066 -#, fuzzy -msgid "Measure" -msgstr "firkant" +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "ingen innstillinger (enda), beklager!" -#: app/gui.c:2067 -msgid "Enable row highlighting" +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." msgstr "" -#: app/gui.c:2093 +#: app/drivers/irix-output.c:178 #, fuzzy -msgid "Other..." -msgstr "Andre taster..." +msgid "16 Bit output not supported." +msgstr "Operasjonen støttes ikke." -#: app/gui.c:2129 +#: app/drivers/irix-output.c:184 #, fuzzy -msgid "Change effect column editing direction" -msgstr "Flytt markør bortover når effektkolonner redigeres" +msgid "Stereo output not supported." +msgstr "Operasjonen støttes ikke." -#: app/gui.c:2160 -msgid "Global amplification" +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." msgstr "" +"Kunne ikke Ã¥pne %s for innspilling:\n" +"%s" -#: app/gui.c:2196 -msgid "Pitchbend" -msgstr "" +#: app/drivers/oss.c:130 +#, fuzzy +msgid "OSS input: reading error" +msgstr "Instrumentbytte" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" msgstr "" -#: app/gui.c:2216 -msgid "Editing" -msgstr "Redigering" +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Beregnet latenstid: %f millisekunder" -#: app/gui.c:2223 -msgid "Octave" -msgstr "Oktav" +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d sampler)" -#: app/gui.c:2232 -msgid "Jump" -msgstr "Hopp" +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "Innspillingsenhet (f.eks. '/dev/dsp'):" -#: app/gui.c:2241 -msgid "Instr" -msgstr "Instr" +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "Avspillingsenhet (f.eks. '/dev/dsp'):" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Lyd" +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" +msgstr "" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "Velkommen til SoundTracker!" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"Kunne ikke Ã¥pne %s for innspilling:\n" +"%s" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "VolFade" +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "Nødvendig avspillingsformat støttes ikke.\n" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "VibFart" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" +msgstr "Kjører i %d Hz med %d frames" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "VibDybde" +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "Kjører Jack-tjeneren?" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "VibSveip" +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Kan ikke åpne fil." +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sinus" +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Firkant" +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "Trekant ned" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "declick" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "Trekant opp" +#: app/drivers/jack.c:610 +#, fuzzy +msgid "Jack server is not running or some error occured." +msgstr "Kjører Jack-tjeneren?" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Instrumentredigering" +#: app/drivers/sdl-output.c:76 +#, fuzzy +msgid "Experimental SDL support." +msgstr "Operasjonen støttes ikke." -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Volumparametre" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "Avspillingsenhet (f.eks. '/dev/audio'):" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Panoreringsparametre" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Last instrument..." - -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Lagre instrument..." +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "Last XI" +#: app/drivers/sun-output.c:402 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "%s: Kan ikke hÃ¥ndtere %dHz (%s)" -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "Lagre XI" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "%s: Nødvendig lydkodeformat støttes ikke.\n" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Vibratotype:" +#: app/drivers/sun-output.c:455 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "%s: Kan ikke sette blokkstørrelse (%s)" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Note:" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Nullstill" +#: app/drivers/sun-input.c:77 +#, fuzzy +msgid "SUN input: reading error" +msgstr "Instrumentbytte" -#: app/keys.c:57 -msgid "" -msgstr "" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "Tast som setter inn notestopp-kommandoen i FastTracker-moduler." +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "Innspillingsenhet (f.eks. '/dev/audio'):" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" msgstr "" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" msgstr "" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "Taster for øvre oktav..." - -#: app/keys.c:146 -msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" msgstr "" -"Dette er tastene på øvre halvdel av tastaturet. C-noten er vanligvis tasten " -"til høyre for TAB-tasten. Resten av tastene bør ligge bortover som på et " -"piano, inkludert talltastene ovenfor." -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Taster for nedre oktav..." +#: app/drivers/sun-input.c:273 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "%s: Kan ikke hÃ¥ndtere %dHz (%s)" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." -msgstr "" -"Dette er tastene på nedre halvdel av tastaturet. C-noten er vanligvis den " -"første tasten til høyre for den venstre Shift-tasten. Resten av tastene bør " -"ligge bortover som på et piano, inkludert raden ovenfor." +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "%s: Nødvendig lydkodeformat støttes ikke.\n" -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "Andre taster..." +#: app/drivers/sun-input.c:332 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "%s: Kan ikke sette blokkstørrelse (%s)" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Diverse andre taster" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Lengde" -#: app/keys.c:513 -msgid "Function" -msgstr "Funksjon" +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Posisjon" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Tilordnet" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Startpunkt" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Tastaturoppsett" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Verdi" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Forklaring for tastegruppe" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Sett inn" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Forklaring for tast" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "Slett" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Modifikatorer:" +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"Grafisk lyd-\n" +"parameter-\n" +"redigering\n" +"finnes bare i\n" +"GNOME-versjonen" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Tilordne funksjon til valgt tast" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Sustain" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Tilordne funksjoner til alle taster" +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Punkt" -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" -msgstr "" -"Vennligst trykk ønsket tastekombinasjon!\n" -"Klikk i den venstre listen for å avbryte" +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "Gjenta" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Ok" +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "Start" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Bruk" +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Slutt" -#: app/keys.c:771 +#: app/file-operations.c:127 +#, c-format msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" msgstr "" -"Tastaturkonfigurasjonsfilen er ugyldig.\n" -"Vennligst konfigurer i Verktøy->Tasteoppsett." -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" +#: app/file-operations.c:225 +msgid "All supported types" msgstr "" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" +#: app/file-operations.c:245 +msgid "All files" msgstr "" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." -msgstr "" -"Automatisk tasteoppsett mislyktes.\n" -"Vennligst konfigurer i Verktøy->Tasteoppsett." +#: app/file-operations.c:388 +msgid "File" +msgstr "Fil" -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:293 +msgid "Classic ST" msgstr "" -"Er du sikker på at du vil gjøre dette?\n" -"Alle endringer vil gå tapt!" -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +#: app/gui-settings.c:293 +msgid "FT2" msgstr "" -"Er du sikker på at du vil avslutte?\n" -"Alle endringer vil gå tapt!" -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Åpne..." +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "Miksere" -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Lagre _som..." +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "GUI-innstillinger" -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Lagre modul som _WAV..." +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Oppdateringsfrekvens for oscilloskop" -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Lagre _XM uten lyder..." +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Oppdateringsfrekvens for tracker" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "_Avslutt" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Bruk heksadesimale radnumre" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "_Slett alt" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Bruk store bokstaver i heksadesimale tall" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Slett _alle ark" +#: app/gui-settings.c:343 +#, fuzzy +msgid "FT2-like volume column" +msgstr "Fin volumøkning" -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Optimaliser modul" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" +msgstr "" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "Klipp _ut" - -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Kopier" - -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "_Lim inn" +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" +msgstr "" -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Stopp alle noter" +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "" -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "Sett _inn spor" +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" +msgstr "Asynkron redigering som i Impulse Tracker" -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "Sle_tt spor" +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "" -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Øk effektverdi under markør" +#: app/gui-settings.c:379 +msgid "Record keyreleases" +msgstr "" -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Minsk effektverdi under markør" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" +msgstr "" -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "_Markeringsmodus" +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "" -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "_Fjern blokkmarkering" +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "_Interpoler effekter" +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "Fxx-kommandoen oppdaterer tempo/BPM-glidere" -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Transponer opp en halvnote" +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Transponer ned en halvnote" +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "Bytt tilbake til trackervindu etter last/lagre" -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Transponer opp en oktav" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Transponer ned en oktav" +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" +msgstr "Lagre vindusstørrelse/posisjon ved avslutning" -#: app/menubar.c:526 -#, fuzzy -msgid "P_aste" -msgstr "Lim inn" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "Bruk notenavn B i stedet for H" -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "_Jazzredigeringsmodus" +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/menubar.c:534 -msgid "_Record keyreleases" +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." msgstr "" -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "Transp_oner..." +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Utvalg:" -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "_Ark" +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Bufferstørrelse for oscilloskop (MB)" -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "_Spor" +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Lyd lastet." -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Utvalg" +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "" -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_Finn ubrukt ark" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Rediger" -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Kopier gjeldende til nytt ark" +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "_Slett ubrukte ark" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "" -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "_Komprimer ark" +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "" -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "_Lagre gjeldende ark" +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "Last _ark" +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Radformat for spor:" -#: app/menubar.c:599 -#, fuzzy -msgid "Sh_rink Current Pattern" -msgstr "Gjeldende ark" +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:601 +#: app/gui-settings.c:573 #, fuzzy -msgid "_Expand Current Pattern" -msgstr "_Lagre gjeldende ark" +msgid "Tracker colors configuration" +msgstr "Tastaturoppsett" -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" -msgstr "" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "Klar." -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" -msgstr "" +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Spiller sang..." -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Last XI..." +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Spiller ark..." -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "L_agre XI..." +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "Laster modul..." -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_Slett gjeldende" +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "Modul lastet." -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "Slett _ubrukte instrumenter" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Lagrer modul..." -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "Flimmerfri _rulling" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "Modul lagret." -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "_Forrige skrifttype" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "Laster lyd..." -#: app/menubar.c:642 -msgid "_Next font" -msgstr "_Neste skrifttype" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Lyd lastet." -#: app/menubar.c:647 -msgid "Change preferred _accidental type" -msgstr "" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Lagrer lyd..." -#: app/menubar.c:649 -#, fuzzy -msgid "Change effect column editing _direction" -msgstr "Flytt markør bortover når effektkolonner redigeres" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Lyd lagret." -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Vis _oscilloskop" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "Laster instrument..." -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Tracker" +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Instrument lastet." -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "_Tasteoppsett..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "_Lydoppsett..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "_GUI-oppsett..." - -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "_MIDI-oppsett..." +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Lagrer instrument..." -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "Ikke bruk velkomstskjerm" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Instrument lagret." -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Lagre innstillinger nå" +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Lagrer sang..." -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Lagre innstillinger ved _avslutning" +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "Sang lagret." -#: app/menubar.c:690 -msgid "_About..." -msgstr "_Om..." +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "Feil!" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Vis _tips..." +#: app/gui-subs.c:414 +msgid "Question" +msgstr "SpørsmÃ¥l" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "_XM-effektoversikt..." +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" -#: app/menubar.c:704 -msgid "_File" -msgstr "_Fil" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Modul" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Rediger" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Advarsel" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Instrument" +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "GUI-innstillinger" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Innstillinger" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "" -#: app/menubar.c:711 -msgid "_Help" -msgstr "_Hjelp" +#: app/gui.c:260 +#, fuzzy +msgid "Highlight rows (major / minor):" +msgstr "Uthev disse radene:" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/gui.c:330 +msgid "" msgstr "" -"Heltallsmikser, ingen interpolasjon, ingen filtre, maksium lydstørrelse 1M" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Instrumentnavn" +#: app/gui.c:451 +#, fuzzy +msgid "Saving module failed" +msgstr "Lagrer modul..." -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#lyder" +#: app/gui.c:535 +msgid "File output" +msgstr "" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Lydnavn" +#: app/gui.c:612 +#, fuzzy +msgid "Can't open file for writing" +msgstr "Kan ikke skrive til fil." -#: app/module-info.c:117 -msgid "Linear" -msgstr "Lineær" +#: app/gui.c:618 +#, fuzzy +msgid "Can't change file ownership" +msgstr "Kan ikke skrive til fil." -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Modulinfo" +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "" -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Sangnavn:" +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Frekvenser:" +#: app/gui.c:715 +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "ProTracker-modus" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"Er du sikker pÃ¥ at du vil forkaste sangen?\n" +"Alle endringer vil gÃ¥ tapt!" -#: app/module-info.c:395 -#, c-format +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "Feil under innlesing av ark fra fil!" + +#: app/gui.c:829 msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" msgstr "" -"Ubrukte ark: %d (brukt: %d)\n" -"Ubrukte instrumenter: %d (brukt: %d)\n" -"\n" -"Slett ubrukte og reorganiser arklisten?\n" +"Lengden pÃ¥ det innleste arket er forskjellig fra det som er i sangen.\n" +"Ønsker du Ã¥ endre lengden pÃ¥ arket i sangen?" -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" -msgstr "Sett inn ark som blir redigert" +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "Start" -#: app/playlist.c:535 -msgid "Remove current playlist entry" -msgstr "Fjern oppføring fra arklisten" +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "Laster..." -#: app/playlist.c:543 -msgid "Add + Cpy" -msgstr "Ny + Kopi" +#: app/gui.c:2195 +msgid "Use SoundTracker!" +msgstr "Start SoundTracker!" -#: app/playlist.c:545 +#: app/gui.c:2216 msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +"Are you sure you want to quit?\n" +"All changes will be lost!" msgstr "" -"Legg til et tomt ark etter nåværende posisjon, og kopier det nåværende arket " -"dit" +"Er du sikker pÃ¥ at du vil avslutte?\n" +"Alle endringer vil gÃ¥ tapt!" -#: app/playlist.c:548 -msgid "Add Free" -msgstr "Ny" +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" -msgstr "Legg til et tomt ark etter gjeldende posisjon" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" -#: app/playlist.c:560 +#: app/gui.c:2296 #, fuzzy -msgid "Len" -msgstr "Lengde" +msgid "Estimating..." +msgstr "Laster..." -#: app/playlist.c:574 -msgid "Song length" -msgstr "Sanglengde" +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" -#: app/playlist.c:580 -#, fuzzy -msgid "Rstrt" -msgstr "Instr" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" -#: app/playlist.c:593 -msgid "Song restart position" -msgstr "Posisjon for sang-restart" +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" + +#: app/gui.c:2400 +msgid "Extended pattern (*.xp)" +msgstr "" -#: app/preferences.c:74 +#: app/gui.c:2408 +#, c-format msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" msgstr "" -"En mappe kalt '.soundtracker' ble laget i din hjemmekatalog\n" -"for lagring av konfigurasjonsfiler.\n" -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Ingen loop" +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Last modul" -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "PingPong" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" +msgstr "" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8 bit" +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Lagre modul" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16 bit" +#: app/gui.c:2434 +#, fuzzy +msgid "Save the current module" +msgstr "Lagre gjeldende ark..." -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Lydredigering" +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Produser WAV" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Volum" +#: app/gui.c:2436 +#, fuzzy +msgid "Render the current module as WAV file" +msgstr "Lagre modul som WAV..." -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Panorering" +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Lagre _XM uten lyder..." -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Finstemming" +#: app/gui.c:2439 +msgid "Load current pattern..." +msgstr "Last inn nÃ¥værende ark..." -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Utvalg:" +#: app/gui.c:2440 +msgid "Save current pattern..." +msgstr "Lagre gjeldende ark..." -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Ingen" +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Spill sang" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Alt" +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Spill ark" -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Lengde:" +#: app/gui.c:2525 +msgid "Play From Cursor" +msgstr "" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Sett som loop" +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "Spill sang" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "Basisnote" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Stopp" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Last lyd..." +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Lagre WAV..." +#: app/gui.c:2562 +#, fuzzy +msgid "Pat" +msgstr "Lim inn" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "Lagre område som WAV..." +#: app/gui.c:2568 +msgid "Edited pattern" +msgstr "" -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "Lagre WAV" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "" -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "Lagre område" +#: app/gui.c:2583 +#, fuzzy +msgid "Pattern Length" +msgstr "Arklengde" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Monitor" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Endre volum" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Antall kanaler:" + +#: app/gui.c:2632 +msgid "Set preferred accidental type" +msgstr "" -#: app/sample-editor.c:425 +#: app/gui.c:2638 #, fuzzy -msgid "Trim" -msgstr "Tremor" +msgid "Measure" +msgstr "firkant" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Vis utvalg" +#: app/gui.c:2639 +msgid "Enable row highlighting" +msgstr "" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Vis hele" +#: app/gui.c:2660 +#, fuzzy +msgid "Other..." +msgstr "Andre taster..." -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Forstørr (+50%)" +#: app/gui.c:2687 +#, fuzzy +msgid "Change effect column editing direction" +msgstr "Flytt markør bortover nÃ¥r effektkolonner redigeres" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Forminsk (-50%)" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" +msgstr "" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Reverser" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Klipp ut" +#: app/gui.c:2740 +msgid "Pitchbend" +msgstr "" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Fjern" +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Kopier" +#: app/gui.c:2760 +msgid "Editing" +msgstr "Redigering" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Lim inn" +#: app/gui.c:2767 +msgid "Octave" +msgstr "Oktav" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "Slett lyd" +#: app/gui.c:2776 +msgid "Jump" +msgstr "Hopp" -#: app/sample-editor.c:500 -#, fuzzy -msgid "Crop" -msgstr "Kopier" +#: app/gui.c:2785 +msgid "Instr" +msgstr "Instr" -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(intet utvalg)" +#: app/gui.c:2801 +msgid "Sample" +msgstr "Lyd" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "Ikke mer minne i kopibufferet.\n" +#: app/gui.c:2827 +msgid "dB" +msgstr "" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "Velkommen til SoundTracker!" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." -msgstr "Ikke mer minne for lyddata." +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Feil ved innlesing." - -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Last stereolyd" +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Kan ikke Ã¥pne fil." -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" -msgstr "" -"Denne lyden er i stereoformat!\n" -"(SoundTracker takler bare enkeltlyder i mono!)\n" -"\n" -"Vennligst velg hvilken kanal du vil laste:" +#: app/instrument-editor.c:209 +#, fuzzy +msgid "Saving instrument failed." +msgstr "Lagrer instrument..." -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Venstre" +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "Gjeldende instrument" -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Miks" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sinus" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Høyre" +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Firkant" -#: app/sample-editor.c:1575 -msgid "Signed" -msgstr "Med fortegn" +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "Trekant ned" -#: app/sample-editor.c:1575 -msgid "Unsigned" -msgstr "Uten fortegn" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "Trekant opp" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "Little-Endian" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" +msgstr "" -#: app/sample-editor.c:1576 -msgid "Big-Endian" -msgstr "Big-Endian" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Instrumentredigering" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "Mono" +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Volumparametre" -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "Stereo" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Panoreringsparametre" -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "Last rå lyd" +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Last instrument" -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" msgstr "" -"Denne lyden er ikke i et kjent format\n" -"\n" -"Du må velge et lydformat:" -#: app/sample-editor.c:1623 -msgid "Word format:" -msgstr "Word-format:" +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Lagre instrument" -#: app/sample-editor.c:1670 -msgid "Sampling Rate:" -msgstr "Opptaksfrekvens:" +#: app/instrument-editor.c:297 +#, fuzzy +msgid "Save the current instrument" +msgstr "Gjeldende instrument" -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" - -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "OK" +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "Last XI" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Kan ikke lese lydfil" +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "Lagre XI" -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "Volumøkning" + +#: app/instrument-editor.c:344 +#, fuzzy +msgid "Vibrato:" +msgstr "Vibrato" + +#: app/instrument-editor.c:354 +msgid "Type" msgstr "" -"Lydfilen er for stor for den gjeldende mikseren, men blir lastet uansett." -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Takler bare 8 eller 16 bit lydfiler med inntil 2 kanaler" +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "VibFart" -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "Velg et område først." +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "VibDybde" -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Start opptak" +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "VibSveip" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "Ingen opptaksdriver tilgjengelig" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Note:" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Opptaksvindu" +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "Nullstill" -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" -msgstr "Ikke mer minne igjen for lydinnspilling!" +#: app/keys.c:58 +msgid "" +msgstr "" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/keys.c:134 +msgid "KOFF" +msgstr "" -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "Tast som setter inn notestopp-kommandoen i FastTracker-moduler." + +#: app/keys.c:136 +msgid "JMP+" msgstr "" -"Lydopptaket er for stort for den gjeldende mikseren, men bruker den uansett." -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normaliser" +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "" -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Utfør" +#: app/keys.c:138 +msgid "JMP-" +msgstr "" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Endre volum" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "" -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Utfør lineær volumendring på merket område" +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Spill sang" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Venstre (%):" +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Lagrer modul..." -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "H" +#: app/keys.c:142 +msgid "RecMod" +msgstr "" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "D" +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Spiller ark..." -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Høyre (%):" +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "Spill ark" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Spill ark" + +#: app/keys.c:146 +msgid "RecPat" msgstr "" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Spiller ark..." + +#: app/keys.c:148 +msgid "PlayCur" msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/keys.c:148 +msgid "Play module from cursor." msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/keys.c:150 +msgid "RecCur" msgstr "" -#: app/tips-dialog.c:50 -msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Spiller ark..." + +#: app/keys.c:152 +#, fuzzy +msgid "PlayRow" +msgstr "Spill sang" + +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Last inn nÃ¥værende ark..." + +#: app/keys.c:154 +msgid "PlayBlk" msgstr "" -"Velkommen til SoundTracker!\n" -"\n" -"Hvis det er første gangen du bruker denne typen program, bør du få tak\n" -"i noen .XM eller .MOD-filer først og leke deg med dem." -#: app/tips-dialog.c:55 +#: app/keys.c:154 +#, fuzzy +msgid "Play selected block." +msgstr "Tilordne funksjon til valgt tast" + +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Taster for øvre oktav..." + +#: app/keys.c:167 msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." msgstr "" -"Du kan konfigurere SoundTracker til å bli mer responsivt for\n" -"tastespilling og opptak ved å minske miksebufferet i\n" -"Redigeringsinnstillingene i Lydoppsettet." +"Dette er tastene pÃ¥ øvre halvdel av tastaturet. C-noten er vanligvis tasten " +"til høyre for TAB-tasten. Resten av tastene bør ligge bortover som pÃ¥ et " +"piano, inkludert talltastene ovenfor." -#: app/tips-dialog.c:59 +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Taster for nedre oktav..." + +#: app/keys.c:173 msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." msgstr "" -"Du kan lett endre loop-punktene i lydredigereren ved å holde Shift\n" -"og bruke venstre og høyre musknapp.\n" +"Dette er tastene pÃ¥ nedre halvdel av tastaturet. C-noten er vanligvis den " +"første tasten til høyre for den venstre Shift-tasten. Resten av tastene bør " +"ligge bortover som pÃ¥ et piano, inkludert raden ovenfor." + +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "Andre taster..." + +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Diverse andre taster" + +#: app/keys.c:578 +msgid "Function" +msgstr "Funksjon" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "Tilordnet" + +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Tastaturoppsett" + +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Forklaring for tastegruppe" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Forklaring for tast" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Modifikatorer:" + +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "Tilordne funksjon til valgt tast" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "Tilordne funksjoner til alle taster" -#: app/tips-dialog.c:62 +#: app/keys.c:702 msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +"Please press the desired key combination!\n" +"Click into left list to cancel" +msgstr "" +"Vennligst trykk ønsket tastekombinasjon!\n" +"Klikk i den venstre listen for Ã¥ avbryte" + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" msgstr "" -"Hvis du vil vite mer om hvordan du bruker trackere og hvordan de\n" -"ulike kommandoene virker, ta en titt på http://www.united-trackers.org/" -#: app/tips-dialog.c:65 +#: app/keys.c:1028 msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." msgstr "" -"Du kan tilordne de ulike lydene i et instrument til spesifikke taster\n" -"ved først å velge lyden, og deretter klikke på tangentene nederst på\n" -"instrumentredigeringssiden." +"Automatisk tasteoppsett mislyktes.\n" +"Vennligst konfigurer i Verktøy->Tasteoppsett." -#: app/tips-dialog.c:69 +#: app/menubar.c:115 +#, c-format msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" msgstr "" -"Er markøren fanget i et tallfelt?\n" -"Trykk Enter eller Tab for å komme deg ut!" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "Dagens tips i SoundTracker" +#: app/menubar.c:126 +msgid "" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." +msgstr "" -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Forrige tips" +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"Er du sikker pÃ¥ at du vil gjøre dette?\n" +"Alle endringer vil gÃ¥ tapt!" -#: app/tips-dialog.c:162 +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "" +"Heltallsmikser, ingen interpolasjon, ingen filtre, maksium lydstørrelse 1M" + +#: app/mixers/kbfloat.c:838 +#, fuzzy +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" +"Heltallsmikser, ingen interpolasjon, ingen filtre, maksium lydstørrelse 1M" + +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" + +#: app/module-info.c:63 app/module-info.c:64 +#, fuzzy +msgid "Cyclic" +msgstr "declick" + +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" + +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" + +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" + +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" + +#: app/module-info.c:481 +msgid "Period" +msgstr "" + +#: app/module-info.c:484 +msgid "s" +msgstr "" + +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Note:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Instrumentnavn" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#lyder" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Lydnavn" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "Lineær" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Modulinfo" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Sangnavn:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Frekvenser:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "ProTracker-modus" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Instrumentredigering" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Gjeldende instrument" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Lagre instrument" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "Bytt om 1 <-> 2" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Finstemming" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "Basisnote" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" +"Ubrukte ark: %d (brukt: %d)\n" +"Ubrukte instrumenter: %d (brukt: %d)\n" +"\n" +"Slett ubrukte og reorganiser arklisten?\n" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "Sett inn ark som blir redigert" + +#: app/playlist.c:511 +msgid "Remove current playlist entry" +msgstr "Fjern oppføring fra arklisten" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "Ny + Kopi" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" +"Legg til et tomt ark etter nÃ¥værende posisjon, og kopier det nÃ¥værende arket " +"dit" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "Ny" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "Legg til et tomt ark etter gjeldende posisjon" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Lengde" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "Sanglengde" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Instr" + +#: app/playlist.c:567 +msgid "Song restart position" +msgstr "Posisjon for sang-restart" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"En mappe kalt '.soundtracker' ble laget i din hjemmekatalog\n" +"for lagring av konfigurasjonsfiler.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Ingen loop" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "PingPong" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8 bit" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16 bit" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Lydredigering" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "Volum" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Panorering" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Utvalg:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "Ingen" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Alt" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Lengde:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "Sett som loop" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Last lyd" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "Lagre _XM uten lyder..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Lagre lyd" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "Lagre _XM uten lyder..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "Lagre omrÃ¥de som WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "Lagre WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "Lagre omrÃ¥de" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Endre volum" + +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "Tremor" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "Vis utvalg" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "Vis hele" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "Forstørr (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "Forminsk (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Reverser" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Klipp ut" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Fjern" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Kopier" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Lim inn" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "Slett lyd" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Kopier" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(intet utvalg)" + +#: app/sample-editor.c:1279 +#, fuzzy +msgid "Out of memory for copybuffer." +msgstr "Ikke mer minne i kopibufferet.\n" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Miks" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Venstre" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Høyre" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d sampler)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "Ikke mer minne for lyddata." + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "Feil ved innlesing." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"Denne lyden er i stereoformat!\n" +"(SoundTracker takler bare enkeltlyder i mono!)\n" +"\n" +"Vennligst velg hvilken kanal du vil laste:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "Start opptak" + +#: app/sample-editor.c:1756 +msgid "Signed" +msgstr "Med fortegn" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "Uten fortegn" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "Little-Endian" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "Big-Endian" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "Last rÃ¥ lyd" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"Denne lyden er ikke i et kjent format\n" +"\n" +"Du mÃ¥ velge et lydformat:" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "Word-format:" + +#: app/sample-editor.c:1829 +msgid "Sampling Rate:" +msgstr "Opptaksfrekvens:" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Kan ikke lese lydfil" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "" +"Lydfilen er for stor for den gjeldende mikseren, men blir lastet uansett." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "Takler bare 8 eller 16 bit lydfiler med inntil 2 kanaler" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Kan ikke skrive til fil." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "Velg et omrÃ¥de først." + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "Ingen opptaksdriver tilgjengelig" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Opptaksvindu" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "_Slett alt" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Opptaksfrekvens:" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "Ikke mer minne igjen for lydinnspilling!" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"Denne lyden er i stereoformat!\n" +"(SoundTracker takler bare enkeltlyder i mono!)\n" +"\n" +"Vennligst velg hvilken kanal du vil laste:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Last stereolyd" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"Lydopptaket er for stort for den gjeldende mikseren, men bruker den uansett." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Endre volum" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normaliser" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "Utfør lineær volumendring pÃ¥ merket omrÃ¥de" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Venstre (%):" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "H" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "D" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Høyre (%):" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"Velkommen til SoundTracker!\n" +"\n" +"Hvis det er første gangen du bruker denne typen program, bør du fÃ¥ tak\n" +"i noen .XM eller .MOD-filer først og leke deg med dem." + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"Du kan konfigurere SoundTracker til Ã¥ bli mer responsivt for\n" +"tastespilling og opptak ved Ã¥ minske miksebufferet i\n" +"Redigeringsinnstillingene i Lydoppsettet." + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"Du kan lett endre loop-punktene i lydredigereren ved Ã¥ holde Shift\n" +"og bruke venstre og høyre musknapp.\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"Hvis du vil vite mer om hvordan du bruker trackere og hvordan de\n" +"ulike kommandoene virker, ta en titt pÃ¥ http://www.united-trackers.org/" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Du kan tilordne de ulike lydene i et instrument til spesifikke taster\n" +"ved først Ã¥ velge lyden, og deretter klikke pÃ¥ tangentene nederst pÃ¥\n" +"instrumentredigeringssiden." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" +"Er markøren fanget i et tallfelt?\n" +"Trykk Enter eller Tab for Ã¥ komme deg ut!" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "Forrige tips" + +#: app/tips-dialog.c:118 msgid "Next Tip" msgstr "Neste tips" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Vis tips ved oppstart" +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "Vis tips ved oppstart" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "Dagens tips i SoundTracker" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "Arpeggio" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "Porta opp" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "Porta ned" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "Note porta" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "Vibrato" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "Note porta + volumglidning" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "Vibrato + volumglidning" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "Tremolo" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "Panoreringsposisjon" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Lyd lagret." + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "Sett volum" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Hopp til posisjon" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "Avbryt ark" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "Sett tempo/BPM" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "Sett globalt volum" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "Global volumglidning" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "Stopp note" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "Sett parameterposisjon" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "Panoreringsglidning" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "Lavpass filter resonans" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "Multi retrig note" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "Tremor" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "Lavpass filter frekvens" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "Fin porta opp" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "Fin porta ned" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "Sett glissando kontroll" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "Sett vibrato kontroll" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "Set finstemming" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "Arknummer" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "Set tremolo kontroll" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "Retrig note" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "Fin volumøkning" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "Fin volumsenkning" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "Stopp note" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "Noteforsinkelse" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "Arkforsinkelse" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "Volumsenkning" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "Volumøkning" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "Sett vibratofart" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "Panorer mot venstre" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "Panorer mot høyre" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "sinus" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "senk" + +#: app/track-editor.c:203 +msgid "square" +msgstr "firkant" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +#, fuzzy +msgid "Extra fine porta up" +msgstr "Fin porta opp" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "Fin porta ned" + +#: app/track-editor.c:257 +msgid "None ]" +msgstr "Ingen]" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Jazz-redigering:" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Tracker" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "Skriftliste" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "Legg til skrift" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "Fjern skrift" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "Bruk skrift" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "Velg skrift..." + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "Hele sangen" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "Alle ark" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "Gjeldende ark" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "Gjeldende spor" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Gjeldende instrument" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "Alle instrumenter" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "Halvnote opp" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "Halvnote ned" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "Oktav opp" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "Oktav ned" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "Bytt om 1 <-> 2" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "Bytt 1 -> 2" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "Transponeringsverktøy" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "Operasjonen gjelder:" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Notetransponering" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Instrumentbytte" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Instrument 1:" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Gjeldende instrument" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Instrument 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "Arklengde ikke gyldig: %d.\n" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Feil under innlesing av ark." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Instrument lastet." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Instrumentbytte" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Panoreringsparametre" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Panoreringsparametre" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Panoreringsparametre" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "Ugyldig vibratotype %d, bruker sinustype.\n" + +#: app/xm.c:678 app/xm.c:1233 +#, fuzzy +msgid "Out of memory error!" +msgstr "Ikke mer minne i kopibufferet.\n" + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "Filen er ikke et XI-instrument." + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "Arpeggio" +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Instrument lastet." + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Panoreringsparametre" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Panoreringsparametre" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Instrument lastet." + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "Ugyldig vibratotype %d, bruker sinustype.\n" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "Feil under innlesing av ark." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Kan ikke Ã¥pne fil" + +#: app/xm.c:1215 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "Feil under innlesing av ark." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"Modulen inneholder lyd(er) som er for store for den gjeldende mikseren.\n" +"Maksimum lydlengde er %d." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "Filen er ikke FastTracker XM eller i et kjent MOD-format!" + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "Feil under innlesing eller uventet slutt pÃ¥ fil" + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "Feil eller ikke støttet versjon av arkfil!" + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "Feil arklengde!" + +#: app/xm.c:1761 app/xm.c:1787 +msgid "Error during saving pattern!" +msgstr "Feil under lagring av ark!" + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "Automatisk tilkobling" + +#: app/midi-settings.c:414 +msgid "Channel" +msgstr "Kanaler" + +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "Klientnummer" + +#: app/midi-settings.c:434 +msgid "Port number" +msgstr "Port-nummer" + +#: app/midi-settings.c:453 +msgid "Input" +msgstr "Innspilling" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "Reservert" + +#: app/midi-settings.c:468 +msgid "Output" +msgstr "Avspilling" + +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "AvlusningsnivÃ¥" + +#: app/midi-settings.c:492 +msgid "Misc" +msgstr "Forskjellig" + +#: app/midi-settings.c:532 +msgid "MIDI Configuration" +msgstr "MIDI-oppsett" + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Arknummer" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "_Spor" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_Stopp alle noter" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "Sett _inn spor" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "Sle_tt spor" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "Øk effektverdi under markør" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Minsk effektverdi under markør" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "_Fjern blokkmarkering" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "_Interpoler effekter" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Fil" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_Ã…pne..." + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Lagre _som..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Lagre modul som _WAV..." + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "Lagre _XM uten lyder..." + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Modul" + +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "_Slett alt" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Slett _alle ark" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Optimaliser modul" + +#: soundtracker.glade:346 +msgid "_Set Optimal Amplification" +msgstr "" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Rediger" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "_Jazzredigeringsmodus" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "Transp_oner..." + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Ark" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "_Spor" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Utvalg" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "_Markeringsmodus" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Transponer opp en halvnote" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Transponer ned en halvnote" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Transponer opp en oktav" + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Transponer ned en oktav" + +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "Last _ark" + +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "_Lagre gjeldende ark" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_Finn ubrukt ark" + +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Kopier gjeldende til nytt ark" + +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "_Lagre gjeldende ark" + +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "" + +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "_Slett ubrukte ark" + +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "_Komprimer ark" + +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "Gjeldende ark" + +#: soundtracker.glade:753 +#, fuzzy +msgid "_Expand Current Pattern" +msgstr "_Lagre gjeldende ark" + +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "Porta opp" +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "Porta ned" +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "Gjeldende spor" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" -msgstr "Note porta" +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "Gjeldende spor" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "Vibrato" +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "Gjeldende spor" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" -msgstr "Note porta + volumglidning" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Instrument" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" -msgstr "Vibrato + volumglidning" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "Last XI" -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "Tremolo" +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "Lagre XI" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "Panoreringsposisjon" +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_Slett gjeldende" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Hopp til posisjon" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "Slett _ubrukte instrumenter" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "Sett volum" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Innstillinger" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "Avbryt ark" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Vis _oscilloskop" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "Sett tempo/BPM" +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Sett globalt volum" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Tracker" -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "Global volumglidning" +#: soundtracker.glade:913 +#, fuzzy +msgid "_Flicker-free Scrolling" +msgstr "Flimmerfri _rulling" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "Stopp note" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "_Forrige skrifttype" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "Sett parameterposisjon" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "_Neste skrifttype" -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "Panoreringsglidning" +#: soundtracker.glade:944 +msgid "Change Preferred _Accidental Type" +msgstr "" -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "Lavpass filter resonans" +#: soundtracker.glade:953 +#, fuzzy +msgid "Change Effect Column _Editing Direction" +msgstr "Flytt markør bortover nÃ¥r effektkolonner redigeres" -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "Multi retrig note" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "Tastaturoppsett" -#: app/track-editor.c:142 -msgid "Tremor" -msgstr "Tremor" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "Lydoppsett" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "Lavpass filter frekvens" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "GUI-innstillinger" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "Fin porta opp" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "MIDI-oppsett" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "Fin porta ned" +#: soundtracker.glade:1016 +#, fuzzy +msgid "_Disable Splash Screen" +msgstr "Ikke bruk velkomstskjerm" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "Sett glissando kontroll" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_Lagre innstillinger nÃ¥" -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "Sett vibrato kontroll" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Lagre innstillinger ved _avslutning" -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "Set finstemming" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_Hjelp" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Set loop start/loop" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "_Om..." -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "Set tremolo kontroll" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "Vis _tips..." -#: app/track-editor.c:161 -msgid "Retrig note" -msgstr "Retrig note" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "_XM-effektoversikt..." -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "Fin volumøkning" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Spill sang" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "Fin volumsenkning" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Spill sang" -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "Stopp note" +#~ msgid "transport master" +#~ msgstr "transport-leder" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "Noteforsinkelse" +#~ msgid "SoundTracker Startup" +#~ msgstr "SoundTracker oppstart" -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "Arkforsinkelse" +#~ msgid "Vibrato Type:" +#~ msgstr "Vibratotype:" -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "Volumsenkning" +#~ msgid "VolFade" +#~ msgstr "VolFade" -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "Volumøkning" +#~ msgid "Set loop begin/loop" +#~ msgstr "Set loop start/loop" -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "Sett vibratofart" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Note:" -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "Panorer mot venstre" +#~ msgid "Error while loading instruments." +#~ msgstr "Feil under innlesing av instrumenter." -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "Panorer mot høyre" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "Merk at ESD-avspilling er ubrukelig i\n" +#~ "interaktiv modus pÃ¥ grunn av den ekstra\n" +#~ "latenstiden som ESD lager. Bruk OSS eller ALSA\n" +#~ "hvis du vil tracke seriøst." -#: app/track-editor.c:184 -msgid "sine" -msgstr "sinus" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Kunne ikke koble til ESD for lydavspilling:\n" +#~ "%s" -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "senk" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "Endringene trer i kraft neste gang du starter lydopptak." -#: app/track-editor.c:186 -msgid "square" -msgstr "firkant" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Instrumentbytte" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, c-format -msgid "None ]" -msgstr "Ingen]" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "%s: Nødvendig lydkodeformat støttes ikke.\n" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Jazz-redigering:" +#~ msgid "%s: %s" +#~ msgstr "%s: %s" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Tracker" +#~ msgid "%s: Cannot play (%s)" +#~ msgstr "%s: Kan ikke spille av (%s)" -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "Skriftliste" +#~ msgid "%s: Cannot record (%s)" +#~ msgstr "%s: Kan ikke spille inn (%s)" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "Legg til skrift" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Ukjent XI-versjon 0x%x\n" -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "Fjern skrift" +#~ msgid "out_1" +#~ msgstr "ut_1" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "Bruk skrift" +#~ msgid "out_2" +#~ msgstr "ut_2" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Opp" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Ned" +#~ msgid "Monitor" +#~ msgstr "Monitor" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "Velg skrift..." +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#lyder" -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "Hele sangen" +#~ msgid "OK" +#~ msgstr "OK" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Alle ark" +#~ msgid "Cancel" +#~ msgstr "Avbryt" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "Gjeldende ark" +#~ msgid "(%d bytes)" +#~ msgstr "(%d byte)" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "Gjeldende spor" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Beregnet latenstid: %f mikrosekunder" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Gjeldende instrument" +#~ msgid "ALSA card number:" +#~ msgstr "ALSA-kortnummer:" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Alle instrumenter" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Kunne ikke Ã¥pne ALSA-enhet for lydopptak (kort:%d, enhet:%d):\n" +#~ "%s" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Halvnote opp" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "Nødvendige avspillingsparametre støttes ikke.\n" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "Halvnote ned" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Kunne ikke Ã¥pne ALSA-enhet for lydavspilling (kort:%d, enhet:%d):\n" +#~ "%s" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "Oktav opp" +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "Nødvendige avspillingsparametre støttes ikke.\n" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "Oktav ned" +#~ msgid "Alsa setup error.\n" +#~ msgstr "ALSA-oppsett mislyktes.\n" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "Bytt om 1 <-> 2" +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "Kunne ikke Ã¥pne %s for lydavspilling:\n" +#~ "%s" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "Bytt 1 -> 2" +#~ msgid "soundtracker" +#~ msgstr "soundtracker" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "Transponeringsverktøy" +#~ msgid "Save Song" +#~ msgstr "Lagre sang" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Operasjonen gjelder:" +#~ msgid "Yes" +#~ msgstr "Ja" -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Notetransponering" +#~ msgid "No" +#~ msgstr "Nei" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Instrumentbytte" +#~ msgid "Close" +#~ msgstr "Lukk" -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Instrument 1:" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Er du sikker pÃ¥ at du vil overskrive filen?" -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Gjeldende instrument" +#~ msgid "Load XM..." +#~ msgstr "Last XM..." -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Instrument 2:" +#~ msgid "Save XM..." +#~ msgstr "Lagre XM..." -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Arklengde ikke gyldig: %d.\n" +#~ msgid "Save song as XM..." +#~ msgstr "Lagre bare sangark som XM..." -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "Filen er ikke et XI-instrument." +#~ msgid "Load Instrument..." +#~ msgstr "Last instrument..." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Ukjent XI-versjon 0x%x\n" +#~ msgid "Save Instrument..." +#~ msgstr "Lagre instrument..." -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "Ugyldig vibratotype %d, bruker sinustype.\n" +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "Tastaturkonfigurasjonsfilen er ugyldig.\n" +#~ "Vennligst konfigurer i Verktøy->Tasteoppsett." -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "Feil under innlesing av ark." +#~ msgid "Ok" +#~ msgstr "Ok" -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Kan ikke åpne fil" +#~ msgid "_Quit" +#~ msgstr "_Avslutt" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Feil under innlesing av instrumenter." +#~ msgid "C_ut" +#~ msgstr "Klipp _ut" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"Modulen inneholder lyd(er) som er for store for den gjeldende mikseren.\n" -"Maksimum lydlengde er %d." +#~ msgid "_Copy" +#~ msgstr "_Kopier" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "Filen er ikke FastTracker XM eller i et kjent MOD-format!" +#~ msgid "_Paste" +#~ msgstr "_Lim inn" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "Feil under innlesing eller uventet slutt på fil" +#, fuzzy +#~ msgid "P_aste" +#~ msgstr "Lim inn" -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "Feil eller ikke støttet versjon av arkfil!" +#~ msgid "_Load XI..." +#~ msgstr "_Last XI..." -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "Feil arklengde!" +#~ msgid "_Save XI..." +#~ msgstr "L_agre XI..." -#: app/xm.c:1468 -msgid "Error during saving pattern!" -msgstr "Feil under lagring av ark!" +#, fuzzy +#~ msgid "Change effect column editing _direction" +#~ msgstr "Flytt markør bortover nÃ¥r effektkolonner redigeres" -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "Automatisk tilkobling" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "_Tasteoppsett..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -msgid "Channel" -msgstr "Kanaler" +#~ msgid "_Audio Configuration..." +#~ msgstr "_Lydoppsett..." -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "Klientnummer" +#~ msgid "_GUI Configuration..." +#~ msgstr "_GUI-oppsett..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" -msgstr "Port-nummer" +#~ msgid "_MIDI Configuration..." +#~ msgstr "_MIDI-oppsett..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -msgid "Input" -msgstr "Innspilling" +#~ msgid "Load Sample..." +#~ msgstr "Last lyd..." -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "Reservert" +#~ msgid "Save WAV..." +#~ msgstr "Lagre WAV..." -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -msgid "Output" -msgstr "Avspilling" +#~ msgid "8363" +#~ msgstr "8363" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "Avlusningsnivå" +#~ msgid "Execute" +#~ msgstr "Utfør" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -msgid "Misc" -msgstr "Forskjellig" +#~ msgid "Apply" +#~ msgstr "Bruk" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -msgid "MIDI Configuration" -msgstr "MIDI-oppsett" +#~ msgid "Drivers" +#~ msgstr "Drivere" + +#~ msgid "Up" +#~ msgstr "Opp" -#~ msgid "Pattern" -#~ msgstr "Arknummer" +#~ msgid "Down" +#~ msgstr "Ned" #~ msgid "_Accidentals" #~ msgstr "For_tegn" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/pl.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/pl.gmo differ diff -Nru soundtracker-0.6.8/po/pl.po soundtracker-1.0.2~pre2/po/pl.po --- soundtracker-0.6.8/po/pl.po 2006-02-25 13:25:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/pl.po 2020-05-27 18:54:28.000000000 +0000 @@ -1,2136 +1,3713 @@ # Copyright (C) 2001-2002 Free Software Foundation, Inc. # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -# Aktualn± wersjê tego pliku mo¿esz odnale¼æ w repozytorium cvs.gnome.pl -# (:pserver:anonymous@cvs.gnome.pl:/gnomepl, puste has³o) -# Je¶li masz jakiekolwiek uwagi odnosz±ce siê do t³umaczenia lub chcesz -# pomóc w jego rozwijaniu i pielêgnowaniu, napisz do nas na adres: +# AktualnÄ… wersjÄ™ tego pliku możesz odnaleźć w repozytorium cvs.gnome.pl +# (:pserver:anonymous@cvs.gnome.pl:/gnomepl, puste hasÅ‚o) +# JeÅ›li masz jakiekolwiek uwagi odnoszÄ…ce siÄ™ do tÅ‚umaczenia lub chcesz +# pomóc w jego rozwijaniu i pielÄ™gnowaniu, napisz do nas na adres: # translators@gnome.pl # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- msgid "" msgstr "" "Project-Id-Version: soundtracker 0.6.6\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2002-07-05 22:31+0200\n" "Last-Translator: GNOME PL Team \n" "Language-Team: Polish \n" +"Language: pl\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" -msgstr "Wyj¶cie odtwarzania" +msgstr "WyjÅ›cie odtwarzania" #: app/audioconfig.c:69 msgid "Editing Output" -msgstr "Wyj¶cie edycji" +msgstr "WyjÅ›cie edycji" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" -msgstr "Próbkowanie" +msgstr "Próbkowanie" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" -msgstr "Modu³ sterownika" +msgstr "ModuÅ‚ sterownika" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" -msgstr "Modu³ miksera" +msgstr "ModuÅ‚ miksera" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Opis" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" -msgstr "Konfiguracja d¼wiêku" +msgstr "Konfiguracja dźwiÄ™ku" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Sterowniki" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Miksery" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Zamknij" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d bajtów)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Szacowane opó¼nienie d¼wiêku: %f mikrosekund" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "Efekty _XM..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." -msgstr "Zmiany odnios± efekt po ponownym rozpoczêciu odtwarzania." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "CzÄ™stotliwość trackera" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Rozdzielczo¶æ:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Kana³y:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Czêstotliwo¶æ [Hz]:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Rozmiar bufora:" +#: app/colors.c:44 +msgid "Major lines" +msgstr "" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "Numer karty ALSA:" +#: app/colors.c:44 +msgid "Major lines highlighting" +msgstr "" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "Numer urz±dzenia ALSA:" +#: app/colors.c:45 +msgid "Minor lines" +msgstr "" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +#: app/colors.c:45 +msgid "Minor lines highlighting" msgstr "" -"Nie mo¿na otworzyæ urz±dzenia ALSA jako wej¶cia d¼wiêku (karta:%d, " -"urz±dzenie:%d):\n" -"%s" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Wymagany format wyj¶cia d¼wiêku nie jest obs³ugiwany.\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Wymagane parametry wyj¶cia d¼wiêku nie s± obs³ugiwane.\n" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Zaznaczenie:" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Szacowane opó¼nienie d¼wiêku: %f milisekund" +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "CzÄ™stotliwość trackera" -# y, c-format -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "" + +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" msgstr "" -"Nie mo¿na otworzyæ urz±dzenia ALSA jako wyj¶cia d¼wiêku (karta:%d, " -"urz±dzenie:%d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "Wymagane parametry kana³u wyj¶ciowego nie s± obs³ugiwane.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "UsuÅ„" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "Nie mo¿na przygotowaæ kana³u ALSA.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "UsuÅ„" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "B³±d konfiguracji alsa.\n" +#: app/colors.c:49 +#, fuzzy +msgid "Channel numbers, loops" +msgstr "KanaÅ‚y:" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -"Zwróæ uwagê, ¿e wyj¶cie na ESD jest nieprzydatne\n" -"w trybie interaktywnym z powodu opó¼nienia dodawanego\n" -"przez ESD.\n" -"Do powa¿nej pracy wykorzystaj wyj¶cie OSS lub ALSA." -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -"Nie mo¿na po³±czyæ siê z ESD jako wyj¶ciem d¼wiêku:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "na razie brak ustawieñ!" +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Nie mo¿na otworzyæ pliku do zapisu." +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." -msgstr "Zmiany odnios± efekt po ponownym rozpoczêciu próbkowania." +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Urz±dzenie wej¶ciowe (np. \"/dev/dsp\"):" +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "PowiÄ™ksz do zaznaczenia" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" msgstr "" -"Nie mo¿na otworzyæ %s do próbkowania:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d próbek)" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "Pozycja ponowienia" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "Urz±dzenie wyj¶ciowe (np. \"/dev/dsp\"):" +#: app/colors.c:53 +msgid "Mixer position indicator" +msgstr "" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:54 +msgid "Zero line" msgstr "" -"Nie mo¿na otworzyæ %s jako wyj¶cia d¼wiêku:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" +#: app/colors.c:54 +msgid "Sample display zero line" msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" +#: app/colors.c:56 +msgid "White keys" msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" -msgstr "Uruchomienie na %d Hz z %d ramek" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" +#: app/colors.c:57 +msgid "Black keys" msgstr "" -#: app/drivers/jack-output.c:327 -#, c-format -msgid "soundtracker" -msgstr "soundtracker" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "wyj_1" +#: app/colors.c:58 +msgid "White keys pressed" +msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "wyj_2" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" -msgstr "Urz±dzenie wyj¶ciowe (np. \"/dev/audio\"):" +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: Nie mo¿na odtworzyæ (%s)" +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: Nie mo¿na obs³u¿yæ %dHz (%s)" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s: Wymagane kodowanie d¼wiêku nie jest obs³ugiwane.\n" +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 -#, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: Nie mo¿na ustawiæ rozmiaru bloku (%s)" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" -msgstr "Urz±dzenie wej¶ciowe (np. \"/dev/audio\"):" +#: app/colors.c:395 +#, fuzzy, c-format +msgid "%s colors configuration" +msgstr "Konfiguracja efektów playback" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: Nie mo¿na zapisaæ (%s)" +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Wyczyść Zazn" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "D³ugo¶æ" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Bie¿±cy" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Przesuniêcie" +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Warto¶æ" +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Wstaw" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "Numer urzÄ…dzenia ALSA:" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Usuñ" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" msgstr "" -"Graficzny\n" -"edytor\n" -"obwiedni\n" -"tylko w\n" -"wersji GNOME" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Utrzymanie" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +#, fuzzy +msgid "Unable to set channels number" +msgstr "Nie można przygotować kanaÅ‚u ALSA.\n" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Punkt" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Pêtla" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Pocz±tek" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Koniec" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Wczytaj modu³" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Zapisz modu³" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Zapisz WAV" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Zapisz utwór" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Wczytaj próbkê" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Zapisz próbkê" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Wczytaj instrument" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Zapisz instrument" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d próbek)" -#: app/file-operations.c:175 -msgid "File" -msgstr "Plik" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Operacja nie jest obs³ugiwana." +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Czêstotliwo¶æ oscyloskopów" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Czêstotliwo¶æ trackera" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8 bitów" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "Konfiguracja GUI" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16 bitów" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "Numery wierszy zapisane szesnastkowo" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "Mono" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Wykorzystywanie wielkich liter w zapisie szesnastkowym" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "Stereo" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" -msgstr "Edycja asynchroniczna patternów (styl IT)" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "Zmiany odniosÄ… efekt po ponownym rozpoczÄ™ciu odtwarzania." -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "Zmiany odniosÄ… efekt po ponownym rozpoczÄ™ciu próbkowania." + +#: app/drivers/alsa1x.c:829 +msgid "Device:" msgstr "" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" msgstr "" -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" -msgstr "Zapis rozmiaru okna przed zakoñczeniem" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Rozdzielczość:" -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" -msgstr "U¿ywanie nazwy nuty B zamiast H" +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "KanaÅ‚y:" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" -msgstr "" +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "CzÄ™stotliwość [Hz]:" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Rozmiar bufora oscyloskopów [MB]" +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Rozmiar bufora:" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Format wiersza ¶cie¿ki:" +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "Liczba kanałów:" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." -msgstr "Gotowe." +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Szacowane opóźnienie dźwiÄ™ku: %f milisekund" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Odtwarzanie utworu..." +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." +msgstr "" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Odtwarzanie patternu..." +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" +msgstr "" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Odczyt próbki.." +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Modu³ zosta³ wczytany." +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Zapis modu³u..." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Modu³ zosta³ zapisany." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "Odczyt próbki..." +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Próbka zosta³a wczytana." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Zapis próbki..." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Próbka zosta³a zapisana." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "Odczyt instrumentu..." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Instrument zosta³ wczytany." +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "BÅ‚Ä…d podczas wczytywania instrumentów." -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Zapis instrumentu..." +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Instrument zosta³ zapisany." +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Zapisywanie utworu..." +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "Utwór zosta³ zapisany." +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Pytanie" +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "Tak" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "Nie" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Anuluj" +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Ostrze¿enie" +#: app/drivers/alsa1x.c:1328 +#, fuzzy +msgid "Unable to enable timestamping for playback" +msgstr "Nie można przygotować kanaÅ‚u ALSA.\n" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "B³±d!" +#: app/drivers/alsa1x.c:1329 +#, fuzzy +msgid "Unable to enable timestamping for capture" +msgstr "Nie można przygotować kanaÅ‚u ALSA.\n" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" +#: app/drivers/alsa1x.c:1335 +#, fuzzy +msgid "Unable to set timestamp type for playback" +msgstr "Nie można przygotować kanaÅ‚u ALSA.\n" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" -msgstr "Konfiguracja wyró¿niania wierszy" +#: app/drivers/alsa1x.c:1336 +#, fuzzy +msgid "Unable to set timestamp type for capture" +msgstr "Nie można przygotować kanaÅ‚u ALSA.\n" -#: app/gui.c:301 -msgid "Highlight rows (major / minor):" -msgstr "Wyró¿niane wiersze (g³ówny / drugorzêdny):" - -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" msgstr "" -#: app/gui.c:506 -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" msgstr "" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "Nie wybrano pliku." +#: app/drivers/alsa1x.c:1352 +#, fuzzy +msgid "Unable to prepare playback" +msgstr "Nie można przygotować kanaÅ‚u ALSA.\n" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" -msgstr "" -"Czy na pewno chcesz porzuciæ bie¿±cy projekt?\n" -"Wszystkie zmiany zostan± utracone!" +#: app/drivers/alsa1x.c:1353 +#, fuzzy +msgid "Unable to prepare capture" +msgstr "Nie można przygotować kanaÅ‚u ALSA.\n" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Czy na pewno chcesz nadpisaæ plik?" - -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "B³±d podczas otwierania pliku z patternem!" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" +msgstr "" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" msgstr "" -"D³ugo¶æ wczytywanego wzorca nie pasuje do bie¿±cego patternu w module.\n" -"Czy chcesz zmieniæ d³ugo¶æ bie¿±cego patternu?" -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "Uruchamianie SoundTrackera" +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "" -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "Wczytywanie..." +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "na razie brak ustawieÅ„!" -#: app/gui.c:1804 -msgid "Use SoundTracker!" -msgstr "U¿ywaj SoundTrackera!" +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Wczytaj XM..." +#: app/drivers/irix-output.c:178 +#, fuzzy +msgid "16 Bit output not supported." +msgstr "Operacja nie jest obsÅ‚ugiwana." -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Zapis do pliku XM..." +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "Operacja nie jest obsÅ‚ugiwana." -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Zapis modu³u jako WAV..." +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." +msgstr "" +"Nie można otworzyć %s do próbkowania:\n" +"%s" -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "Zapis utworu jako XM..." +#: app/drivers/oss.c:130 +#, fuzzy +msgid "OSS input: reading error" +msgstr "Zmiana instrumentu" -#: app/gui.c:1872 -msgid "Load current pattern..." -msgstr "Odczyt bie¿±cego patternu..." +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "" -#: app/gui.c:1874 -msgid "Save current pattern..." -msgstr "Zapis bie¿±cego patternu..." +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Szacowane opóźnienie dźwiÄ™ku: %f milisekund" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Odtwórz utwór" +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d próbek)" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Odtwórz pattern" +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "UrzÄ…dzenie wejÅ›ciowe (np. \"/dev/dsp\"):" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Zatrzymaj" +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "UrzÄ…dzenie wyjÅ›ciowe (np. \"/dev/dsp\"):" -#: app/gui.c:1973 -msgid "Pat" -msgstr "Pat" +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" +msgstr "" -#: app/gui.c:1979 -msgid "Edited pattern" -msgstr "Redagowany pattern" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" msgstr "" +"Nie można otworzyć %s do próbkowania:\n" +"%s" -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Liczba kana³ów:" +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "Wymagany format wyjÅ›cia dźwiÄ™ku nie jest obsÅ‚ugiwany.\n" -#: app/gui.c:2025 -msgid "Pattern Length" -msgstr "D³ugo¶æ wzorca" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" +msgstr "Uruchomienie na %d Hz z %d ramek" -#: app/gui.c:2060 -msgid "Set preferred accidental type" +#: app/drivers/jack.c:371 +msgid "Jack server not running?" msgstr "" -#: app/gui.c:2066 -msgid "Measure" -msgstr "Miara" - -#: app/gui.c:2067 -msgid "Enable row highlighting" +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" msgstr "" -# INNY CZY INNE? -#: app/gui.c:2093 -#, fuzzy -msgid "Other..." -msgstr "Inne..." +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/gui.c:2129 -msgid "Change effect column editing direction" +#: app/drivers/jack.c:542 +msgid "Update" msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" +#: app/drivers/jack.c:551 +msgid "Jack autostart" msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" +#: app/drivers/jack.c:562 +msgid "declick" msgstr "" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" +#: app/drivers/jack.c:610 +msgid "Jack server is not running or some error occured." msgstr "" -#: app/gui.c:2216 -msgid "Editing" -msgstr "Modyfikowanie" +#: app/drivers/sdl-output.c:76 +#, fuzzy +msgid "Experimental SDL support." +msgstr "Operacja nie jest obsÅ‚ugiwana." -#: app/gui.c:2223 -msgid "Octave" -msgstr "Oktawa" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "UrzÄ…dzenie wyjÅ›ciowe (np. \"/dev/audio\"):" -#: app/gui.c:2232 -msgid "Jump" -msgstr "Skok" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:2241 -msgid "Instr" -msgstr "Instr" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Próbka" +#: app/drivers/sun-output.c:402 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "%s: Nie można obsÅ‚użyć %dHz (%s)" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "Witaj w SoundTrackerze!" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "%s: Wymagane kodowanie dźwiÄ™ku nie jest obsÅ‚ugiwane.\n" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/drivers/sun-output.c:455 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "%s: Nie można ustawić rozmiaru bloku (%s)" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "ZmianaG³o¶no¶ci" - -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "Szybko¶æWibr" - -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "G³êboko¶æWibr" - -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "Rozci±gniêcieWibr" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Nie mo¿na otworzyæ pliku." +#: app/drivers/sun-input.c:77 +#, fuzzy +msgid "SUN input: reading error" +msgstr "Zmiana instrumentu" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sinus" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Prostok±t" +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "UrzÄ…dzenie wejÅ›ciowe (np. \"/dev/audio\"):" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "Pi³a w dó³" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "Pi³a w górê" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Edytor instrumentów" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" +msgstr "" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Obwiednia g³o¶no¶ci" +#: app/drivers/sun-input.c:273 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "%s: Nie można obsÅ‚użyć %dHz (%s)" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Obwiednia przemieszczenia" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "%s: Wymagane kodowanie dźwiÄ™ku nie jest obsÅ‚ugiwane.\n" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Odczyt instrumentu..." +#: app/drivers/sun-input.c:332 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "%s: Nie można ustawić rozmiaru bloku (%s)" -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Zapis instrumentu..." +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "DÅ‚ugość" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "Wczytaj XI" +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Bieżący" -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "Zapisz XI" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "PrzesuniÄ™cie" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Typ vibrato:" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Wartość" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Nuta:" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Wstaw" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Inicjuj" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "UsuÅ„" -#: app/keys.c:57 -msgid "" -msgstr "" +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"Graficzny\n" +"edytor\n" +"obwiedni\n" +"tylko w\n" +"wersji GNOME" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "Klawisz, który wstawia specjaln± nutê keyoff dla modu³ów FastTrackera." +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Utrzymanie" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." -msgstr "Klawisz zwiêkszaj±cy warto¶æ \"skoku\"." +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Punkt" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." -msgstr "Klawisz zmniejszaj±cy warto¶æ \"skoku\"." +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "PÄ™tla" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "Klawisze górnej oktawy..." +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "PoczÄ…tek" -#: app/keys.c:146 +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Koniec" + +#: app/file-operations.c:127 +#, c-format msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" msgstr "" -"Klawisze te s± w górnej czê¶ci klawiatury. Klawisz c jest zwykle na prawo od " -"klawisza TAB. Pozosta³e klawisze powinny zostaæ u³o¿one zgodnie z uk³adem " -"klawiszy fortepianu, w³±czaj±c w to klawisze po³o¿one wy¿ej." - -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Klawisze dolnej oktawy..." -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." +#: app/file-operations.c:225 +msgid "All supported types" msgstr "" -"Klawisze te s± w dolnej czê¶ci klawiatury. Klawisz c jest zwykle na prawo od " -"klawisza Shift. Pozosta³e klawisze powinny zostaæ u³o¿one zgodnie z uk³adem " -"klawiszy fortepianu, w³±czaj±c w to klawisze po³o¿one wy¿ej." -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "Inne klawisze..." +#: app/file-operations.c:245 +msgid "All files" +msgstr "" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Ró¿ne inne klawisze" +#: app/file-operations.c:388 +msgid "File" +msgstr "Plik" -#: app/keys.c:513 -msgid "Function" -msgstr "Funkcja" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Przypisanie" +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Konfiguracja klawiatury" +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "Miksery" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Opis grupy klawiszy" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "Konfiguracja GUI" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Opis klawisza" +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "CzÄ™stotliwość oscyloskopów" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Modyfikatory:" +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "CzÄ™stotliwość trackera" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Zapamiêtaj wybrany klawisz" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Numery wierszy zapisane szesnastkowo" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Zapamiêtaj wszystkie klawisze" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Wykorzystywanie wielkich liter w zapisie szesnastkowym" -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +#: app/gui-settings.c:343 +msgid "FT2-like volume column" msgstr "" -"Wci¶nij po¿±dan± kombinacjê klawiszy!\n" -"Kliknij listê po lewej stronie aby anulowaæ" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Ok" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" +msgstr "" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Zastosuj" +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" +msgstr "" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +#: app/gui-settings.c:361 +msgid "Decimal volume representation" msgstr "" -"Plik z konfiguracj± klawiatury jest uszkodzony.\n" -"Wykorzystaj okno konfiguracji klawiatury." -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" -msgstr "CH%02d" +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" +msgstr "Edycja asynchroniczna patternów (styl IT)" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" -msgstr "Szybki skok do kana³u %d" +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -"Automatyczna konfiguracja klawiszy nie powiod³a siê.\n" -"Skorzystaj z konfiguracji klawiatury w menu Ustawienia." -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" msgstr "" -"Czy na pewno chcesz to zrobiæ?\n" -"Wszystkie zmiany zostan± utracone!" -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +#: app/gui-settings.c:398 +msgid "Record precise timings" msgstr "" -"Czy na pewno chcesz zakoñczyæ?\n" -"Wszystkie zmiany zostan± utracone!" -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Otwórz..." +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Z_apisz jako..." +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "" -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Zapisz modu³ jako _WAV..." +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Zapisz XM bez próbek..." +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "Za_koñcz" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Wyczy¶æ _wszystko" +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" +msgstr "Zapis rozmiaru okna przed zakoÅ„czeniem" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Wyczy¶æ tylko p_atterny" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "Używanie nazwy nuty B zamiast H" -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Optymalizuj modu³" +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "_Wytnij" +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." +msgstr "" -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "S_kopiuj" +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Zaznaczenie:" -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "Wk_lej" +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Rozmiar bufora oscyloskopów [MB]" -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Usuñ nuty" - -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "W_staw ¶cie¿kê" - -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "_Usuñ ¶cie¿kê" - -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Zwiêksz warto¶æ polecenia" - -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Zmniejsz warto¶æ polecenia" - -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "Tryb _zaznaczania" - -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "_Bez zaznaczenia" +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Próbka zostaÅ‚a wczytana." -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "_Interpoluj efekty" +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "" -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Transpozycja o pó³ nuty w górê" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Edycja" -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Transpozycja o pó³ nuty w dó³" +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "" -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Transpozycja o oktawê w górê" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "" -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Transpozycja o oktawê w dó³" +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "" -#: app/menubar.c:526 -#, fuzzy -msgid "P_aste" -msgstr "Wklej" +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "_Jazzowy tryb edycji" +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Format wiersza Å›cieżki:" -#: app/menubar.c:534 -msgid "_Record keyreleases" +#: app/gui-settings.c:572 +msgid "Color scheme" msgstr "" -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "_Transpozycja..." - -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "P_attern" +#: app/gui-settings.c:573 +#, fuzzy +msgid "Tracker colors configuration" +msgstr "Konfiguracja efektów playback" -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "¦_cie¿ka" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "Gotowe." -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Zaznaczenie" +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Odtwarzanie utworu..." -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_Znajd¼ nieu¿ywany pattern" +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Odtwarzanie patternu..." -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "S_kopiuj bie¿±cy do nieu¿ywanego patternu" +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "Odczyt próbki.." -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "_Wyczy¶æ nieu¿ywane patterny" +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "ModuÅ‚ zostaÅ‚ wczytany." -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "K_ompresuj patterny" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Zapis moduÅ‚u..." -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "_Zapisz bie¿±cy pattern" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "ModuÅ‚ zostaÅ‚ zapisany." -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "Wczy_taj pattern" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "Odczyt próbki..." -#: app/menubar.c:599 -#, fuzzy -msgid "Sh_rink Current Pattern" -msgstr "Bie¿±cy pattern" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Próbka zostaÅ‚a wczytana." -#: app/menubar.c:601 -#, fuzzy -msgid "_Expand Current Pattern" -msgstr "_Zapisz bie¿±cy pattern" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Zapis próbki..." -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" -msgstr "" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Próbka zostaÅ‚a zapisana." -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" -msgstr "" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "Odczyt instrumentu..." -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Wczytaj XI..." +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Instrument zostaÅ‚ wczytany." -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_Zapisz XM..." +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Zapis instrumentu..." -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "Wy_czy¶æ bie¿±cy" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Instrument zostaÅ‚ zapisany." -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Usuñ nieu¿ywane instrumenty" +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Zapisywanie utworu..." -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "Przewijanie bez efektu _migotania" +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "Utwór zostaÅ‚ zapisany." -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "_Poprzednia czcionka" +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "BÅ‚Ä…d!" -#: app/menubar.c:642 -msgid "_Next font" -msgstr "_Nastêpna czcionka" +#: app/gui-subs.c:414 +msgid "Question" +msgstr "Pytanie" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." msgstr "" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" msgstr "" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Wy¶wietlanie _oscyloskopów" - -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Tracker" - -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "Konfiguracja _klawiatury..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "Konfiguracja _d¼wiêku..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "Konfiguracja _GUI..." - -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "Konfiguracja _MIDI..." - -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "Wy³±cz ekran powitalny" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Zapisz ustawienia" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Ostrzeżenie" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Zapis ustawieñ przed z_akoñczeniem" +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "Konfiguracja GUI" -#: app/menubar.c:690 -msgid "_About..." -msgstr "_Informacje o..." +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "Konfiguracja wyróżniania wierszy" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Wy¶wietl p_orady..." +#: app/gui.c:260 +msgid "Highlight rows (major / minor):" +msgstr "Wyróżniane wiersze (główny / drugorzÄ™dny):" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "Efekty _XM..." +#: app/gui.c:330 +msgid "" +msgstr "" -#: app/menubar.c:704 -msgid "_File" -msgstr "_Plik" +#: app/gui.c:451 +#, fuzzy +msgid "Saving module failed" +msgstr "Zapis moduÅ‚u..." -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Modu³" +#: app/gui.c:535 +msgid "File output" +msgstr "" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Edycja" +#: app/gui.c:612 +#, fuzzy +msgid "Can't open file for writing" +msgstr "Nie można otworzyć pliku do zapisu." -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Instrument" +#: app/gui.c:618 +#, fuzzy +msgid "Can't change file ownership" +msgstr "Nie można otworzyć pliku do zapisu." -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Ustawienia" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "" -#: app/menubar.c:711 -msgid "_Help" -msgstr "Pomo_c" +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" msgstr "" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Nazwa instrumentu" +#: app/gui.c:715 +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#próbk" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"Czy na pewno chcesz porzucić bieżący projekt?\n" +"Wszystkie zmiany zostanÄ… utracone!" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Nazwa próbki" +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "BÅ‚Ä…d podczas otwierania pliku z patternem!" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Liniowe" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" +msgstr "" +"DÅ‚ugość wczytywanego wzorca nie pasuje do bieżącego patternu w module.\n" +"Czy chcesz zmienić dÅ‚ugość bieżącego patternu?" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "PoczÄ…tek" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Informacje o module" +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "Wczytywanie..." -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Nazwa utworu:" +#: app/gui.c:2195 +msgid "Use SoundTracker!" +msgstr "Używaj SoundTrackera!" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Czêstotliwo¶ci:" +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"Czy na pewno chcesz zakoÅ„czyć?\n" +"Wszystkie zmiany zostanÄ… utracone!" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "Tryb ProTrackera" +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" -#: app/module-info.c:395 -#, c-format +#: app/gui.c:2289 msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." msgstr "" -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "Wczytywanie..." + +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" msgstr "" -#: app/playlist.c:535 -#, fuzzy -msgid "Remove current playlist entry" -msgstr "Bie¿±cy pattern" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" -#: app/playlist.c:543 -msgid "Add + Cpy" +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" msgstr "" -#: app/playlist.c:545 +#: app/gui.c:2400 +#, fuzzy +msgid "Extended pattern (*.xp)" +msgstr "Redagowany pattern" + +#: app/gui.c:2408 +#, c-format msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" msgstr "" -#: app/playlist.c:548 -msgid "Add Free" -msgstr "" +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Wczytaj moduÅ‚" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" msgstr "" -#: app/playlist.c:560 +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Zapisz moduÅ‚" + +#: app/gui.c:2434 #, fuzzy -msgid "Len" -msgstr "D³ugo¶æ" +msgid "Save the current module" +msgstr "Zapis bieżącego patternu..." -#: app/playlist.c:574 -msgid "Song length" -msgstr "D³ugo¶æ utworu" +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Zapisz WAV" -#: app/playlist.c:580 +#: app/gui.c:2436 #, fuzzy -msgid "Rstrt" -msgstr "Instr" +msgid "Render the current module as WAV file" +msgstr "Zapis moduÅ‚u jako WAV..." -#: app/playlist.c:593 -#, fuzzy -msgid "Song restart position" -msgstr "Pozycja ponowienia" +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Zapisz XM bez próbek..." -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" -msgstr "" -"W katalogu domowym zosta³ utworzony katalog .soundtracker, w\n" -"którym zapisywane bêd± pliki konfiguracyjne.\n" +#: app/gui.c:2439 +msgid "Load current pattern..." +msgstr "Odczyt bieżącego patternu..." -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Bez pêtli" +#: app/gui.c:2440 +msgid "Save current pattern..." +msgstr "Zapis bieżącego patternu..." -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "PingPong" +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Odtwórz utwór" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8 bitów" +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Odtwórz pattern" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16 bitów" +#: app/gui.c:2525 +msgid "Play From Cursor" +msgstr "" -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Edytor próbek" +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "Odtwórz utwór" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "G³o¶no¶æ" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Zatrzymaj" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Przemieszczenie" +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Dopasowanie" +#: app/gui.c:2562 +msgid "Pat" +msgstr "Pat" -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Zaznaczenie:" +#: app/gui.c:2568 +msgid "Edited pattern" +msgstr "Redagowany pattern" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Brak" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Wszystko" +#: app/gui.c:2583 +msgid "Pattern Length" +msgstr "DÅ‚ugość wzorca" -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "D³ugo¶æ:" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Ustaw jako pêtlê" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Liczba kanałów:" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "WzglNuta" - -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Wczytaj próbkê..." +#: app/gui.c:2632 +msgid "Set preferred accidental type" +msgstr "" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Zapis do pliku WAV..." +#: app/gui.c:2638 +msgid "Measure" +msgstr "Miara" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "Zapis obszaru do pliku WAV..." +#: app/gui.c:2639 +msgid "Enable row highlighting" +msgstr "" -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "Zapisz WAV" +# INNY CZY INNE? +#: app/gui.c:2660 +#, fuzzy +msgid "Other..." +msgstr "Inne..." -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "Zapisz obszar" +#: app/gui.c:2687 +msgid "Change effect column editing direction" +msgstr "" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Monitoruj" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" +msgstr "" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Nachyl g³o¶no¶æ" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "" -#: app/sample-editor.c:425 -msgid "Trim" +#: app/gui.c:2740 +msgid "Pitchbend" msgstr "" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Powiêksz do zaznaczenia" +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Wy¶wietl ca³o¶æ" +#: app/gui.c:2760 +msgid "Editing" +msgstr "Modyfikowanie" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Powiêksz (+50%)" +#: app/gui.c:2767 +msgid "Octave" +msgstr "Oktawa" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Pomniejsz (-50%)" +#: app/gui.c:2776 +msgid "Jump" +msgstr "Skok" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Odwróæ" +#: app/gui.c:2785 +msgid "Instr" +msgstr "Instr" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Wytnij" +#: app/gui.c:2801 +msgid "Sample" +msgstr "Próbka" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Usuñ" +#: app/gui.c:2827 +msgid "dB" +msgstr "" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Skopiuj" +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "Witaj w SoundTrackerze!" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Wklej" +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "Wyczy¶æ próbkê" +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Nie można otworzyć pliku." -#: app/sample-editor.c:500 +#: app/instrument-editor.c:209 #, fuzzy -msgid "Crop" -msgstr "Skopiuj" - -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(brak zaznaczenia)" +msgid "Saving instrument failed." +msgstr "Zapis instrumentu..." -#: app/sample-editor.c:1069 +#: app/instrument-editor.c:232 #, fuzzy -msgid "Out of memory for copybuffer.\n" -msgstr "Brak pamiêci na bufor kopiowania.\n" +msgid "Clear current instrument?" +msgstr "Bieżący instrument" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sinus" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." -msgstr "Brak pamiêci na dane próbki." +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "ProstokÄ…t" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "B³±d odczytu." +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "PiÅ‚a w dół" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Wczytaj próbkê stereo" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "PiÅ‚a w górÄ™" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" msgstr "" -"Zosta³a wybrana próbka stereo, podczas, gdy\n" -"SoundTracker obs³uguje tylko próbki mono.\n" -"\n" -"Wybierz kana³, który chcesz wczytaæ:" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Lewy" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Edytor instrumentów" -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Zmiksowany" +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Obwiednia gÅ‚oÅ›noÅ›ci" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Prawy" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Obwiednia przemieszczenia" -#: app/sample-editor.c:1575 -msgid "Signed" -msgstr "Ze znakiem" +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Wczytaj instrument" -#: app/sample-editor.c:1575 -msgid "Unsigned" -msgstr "Bez znaku" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "Little-Endian" +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Zapisz instrument" -#: app/sample-editor.c:1576 -msgid "Big-Endian" -msgstr "Big-Endian" +#: app/instrument-editor.c:297 +#, fuzzy +msgid "Save the current instrument" +msgstr "Bieżący instrument" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "Mono" +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "Wczytaj XI" -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "Stereo" +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "Zapisz XI" -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "Wczytaj surow± próbkê" +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "ZmianaGÅ‚oÅ›noÅ›ci" -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" +#: app/instrument-editor.c:344 +#, fuzzy +msgid "Vibrato:" +msgstr "Vibrato" + +#: app/instrument-editor.c:354 +msgid "Type" msgstr "" -"Zosta³a wybrana próbka, której format\n" -"nie jest znany. Mo¿esz wczytaæ surowe dane próbki.\n" -"\n" -"Wybierz format próbki:" -#: app/sample-editor.c:1623 -msgid "Word format:" -msgstr "Format s³owa:" +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "SzybkośćWibr" -#: app/sample-editor.c:1670 -msgid "Sampling Rate:" -msgstr "Wspó³czynnik próbkowania:" +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "GÅ‚Ä™bokośćWibr" + +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "RozciÄ…gniÄ™cieWibr" -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Nuta:" -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "OK" +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "Inicjuj" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Nie mo¿na wczytaæ próbki" +#: app/keys.c:58 +msgid "" +msgstr "" -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." +#: app/keys.c:134 +msgid "KOFF" msgstr "" -"Próbka jest zbyt d³uga dla aktualnego modu³u miksera. Wczytywanie pomimo " -"tego." -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Obs³ugiwane s± tylko próbki 8 i 16 bitowe z co najwy¿ej dwoma kana³ami" +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "Klawisz, który wstawia specjalnÄ… nutÄ™ keyoff dla modułów FastTrackera." -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "Najpiew wybierz obszar." +#: app/keys.c:136 +msgid "JMP+" +msgstr "" -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Rozpocznij próbkowanie" +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "Klawisz zwiÄ™kszajÄ…cy wartość \"skoku\"." -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "Brak sterownika próbkowania." +#: app/keys.c:138 +msgid "JMP-" +msgstr "" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Okno próbkowania" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "Klawisz zmniejszajÄ…cy wartość \"skoku\"." -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" -msgstr "Brak pamiêci podczas próbkowania..." +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Odtwórz utwór" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Zapis moduÅ‚u..." -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/keys.c:142 +msgid "RecMod" msgstr "" -"Nagrana próbka jest zbyt d³uga dla modu³u miksera. Pomimo tego zostanie " -"wykorzystana." -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normalizuj" - -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Wykonaj" - -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Nachylenie g³o¶no¶ci" +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Odtwarzanie patternu..." -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Liniowa zmiana g³o¶no¶ci zaznaczonego fragmentu" +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "Odtwórz pattern" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Lewy [%]:" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Odtwórz pattern" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "Po³owa" +#: app/keys.c:146 +msgid "RecPat" +msgstr "" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "Dwukrotno¶æ" +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Odtwarzanie patternu..." -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Prawy [%]:" +#: app/keys.c:148 +msgid "PlayCur" +msgstr "" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/keys.c:148 +msgid "Play module from cursor." msgstr "" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/keys.c:150 +msgid "RecCur" msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Odtwarzanie patternu..." + +#: app/keys.c:152 +#, fuzzy +msgid "PlayRow" +msgstr "Odtwórz utwór" + +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Odczyt bieżącego patternu..." + +#: app/keys.c:154 +msgid "PlayBlk" msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/keys.c:154 +#, fuzzy +msgid "Play selected block." +msgstr "ZapamiÄ™taj wybrany klawisz" + +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Klawisze górnej oktawy..." + +#: app/keys.c:167 +msgid "" +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." msgstr "" +"Klawisze te sÄ… w górnej części klawiatury. Klawisz c jest zwykle na prawo od " +"klawisza TAB. PozostaÅ‚e klawisze powinny zostać uÅ‚ożone zgodnie z ukÅ‚adem " +"klawiszy fortepianu, wÅ‚Ä…czajÄ…c w to klawisze poÅ‚ożone wyżej." -#: app/tips-dialog.c:50 +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Klawisze dolnej oktawy..." + +#: app/keys.c:173 msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." msgstr "" -"Witaj w SoundTrackerze!\n" -"\n" -"Je¶li to twój pierwszy kontakt z programami tego typu, mo¿esz na\n" -"pocz±tek spróbowaæ wczytaæ istniej±ce pliki XM lub MOD i\n" -"poeksperymentowaæ z nimi" +"Klawisze te sÄ… w dolnej części klawiatury. Klawisz c jest zwykle na prawo od " +"klawisza Shift. PozostaÅ‚e klawisze powinny zostać uÅ‚ożone zgodnie z ukÅ‚adem " +"klawiszy fortepianu, wÅ‚Ä…czajÄ…c w to klawisze poÅ‚ożone wyżej." + +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "Inne klawisze..." + +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Różne inne klawisze" + +#: app/keys.c:578 +msgid "Function" +msgstr "Funkcja" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "Przypisanie" + +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Konfiguracja klawiatury" + +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Opis grupy klawiszy" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Opis klawisza" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Modyfikatory:" -#: app/tips-dialog.c:55 +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "ZapamiÄ™taj wybrany klawisz" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "ZapamiÄ™taj wszystkie klawisze" + +#: app/keys.c:702 msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +"Please press the desired key combination!\n" +"Click into left list to cancel" msgstr "" -"Aby tryb edycji SoundTrackera lepiej reagowa³ na wej¶cie z klawiatury\n" -"mo¿esz zmniejszyæ rozmiar bufora miksowania w konfiguracji d¼wiêku\n" -"dla wyj¶cia edycji." +"WciÅ›nij pożądanÄ… kombinacjÄ™ klawiszy!\n" +"Kliknij listÄ™ po lewej stronie aby anulować" + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "CH%02d" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "Szybki skok do kanaÅ‚u %d" -#: app/tips-dialog.c:59 +#: app/keys.c:1028 msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." msgstr "" -"Mo¿esz dopasowaæ punkty pêtli w edytorze próbek poprzez przytrzymanie\n" -"klawisza Shift oraz wykorzystanie lewego i prawego przycisku myszy.\n" +"Automatyczna konfiguracja klawiszy nie powiodÅ‚a siÄ™.\n" +"Skorzystaj z konfiguracji klawiatury w menu Ustawienia." + +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" +msgstr "" + +#: app/menubar.c:126 +msgid "" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." +msgstr "" + +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"Czy na pewno chcesz to zrobić?\n" +"Wszystkie zmiany zostanÄ… utracone!" + +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "" + +#: app/mixers/kbfloat.c:838 +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" + +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" + +#: app/module-info.c:63 app/module-info.c:64 +msgid "Cyclic" +msgstr "" + +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" + +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" + +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" + +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" + +#: app/module-info.c:481 +msgid "Period" +msgstr "" + +#: app/module-info.c:484 +msgid "s" +msgstr "" + +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Nuta:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Nazwa instrumentu" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#próbk" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Nazwa próbki" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "Liniowe" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Informacje o module" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Nazwa utworu:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "CzÄ™stotliwoÅ›ci:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "Tryb ProTrackera" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Edytor instrumentów" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Bieżący instrument" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Zapisz instrument" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "ZamieÅ„ 1 <-> 2" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Dopasowanie" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "WzglNuta" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "" + +#: app/playlist.c:511 +#, fuzzy +msgid "Remove current playlist entry" +msgstr "Bieżący pattern" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "DÅ‚ugość" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "DÅ‚ugość utworu" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Instr" + +#: app/playlist.c:567 +#, fuzzy +msgid "Song restart position" +msgstr "Pozycja ponowienia" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"W katalogu domowym zostaÅ‚ utworzony katalog .soundtracker, w\n" +"którym zapisywane bÄ™dÄ… pliki konfiguracyjne.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Bez pÄ™tli" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "PingPong" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8 bitów" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16 bitów" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Edytor próbek" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "GÅ‚oÅ›ność" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Przemieszczenie" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Zaznaczenie:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "Brak" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Wszystko" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "DÅ‚ugość:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "Ustaw jako pÄ™tlÄ™" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Wczytaj próbkÄ™" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "Zapisz XM bez próbek..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Zapisz próbkÄ™" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "Zapisz XM bez próbek..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "Zapis obszaru do pliku WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "Zapisz WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "Zapisz obszar" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Nachyl gÅ‚oÅ›ność" + +#: app/sample-editor.c:593 +msgid "Trim" +msgstr "" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "PowiÄ™ksz do zaznaczenia" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "WyÅ›wietl caÅ‚ość" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "PowiÄ™ksz (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "Pomniejsz (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Odwróć" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Wytnij" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "UsuÅ„" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Skopiuj" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Wklej" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "Wyczyść próbkÄ™" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Skopiuj" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(brak zaznaczenia)" + +#: app/sample-editor.c:1279 +#, fuzzy +msgid "Out of memory for copybuffer." +msgstr "Brak pamiÄ™ci na bufor kopiowania.\n" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Zmiksowany" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Lewy" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Prawy" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d próbek)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "Brak pamiÄ™ci na dane próbki." + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "BÅ‚Ä…d odczytu." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"ZostaÅ‚a wybrana próbka stereo, podczas, gdy\n" +"SoundTracker obsÅ‚uguje tylko próbki mono.\n" +"\n" +"Wybierz kanaÅ‚, który chcesz wczytać:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "Rozpocznij próbkowanie" + +#: app/sample-editor.c:1756 +msgid "Signed" +msgstr "Ze znakiem" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "Bez znaku" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "Little-Endian" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "Big-Endian" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "Wczytaj surowÄ… próbkÄ™" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"ZostaÅ‚a wybrana próbka, której format\n" +"nie jest znany. Możesz wczytać surowe dane próbki.\n" +"\n" +"Wybierz format próbki:" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "Format sÅ‚owa:" + +#: app/sample-editor.c:1829 +msgid "Sampling Rate:" +msgstr "Współczynnik próbkowania:" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Nie można wczytać próbki" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "" +"Próbka jest zbyt dÅ‚uga dla aktualnego moduÅ‚u miksera. Wczytywanie pomimo " +"tego." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "ObsÅ‚ugiwane sÄ… tylko próbki 8 i 16 bitowe z co najwyżej dwoma kanaÅ‚ami" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Nie można otworzyć pliku do zapisu." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "Najpiew wybierz obszar." + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "Brak sterownika próbkowania." + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Okno próbkowania" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "Wyczyść _wszystko" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Współczynnik próbkowania:" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "Brak pamiÄ™ci podczas próbkowania..." + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"ZostaÅ‚a wybrana próbka stereo, podczas, gdy\n" +"SoundTracker obsÅ‚uguje tylko próbki mono.\n" +"\n" +"Wybierz kanaÅ‚, który chcesz wczytać:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Wczytaj próbkÄ™ stereo" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"Nagrana próbka jest zbyt dÅ‚uga dla moduÅ‚u miksera. Pomimo tego zostanie " +"wykorzystana." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Nachylenie gÅ‚oÅ›noÅ›ci" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normalizuj" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "Liniowa zmiana gÅ‚oÅ›noÅ›ci zaznaczonego fragmentu" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Lewy [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "PoÅ‚owa" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "Dwukrotność" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Prawy [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"Witaj w SoundTrackerze!\n" +"\n" +"JeÅ›li to twój pierwszy kontakt z programami tego typu, możesz na\n" +"poczÄ…tek spróbować wczytać istniejÄ…ce pliki XM lub MOD i\n" +"poeksperymentować z nimi" + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"Aby tryb edycji SoundTrackera lepiej reagowaÅ‚ na wejÅ›cie z klawiatury\n" +"możesz zmniejszyć rozmiar bufora miksowania w konfiguracji dźwiÄ™ku\n" +"dla wyjÅ›cia edycji." + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"Możesz dopasować punkty pÄ™tli w edytorze próbek poprzez przytrzymanie\n" +"klawisza Shift oraz wykorzystanie lewego i prawego przycisku myszy.\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"JeÅ›li chcesz dowiedzieć siÄ™ wiÄ™cej o trackerach oraz o dziaÅ‚aniu różnych\n" +"poleceÅ„, zajrzyj na http://www.united-trackers.org/" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Możesz przypisać próbki instrumentu do poszczególnych klawiszy poprzez\n" +"aktywowanie jego próbki i klikniÄ™cie klawiatury w edytorze instrumentów." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "Poprzednia porada" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "NastÄ™pna porada" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "WyÅ›wietlanie porad" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "Porada dnia SoundTrackera" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "Arpeggio" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "Vibrato" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "Tremolo" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "Ustaw przemieszczenie" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Próbka zostaÅ‚a zapisana." + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "Ustaw gÅ‚oÅ›ność" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Zmiana pozycji" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "Przerwanie patternu" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "Ustawienie tempa/bpm" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "Ustawienie globalnej gÅ‚oÅ›noÅ›ci" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "Pattern" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "Opóźnienie patternu" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "Ustaw szybkość wibrato" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "Sinus" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "" + +#: app/track-editor.c:203 +msgid "square" +msgstr "ProstokÄ…t" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +msgid "Extra fine porta up" +msgstr "" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "Transpozycja o oktawÄ™ w dół" + +#: app/track-editor.c:257 +msgid "None ]" +msgstr "Brak ]" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Jazzowa edycja:" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Tracker" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "Lista czcionek" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "Dodaj czcionkÄ™" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "UsuÅ„ czcionkÄ™" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "Zastosuj czcionkÄ™" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "Wybór czcionki..." + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "CaÅ‚y utwór" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "Wszystkie patterny" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "Bieżący pattern" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "Bieżąca Å›cieżka" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Bieżący instrument" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "Wszystkie instrumenty" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "Pół nuty w górÄ™" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "Pół nuty w dół" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "Oktawa w górÄ™" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "Oktawa w dół" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "ZamieÅ„ 1 <-> 2" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "ZmieÅ„ 2 -> 2" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "NarzÄ™dzia do transpozycji" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "ZasiÄ™g operacji:" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Transpozycja nuty" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Zmiana instrumentu" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Instrument 1:" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Bieżący instrument" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Instrument 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "DÅ‚ugość patternu poza zakresem: %d.\n" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "BÅ‚Ä…d podczas wczytywania instrumentów." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Instrument zostaÅ‚ wczytany." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Zmiana instrumentu" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Obwiednia przemieszczenia" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Obwiednia przemieszczenia" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Obwiednia przemieszczenia" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "Niepoprawny typ wibrato %d, wykorzystanie sinusa.\n" + +#: app/xm.c:678 app/xm.c:1233 +#, fuzzy +msgid "Out of memory error!" +msgstr "Brak pamiÄ™ci na bufor kopiowania.\n" + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "Plik nie zawiera instrumentów w formacie XI." + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Instrument zostaÅ‚ wczytany." + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Obwiednia przemieszczenia" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Obwiednia przemieszczenia" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Instrument zostaÅ‚ wczytany." + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "Niepoprawny typ wibrato %d, wykorzystanie sinusa.\n" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "BÅ‚Ä…d podczas wczytywania instrumentów." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Nie można otworzyć pliku" + +#: app/xm.c:1215 +#, fuzzy +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" +"DÅ‚ugość nagłówka XM != 276. Może to moduÅ‚ SoundTrackera przed 0.0.12? :-)\n" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "BÅ‚Ä…d podczas wczytywania instrumentów." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"ModuÅ‚ zawiera próbki, które sÄ… zbyt dÅ‚ugie dla aktualnego miksera.\n" +"Maksymalna dÅ‚ugość próbki wynosi %d." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "" +"Plik nie jest w formacie XM FastTrackera ani w obsÅ‚ugiwanym formacie MOD!" + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "BÅ‚Ä…d przy odczycie pliku lub niespodziewane zakoÅ„czenie pliku" + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "Niepoprawna lub nieobsÅ‚ugiwana wersja pliku patternu!" + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "Niepoprawna dÅ‚ugość patternu!" + +#: app/xm.c:1761 app/xm.c:1787 +msgid "Error during saving pattern!" +msgstr "BÅ‚Ä…d podczas zapisywania patternu!" + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "Automatyczne poÅ‚Ä…czenie" + +#: app/midi-settings.c:414 +msgid "Channel" +msgstr "KanaÅ‚" + +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "Numer klienta" + +#: app/midi-settings.c:434 +msgid "Port number" +msgstr "Numer portu" + +#: app/midi-settings.c:453 +msgid "Input" +msgstr "WejÅ›cie" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "Do przyszÅ‚ego rozwoju" + +#: app/midi-settings.c:468 +msgid "Output" +msgstr "WyjÅ›cie" + +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "Poziom debugowania" + +#: app/midi-settings.c:492 +msgid "Misc" +msgstr "Różne" + +#: app/midi-settings.c:532 +msgid "MIDI Configuration" +msgstr "Konfiguracja MIDI" + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Pattern" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "Åš_cieżka" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_UsuÅ„ nuty" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "W_staw Å›cieżkÄ™" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "_UsuÅ„ Å›cieżkÄ™" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "ZwiÄ™ksz wartość polecenia" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Zmniejsz wartość polecenia" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "_Bez zaznaczenia" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "_Interpoluj efekty" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Plik" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_Otwórz..." + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Z_apisz jako..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Zapisz moduÅ‚ jako _WAV..." + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "Zapisz XM bez próbek..." + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_ModuÅ‚" + +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "/ModuÅ‚/Wyczyść _wszystko" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Wyczyść tylko p_atterny" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Optymalizuj moduÅ‚" + +#: soundtracker.glade:346 +msgid "_Set Optimal Amplification" +msgstr "" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Edycja" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "_Jazzowy tryb edycji" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "_Transpozycja..." + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "P_attern" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "Åš_cieżka" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Zaznaczenie" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "Tryb _zaznaczania" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Transpozycja o pół nuty w górÄ™" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Transpozycja o pół nuty w dół" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Transpozycja o oktawÄ™ w górÄ™" + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Transpozycja o oktawÄ™ w dół" + +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "Wczy_taj pattern" -#: app/tips-dialog.c:62 -msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" -msgstr "" -"Je¶li chcesz dowiedzieæ siê wiêcej o trackerach oraz o dzia³aniu ró¿nych\n" -"poleceñ, zajrzyj na http://www.united-trackers.org/" +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "_Zapisz bieżący pattern" -#: app/tips-dialog.c:65 -msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." -msgstr "" -"Mo¿esz przypisaæ próbki instrumentu do poszczególnych klawiszy poprzez\n" -"aktywowanie jego próbki i klikniêcie klawiatury w edytorze instrumentów." +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_Znajdź nieużywany pattern" -#: app/tips-dialog.c:69 -msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" -msgstr "" +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "S_kopiuj bieżący do nieużywanego patternu" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "Porada dnia SoundTrackera" +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "_Zapisz bieżący pattern" -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Poprzednia porada" +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Nastêpna porada" +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "_Wyczyść nieużywane patterny" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Wy¶wietlanie porad" +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "K_ompresuj patterny" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "Arpeggio" +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "Bieżący pattern" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "" +#: soundtracker.glade:753 +#, fuzzy +msgid "_Expand Current Pattern" +msgstr "_Zapisz bieżący pattern" -#: app/track-editor.c:115 -msgid "Porta down" +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" msgstr "" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" msgstr "" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "Vibrato" +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "Bieżąca Å›cieżka" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" -msgstr "" +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "Bieżąca Å›cieżka" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" -msgstr "" +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "Bieżąca Å›cieżka" -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "Tremolo" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Instrument" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "Ustaw przemieszczenie" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "Wczytaj XI" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Zmiana pozycji" +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "Zapisz XI" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "Ustaw g³o¶no¶æ" +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "Wy_czyść bieżący" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "Przerwanie patternu" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_UsuÅ„ nieużywane instrumenty" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "Ustawienie tempa/bpm" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Ustawienia" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Ustawienie globalnej g³o¶no¶ci" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "WyÅ›wietlanie _oscyloskopów" -#: app/track-editor.c:130 -msgid "Global volume slide" +#: soundtracker.glade:896 +msgid "_Loop playback" msgstr "" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Tracker" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "" +#: soundtracker.glade:913 +#, fuzzy +msgid "_Flicker-free Scrolling" +msgstr "Przewijanie bez efektu _migotania" -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "_Poprzednia czcionka" -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "_NastÄ™pna czcionka" -#: app/track-editor.c:140 -msgid "Multi retrig note" +#: soundtracker.glade:944 +msgid "Change Preferred _Accidental Type" msgstr "" -#: app/track-editor.c:142 -msgid "Tremor" +#: soundtracker.glade:953 +msgid "Change Effect Column _Editing Direction" msgstr "" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "Konfiguracja klawiatury" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "Konfiguracja dźwiÄ™ku" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "Konfiguracja GUI" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "Konfiguracja MIDI" -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "" +#: soundtracker.glade:1016 +#, fuzzy +msgid "_Disable Splash Screen" +msgstr "WyÅ‚Ä…cz ekran powitalny" -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_Zapisz ustawienia" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Ustaw pocz±tek/koniec pêtli" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Zapis ustawieÅ„ przed z_akoÅ„czeniem" -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "Pomo_c" -#: app/track-editor.c:161 -msgid "Retrig note" -msgstr "" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "_Informacje o..." -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "WyÅ›wietl p_orady..." -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "Efekty _XM..." -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Odtwórz utwór" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Odtwórz utwór" -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "Opó¼nienie patternu" +#~ msgid "SoundTracker Startup" +#~ msgstr "Uruchamianie SoundTrackera" -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "" +#~ msgid "Vibrato Type:" +#~ msgstr "Typ vibrato:" -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "" +#~ msgid "Set loop begin/loop" +#~ msgstr "Ustaw poczÄ…tek/koniec pÄ™tli" -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "Ustaw szybko¶æ wibrato" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Nuta:" -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "" +#~ msgid "Error while loading instruments." +#~ msgstr "BÅ‚Ä…d podczas wczytywania instrumentów." -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "Zwróć uwagÄ™, że wyjÅ›cie na ESD jest nieprzydatne\n" +#~ "w trybie interaktywnym z powodu opóźnienia dodawanego\n" +#~ "przez ESD.\n" +#~ "Do poważnej pracy wykorzystaj wyjÅ›cie OSS lub ALSA." -#: app/track-editor.c:184 -msgid "sine" -msgstr "Sinus" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Nie można poÅ‚Ä…czyć siÄ™ z ESD jako wyjÅ›ciem dźwiÄ™ku:\n" +#~ "%s" -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "Zmiany odniosÄ… efekt po ponownym rozpoczÄ™ciu próbkowania." -#: app/track-editor.c:186 -msgid "square" -msgstr "Prostok±t" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Zmiana instrumentu" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, c-format -msgid "None ]" -msgstr "Brak ]" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "%s: Wymagane kodowanie dźwiÄ™ku nie jest obsÅ‚ugiwane.\n" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Jazzowa edycja:" +#~ msgid "%s: %s" +#~ msgstr "%s: %s" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Tracker" +#~ msgid "%s: Cannot play (%s)" +#~ msgstr "%s: Nie można odtworzyć (%s)" -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "Lista czcionek" +#~ msgid "%s: Cannot record (%s)" +#~ msgstr "%s: Nie można zapisać (%s)" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "Dodaj czcionkê" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Nieznana wersja 0x%x XI\n" -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "Usuñ czcionkê" +#~ msgid "out_1" +#~ msgstr "wyj_1" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "Zastosuj czcionkê" +#~ msgid "out_2" +#~ msgstr "wyj_2" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Góra" +#~ msgid "Monitor" +#~ msgstr "Monitoruj" -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Dó³" +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#próbk" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "Wybór czcionki..." +#~ msgid "OK" +#~ msgstr "OK" -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "Ca³y utwór" +#~ msgid "Cancel" +#~ msgstr "Anuluj" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Wszystkie patterny" +#~ msgid "(%d bytes)" +#~ msgstr "(%d bajtów)" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "Bie¿±cy pattern" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Szacowane opóźnienie dźwiÄ™ku: %f mikrosekund" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "Bie¿±ca ¶cie¿ka" +#~ msgid "ALSA card number:" +#~ msgstr "Numer karty ALSA:" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Bie¿±cy instrument" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Nie można otworzyć urzÄ…dzenia ALSA jako wejÅ›cia dźwiÄ™ku (karta:%d, " +#~ "urzÄ…dzenie:%d):\n" +#~ "%s" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Wszystkie instrumenty" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "Wymagane parametry wyjÅ›cia dźwiÄ™ku nie sÄ… obsÅ‚ugiwane.\n" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Pó³ nuty w górê" +# y, c-format +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Nie można otworzyć urzÄ…dzenia ALSA jako wyjÅ›cia dźwiÄ™ku (karta:%d, " +#~ "urzÄ…dzenie:%d):\n" +#~ "%s" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "Pó³ nuty w dó³" +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "Wymagane parametry kanaÅ‚u wyjÅ›ciowego nie sÄ… obsÅ‚ugiwane.\n" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "Oktawa w górê" +#~ msgid "Alsa setup error.\n" +#~ msgstr "BÅ‚Ä…d konfiguracji alsa.\n" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "Oktawa w dó³" +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "Nie można otworzyć %s jako wyjÅ›cia dźwiÄ™ku:\n" +#~ "%s" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "Zamieñ 1 <-> 2" +#~ msgid "soundtracker" +#~ msgstr "soundtracker" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "Zmieñ 2 -> 2" +#~ msgid "Save Song" +#~ msgstr "Zapisz utwór" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "Narzêdzia do transpozycji" +#~ msgid "Yes" +#~ msgstr "Tak" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Zasiêg operacji:" +#~ msgid "No" +#~ msgstr "Nie" -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Transpozycja nuty" +#~ msgid "Close" +#~ msgstr "Zamknij" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Zmiana instrumentu" +#~ msgid "No file selected." +#~ msgstr "Nie wybrano pliku." -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Instrument 1:" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Czy na pewno chcesz nadpisać plik?" -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Bie¿±cy instrument" +#~ msgid "Load XM..." +#~ msgstr "Wczytaj XM..." -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Instrument 2:" +#~ msgid "Save XM..." +#~ msgstr "Zapis do pliku XM..." -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "D³ugo¶æ patternu poza zakresem: %d.\n" +#~ msgid "Save song as XM..." +#~ msgstr "Zapis utworu jako XM..." -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "Plik nie zawiera instrumentów w formacie XI." +#~ msgid "Load Instrument..." +#~ msgstr "Odczyt instrumentu..." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Nieznana wersja 0x%x XI\n" +#~ msgid "Save Instrument..." +#~ msgstr "Zapis instrumentu..." -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "Niepoprawny typ wibrato %d, wykorzystanie sinusa.\n" +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "Plik z konfiguracjÄ… klawiatury jest uszkodzony.\n" +#~ "Wykorzystaj okno konfiguracji klawiatury." -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "B³±d podczas wczytywania instrumentów." +#~ msgid "Ok" +#~ msgstr "Ok" -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Nie mo¿na otworzyæ pliku" +#~ msgid "_Quit" +#~ msgstr "Za_koÅ„cz" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "B³±d podczas wczytywania instrumentów." +#~ msgid "C_ut" +#~ msgstr "_Wytnij" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"Modu³ zawiera próbki, które s± zbyt d³ugie dla aktualnego miksera.\n" -"Maksymalna d³ugo¶æ próbki wynosi %d." +#~ msgid "_Copy" +#~ msgstr "S_kopiuj" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "" -"Plik nie jest w formacie XM FastTrackera ani w obs³ugiwanym formacie MOD!" +#~ msgid "_Paste" +#~ msgstr "Wk_lej" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "B³±d przy odczycie pliku lub niespodziewane zakoñczenie pliku" +#, fuzzy +#~ msgid "P_aste" +#~ msgstr "Wklej" -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "Niepoprawna lub nieobs³ugiwana wersja pliku patternu!" +#~ msgid "_Load XI..." +#~ msgstr "_Wczytaj XI..." -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "Niepoprawna d³ugo¶æ patternu!" +#~ msgid "_Save XI..." +#~ msgstr "_Zapisz XM..." -#: app/xm.c:1468 -msgid "Error during saving pattern!" -msgstr "B³±d podczas zapisywania patternu!" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "Konfiguracja _klawiatury..." -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "Automatyczne po³±czenie" +#~ msgid "_Audio Configuration..." +#~ msgstr "Konfiguracja _dźwiÄ™ku..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -msgid "Channel" -msgstr "Kana³" +#~ msgid "_GUI Configuration..." +#~ msgstr "Konfiguracja _GUI..." -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "Numer klienta" +#~ msgid "_MIDI Configuration..." +#~ msgstr "Konfiguracja _MIDI..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" -msgstr "Numer portu" +#~ msgid "Load Sample..." +#~ msgstr "Wczytaj próbkÄ™..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -msgid "Input" -msgstr "Wej¶cie" +#~ msgid "Save WAV..." +#~ msgstr "Zapis do pliku WAV..." -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "Do przysz³ego rozwoju" +#~ msgid "8363" +#~ msgstr "8363" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -msgid "Output" -msgstr "Wyj¶cie" +#~ msgid "Execute" +#~ msgstr "Wykonaj" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "Poziom debugowania" +#~ msgid "Apply" +#~ msgstr "Zastosuj" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -msgid "Misc" -msgstr "Ró¿ne" +#~ msgid "Drivers" +#~ msgstr "Sterowniki" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -msgid "MIDI Configuration" -msgstr "Konfiguracja MIDI" +#~ msgid "Up" +#~ msgstr "Góra" -#~ msgid "Pattern" -#~ msgstr "Pattern" +#~ msgid "Down" +#~ msgstr "Dół" #~ msgid "Current pos" -#~ msgstr "Bie¿±ca pozycja" +#~ msgstr "Bieżąca pozycja" #~ msgid "`Save XM' saves all non-empty patterns" #~ msgstr "'Zapisz XM' zapisuje wszystkie niepuste patterny" #, fuzzy #~ msgid "Advance cursor horizontally in effect columns" -#~ msgstr "Przesuwanie kursora w dó³ w kolumnach efektów" +#~ msgstr "Przesuwanie kursora w dół w kolumnach efektów" #~ msgid "Use anti-aliased envelope editor" #~ msgstr "Wykorzystanie antyaliasingu w edytorze obwiedni" #~ msgid "" #~ "You need to restart SoundTracker for this change to come into effect." -#~ msgstr "Zmiany odnios± skutek po ponownym uruchomieniu SoundTrackera." +#~ msgstr "Zmiany odniosÄ… skutek po ponownym uruchomieniu SoundTrackera." #~ msgid "Use _Backing Store" #~ msgstr "Wykorzystanie _mechanizmu \"Backing store\"" @@ -2139,7 +3716,7 @@ #~ msgstr "/_Plik" #~ msgid "/File/_Open..." -#~ msgstr "/Plik/_Otwórz..." +#~ msgstr "/Plik/_Otwórz..." #~ msgid "/File/Save _as..." #~ msgstr "/Plik/Z_apisz jako..." @@ -2148,25 +3725,22 @@ #~ msgstr "/Plik/-" #~ msgid "/File/Save Module as _WAV..." -#~ msgstr "/Plik/Zapisz modu³ jako _WAV..." +#~ msgstr "/Plik/Zapisz moduÅ‚ jako _WAV..." #~ msgid "/File/Save XM without samples..." -#~ msgstr "/Plik/Zapisz XM bez próbek..." +#~ msgstr "/Plik/Zapisz XM bez próbek..." #~ msgid "/File/_Quit" -#~ msgstr "/Plik/Za_koñcz" +#~ msgstr "/Plik/Za_koÅ„cz" #~ msgid "/_Module" -#~ msgstr "_Modu³" - -#~ msgid "/Module/Clear _All" -#~ msgstr "/Modu³/Wyczy¶æ _wszystko" +#~ msgstr "_ModuÅ‚" #~ msgid "/Module/Clear _Patterns Only" -#~ msgstr "/Modu³/Wyczy¶æ tylko p_atterny" +#~ msgstr "/ModuÅ‚/Wyczyść tylko p_atterny" #~ msgid "/Module/_Optimize Module" -#~ msgstr "/Modu³/_Optymalizuj modu³" +#~ msgstr "/ModuÅ‚/_Optymalizuj moduÅ‚" #~ msgid "/_Edit" #~ msgstr "/_Edycja" @@ -2184,22 +3758,22 @@ #~ msgstr "Edycja/Pattern/_Wklej" #~ msgid "/Edit/_Track" -#~ msgstr "/Edycja/¦_cie¿ka" +#~ msgstr "/Edycja/Åš_cieżka" #~ msgid "/Edit/Track/_Kill notes" -#~ msgstr "/Edycja/¦cie¿ka/_Usuñ nuty" +#~ msgstr "/Edycja/Åšcieżka/_UsuÅ„ nuty" #~ msgid "/_Pattern" #~ msgstr "/P_attern" #~ msgid "/Pattern/_Find Unused Pattern" -#~ msgstr "/Pattern/_Znajd¼ nieu¿ywany pattern" +#~ msgstr "/Pattern/_Znajdź nieużywany pattern" #~ msgid "/Pattern/_Copy Current to Unused Pattern" -#~ msgstr "/Pattern/S_kopiuj bie¿±cy do nieu¿ywanego patternu" +#~ msgstr "/Pattern/S_kopiuj bieżący do nieużywanego patternu" #~ msgid "/Pattern/C_lear Unused Patterns" -#~ msgstr "/Pattern/_Wyczy¶æ nieu¿ywane patterny" +#~ msgstr "/Pattern/_Wyczyść nieużywane patterny" #~ msgid "/Pattern/_Pack Patterns" #~ msgstr "/Pattern/K_ompresuj patterny" @@ -2217,16 +3791,16 @@ #~ msgstr "/Instrument/-" #~ msgid "/Instrument/_Clear Current" -#~ msgstr "/Instrument/Wy_czy¶æ bie¿±cy" +#~ msgstr "/Instrument/Wy_czyść bieżący" #~ msgid "/Instrument/_Delete Unused Instruments" -#~ msgstr "/Instrument/_Usuñ nieu¿ywane instrumenty" +#~ msgstr "/Instrument/_UsuÅ„ nieużywane instrumenty" #~ msgid "/_Settings" #~ msgstr "/_Ustawienia" #~ msgid "/Settings/Display _Oscilloscopes" -#~ msgstr "/Ustawienia/Wy¶wietlanie _oscyloskopów" +#~ msgstr "/Ustawienia/WyÅ›wietlanie _oscyloskopów" #~ msgid "/Settings/_Tracker" #~ msgstr "/Ustawienia/_Tracker" @@ -2238,7 +3812,7 @@ #~ msgstr "/Ustawienia/Tracker/_Poprzednia czcionka" #~ msgid "/Settings/Tracker/_Next font" -#~ msgstr "/Ustawienia/Tracker/_Nastêpna czcionka" +#~ msgstr "/Ustawienia/Tracker/_NastÄ™pna czcionka" #~ msgid "/Settings/-" #~ msgstr "Ustawienia/-" @@ -2247,7 +3821,7 @@ #~ msgstr "/Ustawienia/Konfiguracja _klawiatury..." #~ msgid "/Settings/_Audio Configuration..." -#~ msgstr "/Ustawienia/Konfiguracja _d¼wiêku..." +#~ msgstr "/Ustawienia/Konfiguracja _dźwiÄ™ku..." #~ msgid "/Settings/_GUI Configuration..." #~ msgstr "/Ustawienia/Konfiguracja _GUI..." @@ -2259,7 +3833,7 @@ #~ msgstr "/Ustawienia/_Zapisz ustawienia" #~ msgid "/Settings/Save Settings on _Exit" -#~ msgstr "/Ustawienia/Zapis ustawieñ przed z_akoñczeniem" +#~ msgstr "/Ustawienia/Zapis ustawieÅ„ przed z_akoÅ„czeniem" #~ msgid "/_Help" #~ msgstr "/Pomo_c" @@ -2271,17 +3845,11 @@ #~ msgstr "/Pomoc/-" #~ msgid "/Help/Show _Tips..." -#~ msgstr "/Pomoc/Wy¶wietl p_orady..." +#~ msgstr "/Pomoc/WyÅ›wietl p_orady..." #~ msgid "/Help/_XM Effects..." #~ msgstr "/Pomoc/Efekty _XM..." -#~ msgid "" -#~ "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n" -#~ msgstr "" -#~ "D³ugo¶æ nag³ówka XM != 276. Mo¿e to modu³ SoundTrackera przed " -#~ "0.0.12? :-)\n" - #~ msgid "Save Song as XM..." #~ msgstr "Zapis utworu jako XM..." @@ -2289,14 +3857,10 @@ #~ msgstr "/Plik/Zapis utworu jako XM..." #~ msgid "Master Reverb" -#~ msgstr "Ogólny reverb" - -#, fuzzy -#~ msgid "Playback Effects Configuration" -#~ msgstr "Konfiguracja efektów playback" +#~ msgstr "Ogólny reverb" #~ msgid "Saving Instruments not yet supported." -#~ msgstr "Zapisywanie instrumentów nie jest jeszcze mo¿liwe." +#~ msgstr "Zapisywanie instrumentów nie jest jeszcze możliwe." #, fuzzy #~ msgid "_Playback Effects.." @@ -2306,31 +3870,28 @@ #~ msgstr "/Ustawienia/Efekty _odtwarzania.." #~ msgid "/Settings/Display Oscilloscopes" -#~ msgstr "/Ustawienia/Wy¶wietlanie oscyloskopów" +#~ msgstr "/Ustawienia/WyÅ›wietlanie oscyloskopów" #~ msgid "/Settings/Use Backing Store" #~ msgstr "/Ustawienia/Wykorzystanie mechanizmu \"Backing store\"" #, fuzzy #~ msgid "SelStart" -#~ msgstr "Pocz±tek" +#~ msgstr "PoczÄ…tek" #, fuzzy #~ msgid "SelEnd" #~ msgstr "Koniec" -#~ msgid "Reset Sel" -#~ msgstr "Wyczy¶æ Zazn" - #~ msgid "Length: 0" -#~ msgstr "D³ugo¶æ: 0" +#~ msgstr "DÅ‚ugość: 0" #, fuzzy #~ msgid "Resample" -#~ msgstr "Próbka" +#~ msgstr "Próbka" #~ msgid "Filter" #~ msgstr "Filtr" #~ msgid "Length: %d" -#~ msgstr "D³ugo¶æ: %d" +#~ msgstr "DÅ‚ugość: %d" diff -Nru soundtracker-0.6.8/po/POTFILES.in soundtracker-1.0.2~pre2/po/POTFILES.in --- soundtracker-0.6.8/po/POTFILES.in 2003-05-18 10:56:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/POTFILES.in 2020-10-12 08:47:02.000000000 +0000 @@ -1,15 +1,14 @@ app/audio.c app/audioconfig.c +app/cheat-sheet.c app/clavier.c -app/drivers/alsa-input.c -app/drivers/alsa-output.c -app/drivers/alsa2-input.c -app/drivers/alsa2-output.c -app/drivers/esd-output.c -app/drivers/file-output.c -app/drivers/oss-input.c -app/drivers/oss-output.c -app/drivers/jack-output.c +app/colors.c +app/drivers/alsa1x.c +app/drivers/dummy-drivers.c +app/drivers/irix-output.c +app/drivers/oss.c +app/drivers/jack.c +app/drivers/sdl-output.c app/drivers/sun-output.c app/drivers/sun-input.c app/envelope-box.c @@ -18,12 +17,16 @@ app/file-operations.c app/gui-settings.c app/gui-subs.c +app/gui-subs.h app/gui.c +app/history.c +app/history.h app/instrument-editor.c app/keys.c app/main.c app/menubar.c app/mixers/integer32.c +app/mixers/kbfloat.c app/module-info.c app/playlist.c app/poll.c @@ -41,5 +44,7 @@ app/transposition.c app/xm-player.c app/xm.c -app/midi-settings-050.c -app/midi-settings-09x.c +app/midi.c +app/midi-settings.c +soundtracker.glade +envelope-box.glade Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/ru.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/ru.gmo differ diff -Nru soundtracker-0.6.8/po/Rules-quot soundtracker-1.0.2~pre2/po/Rules-quot --- soundtracker-0.6.8/po/Rules-quot 2005-07-09 13:02:59.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/Rules-quot 2019-03-01 13:06:30.000000000 +0000 @@ -1,3 +1,4 @@ +# This file, Rules-quot, can be copied and used freely without restrictions. # Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot @@ -14,13 +15,23 @@ .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ - if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ + if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ - if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ + if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \ + | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \ + { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \ + $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \ + ;; \ + *) \ + $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \ + ;; \ + esac } 2>/dev/null > $$tmpdir/$$lang.new.po \ + ; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ diff -Nru soundtracker-0.6.8/po/ru.po soundtracker-1.0.2~pre2/po/ru.po --- soundtracker-0.6.8/po/ru.po 2006-02-25 13:25:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/ru.po 2020-05-27 19:04:15.000000000 +0000 @@ -1,1267 +1,1887 @@ -# òÕÓÓËÁÑ ÌÏËÁÌÉÚÁÃÉÑ ÄÌÑ Sound Tracker -# Copyright (C) 1999, 2000 Free Software Foundation, Inc. +# РуÑÑÐºÐ°Ñ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð»Ñ Sound Tracker +# Copyright (C) 1999, 2000, 2002, 2003, 2005, 2007, 2018 Free Software Foundation, Inc. # Michael Shigorin , 1999, 2000. -# Yury Aliaev , 2002, 2003, 2005. +# Yury Aliaev , 2002, 2003, 2005, 2007, 2019, 2020. # msgid "" msgstr "" -"Project-Id-Version: soundtracker-0.6.4\n" +"Project-Id-Version: soundtracker-1.0.1\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" -"PO-Revision-Date: 2000-09-12 20:35+0200\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" +"PO-Revision-Date: 2020-02-26 13:45+0300\n" "Last-Translator: Yury Aliaev \n" "Language-Team: Russian \n" +"Language: ru\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=koi8-r\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "ПотерÑна ÑвÑзь Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÐ¾Ð¼ обработки звука!" + +#: app/audioconfig.c:62 msgid "Playback Output" -msgstr "÷ÙÈÏÄ ×ÏÓÐÒÏÉÚ×ÅÄÅÎÉÑ" +msgstr "Выход воÑпроизведениÑ" #: app/audioconfig.c:69 msgid "Editing Output" -msgstr "÷ÙÈÏÄ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ" +msgstr "Выход редактированиÑ" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" -msgstr "ïÃÉÆÒÏ×ËÁ" +msgstr "Оцифровка" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" -msgstr "íÏÄÕÌØ ÄÒÁÊ×ÅÒÁ" +msgstr "Модуль драйвера" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" -msgstr "íÏÄÕÌØ ÍÉËÛÅÒÁ" +msgstr "Модуль микшера" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" -msgstr "ïÐÉÓÁÎÉÅ" +msgstr "ОпиÑание" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" -msgstr "ëÏÎÆÉÇÕÒÁÃÉÑ ÁÕÄÉÏ" - -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "äÒÁÊ×ÅÒÙ" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð·Ð²ÑƒÐºÐ¾Ð²Ð¾Ð¹ подÑиÑтемы" -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" -msgstr "íÉËÛÅÒÙ" +msgstr "Микшеры" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "úÁËÒÙÔØ" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "Ðе найдены Ñправочные Ñтраницы!" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d ÂÁÊÔ)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" +"Ðевозможно загрузить файл Ñправки %s.\n" +"%s" + +#: app/cheat-sheet.c:91 +msgid "XM Effects Cheat Sheet" +msgstr "Справка по Ñффектам XM" + +#: app/colors.c:42 +msgid "Background" +msgstr "Фон" + +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "Фон Ñ‚Ñ€Ñкера и отриÑовки Ñигналов" + +#: app/colors.c:43 +msgid "Cursor background" +msgstr "Фон курÑора" + +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "Фон линии курÑора в Ñ‚Ñ€Ñкере" + +#: app/colors.c:44 +msgid "Major lines" +msgstr "ОÑновные Ñтроки" + +#: app/colors.c:44 +msgid "Major lines highlighting" +msgstr "ПодÑветка оÑновных Ñтрок" + +#: app/colors.c:45 +msgid "Minor lines" +msgstr "Ð’Ñпомогательные Ñтроки" + +#: app/colors.c:45 +msgid "Minor lines highlighting" +msgstr "ПодÑветка вÑпомогательных Ñтрок" + +#: app/colors.c:46 soundtracker.glade:142 +msgid "Selection" +msgstr "Выделение" + +#: app/colors.c:46 +msgid "Tracker selection" +msgstr "Выделение в Ñ‚Ñ€Ñкере" + +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "Ðоты, Ñигналы" + +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" +msgstr "ТекÑÑ‚ в Ñ‚Ñ€Ñкере (ноты, Ñффекты) и графики Ñигналов" + +#: app/colors.c:48 +msgid "Delimiters" +msgstr "Разделители" + +#: app/colors.c:48 +msgid "Tracker delimiters" +msgstr "Разделители в Ñ‚Ñ€Ñкере" + +#: app/colors.c:49 +msgid "Channel numbers, loops" +msgstr "Ðомера каналов, циклы" + +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" +msgstr "Ðомера каналов и отметки циклов в редакторе ÑÑмплов" + +#: app/colors.c:50 +msgid "Cursor idle" +msgstr "КурÑор при ожидании" + +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "КурÑор Ñ‚Ñ€Ñкера в режиме ожиданиÑ" + +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "КурÑор при редактировании" + +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "КурÑор Ñ‚Ñ€Ñкера в режиме редактированиÑ" + +#: app/colors.c:52 +msgid "Cursor bg in selection" +msgstr "Фон курÑора в выделении" + +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" +msgstr "Фон курÑора Ñ‚Ñ€Ñкера в выделении" + +#: app/colors.c:53 +msgid "Mixer position" +msgstr "ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð¼Ð¸ÐºÑˆÐµÑ€Ð°" + +#: app/colors.c:53 +msgid "Mixer position indicator" +msgstr "Индикатор поици микшера" + +#: app/colors.c:54 +msgid "Zero line" +msgstr "ÐÑƒÐ»ÐµÐ²Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ" + +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "ÐÑƒÐ»ÐµÐ²Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð° ÑÑмплов" + +#: app/colors.c:56 +msgid "White keys" +msgstr "Белые клавиши" + +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "Белые фортепианные клавиши, текÑÑ‚ на чёрных клавишах" + +#: app/colors.c:57 +msgid "Black keys" +msgstr "Чёрные клавиши" + +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" +msgstr "Чёрные фортепианные клавиши, текÑÑ‚ на белых клавишах" + +#: app/colors.c:58 +msgid "White keys pressed" +msgstr "Ðажатые белые клавиши" + +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "Белые фортепианные клавиши в нажатом ÑоÑтоÑнии" + +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "Ðажатые чёрнлавиши" + +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "Чёрные фортепианные клавиши в нажатом ÑоÑтоÑнии" + +#: app/colors.c:60 +msgid "White text pressed" +msgstr "ТекÑÑ‚ на белых при нажатии" + +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "ТекÑÑ‚ на белых клавишах в нажатом ÑоÑтоÑнии" + +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "ТекÑÑ‚ на чёрных при нажатии" + +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "ТекÑÑ‚ на чёрных клавишах в нажатом ÑоÑтоÑнии" + +#: app/colors.c:395 +#, c-format +msgid "%s colors configuration" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð¾Ð¹ Ñхемы %s" + +#: app/colors.c:398 +msgid "Reset" +msgstr "СброÑить" + +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "Вернуть Ñтандартную цветовую Ñхему" + +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "Вернуть цвета к поÑледним Ñохранённым значениÑм" + +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "Цвета фортепиано из Gtk" + +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" +msgstr "%f миллиÑекунд" + +#: app/drivers/alsa1x.c:320 +msgid "ALSA device opening error" +msgstr "Ошибка при открытии уÑтройÑтва ALSA:" + +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "Ошибка Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ð½Ñ‚Ñ‹Ñ… параметров" + +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "Ðевозможно задать формат предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð²ÑƒÐºÐ°" + +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +msgid "Unable to set channels number" +msgstr "Ðевозможно задать чиÑло каналов" + +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "Ðевозможно уÑтановить подходÑщий размер буфера" + +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "Ðевозможно получить минимальный размер периода" + +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "Ðевозможно получить макÑимальный размер периода" + +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "Ðевозможно получить минимальное значение чаÑтоты диÑкретизации" + +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "Ðевозможно получить макÑимальное значение чаÑтоты диÑкретизации" + +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "Ðевозможно получить минимальный размер буфера" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "Ðевозможно получить макÑимальный размер буфера" + +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "Ðевозможно получить минимальное чиÑло каналов" + +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "Ðевозможно получить макÑимальное чиÑло каналов" + +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "УÑтройÑтво ALSA не подерживает ни моно, ни Ñтерео!" + +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "УÑтройÑтво ALSA не подерживает ни 8-ми, ни 16-ти разрÑдное разрешение!" + +#: app/drivers/alsa1x.c:675 #, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "ïÖÉÄÁÅÍÁÑ ÚÁÄÅÒÖËÁ Ú×ÕËÁ: %f ÍÉËÒÏÓÅËÕÎÄ" +msgid " = %u samples" +msgstr "(%u ÑÑмплов)" + +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "УÑÑ‚Ñ€" + +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "Ðе найдено ни одной звуковой карты..." + +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "СпиÑок уÑтройÑтв" -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 +#: app/drivers/alsa1x.c:811 app/gui.c:476 +msgid "8 bit" +msgstr "8 бит" + +#: app/drivers/alsa1x.c:811 app/gui.c:476 +msgid "16 bit" +msgstr "16 бит" + +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "Моно" + +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "Стерео" + +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 msgid "These changes won't take effect until you restart playing." -msgstr "üÔÉ ÉÚÍÅÎÅÎÉÑ ×ÓÔÕÐÑÔ × ÓÉÌÕ ÐÒÉ ÓÌÅÄÕÀÝÅÍ ×ÏÓÐÒÏÉÚ×ÅÄÅÎÉÉ." +msgstr "Эти Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑтупÑÑ‚ в Ñилу при Ñледующем воÑпроизведении." + +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "" +"Эти Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑтупÑÑ‚ в Ñилу только поÑле перезапуÑка процеÑÑа оцифровки." + +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "УÑтройÑтво:" + +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "СпиÑок доÑтупных уÑтройÑтв" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 msgid "Resolution:" -msgstr "òÁÚÒÑÄÎÏÓÔØ:" +msgstr "РазрÑдноÑÑ‚ÑŒ:" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 msgid "Channels:" -msgstr "ëÁÎÁÌÙ:" +msgstr "Каналы:" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 msgid "Frequency [Hz]:" -msgstr "þÁÓÔÏÔÁ [çÃ]:" +msgstr "ЧаÑтота [Гц]:" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 msgid "Buffer Size:" -msgstr "òÁÚÍÅÒ ÂÕÆÅÒÁ:" +msgstr "Размер буфера:" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "îÏÍÅÒ ËÁÒÔÙ ALSA:" +#: app/drivers/alsa1x.c:914 +msgid "Number of Periods:" +msgstr "КоличеÑтво периодов:" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "îÏÍÅÒ ÕÓÔÒÏÊÓÔ×Á ALSA:" +#: app/drivers/alsa1x.c:938 +msgid "Estimated audio delay:" +msgstr "ÐžÐ¶Ð¸Ð´Ð°ÐµÐ¼Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ° звука:" -#: app/drivers/alsa-input.c:374 -#, c-format +#: app/drivers/alsa1x.c:943 msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." msgstr "" -"îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÕÓÔÒÏÊÓÔ×Ï ALSA ÄÌÑ ××ÏÄÁ Ú×ÕËÁ\n" -"(ËÁÒÔÁ: %d, ÕÓÔÒÏÊÓÔ×Ï: %d):\n" -"%s" +"ЗапуÑк и оÑтановка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ проиÑходить моментально, но отклик " +"на дейÑÑ‚Ð²Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð±ÑƒÐ´ÐµÑ‚ запаздывать на данный временной интервал." -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "ôÒÅÂÕÅÍÙÊ ÆÏÒÍÁÔ ×ÏÓÐÒÏÉÚ×ÅÄÅÎÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ.\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "ôÒÅÂÕÅÍÙÅ ÐÁÒÁÍÅÔÒÙ ×ÏÓÐÒÏÉÚ×ÅÄÅÎÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ.\n" +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" +msgstr "Ðевозможно вернутьÑÑ Ð¸Ð· дежурного режима" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "ïÖÉÄÁÅÍÁÑ ÚÁÄÅÒÖËÁ Ú×ÕËÁ: %f ÍÉÌÌÉÓÅËÕÎÄ" +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "Ошибка подготовки потока" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" -msgstr "" -"îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÕÓÔÒÏÊÓÔ×Ï ALSA ÄÌÑ ×Ù×ÏÄÁ Ú×ÕËÁ\n" -"(ËÁÒÔÁ: %d, ÕÓÔÒÏÊÓÔ×Ï: %d):\n" -"%s" +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "Ошибка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð·Ð²ÑƒÐºÐ°" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "ôÒÅÂÕÅÍÙÅ ÐÁÒÁÍÅÔÒÙ ËÁÎÁÌÁ ×ÏÓÐÒÏÉÚ×ÅÄÅÎÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ.\n" +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "Ошибка запиÑи звука" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÏÄÇÏÔÏ×ÉÔØ ËÁÎÁÌ ALSA.\n" +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "Драйвер ALSA: ошибка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти!" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "ïÛÉÂËÁ ÎÁÓÔÒÏÊËÉ ALSA.\n" +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "Ошибка Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° звука" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "Ðевозможно задать тип доÑтупа" + +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "Ðевозможно задать чаÑтоту диÑкретизации" + +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "Ðевозможно задать чиÑло периодов" + +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "Ðевозможно получить размер периода" + +#: app/drivers/alsa1x.c:1293 +msgid "Error setting hw parameters" +msgstr "Ошибка при уÑтановке аппаратных параметров" + +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "Ðевозможно определить текущие программные параметры воÑпроизведениÑ" + +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "Ðевозможно определить текущие программные параметры оцифровки" + +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "Ðевозможно задать значение порога Ð´Ð»Ñ Ð²Ð¾ÑпроизведениÑ" + +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "Ðевозможно задать значение порога Ð´Ð»Ñ Ð¾Ñ†Ð¸Ñ„Ñ€Ð¾Ð²ÐºÐ¸" + +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" msgstr "" -"úÁÍÅÔØÔÅ, ÞÔÏ ×Ù×ÏÄ ÞÅÒÅÚ ESD ÎÅÐÒÉÇÏÄÅÎ ÄÌÑ\n" -"ÉÎÔÅÒÁËÔÉ×ÎÏÇÏ ÒÅÖÉÍÁ ÉÚ-ÚÁ ÚÁÄÅÒÖÅË, ××ÏÄÉÍÙÈ\n" -"ESD. äÌÑ ÓÅÒØÅÚÎÏÊ ÒÁÂÏÔÙ ÉÓÐÏÌØÚÕÊÔÅ ÐÌÁÇÉÎÙ\n" -"×ÏÓÐÒÏÉÚ×ÅÄÅÎÉÑ OSS ÉÌÉ ALSA." +"Ðевозможно задать минимальное значение доÑтупных периодов Ð´Ð»Ñ Ð²Ð¾ÑпроизведениÑ" -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" msgstr "" -"ðÏÄËÌÀÞÅÎÉÅ Ë ESD ÄÌÑ ×Ù×ÏÄÁ Ú×ÕËÁ ÎÅ ÕÄÁÌÏÓØ ÐÏ ÐÒÉÞÉÎÅ:\n" -"%s" +"Ðевозможно задать минимальное значение доÑтупных периодов Ð´Ð»Ñ Ð¾Ñ†Ð¸Ñ„Ñ€Ð¾Ð²ÐºÐ¸" + +#: app/drivers/alsa1x.c:1328 +msgid "Unable to enable timestamping for playback" +msgstr "Ðевозможно задейÑтвовать временнЫе отметки в режиме воÑпроизведениÑ" + +#: app/drivers/alsa1x.c:1329 +msgid "Unable to enable timestamping for capture" +msgstr "Ðевозможно задейÑтвовать временнЫе отметки в режиме оцифровки" + +#: app/drivers/alsa1x.c:1335 +msgid "Unable to set timestamp type for playback" +msgstr "Ðевозможно уÑтановить тип временнЫх отметок в режиме воÑпроизведениÑ" + +#: app/drivers/alsa1x.c:1336 +msgid "Unable to set timestamp type for capture" +msgstr "Ðевозможно уÑтановить тип временнЫх отметок в режиме оцифровки" + +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" +msgstr "Ðевозможно задать программные параметры режима воÑпроизведениÑ" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "Ðевозможно задать программные параметры режима оцифровки" + +#: app/drivers/alsa1x.c:1352 +msgid "Unable to prepare playback" +msgstr "Ðевозможно подготовить канал воÑпроизведениÑ" + +#: app/drivers/alsa1x.c:1353 +msgid "Unable to prepare capture" +msgstr "Ðевозможно подготовить канал оцифровки" + +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" +msgstr "Ðевозможно получить деÑкриптор опроÑа Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° воÑпроизведениÑ" + +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" +msgstr "Ðевозможно запуÑтить оцифровку" + +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "ОтÑутÑтвует драйвер Ð´Ð»Ñ Ð’Ð°ÑˆÐµÐ¹ ÑиÑтемы." + +#: app/drivers/irix-output.c:98 msgid "no settings (yet), sorry!" -msgstr "(ÐÏËÁ) ÎÅÔ ÎÁÓÔÒÏÅË, ÉÚ×ÉÎÉÔÅ!" +msgstr "(пока) нет наÑтроек, извините!" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ ÄÌÑ ÚÁÐÉÓÉ." +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "Ошибка Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ALnewconfig()." -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." -msgstr "" -"üÔÉ ÉÚÍÅÎÅÎÉÑ ×ÓÔÕÐÑÔ × ÓÉÌÕ ÔÏÌØËÏ ÐÏÓÌÅ ÐÅÒÅÚÁÐÕÓËÁ ÐÒÏÃÅÓÓÁ ÏÃÉÆÒÏ×ËÉ." +#: app/drivers/irix-output.c:178 +msgid "16 Bit output not supported." +msgstr "16-ти разрдный вывод не поддерживаетÑÑ" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "õÓÔÒÏÊÓÔ×Ï ××ÏÄÁ (ÎÁÐÒÉÍÅÒ, '/dev/dsp'):" +#: app/drivers/irix-output.c:184 +msgid "Stereo output not supported." +msgstr "СтереофоничеÑкий вывод не поддерживаетÑÑ." + +#: app/drivers/irix-output.c:192 +msgid "Couldn't open audio port." +msgstr "Ðевозможно открыть порт вывода звука." + +#: app/drivers/oss.c:130 +msgid "OSS input: reading error" +msgstr "Драйвер оцифровки OSS: ошибка чтениÑ" -#: app/drivers/oss-input.c:234 +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "Драйвер оцифровки OSS: ошибка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти" + +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 #, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" -msgstr "" -"îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s ÄÌÑ ÏÃÉÆÒÏ×ËÉ:\n" -"%s" +msgid "Estimated audio delay: %f milliseconds" +msgstr "ÐžÐ¶Ð¸Ð´Ð°ÐµÐ¼Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ° звука: %f миллиÑекунд" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 #, c-format msgid "(%d samples)" -msgstr "(%d ÓÜÍÐÌÏ×)" +msgstr "(%d ÑÑмплов)" + +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "УÑтройÑтво ввода (например, '/dev/dsp'):" -#: app/drivers/oss-output.c:217 +#: app/drivers/oss.c:248 msgid "Output device (e.g. '/dev/dsp'):" -msgstr "õÓÔÒÏÊÓÔ×Ï ×Ù×ÏÄÁ (ÎÁÐÒÉÍÅÒ, '/dev/dsp'):" +msgstr "УÑтройÑтво вывода (например, '/dev/dsp'):" + +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" +msgstr "Драйвер OSS: ошибка Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð²" + +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "Драйвер OSS: ошибка Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ñ‡Ð¸Ñла каналов" + +#: app/drivers/oss.c:445 +#, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "Драйвер OSS (%s): невозможно открыть %s" + +#: app/drivers/oss.c:480 +#, c-format +msgid "Required %s format not supported." +msgstr "Требуемый формат %s не поддерживаетÑÑ." + +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" +msgstr "Запущен при чаÑтоте %d Гц, %d кадров" + +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "Сервер Jack не запущен?" -#: app/drivers/oss-output.c:391 +#: app/drivers/jack.c:403 #, c-format msgid "" -"Couldn't open %s for sound output:\n" +"Jack driver error:\n" "%s" msgstr "" -"îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s ÄÌÑ ×Ù×ÏÄÁ Ú×ÕËÁ:\n" +"Ошибка драйвера Jack:\n" "%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" -msgstr "÷ÅÄÕÝÉÊ" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "Ошибка активации драйвера Jack." + +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "Обновить" + +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "ÐвтозапуÑк Jack" -#: app/drivers/jack-output.c:259 +#: app/drivers/jack.c:562 msgid "declick" -msgstr "õÓÔÒÁÎÅÎÉÅ ÝÅÌÞËÏ×" +msgstr "УÑтранение щелчков" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" -msgstr "úÁÐÕÝÅÎ ÐÒÉ ÞÁÓÔÏÔÅ %d çÃ, %d ËÁÄÒÏ×" +#: app/drivers/jack.c:610 +msgid "Jack server is not running or some error occured." +msgstr "Сервер Jack не запущен или произошла ошибка." + +#: app/drivers/sdl-output.c:76 +msgid "Experimental SDL support." +msgstr "ЭкÑÐ¿ÐµÑ€Ð¸Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° SDL." + +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "УÑтройÑтво вывода (Ñ‚.е. '/dev/audio'):" -#: app/drivers/jack-output.c:283 +#: app/drivers/sun-output.c:385 #, c-format -msgid "Jack server not running?" -msgstr "óÅÒ×ÅÒ Jack ÎÅ ÚÁÐÕÝÅÎ?" +msgid "SUN output (%s): Cannot open device" +msgstr "Вывод звука SUN (%s): невозможно открыть уÑтройÑтво" -#: app/drivers/jack-output.c:327 +#: app/drivers/sun-output.c:393 #, c-format -msgid "soundtracker" -msgstr "soundtracker" +msgid "SUN output (%s) does not support playback" +msgstr "Вывод звука SUN (%s): воÑпроизведение не поддерживаетÑÑ" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "out_1" +#: app/drivers/sun-output.c:402 +#, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "Вывод звука SUN (%s): Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ñ‡Ð°Ñтота: %d Гц" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "out_2" +#: app/drivers/sun-output.c:432 +#, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "" +"Вывод звука SUN (%s): Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ð°Ñ Ñхема ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð²ÑƒÐºÐ° не поддерживаетÑÑ" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" -msgstr "õÓÔÒÏÊÓÔ×Ï ×Ù×ÏÄÁ (Ô.Å. '/dev/audio'):" +#: app/drivers/sun-output.c:455 +#, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "Вывод звука SUN (%s): невозможно уÑтановить размер блока" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "SUN input (%s): Cannot get device information" +msgstr "" +"Драйвер оцифровки SUN (%s): невозможно получить информацию об уÑтройÑтве" + +#: app/drivers/sun-input.c:77 +msgid "SUN input: reading error" +msgstr "Драйвер оцифровки SUN: ошибка чтениÑ" + +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "Драйвер оцифровки SUN: ошибка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти" + +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "УÑтройÑтво ввода (Ñ‚.е. '/dev/audio'):" -#: app/drivers/sun-output.c:395 +#: app/drivers/sun-input.c:246 #, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: ÷ÏÓÐÒÏÉÚ×ÅÄÅÎÉÅ ÎÅ×ÏÚÍÏÖÎÏ (%s)" +msgid "SUN input (%s): Cannot open device" +msgstr "Драйвер оцифровки SUN (%s): невозможно открыть уÑтройÑтво" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 +#: app/drivers/sun-input.c:254 #, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: îÅÐÏÄÄÅÒÖÉ×ÁÅÍÁÑ ÞÁÓÔÏÔÁ: %d çà (%s)" +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "Драйвер оцифровки SUN (%s): полнодуплекÑный режим не поддерживаетÑÑ" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 +#: app/drivers/sun-input.c:264 #, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s ôÒÅÂÕÅÍÁÑ ÓÈÅÍÁ ËÏÄÉÒÏ×ÁÎÉÑ Ú×ÕËÁ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ.\n" +msgid "SUN input (%s) does not support recording" +msgstr "Драйвер оцифровки SUN (%s): оцифровка не поддерживаетÑÑ" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 +#: app/drivers/sun-input.c:273 #, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÍÅÒ ÂÌÏËÁ (%s)" +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "Драйвер оцифровки SUN (%s): Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ñ‡Ð°Ñтота: %d Гц" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" -msgstr "õÓÔÒÏÊÓÔ×Ï ××ÏÄÁ (Ô.Å. '/dev/audio'):" +#: app/drivers/sun-input.c:304 +#, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "" +"Драйвер оцифровки SUN (%s): Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ð°Ñ Ñхема ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð²ÑƒÐºÐ° не " +"поддерживаетÑÑ" -#: app/drivers/sun-input.c:242 +#: app/drivers/sun-input.c:332 #, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: úÁÐÉÓØ ÎÅ×ÏÚÍÏÖÎÁ (%s)" +msgid "SUN input (%s): Cannot set block size" +msgstr "Драйвер оцифровки SUN (%s): невозможно уÑтановить размер блока" -#: app/envelope-box.c:878 +#: app/envelope-box.c:1279 app/gui.c:2589 msgid "Length" -msgstr "äÌÉÎÁ" +msgstr "Длина" -#: app/envelope-box.c:879 +#: app/envelope-box.c:1280 msgid "Current" -msgstr "ôÅËÕÝÉÊ" +msgstr "Текущий" -#: app/envelope-box.c:880 +#: app/envelope-box.c:1281 msgid "Offset" -msgstr "óÍÅÝÅÎÉÅ" +msgstr "Смещение" -#: app/envelope-box.c:881 +#: app/envelope-box.c:1282 msgid "Value" -msgstr "úÎÁÞÅÎÉÅ" +msgstr "Значение" -# ? -#: app/envelope-box.c:887 app/playlist.c:524 +#: app/envelope-box.c:1288 app/playlist.c:503 msgid "Insert" -msgstr "÷ÓÔÁ×ÉÔØ" +msgstr "Ð’Ñтавить" -# ? -#: app/envelope-box.c:893 app/playlist.c:533 +#: app/envelope-box.c:1294 app/playlist.c:509 msgid "Delete" -msgstr "õÄÁÌÉÔØ" +msgstr "Удалить" -#: app/envelope-box.c:985 +#: app/envelope-box.c:1369 msgid "" "Graphical\n" "Envelope\n" "Editor\n" -"only in\n" -"GNOME Version" +"only with\n" +"GooCanvas" msgstr "" -"çÒÁÆÉÞÅÓËÉÊ\n" -"ÒÅÄÁËÔÏÒ\n" -"ÏÇÉÂÁÀÝÅÊ\n" -"ÔÏÌØËÏ ×\n" -"GNOME-×ÅÒÓÉÉ" +"ГрафичеÑкий\n" +"редактор\n" +"огибающей\n" +"только Ñ\n" +"GooCanvas" -#: app/envelope-box.c:1000 +#: app/envelope-box.c:1384 msgid "Sustain" -msgstr "õÄÅÒÖÁÎÉÅ" +msgstr "Удержание" -#: app/envelope-box.c:1008 +#: app/envelope-box.c:1392 msgid "Point" -msgstr "ôÏÞËÁ" +msgstr "Точка" -#: app/envelope-box.c:1010 +#: app/envelope-box.c:1394 msgid "Loop" -msgstr "ãÉËÌ" +msgstr "Цикл" -#: app/envelope-box.c:1018 app/sample-editor.c:275 +#: app/envelope-box.c:1402 app/sample-editor.c:441 msgid "Start" -msgstr "îÁÞÁÌÏ" +msgstr "Ðачало" -#: app/envelope-box.c:1019 app/sample-editor.c:276 +#: app/envelope-box.c:1403 app/sample-editor.c:442 msgid "End" -msgstr "ëÏÎÅÃ" - -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "úÁÇÒÕÚÉÔØ ÍÏÄÕÌØ" +msgstr "Конец" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "óÏÈÒÁÎÉÔØ ÍÏÄÕÌØ" +#: app/file-operations.c:127 +#, c-format +msgid "" +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" +msgstr "" +"Файл Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ \"%s\" уже ÑущеÑтвует.\n" +"ПерезапиÑать его?" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "óÏÚÄÁÔØ WAV" +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "Ð’Ñе поддерживаемые типы" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "óÏÈÒÁÎÉÔØ ÐÅÓÎÀ" +#: app/file-operations.c:245 +msgid "All files" +msgstr "Ð’Ñе файлы" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "úÁÇÒÕÚÉÔØ ÓÜÍÐÌ" +#: app/file-operations.c:388 +msgid "File" +msgstr "Файл" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "óÏÈÒÁÎÉÔØ ÓÜÍÐÌ" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "КлаÑÑичеÑкий ST" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "úÁÇÒÕÚÉÔØ ÉÎÓÔÒÕÍÅÎÔ" +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "FT2" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "óÏÈÒÁÎÉÔØ ÉÎÓÔÒÕÍÅÎÔ" +#: app/gui-settings.c:293 +msgid "Mixed" +msgstr "Смешанный" -#: app/file-operations.c:175 -msgid "File" -msgstr "æÁÊÌ" - -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "ïÐÅÒÁÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ." +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ GUI" -#: app/gui-settings.c:100 +#: app/gui-settings.c:321 msgid "Scopes Frequency" -msgstr "þÁÓÔÏÔÁ ÏÓÃÉÌÌÏÇÒÁÆÁ" +msgstr "ЧаÑтота оÑциллографа" -#: app/gui-settings.c:103 +#: app/gui-settings.c:326 msgid "Tracker Frequency" -msgstr "þÁÓÔÏÔÁ ÔÒÜËÅÒÁ" - -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "ëÏÎÆÉÇÕÒÁÃÉÑ GUI" +msgstr "ЧаÑтота Ñ‚Ñ€Ñкера" -#: app/gui-settings.c:354 +#: app/gui-settings.c:331 msgid "Hexadecimal row numbers" -msgstr "ûÅÓÔÎÁÄÃÁÔÅÒÉÞÎÁÑ ÎÕÍÅÒÁÃÉÑ ÓÔÒÏË" +msgstr "ШеÑÑ‚Ð½Ð°Ð´Ñ†Ð°Ñ‚ÐµÑ€Ð¸Ñ‡Ð½Ð°Ñ Ð½ÑƒÐ¼ÐµÑ€Ð°Ñ†Ð¸Ñ Ñтрок" -#: app/gui-settings.c:361 +#: app/gui-settings.c:337 msgid "Use upper case letters for hex numbers" -msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÚÁÇÌÁ×ÎÙÅ ÂÕË×Ù ÄÌÑ ÛÅÓÔÎÁÄÃÁÔÅÒÉÞÎÙÈ ÞÉÓÅÌ" +msgstr "ИÑпользовать заглавные буквы Ð´Ð»Ñ ÑˆÐµÑтнадцатеричных чиÑел" + +#: app/gui-settings.c:343 +msgid "FT2-like volume column" +msgstr "Колонка громкоÑти как в FT2" + +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" +msgstr "ИÑпользовать Ñимволы в колонке громкоÑти" + +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" +msgstr "ОÑтавить букву \"m\" Ð´Ð»Ñ Ð¿Ð¾Ñ€Ñ‚Ð°Ð¼ÐµÐ½Ñ‚Ð¾ к ноте" + +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "ДеÑÑтичные чиÑла Ð´Ð»Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти" -#: app/gui-settings.c:368 +#: app/gui-settings.c:367 msgid "Asynchronous (IT-style) pattern editing" -msgstr "áÓÉÎÈÒÏÎÎÏÅ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ ÐÁÔÔÅÒÎÏ× (× ÓÔÉÌÅ IT)" +msgstr "ÐÑинхронное редактирование паттернов (в Ñтиле IT)" -#: app/gui-settings.c:375 +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "ÐŸÐ¾Ð»Ð¸Ñ„Ð¾Ð½Ð¸Ñ Ð² пробном режиме (без редактированиÑ)" + +#: app/gui-settings.c:379 +msgid "Record keyreleases" +msgstr "ЗапиÑывать отпуÑÐºÐ°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ" + +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" +msgstr "КомпенÑÐ°Ñ†Ð¸Ñ Ñоздаваемой человеком задержки [Ñ]" + +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "Ð¢Ð¾Ñ‡Ð½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸" + +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" +"ЗапиÑывать Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ/отпуÑÐºÐ°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ Ñ Ñ‚Ð¾Ñ‡Ð½Ð¾Ñтью до тика Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ " +"Ñффектов" + +#: app/gui-settings.c:406 msgid "Fxx command updates Tempo/BPM sliders" -msgstr "ëÏÍÁÎÄÁ Fxx ÉÚÍÅÎÑÅÔ ÉÎÄÉËÁÔÏÒÙ ÔÅÍÐÁ É BPM" +msgstr "Команда Fxx изменÑет индикаторы темпа и BPM" + +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "Эмулировать ошибку Ñффекта Rxx в FastTracker" -#: app/gui-settings.c:382 +#: app/gui-settings.c:418 msgid "Switch to tracker after loading/saving" -msgstr "ðÅÒÅËÌÀÞÁÔØÓÑ × ÏËÎÏ ÔÒÅËÅÒÁ ÐÏÓÌÅ ÓÏÈÒÁÎÅÎÉÑ ÉÌÉ ÚÁÇÒÕÚËÉ ÍÏÄÕÌÑ" +msgstr "ПереключатьÑÑ Ð² окно трекера поÑле ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ загрузки модулÑ" -#: app/gui-settings.c:389 +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "Ðвтодобавление раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²" + +#: app/gui-settings.c:430 msgid "Save window geometry on exit" -msgstr "úÁÐÏÍÉÎÁÔØ ÇÅÏÍÅÔÒÉÀ ÏËÎÁ ÐÒÉ ×ÙÈÏÄÅ" +msgstr "Запоминать геометрию окна при выходе" -#: app/gui-settings.c:396 +#: app/gui-settings.c:436 msgid "Use note name B instead of H" -msgstr "ïÂÏÚÎÁÞÁÔØ ÎÏÔÕ \"óÉ\" ËÁË B, Á ÎÅ H" +msgstr "Обозначать ноту \"Си\" как B, а не H" -#: app/gui-settings.c:403 +#: app/gui-settings.c:442 msgid "Save and restore permanent channels" -msgstr "óÏÈÒ. É ×ÏÓÓÔ. ÐÅÒÍÁÎÅÎÔÎÏÓÔØ ËÁÎÁÌÏ×" +msgstr "Запоминать ÑоÑтоÑние перманентноÑти каналов" + +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." +msgstr "" +"КлаÑÑичеÑкий ST: вкл/выкл режим Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ по Ctrl + B;\n" +"FT2: выделение Ñтрелками при нажатом SHIFT;\n" +"Смешанный: режим Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ÑÑ Ð¿Ñ€Ð¸ нажатии\n" +"SHIFT + Ð»ÑŽÐ±Ð°Ñ Ñтрелка, выключаетÑÑ Ð¿Ð» Ctrl + B\n" +".Ð’ режимах FT2 и Ñмешанном режим Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚Ð°ÐºÐ¶Ðµ\n" +"включаетÑÑ Ð¿Ð¾ Ctrl + B" + +#: app/gui-settings.c:456 +msgid "Selection mode" +msgstr "Режим выделениÑ" -#: app/gui-settings.c:417 +#: app/gui-settings.c:472 msgid "Scopes buffer size [MB]" -msgstr "òÁÚÍÅÒ ÂÕÆÅÒÁ ÏÓÃÉÌÌÏÇÒÁÆÏ× [íÂ]" +msgstr "Размер буфера оÑциллографов [Мб]" -#: app/gui-settings.c:436 +#: app/gui-settings.c:481 +msgid "Sample displays' mode" +msgstr "Режим Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñигналов" + +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "ОÑциллографы" + +#: app/gui-settings.c:486 +msgid "Editor" +msgstr "Редактор" + +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "Стробо" + +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "БыÑтрый, но не очень точный метод отриÑовки графиков Ñигналов" + +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "Мин/макÑ" + +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" +"Более правдоподобный метод отриÑовки графиков Ñигналов Ñ Ð±Ð¾Ð»ÑŒÑˆÐµÐ¹ нагрузкой " +"на ЦПУ" + +#: app/gui-settings.c:511 msgid "Track line format:" -msgstr "æÏÒÍÁÔ ÓÔÏÒËÉ ÔÒÜËÁ:" +msgstr "Формат Ñтроки Ñ‚Ñ€Ñка:" + +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ñхема" -#: app/gui-subs.c:32 app/gui.c:2369 +#: app/gui-settings.c:573 +msgid "Tracker colors configuration" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð¾Ð¹ Ñхемы Ñ‚Ñ€Ñкера" + +#: app/gui-subs.c:34 app/gui.c:2975 msgid "Ready." -msgstr "çÏÔÏ×Ï." +msgstr "Готово." -#: app/gui-subs.c:33 +#: app/gui-subs.c:35 msgid "Playing song..." -msgstr "éÇÒÁÀ ÐÅÓÎÀ..." +msgstr "Играю пеÑню..." -#: app/gui-subs.c:34 +#: app/gui-subs.c:36 msgid "Playing pattern..." -msgstr "éÇÒÁÀ ÐÁÔÔÅÒÎ..." +msgstr "Играю паттерн..." -#: app/gui-subs.c:35 +#: app/gui-subs.c:37 msgid "Loading module..." -msgstr "úÁÇÒÕÖÁÀ ÍÏÄÕÌØ..." +msgstr "Загружаю модуль..." -#: app/gui-subs.c:36 +#: app/gui-subs.c:38 msgid "Module loaded." -msgstr "íÏÄÕÌØ ÚÁÇÒÕÖÅÎ." +msgstr "Модуль загружен." -#: app/gui-subs.c:37 +#: app/gui-subs.c:39 msgid "Saving module..." -msgstr "óÏÈÒÁÎÑÀ ÍÏÄÕÌØ..." +msgstr "СохранÑÑŽ модуль..." -#: app/gui-subs.c:38 +#: app/gui-subs.c:40 msgid "Module saved." -msgstr "íÏÄÕÌØ ÓÏÈÒÁÎÅÎ." +msgstr "Модуль Ñохранен." -#: app/gui-subs.c:39 +#: app/gui-subs.c:41 msgid "Loading sample..." -msgstr "úÁÇÒÕÖÁÀ ÓÜÍÐÌ..." +msgstr "Загружаю ÑÑмпл..." -#: app/gui-subs.c:40 +#: app/gui-subs.c:42 msgid "Sample loaded." -msgstr "óÜÍÐÌ ÚÁÇÒÕÖÅÎ." +msgstr "СÑмпл загружен." -#: app/gui-subs.c:41 +#: app/gui-subs.c:43 msgid "Saving sample..." -msgstr "óÏÈÒÁÎÑÀ ÓÜÍÐÌ..." +msgstr "СохранÑÑŽ ÑÑмпл..." -#: app/gui-subs.c:42 +#: app/gui-subs.c:44 msgid "Sample saved." -msgstr "óÜÍÐÌ ÓÏÈÒÁÎÅÎ." +msgstr "СÑмпл Ñохранен." -#: app/gui-subs.c:43 +#: app/gui-subs.c:45 msgid "Loading instrument..." -msgstr "úÁÇÒÕÖÁÀ ÉÎÓÔÒÕÍÅÎÔ..." +msgstr "Загружаю инÑтрумент..." -#: app/gui-subs.c:44 +#: app/gui-subs.c:46 msgid "Instrument loaded." -msgstr "éÎÓÔÒÕÍÅÎÔ ÚÁÇÒÕÖÅÎ." +msgstr "ИнÑтрумент загружен." -#: app/gui-subs.c:45 +#: app/gui-subs.c:47 msgid "Saving instrument..." -msgstr "óÏÈÒÁÎÑÀ ÉÎÓÔÒÕÍÅÎÔ..." +msgstr "СохранÑÑŽ инÑтрумент..." -#: app/gui-subs.c:46 +#: app/gui-subs.c:48 msgid "Instrument saved." -msgstr "éÎÓÔÒÕÍÅÎÔ ÓÏÈÒÁÎÅÎ." +msgstr "ИнÑтрумент Ñохранен." -#: app/gui-subs.c:47 +#: app/gui-subs.c:49 msgid "Saving song..." -msgstr "óÏÈÒÁÎÑÀ ÐÅÓÎÀ..." +msgstr "СохранÑÑŽ пеÑню..." -#: app/gui-subs.c:48 +#: app/gui-subs.c:50 msgid "Song saved." -msgstr "ðÅÓÎÑ ÓÏÈÒÁÎÅÎÁ." +msgstr "ПеÑÐ½Ñ Ñохранена." -#: app/gui-subs.c:483 app/gui-subs.c:554 +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "Ошибка!" + +#: app/gui-subs.c:414 msgid "Question" -msgstr "÷ÏÐÒÏÓ" +msgstr "ВопроÑ" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "äÁ" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "îÅÔ" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "ïÔÍÅÎÁ" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" +"Ошибка Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ¸ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°:\n" +"%s\n" +"ВероÑтно, произошёл Ñбой файловой операции." -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" +"%s.\n" +"Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð²Ð¸Ð´Ð¶ÐµÑ‚Ð¾Ð² из файла %s!\n" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "ïÛÉÂËÁ!" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð³Ñ€Ð°Ñ„. интерфейÑа: виджет '%s' не найден в файле %s" -#: app/gui.c:140 -msgid "Tempo" -msgstr "ôÅÍÐ" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Предупреждение" + +#: app/gui-subs.h:225 +msgid "Information" +msgstr "Сообщение" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 +#: app/gui.c:251 app/gui.c:2666 msgid "Row highlighting configuration" -msgstr "îÁÓÔÒÏÊËÁ ÐÏÄÓ×ÅÔËÉ ÓÔÒÏË" +msgstr "ÐаÑтройка подÑветки Ñтрок" -#: app/gui.c:301 +#: app/gui.c:260 msgid "Highlight rows (major / minor):" -msgstr "ðÏÄÓ×ÅÞÉ×ÁÔØ ÓÔÒÏËÉ (ÇÌÁ×ÎÙÅ / ×ÔÏÒÏÓÔÅÐÅÎÎÙÅ):" +msgstr "ПодÑвечивать Ñтроки (главные / второÑтепенные):" + +#: app/gui.c:330 +msgid "" +msgstr "<без имени>" + +#: app/gui.c:451 +msgid "Saving module failed" +msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ" + +#: app/gui.c:535 +msgid "File output" +msgstr "ЗапиÑÑŒ в файл" + +#: app/gui.c:612 +msgid "Can't open file for writing" +msgstr "Ðевозможно открыть файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи." + +#: app/gui.c:618 +msgid "Can't change file ownership" +msgstr "Ðевозможно Ñменить владельца файла." -#: app/gui.c:478 +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "Ðевозможно выделить буфер Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи." + +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "При запиÑи в файл произошла ошибка" + +#: app/gui.c:691 msgid "" "Odd pattern rows contain data which will be lost after shrinking.\n" "Do you want to continue anyway?" msgstr "" -"îÅÞ£ÔÎÙÅ ÓÔÒÏËÉ ÓÏÄÅÒÖÁÔ ÄÁÎÎÙÅ, ËÏÔÏÒÙÅ ÐÒÉ ÓÖÁÔÉÉ ÂÕÄÕÔ ÐÏÔÅÒÑÎÙ.\n" -"÷Ó£ ÒÁ×ÎÏ ÐÒÏÄÏÌÖÉÔØ?" +"Ðечётные Ñтроки Ñодержат данные, которые при Ñжатии будут потерÑны.\n" +"Ð’ÑÑ‘ равно продолжить?" -#: app/gui.c:506 +#: app/gui.c:715 msgid "" "The pattern is too long for expanding.\n" "Some data at the end of the pattern will be lost.\n" "Do you want to continue anyway?" msgstr "" -"äÌÉÎÁ ÐÁÔÔÅÒÎÁ ÓÌÉÛËÏÍ ×ÅÌÉËÁ ÄÌÑ ×ÙÐÏÌÎÅÎÉÑ ÏÐÅÒÁÃÉÉ ÒÁÓÔÑÇÉ×ÁÎÉÑ.\n" -"þÁÓÔØ ÄÁÎÎÙÈ × ËÏÎÃÅ ÐÁÔÔÅÒÎÁ ÂÕÄÅÔ ÕÔÅÒÑÎÁ.\n" -"÷Ó£ ÒÁ×ÎÏ ÐÒÏÄÏÌÖÉÔØ?" - -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "æÁÊÌ ÎÅ ×ÙÂÒÁÎ." +"Длина паттерна Ñлишком велика Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ раÑÑ‚ÑгиваниÑ.\n" +"ЧаÑÑ‚ÑŒ данных в конце паттерна будет утерÑна.\n" +"Ð’ÑÑ‘ равно продолжить?" -#: app/gui.c:563 +#: app/gui.c:757 msgid "" "Are you sure you want to free the current project?\n" "All changes will be lost!" msgstr "" -"÷Ù Õ×ÅÒÅÎÙ, ÞÔÏ ÈÏÔÉÔÅ ÏÓ×ÏÂÏÄÉÔØ ÔÅËÕÝÉÊ ÐÒÏÅËÔ?\n" -"÷ÓÅ ÉÚÍÅÎÅÎÉÑ ÂÕÄÕÔ ÐÏÔÅÒÑÎÙ!" +"Ð’Ñ‹ уверены, что хотите оÑвободить текущий проект?\n" +"Ð’Ñе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ потерÑны!" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "÷Ù Õ×ÅÒÅÎÙ, ÞÔÏ ÈÏÔÉÔÅ ÐÅÒÅÚÁÐÉÓÁÔØ ÆÁÊÌ?" - -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "ïÛÉÂËÁ ÐÒÉ ÚÁÇÒÕÚËÅ ÐÁÔÔÅÒÎÁ." +#: app/gui.c:810 +#, c-format +msgid "Error when opening pattern file %s!" +msgstr "Ошибка при загрузке файла паттерна %s!" -#: app/gui.c:651 +#: app/gui.c:829 msgid "" "The length of the pattern being loaded doesn't match with that of current " "pattern in module.\n" "Do you want to change the current pattern length?" msgstr "" -"äÌÉÎÁ ÚÁÇÒÕÖÁÅÍÏÇÏ ÐÁÔÔÅÒÎÁ ÎÅ ÓÏ×ÐÁÄÁÅÔ Ó ÄÌÉÎÏÊ ÔÅËÕÝÅÇÏ.\n" -"èÏÔÉÔÅ ÌÉ ÷Ù ÓËÏÒÒÅËÔÉÒÏ×ÁÔØ ÄÌÉÎÕ ÔÅËÕÝÅÇÏ ÐÁÔÔÅÒÎÁ?" +"Длина загружаемого паттерна не Ñовпадает Ñ Ð´Ð»Ð¸Ð½Ð¾Ð¹ текущего.\n" +"Скорректировать длину текущего паттерна?" -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "úÁÐÕÓË SoundTracker" +#: app/gui.c:2124 +#, c-format +msgid "%s Startup" +msgstr "ЗапуÑк %s" -#: app/gui.c:1778 app/gui.c:1815 +#: app/gui.c:2178 app/gui.c:2206 msgid "Loading..." -msgstr "úÁÇÒÕÖÁÀÓØ..." +msgstr "ЗагружаюÑÑŒ..." -#: app/gui.c:1804 +#: app/gui.c:2195 msgid "Use SoundTracker!" -msgstr "÷ÐÅÒ£Ä!" +msgstr "Вперёд!" + +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"Ð’Ñ‹ уверены, что хотите завершить работу?\n" +"Ð’Ñе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ утерÑны!" + +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "Ðвтоопределение уÑилениÑ" + +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" +"Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ запущена процедура автоматичеÑкого определениÑ\n" +"наилучшего уÑилениÑ. Ðа Ñто может потребоватьÑÑ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ðµ времÑ." + +#: app/gui.c:2296 +msgid "Estimating..." +msgstr "Определение..." + +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "Модули FastTracker (*.xm)" + +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "Модули оригинального SoundTracker (*.mod)" + +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "Microsoft RIFF (*.wav)" + +#: app/gui.c:2400 +msgid "Extended pattern (*.xp)" +msgstr "РаÑширенный паттерн FastTracker (*.xp)" + +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" +msgstr "" +"%s.\n" +"ЗапуÑк %s прерван!\n" +"Сбой в файле опиÑÐ°Ð½Ð¸Ñ Ð³Ñ€Ð°Ñ„. интерфейÑа: %s\n" + +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Загрузить модуль" + +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" +msgstr "Загрузить выбранный модуль" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "úÁÇÒÕÚÉÔØ XM..." +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Сохранить модуль" + +#: app/gui.c:2434 +msgid "Save the current module" +msgstr "Сохранить текущий модуль" -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "óÏÈÒÁÎÉÔØ XM..." +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Создать WAV" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "úÁÐÉÓÁÔØ ÍÏÄÕÌØ ËÁË WAV..." +#: app/gui.c:2436 +msgid "Render the current module as WAV file" +msgstr "ЗапиÑать текущий модуль в формате WAV" -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "óÏÈÒÁÎÉÔØ ÐÅÓÎÀ ËÁË XM..." +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Сохранить XM без ÑÑмплов..." -#: app/gui.c:1872 +#: app/gui.c:2439 msgid "Load current pattern..." -msgstr "_úÁÇÒÕÚÉÔØ ÐÁÔÔÅÒÎ..." +msgstr "Загрузить паттерн..." -#: app/gui.c:1874 +#: app/gui.c:2440 msgid "Save current pattern..." -msgstr "_óÏÈÒÁÎÉÔØ ÔÅËÕÝÉÊ ÐÁÔÔÅÒÎ..." +msgstr "Сохранить текущий паттерн..." -#: app/gui.c:1944 +#: app/gui.c:2507 msgid "Play Song" -msgstr "éÇÒÁÔØ ÐÅÓÎÀ" +msgstr "Играть пеÑню" -#: app/gui.c:1956 +#: app/gui.c:2516 msgid "Play Pattern" -msgstr "éÇÒÁÔØ ÐÁÔÔÅÒÎ" +msgstr "Играть паттерн" -#: app/gui.c:1968 +#: app/gui.c:2525 +msgid "Play From Cursor" +msgstr "Играть от курÑора" + +#: app/gui.c:2534 +msgid "Play Block" +msgstr "Играть блок" + +#: app/gui.c:2543 msgid "Stop" -msgstr "óÔÏÐ" +msgstr "Стоп" -#: app/gui.c:1973 +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "Зацикливание воÑпроизведениÑ" + +#: app/gui.c:2562 msgid "Pat" -msgstr "ðÁÔÔ" +msgstr "Патт" -#: app/gui.c:1979 +#: app/gui.c:2568 msgid "Edited pattern" -msgstr "ôÅËÕÝÉÊ ÐÁÔÔÅÒÎ" +msgstr "Текущий паттерн" -#: app/gui.c:1992 +#: app/gui.c:2578 msgid "When enabled, browsing the playlist does not change the edited pattern." msgstr "" -"ëÏÇÄÁ ×ËÌÀÞÅÎÏ, ÎÁ×ÉÇÁÃÉÑ ÐÏ ÔÁÂÌÉÃÅ ÐÁÔÔÅÒÎÏ× ÎÅ ÐÒÉ×ÏÄÉÔ Ë ÉÚÍÅÎÅÎÉÀ " -"ÎÏÍÅÒÁ ÒÅÄÁËÔÉÒÕÅÍÏÇÏ ÐÁÔÔÅÒÎÁ" - -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "ëÏÌÉÞÅÓÔ×Ï ËÁÎÁÌÏ×:" +"Когда включено, Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ð¿Ð¾ таблице паттернов не приводит к изменению " +"номера редактируемого паттерна" -#: app/gui.c:2025 +#: app/gui.c:2583 msgid "Pattern Length" -msgstr "äÌÉÎÁ ÐÁÔÔÅÒÎÁ" +msgstr "Длина паттерна" + +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Темп" + +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "КоличеÑтво каналов:" -#: app/gui.c:2060 +#: app/gui.c:2632 msgid "Set preferred accidental type" -msgstr "÷ÙÂÏÒ ÚÎÁËÏ× ÁÌØÔÅÒÁÃÉÉ" +msgstr "Выбор знаков альтерации" -#: app/gui.c:2066 +#: app/gui.c:2638 msgid "Measure" -msgstr "òÁÚÍÅÒ" +msgstr "Размер" -#: app/gui.c:2067 +#: app/gui.c:2639 msgid "Enable row highlighting" -msgstr "÷ËÌÀÞÁÅÔ ÐÏÄÓ×ÅÔËÕ ÓÔÒÏË" +msgstr "Включает подÑветку Ñтрок" -#: app/gui.c:2093 +#: app/gui.c:2660 msgid "Other..." -msgstr "äÒÕÇÏÊ..." +msgstr "Другой..." -#: app/gui.c:2129 +#: app/gui.c:2687 msgid "Change effect column editing direction" -msgstr "÷ÙÂÏÒ ÎÁÐÒÁ×ÌÅÎÉÑ ÓÍÅÝÅÎÉÑ ÐÒÉ ÒÅÄÁËÔÉÒÏ×ÁÎÉÉ × ËÏÌÏÎËÅ ÜÆÆÅËÔÁ" +msgstr "Выбор Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ редактировании в колонке Ñффекта" -#: app/gui.c:2160 +#: app/gui.c:2715 app/gui.c:2820 msgid "Global amplification" -msgstr "ïÂÝÅÅ ÕÓÉÌÅÎÉÅ" +msgstr "Общее уÑиление" + +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "Ðажмите на индикатор Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð°Ð¸Ð»ÑƒÑ‡ÑˆÐµÐ³Ð¾ уÑилениÑ" -#: app/gui.c:2196 +#: app/gui.c:2740 msgid "Pitchbend" -msgstr "òÁÓÓÔÒÏÊËÁ ÔÏÎÁ" +msgstr "РаÑÑтройка тона" -#: app/gui.c:2204 +#: app/gui.c:2748 msgid "Reset pitchbend to its normal value" -msgstr "÷ÅÒÎÕÔØ ÒÁÓÓÔÒÏÊËÕ ÔÏÎÁ Ë ÎÏÒÍÁÌØÎÏÍÕ ÚÎÁÞÅÎÉÀ" +msgstr "Вернуть раÑÑтройку тона к нормальному значению" -#: app/gui.c:2216 +#: app/gui.c:2760 msgid "Editing" -msgstr "ðÒÁ×ËÁ" +msgstr "Правка" -#: app/gui.c:2223 +#: app/gui.c:2767 msgid "Octave" -msgstr "ïËÔÁ×Á" +msgstr "Октава" -#: app/gui.c:2232 +#: app/gui.c:2776 msgid "Jump" -msgstr "ïÔÓÔÕÐ" +msgstr "ОтÑтуп" -#: app/gui.c:2241 +#: app/gui.c:2785 msgid "Instr" -msgstr "éÎÓÔÒÕÍÅÎÔ" +msgstr "ИнÑтрумент" -#: app/gui.c:2257 +#: app/gui.c:2801 msgid "Sample" -msgstr "óÜÍÐÌ" +msgstr "СÑмпл" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "äÏÂÒÏ ÐÏÖÁÌÏ×ÁÔØ × SoundTracker!" +#: app/gui.c:2827 +msgid "dB" +msgstr "дБ" -#: app/gui.c:2323 +#: app/gui.c:2866 +#, c-format +msgid "Welcome to %s!" +msgstr "Добро пожаловать в %s" + +#: app/gui.c:2883 app/sample-editor.c:2238 msgid "%M:%S" msgstr "%M:%S" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "óÐÁÄ" - -# here a bit tricky... -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "÷ÉÂÒÁÔÏ: óËÏÒÏÓÔØ" - -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "çÌÕÂÉÎÁ" - -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "îÁÒÁÓÔÁÎÉÅ" - -#: app/instrument-editor.c:163 app/instrument-editor.c:186 +#: app/instrument-editor.c:184 app/instrument-editor.c:216 msgid "Can't open file." -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ." +msgstr "Ðевозможно открыть файл." + +#: app/instrument-editor.c:209 +msgid "Saving instrument failed." +msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð½Ñтрумента." -#: app/instrument-editor.c:229 +#: app/instrument-editor.c:232 +msgid "Clear current instrument?" +msgstr "ОчиÑтить текущий инÑтрумент?" + +#: app/instrument-editor.c:252 msgid "Sine" -msgstr "óÉÎÕÓÏÉÄÁ" +msgstr "СинуÑоида" -#: app/instrument-editor.c:229 +#: app/instrument-editor.c:252 msgid "Square" -msgstr "ðÒÑÍÏÕÇÏÌØÎÉË" +msgstr "ПрÑмоугольник" -#: app/instrument-editor.c:229 +#: app/instrument-editor.c:252 msgid "Saw Down" -msgstr "ðÉÌÁ (×ÎÉÚ)" +msgstr "Пила (вниз)" -#: app/instrument-editor.c:229 +#: app/instrument-editor.c:252 msgid "Saw Up" -msgstr "ðÉÌÁ (××ÅÒÈ)" +msgstr "Пила (вверх)" + +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" +msgstr "ИнÑтрументы FastTracker (*.xi)" -#: app/instrument-editor.c:233 +#: app/instrument-editor.c:259 msgid "Instrument Editor" -msgstr "òÅÄÁËÔÏÒ ÉÎÓÔÒÕÍÅÎÔÏ×" +msgstr "Редактор инÑтрументов" -#: app/instrument-editor.c:242 +#: app/instrument-editor.c:268 msgid "Volume envelope" -msgstr "ïÇÉÂÁÀÝÁÑ ÇÒÏÍËÏÓÔÉ" +msgstr "ÐžÐ³Ð¸Ð±Ð°ÑŽÑ‰Ð°Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти" -#: app/instrument-editor.c:250 +#: app/instrument-editor.c:276 msgid "Panning envelope" -msgstr "ïÇÉÂÁÀÝÁÑ ÐÁÎÏÒÁÍÉÒÏ×ÁÎÉÑ" +msgstr "ÐžÐ³Ð¸Ð±Ð°ÑŽÑ‰Ð°Ñ Ð¿Ð°Ð½Ð¾Ñ€Ð°Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ" + +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Загрузить инÑтрумент" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "úÁÇÒÕÚÉÔØ ÉÎÓÔÒÕÍÅÎÔ..." +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "Загрузить выбранный инÑтрумент на текущую позицию" -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "óÏÈÒÁÎÉÔØ ÉÎÓÔÒÕÍÅÎÔ..." +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Сохранить инÑтрумент" + +#: app/instrument-editor.c:297 +msgid "Save the current instrument" +msgstr "Сохранить текущий инÑтрумент" -#: app/instrument-editor.c:271 +#: app/instrument-editor.c:299 msgid "Load XI" -msgstr "úÁÇÒÕÚÉÔØ XI" +msgstr "Загрузить XI" -#: app/instrument-editor.c:277 +#: app/instrument-editor.c:305 msgid "Save XI" -msgstr "óÏÈÒÁÎÉÔØ XI" +msgstr "Сохранить XI" + +#: app/instrument-editor.c:320 +msgid "Volume Fadeout" +msgstr "ÐараÑтание громкоÑти" + +#: app/instrument-editor.c:344 +msgid "Vibrato:" +msgstr "Вибрато:" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "ôÉÐ ×ÉÂÒÁÔÏ:" +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "Тип" -#: app/instrument-editor.c:368 +#: app/instrument-editor.c:356 +msgid "Speed" +msgstr "СкороÑÑ‚ÑŒ" + +#: app/instrument-editor.c:359 +msgid "Depth" +msgstr "Глубина" + +#: app/instrument-editor.c:361 +msgid "Sweep" +msgstr "ÐараÑтание" + +#: app/instrument-editor.c:413 msgid "Note:" -msgstr "îÏÔÁ:" +msgstr "Ðота:" -#: app/instrument-editor.c:386 +#: app/instrument-editor.c:431 msgid "Initialize" -msgstr "éÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ" +msgstr "Инициализировать" -#: app/keys.c:57 +#: app/keys.c:58 msgid "" -msgstr "<ÎÉÞÅÇÏ>" +msgstr "<ничего>" + +#: app/keys.c:134 +msgid "KOFF" +msgstr "Отп" -#: app/keys.c:129 +#: app/keys.c:134 msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "ëÌÁ×ÉÛÁ, ×ÓÔÁ×ÌÑÀÝÁÑ ËÏÍÁÎÄÕ ÏÔÐÕÓËÁÎÉÑ ÎÏÔÙ × ÍÏÄÕÌÉ FastTracker." +msgstr "Клавиша, вÑтавлÑÑŽÑ‰Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ отпуÑÐºÐ°Ð½Ð¸Ñ Ð½Ð¾Ñ‚Ñ‹ в модули FastTracker." -#: app/keys.c:131 +#: app/keys.c:136 +msgid "JMP+" +msgstr "ОтÑÑ‚+" + +#: app/keys.c:136 msgid "The key that increases \"jump\" value." -msgstr "ëÌÁ×ÉÛÁ, Õ×ÅÌÉÞÉ×ÁÀÝÁÑ ÚÎÁÞÅÎÉÅ ÏÔÓÔÕÐÁ" +msgstr "Клавиша, ÑƒÐ²ÐµÐ»Ð¸Ñ‡Ð¸Ð²Ð°ÑŽÑ‰Ð°Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ отÑтупа" + +#: app/keys.c:138 +msgid "JMP-" +msgstr "ОтÑÑ‚-" -#: app/keys.c:133 +#: app/keys.c:138 msgid "The key that decreases \"jump\" value." -msgstr "ëÌÁ×ÉÛÁ, ÕÍÅÎØÛÁÀÝÁÑ ÚÎÁÞÅÎÉÅ ÏÔÓÔÕÐÁ" +msgstr "Клавиша, ÑƒÐ¼ÐµÐ½ÑŒÑˆÐ°ÑŽÑ‰Ð°Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ отÑтупа" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "ëÌÁ×ÉÛÉ ×ÅÒÈÎÅÊ ÏËÔÁ×Ù..." +#: app/keys.c:140 +msgid "PlayMod" +msgstr "ИгрМод" + +#: app/keys.c:140 +msgid "Play module." +msgstr "ВоÑпроизвеÑти модуль." + +#: app/keys.c:142 +msgid "RecMod" +msgstr "ЗапМод" + +#: app/keys.c:142 +msgid "Play module + recording." +msgstr "ВоÑпроизвеÑти модуль + запиÑÑŒ" + +#: app/keys.c:144 +msgid "PlayPat" +msgstr "ИгрПат" + +#: app/keys.c:144 +msgid "Play pattern." +msgstr "ВоÑпроизвеÑти паттерн." #: app/keys.c:146 +msgid "RecPat" +msgstr "ЗапПат" + +#: app/keys.c:146 +msgid "Play pattern + recording." +msgstr "ВоÑпроизвеÑти паттерн + запиÑÑŒ." + +#: app/keys.c:148 +msgid "PlayCur" +msgstr "ИгрКур" + +#: app/keys.c:148 +msgid "Play module from cursor." +msgstr "ВоÑпроизвеÑти модуль от курÑора" + +#: app/keys.c:150 +msgid "RecCur" +msgstr "ЗапКур" + +#: app/keys.c:150 +msgid "Play module from cursor + recording." +msgstr "ВоÑпроизвеÑти модуль от курÑора + запиÑÑŒ" + +#: app/keys.c:152 +msgid "PlayRow" +msgstr "ИгрСтр" + +#: app/keys.c:152 +msgid "Play current pattern row." +msgstr "ВоÑпроизвеÑти текущую Ñтроку паттерна." + +#: app/keys.c:154 +msgid "PlayBlk" +msgstr "ИгрБлк" + +#: app/keys.c:154 +msgid "Play selected block." +msgstr "ВоÑпроизвеÑти выделенный блок." + +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Клавиши верхней октавы..." + +#: app/keys.c:167 msgid "" "These are the keys on the upper half of the keyboard. The c key is normally " "the key to the right of the TAB key. The rest of the keys should be ordered " "in a piano keyboard fashion, including the number keys row above." msgstr "" -"üÔÏ ËÌÁ×ÉÛÉ ×ÅÒÈÎÅÊ ÐÏÌÏ×ÉÎÙ ËÌÁ×ÉÁÔÕÒÙ. ëÌÁ×ÉÛÁ `ÄÏ' ÏÂÙÞÎÏ ÓÐÒÁ×Á ÏÔ Tab. " -"ïÓÔÁÌØÎÙÅ ËÌÁ×ÉÛÉ ÒÁÓÐÏÌÏÖÅÎÙ ÐÏÄÏÂÎÏ ËÌÁ×ÉÁÔÕÒÅ ÐÉÁÎÉÎÏ, ×ËÌÀÞÁÑ ËÌÁ×ÉÛÉ Ó " -"ÃÉÆÒÁÍÉ × ×ÅÒÈÎÅÍ ÒÑÄÕ." +"Это клавиши верхней половины клавиатуры. Клавиша `до' обычно Ñправа от Tab. " +"ОÑтальные клавиши раÑположены подобно клавиатуре пианино, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Ñ " +"цифрами в верхнем Ñ€Ñду." -#: app/keys.c:152 +#: app/keys.c:172 msgid "Lower Octave Keys..." -msgstr "ëÌÁ×ÉÛÉ ÎÉÖÎÅÊ ÏËÔÁ×Ù..." +msgstr "Клавиши нижней октавы..." -#: app/keys.c:153 +#: app/keys.c:173 msgid "" "These are the keys on the lower half of the keyboard. The c key is normally " "the first character key to the right of the left Shift key. The rest of the " "keys should be ordered in a piano keyboard fashion, including the row above." msgstr "" -"üÔÏ ËÌÁ×ÉÛÉ ÎÉÖÎÅÊ ÐÏÌÏ×ÉÎÙ ËÌÁ×ÉÁÔÕÒÙ. ëÌÁ×ÉÛÁ `ÄÏ' ÏÂÙÞÎÏ ÓÐÒÁ×Á ÏÔ " -"LShift. ïÓÔÁÌØÎÙÅ ËÌÁ×ÉÛÉ ÒÁÓÐÏÌÏÖÅÎÙ ÐÏÄÏÂÎÏ ËÌÁ×ÉÁÔÕÒÅ ÐÉÁÎÉÎÏ, ×ËÌÀÞÁÑ " -"ËÌÁ×ÉÛÉ ÓÒÅÄÎÅÇÏ ÂÕË×ÅÎÎÏÇÏ ÒÑÄÁ." +"Это клавиши нижней половины клавиатуры. Клавиша `до' обычно Ñправа от " +"LShift. ОÑтальные клавиши раÑположены подобно клавиатуре пианино, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ " +"клавиши Ñреднего буквенного Ñ€Ñда." -#: app/keys.c:159 +#: app/keys.c:178 msgid "Other Keys..." -msgstr "ðÒÏÞÉÅ ËÌÁ×ÉÛÉ..." +msgstr "Прочие клавиши..." -#: app/keys.c:160 +#: app/keys.c:179 msgid "Various other keys" -msgstr "ëÌÁ×ÉÛÉ, ×ÙÐÏÌÎÑÀÝÉÅ ÐÒÏÞÉÅ ÆÕÎËÃÉÉ" +msgstr "Клавиши, выполнÑющие прочие функции" -#: app/keys.c:513 +#: app/keys.c:578 msgid "Function" -msgstr "æÕÎËÃÉÑ" +msgstr "ФункциÑ" -#: app/keys.c:514 +#: app/keys.c:579 msgid "Assignment" -msgstr "îÁÚÎÁÞÅÎÎÁÑ ËÌÁ×ÉÛÁ" +msgstr "ÐÐ°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ°" -#: app/keys.c:523 app/keys.c:526 +#: app/keys.c:588 msgid "Keyboard Configuration" -msgstr "ëÏÎÆÉÇÕÒÁÃÉÑ ËÌÁ×ÉÁÔÕÒÙ" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹" -#: app/keys.c:575 +#: app/keys.c:630 msgid "Key Group Explanation" -msgstr "ðÏÑÓÎÅÎÉÅ ÇÒÕÐÐ ËÌÁ×ÉÁÔÕÒÙ" +msgstr "ПоÑÑнение групп клавиатуры" -#: app/keys.c:592 +#: app/keys.c:643 msgid "Key Explanation" -msgstr "ðÏÑÓÎÅÎÉÅ ËÌÁ×ÉÛ" +msgstr "ПоÑÑнение клавиш" -#: app/keys.c:623 +#: app/keys.c:668 msgid "Modifiers:" -msgstr "íÏÄÉÆÉËÁÔÏÒÙ:" +msgstr "Модификаторы:" -#: app/keys.c:649 +#: app/keys.c:687 msgid "Learn selected key" -msgstr "úÁÐÏÍÎÉÔØ ×ÙÂÒÁÎÎÕÀ ËÌÁ×ÉÛÕ" +msgstr "Запомнить выбранную клавишу" -#: app/keys.c:655 +#: app/keys.c:692 msgid "Learn all keys" -msgstr "úÁÐÏÍÎÉÔØ ×ÓÅ ËÌÁ×ÉÛÉ" +msgstr "Запомнить вÑе клавиши" -#: app/keys.c:661 +#: app/keys.c:702 msgid "" "Please press the desired key combination!\n" "Click into left list to cancel" msgstr "" -"ðÏÖÁÌÕÊÓÔÁ, ÎÁÖÍÉÔÅ ÖÅÌÁÅÍÕÀ ËÏÍÂÉÎÁÃÉÀ ËÌÁ×ÉÛ!\n" -"ý£ÌËÎÉÔÅ ÐÏ ÓÐÉÓËÕ ÓÌÅ×Á ÄÌÑ ÏÔÍÅÎÙ" - -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "ïë" - -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "ðÒÉÍÅÎÉÔØ" - -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." -msgstr "" -"æÁÊÌ ËÏÎÆÉÇÕÒÁÃÉÉ ËÌÁ×ÉÁÔÕÒÙ ÐÏ×ÒÅÖÄÅÎ.\n" -"ðÏÖÁÌÕÊÓÔÁ, ÉÓÐÏÌØÚÕÊÔÅ ÄÉÁÌÏÇ \"ëÏÎÆÉÇÕÒÁÃÉÑ ËÌÁ×ÉÁÔÕÒÙ\"." +"ПожалуйÑта, нажмите желаемую комбинацию клавиш!\n" +"Щёлкните по ÑпиÑку Ñлева Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹" -#: app/keys.c:1000 +#: app/keys.c:948 #, c-format msgid "CH%02d" -msgstr "CH%02d" +msgstr "Кан%02d" -#: app/keys.c:1001 +#: app/keys.c:949 #, c-format msgid "Fast jump to channel %d" -msgstr "âÙÓÔÒÙÊ ÐÅÒÅÈÏÄ Ë ËÁÎÁÌÕ ÎÏÍÅÒ %d" +msgstr "БыÑтрый переход к каналу номер %d" -#: app/keys.c:1076 +#: app/keys.c:1028 msgid "" "Automatic key configuration unsuccessful.\n" "Please use the Keyboard Configuration dialog\n" "in the Settings menu." msgstr "" -"á×ÔÏËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÅ ËÌÁ×ÉÛ ÎÅ ÕÄÁÌÏÓØ.\n" -"éÓÐÏÌØÚÕÊÔÅ ÄÉÁÌÏÇ \"ëÏÎÆÉÇÕÒÁÃÉÑ ËÌÁ×ÉÁÔÕÒÙ\"\n" -"× ÍÅÎÀ \"îÁÓÔÒÏÊËÉ\", ÐÏÖÁÌÕÊÓÔÁ." +"Ðвтоконфигурирование клавиш не удалоÑÑŒ.\n" +"ИÑпользуйте диалог \"ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹\"\n" +"в меню \"ÐаÑтройки\", пожалуйÑта." -#: app/menubar.c:140 +#: app/menubar.c:115 +#, c-format msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" msgstr "" -"÷Ù Õ×ÅÒÅÎÙ × ÔÏÍ, ÞÔÏ ÄÅÌÁÅÔÅ?\n" -"÷ÓÅ ÉÚÍÅÎÅÎÉÑ ÂÕÄÕÔ ÕÔÅÒÑÎÙ!" +"%s ÑвлÑетÑÑ Ñвободным программным обеÑпечением; вы можете раÑпроÑтранÑÑ‚ÑŒ и/" +"или изменÑÑ‚ÑŒ его ÑоглаÑно уÑловиÑм Стандартной ОбщеÑтвенной Лицензии GNU " +"(GNU GPL) верÑии 2, либо (на ваше уÑмотрение) любой более поздней верÑии.\n" +"\n" +"%s раÑпроÑтранÑетÑÑ Ð² надежде, что она будет полезной, но БЕЗ КÐКИХ БЫ ТО ÐИ " +"БЫЛО ГÐРÐÐТИЙÐЫХ ОБЯЗÐТЕЛЬСТВ; даже без коÑвенных гарантийных обÑзательÑтв, " +"ÑвÑзанных Ñ ÐŸÐžÐ¢Ð Ð•Ð‘Ð˜Ð¢Ð•Ð›Ð¬Ð¡ÐšÐ˜ÐœÐ˜ СВОЙСТВÐМИ и ПРИГОДÐОСТЬЮ ДЛЯ ОПРЕДЕЛÐÐÐЫХ " +"ЦЕЛЕЙ. Ð”Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñтей Ñмотрите Стандартную ОбщеÑтвенную Лицензию GNU.\n" +"Ð’Ñ‹ должны были получить копию Стандартной ОбщеÑтвенной Лицензии GNU вмеÑте Ñ " +"программой %s. ЕÑли Ñто не так, обратитеÑÑŒ по адреÑу: http://www.gnu.org/" +"licenses/" -#: app/menubar.c:162 +#: app/menubar.c:126 msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." msgstr "" -"÷Ù Õ×ÅÒÅÎÙ, ÞÔÏ ÈÏÔÉÔÅ ÚÁ×ÅÒÛÉÔØ ÒÁÂÏÔÕ?\n" -"÷ÓÅ ÉÚÍÅÎÅÎÉÑ ÂÕÄÕÔ ÕÔÅÒÑÎÙ!" - -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_ïÔËÒÙÔØ..." - -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "_óÏÈÒÁÎÉÔØ ËÁË..." - -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "óÏÈÒÁÎÉÔØ _ÍÏÄÕÌØ ËÁË WAV..." - -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "óÏÈÒÁÎÉÔØ XM ÂÅÚ ÓÜÍÐÌÏ×..." - -#: app/menubar.c:434 -msgid "_Quit" -msgstr "_÷ÙÈÏÄ" - -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "ïÞÉÓÔÉÔØ _×ÓÅ" - -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "ïÞÉÓÔÉÔØ ÔÏÌØËÏ _ÐÁÔÔÅÒÎÙ" - -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_ïÐÔÉÍÉÚÉÒÏ×ÁÔØ ÍÏÄÕÌØ" - -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "÷ÙÒ_ÅÚÁÔØ" - -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_ëÏÐÉÒÏ×ÁÔØ" - -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "_÷ÓÔÁ×ÉÔØ" - -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_óÔÅÒÅÔØ ÎÏÔÙ" - -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "÷Ó_ÔÁ×ÉÔØ ÔÒÅË" - -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "_õÄÁÌÉÔØ ÔÒÅË" - -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "á×ÔÏÕ×ÅÌÉÞÅÎÉÅ ÐÁÒÁÍÅÔÒÁ ËÏÍÁÎÄÙ" - -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "á×ÔÏÕÍÅÎØÛÅÎÉÅ ÐÁÒÁÍÅÔÒÁ ËÏÍÁÎÄÙ" - -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "_òÅÖÉÍ ×ÙÄÅÌÅÎÉÑ" - -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "ó_ÎÑÔØ ×ÙÄÅÌÅÎÉÅ" - -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "_üÆÆÅËÔÙ ÉÎÔÅÒÐÏÌÑÃÉÉ" - -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "ôÒÁÎÓÐÏÎÉÒÏ×ÁÔØ ÎÁ ÐÏÌÔÏÎÁ ××ÅÒÈ" - -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "ôÒÁÎÓÐÏÎÉÒÏ×ÁÔØ ÎÁ ÐÏÌÔÏÎÁ ×ÎÉÚ" - -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "ôÒÁÎÓÐÏÎÉÒÏ×ÁÔØ ÎÁ ÏËÔÁ×Õ ××ÅÒÈ" - -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "ôÒÁÎÓÐÏÎÉÒÏ×ÁÔØ ÎÁ ÏËÔÁ×Õ ×ÎÉÚ" - -#: app/menubar.c:526 -msgid "P_aste" -msgstr "÷_ÓÔÁ×ÉÔØ" - -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "òÅÖÉÍ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ _Jazz" - -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "_úÁÐÉÓÙ×ÁÔØ ÏÔÐÕÓËÁÎÉÑ ËÌÁ×ÉÛ" - -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "_ôÒÁÎÓÐÏÚÉÃÉÑ" - -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "ð_ÁÔÔÅÒÎ" - -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "ôÒ_ÜË" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev (Юрий ÐлÑев)\n" +"\n" +"\n" +"Включает код программы OpenCP, напиÑанной Niklas Beisert и Tammo Hinrichs." -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_÷ÙÄÅÌÅÎÉÅ" +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"Ð’Ñ‹ уверены в том, что делаете?\n" +"Ð’Ñе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ утерÑны!" -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_îÁÊÔÉ Ó×ÏÂÏÄÎÙÊ ÐÁÔÔÅÒÎ" +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "" +"ЦелочиÑленный микшер, без интерполÑции и фильтров, длина ÑÑмплов не более 1Мб" -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_ëÏÐÉÒÏ×ÁÔØ ÔÅËÕÝÉÊ ÐÁÔÔÅÒÎ × Ó×ÏÂÏÄÎÙÊ" +#: app/mixers/kbfloat.c:838 +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" +"Ð’Ñ‹ÑококачеÑтвенный микшер Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой, фильтрами и без Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ " +"длины ÑÑмплов" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "_ïÞÉÓÔÉÔØ Ó×ÏÂÏÄÎÙÅ ÐÁÔÔÅÒÎÙ" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "Однократный" -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "_õÐÁËÏ×ÁÔØ ÐÁÔÔÅÒÎÙ" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Cyclic" +msgstr "ПериодичеÑкий" -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "_óÏÈÒÁÎÉÔØ ÔÅËÕÝÉÊ ÐÁÔÔÅÒÎ" +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "Ручной" -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "_úÁÇÒÕÚÉÔØ ÐÁÔÔÅÒÎ" +#: app/module-info.c:64 +msgid "Coupled" +msgstr "СвÑзанный" -#: app/menubar.c:599 -msgid "Sh_rink Current Pattern" -msgstr "ó_ÖÁÔØ ÔÅËÕÝÉÊ ÐÁÔÔÅÒÎ" +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "%sИнÑ. %i, Смп. %i" -#: app/menubar.c:601 -msgid "_Expand Current Pattern" -msgstr "ò_ÁÓÔÑÎÕÔØ ÔÅËÕÝÉÊ ÐÁÔÔÅÒÎ" +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "И%i, С%i" -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" -msgstr "éÚÍÅÎÉÔØ ÓÏÓÔÏÑÎÉÅ _ÐÅÒÍÁÎÅÎÔÎÏÓÔÉ ËÁÎÁÌÁ" +#: app/module-info.c:481 +msgid "Period" +msgstr "Период" -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" -msgstr "éÚÍÅÎÉÔØ ÓÏÓÔÏÑÎÉÅ ÐÅÒÍÁÎÅÎÔÎÏÓÔÉ _×ÓÅÈ ËÁÎÁÌÏ×" +#: app/module-info.c:484 +msgid "s" +msgstr "Ñ" -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_úÁÇÒÕÚÉÔØ XI..." +#: app/module-info.c:499 +msgid "Mode" +msgstr "Режим" -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_óÏÈÒÁÎÉÔØ XI..." +#: app/module-info.c:517 app/module-info.c:844 +msgid "Note" +msgstr "Ðота" -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_ïÞÉÓÔÉÔØ ÔÅËÕÝÉÊ" +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "Микшировать ÑÑмпл Ñам Ñ Ñобой — беÑÑмыÑленное дело..." -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_õÄÁÌÉÔØ ÎÅÉÓÐÏÌØÚÕÅÍÙÅ ÉÎÓÔÒÕÍÅÎÔÙ" +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Ðазвание инÑтрумента" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "_ðÒÏËÒÕÔËÁ ÂÅÚ ÍÅÒÃÁÎÉÑ" +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#Ñмпл" -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "ðÒÅÄ_ÙÄÕÝÉÊ ÛÒÉÆÔ" +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Ðазвание ÑÑмпла" -#: app/menubar.c:642 -msgid "_Next font" -msgstr "óÌ_ÅÄÕÀÝÉÊ ÛÒÉÆÔ" +#: app/module-info.c:665 +msgid "Linear" +msgstr "Линейно" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" -msgstr "éÚÍÅÎÉÔØ ÔÉÐ ÚÎÁËÏ× _ÁÌØÔÅÒÁÃÉÉ" +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" -msgstr "éÚÍÅÎ. ÎÁÐÒ. _ÓÍÅÝÅÎÉÑ × ËÏÌÏÎËÅ ÜÆÆÅËÔÁ" +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ модуле" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "_ïÓÃÉÌÌÏÇÒÁÆÙ" +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Ðазвание пеÑни:" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_ôÒÜËÅÒ" +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "ЧаÑтоты:" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "_ëÏÎÆÉÇÕÒÁÃÉÑ ËÌÁ×ÉÁÔÕÒÙ..." +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "Режим ProTracker" -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "ëÏÎÆÉÇÕÒÁÃÉÑ _ÁÕÄÉÏ..." +#: app/module-info.c:756 +msgid "Extended Instrument/Sample Editor" +msgstr "РаÑширенный редактор инÑтрументов и ÑÑмплов" -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "ëÏÎ_ÆÉÇÕÒÁÃÉÑ GUI..." +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "ИнÑ. 1" -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "ëÏÎ_ÆÉÇÕÒÁÃÉÑ MIDI..." +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "Смп. 1" -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "á×ÔÏÓÏËÒÙÔÉÅ ÚÁÓÔÁ×ËÉ" +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "ИнÑ. 2" -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_óÏÈÒÁÎÉÔØ ÎÁÓÔÒÏÊËÉ" +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "Смп. 2" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "óÏÈÒÁÎÑÔØ ÎÁÓÔÒÏÊËÉ ÐÒÉ _×ÙÈÏÄÅ" +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "И1 => И2" -#: app/menubar.c:690 -msgid "_About..." -msgstr "_ï ÐÒÏÇÒÁÍÍÅ..." +#: app/module-info.c:782 +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Копировать инÑтрумент 1 в инÑтрумент 2" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "_ðÏÄÓËÁÚËÉ..." +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "И1 <=> И2" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "_üÆÆÅËÔÙ XM..." +#: app/module-info.c:787 +msgid "Exchange Instruments 1 and 2" +msgstr "ОбменÑÑ‚ÑŒ меÑтами инÑтрументы 1 и 2" -#: app/menubar.c:704 -msgid "_File" -msgstr "_æÁÊÌ" +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "С1 => C2" -#: app/menubar.c:705 -msgid "_Module" -msgstr "_íÏÄÕÌØ" +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "Копировать ÑÑмпл 1 в ÑÑмпл 2" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_ðÒÁ×ËÁ" +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "С1 <=> C2" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_éÎÓÔÒÕÍÅÎÔ" +#: app/module-info.c:797 +msgid "Exchange Samples 1 and 2" +msgstr "ОбменÑÑ‚ÑŒ меÑтами ÑÑмплы 1 и 2" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_îÁÓÔÒÏÊËÉ" +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "Ð‘Ð°Ð»Ð°Ð½Ñ Ð¼Ð¸ÐºÑˆÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ" -#: app/menubar.c:711 -msgid "_Help" -msgstr "_óÐÒÁ×ËÁ" +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "И1, С0" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" -msgstr "ãÅÌÏÞÉÓÌÅÎÎÙÊ ÍÉËÛÅÒ, ÂÅÚ ÉÎÔÅÒÐÏÌÑÃÉÉ, ÄÌÉÎÁ ÓÜÍÐÌÏ× ÎÅ ÂÏÌÅÅ 1íÂ" +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "Ðота Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð². проÑлушиваниÑ" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "îÁÚ×ÁÎÉÅ ÉÎÓÔÒÕÍÅÎÔÁ" +#: app/module-info.c:863 +msgid "Preview" +msgstr "ПроÑлуш." -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#ÓÍÐÌ" +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "ПроÑлушать Ñмикшированный ÑÑмпл без Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ в модуле" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "îÁÚ×ÁÎÉÅ ÓÜÍÐÌÁ" +#: app/module-info.c:868 +msgid "Mix!" +msgstr "Микш." -#: app/module-info.c:117 -msgid "Linear" -msgstr "ìÉÎÅÊÎÏ" +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" +"Микшировать ÑÑмпл 1 инÑтрумента 1 Ñ ÑÑмплом 2 инÑтрумента 2 Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ " +"баланÑом" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "ÐаÑтройка: " -#: app/module-info.c:124 -msgid "Module Info" -msgstr "éÎÆÏÒÍÁÃÉÑ Ï ÍÏÄÕÌÅ" +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "ПодÑтройка" -#: app/module-info.c:164 -msgid "Songname:" -msgstr "îÁÚ×ÁÎÉÅ ÐÅÓÎÉ:" +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "Отн. нота" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "þÁÓÔÏÔÙ:" +#: app/module-info.c:898 +msgid "Reference: " +msgstr "Эталон: " -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "òÅÖÉÍ ProTracker" - -#: app/module-info.c:395 +#: app/module-info.c:1136 #, c-format msgid "" "Unused patterns: %d (used: %d)\n" @@ -1269,858 +1889,1538 @@ "\n" "Clear unused and reorder playlist?\n" msgstr "" -"îÅÉÓÐÏÌØÚÕÅÍÙÈ ÐÁÔÔÅÒÎÏ×: %d (ÉÓÐÏÌØÚÕÅÍÙÈ: %d)\n" -"îÅÉÓÐÏÌØÚÕÅÍÙÈ ÉÎÓÔÒÕÍÅÎÔÏ×: %d (ÉÓÐÏÌØÚÕÅÍÙÈ: %d)\n" +"ÐеиÑпользуемых паттернов: %d (иÑпользуемых: %d)\n" +"ÐеиÑпользуемых инÑтрументов: %d (иÑпользуемых: %d)\n" "\n" -"ïÞÉÓÔÉÔØ ÎÅÉÓÐÏÌØÚÕÅÍÙÅ É ÓËÏÒÒÅËÔÉÒÏ×ÁÔØ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÐÁÔÔÅÒÎÏ×?\n" +"ОчиÑтить неиÑпользуемые и Ñкорректировать поÑледовательноÑÑ‚ÑŒ паттернов?\n" -#: app/playlist.c:526 +#: app/playlist.c:505 msgid "Insert pattern that is being edited" -msgstr "÷ÓÔÁ×ÉÔØ ÔÅËÕÝÉÊ ÐÁÔÔÅÒÎ" +msgstr "Ð’Ñтавить паттерн на текущую позицию" -#: app/playlist.c:535 +#: app/playlist.c:511 msgid "Remove current playlist entry" -msgstr "õÄÁÌÉÔØ ÔÅËÕÝÉÊ ÐÕÎËÔ ÔÁÂÌÉÃÙ ÐÁÔÔÅÒÎÏ×" +msgstr "Удалить текущий пункт таблицы паттернов" -#: app/playlist.c:543 +#: app/playlist.c:517 msgid "Add + Cpy" -msgstr "÷ÓÔ + ëÐÒ" +msgstr "Ð’ÑÑ‚ + Кпр" -#: app/playlist.c:545 +#: app/playlist.c:519 msgid "" "Add a free pattern behind current position, and copy current pattern to it" -msgstr "÷ÓÔÁ×ÉÔØ Ó×ÏÂÏÄÎÙÊ ÐÁÔÔÅÒÎ ÐÏÓÌÅ ÔÅËÕÝÅÇÏ É ÓËÏÐÉÒÏ×ÁÔØ ÔÅËÕÝÉÊ × ÎÅÇÏ" +msgstr "Ð’Ñтавить Ñвободный паттерн поÑле текущего и Ñкопировать текущий в него" -#: app/playlist.c:548 +#: app/playlist.c:522 msgid "Add Free" -msgstr "÷ÓÔ Ó×ÏÂ" +msgstr "Ð’ÑÑ‚ Ñвоб" -#: app/playlist.c:550 +#: app/playlist.c:524 msgid "Add a free pattern behind current position" -msgstr "÷ÓÔÁ×ÉÔØ Ó×ÏÂÏÄÎÙÊ ÐÁÔÔÅÒÎ ÐÏÓÌÅ ÔÅËÕÝÅÇÏ" +msgstr "Ð’Ñтавить Ñвободный паттерн поÑле текущего" -#: app/playlist.c:560 +#: app/playlist.c:534 msgid "Len" -msgstr "äÌÎ" +msgstr "Длн" -#: app/playlist.c:574 +#: app/playlist.c:548 msgid "Song length" -msgstr "äÌÉÎÁ ÐÅÓÎÉ" +msgstr "Длина пеÑни" -#: app/playlist.c:580 +#: app/playlist.c:554 msgid "Rstrt" -msgstr "òÓÔÒÔ" +msgstr "РÑтрт" -#: app/playlist.c:593 +#: app/playlist.c:567 msgid "Song restart position" -msgstr "òÅÓÔÁÒÔ ÐÅÓÎÉ Ó ÕËÁÚÁÎÎÏÊ ÐÏÚÉÃÉÉ" +msgstr "РеÑтарт пеÑни Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¹ позиции" -#: app/preferences.c:74 +#: app/preferences.c:60 msgid "" -"A directory called '.soundtracker' has been created in your\n" +"A directory called \".soundtracker\" has been created in your\n" "home directory to store configuration files.\n" msgstr "" -"ëÁÔÁÌÏÇ ÐÏÄ ÎÁÚ×ÁÎÉÅÍ '.soundtracker' ÓÏÚÄÁÎ × ×ÁÛÅÍ ÄÏÍÁÛÎÅÍ\n" -"ËÁÔÁÌÏÇÅ ÄÌÑ ÈÒÁÎÅÎÉÑ ÆÁÊÌÏ× ËÏÎÆÉÇÕÒÁÃÉÉ.\n" +"Каталог под названием \".soundtracker\" Ñоздан в вашем домашнем\n" +"каталоге Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² конфигурации.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "Импортировать наÑтройки Ñтарой верÑии Soundtracker?" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" +"При преобразовании наÑтроек произошла ошибка:\n" +"%s" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" +"При чтении или разборе файла наÑтроек произошла ошибка:\n" +"%s" -#: app/sample-editor.c:234 +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" +"При Ñохранении файла наÑтроек произошла ошибка:\n" +"%s" + +#: app/sample-editor.c:356 msgid "No loop" -msgstr "âÅÚ ÃÉËÌÁ" +msgstr "Без цикла" -#: app/sample-editor.c:236 +#: app/sample-editor.c:358 msgid "PingPong" -msgstr "ðÉÎÇ-ÐÏÎÇ" +msgstr "Пинг-понг" -#: app/sample-editor.c:240 app/sample-editor.c:1574 +#: app/sample-editor.c:361 app/sample-editor.c:1755 msgid "8 bits" -msgstr "8 ÂÉÔ" +msgstr "8 бит" -#: app/sample-editor.c:241 app/sample-editor.c:1574 +#: app/sample-editor.c:362 app/sample-editor.c:1755 msgid "16 bits" -msgstr "16 ÂÉÔ" +msgstr "16 бит" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "Звуковые файлы Apple/SGI (*aif, *.aiff, *.aifc)" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "Звуковые файлы SUN/NeXT (*.au, *.snd)" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "Звуковые файлы Audio Visual Research (*.avr)" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "Звуковые файлы Apple Core Audio (*.caf)" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "Звуковые файлы Amiga IFF/SV8/SV16 (*.iff)" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "Звуковые файлы Berkeley/IRCAM/CARL (*.sf)" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "Звуковые файлы Creative Labs (*.voc)" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "Звуковые файлы Microsoft RIFF/NIST Sphere (*.wav)" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "Звуковые файлы Ñо Ñжатием без потерь FLAC (*.flac)" -#: app/sample-editor.c:247 +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "Звуковые файлы Psion (*.wve)" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "Сжатые звуковые файлы OGG (*.ogg, *.vorbis)" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "Файлы RIFF 64 (*.rf64)" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "Файлы HMM Tool Kit (*.htk)" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "Файлы GNU Octave/Matlab (*.mat)" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "Звуковые файлы Ensoniq PARIS (*.paf)" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "Звуковые файлы Portable Voice Format (*.pvf)" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "Данные без заголовка (*.raw, *.r8)" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "Звуковые файлы Sound Designer (*.sd2)" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "Стандартные файлы обмена ÑÑмплами MIDI (*.sds)" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "Звуковые файлы SoundFoundry WAVE 64 (*.w64)" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "Звуковые файлы Sample Vision (*.smp)" + +#: app/sample-editor.c:406 msgid "Sample Editor" -msgstr "òÅÄÁËÔÏÒ ÓÜÍÐÌÏ×" +msgstr "Редактор ÑÑмплов" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 +#: app/sample-editor.c:453 app/midi-settings.c:406 msgid "Volume" -msgstr "çÒÏÍËÏÓÔØ" +msgstr "ГромкоÑÑ‚ÑŒ" -#: app/sample-editor.c:288 +#: app/sample-editor.c:454 msgid "Panning" -msgstr "ðÁÎÏÒÁÍÉÒÏ×ÁÎÉÅ" +msgstr "Панорамирование" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "ðÏÄÓÔÒÏÊËÁ" - -#: app/sample-editor.c:309 +#: app/sample-editor.c:475 msgid "Selection:" -msgstr "÷ÙÄÅÌÅÎÉÅ:" +msgstr "Выделение:" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 +#: app/sample-editor.c:479 app/track-editor.c:215 msgid "None" -msgstr "îÉÞÅÇÏ" +msgstr "Ðичего" -#: app/sample-editor.c:319 +#: app/sample-editor.c:485 msgid "All" -msgstr "÷ÓÅ" +msgstr "Ð’Ñе" -#: app/sample-editor.c:340 +#: app/sample-editor.c:506 msgid "Length:" -msgstr "äÌÉÎÁ:" +msgstr "Длина:" -#: app/sample-editor.c:356 +#: app/sample-editor.c:522 msgid "Set as loop" -msgstr "õÓÔÁÎÏ×ÉÔØ ÃÉËÌ" +msgstr "УÑтановить цикл" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "ïÔÎ. ÎÏÔÁ" +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Загрузить ÑÑмпл" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "úÁÇÒÕÚÉÔØ ÓÜÍÐÌ..." +#: app/sample-editor.c:541 +msgid "Load sample into the current sample slot" +msgstr "Загрузить ÑÑмпл на текущую позицию" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "óÏÈÒÁÎÉÔØ WAV..." +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Сохранить ÑÑмпл" -#: app/sample-editor.c:379 +#: app/sample-editor.c:542 +msgid "Save the current sample" +msgstr "Сохранить текущий ÑÑмпл" + +#: app/sample-editor.c:543 msgid "Save region as WAV..." -msgstr "óÏÈÒÁÎÉÔØ ÕÞÁÓÔÏË ËÁË WAV..." +msgstr "Сохранить учаÑток как WAV..." -#: app/sample-editor.c:392 +#: app/sample-editor.c:557 msgid "Save WAV" -msgstr "óÏÈÒÁÎÉÔØ WAV" +msgstr "Сохранить WAV" -#: app/sample-editor.c:402 +#: app/sample-editor.c:569 msgid "Save Region" -msgstr "óÏÈÒÁÎÉÔØ ÕÞÁÓÔÏË" - -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "ïÃÉÆÒÏ×ËÁ" +msgstr "Сохранить учаÑток" -#: app/sample-editor.c:419 +#: app/sample-editor.c:587 msgid "Volume Ramp" -msgstr "óÐÁÄ ÇÒÏÍËÏÓÔÉ" +msgstr "Спад громкоÑти" -#: app/sample-editor.c:425 +#: app/sample-editor.c:593 msgid "Trim" -msgstr "ðÏÄÒÏ×ÎÑÔØ" +msgstr "ПодровнÑÑ‚ÑŒ" -#: app/sample-editor.c:436 +#: app/sample-editor.c:603 msgid "Zoom to selection" -msgstr "ðÏËÁÚÁÔØ ×ÙÄÅÌÅÎÉÅ" +msgstr "Показать выделение" -#: app/sample-editor.c:442 +#: app/sample-editor.c:609 msgid "Show all" -msgstr "ðÏËÁÚÁÔØ ×ÓÅ" +msgstr "Показать вÑе" -#: app/sample-editor.c:448 +#: app/sample-editor.c:615 msgid "Zoom in (+50%)" -msgstr "õ×ÅÌÉÞÉÔØ (+50%)" +msgstr "Увеличить (+50%)" -#: app/sample-editor.c:454 +#: app/sample-editor.c:621 msgid "Zoom out (-50%)" -msgstr "õÍÅÎØÛÉÔØ (-50%)" +msgstr "Уменьшить (-50%)" -#: app/sample-editor.c:460 +#: app/sample-editor.c:627 msgid "Reverse" -msgstr "ïÂÒÁÔÉÔØ" +msgstr "Обратить" -#: app/sample-editor.c:470 +#: app/sample-editor.c:637 msgid "Cut" -msgstr "÷ÙÒÅÚÁÔØ" +msgstr "Вырезать" -#: app/sample-editor.c:476 +#: app/sample-editor.c:643 msgid "Remove" -msgstr "õÄÁÌÉÔØ" +msgstr "Удалить" -#: app/sample-editor.c:482 +#: app/sample-editor.c:649 msgid "Copy" -msgstr "ëÏÐÉÒÏ×ÁÔØ" +msgstr "Копировать" -#: app/sample-editor.c:488 +#: app/sample-editor.c:655 msgid "Paste" -msgstr "÷ÓÔÁ×ÉÔØ" +msgstr "Ð’Ñтавить" -#: app/sample-editor.c:494 +#: app/sample-editor.c:661 msgid "Clear Sample" -msgstr "ïÞÉÓÔÉÔØ ÓÜÍÐÌ" +msgstr "ОчиÑтить ÑÑмпл" -#: app/sample-editor.c:500 -#, fuzzy +#: app/sample-editor.c:667 msgid "Crop" -msgstr "ëÏÐÉÒÏ×ÁÔØ" +msgstr "Обрезать" -#: app/sample-editor.c:564 +#: app/sample-editor.c:730 msgid "(no selection)" -msgstr "(ÎÅÔ ×ÙÄÅÌÅÎÉÑ)" +msgstr "(нет выделениÑ)" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ ÄÌÑ ÂÕÆÅÒÁ ËÏÐÉÒÏ×ÁÎÉÑ.\n" +#: app/sample-editor.c:1279 +msgid "Out of memory for copybuffer." +msgstr "ÐедоÑтаточно памÑти Ð´Ð»Ñ Ð±ÑƒÑ„ÐµÑ€Ð° копированиÑ." -#: app/sample-editor.c:1188 +#: app/sample-editor.c:1400 msgid "" -msgstr "<ÔÏÌØËÏ ÞÔÏ ×ÓÔÁ×ÌÅÎÏ>" +msgstr "<только что вÑтавлено>" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Объединить" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Левый" -#: app/sample-editor.c:1301 +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Правый" + +#: app/sample-editor.c:1479 +msgid "2 samples" +msgstr "2 ÑÑмпла" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "Загрузить правый и левый каналы в текущий и Ñледующий ÑÑмплы" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" +"Ð’Ñ‹ выбрали поÑледний ÑÑмпл инÑтрумента, но хотите загрузить второй " +"Ñтереоканал в Ñледующий ÑÑмпл. ПожалуйÑта, выберите позицию ÑÑмпла Ñ Ð¼ÐµÐ½ÑŒÑˆÐ¸Ð¼ " +"номером или иÑпользуйте другой режим загрузки." + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" +"Следующий по порÑдку ÑÑмпл, который будет перезапиÑан, не пуÑÑ‚!\n" +"Хотите его перезапиÑать?" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 msgid "Out of memory for sample data." -msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ ÄÌÑ ÄÁÎÎÙÈ ÓÜÍÐÌÁ." +msgstr "ÐедоÑтаточно памÑти Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… ÑÑмпла." -#: app/sample-editor.c:1317 app/sample-editor.c:1329 +#: app/sample-editor.c:1575 app/sample-editor.c:1585 msgid "Read error." -msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ." - -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "úÁÇÒÕÚÉÔØ ÓÔÅÒÅÏÓÜÍÐÌ" +msgstr "Ошибка чтениÑ." -#: app/sample-editor.c:1484 +#: app/sample-editor.c:1723 +#, c-format msgid "" "You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" +"(%s can only handle mono samples!)\n" "\n" "Please choose which channel to load:" msgstr "" -"÷Ù ×ÙÂÒÁÌÉ ÓÔÅÒÅÏÓÜÍÐÌ!\n" -"(SoundTracker ÏÂÒÁÂÁÔÙ×ÁÅÔ ÔÏÌØËÏ ÍÏÎÏÓÜÍÐÌÙ)\n" +"Ð’Ñ‹ выбрали ÑтереоÑÑмпл!\n" +"(%s обрабатывает только моноÑÑмплы)\n" "\n" -"÷ÙÂÅÒÉÔÅ, ËÁËÏÊ ÉÚ ËÁÎÁÌÏ× ÚÁÇÒÕÚÉÔØ:" - -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "ìÅ×ÙÊ" - -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "ïÂßÅÄÉÎÉÔØ" +"Выберите, какой из каналов загрузить:" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "ðÒÁ×ÙÊ" +#: app/sample-editor.c:1726 +msgid "Stereo sample loading" +msgstr "Загрузка ÑтереоÑÑмпла" -#: app/sample-editor.c:1575 +#: app/sample-editor.c:1756 msgid "Signed" -msgstr "úÎÁËÏ×ÙÊ" +msgstr "Знаковый" -#: app/sample-editor.c:1575 +#: app/sample-editor.c:1756 msgid "Unsigned" -msgstr "âÅÚÚÎÁËÏ×ÙÊ" +msgstr "Беззнаковый" -#: app/sample-editor.c:1576 +#: app/sample-editor.c:1757 msgid "Little-Endian" -msgstr "íÌÁÄÛÉÊ ÂÁÊÔ × ËÏÎÃÅ (LE)" +msgstr "Младший байт в конце (LE)" -#: app/sample-editor.c:1576 +#: app/sample-editor.c:1757 msgid "Big-Endian" -msgstr "óÔÁÒÛÉÊ ÂÁÊÔ × ËÏÎÃÅ (BE)" - -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "íÏÎÏ" - -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "óÔÅÒÅÏ" +msgstr "Старший байт в конце (BE)" -#: app/sample-editor.c:1589 +#: app/sample-editor.c:1764 msgid "Load raw sample" -msgstr "úÁÇÒÕÚÉÔØ ÓÜÍÐÌ ÂÅÚ ÚÁÇÏÌÏ×ËÁ" +msgstr "Загрузить ÑÑмпл без заголовка" -#: app/sample-editor.c:1597 +#: app/sample-editor.c:1772 msgid "" "You have selected a sample that is not\n" "in a known format. You can load the raw data now.\n" "\n" "Please choose a format:" msgstr "" -"÷Ù ×ÙÂÒÁÌÉ ÓÜÍÐÌ, ÆÏÒÍÁÔ ËÏÔÏÒÏÇÏ ÎÅÉÚ×ÅÓÔÅÎ.\n" -"÷Ù ÍÏÖÅÔÅ ÚÁÇÒÕÚÉÔØ ÅÇÏ ËÁË raw-ÄÁÎÎÙÅ.\n" +"Ð’Ñ‹ выбрали ÑÑмпл, формат которого неизвеÑтен.\n" +"Ð’Ñ‹ можете загрузить его как данные без заголовка.\n" "\n" -"÷ÙÂÅÒÉÔÅ ÆÏÒÍÁÔ, ÐÏÖÁÌÕÊÓÔÁ:" +"ПожалуйÑта, выберите формат:" -#: app/sample-editor.c:1623 +#: app/sample-editor.c:1798 msgid "Word format:" -msgstr "æÏÒÍÁÔ ÐÒÅÄÓÔÁ×ÌÅÎÉÑ ÄÁÎÎÙÈ:" +msgstr "Формат предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…:" -#: app/sample-editor.c:1670 +#: app/sample-editor.c:1829 msgid "Sampling Rate:" -msgstr "þÁÓÔÏÔÁ ÄÉÓËÒÅÔÉÚÁÃÉÉ:" - -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" +msgstr "ЧаÑтота диÑкретизации:" -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "ïë" - -#: app/sample-editor.c:1748 +#: app/sample-editor.c:1915 msgid "Can't read sample" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÓÜÍÐÌ" +msgstr "Ðевозможно прочитать ÑÑмпл" -#: app/sample-editor.c:1761 +#: app/sample-editor.c:1929 msgid "Sample is too long for current mixer module. Loading anyway." -msgstr "óÜÍÐÌ ÓÌÉÛËÏÍ ÄÌÉÎÎÙÊ ÄÌÑ ÔÅËÕÝÅÇÏ ÍÏÄÕÌÑ ÍÉËÛÅÒÁ. îÏ ÇÒÕÚÉÍ." +msgstr "СÑмпл Ñлишком длинный Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¼Ð¸ÐºÑˆÐµÑ€Ð°. Ðо грузим." -#: app/sample-editor.c:1785 +#: app/sample-editor.c:1954 msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "ðÏÄÄÅÒÖÉ×ÁÀÔÓÑ ÔÏÌØËÏ ÓÜÍÐÌÙ 8/16 ÂÉÔ, ÄÏ 2 ËÁÎÁÌÏ×" +msgstr "ПоддерживаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ ÑÑмплы 8/16 бит, до 2 каналов" -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "ðÏÖÁÌÕÊÓÔÁ, ÏÔÍÅÔØÔÅ ÕÞÁÓÔÏË, ÎÁÄ ËÏÔÏÒÙÍ ÂÕÄÕÔ ×ÙÐÏÌÎÑÔØÓÑ ÄÅÊÓÔ×ÉÑ" +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Ðевозможно открыть файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи." -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "îÁÞÁÔØ ÏÃÉÆÒÏ×ËÕ" +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "ПожалуйÑта, отметьте учаÑток, над которым будут выполнÑÑ‚ÑŒÑÑ Ð´ÐµÐ¹ÑтвиÑ" -#: app/sample-editor.c:2042 +#: app/sample-editor.c:2194 msgid "No sampling driver available" -msgstr "îÅÔ ÄÒÁÊ×ÅÒÁ ÏÃÉÆÒÏ×ËÉ " +msgstr "Ðет драйвера оцифровки " -#: app/sample-editor.c:2052 app/sample-editor.c:2055 +#: app/sample-editor.c:2203 msgid "Sampling Window" -msgstr "ïËÎÏ ÏÃÉÆÒÏ×ËÉ" +msgstr "Окно оцифровки" -#: app/sample-editor.c:2104 +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "ЗапиÑÑŒ" + +#: app/sample-editor.c:2232 +msgid "Clear" +msgstr "Стереть" + +#: app/sample-editor.c:2263 +msgid "Sampling failed!" +msgstr "Сбой оцифровки!" + +#: app/sample-editor.c:2298 msgid "Out of memory while sampling!" -msgstr "ëÏÎÞÉÌÁÓØ ÐÁÍÑÔØ × ÐÒÏÃÅÓÓÅ ÏÃÉÆÒÏ×ËÉ!" +msgstr "КончилаÑÑŒ памÑÑ‚ÑŒ в процеÑÑе оцифровки!" -#: app/sample-editor.c:2155 +#: app/sample-editor.c:2345 msgid "" -msgstr "<ÔÏÌØËÏ ÞÔÏ ÏÃÉÆÒÏ×ÁÎÏ>" +msgstr "<Ñвежеоцифровано>" -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/sample-editor.c:2370 +#, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" msgstr "" -"úÁÐÉÓÁÎÎÙÊ ÓÜÍÐÌ ÓÌÉÛËÏÍ ÄÌÉÎÎÙÊ ÄÌÑ ÔÅËÕÝÅÇÏ ÍÏÄÕÌÑ ÍÉËÛÅÒÁ. îÏ ÉÓÐÏÌØÚÕÅÍ." +"Ð’Ñ‹ запиÑали ÑтереоÑÑмпл!\n" +"(%s обрабатывает только моноÑÑмплы)\n" +"\n" +"Выберите, какой из каналов загрузить:" -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "îÏÒÍÁÌÉÚÏ×ÁÔØ" +#: app/sample-editor.c:2372 +msgid "Converting stereo sample" +msgstr "Преобразование ÑтереоÑÑмпла" -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "÷ÙÐÏÌÎÉÔØ" +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"ЗапиÑанный ÑÑмпл Ñлишком длинный Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¼Ð¸ÐºÑˆÐµÑ€Ð°. Ðо иÑпользуем." -#: app/sample-editor.c:2250 app/sample-editor.c:2253 +#: app/sample-editor.c:2657 msgid "Volume Ramping" -msgstr "óÐÁÄ ÇÒÏÍËÏÓÔÉ" +msgstr "Спад громкоÑти" -#: app/sample-editor.c:2269 +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Ðормализовать" + +#: app/sample-editor.c:2667 msgid "Perform linear volume fade on Selection" -msgstr "ðÒÏÉÚ×ÅÓÔÉ ÌÉÎÅÊÎÏÅ ÓÐÁÄÁÎÉÅ ÇÒÏÍËÏÓÔÉ ÎÁ ×ÙÂÒÁÎÎÏÍ ÕÞÁÓÔËÅ" +msgstr "ПроизвеÑти линейный переход громкоÑти на выбранном учаÑтке" -#: app/sample-editor.c:2281 +#: app/sample-editor.c:2676 msgid "Left [%]:" -msgstr "ìÅ×ÙÊ [%]:" +msgstr "Левый [%]:" -# ? -#: app/sample-editor.c:2284 app/sample-editor.c:2301 +#: app/sample-editor.c:2679 app/sample-editor.c:2696 msgid "H" msgstr "50%" -# ? -#: app/sample-editor.c:2290 app/sample-editor.c:2307 +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "Уменьшить амплитуду в 2 раза" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 msgid "D" msgstr "200%" -#: app/sample-editor.c:2298 +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "Увеличить амплитуду в 2 раза" + +#: app/sample-editor.c:2693 msgid "Right [%]:" -msgstr "ðÒÁ×ÙÊ [%]:" +msgstr "Правый [%]:" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 +#: app/sample-editor.c:2786 msgid "Trim parameters" -msgstr "ðÁÒÁÍÅÔÒÙ ÐÏÄÒÁ×ÎÉ×ÁÎÉÑ" +msgstr "Параметры подравниваниÑ" -#: app/sample-editor.c:2498 +#: app/sample-editor.c:2792 msgid "Trim at the beginning" -msgstr "ðÏÄÒÏ×ÎÑÔØ ÎÁÞÁÌÏ" +msgstr "ПодровнÑÑ‚ÑŒ начало" -#: app/sample-editor.c:2505 +#: app/sample-editor.c:2796 msgid "Trim at the end" -msgstr "ðÏÄÒÏ×ÎÑÔØ ËÏÎÅÃ" +msgstr "ПодровнÑÑ‚ÑŒ конец" -#: app/sample-editor.c:2512 +#: app/sample-editor.c:2802 msgid "Threshold (dB)" -msgstr "ðÏÒÏÇ (Äâ)" +msgstr "Порог (дБ)" -#: app/tips-dialog.c:50 +#: app/tips-dialog.c:45 msgid "" "Welcome to SoundTracker!\n" "\n" "If you are new to this type of program, you will want to get hold of\n" "some XM or MOD files first and play with them." msgstr "" -"äÏÂÒÏ ÐÏÖÁÌÏ×ÁÔØ × SoundTracker!\n" +"Добро пожаловать в SoundTracker!\n" "\n" -"åÓÌÉ ÐÏÄÏÂÎÙÅ ÐÒÏÇÒÁÍÍÙ ÷ÁÍ × ÎÏ×ÉÎËÕ, ×ÅÒÏÑÔÎÏ, ÓÔÏÉÔ ÄÌÑ ÎÁÞÁÌÁ\n" -"ÎÁÊÔÉ ÎÅÓËÏÌØËÏ ÇÏÔÏ×ÙÈ ÆÁÊÌÏ× XM ÉÌÉ MOD É ÐÏÉÇÒÁÔØÓÑ Ó ÎÉÍÉ." +"ЕÑли подобные программы Вам в новинку, вероÑтно, Ñтоит Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°\n" +"найти неÑколько готовых файлов XM или MOD и поигратьÑÑ Ñ Ð½Ð¸Ð¼Ð¸." -#: app/tips-dialog.c:55 +#: app/tips-dialog.c:50 msgid "" "You can make SoundTracker's edit mode more responsive to keyboard\n" "input by decreasing the mixing buffer size of the \"Editing\" object in\n" "the Audio Configuration." msgstr "" -"÷Ù ÍÏÖÅÔÅ ÓÄÅÌÁÔØ ÒÅÖÉÍ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ SoundTracker ÂÏÌÅÅ ÞÕ×ÓÔ×ÉÔÅÌØÎÙÍ\n" -"Ë ËÌÁ×ÉÁÔÕÒÅ, ÅÓÌÉ ÕÍÅÎØÛÉÔÅ ÒÁÚÍÅÒ ÂÕÆÅÒÁ ÏÂßÅËÔÁ \"òÅÄÁËÔÉÒÏ×ÁÎÉÅ\" ×\n" -"ÄÉÁÌÏÇÅ ËÏÎÆÉÇÕÒÁÃÉÉ ÁÕÄÉÏ." +"Ð’Ñ‹ можете Ñделать режим Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ SoundTracker более чувÑтвительным\n" +"к клавиатуре, еÑли уменьшите размер буфера объекта \"Редактирование\" в\n" +"диалоге конфигурации аудио." -#: app/tips-dialog.c:59 +#: app/tips-dialog.c:54 msgid "" "You can adjust the loop points in the sample editor by holding Shift\n" "and using the left and right mousebuttons.\n" msgstr "" -"÷Ù ÍÏÖÅÔÅ ÕÔÏÞÎÉÔØ ÐÏÚÉÃÉÉ ÔÏÞÅË ÚÁÃÉËÌÉ×ÁÎÉÑ × ÒÅÄÁËÔÏÒÅ ÓÜÍÐÌÏ×\n" -"ÐÒÉ ÐÏÍÏÝÉ ÌÅ×ÏÊ É ÐÒÁ×ÏÊ ËÎÏÐÏË ÍÙÛÉ, ÎÁÖÁ× Shift.\n" +"Ð’Ñ‹ можете уточнить позиции точек Ð·Ð°Ñ†Ð¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð² редакторе ÑÑмплов\n" +"при помощи левой и правой кнопок мыши, нажав Shift.\n" -#: app/tips-dialog.c:62 +#: app/tips-dialog.c:57 msgid "" "If you want to know more about tracking, and how the various commands\n" "work, have a look at http://www.united-trackers.org/" msgstr "" -"åÓÌÉ ×Ù ÈÏÔÉÔÅ ÕÚÎÁÔØ ÂÏÌØÛÅ Ï ÔÒÅËÅÒÁÈ,\n" -"ÚÁÇÌÑÎÉÔÅ ÎÁ http://www.united-trackers.org/" +"ЕÑли вы хотите узнать больше о трекерах,\n" +"заглÑните на http://www.united-trackers.org/" -#: app/tips-dialog.c:65 +#: app/tips-dialog.c:60 msgid "" "You can assign samples of an instrument to the individual keys by\n" "activating its sample and then clicking on the keyboard in the\n" "instrument editor page." msgstr "" -"÷Ù ÍÏÖÅÔÅ ÐÒÉ×ÑÚÁÔØ ÓÜÍÐÌÙ ÉÎÓÔÒÕÍÅÎÔÁ Ë ÏÐÒÅÄÅÌÅÎÎÙÍ ËÌÁ×ÉÛÁÍ,\n" -"ÁËÔÉ×ÉÒÏ×Á× ÎÕÖÎÙÊ ÓÜÍÐÌ É ËÌÁÃÎÕ× ÐÏ ËÌÁ×ÉÁÔÕÒÅ ÎÁ ÓÔÒÁÎÉÞËÅ\n" -"ÒÅÄÁËÔÏÒÁ ÉÎÓÔÒÕÍÅÎÔÏ×." +"Ð’Ñ‹ можете привÑзать ÑÑмплы инÑтрумента к определенным клавишам,\n" +"активировав нужный ÑÑмпл и клацнув по клавиатуре на Ñтраничке\n" +"редактора инÑтрументов." -#: app/tips-dialog.c:69 +#: app/tips-dialog.c:64 msgid "" "Is your cursor trapped in a number entry field?\n" "Just press Return or Tab to free yourself!" msgstr "" -"úÁÓÔÒÑÌ ËÕÒÓÏÒ ÇÄÅ-ÎÉÂÕÄØ × ÐÏÌÅ ××ÏÄÁ ÞÉÓÅÌ?\n" -"ðÒÏÓÔÏ ÎÁÖÍÉ Return ÉÌÉ Tab -- É ÔÙ ÎÁ Ó×ÏÂÏÄÅ!" - -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "ðÏÄÓËÁÚËÁ ÄÎÑ ÏÔ SoundTracker" +"ЗаÑÑ‚Ñ€Ñл курÑор где-нибудь в поле ввода чиÑел?\n" +"ПроÑто нажми Return или Tab — и Ñ‚Ñ‹ на Ñвободе!" -#: app/tips-dialog.c:154 +#: app/tips-dialog.c:111 msgid "Previous Tip" -msgstr "ðÒÅÄÙÄÕÝÁÑ ÐÏÄÓËÁÚËÁ" +msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð¿Ð¾Ð´Ñказка" -#: app/tips-dialog.c:162 +#: app/tips-dialog.c:118 msgid "Next Tip" -msgstr "óÌÅÄÕÀÝÁÑ ÐÏÄÓËÁÚËÁ" +msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð¿Ð¾Ð´Ñказка" -#: app/tips-dialog.c:174 +#: app/tips-dialog.c:129 msgid "Show tip next time" -msgstr "ðÏËÁÚÙ×ÁÔØ × ÄÁÌØÎÅÊÛÅÍ" +msgstr "Показывать в дальнейшем" -#: app/track-editor.c:113 +#: app/tips-dialog.c:146 +#, c-format +msgid "%s Tip of the day" +msgstr "ПодÑказка Ð´Ð½Ñ Ð¾Ñ‚ %s" + +#: app/track-editor.c:130 msgid "Arpeggio" -msgstr "áÒÐÅÄÖÉÏ" +msgstr "Ðрпеджио" -#: app/track-editor.c:114 +#: app/track-editor.c:131 msgid "Porta up" -msgstr "ðÏÒÔÁÍÅÎÔÏ ××ÅÒÈ" +msgstr "Портаменто вверх" -#: app/track-editor.c:115 +#: app/track-editor.c:132 msgid "Porta down" -msgstr "ðÏÒÔÁÍÅÎÔÏ ×ÎÉÚ" +msgstr "Портаменто вниз" -#: app/track-editor.c:116 app/track-editor.c:180 +#: app/track-editor.c:133 app/track-editor.c:197 msgid "Tone porta" -msgstr "ðÏÒÔÁÍÅÎÔÏ Ë ÎÏÔÅ" +msgstr "Портаменто к ноте" -#: app/track-editor.c:117 app/track-editor.c:176 +#: app/track-editor.c:134 app/track-editor.c:193 msgid "Vibrato" -msgstr "÷ÉÂÒÁÔÏ:" +msgstr "Вибрато:" -# ? -#: app/track-editor.c:118 +#: app/track-editor.c:135 msgid "Tone porta + Volume slide" -msgstr "ðÏÒÔÁÍÅÎÔÏ + ÐÌÁ×ÎÏÅ ÉÚÍÅÎÅÎÉÅ ÇÒÏÍËÏÓÔÉ" +msgstr "Портаменто + плавное изменение громкоÑти" -#: app/track-editor.c:119 +#: app/track-editor.c:136 msgid "Vibrato + Volume slide" -msgstr "÷ÉÂÒÁÔÏ + ÐÌÁ×ÎÏÅ ÉÚÍÅÎÅÎÉÅ ÇÒÏÍËÏÓÔÉ" +msgstr "Вибрато + плавное изменение громкоÑти" -#: app/track-editor.c:120 +#: app/track-editor.c:137 msgid "Tremolo" -msgstr "ôÒÅÍÏÌÏ" +msgstr "Тремоло" -#: app/track-editor.c:121 app/track-editor.c:177 +#: app/track-editor.c:138 app/track-editor.c:194 msgid "Set panning" -msgstr "õÓÔÁÎÏ×ÉÔØ ÐÁÎÏÒÁÍÉÒÏ×ÁÎÉÅ" +msgstr "УÑтановить панорамирование" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "ðÅÒÅÈÏÄ Ë ×ÙÂÒÁÎÎÏÊ ÐÏÚÉÃÉÉ" +#: app/track-editor.c:139 +msgid "Sample offset" +msgstr "ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð² ÑÑмпле" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 msgid "Set volume" -msgstr "õÓÔÁÎÏ×ÉÔØ ÇÒÏÍËÏÓÔØ" +msgstr "УÑтановить громкоÑÑ‚ÑŒ" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Переход к выбранной позиции" -#: app/track-editor.c:126 +#: app/track-editor.c:143 msgid "Pattern break" -msgstr "ïÂÒÙ× ÐÁÔÔÅÒÎ" +msgstr "Обрыв паттерна" -#: app/track-editor.c:128 +#: app/track-editor.c:145 msgid "Set tempo/bpm" -msgstr "õÓÔÁÎÏ×ÉÔØ ÔÅÍÐ/BPM" +msgstr "УÑтановить темп/BPM" -#: app/track-editor.c:129 +#: app/track-editor.c:146 msgid "Set global volume" -msgstr "õÓÔÁÎÏ×ÉÔØ ÏÂÝÕÀ ÇÒÏÍËÏÓÔØ" +msgstr "УÑтановить общую громкоÑÑ‚ÑŒ" -#: app/track-editor.c:130 +#: app/track-editor.c:147 msgid "Global volume slide" -msgstr "ðÌÁ×ÎÏÅ ÉÚÍÅÎÅÎÉÅ ÏÂÝÅÊ ÇÒÏÍËÏÓÔÉ" +msgstr "Плавное изменение общей громкоÑти" -#: app/track-editor.c:133 +#: app/track-editor.c:150 msgid "Key off" -msgstr "ïÔÐÕÓËÁÎÉÅ ËÌÁ×ÉÛÉ" +msgstr "ОтпуÑкание клавиши" -# ! envelope -#: app/track-editor.c:134 +#: app/track-editor.c:151 msgid "Set envelop position" -msgstr "õÓÔÁÎÏ×ÉÔØ ÐÏÚÉÃÉÀ ÏÇÉÂÁÀÝÅÊ" +msgstr "УÑтановить позицию огибающей" -#: app/track-editor.c:138 +#: app/track-editor.c:155 msgid "Panning slide" -msgstr "ðÌÁ×ÎÏÅ ÉÚÍÅÎÅÎÉÅ ÐÁÎÏÒÁÍÉÒÏ×ÁÎÉÑ" +msgstr "Плавное изменение панорамированиÑ" -#: app/track-editor.c:139 +#: app/track-editor.c:156 msgid "LP filter resonance" -msgstr "òÅÚÏÎÁÎÓ îþ-ÆÉÌØÔÒÁ" +msgstr "Ð ÐµÐ·Ð¾Ð½Ð°Ð½Ñ ÐЧ-фильтра" -#: app/track-editor.c:140 +#: app/track-editor.c:157 msgid "Multi retrig note" -msgstr "íÎÏÇÏËÒÁÔÎÏ ÐÏ×ÔÏÒÉÔØ ÎÏÔÕ" +msgstr "Многократно повторить ноту" -#: app/track-editor.c:142 +#: app/track-editor.c:159 msgid "Tremor" -msgstr "ôÒÅÍÏÒ" +msgstr "Тремор" -#: app/track-editor.c:148 +#: app/track-editor.c:165 msgid "LP filter cutoff" -msgstr "óÒÅÚ îþ-ÆÉÌØÔÒÁ" +msgstr "Срез ÐЧ-фильтра" -# ? -#: app/track-editor.c:153 +#: app/track-editor.c:170 msgid "Fine porta up" -msgstr "ôÏÞÎÏÅ ÐÏÒÔÁÍÅÎÔÏ ××ÅÒÈ" +msgstr "Точное портаменто вверх" -# ? -#: app/track-editor.c:154 +#: app/track-editor.c:171 msgid "Fine porta down" -msgstr "ôÏÞÎÏÅ ÐÏÒÔÁÍÅÎÔÏ ×ÎÉÚ" +msgstr "Точное портаменто вниз" -# ? -#: app/track-editor.c:155 +#: app/track-editor.c:172 msgid "Set gliss control" -msgstr "õÓÔÁÎÏ×ÉÔØ ÒÅÖÉÍ ÇÌÉÓÓÁÎÄÏ" +msgstr "УÑтановить режим глиÑÑандо" -#: app/track-editor.c:156 +#: app/track-editor.c:173 msgid "Set vibrato control" -msgstr "õÓÔÁÎÏ×ÉÔØ ÒÅÖÉÍ ×ÉÂÒÁÔÏ" +msgstr "УÑтановить режим вибрато" -#: app/track-editor.c:157 +#: app/track-editor.c:174 msgid "Set finetune" -msgstr "õÓÔÁÎÏ×ÉÔØ ÐÏÄÓÔÒÏÊËÕ" +msgstr "УÑтановить подÑтройку" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "õÓÔÁÎÏ×ÉÔØ ÎÁÞÁÌÏ ÃÉËÌÁ/ÃÉËÌ" +#: app/track-editor.c:175 +msgid "Pattern loop" +msgstr "Зацикливание паттерна" -#: app/track-editor.c:159 +#: app/track-editor.c:176 msgid "Set tremolo control" -msgstr "õÓÔÁÎÏ×ÉÔ ÒÅÖÉÍ ÔÒÅÍÏÌÏ" +msgstr "УÑтановит режим тремоло" -# ? -#: app/track-editor.c:161 +#: app/track-editor.c:178 msgid "Retrig note" -msgstr "ðÏ×ÔÏÒÉÔØ ÎÏÔÕ" +msgstr "Повторить ноту" -#: app/track-editor.c:162 app/track-editor.c:174 +#: app/track-editor.c:179 app/track-editor.c:191 msgid "Fine volume slide up" -msgstr "ôÏÞÎÙÊ ÐÏÄßÅÍ ÇÒÏÍËÏÓÔÉ" +msgstr "Точный подъем громкоÑти" -#: app/track-editor.c:163 app/track-editor.c:173 +#: app/track-editor.c:180 app/track-editor.c:190 msgid "Fine volume slide down" -msgstr "ôÏÞÎÙÊ ÓÐÁÄ ÇÒÏÍËÏÓÔÉ" +msgstr "Точный Ñпад громкоÑти" -#: app/track-editor.c:164 +#: app/track-editor.c:181 msgid "Note cut" -msgstr "ïÔËÌÀÞÅÎÉÅ ÎÏÔÙ" +msgstr "Отключение ноты" -#: app/track-editor.c:165 +#: app/track-editor.c:182 msgid "Note delay" -msgstr "úÁÄÅÒÖËÁ ÎÏÔÙ" +msgstr "Задержка ноты" -#: app/track-editor.c:166 +#: app/track-editor.c:183 msgid "Pattern delay" -msgstr "úÁÄÅÒÖËÁ ÐÁÔÔÅÒÎÁ" +msgstr "Задержка паттерна" -#: app/track-editor.c:171 +#: app/track-editor.c:188 msgid "Volume slide down" -msgstr "úÁÔÕÈÁÎÉÅ ÇÒÏÍËÏÓÔÉ" +msgstr "Затухание громкоÑти" -#: app/track-editor.c:172 +#: app/track-editor.c:189 msgid "Volume slide up" -msgstr "îÁÒÁÓÔÁÎÉÅ ÇÒÏÍËÏÓÔÉ" +msgstr "ÐараÑтание громкоÑти" -#: app/track-editor.c:175 +#: app/track-editor.c:192 msgid "Set vibrato speed" -msgstr "õÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÉÂÒÁÔÏ" +msgstr "УÑтановить ÑкороÑÑ‚ÑŒ вибрато" -#: app/track-editor.c:178 +#: app/track-editor.c:195 msgid "Panning slide left" -msgstr "óÄ×ÉÇ ÐÁÎÏÒÁÍÉÒÏ×ÁÎÉÑ ×ÌÅ×Ï" +msgstr "Сдвиг Ð¿Ð°Ð½Ð¾Ñ€Ð°Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð»ÐµÐ²Ð¾" -#: app/track-editor.c:179 +#: app/track-editor.c:196 msgid "Panning slide right" -msgstr "óÄ×ÉÇ ÐÁÎÏÒÁÍÉÒÏ×ÁÎÉÑ ×ÐÒÁ×Ï" +msgstr "Сдвиг Ð¿Ð°Ð½Ð¾Ñ€Ð°Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¿Ñ€Ð°Ð²Ð¾" -#: app/track-editor.c:184 +#: app/track-editor.c:201 msgid "sine" -msgstr "ÓÉÎÕÓÏÉÄÁ" +msgstr "ÑинуÑоида" -# ? -#: app/track-editor.c:185 +#: app/track-editor.c:202 msgid "ramp down" -msgstr "ÚÁÔÕÈÁÎÉÅ" +msgstr "затухание" -#: app/track-editor.c:186 +#: app/track-editor.c:203 msgid "square" -msgstr "ÐÒÑÍÏÕÇÏÌØÎÉË" +msgstr "прÑмоугольник" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 +#: app/track-editor.c:206 #, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "[Кан: %02d] [Поз: %03d] [ИнÑÑ‚Ñ€: %03d] [Громк: " + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "[Ком: " + +#: app/track-editor.c:244 +msgid "Extra fine porta up" +msgstr "ОÑобо точное портаменто вверх" + +#: app/track-editor.c:247 +msgid "Extra fine porta down" +msgstr "ОÑобо точное портаменто вниз" + +#: app/track-editor.c:257 msgid "None ]" -msgstr "îÉÞÅÇÏ ]" +msgstr "Ðичего ]" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr " => темп: %02d ]" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr " => BPM: %03d ]" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr " => позициÑ: %d ]" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr ", непрерывный режим" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr " начать ]" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr " %02d раз(а) ]" -#: app/track-editor.c:360 +#: app/track-editor.c:470 msgid "Jazz Edit:" -msgstr "òÅÄÁËÔÉÒÏ×ÁÎÉÅ Jazz:" +msgstr "Работать в каналах:" -#: app/track-editor.c:405 +#: app/track-editor.c:524 msgid "Tracker" -msgstr "ôÒÜËÅÒ" +msgstr "ТрÑкер" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" +"ПоÑледний Ñ‚Ñ€Ñк паттерна не пуÑÑ‚. При Ñдвиге он окажетÑÑ Ð·Ð° пределами " +"паттерна. Чтобы увидеть его, будет необходимо увеличить чиÑло каналов. " +"Продолжить?" -#: app/tracker-settings.c:235 +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" +"Внимание! ПоÑледний Ñ‚Ñ€Ñк паттерна не пуÑÑ‚. При Ñдвиге он попадёт в цифровое " +"ничто! Ð’Ñ‹ дейÑтвительно Ñтого желаете?" + +#: app/tracker-settings.c:262 msgid "Font list" -msgstr "óÐÉÓÏË ÛÒÉÆÔÏ×" +msgstr "СпиÑок шрифтов" -#: app/tracker-settings.c:255 +#: app/tracker-settings.c:284 msgid "Add font" -msgstr "äÏÂÁ×ÉÔØ ÛÒÉÆÔ" +msgstr "Добавить шрифт" -#: app/tracker-settings.c:261 +#: app/tracker-settings.c:290 msgid "Delete font" -msgstr "õÄÁÌÉÔØ ÛÒÉÆÔ" +msgstr "Удалить шрифт" -#: app/tracker-settings.c:267 +#: app/tracker-settings.c:296 msgid "Apply font" -msgstr "ðÒÉÍÅÎÉÔØ ÛÒÉÆÔ" - -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "÷×ÅÒÈ" +msgstr "Применить шрифт" -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "÷ÎÉÚ" - -#: app/tracker-settings.c:288 +#: app/tracker-settings.c:312 msgid "Select font..." -msgstr "÷ÙÂÅÒÉÔÅ ÛÒÉÆÔ..." +msgstr "Выберите шрифт..." -#: app/transposition.c:198 +#: app/transposition.c:189 msgid "Whole Song" -msgstr "÷ÓÑ ÐÅÓÎÑ" +msgstr "Ð’ÑÑ Ð¿ÐµÑнÑ" -#: app/transposition.c:199 +#: app/transposition.c:190 msgid "All Patterns" -msgstr "÷ÓÅ ÐÁÔÔÅÒÎÙ" +msgstr "Ð’Ñе паттерны" -#: app/transposition.c:200 +#: app/transposition.c:191 msgid "Current Pattern" -msgstr "ôÅËÕÝÉÊ ÐÁÔÔÅÒÎ" +msgstr "Текущий паттерн" -#: app/transposition.c:201 +#: app/transposition.c:192 msgid "Current Track" -msgstr "ôÅËÕÝÉÊ ÔÒÜË" +msgstr "Текущий Ñ‚Ñ€Ñк" -#: app/transposition.c:205 +#: app/transposition.c:195 msgid "Current Instrument" -msgstr "ôÅËÕÝÉÊ ÉÎÓÔÒÕÍÅÎÔ" +msgstr "Текущий инÑтрумент" -#: app/transposition.c:206 +#: app/transposition.c:196 msgid "All Instruments" -msgstr "÷ÓÅ ÉÎÓÔÒÕÍÅÎÔÙ" +msgstr "Ð’Ñе инÑтрументы" -#: app/transposition.c:210 +#: app/transposition.c:199 msgid "Half note up" -msgstr "îÁ ÐÏÌÔÏÎÁ ×ÙÛÅ" +msgstr "Ðа полтона выше" -#: app/transposition.c:211 +#: app/transposition.c:200 msgid "Half note down" -msgstr "îÁ ÐÏÌÔÏÎÁ ÎÉÖÅ" +msgstr "Ðа полтона ниже" -#: app/transposition.c:212 +#: app/transposition.c:201 msgid "Octave up" -msgstr "îÁ ÏËÔÁ×Õ ×ÙÛÅ" +msgstr "Ðа октаву выше" -#: app/transposition.c:213 +#: app/transposition.c:202 msgid "Octave down" -msgstr "îÁ ÏËÔÁ×Õ ÎÉÖÅ" +msgstr "Ðа октаву ниже" -#: app/transposition.c:216 +#: app/transposition.c:205 msgid "Exchange 1 <-> 2" -msgstr "ïÂÍÅÎÑÔØ 1 <-> 2" +msgstr "ОбменÑÑ‚ÑŒ 1 <-> 2" -#: app/transposition.c:217 +#: app/transposition.c:206 msgid "Change 1 -> 2" -msgstr "óÍÅÎÉÔØ 1 -> 2" +msgstr "Сменить 1 -> 2" # or else Tools will mess with Instruments in the translated version :( -#: app/transposition.c:226 app/transposition.c:229 +#: app/transposition.c:215 msgid "Transposition Tools" -msgstr "óÒÅÄÓÔ×Á ÔÒÁÎÓÐÏÎÉÒÏ×ÁÎÉÑ" +msgstr "СредÑтва транÑпонированиÑ" -#: app/transposition.c:250 +#: app/transposition.c:225 msgid "Scope of the operation:" -msgstr "ïÂÌÁÓÔØ ÄÅÊÓÔ×ÉÑ:" +msgstr "ОблаÑÑ‚ÑŒ дейÑтвиÑ:" -#: app/transposition.c:257 +#: app/transposition.c:230 msgid "Note Transposition" -msgstr "ôÒÁÎÓÐÏÎÉÒÏ×ÁÎÉÅ ÎÏÔ" +msgstr "ТранÑпонирование нот" -#: app/transposition.c:288 +#: app/transposition.c:256 msgid "Instrument Changing" -msgstr "óÍÅÎÁ ÉÎÓÔÒÕÍÅÎÔÁ" +msgstr "Смена инÑтрумента" -#: app/transposition.c:303 +#: app/transposition.c:268 msgid "Instrument 1:" -msgstr "éÎÓÔÒÕÍÅÎÔ 1:" +msgstr "ИнÑтрумент 1:" -#: app/transposition.c:305 app/transposition.c:315 +#: app/transposition.c:270 app/transposition.c:279 msgid "Current instrument" -msgstr "ôÅËÕÝÉÊ ÉÎÓÔÒÕÍÅÎÔ" +msgstr "Текущий инÑтрумент" -#: app/transposition.c:313 +#: app/transposition.c:277 msgid "Instrument 2:" -msgstr "éÎÓÔÒÕÍÅÎÔ 2:" +msgstr "ИнÑтрумент 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "ТранÑпонирование производитÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в режиме редактированиÑ" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° паттерна." + +#: app/xm.c:200 +#, c-format +msgid "Pattern length out of range: %d." +msgstr "Длина паттерна вне диапазона: %d." + +#: app/xm.c:226 +msgid "Error loading notes." +msgstr "Ошибка при загрузке нот." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° ÑÑмпла." + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… ÑÑмпла." + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +msgid "Instrument header reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° инÑтрумента." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" +"Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ: чиÑло ÑÑмплов инÑтрумента > %u.\n" +"%s может попытатьÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ Ñледующий неповреждённый инÑтрумент.\n" +"Попробовать?" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ: размер заголовка != 40." + +#: app/xm.c:598 +msgid "Sample map reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑÑмплов." + +#: app/xm.c:602 +msgid "Volume envelope points reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ñ‡ÐµÐº огибающей громкоÑти." + +#: app/xm.c:607 +msgid "Panning envelope points reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ñ‡ÐµÐº огибающей панорамированиÑ." + +#: app/xm.c:613 +msgid "Envelope parameters reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² огибающей." -#: app/xm.c:196 +#: app/xm.c:632 #, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "äÌÉÎÁ ÐÁÔÔÅÒÎÁ ×ÎÅ ÄÉÁÐÁÚÏÎÁ: %d.\n" +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "Ðеверный тип вибрато %d, иÑпользую ÑинуÑоиду." -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "æÁÊÌ ÎÅ Ñ×ÌÑÅÔÓÑ ÉÎÓÔÒÕÍÅÎÔÏÍ XI." +#: app/xm.c:678 app/xm.c:1233 +msgid "Out of memory error!" +msgstr "Ошибка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти!" -#: app/xm.c:557 +#: app/xm.c:694 +msgid "The file is not an XI instrument." +msgstr "Файл не ÑвлÑетÑÑ Ð¸Ð½Ñтрументом XI." + +#: app/xm.c:717 #, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "îÅ×ÅÒÎÁÑ ×ÅÒÓÉÑ XI 0x%x\n" +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" +"ÐеизвеÑÑ‚Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¸Ð½Ñтрумента XI: 0x%04x != 0x0102\n" +"Ð’ÑÑ‘ равно попробовать его загрузить?" + +#: app/xm.c:729 +msgid "Instrument sample map reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ назначение ÑÑмплов инÑтрумента." -#: app/xm.c:587 +#: app/xm.c:735 +msgid "Instrument volume envelope points reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ñ‡ÐµÐº огибающей громкоÑти инÑтрумента." + +#: app/xm.c:742 +msgid "Instrument panning envelope points reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ñ‡ÐµÐº огибающей Ð¿Ð°Ð½Ð¾Ñ€Ð°Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñтрумента." + +#: app/xm.c:750 +msgid "Instrument envelope parameters reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² огибающей инÑтрумента." + +#: app/xm.c:769 #, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "îÅ×ÅÒÎÙÊ ÔÉÐ ×ÉÂÒÁÔÏ %d, ÉÓÐÏÌØÚÕÀ ÓÉÎÕÓÏÉÄÕ.\n" +msgid "Invalid vibtype %d, using Sine." +msgstr "Ðеверный тип вибрато %d, иÑпользую ÑинуÑоиду." + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" +"Ðекоторые Ñимволы в названиÑÑ… инÑтрумента или ÑÑмплов не могут быть " +"Ñохранены в формате XM. Они будут пропущены." + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° модулÑ." + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ‚Ñ‚ÐµÑ€Ð½Ð¾Ð²." -#: app/xm.c:859 app/xm.c:984 +#: app/xm.c:1122 app/xm.c:1271 msgid "Error while loading patterns." -msgstr "ïÛÉÂËÁ ÐÒÉ ÚÁÇÒÕÚËÅ ÐÁÔÔÅÒÎÏ×." +msgstr "Ошибка при загрузке паттернов." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" +"%d: Ðеверный параметр начала цикла. ÐепонÑтно, как его интерпретировать. " +"%04x %04x %04x" -#: app/xm.c:927 +#: app/xm.c:1200 msgid "Can't open file" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ" +msgstr "Ðевозможно открыть файл" + +#: app/xm.c:1215 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" +"Размер заголовка Ð¼Ð¾Ð´ÑƒÐ»Ñ != 276. Возможно Ñто модуль SoundTracker верÑии " +"меньшей, чем 0.0.12? :-)" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" +"ÐеизвеÑÑ‚Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ XM: 0x%04x!= 0x0104. Открытие его может привеÑти к " +"непредÑказуемым результатам.\n" +"Ð’ÑÑ‘ равно попробовать его открыть?" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "Ðеверное чиÑло каналов в модуле XM (допуÑтимое значение - от 1 до 32)" + +#: app/xm.c:1266 +msgid "Error while loading pattern order table." +msgstr "Ошибка при загрузке таблицы ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ‚Ñ‚ÐµÑ€Ð½Ð¾Ð²." -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "ïÛÉÂËÁ ÐÒÉ ÚÁÇÒÕÚËÅ ÉÎÓÔÒÕÍÅÎÔÏ×." +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" +"Ошибка загрузки инÑтрументов. ЧаÑÑ‚ÑŒ инÑтрументов может отÑутÑтвовать или " +"быть повреждённой." -#: app/xm.c:1001 +#: app/xm.c:1291 #, c-format msgid "" "Module contains sample(s) that are too long for the current mixer.\n" "Maximum sample length is %d." msgstr "" -"íÏÄÕÌØ ÓÏÄÅÒÖÉÔ ÓÜÍÐÌ(Ù) ÓÏ ÓÌÉÛËÏÍ ÂÏÌØÛÏÊ ÄÌÑ ÔÅËÕÝÅÇÏ ÍÉËÛÅÒÁ ÄÌÉÎÏÊ.\n" -"íÁËÓÉÍÁÌØÎÁÑ ÄÌÉÎÁ ÓÜÍÐÌÁ -- %d." +"Модуль Ñодержит ÑÑмпл(Ñ‹) Ñо Ñлишком большой Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ микшера длиной.\n" +"МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° ÑÑмпла — %d." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" +"Ðекоторые Ñимволы в названиÑÑ… модулÑ, инÑтрументов или ÑÑмплов невозможно " +"Ñохранить в формате XM. Они будут пропущены." + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "Уууу, при извлечение пеÑни произошла ошибка, Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€ÐµÑ€Ð²Ð°Ð½Ð°." + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "%s (Ошибка 0)" -#: app/xm.c:1399 +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "%s (Ошибка 1)" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "%s (Ошибка 2)" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "%s (Ошибка 3)" + +#: app/xm.c:1686 msgid "Not FastTracker XM and not supported MOD format!" -msgstr "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÆÏÒÍÁÔ MOD ÉÌÉ ÎÅ FastTracker XM!" +msgstr "Ðеподдерживаемый формат MOD или не FastTracker XM!" -#: app/xm.c:1414 app/xm.c:1435 +#: app/xm.c:1704 app/xm.c:1731 msgid "Error when file reading or unexpected end of file" -msgstr "ïÛÉÂËÁ ÐÒÉ ÞÔÅÎÉÉ ÆÁÊÌÁ ÉÌÉ ÎÅÏÖÉÄÁÎÎÙÊ ÅÇÏ ËÏÎÅÃ." +msgstr "Ошибка при чтении файла или неожиданный его конец." -#: app/xm.c:1418 +#: app/xm.c:1710 msgid "Incorrect or unsupported version of pattern file!" -msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ÉÌÉ ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÁÑ ×ÅÒÓÉÑ ÆÁÊÌÁ ÐÁÔÔÅÒÎÁ!" +msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð¸Ð»Ð¸ Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñ„Ð°Ð¹Ð»Ð° паттерна!" -#: app/xm.c:1422 +#: app/xm.c:1716 msgid "Incorrect pattern length!" -msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ÄÌÉÎÁ ÐÁÔÔÅÒÎÁ!" +msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° паттерна!" -#: app/xm.c:1468 +#: app/xm.c:1761 app/xm.c:1787 msgid "Error during saving pattern!" -msgstr "ïÛÉÂËÁ ÐÒÉ ÚÁÐÉÓÉ ÐÁÔÔÅÒÎÁ!" +msgstr "Ошибка при запиÑи паттерна!" + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÐ° ввода ALSA MIDI (%s)\n" -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "Ошибка Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о клиенте: %s\n" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "Ошибка отправки информации клиенту: %s\n" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñ€Ñ‚Ð° ÑеквенÑера (%s)\n" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "Ошибка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ñ€Ñ‚Ð¾Ð¼ ÑеквенÑера (%s)\n" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "Ошибка Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´ÐµÑкриптора (%s)\n" + +#: app/midi-settings.c:399 msgid "Auto connect" -msgstr "á×ÔÏÍÁÔÉÞÅÓËÏÅ ÓÏÅÄÉÎÅÎÉÅ" +msgstr "ÐвтоматичеÑкое Ñоединение" -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 +#: app/midi-settings.c:414 msgid "Channel" -msgstr "ëÁÎÁÌ" +msgstr "Канал" -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 +#: app/midi-settings.c:423 msgid "Client number" -msgstr "îÏÍÅÒ ËÌÉÅÎÔÁ" +msgstr "Ðомер клиента" -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 +#: app/midi-settings.c:434 msgid "Port number" -msgstr "îÏÍÅÒ ÐÏÒÔÁ" +msgstr "Ðомер порта" -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 +#: app/midi-settings.c:453 msgid "Input" -msgstr "÷×ÏÄ" +msgstr "Ввод" -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 +#: app/midi-settings.c:462 msgid "For future development" -msgstr "äÌÑ ÄÁÌØÎÅÊÛÅÊ ÒÁÚÒÁÂÏÔËÉ" +msgstr "Ð”Ð»Ñ Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐµÐ¹ разработки" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 +#: app/midi-settings.c:468 msgid "Output" -msgstr "÷ÙÈÏÄ" +msgstr "Выход" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 +#: app/midi-settings.c:479 msgid "Debug level" -msgstr "õÒÏ×ÅÎØ ÏÔÌÁÄËÉ" +msgstr "Уровень отладки" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 +#: app/midi-settings.c:492 msgid "Misc" -msgstr "ðÒÏÞÅÅ" +msgstr "Прочее" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 +#: app/midi-settings.c:532 msgid "MIDI Configuration" -msgstr "ëÏÎÆÉÇÕÒÁÃÉÑ MIDI..." +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ MIDI..." + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Паттерн" + +#: soundtracker.glade:49 +msgid "Track" +msgstr "ТрÑк" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_Стереть ноты" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "Ð’Ñ_тавить трек" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "_Удалить трек" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "Ðвтоувеличение параметра команды" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Ðвтоуменьшение параметра команды" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "С_нÑÑ‚ÑŒ выделение" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "_Эффекты интерполÑции" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Файл" + +#: soundtracker.glade:217 +msgid "_Open…" +msgstr "_Открыть…" + +#: soundtracker.glade:237 +msgid "Save _as…" +msgstr "Сохранить к_ак…" + +#: soundtracker.glade:252 +msgid "Save Module as _WAV…" +msgstr "Сохранить _модуль как WAV…" + +#: soundtracker.glade:261 +msgid "Save _XM without samples…" +msgstr "Сохранить XM _без ÑÑмплов…" + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "_Ðедавние" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Модуль" + +#: soundtracker.glade:309 +msgid "Clear _All" +msgstr "ОчиÑтить _вÑе" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "ОчиÑтить только _паттерны" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Оптимизировать модуль" + +#: soundtracker.glade:346 +msgid "_Set Optimal Amplification" +msgstr "Подобрать оптимальное _уÑиление" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Правка" + +#: soundtracker.glade:398 +msgid "_Jazz edit mode" +msgstr "_Многоканальное редактирование" + +#: soundtracker.glade:412 +msgid "Transp_osition…" +msgstr "_ТранÑпозициÑ" + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Паттерн" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "Тр_Ñк" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Выделение" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "_Режим выделениÑ" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "ТранÑпонировать на полтона вверх" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "ТранÑпонировать на полтона вниз" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "ТранÑпонировать на октаву вверх" + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "ТранÑпонировать на октаву вниз" + +#: soundtracker.glade:661 +msgid "_Load Pattern…" +msgstr "_Загрузить паттерн…" + +#: soundtracker.glade:670 +msgid "_Save Current Pattern…" +msgstr "_Сохранить текущий паттерн…" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_Ðайти Ñвободный паттерн" + +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Копировать текущий паттерн в Ñвободный" + +#: soundtracker.glade:703 +msgid "_Add Free Pattern" +msgstr "_Добавить Ñвободный паттерн" + +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "Добавить Ñ_вободный паттерн и копировать" + +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "_ОчиÑтить неиÑпользуемые паттерны" + +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "_Упаковать паттерны" + +#: soundtracker.glade:745 +msgid "S_hrink Current Pattern" +msgstr "С_жать текущий паттерн" + +#: soundtracker.glade:753 +msgid "_Expand Current Pattern" +msgstr "Р_аÑÑ‚Ñнуть текущий паттерн" + +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "Изменить ÑоÑтоÑние _перманентноÑти канала" + +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "Изменить ÑоÑтоÑние перманентноÑти _вÑех каналов" + +#: soundtracker.glade:789 +msgid "_Mute / Unmute Current Track" +msgstr "_Заглушить/задейÑтвовать текущий канал." + +#: soundtracker.glade:798 +msgid "_Unmute All Tracks" +msgstr "ЗадейÑтвовать вÑе _каналы." + +#: soundtracker.glade:807 +msgid "Current Track _Solo" +msgstr "_Соло на текущем канале" + +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_ИнÑтрумент" + +#: soundtracker.glade:827 +msgid "_Load XI…" +msgstr "_Загрузить XI…" + +#: soundtracker.glade:836 +msgid "_Save XI…" +msgstr "_Сохранить XI…" + +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_ОчиÑтить текущий" + +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_Удалить неиÑпользуемые инÑтрументы" + +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_ÐаÑтройки" + +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "_ОÑциллографы" + +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "За_циклить воÑпроизведение" + +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_ТрÑкер" + +#: soundtracker.glade:913 +msgid "_Flicker-free Scrolling" +msgstr "_Прокрутка без мерцаниÑ" + +#: soundtracker.glade:921 +msgid "_Previous Font" +msgstr "Пред_ыдущий шрифт" + +#: soundtracker.glade:930 +msgid "_Next Font" +msgstr "Сл_едующий шрифт" + +#: soundtracker.glade:944 +msgid "Change Preferred _Accidental Type" +msgstr "Изменить тип знаков _альтерации" + +#: soundtracker.glade:953 +msgid "Change Effect Column _Editing Direction" +msgstr "Сменить направление _ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора в колонке Ñффекта" + +#: soundtracker.glade:970 +msgid "_Keyboard Configuration…" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ _клавиатуры…" + +#: soundtracker.glade:980 +msgid "_Audio Configuration…" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ _аудио…" + +#: soundtracker.glade:990 +msgid "_GUI Configuration…" +msgstr "Конфи_Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ GUI…" + +#: soundtracker.glade:1000 +msgid "_MIDI Configuration…" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ _MIDI…" + +#: soundtracker.glade:1016 +msgid "_Disable Splash Screen" +msgstr "ÐвтоÑокрытие _заÑтавки" + +#: soundtracker.glade:1023 +msgid "_Save Settings Now" +msgstr "_Сохранить наÑтройки" + +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "СохранÑÑ‚ÑŒ наÑтройки при _выходе" + +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_Справка" -#~ msgid "Keep" -#~ msgstr "ëÁÄÒÉÒÏ×ÁÔØ" +#: soundtracker.glade:1053 +msgid "_About…" +msgstr "_О программе…" + +#: soundtracker.glade:1068 +msgid "Show _Tips…" +msgstr "_ПодÑказки…" + +#: soundtracker.glade:1078 +msgid "_XM Effects" +msgstr "_Эффекты XM…" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/rw.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/rw.gmo differ diff -Nru soundtracker-0.6.8/po/rw.po soundtracker-1.0.2~pre2/po/rw.po --- soundtracker-0.6.8/po/rw.po 2006-02-25 13:25:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/rw.po 2020-05-27 18:54:28.000000000 +0000 @@ -15,15 +15,23 @@ msgstr "" "Project-Id-Version: soundtracker 0.6.7\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2005-04-04 10:55-0700\n" "Last-Translator: Steven Michael Murphy \n" "Language-Team: Kinyarwanda \n" +"Language: rw\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "" @@ -31,2294 +39,3788 @@ msgid "Editing Output" msgstr "" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Insobanuramiterere" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Gufunga" - -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 -#, fuzzy, c-format -msgid "(%d bytes)" -msgstr "(%dBayite" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, fuzzy, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Gutinda" +#: app/cheat-sheet.c:76 +#, c-format +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -#, fuzzy -msgid "These changes won't take effect until you restart playing." -msgstr "Amahinduka INGARUKA Ongera utangire" +#: app/cheat-sheet.c:91 +msgid "XM Effects Cheat Sheet" +msgstr "" -# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Filter.Graphic.Export.BMP.Resolution.text -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -#, fuzzy -msgid "Resolution:" -msgstr "Imikemurire" +#: app/colors.c:42 +msgid "Background" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" +#: app/colors.c:43 +msgid "Cursor background" msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" msgstr "" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 +#: app/colors.c:44 #, fuzzy -msgid "ALSA card number:" -msgstr "Umubare" +msgid "Major lines" +msgstr "Urubariro Igaragaza cyane" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 +#: app/colors.c:44 #, fuzzy -msgid "ALSA device number:" -msgstr "APAREYE Umubare" +msgid "Major lines highlighting" +msgstr "Urubariro Igaragaza cyane" -#: app/drivers/alsa-input.c:374 -#, fuzzy, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" -msgstr "Gufungura APAREYE kugirango Ijwi Iyinjiza APAREYE" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines" +msgstr "Urubariro Igaragaza cyane" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 +#: app/colors.c:45 #, fuzzy -msgid "Required sound output format not supported.\n" -msgstr "Ijwi Ibisohoka Imiterere OYA" +msgid "Minor lines highlighting" +msgstr "Urubariro Igaragaza cyane" -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 +# filter/source\pdf\impdialog.src:RID_PDF_EXPORT_DLG.RB_SELECTION.text +#: app/colors.c:46 soundtracker.glade:142 #, fuzzy -msgid "Required sound output parameters not supported.\n" -msgstr "Ijwi Ibisohoka Ibigenga OYA" +msgid "Selection" +msgstr "Ihitamo" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, fuzzy, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Gutinda" +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "(Oya Ihitamo" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, fuzzy, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" -msgstr "Gufungura APAREYE kugirango Ijwi Ibisohoka APAREYE" +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -#, fuzzy -msgid "Required output-channel parameters not supported.\n" -msgstr "Ibisohoka Ibigenga OYA" +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" +msgstr "" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 +#: app/colors.c:48 #, fuzzy -msgid "Unable to prepare ALSA channel.\n" -msgstr "Kuri" +msgid "Delimiters" +msgstr "Gusiba" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 +#: app/colors.c:48 #, fuzzy -msgid "Alsa setup error.\n" -msgstr "Imikorere Ikosa" +msgid "Tracker delimiters" +msgstr "Gusiba" -#: app/drivers/esd-output.c:96 +#: app/colors.c:49 #, fuzzy -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." -msgstr "i Ibisohoka ni Ubwoko Bya i i Cyangwa Ibisohoka Akazi" +msgid "Channel numbers, loops" +msgstr "Umubare" -#: app/drivers/esd-output.c:161 -#, fuzzy, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" -msgstr "Kwihuza Kuri kugirango Ijwi Ibisohoka" +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" +msgstr "" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -#, fuzzy -msgid "no settings (yet), sorry!" -msgstr "Oya Amagenamiterere" +#: app/colors.c:50 +msgid "Cursor idle" +msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -#, fuzzy -msgid "Can't open file for writing." -msgstr "Gufungura IDOSIYE kugirango" +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -#, fuzzy -msgid "These changes won't take effect until you restart sampling." -msgstr "Amahinduka INGARUKA Ongera utangire" +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "" -#: app/drivers/oss-input.c:123 -#, fuzzy -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "g." +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "" -#: app/drivers/oss-input.c:234 -#, fuzzy, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" -msgstr "Gufungura kugirango" +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "Kuri Ihitamo" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, fuzzy, c-format -msgid "(%d samples)" -msgstr "(%dIngero- fatizo" +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" +msgstr "" -#: app/drivers/oss-output.c:217 +#: app/colors.c:53 #, fuzzy -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "g." +msgid "Mixer position" +msgstr "Ongera utangire Ibirindiro" -#: app/drivers/oss-output.c:391 -#, fuzzy, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" -msgstr "Gufungura kugirango Ijwi Ibisohoka" +#: app/colors.c:53 +msgid "Mixer position indicator" +msgstr "" -#: app/drivers/jack-output.c:254 -#, fuzzy -msgid "transport master" -msgstr "Mugenga" +#: app/colors.c:54 +msgid "Zero line" +msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" +#: app/colors.c:54 +msgid "Sample display zero line" msgstr "" -#: app/drivers/jack-output.c:279 -#, fuzzy, c-format -msgid "Running at %d Hz with %d frames" -msgstr "ku Na: Amakadiri" +#: app/colors.c:56 +msgid "White keys" +msgstr "" -#: app/drivers/jack-output.c:283 -#, fuzzy, c-format -msgid "Jack server not running?" -msgstr "Seriveri OYA" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "" -#: app/drivers/jack-output.c:327 -#, c-format -msgid "soundtracker" +#: app/colors.c:57 +msgid "Black keys" msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" +#: app/colors.c:58 +msgid "White keys pressed" msgstr "" -#: app/drivers/sun-output.c:209 -#, fuzzy -msgid "Output device (e.g. '/dev/audio'):" -msgstr "g." +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -# desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, fuzzy, c-format -msgid "%s: %s" -msgstr "%s:%s" +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "" -#: app/drivers/sun-output.c:395 -#, fuzzy, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s:Gukina" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" +#: app/colors.c:60 +msgid "White text pressed" msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, fuzzy, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s:Ijwi Imisobekere: OYA" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 -#, fuzzy, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s:Gushyiraho Funga Ingano" +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "" -#: app/drivers/sun-input.c:117 -#, fuzzy -msgid "Input device (e.g. '/dev/audio'):" -msgstr "g." +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-input.c:242 +#: app/colors.c:395 #, fuzzy, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s:Icyabitswe" - -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Uburebure" +msgid "%s colors configuration" +msgstr "Igaragaza cyane Iboneza" -# sc/source\core\src\compiler.src:RID_SC_FUNCTION_NAMES.SC_OPCODE_CURRENT.text -#: app/envelope-box.c:879 +#: app/colors.c:398 #, fuzzy -msgid "Current" -msgstr "KIGEZWEHO" +msgid "Reset" +msgstr "Ihindurakerekezo" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Ofuseti" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Agaciro" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Kongeramo" +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Gusiba" +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "APAREYE Umubare" + +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" msgstr "" -#: app/envelope-box.c:1000 -msgid "Sustain" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" msgstr "" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Akadomo" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +#, fuzzy +msgid "Unable to set channels number" +msgstr "Kuri" -#: app/envelope-box.c:1010 -msgid "Loop" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "tangira" - -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Impera" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" msgstr "" -#: app/file-operations.c:163 -#, fuzzy -msgid "Save Module" -msgstr "Kubika" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/file-operations.c:164 -msgid "Render WAV" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" msgstr "" -#: app/file-operations.c:165 -#, fuzzy -msgid "Save Song" -msgstr "Kubika" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" msgstr "" -#: app/file-operations.c:167 -#, fuzzy -msgid "Save Sample" -msgstr "Kubika" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/file-operations.c:168 -msgid "Load Instrument" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" msgstr "" -#: app/file-operations.c:169 -#, fuzzy -msgid "Save Instrument" -msgstr "Kubika" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:175 -msgid "File" -msgstr "Idosiye " +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:226 -#, fuzzy -msgid "Operation not supported." -msgstr "OYA" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%dIngero- fatizo" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" +#: app/drivers/alsa1x.c:743 +msgid "Dev" msgstr "" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." msgstr "" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" msgstr "" -#: app/gui-settings.c:354 +#: app/drivers/alsa1x.c:811 app/gui.c:476 #, fuzzy -msgid "Hexadecimal row numbers" -msgstr "Urubariro Imibare" +msgid "8 bit" +msgstr "8" -#: app/gui-settings.c:361 +#: app/drivers/alsa1x.c:811 app/gui.c:476 #, fuzzy -msgid "Use upper case letters for hex numbers" -msgstr "Nkuru kugirango Imibare" +msgid "16 bit" +msgstr "8" -#: app/gui-settings.c:368 -#, fuzzy -msgid "Asynchronous (IT-style) pattern editing" -msgstr "IMISUSIRE Ishusho" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "" -#: app/gui-settings.c:375 -#, fuzzy -msgid "Fxx command updates Tempo/BPM sliders" -msgstr "Komandi:" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "" -#: app/gui-settings.c:382 +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 #, fuzzy -msgid "Switch to tracker after loading/saving" -msgstr "Kuri Nyuma Itangira... Mu kubika" +msgid "These changes won't take effect until you restart playing." +msgstr "Amahinduka INGARUKA Ongera utangire" -#: app/gui-settings.c:389 +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 #, fuzzy -msgid "Save window geometry on exit" -msgstr "Kubika Idirishya Iyigamashusho ku Gusohoka" +msgid "These changes won't take effect until you restart sampling." +msgstr "Amahinduka INGARUKA Ongera utangire" -#: app/gui-settings.c:396 -#, fuzzy -msgid "Use note name B instead of H" -msgstr "Impugukirwa Izina: Bya H" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" msgstr "" -#: app/gui-settings.c:417 +# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Filter.Graphic.Export.BMP.Resolution.text +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 #, fuzzy -msgid "Scopes buffer size [MB]" -msgstr "Ingano" +msgid "Resolution:" +msgstr "Imikemurire" -#: app/gui-settings.c:436 -#, fuzzy -msgid "Track line format:" -msgstr "Umurongo Imiterere" +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "" -# svtools/source\dialogs\prnsetup.src:STR_SVT_PRNDLG_READY.text -#: app/gui-subs.c:32 app/gui.c:2369 -#, fuzzy -msgid "Ready." -msgstr "Cyiteguye" +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "" -#: app/gui-subs.c:33 -msgid "Playing song..." +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" msgstr "" -#: app/gui-subs.c:34 +#: app/drivers/alsa1x.c:914 #, fuzzy -msgid "Playing pattern..." -msgstr "Ishusho" +msgid "Number of Periods:" +msgstr "Bya" -#: app/gui-subs.c:35 +#: app/drivers/alsa1x.c:938 #, fuzzy -msgid "Loading module..." -msgstr "Modire" +msgid "Estimated audio delay:" +msgstr "Gutinda" -#: app/gui-subs.c:36 -msgid "Module loaded." +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." msgstr "" -#: app/gui-subs.c:37 -#, fuzzy -msgid "Saving module..." -msgstr "Modire" - -#: app/gui-subs.c:38 -msgid "Module saved." +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" msgstr "" -#: app/gui-subs.c:39 -#, fuzzy -msgid "Loading sample..." -msgstr "Urugero" - -#: app/gui-subs.c:40 -msgid "Sample loaded." +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" msgstr "" -#: app/gui-subs.c:41 -#, fuzzy -msgid "Saving sample..." -msgstr "Urugero" +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" msgstr "" -#: app/gui-subs.c:45 -msgid "Saving instrument..." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" msgstr "" -#: app/gui-subs.c:46 -msgid "Instrument saved." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" msgstr "" -#: app/gui-subs.c:48 -msgid "Song saved." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "Itangira..." + +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "Yego" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "Oya" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Kureka" +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Iburira" +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -# starmath/source\smres.src:RID_ERR_IDENT.text -#: app/gui-subs.c:615 -#, fuzzy -msgid "Error!" -msgstr "IKOSA" +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui.c:140 -msgid "Tempo" +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" msgstr "" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -#, fuzzy -msgid "Row highlighting configuration" -msgstr "Igaragaza cyane Iboneza" +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui.c:301 +#: app/drivers/alsa1x.c:1328 #, fuzzy -msgid "Highlight rows (major / minor):" -msgstr "Imbariro" +msgid "Unable to enable timestamping for playback" +msgstr "Kuri" -#: app/gui.c:478 +#: app/drivers/alsa1x.c:1329 #, fuzzy -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" -msgstr "Wabaushakagupfagukomeza." +msgid "Unable to enable timestamping for capture" +msgstr "Kuri" -#: app/gui.c:506 +#: app/drivers/alsa1x.c:1335 #, fuzzy -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" -msgstr "Wabaushakagupfagukomeza." +msgid "Unable to set timestamp type for playback" +msgstr "Kuri" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 +#: app/drivers/alsa1x.c:1336 #, fuzzy -msgid "No file selected." -msgstr "IDOSIYE Byahiswemo" +msgid "Unable to set timestamp type for capture" +msgstr "Kuri" -#: app/gui.c:563 -#, fuzzy -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" -msgstr "Kuri Kigenga i KIGEZWEHO Umushinga Amahinduka" +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" +msgstr "" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -#, fuzzy -msgid "Are you sure you want to overwrite the file?" -msgstr "Kuri Guhindura i IDOSIYE" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "" -#: app/gui.c:638 +#: app/drivers/alsa1x.c:1352 #, fuzzy -msgid "Error when opening pattern file!" -msgstr "Ryari: Gufungura%S Ishusho IDOSIYE" +msgid "Unable to prepare playback" +msgstr "Kuri" -#: app/gui.c:651 +#: app/drivers/alsa1x.c:1353 #, fuzzy -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" -msgstr "" -"Uburebure Bya i Ishusho BIHUYE Na: Bya KIGEZWEHO Ishusho in Modire Kuri " -"Guhindura>> i KIGEZWEHO Ishusho Uburebure" +msgid "Unable to prepare capture" +msgstr "Kuri" -#: app/gui.c:1719 -msgid "SoundTracker Startup" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" msgstr "" -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "Itangira..." - -#: app/gui.c:1804 -msgid "Use SoundTracker!" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" msgstr "" -#: app/gui.c:1862 -msgid "Load XM..." +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." msgstr "" -#: app/gui.c:1864 +#: app/drivers/irix-output.c:98 #, fuzzy -msgid "Save XM..." -msgstr "Kubika" +msgid "no settings (yet), sorry!" +msgstr "Oya Amagenamiterere" -#: app/gui.c:1867 -#, fuzzy -msgid "Render module as WAV..." -msgstr "Modire Nka" +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "" -#: app/gui.c:1870 +#: app/drivers/irix-output.c:178 #, fuzzy -msgid "Save song as XM..." -msgstr "Kubika Nka" +msgid "16 Bit output not supported." +msgstr "OYA" -#: app/gui.c:1872 +#: app/drivers/irix-output.c:184 #, fuzzy -msgid "Load current pattern..." -msgstr "KIGEZWEHO Ishusho" +msgid "Stereo output not supported." +msgstr "OYA" -#: app/gui.c:1874 +#: app/drivers/irix-output.c:192 #, fuzzy -msgid "Save current pattern..." -msgstr "Kubika KIGEZWEHO Ishusho" +msgid "Couldn't open audio port." +msgstr "Gufungura kugirango" -#: app/gui.c:1944 -msgid "Play Song" +#: app/drivers/oss.c:130 +msgid "OSS input: reading error" msgstr "" -#: app/gui.c:1956 -msgid "Play Pattern" +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" msgstr "" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Hagarara" - -#: app/gui.c:1973 -msgid "Pat" -msgstr "" +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, fuzzy, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Gutinda" -#: app/gui.c:1979 -#, fuzzy -msgid "Edited pattern" -msgstr "Ishusho" +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, fuzzy, c-format +msgid "(%d samples)" +msgstr "(%dIngero- fatizo" -#: app/gui.c:1992 +#: app/drivers/oss.c:247 #, fuzzy -msgid "When enabled, browsing the playlist does not change the edited pattern." -msgstr "Bikora i OYA Guhindura>> i Ishusho" +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "g." -#: app/gui.c:2008 +#: app/drivers/oss.c:248 #, fuzzy -msgid "Number of Channels:" -msgstr "Bya" +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "g." -#: app/gui.c:2025 -msgid "Pattern Length" +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" msgstr "" -#: app/gui.c:2060 -#, fuzzy -msgid "Set preferred accidental type" -msgstr "Bikunzwe Ubwoko" - -#: app/gui.c:2066 -msgid "Measure" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" msgstr "" -#: app/gui.c:2067 -#, fuzzy -msgid "Enable row highlighting" -msgstr "Urubariro Igaragaza cyane" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "Gufungura kugirango" -#: app/gui.c:2093 -msgid "Other..." -msgstr "Ikindi..." +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "Ijwi Ibisohoka Imiterere OYA" + +#: app/drivers/jack.c:367 +#, fuzzy, c-format +msgid "Running at %d Hz with %d frames" +msgstr "ku Na: Amakadiri" -#: app/gui.c:2129 +#: app/drivers/jack.c:371 #, fuzzy -msgid "Change effect column editing direction" -msgstr "INGARUKA Inkingi Icyerekezo" +msgid "Jack server not running?" +msgstr "Seriveri OYA" -#: app/gui.c:2160 -msgid "Global amplification" +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." msgstr "" -#: app/gui.c:2204 -#, fuzzy -msgid "Reset pitchbend to its normal value" -msgstr "Kuri Bisanzwe Agaciro" - -#: app/gui.c:2216 -msgid "Editing" +#: app/drivers/jack.c:542 +msgid "Update" msgstr "" -#: app/gui.c:2223 -msgid "Octave" +#: app/drivers/jack.c:551 +msgid "Jack autostart" msgstr "" -#: app/gui.c:2232 -msgid "Jump" -msgstr "Simbuka" - -#: app/gui.c:2241 -msgid "Instr" +#: app/drivers/jack.c:562 +msgid "declick" msgstr "" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Urugero" - -#: app/gui.c:2296 +#: app/drivers/jack.c:610 #, fuzzy -msgid "Welcome to SoundTracker!" -msgstr "Kuri" +msgid "Jack server is not running or some error occured." +msgstr "Seriveri OYA" -# desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text -#: app/gui.c:2323 +#: app/drivers/sdl-output.c:76 #, fuzzy -msgid "%M:%S" -msgstr "%M:%S" +msgid "Experimental SDL support." +msgstr "OYA" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "" +#: app/drivers/sun-output.c:212 +#, fuzzy +msgid "Output device (e.g. '/dev/audio'):" +msgstr "g." -#: app/instrument-editor.c:82 -msgid "VibSpeed" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" msgstr "" -#: app/instrument-editor.c:83 -msgid "VibDepth" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" msgstr "" -#: app/instrument-editor.c:84 -msgid "VibSweep" +#: app/drivers/sun-output.c:402 +#, c-format +msgid "SUN output (%s): Cannot handle %d Hz" msgstr "" -# sfx2/source\appl\app.src:STR_ERR_NOFILE.text -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -#, fuzzy -msgid "Can't open file." -msgstr "Ntibishoboka gufungura idosiye$." - -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sinisi" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "%s:Ijwi Imisobekere: OYA" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "kare" +#: app/drivers/sun-output.c:455 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "%s:Gushyiraho Funga Ingano" -#: app/instrument-editor.c:229 -msgid "Saw Down" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" +#: app/drivers/sun-input.c:77 +msgid "SUN input: reading error" msgstr "" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" msgstr "" -#: app/instrument-editor.c:242 -#, fuzzy -msgid "Volume envelope" -msgstr "Ibahasha" - -#: app/instrument-editor.c:250 +#: app/drivers/sun-input.c:131 #, fuzzy -msgid "Panning envelope" -msgstr "Ibahasha" +msgid "Input device (e.g. '/dev/audio'):" +msgstr "g." -#: app/instrument-editor.c:267 -msgid "Load Instrument..." +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" msgstr "" -#: app/instrument-editor.c:269 -#, fuzzy -msgid "Save Instrument..." -msgstr "Kubika" - -#: app/instrument-editor.c:271 -msgid "Load XI" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" msgstr "" -#: app/instrument-editor.c:277 -#, fuzzy -msgid "Save XI" -msgstr "Kubika" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" +msgstr "" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" +#: app/drivers/sun-input.c:273 +#, c-format +msgid "SUN input (%s): Cannot handle %d Hz" msgstr "" -# scp/source\cde\unxbasic_cde.lng:STR_BASIC_CDEINT_NETWORK_STRING2.text -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Ibisobanuro:" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "%s:Ijwi Imisobekere: OYA" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "gutangiza" +#: app/drivers/sun-input.c:332 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "%s:Gushyiraho Funga Ingano" -# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# -# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# -#: app/keys.c:57 -msgid "" -msgstr "" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Uburebure" -#: app/keys.c:129 +# sc/source\core\src\compiler.src:RID_SC_FUNCTION_NAMES.SC_OPCODE_CURRENT.text +#: app/envelope-box.c:1280 #, fuzzy -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "Urufunguzo i Bidasanzwe Impugukirwa kugirango Modire" +msgid "Current" +msgstr "KIGEZWEHO" -#: app/keys.c:131 -#, fuzzy -msgid "The key that increases \"jump\" value." -msgstr "Urufunguzo Simbuka Agaciro" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Ofuseti" -#: app/keys.c:133 -#, fuzzy -msgid "The key that decreases \"jump\" value." -msgstr "Urufunguzo Simbuka Agaciro" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Agaciro" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Kongeramo" -#: app/keys.c:146 -#, fuzzy +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "Gusiba" + +#: app/envelope-box.c:1369 msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" msgstr "" -"i Utubuto ku i Nkuru Bya i Mwandikisho C Urufunguzo ni i Urufunguzo Kuri i " -"Iburyo: Bya i Urufunguzo Bya i Utubuto in a Mwandikisho i Umubare Utubuto " -"Urubariro hejuru" -#: app/keys.c:152 -msgid "Lower Octave Keys..." +#: app/envelope-box.c:1384 +msgid "Sustain" msgstr "" -#: app/keys.c:153 -#, fuzzy -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." -msgstr "" -"i Utubuto ku i Ntoya Bya i Mwandikisho C Urufunguzo ni i Itangira Inyuguti " -"Urufunguzo Kuri i Iburyo: Bya i Ibumoso: Urufunguzo Bya i Utubuto in a " -"Mwandikisho i Urubariro hejuru" +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Akadomo" -#: app/keys.c:159 -msgid "Other Keys..." +#: app/envelope-box.c:1394 +msgid "Loop" msgstr "" -#: app/keys.c:160 -#, fuzzy -msgid "Various other keys" -msgstr "Ikindi Utubuto" - -#: app/keys.c:513 -msgid "Function" -msgstr "Umumaro" - -#: app/keys.c:514 -msgid "Assignment" -msgstr "ishyiraho" +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "tangira" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "" +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Impera" -#: app/keys.c:575 -msgid "Key Group Explanation" +#: app/file-operations.c:127 +#, c-format +msgid "" +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" msgstr "" -#: app/keys.c:592 -msgid "Key Explanation" +#: app/file-operations.c:225 +msgid "All supported types" msgstr "" -#: app/keys.c:623 -msgid "Modifiers:" +#: app/file-operations.c:245 +msgid "All files" msgstr "" -#: app/keys.c:649 -#, fuzzy -msgid "Learn selected key" -msgstr "Byahiswemo Urufunguzo" - -#: app/keys.c:655 -#, fuzzy -msgid "Learn all keys" -msgstr "Byose Utubuto" +#: app/file-operations.c:388 +msgid "File" +msgstr "Idosiye " -#: app/keys.c:661 -#, fuzzy -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" -msgstr "Kanda i Urufunguzo Ivanga Ibumoso: Urutonde Kuri Kureka" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Oke" +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Gushyiraho" +#: app/gui-settings.c:293 +msgid "Mixed" +msgstr "" -#: app/keys.c:771 -#, fuzzy -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." -msgstr "Mwandikisho Iboneza IDOSIYE ni Gukoresha i Ikiganiro" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "" -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" +#: app/gui-settings.c:321 +msgid "Scopes Frequency" msgstr "" -#: app/keys.c:1001 -#, fuzzy, c-format -msgid "Fast jump to channel %d" -msgstr "Simbuka Kuri" +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "" -#: app/keys.c:1076 +#: app/gui-settings.c:331 #, fuzzy -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." -msgstr "Urufunguzo Iboneza Gukoresha i i Ibikubiyemo" +msgid "Hexadecimal row numbers" +msgstr "Urubariro Imibare" -#: app/menubar.c:140 +#: app/gui-settings.c:337 #, fuzzy -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" -msgstr "Kuri iyi Amahinduka" +msgid "Use upper case letters for hex numbers" +msgstr "Nkuru kugirango Imibare" -#: app/menubar.c:162 +#: app/gui-settings.c:343 #, fuzzy -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" -msgstr "Kuri Kuvamo Amahinduka" +msgid "FT2-like volume column" +msgstr "Igice Igice Hejuru" -# sfx2/source\appl\minbox.src:RID_MAIL_INBOX.BTN_MAILINBOX_OPEN.text -#: app/menubar.c:419 -#, fuzzy -msgid "_Open..." -msgstr "Gufungura..." +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" +msgstr "" -# sfx2/source\doc\doc.src:STR_SAVEASDOC.text -#: app/menubar.c:421 -#, fuzzy -msgid "Save _as..." -msgstr "Gushyingura muri..." +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" +msgstr "" -#: app/menubar.c:427 -#, fuzzy -msgid "Save Module as _WAV..." -msgstr "Kubika Nka" +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "" -#: app/menubar.c:429 +#: app/gui-settings.c:367 #, fuzzy -msgid "Save XM without samples..." -msgstr "Kubika Ingero- fatizo" +msgid "Asynchronous (IT-style) pattern editing" +msgstr "IMISUSIRE Ishusho" -#: app/menubar.c:434 -#, fuzzy -msgid "_Quit" -msgstr "Kuvamo" +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "" -#: app/menubar.c:441 -msgid "Clear _All" +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" msgstr "" -#: app/menubar.c:448 -msgid "_Optimize Module" +#: app/gui-settings.c:398 +msgid "Record precise timings" msgstr "" -# dbaccess/source/ui/inc/toolbox.hrc:MID_SBA_QRY_CUT.text -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -#, fuzzy -msgid "C_ut" -msgstr "Gukata" +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -# dbaccess/source/ui/inc/toolbox.hrc:MID_SBA_QRY_COPY.text -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 +#: app/gui-settings.c:406 #, fuzzy -msgid "_Copy" -msgstr "Gukoporora" +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "Komandi:" -# dbaccess/source/ui/inc/toolbox.hrc:MID_SBA_QRY_PASTE.text -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -#, fuzzy -msgid "_Paste" -msgstr "Komeka" +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/menubar.c:475 +#: app/gui-settings.c:418 #, fuzzy -msgid "_Kill notes" -msgstr "Ibisobanuro" - -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "" +msgid "Switch to tracker after loading/saving" +msgstr "Kuri Nyuma Itangira... Mu kubika" -#: app/menubar.c:482 -msgid "_Delete track" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" msgstr "" -#: app/menubar.c:487 +#: app/gui-settings.c:430 #, fuzzy -msgid "Increment cmd value" -msgstr "Cmd+ Agaciro" +msgid "Save window geometry on exit" +msgstr "Kubika Idirishya Iyigamashusho ku Gusohoka" -#: app/menubar.c:489 +#: app/gui-settings.c:436 #, fuzzy -msgid "Decrement cmd value" -msgstr "Cmd+ Agaciro" +msgid "Use note name B instead of H" +msgstr "Impugukirwa Izina: Bya H" -#: app/menubar.c:496 -#, fuzzy -msgid "_Mark mode" -msgstr "Ubwoko" +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/menubar.c:498 app/menubar.c:554 -#, fuzzy -msgid "C_lear block marks" -msgstr "Funga" +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." +msgstr "" -#: app/menubar.c:503 app/menubar.c:562 +# filter/source\pdf\impdialog.src:RID_PDF_EXPORT_DLG.RB_SELECTION.text +#: app/gui-settings.c:456 #, fuzzy -msgid "_Interpolate effects" -msgstr "Ingaruka" +msgid "Selection mode" +msgstr "Ihitamo" -#: app/menubar.c:508 +#: app/gui-settings.c:472 #, fuzzy -msgid "Transpose half-note up" -msgstr "Impugukirwa Hejuru" +msgid "Scopes buffer size [MB]" +msgstr "Ingano" -#: app/menubar.c:510 -#, fuzzy -msgid "Transpose half-note down" -msgstr "Impugukirwa Hasi" +#: app/gui-settings.c:481 +msgid "Sample displays' mode" +msgstr "" -#: app/menubar.c:512 -#, fuzzy -msgid "Transpose octave up" -msgstr "Hejuru" +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "" -#: app/menubar.c:514 +# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# +# basctl/source\basicide\basidesh.src:RID_BASICMENU.MN_EDIT.text +# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# +# basctl/source\basicide\basidesh.src:RID_BASICPLUGINMENU.MN_PLEDIT.text +# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# +# basctl/source\basicide\macrodlg.src:RID_MACROCHOOSER.RID_PB_EDIT.text +# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# +# basctl/source\basicide\moduldlg.src:RID_TP_MODULS.RID_PB_EDIT.text +# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# +# basctl/source\basicide\moduldlg.src:RID_TP_LIBS.RID_PB_EDIT.text +#: app/gui-settings.c:486 #, fuzzy -msgid "Transpose octave down" -msgstr "Hasi" +msgid "Editor" +msgstr "Guhindura" -# dbaccess/source/ui/inc/toolbox.hrc:MID_SBA_QRY_PASTE.text -#: app/menubar.c:526 -#, fuzzy -msgid "P_aste" -msgstr "Komeka" +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "" -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" msgstr "" -#: app/menubar.c:534 -msgid "_Record keyreleases" +#: app/gui-settings.c:494 +msgid "Minmax" msgstr "" -#: app/menubar.c:539 -msgid "Transp_osition..." +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" msgstr "" -# sc/source\ui\src\autofmt.src:RID_SCDLG_AUTOFORMAT.BTN_PATTERN.text -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 +#: app/gui-settings.c:511 #, fuzzy -msgid "_Pattern" -msgstr "Ishusho" +msgid "Track line format:" +msgstr "Umurongo Imiterere" -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" +#: app/gui-settings.c:572 +msgid "Color scheme" msgstr "" -# filter/source\pdf\impdialog.src:RID_PDF_EXPORT_DLG.RB_SELECTION.text -#: app/menubar.c:546 app/menubar.c:571 +#: app/gui-settings.c:573 +msgid "Tracker colors configuration" +msgstr "" + +# svtools/source\dialogs\prnsetup.src:STR_SVT_PRNDLG_READY.text +#: app/gui-subs.c:34 app/gui.c:2975 #, fuzzy -msgid "_Selection" -msgstr "Ihitamo" +msgid "Ready." +msgstr "Cyiteguye" -#: app/menubar.c:578 -msgid "_Find Unused Pattern" +#: app/gui-subs.c:35 +msgid "Playing song..." msgstr "" -#: app/menubar.c:580 +#: app/gui-subs.c:36 #, fuzzy -msgid "_Copy Current to Unused Pattern" -msgstr "Kuri" +msgid "Playing pattern..." +msgstr "Ishusho" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "" +#: app/gui-subs.c:37 +#, fuzzy +msgid "Loading module..." +msgstr "Modire" -#: app/menubar.c:587 -msgid "_Pack Patterns" +#: app/gui-subs.c:38 +msgid "Module loaded." msgstr "" -#: app/menubar.c:592 +#: app/gui-subs.c:39 #, fuzzy -msgid "_Save Current Pattern" -msgstr "Kubika" +msgid "Saving module..." +msgstr "Modire" -#: app/menubar.c:594 -msgid "L_oad Pattern" +#: app/gui-subs.c:40 +msgid "Module saved." msgstr "" -#: app/menubar.c:599 -msgid "Sh_rink Current Pattern" +#: app/gui-subs.c:41 +#, fuzzy +msgid "Loading sample..." +msgstr "Urugero" + +#: app/gui-subs.c:42 +msgid "Sample loaded." msgstr "" -#: app/menubar.c:601 -msgid "_Expand Current Pattern" +#: app/gui-subs.c:43 +#, fuzzy +msgid "Saving sample..." +msgstr "Urugero" + +#: app/gui-subs.c:44 +msgid "Sample saved." msgstr "" -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" +#: app/gui-subs.c:45 +msgid "Loading instrument..." msgstr "" -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" +#: app/gui-subs.c:46 +msgid "Instrument loaded." msgstr "" -#: app/menubar.c:618 -msgid "_Load XI..." +#: app/gui-subs.c:47 +msgid "Saving instrument..." msgstr "" -#: app/menubar.c:620 -#, fuzzy -msgid "_Save XI..." -msgstr "Kubika" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "" -#: app/menubar.c:625 -msgid "_Clear Current" +#: app/gui-subs.c:49 +msgid "Saving song..." msgstr "" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" +#: app/gui-subs.c:50 +msgid "Song saved." msgstr "" -#: app/menubar.c:637 +# starmath/source\smres.src:RID_ERR_IDENT.text +#: app/gui-subs.c:396 app/gui-subs.h:224 #, fuzzy -msgid "_Flicker-free scrolling" -msgstr "Kigenga" +msgid "Error!" +msgstr "IKOSA" -#: app/menubar.c:640 +#: app/gui-subs.c:414 #, fuzzy -msgid "_Previous font" -msgstr "Intego- nyuguti" - -#: app/menubar.c:642 -#, fuzzy -msgid "_Next font" -msgstr "Intego- nyuguti" - -#: app/menubar.c:647 -#, fuzzy -msgid "Change preferred _accidental type" -msgstr "Bikunzwe Ubwoko" - -#: app/menubar.c:649 -#, fuzzy -msgid "Change effect column editing _direction" -msgstr "INGARUKA Inkingi Icyerekezo" - -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "" +msgid "Question" +msgstr "Insobanuramiterere" -#: app/menubar.c:660 -msgid "_Tracker" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." msgstr "" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" msgstr "" -#: app/menubar.c:666 -msgid "_Audio Configuration..." +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." msgstr "" -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Iburira" -#: app/menubar.c:674 -msgid "_MIDI Configuration..." +#: app/gui-subs.h:225 +msgid "Information" msgstr "" -#: app/menubar.c:679 +#: app/gui.c:251 app/gui.c:2666 #, fuzzy -msgid "Disable splash screen" -msgstr "Mugaragaza" +msgid "Row highlighting configuration" +msgstr "Igaragaza cyane Iboneza" -#: app/menubar.c:681 +#: app/gui.c:260 #, fuzzy -msgid "_Save Settings now" -msgstr "Kubika NONEAHA" +msgid "Highlight rows (major / minor):" +msgstr "Imbariro" -#: app/menubar.c:683 -#, fuzzy -msgid "Save Settings on _Exit" -msgstr "Kubika ku" +#: app/gui.c:330 +msgid "" +msgstr "" -# offmgr/source\offapp\intro\intro.hrc:TEXT_DEFAULTABOUT.text -#: app/menubar.c:690 +#: app/gui.c:451 #, fuzzy -msgid "_About..." -msgstr "Ibyerekeye" - -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "" +msgid "Saving module failed" +msgstr "Modire" -#: app/menubar.c:697 -msgid "_XM Effects..." +#: app/gui.c:535 +msgid "File output" msgstr "" -# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_HFCMD_FILE.text -#: app/menubar.c:704 +#: app/gui.c:612 #, fuzzy -msgid "_File" -msgstr "IDOSIYE" +msgid "Can't open file for writing" +msgstr "Gufungura IDOSIYE kugirango" -# basctl/source\basicide\basidesh.src:RID_STR_STDMODULENAME.text -#: app/menubar.c:705 +#: app/gui.c:618 #, fuzzy -msgid "_Module" -msgstr "Modire" +msgid "Can't change file ownership" +msgstr "Gufungura IDOSIYE kugirango" -# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# -# basctl/source\basicide\basidesh.src:RID_BASICMENU.MN_EDIT.text -# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# -# basctl/source\basicide\basidesh.src:RID_BASICPLUGINMENU.MN_PLEDIT.text -# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# -# basctl/source\basicide\macrodlg.src:RID_MACROCHOOSER.RID_PB_EDIT.text -# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# -# basctl/source\basicide\moduldlg.src:RID_TP_MODULS.RID_PB_EDIT.text -# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# -# basctl/source\basicide\moduldlg.src:RID_TP_LIBS.RID_PB_EDIT.text -#: app/menubar.c:706 -#, fuzzy -msgid "_Edit" -msgstr "Guhindura" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "" -#: app/menubar.c:709 -msgid "_Instrument" +#: app/gui.c:660 +msgid "An error occured while writing to file" msgstr "" -#: app/menubar.c:710 +#: app/gui.c:691 #, fuzzy -msgid "_Settings" -msgstr "Amagenamiterere" +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "Wabaushakagupfagukomeza." -#: app/menubar.c:711 +#: app/gui.c:715 #, fuzzy -msgid "_Help" -msgstr "Ifashayobora" +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "Wabaushakagupfagukomeza." -#: app/mixers/integer32.c:493 +#: app/gui.c:757 #, fuzzy -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" -msgstr "Oya Oya Muyunguruzi Kinini Urugero Uburebure" +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "Kuri Kigenga i KIGEZWEHO Umushinga Amahinduka" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "" +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "Ryari: Gufungura%S Ishusho IDOSIYE" -#: app/module-info.c:115 -msgid "#smpl" +#: app/gui.c:829 +#, fuzzy +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" msgstr "" +"Uburebure Bya i Ishusho BIHUYE Na: Bya KIGEZWEHO Ishusho in Modire Kuri " +"Guhindura>> i KIGEZWEHO Ishusho Uburebure" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "" +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "tangira" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Kurikiramurongo" +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "Itangira..." -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" +#: app/gui.c:2195 +msgid "Use SoundTracker!" msgstr "" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "" +#: app/gui.c:2216 +#, fuzzy +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "Kuri Kuvamo Amahinduka" -#: app/module-info.c:164 -msgid "Songname:" +#: app/gui.c:2279 +msgid "Amplification estimation" msgstr "" -#: app/module-info.c:179 -msgid "Frequencies:" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." msgstr "" -#: app/module-info.c:184 -msgid "ProTracker Mode" +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "Itangira..." + +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" msgstr "" -#: app/module-info.c:395 -#, fuzzy, c-format -msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" -msgstr "Kidakoreshwa Na Kwongera gupanga" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" -#: app/playlist.c:526 -#, fuzzy -msgid "Insert pattern that is being edited" -msgstr "Ishusho ni" +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" -#: app/playlist.c:535 +#: app/gui.c:2400 #, fuzzy -msgid "Remove current playlist entry" -msgstr "KIGEZWEHO Icyinjijwe" +msgid "Extended pattern (*.xp)" +msgstr "Ishusho" -#: app/playlist.c:543 -msgid "Add + Cpy" +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" msgstr "" -#: app/playlist.c:545 -#, fuzzy -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +#: app/gui.c:2433 +msgid "Load Module" msgstr "" -"a Kigenga Ishusho KIGEZWEHO Ibirindiro Na Gukoporora KIGEZWEHO Ishusho Kuri" -#: app/playlist.c:548 -msgid "Add Free" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" msgstr "" -#: app/playlist.c:550 +#: app/gui.c:2434 #, fuzzy -msgid "Add a free pattern behind current position" -msgstr "a Kigenga Ishusho KIGEZWEHO Ibirindiro" +msgid "Save Module" +msgstr "Kubika" -#: app/playlist.c:560 +#: app/gui.c:2434 #, fuzzy -msgid "Len" -msgstr "Uburebure" +msgid "Save the current module" +msgstr "Kubika KIGEZWEHO Ishusho" + +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "" -#: app/playlist.c:574 +#: app/gui.c:2436 #, fuzzy -msgid "Song length" -msgstr "Uburebure" +msgid "Render the current module as WAV file" +msgstr "Modire Nka" -#: app/playlist.c:580 +#: app/gui.c:2438 #, fuzzy -msgid "Rstrt" -msgstr "tangira" +msgid "Save XM without samples..." +msgstr "Kubika Ingero- fatizo" -#: app/playlist.c:593 +#: app/gui.c:2439 #, fuzzy -msgid "Song restart position" -msgstr "Ongera utangire Ibirindiro" +msgid "Load current pattern..." +msgstr "KIGEZWEHO Ishusho" -#: app/preferences.c:74 +#: app/gui.c:2440 #, fuzzy -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" -msgstr "A bushyinguro Byaremwe in bushyinguro Kuri Iboneza Idosiye" +msgid "Save current pattern..." +msgstr "Kubika KIGEZWEHO Ishusho" -#: app/sample-editor.c:234 -msgid "No loop" +#: app/gui.c:2507 +msgid "Play Song" msgstr "" -#: app/sample-editor.c:236 -msgid "PingPong" +#: app/gui.c:2516 +msgid "Play Pattern" msgstr "" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -#, fuzzy -msgid "8 bits" -msgstr "8" - -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" +#: app/gui.c:2525 +msgid "Play From Cursor" msgstr "" -#: app/sample-editor.c:247 -msgid "Sample Editor" +#: app/gui.c:2534 +msgid "Play Block" msgstr "" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Ijwi" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Hagarara" -#: app/sample-editor.c:288 -msgid "Panning" +#: app/gui.c:2553 +msgid "Loop Playback" msgstr "" -#: app/sample-editor.c:289 -msgid "Finetune" +#: app/gui.c:2562 +msgid "Pat" msgstr "" -# filter/source\pdf\impdialog.src:RID_PDF_EXPORT_DLG.RB_SELECTION.text -#: app/sample-editor.c:309 +#: app/gui.c:2568 #, fuzzy -msgid "Selection:" -msgstr "Ihitamo" - -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Ntacyo" - -#: app/sample-editor.c:319 -msgid "All" -msgstr "Byose" - -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Uburebure:" +msgid "Edited pattern" +msgstr "Ishusho" -#: app/sample-editor.c:356 +#: app/gui.c:2578 #, fuzzy -msgid "Set as loop" -msgstr "Nka" +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "Bikora i OYA Guhindura>> i Ishusho" -#: app/sample-editor.c:364 -msgid "RelNote" +#: app/gui.c:2583 +msgid "Pattern Length" msgstr "" -#: app/sample-editor.c:375 -msgid "Load Sample..." +#: app/gui.c:2593 +msgid "Tempo" msgstr "" -#: app/sample-editor.c:377 +#: app/gui.c:2605 #, fuzzy -msgid "Save WAV..." -msgstr "Kubika" +msgid "Number of Channels:" +msgstr "Bya" -#: app/sample-editor.c:379 +#: app/gui.c:2632 #, fuzzy -msgid "Save region as WAV..." -msgstr "Kubika Nka" +msgid "Set preferred accidental type" +msgstr "Bikunzwe Ubwoko" + +#: app/gui.c:2638 +msgid "Measure" +msgstr "" -#: app/sample-editor.c:392 +#: app/gui.c:2639 #, fuzzy -msgid "Save WAV" -msgstr "Kubika" +msgid "Enable row highlighting" +msgstr "Urubariro Igaragaza cyane" -#: app/sample-editor.c:402 +#: app/gui.c:2660 +msgid "Other..." +msgstr "Ikindi..." + +#: app/gui.c:2687 #, fuzzy -msgid "Save Region" -msgstr "Kubika" +msgid "Change effect column editing direction" +msgstr "INGARUKA Inkingi Icyerekezo" -#: app/sample-editor.c:413 -msgid "Monitor" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" msgstr "" -#: app/sample-editor.c:419 -msgid "Volume Ramp" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" msgstr "" -#: app/sample-editor.c:425 -msgid "Trim" +#: app/gui.c:2740 +msgid "Pitchbend" msgstr "" -#: app/sample-editor.c:436 +#: app/gui.c:2748 #, fuzzy -msgid "Zoom to selection" -msgstr "Kuri Ihitamo" +msgid "Reset pitchbend to its normal value" +msgstr "Kuri Bisanzwe Agaciro" -# starmath/sdi\smslots.src:SID_ADJUST.text -#: app/sample-editor.c:442 -#, fuzzy -msgid "Show all" -msgstr "Kwerekana Byose" +#: app/gui.c:2760 +msgid "Editing" +msgstr "" -#: app/sample-editor.c:448 -#, fuzzy -msgid "Zoom in (+50%)" -msgstr "in 50 %%" +#: app/gui.c:2767 +msgid "Octave" +msgstr "" -#: app/sample-editor.c:454 -#, fuzzy -msgid "Zoom out (-50%)" -msgstr "Inyuma 50 %%" +#: app/gui.c:2776 +msgid "Jump" +msgstr "Simbuka" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Ihindurakerekezo" - -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Gukata" - -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Gukuraho" - -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Guporora" +#: app/gui.c:2785 +msgid "Instr" +msgstr "" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Komeka" +#: app/gui.c:2801 +msgid "Sample" +msgstr "Urugero" -#: app/sample-editor.c:494 -msgid "Clear Sample" +#: app/gui.c:2827 +msgid "dB" msgstr "" -#: app/sample-editor.c:500 -#, fuzzy -msgid "Crop" -msgstr "Guporora" - -#: app/sample-editor.c:564 -#, fuzzy -msgid "(no selection)" -msgstr "(Oya Ihitamo" +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "Kuri" -#: app/sample-editor.c:1069 +# desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text +#: app/gui.c:2883 app/sample-editor.c:2238 #, fuzzy -msgid "Out of memory for copybuffer.\n" -msgstr "Bya Ububiko kugirango" - -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +msgid "%M:%S" +msgstr "%M:%S" -#: app/sample-editor.c:1301 +# sfx2/source\appl\app.src:STR_ERR_NOFILE.text +#: app/instrument-editor.c:184 app/instrument-editor.c:216 #, fuzzy -msgid "Out of memory for sample data." -msgstr "Bya Ububiko kugirango Urugero Ibyatanzwe" +msgid "Can't open file." +msgstr "Ntibishoboka gufungura idosiye$." -# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_CLASS_READ.text -#: app/sample-editor.c:1317 app/sample-editor.c:1329 +#: app/instrument-editor.c:209 #, fuzzy -msgid "Read error." -msgstr "Ikosa- gusoma" +msgid "Saving instrument failed." +msgstr "Kubika" -#: app/sample-editor.c:1476 +#: app/instrument-editor.c:232 #, fuzzy -msgid "Load stereo sample" -msgstr "Urugero" +msgid "Clear current instrument?" +msgstr "Kubika" -#: app/sample-editor.c:1484 -#, fuzzy -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" -msgstr "Byahiswemo a Urugero Ingero- fatizo Guhitamo Kuri Ibirimo" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sinisi" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Ibumoso" +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "kare" -#: app/sample-editor.c:1501 -msgid "Mix" +#: app/instrument-editor.c:252 +msgid "Saw Down" msgstr "" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Iburyo" - -#: app/sample-editor.c:1575 -msgid "Signed" +#: app/instrument-editor.c:252 +msgid "Saw Up" msgstr "" -#: app/sample-editor.c:1575 -msgid "Unsigned" -msgstr "Bitashizweho umukono" - -#: app/sample-editor.c:1576 -msgid "Little-Endian" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" msgstr "" -#: app/sample-editor.c:1576 -msgid "Big-Endian" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" msgstr "" -#: app/sample-editor.c:1577 -msgid "Mono" +#: app/instrument-editor.c:268 +#, fuzzy +msgid "Volume envelope" +msgstr "Ibahasha" + +#: app/instrument-editor.c:276 +#, fuzzy +msgid "Panning envelope" +msgstr "Ibahasha" + +#: app/instrument-editor.c:292 +msgid "Load Instrument" msgstr "" -#: app/sample-editor.c:1577 -msgid "Stereo" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" msgstr "" -#: app/sample-editor.c:1589 +#: app/instrument-editor.c:295 #, fuzzy -msgid "Load raw sample" -msgstr "Urugero" +msgid "Save Instrument" +msgstr "Kubika" -#: app/sample-editor.c:1597 +#: app/instrument-editor.c:297 #, fuzzy -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" +msgid "Save the current instrument" +msgstr "Kubika" + +#: app/instrument-editor.c:299 +msgid "Load XI" msgstr "" -"Byahiswemo a Urugero ni a Imiterere Ibirimo i Ibyatanzwe NONEAHA Guhitamo a " -"Imiterere" -#: app/sample-editor.c:1623 +#: app/instrument-editor.c:305 #, fuzzy -msgid "Word format:" -msgstr "Imiterere" +msgid "Save XI" +msgstr "Kubika" -#: app/sample-editor.c:1670 -msgid "Sampling Rate:" +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "Igice Hejuru" + +#: app/instrument-editor.c:344 +msgid "Vibrato:" msgstr "" -#: app/sample-editor.c:1681 -msgid "8363" +#: app/instrument-editor.c:354 +msgid "Type" msgstr "" -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "OKE" +#: app/instrument-editor.c:356 +msgid "Speed" +msgstr "" -#: app/sample-editor.c:1748 -#, fuzzy -msgid "Can't read sample" -msgstr "Gusoma Urugero" +#: app/instrument-editor.c:359 +msgid "Depth" +msgstr "" -#: app/sample-editor.c:1761 -#, fuzzy -msgid "Sample is too long for current mixer module. Loading anyway." -msgstr "ni kugirango KIGEZWEHO Modire" +#: app/instrument-editor.c:361 +msgid "Sweep" +msgstr "" -#: app/sample-editor.c:1785 -#, fuzzy -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "8 Na Ingero- fatizo Na: Hejuru Kuri 2." +# scp/source\cde\unxbasic_cde.lng:STR_BASIC_CDEINT_NETWORK_STRING2.text +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Ibisobanuro:" -#: app/sample-editor.c:1968 -#, fuzzy -msgid "Please select region first." -msgstr "Guhitamo Itangira" +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "gutangiza" -#: app/sample-editor.c:2012 -#, fuzzy -msgid "Start sampling" -msgstr "Gutangira" +# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# +# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# +#: app/keys.c:58 +msgid "" +msgstr "" + +#: app/keys.c:134 +msgid "KOFF" +msgstr "" -#: app/sample-editor.c:2042 +#: app/keys.c:134 #, fuzzy -msgid "No sampling driver available" -msgstr "Musomyi: Bihari" +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "Urufunguzo i Bidasanzwe Impugukirwa kugirango Modire" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" +#: app/keys.c:136 +msgid "JMP+" msgstr "" -#: app/sample-editor.c:2104 +#: app/keys.c:136 #, fuzzy -msgid "Out of memory while sampling!" -msgstr "Bya Ububiko" +msgid "The key that increases \"jump\" value." +msgstr "Urufunguzo Simbuka Agaciro" -#: app/sample-editor.c:2155 -msgid "" +#: app/keys.c:138 +msgid "JMP-" msgstr "" -#: app/sample-editor.c:2186 +#: app/keys.c:138 #, fuzzy -msgid "Recorded sample is too long for current mixer module. Using it anyway." -msgstr "Urugero ni kugirango KIGEZWEHO Modire" +msgid "The key that decreases \"jump\" value." +msgstr "Urufunguzo Simbuka Agaciro" -#: app/sample-editor.c:2239 -msgid "Normalize" +#: app/keys.c:140 +msgid "PlayMod" msgstr "" -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Gukora" +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Modire" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" +#: app/keys.c:142 +msgid "RecMod" msgstr "" -#: app/sample-editor.c:2269 +#: app/keys.c:142 #, fuzzy -msgid "Perform linear volume fade on Selection" -msgstr "By'umurongo Igice Kwijima ku" +msgid "Play module + recording." +msgstr "Ishusho" -#: app/sample-editor.c:2281 -#, fuzzy -msgid "Left [%]:" -msgstr "Ibumoso:" +#: app/keys.c:144 +msgid "PlayPat" +msgstr "" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "H" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Ishusho" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "D" +#: app/keys.c:146 +msgid "RecPat" +msgstr "" -#: app/sample-editor.c:2298 +#: app/keys.c:146 #, fuzzy -msgid "Right [%]:" -msgstr "Iburyo:" +msgid "Play pattern + recording." +msgstr "Ishusho" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/keys.c:148 +msgid "PlayCur" msgstr "" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/keys.c:148 +msgid "Play module from cursor." msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/keys.c:150 +msgid "RecCur" msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Ishusho" + +#: app/keys.c:152 +msgid "PlayRow" msgstr "" -#: app/tips-dialog.c:50 +#: app/keys.c:152 #, fuzzy -msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +msgid "Play current pattern row." +msgstr "KIGEZWEHO Ishusho" + +#: app/keys.c:154 +msgid "PlayBlk" msgstr "" -"Kuri Gishya Kuri iyi Ubwoko Bya Porogaramu Kuri Kubona Cyangwa Idosiye " -"Itangira Na Gukina Na:" -#: app/tips-dialog.c:55 +#: app/keys.c:154 #, fuzzy -msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." -msgstr "Ubwoko Guhindura Ubwoko Birenzeho Kuri ku i Ingano Bya i Igikoresho" +msgid "Play selected block." +msgstr "Byahiswemo Urufunguzo" -#: app/tips-dialog.c:59 -#, fuzzy -msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" -msgstr "i Utudomo in i Urugero Muhinduzi ku ikoresha i Ibumoso: Na Iburyo:" +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "" -#: app/tips-dialog.c:62 +#: app/keys.c:167 #, fuzzy msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" -msgstr "Kuri Birenzeho Ibyerekeye Na i a ku HTTP www org" +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." +msgstr "" +"i Utubuto ku i Nkuru Bya i Mwandikisho C Urufunguzo ni i Urufunguzo Kuri i " +"Iburyo: Bya i Urufunguzo Bya i Utubuto in a Mwandikisho i Umubare Utubuto " +"Urubariro hejuru" -#: app/tips-dialog.c:65 -#, fuzzy -msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +#: app/keys.c:172 +msgid "Lower Octave Keys..." msgstr "" -"Kugenera... Ingero- fatizo Bya Kuri i Utubuto Urugero Na Hanyuma ku i " -"Mwandikisho in Muhinduzi Ipaji" -#: app/tips-dialog.c:69 +#: app/keys.c:173 #, fuzzy msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" -msgstr "indanga in a Umubare Icyinjijwe Umwanya Kanda Cyangwa Kuri Kigenga" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." +msgstr "" +"i Utubuto ku i Ntoya Bya i Mwandikisho C Urufunguzo ni i Itangira Inyuguti " +"Urufunguzo Kuri i Iburyo: Bya i Ibumoso: Urufunguzo Bya i Utubuto in a " +"Mwandikisho i Urubariro hejuru" + +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "" -#: app/tips-dialog.c:81 +#: app/keys.c:179 #, fuzzy -msgid "SoundTracker Tip of the day" -msgstr "Bya i UMUNSI" +msgid "Various other keys" +msgstr "Ikindi Utubuto" -#: app/tips-dialog.c:154 -msgid "Previous Tip" +#: app/keys.c:578 +msgid "Function" +msgstr "Umumaro" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "ishyiraho" + +#: app/keys.c:588 +msgid "Keyboard Configuration" msgstr "" -#: app/tips-dialog.c:162 -msgid "Next Tip" +#: app/keys.c:630 +msgid "Key Group Explanation" msgstr "" -#: app/tips-dialog.c:174 -#, fuzzy -msgid "Show tip next time" -msgstr "Inyobora: Komeza>> Igihe" +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "" -#: app/track-editor.c:113 -msgid "Arpeggio" +#: app/keys.c:668 +msgid "Modifiers:" msgstr "" -#: app/track-editor.c:114 +#: app/keys.c:687 #, fuzzy -msgid "Porta up" -msgstr "Hejuru" +msgid "Learn selected key" +msgstr "Byahiswemo Urufunguzo" -#: app/track-editor.c:115 +#: app/keys.c:692 +#, fuzzy +msgid "Learn all keys" +msgstr "Byose Utubuto" + +#: app/keys.c:702 +#, fuzzy +msgid "" +"Please press the desired key combination!\n" +"Click into left list to cancel" +msgstr "Kanda i Urufunguzo Ivanga Ibumoso: Urutonde Kuri Kureka" + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "" + +#: app/keys.c:949 +#, fuzzy, c-format +msgid "Fast jump to channel %d" +msgstr "Simbuka Kuri" + +#: app/keys.c:1028 +#, fuzzy +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." +msgstr "Urufunguzo Iboneza Gukoresha i i Ibikubiyemo" + +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" +msgstr "" + +#: app/menubar.c:126 +msgid "" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." +msgstr "" + +#: app/menubar.c:151 +#, fuzzy +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "Kuri iyi Amahinduka" + +#: app/mixers/integer32.c:439 +#, fuzzy +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "Oya Oya Muyunguruzi Kinini Urugero Uburebure" + +#: app/mixers/kbfloat.c:838 +#, fuzzy +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "Oya Oya Muyunguruzi Kinini Urugero Uburebure" + +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" + +#: app/module-info.c:63 app/module-info.c:64 +msgid "Cyclic" +msgstr "" + +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" + +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" + +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" + +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" + +#: app/module-info.c:481 +msgid "Period" +msgstr "" + +#: app/module-info.c:484 +msgid "s" +msgstr "" + +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +# scp/source\cde\unxbasic_cde.lng:STR_BASIC_CDEINT_NETWORK_STRING2.text +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Ibisobanuro:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "Kurikiramurongo" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "" + +#: app/module-info.c:756 +msgid "Extended Instrument/Sample Editor" +msgstr "" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +msgid "Copy Instrument 1 to Instrument 2" +msgstr "" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Kubika" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "1. 2." + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, fuzzy, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "Kidakoreshwa Na Kwongera gupanga" + +#: app/playlist.c:505 +#, fuzzy +msgid "Insert pattern that is being edited" +msgstr "Ishusho ni" + +#: app/playlist.c:511 +#, fuzzy +msgid "Remove current playlist entry" +msgstr "KIGEZWEHO Icyinjijwe" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "" + +#: app/playlist.c:519 +#, fuzzy +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" +"a Kigenga Ishusho KIGEZWEHO Ibirindiro Na Gukoporora KIGEZWEHO Ishusho Kuri" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "" + +#: app/playlist.c:524 +#, fuzzy +msgid "Add a free pattern behind current position" +msgstr "a Kigenga Ishusho KIGEZWEHO Ibirindiro" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Uburebure" + +#: app/playlist.c:548 +#, fuzzy +msgid "Song length" +msgstr "Uburebure" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "tangira" + +#: app/playlist.c:567 +#, fuzzy +msgid "Song restart position" +msgstr "Ongera utangire Ibirindiro" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "A bushyinguro Byaremwe in bushyinguro Kuri Iboneza Idosiye" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +#, fuzzy +msgid "8 bits" +msgstr "8" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "Ijwi" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "" + +# filter/source\pdf\impdialog.src:RID_PDF_EXPORT_DLG.RB_SELECTION.text +#: app/sample-editor.c:475 +#, fuzzy +msgid "Selection:" +msgstr "Ihitamo" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "Ntacyo" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Byose" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Uburebure:" + +#: app/sample-editor.c:522 +#, fuzzy +msgid "Set as loop" +msgstr "Nka" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "Kubika Ingero- fatizo" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save Sample" +msgstr "Kubika" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "Kubika Ingero- fatizo" + +#: app/sample-editor.c:543 +#, fuzzy +msgid "Save region as WAV..." +msgstr "Kubika Nka" + +#: app/sample-editor.c:557 +#, fuzzy +msgid "Save WAV" +msgstr "Kubika" + +#: app/sample-editor.c:569 +#, fuzzy +msgid "Save Region" +msgstr "Kubika" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "" + +#: app/sample-editor.c:593 +msgid "Trim" +msgstr "" + +#: app/sample-editor.c:603 +#, fuzzy +msgid "Zoom to selection" +msgstr "Kuri Ihitamo" + +# starmath/sdi\smslots.src:SID_ADJUST.text +#: app/sample-editor.c:609 +#, fuzzy +msgid "Show all" +msgstr "Kwerekana Byose" + +#: app/sample-editor.c:615 +#, fuzzy +msgid "Zoom in (+50%)" +msgstr "in 50 %%" + +#: app/sample-editor.c:621 +#, fuzzy +msgid "Zoom out (-50%)" +msgstr "Inyuma 50 %%" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Ihindurakerekezo" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Gukata" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Gukuraho" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Guporora" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Komeka" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Guporora" + +#: app/sample-editor.c:730 +#, fuzzy +msgid "(no selection)" +msgstr "(Oya Ihitamo" + +#: app/sample-editor.c:1279 +#, fuzzy +msgid "Out of memory for copybuffer." +msgstr "Bya Ububiko kugirango" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Ibumoso" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Iburyo" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%dIngero- fatizo" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +#, fuzzy +msgid "Out of memory for sample data." +msgstr "Bya Ububiko kugirango Urugero Ibyatanzwe" + +# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_CLASS_READ.text +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +#, fuzzy +msgid "Read error." +msgstr "Ikosa- gusoma" + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "Byahiswemo a Urugero Ingero- fatizo Guhitamo Kuri Ibirimo" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "Gutangira" + +#: app/sample-editor.c:1756 +msgid "Signed" +msgstr "" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "Bitashizweho umukono" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "" + +#: app/sample-editor.c:1764 +#, fuzzy +msgid "Load raw sample" +msgstr "Urugero" + +#: app/sample-editor.c:1772 +#, fuzzy +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"Byahiswemo a Urugero ni a Imiterere Ibirimo i Ibyatanzwe NONEAHA Guhitamo a " +"Imiterere" + +#: app/sample-editor.c:1798 +#, fuzzy +msgid "Word format:" +msgstr "Imiterere" + +#: app/sample-editor.c:1829 +msgid "Sampling Rate:" +msgstr "" + +#: app/sample-editor.c:1915 +#, fuzzy +msgid "Can't read sample" +msgstr "Gusoma Urugero" + +#: app/sample-editor.c:1929 +#, fuzzy +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "ni kugirango KIGEZWEHO Modire" + +#: app/sample-editor.c:1954 +#, fuzzy +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "8 Na Ingero- fatizo Na: Hejuru Kuri 2." + +#: app/sample-editor.c:2021 +#, fuzzy +msgid "Can't open file for writing." +msgstr "Gufungura IDOSIYE kugirango" + +#: app/sample-editor.c:2079 +#, fuzzy +msgid "Please select region first." +msgstr "Guhitamo Itangira" + +#: app/sample-editor.c:2194 +#, fuzzy +msgid "No sampling driver available" +msgstr "Musomyi: Bihari" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +msgid "Clear" +msgstr "" + +#: app/sample-editor.c:2263 +msgid "Sampling failed!" +msgstr "" + +#: app/sample-editor.c:2298 +#, fuzzy +msgid "Out of memory while sampling!" +msgstr "Bya Ububiko" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "Byahiswemo a Urugero Ingero- fatizo Guhitamo Kuri Ibirimo" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Urugero" + +#: app/sample-editor.c:2599 +#, fuzzy +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "Urugero ni kugirango KIGEZWEHO Modire" + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "" + +#: app/sample-editor.c:2667 +#, fuzzy +msgid "Perform linear volume fade on Selection" +msgstr "By'umurongo Igice Kwijima ku" + +#: app/sample-editor.c:2676 +#, fuzzy +msgid "Left [%]:" +msgstr "Ibumoso:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "H" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "D" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +#, fuzzy +msgid "Right [%]:" +msgstr "Iburyo:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +#, fuzzy +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"Kuri Gishya Kuri iyi Ubwoko Bya Porogaramu Kuri Kubona Cyangwa Idosiye " +"Itangira Na Gukina Na:" + +#: app/tips-dialog.c:50 +#, fuzzy +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "Ubwoko Guhindura Ubwoko Birenzeho Kuri ku i Ingano Bya i Igikoresho" + +#: app/tips-dialog.c:54 +#, fuzzy +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "i Utudomo in i Urugero Muhinduzi ku ikoresha i Ibumoso: Na Iburyo:" + +#: app/tips-dialog.c:57 +#, fuzzy +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "Kuri Birenzeho Ibyerekeye Na i a ku HTTP www org" + +#: app/tips-dialog.c:60 +#, fuzzy +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Kugenera... Ingero- fatizo Bya Kuri i Utubuto Urugero Na Hanyuma ku i " +"Mwandikisho in Muhinduzi Ipaji" + +#: app/tips-dialog.c:64 +#, fuzzy +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "indanga in a Umubare Icyinjijwe Umwanya Kanda Cyangwa Kuri Kigenga" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "" + +#: app/tips-dialog.c:129 +#, fuzzy +msgid "Show tip next time" +msgstr "Inyobora: Komeza>> Igihe" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "Bya i UMUNSI" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "" + +#: app/track-editor.c:131 +#, fuzzy +msgid "Porta up" +msgstr "Hejuru" + +#: app/track-editor.c:132 #, fuzzy msgid "Porta down" msgstr "Hasi" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "" + +#: app/track-editor.c:135 +#, fuzzy +msgid "Tone porta + Volume slide" +msgstr "Igice" + +#: app/track-editor.c:136 +#, fuzzy +msgid "Vibrato + Volume slide" +msgstr "Igice" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Urugero" + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +#, fuzzy +msgid "Set volume" +msgstr "Igice" + +#: app/track-editor.c:141 +#, fuzzy +msgid "Position jump" +msgstr "Simbuka" + +#: app/track-editor.c:143 +#, fuzzy +msgid "Pattern break" +msgstr "itandukanya" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "" + +#: app/track-editor.c:146 +#, fuzzy +msgid "Set global volume" +msgstr "Igice" + +#: app/track-editor.c:147 +#, fuzzy +msgid "Global volume slide" +msgstr "Igice Igice" + +#: app/track-editor.c:150 +#, fuzzy +msgid "Key off" +msgstr "Bidakora" + +#: app/track-editor.c:151 +#, fuzzy +msgid "Set envelop position" +msgstr "Ibirindiro" + +#: app/track-editor.c:155 +#, fuzzy +msgid "Panning slide" +msgstr "Igice" + +#: app/track-editor.c:156 +#, fuzzy +msgid "LP filter resonance" +msgstr "Muyunguruzi..." + +#: app/track-editor.c:157 +#, fuzzy +msgid "Multi retrig note" +msgstr "Impugukirwa" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "" + +#: app/track-editor.c:165 +#, fuzzy +msgid "LP filter cutoff" +msgstr "Muyunguruzi..." + +#: app/track-editor.c:170 +#, fuzzy +msgid "Fine porta up" +msgstr "Hejuru" + +#: app/track-editor.c:171 +#, fuzzy +msgid "Fine porta down" +msgstr "Hasi" + +#: app/track-editor.c:172 +#, fuzzy +msgid "Set gliss control" +msgstr "Igenzura" + +#: app/track-editor.c:173 +#, fuzzy +msgid "Set vibrato control" +msgstr "Igenzura" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "" + +# sc/source\ui\src\autofmt.src:RID_SCDLG_AUTOFORMAT.BTN_PATTERN.text +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "Ishusho" + +#: app/track-editor.c:176 +#, fuzzy +msgid "Set tremolo control" +msgstr "Igenzura" + +#: app/track-editor.c:178 +#, fuzzy +msgid "Retrig note" +msgstr "Impugukirwa" + +#: app/track-editor.c:179 app/track-editor.c:191 +#, fuzzy +msgid "Fine volume slide up" +msgstr "Igice Igice Hejuru" + +#: app/track-editor.c:180 app/track-editor.c:190 +#, fuzzy +msgid "Fine volume slide down" +msgstr "Igice Igice Hasi" + +#: app/track-editor.c:181 +#, fuzzy +msgid "Note cut" +msgstr "Gukata" + +#: app/track-editor.c:182 +#, fuzzy +msgid "Note delay" +msgstr "Gutinda" + +#: app/track-editor.c:183 +#, fuzzy +msgid "Pattern delay" +msgstr "Gutinda" + +#: app/track-editor.c:188 +#, fuzzy +msgid "Volume slide down" +msgstr "Igice Hasi" + +#: app/track-editor.c:189 +#, fuzzy +msgid "Volume slide up" +msgstr "Igice Hejuru" + +#: app/track-editor.c:192 +#, fuzzy +msgid "Set vibrato speed" +msgstr "Umuvuduko" + +#: app/track-editor.c:195 +#, fuzzy +msgid "Panning slide left" +msgstr "Igice Ibumoso:" + +#: app/track-editor.c:196 +#, fuzzy +msgid "Panning slide right" +msgstr "Igice Iburyo:" + +# starmath/source\smres.src:RID_TOOLBOXWINDOW.4.RID_SINX.text +#: app/track-editor.c:201 +#, fuzzy +msgid "sine" +msgstr "Sinisi" + +#: app/track-editor.c:202 +#, fuzzy +msgid "ramp down" +msgstr "Hasi" + +# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-# +# svx/sdi\svxslots.src:SID_DRAW_SQUARE.text +# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-# +# svx/source\dialog\sdstring.src:RID_SVXSTR_SQUARE.text +# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-# +# svx/source\dialog\sdstring.src:RID_SVXSTR_LEND10.text +# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-# +# svx/source\dialog\tabarea.src:RID_SVXPAGE_TRANSPARENCE.LB_TRGR_GRADIENT_TYPES.6.text +# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-# +# svx/source\dialog\tabarea.src:RID_SVXPAGE_GRADIENT.LB_GRADIENT_TYPES.5.text +# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-# +# svx/source\svdraw\svdstr.src:STR_ObjNameSingulQUAD.text +#: app/track-editor.c:203 +#, fuzzy +msgid "square" +msgstr "kare" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +#, fuzzy +msgid "Extra fine porta up" +msgstr "Hejuru" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "Hasi" + +#: app/track-editor.c:257 +#, fuzzy +msgid "None ]" +msgstr "Ntacyo" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +#, fuzzy +msgid "Font list" +msgstr "Urutonde" + +#: app/tracker-settings.c:284 +#, fuzzy +msgid "Add font" +msgstr "Intego- nyuguti" + +#: app/tracker-settings.c:290 +#, fuzzy +msgid "Delete font" +msgstr "Intego- nyuguti" + +#: app/tracker-settings.c:296 +#, fuzzy +msgid "Apply font" +msgstr "Intego- nyuguti" + +#: app/tracker-settings.c:312 +#, fuzzy +msgid "Select font..." +msgstr "Intego- nyuguti" + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "" + +#: app/transposition.c:199 +#, fuzzy +msgid "Half note up" +msgstr "Impugukirwa Hejuru" + +#: app/transposition.c:200 +#, fuzzy +msgid "Half note down" +msgstr "Impugukirwa Hasi" + +#: app/transposition.c:201 +#, fuzzy +msgid "Octave up" +msgstr "Hejuru" + +#: app/transposition.c:202 +#, fuzzy +msgid "Octave down" +msgstr "Hasi" + +#: app/transposition.c:205 +#, fuzzy +msgid "Exchange 1 <-> 2" +msgstr "1. 2." + +#: app/transposition.c:206 +#, fuzzy +msgid "Change 1 -> 2" +msgstr "1. 2." + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "" + +#: app/transposition.c:225 +#, fuzzy +msgid "Scope of the operation:" +msgstr "Bya i" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "" + +#: app/transposition.c:268 +#, fuzzy +msgid "Instrument 1:" +msgstr "1." + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "" + +#: app/transposition.c:277 +#, fuzzy +msgid "Instrument 2:" +msgstr "2." + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "Uburebure Inyuma Bya Urutonde" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Itangira..." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +msgid "Instrument header reading error." +msgstr "" + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Ibahasha" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Ibahasha" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Ibahasha" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Ibahasha" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "ikoresha" + +#: app/xm.c:678 app/xm.c:1233 +#, fuzzy +msgid "Out of memory error!" +msgstr "Bya Ububiko kugirango" + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "Idosiye ni Oya" + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +msgid "Instrument sample map reading error." msgstr "" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Ibahasha" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Ibahasha" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Ibahasha" + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "ikoresha" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." msgstr "" -#: app/track-editor.c:118 +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 #, fuzzy -msgid "Tone porta + Volume slide" -msgstr "Igice" +msgid "Error while loading patterns." +msgstr "Itangira..." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Ntishoboye gufungura ifayilo/ifishi" + +#: app/xm.c:1215 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" -#: app/track-editor.c:119 +#: app/xm.c:1266 #, fuzzy -msgid "Vibrato + Volume slide" -msgstr "Igice" +msgid "Error while loading pattern order table." +msgstr "Itangira..." -#: app/track-editor.c:120 -msgid "Tremolo" +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." msgstr "" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" +#: app/xm.c:1291 +#, fuzzy, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "Kirimo Urugero S kugirango i KIGEZWEHO Urugero Uburebure ni" + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" msgstr "" -#: app/track-editor.c:122 app/track-editor.c:124 +#: app/xm.c:1686 #, fuzzy -msgid "Position jump" -msgstr "Simbuka" +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "Na OYA Imiterere" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 +#: app/xm.c:1704 app/xm.c:1731 #, fuzzy -msgid "Set volume" -msgstr "Igice" +msgid "Error when file reading or unexpected end of file" +msgstr "Ryari: IDOSIYE Cyangwa Impera Bya IDOSIYE" -#: app/track-editor.c:126 +#: app/xm.c:1710 #, fuzzy -msgid "Pattern break" -msgstr "itandukanya" +msgid "Incorrect or unsupported version of pattern file!" +msgstr "Cyangwa Verisiyo Bya Ishusho IDOSIYE" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" +#: app/xm.c:1716 +#, fuzzy +msgid "Incorrect pattern length!" +msgstr "Ishusho Uburebure" + +#: app/xm.c:1761 app/xm.c:1787 +#, fuzzy +msgid "Error during saving pattern!" +msgstr "Mu kubika Ishusho" + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" msgstr "" -#: app/track-editor.c:129 +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 #, fuzzy -msgid "Set global volume" -msgstr "Igice" +msgid "Auto connect" +msgstr "Kwihuza" -#: app/track-editor.c:130 +#: app/midi-settings.c:414 +msgid "Channel" +msgstr "" + +#: app/midi-settings.c:423 #, fuzzy -msgid "Global volume slide" -msgstr "Igice Igice" +msgid "Client number" +msgstr "Umubare" + +#: app/midi-settings.c:434 +msgid "Port number" +msgstr "inomero y'impagike" + +#: app/midi-settings.c:453 +msgid "Input" +msgstr "Ibyinjizwa" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "" + +#: app/midi-settings.c:468 +msgid "Output" +msgstr "Ibisohoka" -#: app/track-editor.c:133 +#: app/midi-settings.c:479 #, fuzzy -msgid "Key off" -msgstr "Bidakora" +msgid "Debug level" +msgstr "urwego" + +#: app/midi-settings.c:492 +msgid "Misc" +msgstr "" -#: app/track-editor.c:134 +#: app/midi-settings.c:532 +msgid "MIDI Configuration" +msgstr "" + +# sc/source\ui\src\autofmt.src:RID_SCDLG_AUTOFORMAT.BTN_PATTERN.text +#: soundtracker.glade:10 #, fuzzy -msgid "Set envelop position" -msgstr "Ibirindiro" +msgid "Pattern" +msgstr "Ishusho" + +#: soundtracker.glade:49 +msgid "Track" +msgstr "" -#: app/track-editor.c:138 +#: soundtracker.glade:88 soundtracker.glade:510 #, fuzzy -msgid "Panning slide" -msgstr "Igice" +msgid "_Kill notes" +msgstr "Ibisobanuro" -#: app/track-editor.c:139 +#: soundtracker.glade:104 soundtracker.glade:527 #, fuzzy -msgid "LP filter resonance" -msgstr "Muyunguruzi..." +msgid "_Insert track" +msgstr "Kongeramo" -#: app/track-editor.c:140 +#: soundtracker.glade:112 soundtracker.glade:536 #, fuzzy -msgid "Multi retrig note" -msgstr "Impugukirwa" +msgid "_Delete track" +msgstr "Intego- nyuguti" -#: app/track-editor.c:142 -msgid "Tremor" +#: soundtracker.glade:125 soundtracker.glade:550 +#, fuzzy +msgid "Increment cmd value" +msgstr "Cmd+ Agaciro" + +#: soundtracker.glade:131 soundtracker.glade:557 +#, fuzzy +msgid "Decrement cmd value" +msgstr "Cmd+ Agaciro" + +#: soundtracker.glade:150 soundtracker.glade:586 +#, fuzzy +msgid "C_lear block marks" +msgstr "Funga" + +#: soundtracker.glade:185 soundtracker.glade:600 +#, fuzzy +msgid "_Interpolate effects" +msgstr "Ingaruka" + +# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_HFCMD_FILE.text +#: soundtracker.glade:210 +#, fuzzy +msgid "_File" +msgstr "IDOSIYE" + +# sfx2/source\appl\minbox.src:RID_MAIL_INBOX.BTN_MAILINBOX_OPEN.text +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "Gufungura..." + +# sfx2/source\doc\doc.src:STR_SAVEASDOC.text +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Gushyingura muri..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Kubika Nka" + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "Kubika Ingero- fatizo" + +#: soundtracker.glade:276 +msgid "_Recent" msgstr "" -#: app/track-editor.c:148 +# basctl/source\basicide\basidesh.src:RID_STR_STDMODULENAME.text +#: soundtracker.glade:302 #, fuzzy -msgid "LP filter cutoff" -msgstr "Muyunguruzi..." +msgid "_Module" +msgstr "Modire" + +#: soundtracker.glade:309 +msgid "Clear _All" +msgstr "" + +#: soundtracker.glade:318 +#, fuzzy +msgid "Clear _Patterns Only" +msgstr "Gutinda" + +# basctl/source\basicide\basidesh.src:RID_STR_STDMODULENAME.text +#: soundtracker.glade:333 +#, fuzzy +msgid "_Optimize Module" +msgstr "Modire" + +#: soundtracker.glade:346 +msgid "_Set Optimal Amplification" +msgstr "" + +# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# +# basctl/source\basicide\basidesh.src:RID_BASICMENU.MN_EDIT.text +# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# +# basctl/source\basicide\basidesh.src:RID_BASICPLUGINMENU.MN_PLEDIT.text +# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# +# basctl/source\basicide\macrodlg.src:RID_MACROCHOOSER.RID_PB_EDIT.text +# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# +# basctl/source\basicide\moduldlg.src:RID_TP_MODULS.RID_PB_EDIT.text +# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-# +# basctl/source\basicide\moduldlg.src:RID_TP_LIBS.RID_PB_EDIT.text +#: soundtracker.glade:358 +#, fuzzy +msgid "_Edit" +msgstr "Guhindura" + +#: soundtracker.glade:398 +msgid "_Jazz edit mode" +msgstr "" + +#: soundtracker.glade:412 +msgid "Transp_osition…" +msgstr "" + +# sc/source\ui\src\autofmt.src:RID_SCDLG_AUTOFORMAT.BTN_PATTERN.text +#: soundtracker.glade:426 soundtracker.glade:654 +#, fuzzy +msgid "_Pattern" +msgstr "Ishusho" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "" + +# filter/source\pdf\impdialog.src:RID_PDF_EXPORT_DLG.RB_SELECTION.text +#: soundtracker.glade:569 +#, fuzzy +msgid "_Selection" +msgstr "Ihitamo" + +#: soundtracker.glade:577 +#, fuzzy +msgid "_Mark mode" +msgstr "Ubwoko" + +#: soundtracker.glade:614 +#, fuzzy +msgid "Transpose half-note up" +msgstr "Impugukirwa Hejuru" + +#: soundtracker.glade:622 +#, fuzzy +msgid "Transpose half-note down" +msgstr "Impugukirwa Hasi" -#: app/track-editor.c:153 +#: soundtracker.glade:630 #, fuzzy -msgid "Fine porta up" +msgid "Transpose octave up" msgstr "Hejuru" -#: app/track-editor.c:154 +#: soundtracker.glade:638 #, fuzzy -msgid "Fine porta down" +msgid "Transpose octave down" msgstr "Hasi" -#: app/track-editor.c:155 +# sc/source\ui\src\autofmt.src:RID_SCDLG_AUTOFORMAT.BTN_PATTERN.text +#: soundtracker.glade:661 #, fuzzy -msgid "Set gliss control" -msgstr "Igenzura" +msgid "_Load Pattern…" +msgstr "Ishusho" -#: app/track-editor.c:156 +#: soundtracker.glade:670 #, fuzzy -msgid "Set vibrato control" -msgstr "Igenzura" - -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "" - -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "" +msgid "_Save Current Pattern…" +msgstr "Kubika" -#: app/track-editor.c:159 +#: soundtracker.glade:685 #, fuzzy -msgid "Set tremolo control" -msgstr "Igenzura" +msgid "_Find Unused Pattern" +msgstr "Kuri" -#: app/track-editor.c:161 +#: soundtracker.glade:694 #, fuzzy -msgid "Retrig note" -msgstr "Impugukirwa" +msgid "_Copy Current to Unused Pattern" +msgstr "Kuri" -#: app/track-editor.c:162 app/track-editor.c:174 +#: soundtracker.glade:703 #, fuzzy -msgid "Fine volume slide up" -msgstr "Igice Igice Hejuru" +msgid "_Add Free Pattern" +msgstr "Kubika" -#: app/track-editor.c:163 app/track-editor.c:173 -#, fuzzy -msgid "Fine volume slide down" -msgstr "Igice Igice Hasi" +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "" -#: app/track-editor.c:164 +#: soundtracker.glade:724 #, fuzzy -msgid "Note cut" -msgstr "Gukata" +msgid "C_lear Unused Patterns" +msgstr "Kuri" -#: app/track-editor.c:165 +# sc/source\ui\src\autofmt.src:RID_SCDLG_AUTOFORMAT.BTN_PATTERN.text +#: soundtracker.glade:732 #, fuzzy -msgid "Note delay" -msgstr "Gutinda" +msgid "_Pack Patterns" +msgstr "Ishusho" -#: app/track-editor.c:166 +#: soundtracker.glade:745 #, fuzzy -msgid "Pattern delay" -msgstr "Gutinda" +msgid "S_hrink Current Pattern" +msgstr "Kubika" -#: app/track-editor.c:171 +#: soundtracker.glade:753 #, fuzzy -msgid "Volume slide down" -msgstr "Igice Hasi" +msgid "_Expand Current Pattern" +msgstr "Kubika" -#: app/track-editor.c:172 -#, fuzzy -msgid "Volume slide up" -msgstr "Igice Hejuru" +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" -#: app/track-editor.c:175 +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" + +#: soundtracker.glade:789 +msgid "_Mute / Unmute Current Track" +msgstr "" + +#: soundtracker.glade:798 +msgid "_Unmute All Tracks" +msgstr "" + +#: soundtracker.glade:807 +msgid "Current Track _Solo" +msgstr "" + +#: soundtracker.glade:820 #, fuzzy -msgid "Set vibrato speed" -msgstr "Umuvuduko" +msgid "_Instrument" +msgstr "1." -#: app/track-editor.c:178 +#: soundtracker.glade:827 #, fuzzy -msgid "Panning slide left" -msgstr "Igice Ibumoso:" +msgid "_Load XI…" +msgstr "Kubika" -#: app/track-editor.c:179 +#: soundtracker.glade:836 #, fuzzy -msgid "Panning slide right" -msgstr "Igice Iburyo:" +msgid "_Save XI…" +msgstr "Kubika" -# starmath/source\smres.src:RID_TOOLBOXWINDOW.4.RID_SINX.text -#: app/track-editor.c:184 +# sc/source\core\src\compiler.src:RID_SC_FUNCTION_NAMES.SC_OPCODE_CURRENT.text +#: soundtracker.glade:850 #, fuzzy -msgid "sine" -msgstr "Sinisi" +msgid "_Clear Current" +msgstr "KIGEZWEHO" -#: app/track-editor.c:185 +#: soundtracker.glade:865 #, fuzzy -msgid "ramp down" -msgstr "Hasi" +msgid "_Delete Unused Instruments" +msgstr "Kubika" -# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-# -# svx/sdi\svxslots.src:SID_DRAW_SQUARE.text -# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-# -# svx/source\dialog\sdstring.src:RID_SVXSTR_SQUARE.text -# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-# -# svx/source\dialog\sdstring.src:RID_SVXSTR_LEND10.text -# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-# -# svx/source\dialog\tabarea.src:RID_SVXPAGE_TRANSPARENCE.LB_TRGR_GRADIENT_TYPES.6.text -# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-# -# svx/source\dialog\tabarea.src:RID_SVXPAGE_GRADIENT.LB_GRADIENT_TYPES.5.text -# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-# -# svx/source\svdraw\svdstr.src:STR_ObjNameSingulQUAD.text -#: app/track-editor.c:186 +#: soundtracker.glade:880 #, fuzzy -msgid "square" -msgstr "kare" +msgid "_Settings" +msgstr "Amagenamiterere" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, fuzzy, c-format -msgid "None ]" -msgstr "Ntacyo" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "" -#: app/track-editor.c:360 -msgid "Jazz Edit:" +#: soundtracker.glade:896 +msgid "_Loop playback" msgstr "" -#: app/track-editor.c:405 -msgid "Tracker" +#: soundtracker.glade:905 +msgid "_Tracker" msgstr "" -#: app/tracker-settings.c:235 +#: soundtracker.glade:913 #, fuzzy -msgid "Font list" -msgstr "Urutonde" +msgid "_Flicker-free Scrolling" +msgstr "Kigenga" -#: app/tracker-settings.c:255 +#: soundtracker.glade:921 #, fuzzy -msgid "Add font" +msgid "_Previous Font" msgstr "Intego- nyuguti" -#: app/tracker-settings.c:261 +#: soundtracker.glade:930 #, fuzzy -msgid "Delete font" +msgid "_Next Font" msgstr "Intego- nyuguti" -#: app/tracker-settings.c:267 +#: soundtracker.glade:944 #, fuzzy -msgid "Apply font" -msgstr "Intego- nyuguti" - -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Hejuru" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Hasi" +msgid "Change Preferred _Accidental Type" +msgstr "Bikunzwe Ubwoko" -#: app/tracker-settings.c:288 +#: soundtracker.glade:953 #, fuzzy -msgid "Select font..." -msgstr "Intego- nyuguti" +msgid "Change Effect Column _Editing Direction" +msgstr "INGARUKA Inkingi Icyerekezo" -#: app/transposition.c:198 -msgid "Whole Song" +#: soundtracker.glade:970 +msgid "_Keyboard Configuration…" msgstr "" -#: app/transposition.c:199 -msgid "All Patterns" +#: soundtracker.glade:980 +msgid "_Audio Configuration…" msgstr "" -#: app/transposition.c:200 -msgid "Current Pattern" +#: soundtracker.glade:990 +msgid "_GUI Configuration…" msgstr "" -#: app/transposition.c:201 -msgid "Current Track" +#: soundtracker.glade:1000 +msgid "_MIDI Configuration…" msgstr "" -#: app/transposition.c:205 -msgid "Current Instrument" +#: soundtracker.glade:1016 +#, fuzzy +msgid "_Disable Splash Screen" +msgstr "Mugaragaza" + +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "Kubika NONEAHA" + +#: soundtracker.glade:1034 +#, fuzzy +msgid "Save Settings on _Exit" +msgstr "Kubika ku" + +#: soundtracker.glade:1046 +#, fuzzy +msgid "_Help" +msgstr "Ifashayobora" + +# offmgr/source\offapp\intro\intro.hrc:TEXT_DEFAULTABOUT.text +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "Ibyerekeye" + +#: soundtracker.glade:1068 +msgid "Show _Tips…" msgstr "" -#: app/transposition.c:206 -msgid "All Instruments" +#: soundtracker.glade:1078 +msgid "_XM Effects" msgstr "" -#: app/transposition.c:210 #, fuzzy -msgid "Half note up" -msgstr "Impugukirwa Hejuru" +#~ msgid "transport master" +#~ msgstr "Mugenga" -#: app/transposition.c:211 +# scp/source\cde\unxbasic_cde.lng:STR_BASIC_CDEINT_NETWORK_STRING2.text #, fuzzy -msgid "Half note down" -msgstr "Impugukirwa Hasi" +#~ msgid "Notes" +#~ msgstr "Ibisobanuro:" -#: app/transposition.c:212 #, fuzzy -msgid "Octave up" -msgstr "Hejuru" +#~ msgid "Error while loading instruments." +#~ msgstr "Itangira..." -#: app/transposition.c:213 #, fuzzy -msgid "Octave down" -msgstr "Hasi" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "i Ibisohoka ni Ubwoko Bya i i Cyangwa Ibisohoka Akazi" -#: app/transposition.c:216 #, fuzzy -msgid "Exchange 1 <-> 2" -msgstr "1. 2." +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "Kwihuza Kuri kugirango Ijwi Ibisohoka" -#: app/transposition.c:217 #, fuzzy -msgid "Change 1 -> 2" -msgstr "1. 2." +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "Amahinduka INGARUKA Ongera utangire" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "%s:Ijwi Imisobekere: OYA" -#: app/transposition.c:250 +# desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text #, fuzzy -msgid "Scope of the operation:" -msgstr "Bya i" +#~ msgid "%s: %s" +#~ msgstr "%s:%s" -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "" +#, fuzzy +#~ msgid "%s: Cannot play (%s)" +#~ msgstr "%s:Gukina" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "" +#, fuzzy +#~ msgid "%s: Cannot record (%s)" +#~ msgstr "%s:Icyabitswe" -#: app/transposition.c:303 #, fuzzy -msgid "Instrument 1:" -msgstr "1." +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Verisiyo" -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "" +#~ msgid "OK" +#~ msgstr "OKE" + +#~ msgid "Cancel" +#~ msgstr "Kureka" -#: app/transposition.c:313 #, fuzzy -msgid "Instrument 2:" -msgstr "2." +#~ msgid "(%d bytes)" +#~ msgstr "(%dBayite" -#: app/xm.c:196 -#, fuzzy, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Uburebure Inyuma Bya Urutonde" +#, fuzzy +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Gutinda" -#: app/xm.c:547 #, fuzzy -msgid "File is no XI instrument." -msgstr "Idosiye ni Oya" +#~ msgid "ALSA card number:" +#~ msgstr "Umubare" -#: app/xm.c:557 -#, fuzzy, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Verisiyo" +#, fuzzy +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "Gufungura APAREYE kugirango Ijwi Iyinjiza APAREYE" -#: app/xm.c:587 -#, fuzzy, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "ikoresha" +#, fuzzy +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "Ijwi Ibisohoka Ibigenga OYA" -#: app/xm.c:859 app/xm.c:984 #, fuzzy -msgid "Error while loading patterns." -msgstr "Itangira..." +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "Gufungura APAREYE kugirango Ijwi Ibisohoka APAREYE" -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Ntishoboye gufungura ifayilo/ifishi" +#, fuzzy +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "Ibisohoka Ibigenga OYA" -#: app/xm.c:990 #, fuzzy -msgid "Error while loading instruments." -msgstr "Itangira..." +#~ msgid "Alsa setup error.\n" +#~ msgstr "Imikorere Ikosa" -#: app/xm.c:1001 -#, fuzzy, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "Kirimo Urugero S kugirango i KIGEZWEHO Urugero Uburebure ni" +#, fuzzy +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "Gufungura kugirango Ijwi Ibisohoka" -#: app/xm.c:1399 #, fuzzy -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "Na OYA Imiterere" +#~ msgid "Save Song" +#~ msgstr "Kubika" + +#~ msgid "Yes" +#~ msgstr "Yego" + +#~ msgid "No" +#~ msgstr "Oya" + +#~ msgid "Close" +#~ msgstr "Gufunga" -#: app/xm.c:1414 app/xm.c:1435 #, fuzzy -msgid "Error when file reading or unexpected end of file" -msgstr "Ryari: IDOSIYE Cyangwa Impera Bya IDOSIYE" +#~ msgid "No file selected." +#~ msgstr "IDOSIYE Byahiswemo" -#: app/xm.c:1418 #, fuzzy -msgid "Incorrect or unsupported version of pattern file!" -msgstr "Cyangwa Verisiyo Bya Ishusho IDOSIYE" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Kuri Guhindura i IDOSIYE" -#: app/xm.c:1422 #, fuzzy -msgid "Incorrect pattern length!" -msgstr "Ishusho Uburebure" +#~ msgid "Save XM..." +#~ msgstr "Kubika" -#: app/xm.c:1468 #, fuzzy -msgid "Error during saving pattern!" -msgstr "Mu kubika Ishusho" +#~ msgid "Save song as XM..." +#~ msgstr "Kubika Nka" -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 #, fuzzy -msgid "Auto connect" -msgstr "Kwihuza" +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "Mwandikisho Iboneza IDOSIYE ni Gukoresha i Ikiganiro" -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -msgid "Channel" -msgstr "" +#~ msgid "Ok" +#~ msgstr "Oke" -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 #, fuzzy -msgid "Client number" -msgstr "Umubare" +#~ msgid "_Quit" +#~ msgstr "Kuvamo" -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" -msgstr "inomero y'impagike" +# dbaccess/source/ui/inc/toolbox.hrc:MID_SBA_QRY_CUT.text +#, fuzzy +#~ msgid "C_ut" +#~ msgstr "Gukata" -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -msgid "Input" -msgstr "Ibyinjizwa" +# dbaccess/source/ui/inc/toolbox.hrc:MID_SBA_QRY_COPY.text +#, fuzzy +#~ msgid "_Copy" +#~ msgstr "Gukoporora" -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "" +# dbaccess/source/ui/inc/toolbox.hrc:MID_SBA_QRY_PASTE.text +#, fuzzy +#~ msgid "_Paste" +#~ msgstr "Komeka" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -msgid "Output" -msgstr "Ibisohoka" +# dbaccess/source/ui/inc/toolbox.hrc:MID_SBA_QRY_PASTE.text +#, fuzzy +#~ msgid "P_aste" +#~ msgstr "Komeka" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 #, fuzzy -msgid "Debug level" -msgstr "urwego" +#~ msgid "_Save XI..." +#~ msgstr "Kubika" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -msgid "Misc" -msgstr "" +#, fuzzy +#~ msgid "Change effect column editing _direction" +#~ msgstr "INGARUKA Inkingi Icyerekezo" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -msgid "MIDI Configuration" -msgstr "" +#, fuzzy +#~ msgid "Save WAV..." +#~ msgstr "Kubika" + +#~ msgid "Execute" +#~ msgstr "Gukora" + +#~ msgid "Apply" +#~ msgstr "Gushyiraho" + +#~ msgid "Up" +#~ msgstr "Hejuru" + +#~ msgid "Down" +#~ msgstr "Hasi" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/sk.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/sk.gmo differ diff -Nru soundtracker-0.6.8/po/sk.po soundtracker-1.0.2~pre2/po/sk.po --- soundtracker-0.6.8/po/sk.po 2006-02-25 13:25:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/sk.po 2020-05-27 18:54:28.000000000 +0000 @@ -6,2126 +6,3723 @@ msgstr "" "Project-Id-Version: soundtracker 0.6.7-pre5.sk\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2003-09-08 11:43+0200\n" "Last-Translator: Andrej Kacian \n" "Language-Team: Slovak \n" +"Language: sk\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.0.1\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" -msgstr "Výstup pre prehrávanie" +msgstr "Výstup pre prehrávanie" #: app/audioconfig.c:69 msgid "Editing Output" -msgstr "Výstup pre editáciu" +msgstr "Výstup pre editáciu" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Vzorkovanie" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" -msgstr "Modul ovládaèa" +msgstr "Modul ovládaÄa" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" -msgstr "Modul mixéru" +msgstr "Modul mixéru" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Popis" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "Nastavenie zvuku" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Ovládaèe" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" -msgstr "Mixéry" +msgstr "Mixéry" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Zatvori»" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d bajtov)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Predpokladanie oneskorenie zvuku: %f mikrosekúnd" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "Efekty _XM..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." -msgstr "Tieto zmeny nadobudnú platnos» a¾ keï znovu spustíte prehrávanie." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Frekvencia trackeru" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Rozlí¹enie:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Kanály:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Frekvencia [Hz]:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Veµkos» zásobníka:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines" +msgstr "Zapne zvýrazňovanie riadkov" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "Èíslo karty ALSA:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines highlighting" +msgstr "Zapne zvýrazňovanie riadkov" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "Èíslo zariadenia ALSA:" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines" +msgstr "Zapne zvýrazňovanie riadkov" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" -msgstr "" -"Nemô¾em otvori» zariadenie ALSA pre zvukový vstup (karta %d, zariadenie %" -"d):\n" -"%s" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines highlighting" +msgstr "Zapne zvýrazňovanie riadkov" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Po¾adovaný formát zvukového výstupu nie je podporovaný.\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Po¾adované parametre zvukového výstupu nie sú podporované.\n" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Výber:" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Predpokladanie oneskorenie zvuku: %f milisekúnd" +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Frekvencia trackeru" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "" + +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" msgstr "" -"Nemô¾em otvori» zariadenie ALSA pre zvukový výstup (karta %d, zariadenie %" -"d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "Po¾adované parametre výstupného kanálu nie sú podporované.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "ZmazaÅ¥" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "Nemô¾em pripravi» kanál ALSA.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "ZmazaÅ¥" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "Chyba nastavenia ALSA.\n" +#: app/colors.c:49 +#, fuzzy +msgid "Channel numbers, loops" +msgstr "Kanály:" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -"Výstup ESD je nepou¾iteµný v\n" -"interaktívnom re¾ime, kvôli oneskoreniu ESD.\n" -"Pou¾ite výstupné pluginy OSS alebo ALSA\n" -"pre riadnu prácu." -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -"Nemô¾em sa pripoji» k ESD pre zvukový výstup:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "(zatiaµ) ¾iadne nastavenia, prepáète!" +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Nemô¾em otvori» súbor pre zápis." +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." -msgstr "Tieto zmeny nadobudnú platnos» a¾ keï znovu spustíte vzorkovanie." +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Vstupné zariadenie (napr. '/dev/dsp'):" +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "PriblížiÅ¥ zvolené" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" msgstr "" -"Nemô¾em otvori» %s pre vzorkovanie:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d vzoriek)" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "Pozícia návratu" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "Výstupné zariadenie (napr. '/dev/dsp'):" +#: app/colors.c:53 +msgid "Mixer position indicator" +msgstr "" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:54 +msgid "Zero line" msgstr "" -"Nemô¾em otvori» %s pre zvukový výstup:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" -msgstr "transport master" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" -msgstr "declick" +#: app/colors.c:56 +msgid "White keys" +msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" -msgstr "Be¾í na %d Hz s %d rámcami" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" -msgstr "Jack server nebe¾í?" +#: app/colors.c:57 +msgid "Black keys" +msgstr "" -#: app/drivers/jack-output.c:327 -#, c-format -msgid "soundtracker" -msgstr "soundtracker" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "out_1" +#: app/colors.c:58 +msgid "White keys pressed" +msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "out_2" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" -msgstr "Výstupné zariadenie (napr. '/dev/dsp'):" +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: Nemô¾em prehráva» (%s)" +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: Nemô¾em spracova» %dHz (%s)" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s: Po¾adované kódovanie zvuku nie je podporované.\n" +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 -#, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: Nemô¾em nastavi» veµkos» bloku (%s)" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" -msgstr "Vstupné zariadenie (napr. '/dev/dsp'):" +#: app/colors.c:395 +#, fuzzy, c-format +msgid "%s colors configuration" +msgstr "Nastavenie klávesnice" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: Nemô¾em nahráva» (%s)" +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "ObrátiÅ¥" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Då¾ka" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Aktuálna" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Odsadenie" +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Hodnota" +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Vlo¾i»" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "Číslo zariadenia ALSA:" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Zmaza»" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" msgstr "" -"Grafický\n" -"Editor\n" -"Obálky\n" -"len vo verzii\n" -"pre GNOME" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Podr¾a»" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +#, fuzzy +msgid "Unable to set channels number" +msgstr "Nemôžem pripraviÅ¥ kanál ALSA.\n" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Bod" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Sluèka" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Zaèiatok" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Koniec" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Naèíta» modul" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Ulo¾i» modul" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Vytvori» WAV" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Ulo¾i» skladbu" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Naèíta» vzorku" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Ulo¾i» vzorku" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Naèíta» nástroj" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Ulo¾i» nástroj" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d vzoriek)" -#: app/file-operations.c:175 -msgid "File" -msgstr "Súbor" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Operácia nie je podporovaná." +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Frekvencia monitorov" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Frekvencia trackeru" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8 bitov" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "Nastavenie u¾ivateµského rozhrania" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16 bitov" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "Hexadecimálne èíslovanie riadkov" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "Mono" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Pou¾i» veµké písmená pre hexadecimálne znaky" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "Stereo" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" -msgstr "Asynchrónna editácia úsekov (¹týl IT)" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "Tieto zmeny nadobudnú platnosÅ¥ až keÄ znovu spustíte prehrávanie." -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" -msgstr "Príkazy Fxx upravujú ukazovatele Tempo/BMP" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "Tieto zmeny nadobudnú platnosÅ¥ až keÄ znovu spustíte vzorkovanie." -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" -msgstr "Prepnú» do editoru po naèítaní/ulo¾ení" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" -msgstr "Ulo¾i» geometriu okien pri ukonèení" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "" -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" -msgstr "Pou¾i» názov noty B miesto H" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Rozlíšenie:" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" -msgstr "" +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Kanály:" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Veµkos» vyrovnávacej pamäte pre monitory [MB]" +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Frekvencia [Hz]:" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Formát riadku skladby:" +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "VeľkosÅ¥ zásobníka:" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." -msgstr "Pripravený." +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "PoÄet kanálov:" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Prehrávam skladbu..." +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Predpokladanie oneskorenie zvuku: %f milisekúnd" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Prehrávam úsek..." +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." +msgstr "" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Naèítavam modul..." +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" +msgstr "" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Modul naèítaný." +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Ukladám modul..." +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Modul ulo¾ený." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "Naèítavam vzorku..." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Vzorka naèítaná." +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Ukladám vzorku..." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Vzorka ulo¾ená." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "Naèítavam nástroj..." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Nástroj naèítaný." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Ukladám nástroj..." +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "Chyba pri naÄítavaní úsekov." -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Nástroj ulo¾ený." +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Ukladám skladbu..." +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "Skladba ulo¾ená." +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Otázka" +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "Áno" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "Nie" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Storno" +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Varovanie" +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "Chyba!" +#: app/drivers/alsa1x.c:1328 +#, fuzzy +msgid "Unable to enable timestamping for playback" +msgstr "Nemôžem pripraviÅ¥ kanál ALSA.\n" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" +#: app/drivers/alsa1x.c:1329 +#, fuzzy +msgid "Unable to enable timestamping for capture" +msgstr "Nemôžem pripraviÅ¥ kanál ALSA.\n" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" -msgstr "Nastavenie zvýrazòovania riadkov" +#: app/drivers/alsa1x.c:1335 +#, fuzzy +msgid "Unable to set timestamp type for playback" +msgstr "Nemôžem pripraviÅ¥ kanál ALSA.\n" -#: app/gui.c:301 +#: app/drivers/alsa1x.c:1336 #, fuzzy -msgid "Highlight rows (major / minor):" -msgstr "Zvýrazni» riadky:" +msgid "Unable to set timestamp type for capture" +msgstr "Nemôžem pripraviÅ¥ kanál ALSA.\n" -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" msgstr "" -#: app/gui.c:506 -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" msgstr "" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "Nebol zvolený ¾iadny súbor." - -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" -msgstr "" -"Naozaj chcete zavrie» súèasný projekt?\n" -"V¹etky zmeny budú stratené!" +#: app/drivers/alsa1x.c:1352 +#, fuzzy +msgid "Unable to prepare playback" +msgstr "Nemôžem pripraviÅ¥ kanál ALSA.\n" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Naozaj chcete prepísa» tento súbor?" - -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "Chyba pri otváraní súboru úseku!" +#: app/drivers/alsa1x.c:1353 +#, fuzzy +msgid "Unable to prepare capture" +msgstr "Nemôžem pripraviÅ¥ kanál ALSA.\n" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" msgstr "" -"Då¾ka naèítavaného úseku nezodpovedá då¾ke aktuálneho úseku v module.\n" -"Chcete upravi» då¾ku aktuálneho úseku?" -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "©tart SoundTrackeru" - -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "Naèítavam..." - -#: app/gui.c:1804 -msgid "Use SoundTracker!" -msgstr "Pou¾íva» SoundTracker!" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" +msgstr "" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Naèíta» XM..." +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "" -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Ulo¾i» XM..." +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "(zatiaľ) žiadne nastavenia, prepáÄte!" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Ulo¾i» modul ako WAV..." +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "" -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "Ulo¾i» skladbu ako XM..." +#: app/drivers/irix-output.c:178 +#, fuzzy +msgid "16 Bit output not supported." +msgstr "Operácia nie je podporovaná." -#: app/gui.c:1872 -msgid "Load current pattern..." -msgstr "Naèíta» aktuálny úsek..." +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "Operácia nie je podporovaná." -#: app/gui.c:1874 -msgid "Save current pattern..." -msgstr "Ulo¾i» aktuálny úsek..." +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." +msgstr "" +"Nemôžem otvoriÅ¥ %s pre vzorkovanie:\n" +"%s" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Prehra» skladbu" +#: app/drivers/oss.c:130 +#, fuzzy +msgid "OSS input: reading error" +msgstr "Zmena nástroja" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Prehra» úsek" +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Zastavi»" +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Predpokladanie oneskorenie zvuku: %f milisekúnd" -#: app/gui.c:1973 -msgid "Pat" -msgstr "Úsek" +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d vzoriek)" -#: app/gui.c:1979 -msgid "Edited pattern" -msgstr "Upravovaný úsek" +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "Vstupné zariadenie (napr. '/dev/dsp'):" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." -msgstr "Ak je toto zapnuté, prezeranie playlistu nemení upravovaný úsek." +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "Výstupné zariadenie (napr. '/dev/dsp'):" -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Poèet kanálov:" +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" +msgstr "" -#: app/gui.c:2025 -msgid "Pattern Length" -msgstr "Då¾ka úseku" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "" -#: app/gui.c:2060 -msgid "Set preferred accidental type" -msgstr "Zvoµte preferovaný náhodný typ" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"Nemôžem otvoriÅ¥ %s pre vzorkovanie:\n" +"%s" -#: app/gui.c:2066 -msgid "Measure" -msgstr "Miera" +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "Požadovaný formát zvukového výstupu nie je podporovaný.\n" -#: app/gui.c:2067 -msgid "Enable row highlighting" -msgstr "Zapne zvýrazòovanie riadkov" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" +msgstr "Beží na %d Hz s %d rámcami" -#: app/gui.c:2093 -msgid "Other..." -msgstr "Ïal¹ie..." +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "Jack server nebeží?" -#: app/gui.c:2129 -#, fuzzy -msgid "Change effect column editing direction" -msgstr "Zmeni» _smer editácie ståpca efektov" +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" -msgstr "Celkové zosilnenie" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" -msgstr "Úprava vý¹ky tónu" +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" -msgstr "Vráti» ukazovateµ zmeny vý¹ky tónu na pôvodnú hodnotu" +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -#: app/gui.c:2216 -msgid "Editing" -msgstr "Editácia" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "declick" -#: app/gui.c:2223 -msgid "Octave" -msgstr "Oktáva" +#: app/drivers/jack.c:610 +#, fuzzy +msgid "Jack server is not running or some error occured." +msgstr "Jack server nebeží?" -#: app/gui.c:2232 -msgid "Jump" -msgstr "Preskoèi»" +#: app/drivers/sdl-output.c:76 +#, fuzzy +msgid "Experimental SDL support." +msgstr "Operácia nie je podporovaná." -#: app/gui.c:2241 -msgid "Instr" -msgstr "Nástroj" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "Výstupné zariadenie (napr. '/dev/dsp'):" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Vzorka" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "Vitajte v SoundTrackeri!" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/drivers/sun-output.c:402 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "%s: Nemôžem spracovaÅ¥ %dHz (%s)" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "VolFade" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "%s: Požadované kódovanie zvuku nie je podporované.\n" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "VibSpeed" +#: app/drivers/sun-output.c:455 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "%s: Nemôžem nastaviÅ¥ veľkosÅ¥ bloku (%s)" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "VibDepth" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "VibSweep" +#: app/drivers/sun-input.c:77 +#, fuzzy +msgid "SUN input: reading error" +msgstr "Zmena nástroja" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Nemô¾em otvori» súbor." +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sínus" +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "Vstupné zariadenie (napr. '/dev/dsp'):" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "©tvorec" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "Píla dolná" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "Píla horná" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" +msgstr "" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Editor nástrojov" +#: app/drivers/sun-input.c:273 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "%s: Nemôžem spracovaÅ¥ %dHz (%s)" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Obálka hlasitosti" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "%s: Požadované kódovanie zvuku nie je podporované.\n" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Obálka vyvá¾enia" +#: app/drivers/sun-input.c:332 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "%s: Nemôžem nastaviÅ¥ veľkosÅ¥ bloku (%s)" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Naèíta» nástroj..." +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Dĺžka" -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Ulo¾i» nástroj..." +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Aktuálna" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "Naèíta» XI" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Odsadenie" -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "Ulo¾i» XI" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Hodnota" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Typ vibrata:" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "VložiÅ¥" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Tón:" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "ZmazaÅ¥" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Inicializova»" +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"Grafický\n" +"Editor\n" +"Obálky\n" +"len vo verzii\n" +"pre GNOME" -#: app/keys.c:57 -msgid "" -msgstr "<¾iadny>" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "PodržaÅ¥" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "" -"Klávesa, ktorá vlo¾í ¹peciálnu \"keyoff\" notu pre moduly FastTrackeru." +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Bod" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." -msgstr "Klávesa, ktorá zvý¹i hodnotu skoku." +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "SluÄka" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." -msgstr "Klávesa, ktorá zní¾i hodnotu skoku." +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "ZaÄiatok" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "Klávesy vy¹¹ej oktávy..." +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Koniec" -#: app/keys.c:146 +#: app/file-operations.c:127 +#, c-format msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" msgstr "" -"Toto sú klávesy v hornej polovici klávesnice. Tón C je zvyèajne na klávese " -"napravo od tabulátora. Zvy¹ok kláves by mal by» usporiadaný ako na klavíri, " -"vèetne radu èíselných kláves v hornom riadku." -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Klávesy ni¾¹ej oktávy..." +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." +#: app/file-operations.c:245 +msgid "All files" msgstr "" -"Toto sú klávesy v hornej polovici klávesnice. Tón C je zvyèajne na klávese " -"napravo od tabulátora. Zvy¹ok kláves by mal by» usporiadaný ako na klavíri, " -"vèetne radu èíselných kláves v hornom riadku. Toto sú klávesy v spodnej " -"polovici klávesnice. Tón C je zvyèajne na prvej klávese napravo od µavého " -"Shift-u. Zvy¹ok kláves by mal by» usporiadaný ako na klavíri, vèetne radu " -"kláves v druhom riadku odspodu." -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "Ïal¹ie klávesy..." +#: app/file-operations.c:388 +msgid "File" +msgstr "Súbor" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Rôzne ïal¹ie klávesy" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/keys.c:513 -msgid "Function" -msgstr "Funkcia" +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Priradenie" +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "Mixéry" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Nastavenie klávesnice" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "Nastavenie uživateľského rozhrania" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Popis skupiny kláves" +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Frekvencia monitorov" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Popis klávesy" +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Frekvencia trackeru" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Modifikátory:" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Hexadecimálne Äíslovanie riadkov" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Nauèi» sa zvolenú klávesu" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "PoužiÅ¥ veľké písmená pre hexadecimálne znaky" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Nauèi» sa v¹etky klávesy" +#: app/gui-settings.c:343 +#, fuzzy +msgid "FT2-like volume column" +msgstr "Jemné pridanie hlasitosti" -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" msgstr "" -"Prosím stlaète po¾adovanú kombináciu kláves!\n" -"Pre storno kliknite do zoznamu naµavo" - -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Ok" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Pou¾i»" - -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" msgstr "" -"Súbor s nastavením klávesnice je po¹kodený.\n" -"Prosím pou¾ite voµbu \"Nastavenie klávesnice\"." -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" -msgstr "CH%02d" +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" -msgstr "Rýchly skok do kanálu %d" +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" +msgstr "Asynchrónna editácia úsekov (Å¡týl IT)" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" msgstr "" -"Automatické nastavenie kláves neúspe¹né.\n" -"Prosím pou¾ite voµbu \"Nastavenie klávesnice\"\n" -"v menu \"Nastavenia\"." -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -"Naozaj to chcete urobi»?\n" -"V¹etky zmeny budú stratené!" -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" msgstr "" -"Naozaj chcete ukonèi» program?\n" -"V¹etky zmeny budú stratené!" -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Otvori»..." - -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Ulo¾i» _ako..." - -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Ulo¾i» modul ako _WAV..." +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "" -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Ulo¾i» _XM bez vzoriek..." +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "U_konèi»" +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "Príkazy Fxx upravujú ukazovatele Tempo/BMP" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Vyèisti» _v¹etko" +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Vyèisti» len ú_seky" +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "Prepnúť do editoru po naÄítaní/uložení" -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Optimalizova» modul" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "Vys_trihnú»" +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" +msgstr "UložiÅ¥ geometriu okien pri ukonÄení" -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Kopírova»" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "PoužiÅ¥ názov noty B miesto H" -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "V_lo¾i»" +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Odstráni» noty pod kurzorom" +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." +msgstr "" -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "Vlo¾i» _stopu" +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Výber:" -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "O_dstráni» stopu" +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "VeľkosÅ¥ vyrovnávacej pamäte pre monitory [MB]" -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Zvý¹i» hodnotu príkazu" +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Vzorka naÄítaná." -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Zní¾i» hodnotu príkazu" +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "" -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "_Znaèkovací re¾im" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "Úp_ravy" -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "_Odstráni» blokové znaèky" +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "" -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "_Interpolova» efekty" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "" -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Posunú» o poltón nahor" +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "" -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Posunú» o poltón nadol" +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Posunú» o oktávu nahor" +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Formát riadku skladby:" -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Posunú» o oktávu nadol" +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:526 +#: app/gui-settings.c:573 #, fuzzy -msgid "P_aste" -msgstr "Vlo¾i»" +msgid "Tracker colors configuration" +msgstr "Nastavenie klávesnice" -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "_Jazzový re¾im editácie" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "Pripravený." -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "" +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Prehrávam skladbu..." -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "_Posun..." +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Prehrávam úsek..." -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "Ús_ek" +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "NaÄítavam modul..." + +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "Modul naÄítaný." + +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Ukladám modul..." + +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "Modul uložený." + +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "NaÄítavam vzorku..." + +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Vzorka naÄítaná." + +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Ukladám vzorku..." + +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Vzorka uložená." + +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "NaÄítavam nástroj..." + +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Nástroj naÄítaný." + +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Ukladám nástroj..." + +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Nástroj uložený." + +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Ukladám skladbu..." + +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "Skladba uložená." + +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "Chyba!" + +#: app/gui-subs.c:414 +msgid "Question" +msgstr "Otázka" + +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" + +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" + +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" + +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Varovanie" + +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "Nastavenie uživateľského rozhrania" + +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "Nastavenie zvýrazňovania riadkov" + +#: app/gui.c:260 +#, fuzzy +msgid "Highlight rows (major / minor):" +msgstr "ZvýrazniÅ¥ riadky:" + +#: app/gui.c:330 +msgid "" +msgstr "" + +#: app/gui.c:451 +#, fuzzy +msgid "Saving module failed" +msgstr "Ukladám modul..." + +#: app/gui.c:535 +msgid "File output" +msgstr "" + +#: app/gui.c:612 +#, fuzzy +msgid "Can't open file for writing" +msgstr "Nemôžem otvoriÅ¥ súbor pre zápis." + +#: app/gui.c:618 +#, fuzzy +msgid "Can't change file ownership" +msgstr "Nemôžem otvoriÅ¥ súbor pre zápis." + +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "" + +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "" + +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" + +#: app/gui.c:715 +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" + +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"Naozaj chcete zavrieÅ¥ súÄasný projekt?\n" +"VÅ¡etky zmeny budú stratené!" + +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "Chyba pri otváraní súboru úseku!" + +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" +msgstr "" +"Dĺžka naÄítavaného úseku nezodpovedá dĺžke aktuálneho úseku v module.\n" +"Chcete upraviÅ¥ dĺžku aktuálneho úseku?" + +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "ZaÄiatok" + +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "NaÄítavam..." + +#: app/gui.c:2195 +msgid "Use SoundTracker!" +msgstr "PoužívaÅ¥ SoundTracker!" + +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"Naozaj chcete ukonÄiÅ¥ program?\n" +"VÅ¡etky zmeny budú stratené!" + +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" + +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" + +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "NaÄítavam..." + +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" + +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" + +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" + +#: app/gui.c:2400 +#, fuzzy +msgid "Extended pattern (*.xp)" +msgstr "Upravovaný úsek" + +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" +msgstr "" + +#: app/gui.c:2433 +msgid "Load Module" +msgstr "NaÄítaÅ¥ modul" + +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" +msgstr "" + +#: app/gui.c:2434 +msgid "Save Module" +msgstr "UložiÅ¥ modul" + +#: app/gui.c:2434 +#, fuzzy +msgid "Save the current module" +msgstr "UložiÅ¥ aktuálny úsek..." + +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "VytvoriÅ¥ WAV" + +#: app/gui.c:2436 +#, fuzzy +msgid "Render the current module as WAV file" +msgstr "UložiÅ¥ modul ako WAV..." + +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "UložiÅ¥ _XM bez vzoriek..." + +#: app/gui.c:2439 +msgid "Load current pattern..." +msgstr "NaÄítaÅ¥ aktuálny úsek..." + +#: app/gui.c:2440 +msgid "Save current pattern..." +msgstr "UložiÅ¥ aktuálny úsek..." + +#: app/gui.c:2507 +msgid "Play Song" +msgstr "PrehraÅ¥ skladbu" + +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "PrehraÅ¥ úsek" + +#: app/gui.c:2525 +msgid "Play From Cursor" +msgstr "" + +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "PrehraÅ¥ skladbu" + +#: app/gui.c:2543 +msgid "Stop" +msgstr "ZastaviÅ¥" + +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" + +#: app/gui.c:2562 +msgid "Pat" +msgstr "Úsek" + +#: app/gui.c:2568 +msgid "Edited pattern" +msgstr "Upravovaný úsek" + +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "Ak je toto zapnuté, prezeranie playlistu nemení upravovaný úsek." + +#: app/gui.c:2583 +msgid "Pattern Length" +msgstr "Dĺžka úseku" + +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" + +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "PoÄet kanálov:" + +#: app/gui.c:2632 +msgid "Set preferred accidental type" +msgstr "Zvoľte preferovaný náhodný typ" + +#: app/gui.c:2638 +msgid "Measure" +msgstr "Miera" + +#: app/gui.c:2639 +msgid "Enable row highlighting" +msgstr "Zapne zvýrazňovanie riadkov" + +#: app/gui.c:2660 +msgid "Other..." +msgstr "ÄŽalÅ¡ie..." + +#: app/gui.c:2687 +#, fuzzy +msgid "Change effect column editing direction" +msgstr "ZmeniÅ¥ _smer editácie stĺpca efektov" + +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" +msgstr "Celkové zosilnenie" + +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "" + +#: app/gui.c:2740 +msgid "Pitchbend" +msgstr "Úprava výšky tónu" + +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "VrátiÅ¥ ukazovateľ zmeny výšky tónu na pôvodnú hodnotu" + +#: app/gui.c:2760 +msgid "Editing" +msgstr "Editácia" + +#: app/gui.c:2767 +msgid "Octave" +msgstr "Oktáva" + +#: app/gui.c:2776 +msgid "Jump" +msgstr "PreskoÄiÅ¥" + +#: app/gui.c:2785 +msgid "Instr" +msgstr "Nástroj" + +#: app/gui.c:2801 +msgid "Sample" +msgstr "Vzorka" + +#: app/gui.c:2827 +msgid "dB" +msgstr "" + +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "Vitajte v SoundTrackeri!" + +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" + +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Nemôžem otvoriÅ¥ súbor." + +#: app/instrument-editor.c:209 +#, fuzzy +msgid "Saving instrument failed." +msgstr "Ukladám nástroj..." + +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "Aktuálny nástroj" + +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sínus" + +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Å tvorec" + +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "Píla dolná" + +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "Píla horná" + +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" +msgstr "" + +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Editor nástrojov" + +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Obálka hlasitosti" + +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Obálka vyváženia" + +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "NaÄítaÅ¥ nástroj" + +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" + +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "UložiÅ¥ nástroj" + +#: app/instrument-editor.c:297 +#, fuzzy +msgid "Save the current instrument" +msgstr "Aktuálny nástroj" + +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "NaÄítaÅ¥ XI" + +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "UložiÅ¥ XI" + +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "Pridanie hlasitosti" + +#: app/instrument-editor.c:344 +#, fuzzy +msgid "Vibrato:" +msgstr "Vibrato" + +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "" + +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "VibSpeed" + +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "VibDepth" + +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "VibSweep" + +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Tón:" + +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "InicializovaÅ¥" + +#: app/keys.c:58 +msgid "" +msgstr "<žiadny>" + +#: app/keys.c:134 +msgid "KOFF" +msgstr "" + +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "" +"Klávesa, ktorá vloží Å¡peciálnu \"keyoff\" notu pre moduly FastTrackeru." + +#: app/keys.c:136 +msgid "JMP+" +msgstr "" + +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "Klávesa, ktorá zvýši hodnotu skoku." + +#: app/keys.c:138 +msgid "JMP-" +msgstr "" + +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "Klávesa, ktorá zníži hodnotu skoku." + +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "PrehraÅ¥ skladbu" + +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Ukladám modul..." + +#: app/keys.c:142 +msgid "RecMod" +msgstr "" + +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Prehrávam úsek..." + +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "PrehraÅ¥ úsek" + +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "PrehraÅ¥ úsek" + +#: app/keys.c:146 +msgid "RecPat" +msgstr "" + +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Prehrávam úsek..." + +#: app/keys.c:148 +msgid "PlayCur" +msgstr "" + +#: app/keys.c:148 +msgid "Play module from cursor." +msgstr "" + +#: app/keys.c:150 +msgid "RecCur" +msgstr "" + +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Prehrávam úsek..." + +#: app/keys.c:152 +#, fuzzy +msgid "PlayRow" +msgstr "PrehraÅ¥ skladbu" + +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "NaÄítaÅ¥ aktuálny úsek..." + +#: app/keys.c:154 +msgid "PlayBlk" +msgstr "" + +#: app/keys.c:154 +#, fuzzy +msgid "Play selected block." +msgstr "NauÄiÅ¥ sa zvolenú klávesu" + +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Klávesy vyÅ¡Å¡ej oktávy..." + +#: app/keys.c:167 +msgid "" +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." +msgstr "" +"Toto sú klávesy v hornej polovici klávesnice. Tón C je zvyÄajne na klávese " +"napravo od tabulátora. ZvyÅ¡ok kláves by mal byÅ¥ usporiadaný ako na klavíri, " +"vÄetne radu Äíselných kláves v hornom riadku." + +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Klávesy nižšej oktávy..." + +#: app/keys.c:173 +msgid "" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." +msgstr "" +"Toto sú klávesy v hornej polovici klávesnice. Tón C je zvyÄajne na klávese " +"napravo od tabulátora. ZvyÅ¡ok kláves by mal byÅ¥ usporiadaný ako na klavíri, " +"vÄetne radu Äíselných kláves v hornom riadku. Toto sú klávesy v spodnej " +"polovici klávesnice. Tón C je zvyÄajne na prvej klávese napravo od ľavého " +"Shift-u. ZvyÅ¡ok kláves by mal byÅ¥ usporiadaný ako na klavíri, vÄetne radu " +"kláves v druhom riadku odspodu." + +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "ÄŽalÅ¡ie klávesy..." + +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Rôzne ÄalÅ¡ie klávesy" + +#: app/keys.c:578 +msgid "Function" +msgstr "Funkcia" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "Priradenie" + +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Nastavenie klávesnice" + +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Popis skupiny kláves" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Popis klávesy" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Modifikátory:" + +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "NauÄiÅ¥ sa zvolenú klávesu" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "NauÄiÅ¥ sa vÅ¡etky klávesy" + +#: app/keys.c:702 +msgid "" +"Please press the desired key combination!\n" +"Click into left list to cancel" +msgstr "" +"Prosím stlaÄte požadovanú kombináciu kláves!\n" +"Pre storno kliknite do zoznamu naľavo" + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "CH%02d" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "Rýchly skok do kanálu %d" + +#: app/keys.c:1028 +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." +msgstr "" +"Automatické nastavenie kláves neúspeÅ¡né.\n" +"Prosím použite voľbu \"Nastavenie klávesnice\"\n" +"v menu \"Nastavenia\"." + +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" +msgstr "" + +#: app/menubar.c:126 +msgid "" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." +msgstr "" + +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"Naozaj to chcete urobiÅ¥?\n" +"VÅ¡etky zmeny budú stratené!" + +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "CeloÄíselný mixér" + +#: app/mixers/kbfloat.c:838 +#, fuzzy +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "CeloÄíselný mixér" + +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" + +#: app/module-info.c:63 app/module-info.c:64 +#, fuzzy +msgid "Cyclic" +msgstr "declick" + +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" + +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" + +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" + +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" + +#: app/module-info.c:481 +msgid "Period" +msgstr "" + +#: app/module-info.c:484 +msgid "s" +msgstr "" + +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Tón:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Názov nástroja" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#smpl" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Názov vzorky" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "Lineárne" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Informácie o module" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Názov skladby:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Frekvencie:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "Režim ProTracker" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Editor nástrojov" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Aktuálny nástroj" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "UložiÅ¥ nástroj" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "ZameniÅ¥ 1 <-> 2" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Doladenie" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "Relatívny tón" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" +"Nepoužité úseky: %d (použité: %d)\n" +"Nepoužité nástroje: %d (použité: %d)\n" +"\n" +"VyÄistiÅ¥ nepoužité a prerovnaÅ¥ playlist?\n" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "Vložte úsek, ktorý sa práve upravuje" + +#: app/playlist.c:511 +msgid "Remove current playlist entry" +msgstr "Odstráni aktuálnu položku playlistu" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "PridaÅ¥ + KopírovaÅ¥" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "Pridá Äistý úsek za aktuálnu pozíciu a nakopíruje doň aktuálny úsek" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "PridaÅ¥ Äistý" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "Pridá Äistý úsek za aktuálnu pozíciu" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Dĺžka" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "Dĺžka skladby" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Nástroj" + +#: app/playlist.c:567 +msgid "Song restart position" +msgstr "Pozícia návratu" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"Vo vaÅ¡om domovskom adresári bol vytvorený adresár názvom '.soundtracker' " +"kvôli uloženiu konfiguraÄných súborov.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Bez sluÄky" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "PingPong" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8 bitov" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16 bitov" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Editor vzoriek" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "HlasitosÅ¥" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Vyváženie" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Výber:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "NiÄ" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "VÅ¡etko" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Dĺžka:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "NastaviÅ¥ ako sluÄku" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "NaÄítaÅ¥ vzorku" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "UložiÅ¥ _XM bez vzoriek..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "UložiÅ¥ vzorku" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "UložiÅ¥ _XM bez vzoriek..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "UložiÅ¥ oblasÅ¥ ako WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "UložiÅ¥ WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "UložiÅ¥ oblasÅ¥" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Krivka hlasitosti" + +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "Tremor" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "PriblížiÅ¥ zvolené" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "ZobraziÅ¥ vÅ¡etko" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "PriblížiÅ¥ (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "OddialiÅ¥ (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "ObrátiÅ¥" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Vystrihnúť" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "OdstrániÅ¥" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "KopírovaÅ¥" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "VložiÅ¥" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "VyÄistiÅ¥ vzorku" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "KopírovaÅ¥" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(bez výberu)" + +#: app/sample-editor.c:1279 +#, fuzzy +msgid "Out of memory for copybuffer." +msgstr "DoÅ¡la pamäť pre vyrovnávaciu pamäť kopírovania.\n" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "ZmieÅ¡aÅ¥" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Ľavý" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Pravý" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d vzoriek)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "DoÅ¡la pamäť pre data vzorky." + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "Chyba pri Äítaní" + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"Zvolili ste si stereo vzorku!\n" +"(SoundTracker dokáže pracovaÅ¥ len s mono vzorkami!)\n" +"\n" +"Zvoľte ktorý kanál naÄítaÅ¥:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "ZaÄaÅ¥ vzorkovanie" + +#: app/sample-editor.c:1756 +msgid "Signed" +msgstr "Podpísaná" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "Nepodpísaná" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "Little-Endian" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "Big-Endian" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "NaÄítaÅ¥ surovú vzorku" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"Zvolili ste vzorku ktorá nie je v známom\n" +"formáte. Môžete teraz naÄítaÅ¥ surové data.\n" +"\n" +"Prosím zvoľte formát:" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "Slovný formát:" + +#: app/sample-editor.c:1829 +msgid "Sampling Rate:" +msgstr "Vzorkovacia frekvencia:" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Nemôžem naÄítaÅ¥ vzorku" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "" +"Vzorka je príliÅ¡ dlhá pre aktuálny modul mixéru. Napriek tomu naÄítavam." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "Je možné pracovaÅ¥ iba s 8 a 16 bitovými vzorkami s najviac 2 kanálmi" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Nemôžem otvoriÅ¥ súbor pre zápis." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "Prosím najprv zvoľte oblasÅ¥." + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "Nie je dostupný žiadny vzorkovací ovládaÄ" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Okno vzorkovania" -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "_Stopa" +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Výber" +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "VyÄistiÅ¥ _vÅ¡etko" -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "Ná_jdi nepou¾itý úsek" +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Vzorkovacia frekvencia:" -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Kopírova» aktuálny úsek do nepou¾itého" +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "Pri vzorkovaní doÅ¡la pamäť!" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "_Vyèisti» nepou¾ité úseky" +#: app/sample-editor.c:2345 +msgid "" +msgstr "" -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "Z_bali» úseky" +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"Zvolili ste si stereo vzorku!\n" +"(SoundTracker dokáže pracovaÅ¥ len s mono vzorkami!)\n" +"\n" +"Zvoľte ktorý kanál naÄítaÅ¥:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "NaÄítaÅ¥ stereo vzorku" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"Nahratá vzorka je príliÅ¡ dlhá pre aktuálny modul mixéru. Napriek tomu bude " +"použitá." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Krivka hlasitosti" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "NormalizovaÅ¥" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "PoužiÅ¥ lineárne znižovanie hlasitosti na výber" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Ľavý [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "H" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "D" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Pravý [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"Vitajte v SoundTrackeri!\n" +"\n" +"Ak takýto program používate po prvý krát, mali by ste si najskôr\n" +"zohnaÅ¥ nejaké súbory XM alebo MOD a pohraÅ¥ sa s nimi." + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"EditaÄný režim SoundTrackeru bude citlivejší na vstup z klávesnice, ak\n" +"znížite veľkosÅ¥ vyrovnávacej pamäte mixéru vo výstupe pre editáciu\n" +"v Nastavení zvuku." + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"Môžete upraviÅ¥ krajné body sluÄky v editore vzoriek podržaním klávesy\n" +"Shift a stláÄaním ľavého a pravého tlaÄítka na myÅ¡i.\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"Ak sa chcete dozvedieÅ¥ viac o \"trackingu\" a ako pracujú rôzne príkazy,\n" +"pozrite sa na http://www.united-trackers.org/" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Môžete priradiÅ¥ jednotlivé vzor jednotlivým klávesom tým,\n" +"že aktivujete vzorku a kliknete na klávesnicu v editore\n" +"nástrojov." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" +"Ak váš kurzor uviazol v políÄku pre zadávanie Äísel,\n" +"stlaÄte Enter alebo Tab pre uvoľnenie kurzoru." + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "Predchádzajúci tip" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "ÄŽalší tip" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "ZobraziÅ¥ tip nabudúce" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "SoundTracker - Tip dňa" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "Arpeggio" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "Porta nahor" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "Porta nadol" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "Tone porta" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "Vibrato" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "Tone porta + Volume slide" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "Vibrato + Volume slide" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "Tremolo" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "NastaviÅ¥ vyváženie" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Vzorka uložená." + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "NastaviÅ¥ hlasitosÅ¥" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Skok na pozíciu" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "ZakonÄiÅ¥ úsek" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "NastaviÅ¥ tempo/BPM" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "NastaviÅ¥ celkovú hlasitosÅ¥" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "Celkový posun hlasitosti" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "Key off" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "NastaviÅ¥ pozíciu obálky" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "Posun vyváženia" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "Rezonancia LP filtra" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "Viacnásobná nota" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "Tremor" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "Cutoff LP filtra" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "Jemné porta nahor" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "Jemné porta dole" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "NastaviÅ¥ ovládanie gliss" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "NastaviÅ¥ ovládanie vibrata" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "NastaviÅ¥ jemné doladenie" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "Úsek" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "NastaviÅ¥ ovládanie tremolo" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "Znovu zahraÅ¥ notu" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "Jemné pridanie hlasitosti" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "Jemné ubratie hlasitosti" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "UkonÄenie noty" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "Oneskorenie noty" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "Oneskorenie úseku" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "Ubratie hlasitosti" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "Pridanie hlasitosti" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "NastaviÅ¥ rýchlosÅ¥ vibrato" -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "_Ulo¾i» aktuálny úsek" +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "Posun vyváženia doľava" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "Posun vyváženia doprava" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "sínus" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "naklonená rovina" + +#: app/track-editor.c:203 +msgid "square" +msgstr "Å¡tvorec" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "_Naèíta» úsek" +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" -#: app/menubar.c:599 +#: app/track-editor.c:244 #, fuzzy -msgid "Sh_rink Current Pattern" -msgstr "Aktuálny úsek" +msgid "Extra fine porta up" +msgstr "Jemné porta nahor" -#: app/menubar.c:601 +#: app/track-editor.c:247 #, fuzzy -msgid "_Expand Current Pattern" -msgstr "_Ulo¾i» aktuálny úsek" +msgid "Extra fine porta down" +msgstr "Jemné porta dole" + +#: app/track-editor.c:257 +msgid "None ]" +msgstr "Žiadne ]" -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" msgstr "" -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" msgstr "" -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Naèíta» XI..." +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_Ulo¾i» XI..." +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_Vyèisti» aktuálny" +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Odstráni» nepou¾ité nástroje" +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Jazzová editácia:" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Tracker" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "Zoznam písiem" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "PridaÅ¥ písmo" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "UbraÅ¥ písmo" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "Posúvanie bez _kmitania" +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "PoužiÅ¥ písmo" -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "_Predchádzajúce písmo" +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "Zvoľte písmo..." -#: app/menubar.c:642 -msgid "_Next font" -msgstr "Ï_al¹ie písmo" +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "Celá pieseň" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" -msgstr "Zmeni» uprednostòovaný _náhodný typ" +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "VÅ¡etky úseky" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" -msgstr "Zmeni» _smer editácie ståpca efektov" +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "Aktuálny úsek" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Zobrazi» o_sciloskopy" +#: app/transposition.c:192 +msgid "Current Track" +msgstr "Aktuálna stopa" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Tracker" +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Aktuálny nástroj" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "Nastavenie _klávesnice..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "Nastavenie _zvuku..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "Nastavenie _ovládania..." - -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "Nastavenie _MIDI..." - -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "Z_akáza» úvodné okno" - -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Ulo¾i» nastavenia" +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "VÅ¡etky nástroje" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "U_lo¾i» nastavenia pri ukonèení" +#: app/transposition.c:199 +msgid "Half note up" +msgstr "O poltón nahor" -#: app/menubar.c:690 -msgid "_About..." -msgstr "_O programe..." +#: app/transposition.c:200 +msgid "Half note down" +msgstr "O poltón nadol" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Zobrazi» _pomôcky..." +#: app/transposition.c:201 +msgid "Octave up" +msgstr "O oktávu nahor" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "Efekty _XM..." +#: app/transposition.c:202 +msgid "Octave down" +msgstr "O oktávu nadol" -#: app/menubar.c:704 -msgid "_File" -msgstr "_Súbor" +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "ZameniÅ¥ 1 <-> 2" -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Modul" +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "ZmeniÅ¥ 1 -> 2" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "Úp_ravy" +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "Nástroje prenotovania" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Nástroj" +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "Rozsah operácie:" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "N_astavenia" +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Prenotovanie" -#: app/menubar.c:711 -msgid "_Help" -msgstr "_Pomocník" +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Zmena nástroja" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" -msgstr "Celoèíselný mixér" +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Nástroj 1:" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Názov nástroja" +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Aktuálny nástroj" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#smpl" +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Nástroj 2:" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Názov vzorky" +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Lineárne" +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "Dĺžka úseku je mimo hranice: %d.\n" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Informácie o module" +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Chyba pri naÄítavaní úsekov." -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Názov skladby:" +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Frekvencie:" +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "Re¾im ProTracker" +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Nástroj naÄítaný." -#: app/module-info.c:395 +#: app/xm.c:573 #, c-format msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" msgstr "" -"Nepou¾ité úseky: %d (pou¾ité: %d)\n" -"Nepou¾ité nástroje: %d (pou¾ité: %d)\n" -"\n" -"Vyèisti» nepou¾ité a prerovna» playlist?\n" - -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" -msgstr "Vlo¾te úsek, ktorý sa práve upravuje" - -#: app/playlist.c:535 -msgid "Remove current playlist entry" -msgstr "Odstráni aktuálnu polo¾ku playlistu" -#: app/playlist.c:543 -msgid "Add + Cpy" -msgstr "Prida» + Kopírova»" +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" -msgstr "Pridá èistý úsek za aktuálnu pozíciu a nakopíruje doò aktuálny úsek" +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Zmena nástroja" -#: app/playlist.c:548 -msgid "Add Free" -msgstr "Prida» èistý" +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Obálka vyváženia" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" -msgstr "Pridá èistý úsek za aktuálnu pozíciu" +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Obálka vyváženia" -#: app/playlist.c:560 +#: app/xm.c:613 #, fuzzy -msgid "Len" -msgstr "Då¾ka" +msgid "Envelope parameters reading error." +msgstr "Obálka vyváženia" -#: app/playlist.c:574 -msgid "Song length" -msgstr "Då¾ka skladby" +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "Neplatný typ vibrata %d, bude použitý sínus.\n" -#: app/playlist.c:580 +#: app/xm.c:678 app/xm.c:1233 #, fuzzy -msgid "Rstrt" -msgstr "Nástroj" +msgid "Out of memory error!" +msgstr "DoÅ¡la pamäť pre vyrovnávaciu pamäť kopírovania.\n" -#: app/playlist.c:593 -msgid "Song restart position" -msgstr "Pozícia návratu" +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "Súbor nie je XI nástroj." -#: app/preferences.c:74 +#: app/xm.c:717 +#, c-format msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" msgstr "" -"Vo va¹om domovskom adresári bol vytvorený adresár názvom '.soundtracker' " -"kvôli ulo¾eniu konfiguraèných súborov.\n" -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Bez sluèky" +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Nástroj naÄítaný." -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "PingPong" +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Obálka vyváženia" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8 bitov" +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Obálka vyváženia" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16 bitov" +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Nástroj naÄítaný." -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Editor vzoriek" +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "Neplatný typ vibrata %d, bude použitý sínus.\n" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Hlasitos»" +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Vyvá¾enie" +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Doladenie" +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Výber:" +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "Chyba pri naÄítavaní úsekov." -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Niè" +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" -#: app/sample-editor.c:319 -msgid "All" -msgstr "V¹etko" +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Nemôžem otvoriÅ¥ súbor" -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Då¾ka:" +#: app/xm.c:1215 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Nastavi» ako sluèku" +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "Relatívny tón" +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Naèíta» vzorku..." +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "Chyba pri naÄítavaní úsekov." -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Ulo¾i» WAV..." +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "Ulo¾i» oblas» ako WAV..." +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"Modul obsahuje vzorky, ktoré sú pridlhé pre aktuálny mixér.\n" +"Maximálna dĺžka vzorky je %d." -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "Ulo¾i» WAV" +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "Ulo¾i» oblas»" +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Monitor" +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Krivka hlasitosti" +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" -#: app/sample-editor.c:425 -#, fuzzy -msgid "Trim" -msgstr "Tremor" +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Priblí¾i» zvolené" +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Zobrazi» v¹etko" +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "Toto nie je XM formát FastTrackeru ani podporovaný formát MOD!" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Priblí¾i» (+50%)" +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "Chyba pri naÄítavaní alebo neoÄakávaný koniec súboru" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Oddiali» (-50%)" +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "Nesprávna alebo nepodporovaná verzia úsekového súboru!" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Obráti»" +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "Nesprávna dĺžka úseku!" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Vystrihnú»" +#: app/xm.c:1761 app/xm.c:1787 +msgid "Error during saving pattern!" +msgstr "Chyba pri ukladaní úseku!" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Odstráni»" +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Kopírova»" +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Vlo¾i»" +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "Vyèisti» vzorku" +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" -#: app/sample-editor.c:500 -#, fuzzy -msgid "Crop" -msgstr "Kopírova»" +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(bez výberu)" +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "Do¹la pamä» pre vyrovnávaciu pamä» kopírovania.\n" +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "Automatické pripojenie" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/midi-settings.c:414 +msgid "Channel" +msgstr "Kanál" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." -msgstr "Do¹la pamä» pre data vzorky." +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "Číslo klienta" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Chyba pri èítaní" +#: app/midi-settings.c:434 +msgid "Port number" +msgstr "Číslo portu" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Naèíta» stereo vzorku" +#: app/midi-settings.c:453 +msgid "Input" +msgstr "Vstup" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" -msgstr "" -"Zvolili ste si stereo vzorku!\n" -"(SoundTracker doká¾e pracova» len s mono vzorkami!)\n" -"\n" -"Zvoµte ktorý kanál naèíta»:" +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "Pre budúci vývoj" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "¥avý" +#: app/midi-settings.c:468 +msgid "Output" +msgstr "Výstup" -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Zmie¹a»" +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "Úroveň ladenia" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Pravý" +#: app/midi-settings.c:492 +msgid "Misc" +msgstr "Rôzne" -#: app/sample-editor.c:1575 -msgid "Signed" -msgstr "Podpísaná" +#: app/midi-settings.c:532 +msgid "MIDI Configuration" +msgstr "Nastavenie MIDI" -#: app/sample-editor.c:1575 -msgid "Unsigned" -msgstr "Nepodpísaná" +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Úsek" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "Little-Endian" +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "_Stopa" -#: app/sample-editor.c:1576 -msgid "Big-Endian" -msgstr "Big-Endian" +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_OdstrániÅ¥ noty pod kurzorom" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "Mono" +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "VložiÅ¥ _stopu" -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "Stereo" +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "O_dstrániÅ¥ stopu" -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "Naèíta» surovú vzorku" +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "ZvýšiÅ¥ hodnotu príkazu" -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" -msgstr "" -"Zvolili ste vzorku ktorá nie je v známom\n" -"formáte. Mô¾ete teraz naèíta» surové data.\n" -"\n" -"Prosím zvoµte formát:" +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "ZnížiÅ¥ hodnotu príkazu" -#: app/sample-editor.c:1623 -msgid "Word format:" -msgstr "Slovný formát:" +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "_OdstrániÅ¥ blokové znaÄky" -#: app/sample-editor.c:1670 -msgid "Sampling Rate:" -msgstr "Vzorkovacia frekvencia:" +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "_InterpolovaÅ¥ efekty" -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" - -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "OK" +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Súbor" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Nemô¾em naèíta» vzorku" +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_OtvoriÅ¥..." -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." -msgstr "" -"Vzorka je príli¹ dlhá pre aktuálny modul mixéru. Napriek tomu naèítavam." +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "UložiÅ¥ _ako..." -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Je mo¾né pracova» iba s 8 a 16 bitovými vzorkami s najviac 2 kanálmi" +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "UložiÅ¥ modul ako _WAV..." -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "Prosím najprv zvoµte oblas»." +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "UložiÅ¥ _XM bez vzoriek..." -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Zaèa» vzorkovanie" +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "Nie je dostupný ¾iadny vzorkovací ovládaè" +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Modul" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Okno vzorkovania" +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "VyÄistiÅ¥ _vÅ¡etko" -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" -msgstr "Pri vzorkovaní do¹la pamä»!" +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "VyÄistiÅ¥ len ú_seky" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_OptimalizovaÅ¥ modul" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: soundtracker.glade:346 +#, fuzzy +msgid "_Set Optimal Amplification" +msgstr "Celkové zosilnenie" -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." -msgstr "" -"Nahratá vzorka je príli¹ dlhá pre aktuálny modul mixéru. Napriek tomu bude " -"pou¾itá." +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "Úp_ravy" -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normalizova»" +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "_Jazzový režim editácie" -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Vykona»" +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "_Posun..." -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Krivka hlasitosti" +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "Ús_ek" -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Pou¾i» lineárne zni¾ovanie hlasitosti na výber" +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "_Stopa" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "¥avý [%]:" +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Výber" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "H" +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "_ZnaÄkovací režim" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "D" +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Posunúť o poltón nahor" -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Pravý [%]:" +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Posunúť o poltón nadol" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" -msgstr "" +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Posunúť o oktávu nahor" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" -msgstr "" +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Posunúť o oktávu nadol" -#: app/sample-editor.c:2505 -msgid "Trim at the end" -msgstr "" +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "_NaÄítaÅ¥ úsek" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" -msgstr "" +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "_UložiÅ¥ aktuálny úsek" -#: app/tips-dialog.c:50 -msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." -msgstr "" -"Vitajte v SoundTrackeri!\n" -"\n" -"Ak takýto program pou¾ívate po prvý krát, mali by ste si najskôr\n" -"zohna» nejaké súbory XM alebo MOD a pohra» sa s nimi." +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "Ná_jdi nepoužitý úsek" -#: app/tips-dialog.c:55 -msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." -msgstr "" -"Editaèný re¾im SoundTrackeru bude citlivej¹í na vstup z klávesnice, ak\n" -"zní¾ite veµkos» vyrovnávacej pamäte mixéru vo výstupe pre editáciu\n" -"v Nastavení zvuku." +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_KopírovaÅ¥ aktuálny úsek do nepoužitého" -#: app/tips-dialog.c:59 -msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" -msgstr "" -"Mô¾ete upravi» krajné body sluèky v editore vzoriek podr¾aním klávesy\n" -"Shift a stláèaním µavého a pravého tlaèítka na my¹i.\n" +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "_UložiÅ¥ aktuálny úsek" -#: app/tips-dialog.c:62 -msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" msgstr "" -"Ak sa chcete dozvedie» viac o \"trackingu\" a ako pracujú rôzne príkazy,\n" -"pozrite sa na http://www.united-trackers.org/" -#: app/tips-dialog.c:65 -msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." -msgstr "" -"Mô¾ete priradi» jednotlivé vzor jednotlivým klávesom tým,\n" -"¾e aktivujete vzorku a kliknete na klávesnicu v editore\n" -"nástrojov." +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "_VyÄistiÅ¥ nepoužité úseky" -#: app/tips-dialog.c:69 -msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" -msgstr "" -"Ak vá¹ kurzor uviazol v políèku pre zadávanie èísel,\n" -"stlaète Enter alebo Tab pre uvoµnenie kurzoru." +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "Z_baliÅ¥ úseky" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "SoundTracker - Tip dòa" +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "Aktuálny úsek" -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Predchádzajúci tip" +#: soundtracker.glade:753 +#, fuzzy +msgid "_Expand Current Pattern" +msgstr "_UložiÅ¥ aktuálny úsek" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Ïal¹í tip" +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Zobrazi» tip nabudúce" +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "Arpeggio" +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "Aktuálna stopa" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "Porta nahor" +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "Aktuálna stopa" -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "Porta nadol" +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "Aktuálna stopa" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" -msgstr "Tone porta" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Nástroj" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "Vibrato" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "NaÄítaÅ¥ XI" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" -msgstr "Tone porta + Volume slide" +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "UložiÅ¥ XI" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" -msgstr "Vibrato + Volume slide" +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_VyÄistiÅ¥ aktuálny" -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "Tremolo" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_OdstrániÅ¥ nepoužité nástroje" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "Nastavi» vyvá¾enie" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "N_astavenia" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Skok na pozíciu" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "ZobraziÅ¥ o_sciloskopy" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "Nastavi» hlasitos»" +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "Zakonèi» úsek" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Tracker" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "Nastavi» tempo/BPM" +#: soundtracker.glade:913 +#, fuzzy +msgid "_Flicker-free Scrolling" +msgstr "Posúvanie bez _kmitania" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Nastavi» celkovú hlasitos»" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "_Predchádzajúce písmo" -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "Celkový posun hlasitosti" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "ÄŽ_alÅ¡ie písmo" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "Key off" +#: soundtracker.glade:944 +#, fuzzy +msgid "Change Preferred _Accidental Type" +msgstr "ZmeniÅ¥ uprednostňovaný _náhodný typ" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "Nastavi» pozíciu obálky" +#: soundtracker.glade:953 +#, fuzzy +msgid "Change Effect Column _Editing Direction" +msgstr "ZmeniÅ¥ _smer editácie stĺpca efektov" -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "Posun vyvá¾enia" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "Nastavenie klávesnice" -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "Rezonancia LP filtra" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "Nastavenie zvuku" -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "Viacnásobná nota" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "Nastavenie uživateľského rozhrania" -#: app/track-editor.c:142 -msgid "Tremor" -msgstr "Tremor" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "Nastavenie MIDI" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "Cutoff LP filtra" +#: soundtracker.glade:1016 +#, fuzzy +msgid "_Disable Splash Screen" +msgstr "Z_akázaÅ¥ úvodné okno" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "Jemné porta nahor" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_UložiÅ¥ nastavenia" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "Jemné porta dole" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "U_ložiÅ¥ nastavenia pri ukonÄení" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "Nastavi» ovládanie gliss" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_Pomocník" -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "Nastavi» ovládanie vibrata" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "_O programe..." -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "Nastavi» jemné doladenie" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "ZobraziÅ¥ _pomôcky..." -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Nastavi» zaèiatok/koniec sluèky" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "Efekty _XM..." -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "Nastavi» ovládanie tremolo" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "PrehraÅ¥ skladbu" -#: app/track-editor.c:161 -msgid "Retrig note" -msgstr "Znovu zahra» notu" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "PrehraÅ¥ skladbu" -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "Jemné pridanie hlasitosti" +#~ msgid "transport master" +#~ msgstr "transport master" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "Jemné ubratie hlasitosti" +#~ msgid "SoundTracker Startup" +#~ msgstr "Å tart SoundTrackeru" -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "Ukonèenie noty" +#~ msgid "Vibrato Type:" +#~ msgstr "Typ vibrata:" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "Oneskorenie noty" +#~ msgid "VolFade" +#~ msgstr "VolFade" -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "Oneskorenie úseku" +#~ msgid "Set loop begin/loop" +#~ msgstr "NastaviÅ¥ zaÄiatok/koniec sluÄky" -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "Ubratie hlasitosti" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Tón:" -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "Pridanie hlasitosti" +#~ msgid "Error while loading instruments." +#~ msgstr "Chyba pri naÄítavaní nástrojov." -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "Nastavi» rýchlos» vibrato" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "Výstup ESD je nepoužiteľný v\n" +#~ "interaktívnom režime, kvôli oneskoreniu ESD.\n" +#~ "Použite výstupné pluginy OSS alebo ALSA\n" +#~ "pre riadnu prácu." -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "Posun vyvá¾enia doµava" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Nemôžem sa pripojiÅ¥ k ESD pre zvukový výstup:\n" +#~ "%s" -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "Posun vyvá¾enia doprava" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "Tieto zmeny nadobudnú platnosÅ¥ až keÄ znovu spustíte vzorkovanie." -#: app/track-editor.c:184 -msgid "sine" -msgstr "sínus" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Zmena nástroja" -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "naklonená rovina" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "%s: Požadované kódovanie zvuku nie je podporované.\n" -#: app/track-editor.c:186 -msgid "square" -msgstr "¹tvorec" +#~ msgid "%s: %s" +#~ msgstr "%s: %s" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, c-format -msgid "None ]" -msgstr "®iadne ]" +#~ msgid "%s: Cannot play (%s)" +#~ msgstr "%s: Nemôžem prehrávaÅ¥ (%s)" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Jazzová editácia:" +#~ msgid "%s: Cannot record (%s)" +#~ msgstr "%s: Nemôžem nahrávaÅ¥ (%s)" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Tracker" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Neznáma verzia XI 0x%x\n" -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "Zoznam písiem" +#~ msgid "out_1" +#~ msgstr "out_1" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "Prida» písmo" +#~ msgid "out_2" +#~ msgstr "out_2" -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "Ubra» písmo" +#~ msgid "Monitor" +#~ msgstr "Monitor" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "Pou¾i» písmo" +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#smpl" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Nahor" +#~ msgid "OK" +#~ msgstr "OK" -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Nadol" +#~ msgid "Cancel" +#~ msgstr "Storno" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "Zvoµte písmo..." +#~ msgid "(%d bytes)" +#~ msgstr "(%d bajtov)" -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "Celá pieseò" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Predpokladanie oneskorenie zvuku: %f mikrosekúnd" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "V¹etky úseky" +#~ msgid "ALSA card number:" +#~ msgstr "Číslo karty ALSA:" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "Aktuálny úsek" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Nemôžem otvoriÅ¥ zariadenie ALSA pre zvukový vstup (karta %d, zariadenie " +#~ "%d):\n" +#~ "%s" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "Aktuálna stopa" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "Požadované parametre zvukového výstupu nie sú podporované.\n" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Aktuálny nástroj" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Nemôžem otvoriÅ¥ zariadenie ALSA pre zvukový výstup (karta %d, zariadenie " +#~ "%d):\n" +#~ "%s" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "V¹etky nástroje" +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "Požadované parametre výstupného kanálu nie sú podporované.\n" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "O poltón nahor" +#~ msgid "Alsa setup error.\n" +#~ msgstr "Chyba nastavenia ALSA.\n" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "O poltón nadol" +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "Nemôžem otvoriÅ¥ %s pre zvukový výstup:\n" +#~ "%s" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "O oktávu nahor" +#~ msgid "soundtracker" +#~ msgstr "soundtracker" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "O oktávu nadol" +#~ msgid "Save Song" +#~ msgstr "UložiÅ¥ skladbu" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "Zameni» 1 <-> 2" +#~ msgid "Yes" +#~ msgstr "Ãno" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "Zmeni» 1 -> 2" +#~ msgid "No" +#~ msgstr "Nie" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "Nástroje prenotovania" +#~ msgid "Close" +#~ msgstr "ZatvoriÅ¥" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Rozsah operácie:" +#~ msgid "No file selected." +#~ msgstr "Nebol zvolený žiadny súbor." -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Prenotovanie" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Naozaj chcete prepísaÅ¥ tento súbor?" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Zmena nástroja" +#~ msgid "Load XM..." +#~ msgstr "NaÄítaÅ¥ XM..." -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Nástroj 1:" +#~ msgid "Save XM..." +#~ msgstr "UložiÅ¥ XM..." -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Aktuálny nástroj" +#~ msgid "Save song as XM..." +#~ msgstr "UložiÅ¥ skladbu ako XM..." -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Nástroj 2:" +#~ msgid "Load Instrument..." +#~ msgstr "NaÄítaÅ¥ nástroj..." -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Då¾ka úseku je mimo hranice: %d.\n" +#~ msgid "Save Instrument..." +#~ msgstr "UložiÅ¥ nástroj..." -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "Súbor nie je XI nástroj." +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "Súbor s nastavením klávesnice je poÅ¡kodený.\n" +#~ "Prosím použite voľbu \"Nastavenie klávesnice\"." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Neznáma verzia XI 0x%x\n" +#~ msgid "Ok" +#~ msgstr "Ok" -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "Neplatný typ vibrata %d, bude pou¾itý sínus.\n" +#~ msgid "_Quit" +#~ msgstr "U_konÄiÅ¥" -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "Chyba pri naèítavaní úsekov." +#~ msgid "C_ut" +#~ msgstr "Vys_trihnúť" -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Nemô¾em otvori» súbor" +#~ msgid "_Copy" +#~ msgstr "_KopírovaÅ¥" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Chyba pri naèítavaní nástrojov." +#~ msgid "_Paste" +#~ msgstr "V_ložiÅ¥" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"Modul obsahuje vzorky, ktoré sú pridlhé pre aktuálny mixér.\n" -"Maximálna då¾ka vzorky je %d." +#, fuzzy +#~ msgid "P_aste" +#~ msgstr "VložiÅ¥" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "Toto nie je XM formát FastTrackeru ani podporovaný formát MOD!" +#~ msgid "_Load XI..." +#~ msgstr "_NaÄítaÅ¥ XI..." -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "Chyba pri naèítavaní alebo neoèakávaný koniec súboru" +#~ msgid "_Save XI..." +#~ msgstr "_UložiÅ¥ XI..." -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "Nesprávna alebo nepodporovaná verzia úsekového súboru!" +#~ msgid "Change effect column editing _direction" +#~ msgstr "ZmeniÅ¥ _smer editácie stĺpca efektov" -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "Nesprávna då¾ka úseku!" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "Nastavenie _klávesnice..." -#: app/xm.c:1468 -msgid "Error during saving pattern!" -msgstr "Chyba pri ukladaní úseku!" +#~ msgid "_Audio Configuration..." +#~ msgstr "Nastavenie _zvuku..." -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "Automatické pripojenie" +#~ msgid "_GUI Configuration..." +#~ msgstr "Nastavenie _ovládania..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -msgid "Channel" -msgstr "Kanál" +#~ msgid "_MIDI Configuration..." +#~ msgstr "Nastavenie _MIDI..." -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "Èíslo klienta" +#~ msgid "Load Sample..." +#~ msgstr "NaÄítaÅ¥ vzorku..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" -msgstr "Èíslo portu" +#~ msgid "Save WAV..." +#~ msgstr "UložiÅ¥ WAV..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -msgid "Input" -msgstr "Vstup" +#~ msgid "8363" +#~ msgstr "8363" -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "Pre budúci vývoj" +#~ msgid "Execute" +#~ msgstr "VykonaÅ¥" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -msgid "Output" -msgstr "Výstup" +#~ msgid "Apply" +#~ msgstr "PoužiÅ¥" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "Úroveò ladenia" +#~ msgid "Drivers" +#~ msgstr "OvládaÄe" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -msgid "Misc" -msgstr "Rôzne" +#~ msgid "Up" +#~ msgstr "Nahor" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -msgid "MIDI Configuration" -msgstr "Nastavenie MIDI" +#~ msgid "Down" +#~ msgstr "Nadol" #~ msgid "Horizontal effect column editing" -#~ msgstr "Zmení smer upravovania ståpca efektov" - -#~ msgid "Pattern" -#~ msgstr "Úsek" +#~ msgstr "Zmení smer upravovania stĺpca efektov" #~ msgid "PatLength" -#~ msgstr "Då¾kaÚseku" +#~ msgstr "DĺžkaÚseku" #~ msgid "_Accidentals" -#~ msgstr "_Náhodnosti" +#~ msgstr "_Náhodnosti" #~ msgid "# _Accidentals" -#~ msgstr "# _Náhodnosti" +#~ msgstr "# _Náhodnosti" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/sl.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/sl.gmo differ diff -Nru soundtracker-0.6.8/po/sl.po soundtracker-1.0.2~pre2/po/sl.po --- soundtracker-0.6.8/po/sl.po 2006-02-25 13:25:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/sl.po 2020-05-27 18:54:29.000000000 +0000 @@ -1,21 +1,28 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Free Software Foundation, Inc. +# Slovenian translations for soundtracker package. +# Copyright (C) 2000 Free Software Foundation, Inc. # Matej Erman , 2000. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: SoundTracker 0.6.0\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2000-08-17 15:00+0200\n" "Last-Translator: Matej Erman \n" "Language-Team: slovenian \n" +"Language: sl\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso8859-2\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8 bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "Izhod za predvajanje" @@ -23,2115 +30,3653 @@ msgid "Editing Output" msgstr "Izhod za urejanje" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" -msgstr "Vzorèenje" +msgstr "VzorÄenje" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "Gonilni modul" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" -msgstr "Me¹alni modul" +msgstr "MeÅ¡alni modul" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Opis" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "Nastavitev audia" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Gonilniki" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" -msgstr "Me¹alniki" +msgstr "MeÅ¡alniki" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Zapri" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d bajtov)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Predvidena zakasnitev audia: %f mikrosekund" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "_XM uÄinki..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." -msgstr "Te nastavitve bodo upo¹tevane ¹ele po ponovnem predvajanju." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Frekvenca urejevalnika stez" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Loèljivost:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Kanali:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Frekvenca [Hz]:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Velikost predbranja:" +#: app/colors.c:44 +msgid "Major lines" +msgstr "" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "©tevilka ALSA kartice:" +#: app/colors.c:44 +msgid "Major lines highlighting" +msgstr "" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "©tevilka ALSA naprave:" +#: app/colors.c:45 +msgid "Minor lines" +msgstr "" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +#: app/colors.c:45 +msgid "Minor lines highlighting" msgstr "" -"Nisem mogel odpreti ALSA naprave za zvoèni vhod (kartica:%d, naprava:%d):\n" -"%s" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Zahtevani format za zvoèni izhod ni podprt.\n" - -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Zahtevani parametri za zvoèni izhod niso podprti.\n" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Izbor:" + +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Frekvenca urejevalnika stez" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Predvidena zakasnitev audia: %f milisekund" +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" msgstr "" -"Nisem mogel odpreti ALSA naprave za zvoèni izhod (kartica:%d, naprava:%d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 +#: app/colors.c:48 #, fuzzy -msgid "Required output-channel parameters not supported.\n" -msgstr "Zahtevani parametri za zvoèni izhod niso podprti.\n" +msgid "Delimiters" +msgstr "ZbriÅ¡i" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "" +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "ZbriÅ¡i" + +#: app/colors.c:49 +#, fuzzy +msgid "Channel numbers, loops" +msgstr "Kanali:" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -"Upo¹tevajte, da je ESD izhod v interaktivnem\n" -"naèinu neuporaben, ker ESD povzroèa prekritost. Za resno\n" -"delo raje uporabljajte OSS ali ALSA izhodne prikljuèke." -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" msgstr "" -"Nisem mogel povezati ESD za zvoèni izhod:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "®al (zaenkrat) ¹e brez nastavitev!" +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Ne morem odpreti datoteke za pisanje." +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 +#: app/colors.c:52 #, fuzzy -msgid "These changes won't take effect until you restart sampling." -msgstr "Te nastavitve bodo upo¹tevane ¹ele po ponovnem predvajanju." +msgid "Cursor bg in selection" +msgstr "PoveÄaj na izbrano" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" msgstr "" -#: app/drivers/oss-input.c:234 -#, fuzzy, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "Poz. ponov. igr." + +#: app/colors.c:53 +msgid "Mixer position indicator" msgstr "" -"Nisem mogel odpreti /dev/dsp za vzorèenje:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d vzorcev)" +#: app/colors.c:54 +msgid "Zero line" +msgstr "" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" +#: app/colors.c:54 +msgid "Sample display zero line" msgstr "" -#: app/drivers/oss-output.c:391 -#, fuzzy, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:56 +msgid "White keys" msgstr "" -"Nisem mogel odpreti /dev/dsp za zvoèni izhod:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" +#: app/colors.c:57 +msgid "Black keys" msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" +#: app/colors.c:58 +msgid "White keys pressed" msgstr "" -#: app/drivers/jack-output.c:327 -#, fuzzy, c-format -msgid "soundtracker" -msgstr "Urejevalnik stez" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" +#: app/colors.c:59 +msgid "Black keys pressed" msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" +#: app/colors.c:60 +msgid "White text pressed" msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" +#: app/colors.c:61 +msgid "Black text pressed" msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 +#: app/colors.c:395 #, fuzzy, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "Zahtevani format za zvoèni izhod ni podprt.\n" +msgid "%s colors configuration" +msgstr "Nastavitev tipkovnice" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 -#, c-format -msgid "%s: Cannot set block size (%s)" +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Obrni" + +#: app/colors.c:405 +msgid "Reset the color scheme to standard" msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" + +#: app/colors.c:414 +msgid "Gtk clavier colors" msgstr "" -#: app/drivers/sun-input.c:242 +#: app/drivers/alsa1x.c:261 #, c-format -msgid "%s: Cannot record (%s)" +msgid "%f milliseconds" msgstr "" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Dol¾ina" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "Å tevilka ALSA naprave:" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Trenutna" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Odmik" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Vrednost" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +msgid "Unable to set channels number" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Vnesi" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Zbri¹i" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" msgstr "" -"Grafièni\n" -"urejevalnik\n" -"ovojnice\n" -"samo v\n" -"razlièici za GNOME" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Prenos" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Toèka" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Zanka" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Zaèetek" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Konec" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Nalo¾i modul" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Shrani modul" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Ustvari WAV" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Shrani skladbo" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d vzorcev)" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Nalo¾i vzorec" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Shrani vzorec" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Nalo¾i instrument" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Shrani instrument" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8 bitni" -#: app/file-operations.c:175 -msgid "File" -msgstr "Datoteka" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16 bitni" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Operacija ni podprta." +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +#, fuzzy +msgid "Mono" +msgstr "Spremljaj" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Frekvenca ociloskopov" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +#, fuzzy +msgid "Stereo" +msgstr "Ustavi" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Frekvenca urejevalnika stez" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "Te nastavitve bodo upoÅ¡tevane Å¡ele po ponovnem predvajanju." -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "Nastavitev GUI" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +#, fuzzy +msgid "These changes won't take effect until you restart sampling." +msgstr "Te nastavitve bodo upoÅ¡tevane Å¡ele po ponovnem predvajanju." -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "©estnajsti¹ke ¹tevilke vrstic" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Uporabljaj velike tiskane èrke za ¹estnajsti¹ke ¹tevilke" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "" + +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "LoÄljivost:" + +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Kanali:" + +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Frekvenca [Hz]:" + +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Velikost predbranja:" -#: app/gui-settings.c:368 +#: app/drivers/alsa1x.c:914 #, fuzzy -msgid "Asynchronous (IT-style) pattern editing" -msgstr "Asinhrono urejanje" +msgid "Number of Periods:" +msgstr "Å tevilo kanalov:" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Predvidena zakasnitev audia: %f milisekund" + +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." msgstr "" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" msgstr "" -#: app/gui-settings.c:389 -#, fuzzy -msgid "Save window geometry on exit" -msgstr "Shrani nastavitve ob _izhodu" +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" msgstr "" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" msgstr "" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Velikost predbranja za ociloskope [MB]" +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Oblika vrstic na stezah:" +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" msgstr "" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Predvajam skladbo..." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Predvajam shemo..." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Nalagam modul..." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Modul je nalo¾en." +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "Napaka pri nalaganju shem." -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Shranjujem modul..." +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Modul je shranjen." +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "Nalagam vzorec..." +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Vzorec je nalo¾en." +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Shranjujem vzorec..." +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Vzorec je shranjen." +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "Nalagam instrument..." +#: app/drivers/alsa1x.c:1328 +msgid "Unable to enable timestamping for playback" +msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Instrument je nalo¾en." +#: app/drivers/alsa1x.c:1329 +msgid "Unable to enable timestamping for capture" +msgstr "" -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Shranjujem instrument..." +#: app/drivers/alsa1x.c:1335 +msgid "Unable to set timestamp type for playback" +msgstr "" -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Instrument je shranjen." +#: app/drivers/alsa1x.c:1336 +msgid "Unable to set timestamp type for capture" +msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Shranjujem skladbo..." +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" +msgstr "" -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "Skladba je shranjena." +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Vpra¹anje" +#: app/drivers/alsa1x.c:1352 +msgid "Unable to prepare playback" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" +#: app/drivers/alsa1x.c:1353 +msgid "Unable to prepare capture" msgstr "" -#: app/gui-subs.c:500 -#, fuzzy -msgid "No" -msgstr "Brez" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" +msgstr "" -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Preklièi" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Opozorilo" +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "Napaka!" +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "Žal (zaenkrat) Å¡e brez nastavitev!" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Hitrost" +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" +#: app/drivers/irix-output.c:178 +#, fuzzy +msgid "16 Bit output not supported." +msgstr "Operacija ni podprta." + +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "Operacija ni podprta." + +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." msgstr "" +"Nisem mogel odpreti /dev/dsp za vzorÄenje:\n" +"%s" -#: app/gui.c:301 +#: app/drivers/oss.c:130 #, fuzzy -msgid "Highlight rows (major / minor):" -msgstr "Osvetli vrstice:" +msgid "OSS input: reading error" +msgstr "Spreminjanje instrumenta" -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" msgstr "" -#: app/gui.c:506 -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Predvidena zakasnitev audia: %f milisekund" + +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d vzorcev)" + +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" msgstr "" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" msgstr "" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" msgstr "" -"Ali ste preprièani, da hoèete sprostiti trenutni projekt?\n" -"Vse spremembe bodo izgubljene!" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Ali ste preprièani, da ¾elite pisati prek datoteke?" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "" -#: app/gui.c:638 -#, fuzzy -msgid "Error when opening pattern file!" -msgstr "Napaka pri nalaganju shem." +#: app/drivers/oss.c:445 +#, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "Zahtevani format za zvoÄni izhod ni podprt.\n" + +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" msgstr "" -#: app/gui.c:1719 -#, fuzzy -msgid "SoundTracker Startup" -msgstr "SoundTrackerjev nasvet dneva" +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "" -#: app/gui.c:1778 app/gui.c:1815 -#, fuzzy -msgid "Loading..." -msgstr "Nalagam vzorec..." +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/gui.c:1804 -msgid "Use SoundTracker!" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." msgstr "" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Nalo¾i XM..." - -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Shrani XM..." +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Ustvari modul kot WAV..." +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "Shrani skladbo kot XM..." +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "" -#: app/gui.c:1872 -#, fuzzy -msgid "Load current pattern..." -msgstr "Trenutna shema" +#: app/drivers/jack.c:610 +msgid "Jack server is not running or some error occured." +msgstr "" -#: app/gui.c:1874 +#: app/drivers/sdl-output.c:76 #, fuzzy -msgid "Save current pattern..." -msgstr "Trenutna shema" +msgid "Experimental SDL support." +msgstr "Operacija ni podprta." -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Predvajaj skladbo" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Predvajaj shemo" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Ustavi" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/gui.c:1973 -#, fuzzy -msgid "Pat" -msgstr "Prilepi" +#: app/drivers/sun-output.c:402 +#, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "" -#: app/gui.c:1979 -#, fuzzy -msgid "Edited pattern" -msgstr "/Uredi/_Shema" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "Zahtevani format za zvoÄni izhod ni podprt.\n" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/sun-output.c:455 +#, c-format +msgid "SUN output (%s): Cannot set block size" msgstr "" -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "©tevilo kanalov:" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" -#: app/gui.c:2025 +#: app/drivers/sun-input.c:77 #, fuzzy -msgid "Pattern Length" -msgstr "Dol. sheme" +msgid "SUN input: reading error" +msgstr "Spreminjanje instrumenta" -#: app/gui.c:2060 -msgid "Set preferred accidental type" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" msgstr "" -#: app/gui.c:2066 -#, fuzzy -msgid "Measure" -msgstr "pravokotna" - -#: app/gui.c:2067 -msgid "Enable row highlighting" +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" msgstr "" -#: app/gui.c:2093 -#, fuzzy -msgid "Other..." -msgstr "Ostale tipke..." +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "" -#: app/gui.c:2129 -msgid "Change effect column editing direction" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" +#: app/drivers/sun-input.c:273 +#, c-format +msgid "SUN input (%s): Cannot handle %d Hz" msgstr "" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "Zahtevani format za zvoÄni izhod ni podprt.\n" + +#: app/drivers/sun-input.c:332 +#, c-format +msgid "SUN input (%s): Cannot set block size" msgstr "" -#: app/gui.c:2216 -#, fuzzy -msgid "Editing" -msgstr "_Uredi" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Dolžina" -#: app/gui.c:2223 -msgid "Octave" -msgstr "Oktava" +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Trenutna" -#: app/gui.c:2232 -msgid "Jump" -msgstr "Skok" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Odmik" -#: app/gui.c:2241 -msgid "Instr" -msgstr "Instr." +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Vrednost" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Vzorec" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Vnesi" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "ZbriÅ¡i" + +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" msgstr "" +"GrafiÄni\n" +"urejevalnik\n" +"ovojnice\n" +"samo v\n" +"razliÄici za GNOME" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Prenos" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "Prehod glas." +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "ToÄka" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "Hitrost vibr." +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "Zanka" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "Globina vibr." +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "ZaÄetek" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "©irina vibr." +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Konec" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Ne morem odpreti datoteke." +#: app/file-operations.c:127 +#, c-format +msgid "" +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sinusna" +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Pravokotna" +#: app/file-operations.c:245 +msgid "All files" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "®agasta navzdol" +#: app/file-operations.c:388 +msgid "File" +msgstr "Datoteka" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "®agasta navzgor" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Urejevalnik instrumentov" +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Ovojnica glasnosti" +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "MeÅ¡alniki" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Ovojnica panorame" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "Nastavitev GUI" + +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Frekvenca ociloskopov" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Nalo¾i instrument..." - -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Shrani instrument..." +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Frekvenca urejevalnika stez" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "Nalo¾i XI" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Å estnajstiÅ¡ke Å¡tevilke vrstic" -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "Shrani XI" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Uporabljaj velike tiskane Ärke za Å¡estnajstiÅ¡ke Å¡tevilke" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Vrsta vibrata:" +#: app/gui-settings.c:343 +#, fuzzy +msgid "FT2-like volume column" +msgstr "NatanÄno drenje glasnosti gor" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Nota:" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" +msgstr "" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Vpelji" +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" +msgstr "" -#: app/keys.c:57 +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "" + +#: app/gui-settings.c:367 #, fuzzy -msgid "" -msgstr "Brez" +msgid "Asynchronous (IT-style) pattern editing" +msgstr "Asinhrono urejanje" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "Tipka, ki vnese posebno noto za spust tipke za FastTrakerjeve module." +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" msgstr "" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "Tipke zgornje oktave..." +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "" -#: app/keys.c:146 -msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." -msgstr "Te tipke se nahajajo na zgornji polovici tipkovnice. Noto c ponavadi zaigra tipka, ki je desno od tipke TAB. Ostale tipke naj bi bile razporejene kot klaviatura pri klavirju, vkljuèno s tipkami za ¹tevilke, ki so vrtico vi¹je." - -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Tipke spodnje oktave..." +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." -msgstr "Te tipke se nahajajo na spodnji polovici tipkovnice. Noto c ponavadi zaigra prva tipka za èrko, ki je desno od levega shifta. Ostale tipke naj bi bile razporejene kot klaviatura pri klavirju, vkljuèno s tipkami, ki so vrstico vi¹je." +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "" -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "Ostale tipke..." +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Razne ostale tipke" +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "" -#: app/keys.c:513 -msgid "Function" -msgstr "Funkcija" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Dodelitev" +#: app/gui-settings.c:430 +#, fuzzy +msgid "Save window geometry on exit" +msgstr "Shrani nastavitve ob _izhodu" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Nastavitev tipkovnice" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Razlaga skupine tipk" +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Razlaga tipke" +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." +msgstr "" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Preuredbe:" +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Izbor:" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Nastavi izbrano tipko" +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Velikost predbranja za ociloskope [MB]" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Nastavi vse tipke" +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Vzorec je naložen." -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +#: app/gui-settings.c:484 +msgid "Scopes" msgstr "" -"Prosim pritisnite ¾eljeno kombinacijo tipk!\n" -"Kliknite v levi seznam za preklic" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "V redu" - -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Uveljavi" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Uredi" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +#: app/gui-settings.c:490 +msgid "Strobo" msgstr "" -"Konfiguracijska datoteka za tipkovnico je nepopolna.\n" -"Prosim, èe uporabite dialog za nastavitev tipkovnice." -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" msgstr "" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" +#: app/gui-settings.c:494 +msgid "Minmax" msgstr "" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" msgstr "" -"Samodejna nastavitev tipk je bila neuspe¹na.\n" -"Prosim, èe uporabite dialog za nastavitev tipkovnice\n" -"v meniju Nastavitve." -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Oblika vrstic na stezah:" + +#: app/gui-settings.c:572 +msgid "Color scheme" msgstr "" -"Ali ste preprièani, da ¾elite to storiti?\n" -"Vse spremembe bodo izgubljene!" -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +#: app/gui-settings.c:573 +#, fuzzy +msgid "Tracker colors configuration" +msgstr "Nastavitev tipkovnice" + +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." msgstr "" -"Ali ste preprièani, da ¾elite konèati?\n" -"Vse spremembe bodo izgubljene!" -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Odpri..." +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Predvajam skladbo..." -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Shrani _kot..." +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Predvajam shemo..." -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Shrani modul kot _WAV..." +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "Nalagam modul..." -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Shrani XM brez vzorcev..." +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "Modul je naložen." -#: app/menubar.c:434 -msgid "_Quit" -msgstr "_Izhod" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Shranjujem modul..." -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Poèisti _vse" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "Modul je shranjen." -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Poèisti samo _sheme" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "Nalagam vzorec..." -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Optimiziraj modul" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Vzorec je naložen." -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "_Izre¾i" - -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Prepi¹i" - -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "P_rilepi" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Shranjujem vzorec..." -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Ubij note" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Vzorec je shranjen." -#: app/menubar.c:480 -#, fuzzy -msgid "_Insert track" -msgstr "_Vstavi" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "Nalagam instrument..." -#: app/menubar.c:482 -#, fuzzy -msgid "_Delete track" -msgstr "_Zbri¹i" +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Instrument je naložen." -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Zveèaj cmd vrednost" +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Shranjujem instrument..." -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Zmanj¹aj cmd vrednost" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Instrument je shranjen." -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "_Oznaèievalni naèin" +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Shranjujem skladbo..." -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "Poèisti oznaèbe _blokov" +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "Skladba je shranjena." -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "I_nterpolacijski uèinki" +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "Napaka!" -#: app/menubar.c:508 -msgid "Transpose half-note up" +#: app/gui-subs.c:414 +msgid "Question" +msgstr "VpraÅ¡anje" + +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." msgstr "" -#: app/menubar.c:510 -#, fuzzy -msgid "Transpose half-note down" -msgstr "Zni¾aj za pol note" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" -#: app/menubar.c:512 -msgid "Transpose octave up" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." msgstr "" -#: app/menubar.c:514 -#, fuzzy -msgid "Transpose octave down" -msgstr "Zni¾aj za oktavo" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Opozorilo" -#: app/menubar.c:526 +#: app/gui-subs.h:225 #, fuzzy -msgid "P_aste" -msgstr "Prilepi" - -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "_Jazzovski naèin urejanja" +msgid "Information" +msgstr "Nastavitev GUI" -#: app/menubar.c:534 -msgid "_Record keyreleases" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" msgstr "" -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "_Prestavitev..." - -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "_Shema" - -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "_Steza" - -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Izbor" - -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_Najdi neuporabljeno shemo" - -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Prepi¹i trenutno v neuporabljeno shemo" - -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "_Zbri¹i neuporabljene sheme" +#: app/gui.c:260 +#, fuzzy +msgid "Highlight rows (major / minor):" +msgstr "Osvetli vrstice:" -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "P_akiraj sheme" +#: app/gui.c:330 +msgid "" +msgstr "" -#: app/menubar.c:592 +#: app/gui.c:451 #, fuzzy -msgid "_Save Current Pattern" -msgstr "Trenutna shema" +msgid "Saving module failed" +msgstr "Shranjujem modul..." -#: app/menubar.c:594 -#, fuzzy -msgid "L_oad Pattern" -msgstr "_Shema" +#: app/gui.c:535 +msgid "File output" +msgstr "" -#: app/menubar.c:599 +#: app/gui.c:612 #, fuzzy -msgid "Sh_rink Current Pattern" -msgstr "Trenutna shema" +msgid "Can't open file for writing" +msgstr "Ne morem odpreti datoteke za pisanje." -#: app/menubar.c:601 +#: app/gui.c:618 #, fuzzy -msgid "_Expand Current Pattern" -msgstr "Trenutna shema" +msgid "Can't change file ownership" +msgstr "Ne morem odpreti datoteke za pisanje." -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." msgstr "" -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" +#: app/gui.c:660 +msgid "An error occured while writing to file" msgstr "" -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Nalo¾i XI..." +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "Shrani XI..." +#: app/gui.c:715 +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_Poèisti trenutnega" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"Ali ste prepriÄani, da hoÄete sprostiti trenutni projekt?\n" +"Vse spremembe bodo izgubljene!" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Zbri¹i neuporabljene instrumente" +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "Napaka pri nalaganju shem." -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" msgstr "" -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "_Prej¹nja pisava" +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "ZaÄetek" -#: app/menubar.c:642 -msgid "_Next font" -msgstr "_Naslednja pisava" +#: app/gui.c:2178 app/gui.c:2206 +#, fuzzy +msgid "Loading..." +msgstr "Nalagam vzorec..." -#: app/menubar.c:647 -msgid "Change preferred _accidental type" +#: app/gui.c:2195 +msgid "Use SoundTracker!" msgstr "" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" msgstr "" +"Ali ste prepriÄani, da želite konÄati?\n" +"Vse spremembe bodo izgubljene!" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Prika¾i _ociloskope" +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Urejevalnik stez" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "Nastavitev _tipkovnice..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "Nastavitev _audia..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "Nastavitev _GUI..." +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "Nalagam vzorec..." -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "Nastavitev _MIDI..." +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" -#: app/menubar.c:679 -msgid "Disable splash screen" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" msgstr "" -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Shrani nastavitve takoj" +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Shrani nastavitve ob _izhodu" +#: app/gui.c:2400 +#, fuzzy +msgid "Extended pattern (*.xp)" +msgstr "/Uredi/_Shema" -#: app/menubar.c:690 -msgid "_About..." -msgstr "_O programu..." +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" +msgstr "" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Poka¾i _nasvete..." - -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "_XM uèinki..." +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Naloži modul" -#: app/menubar.c:704 -msgid "_File" -msgstr "_Datoteka" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" +msgstr "" -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Modul" +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Shrani modul" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Uredi" +#: app/gui.c:2434 +#, fuzzy +msgid "Save the current module" +msgstr "Trenutna shema" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Instrument" +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Ustvari WAV" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Nastavitve" +#: app/gui.c:2436 +#, fuzzy +msgid "Render the current module as WAV file" +msgstr "Ustvari modul kot WAV..." -#: app/menubar.c:711 -msgid "_Help" -msgstr "_Pomoè" +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Shrani XM brez vzorcev..." -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/gui.c:2439 +#, fuzzy +msgid "Load current pattern..." +msgstr "Trenutna shema" + +#: app/gui.c:2440 +#, fuzzy +msgid "Save current pattern..." +msgstr "Trenutna shema" + +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Predvajaj skladbo" + +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Predvajaj shemo" + +#: app/gui.c:2525 +msgid "Play From Cursor" msgstr "" -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Ime instrumenta" +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "Predvajaj skladbo" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#vzor" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Ustavi" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Ime vzorca" +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Linearno" +#: app/gui.c:2562 +#, fuzzy +msgid "Pat" +msgstr "Prilepi" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/gui.c:2568 +#, fuzzy +msgid "Edited pattern" +msgstr "/Uredi/_Shema" -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Informacije o modulu" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "" -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Ime skladbe:" +#: app/gui.c:2583 +#, fuzzy +msgid "Pattern Length" +msgstr "Dol. sheme" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Frekvence:" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Hitrost" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "ProTrackerski naèin" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Å tevilo kanalov:" -#: app/module-info.c:395 -#, c-format -msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +#: app/gui.c:2632 +msgid "Set preferred accidental type" msgstr "" -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" +#: app/gui.c:2638 +#, fuzzy +msgid "Measure" +msgstr "pravokotna" + +#: app/gui.c:2639 +msgid "Enable row highlighting" msgstr "" -#: app/playlist.c:535 +#: app/gui.c:2660 #, fuzzy -msgid "Remove current playlist entry" -msgstr "Trenutna shema" +msgid "Other..." +msgstr "Ostale tipke..." -#: app/playlist.c:543 -msgid "Add + Cpy" +#: app/gui.c:2687 +msgid "Change effect column editing direction" msgstr "" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" msgstr "" -#: app/playlist.c:548 -msgid "Add Free" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" msgstr "" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" +#: app/gui.c:2740 +msgid "Pitchbend" msgstr "" -#: app/playlist.c:560 -#, fuzzy -msgid "Len" -msgstr "Dol¾ina" +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "" -#: app/playlist.c:574 +#: app/gui.c:2760 #, fuzzy -msgid "Song length" -msgstr "Dol¾ina skladbe" +msgid "Editing" +msgstr "_Uredi" -#: app/playlist.c:580 -#, fuzzy -msgid "Rstrt" +#: app/gui.c:2767 +msgid "Octave" +msgstr "Oktava" + +#: app/gui.c:2776 +msgid "Jump" +msgstr "Skok" + +#: app/gui.c:2785 +msgid "Instr" msgstr "Instr." -#: app/playlist.c:593 -#, fuzzy -msgid "Song restart position" -msgstr "Poz. ponov. igr." +#: app/gui.c:2801 +msgid "Sample" +msgstr "Vzorec" -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" +#: app/gui.c:2827 +msgid "dB" msgstr "" -"V va¹em domaèem imeniku je bil usvarjen imenik\n" -"'.soundtracker' za shranjevanje nastavitnevih datotek.\n" - -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Brez zanke" -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "Ping pong" +#: app/gui.c:2866 +#, c-format +msgid "Welcome to %s!" +msgstr "" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8 bitni" +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16 bitni" +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Ne morem odpreti datoteke." -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Urejevalnik vzorcev" +#: app/instrument-editor.c:209 +#, fuzzy +msgid "Saving instrument failed." +msgstr "Shranjujem instrument..." -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Glasnost" +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "Trenutni instrument" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Panorama" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sinusna" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Natanèna uglasitev" +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Pravokotna" -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Izbor:" +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "Žagasta navzdol" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Brez" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "Žagasta navzgor" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Vse" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" +msgstr "" -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Dol¾ina:" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Urejevalnik instrumentov" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Nastavi kot zanko" +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Ovojnica glasnosti" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "Osnov. nota" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Ovojnica panorame" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Nalo¾i vzorec..." +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Naloži instrument" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Shrani WAV..." +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "Shrani odsek kot WAV..." +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Shrani instrument" -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "Shrani WAV" +#: app/instrument-editor.c:297 +#, fuzzy +msgid "Save the current instrument" +msgstr "Trenutni instrument" -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "Shrani odsek" +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "Naloži XI" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Spremljaj" +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "Shrani XI" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Nagib glasnosti" +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "Drsenje glasnosti gor" -#: app/sample-editor.c:425 +#: app/instrument-editor.c:344 #, fuzzy -msgid "Trim" -msgstr "Tremor" +msgid "Vibrato:" +msgstr "Vibrato" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Poveèaj na izbrano" +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Poka¾i vse" +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "Hitrost vibr." -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Poveèaj (+50%)" +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "Globina vibr." -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Pomanj¹aj (-50%)" +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "Å irina vibr." -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Obrni" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Nota:" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Izre¾i" +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "Vpelji" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Odstrani" +#: app/keys.c:58 +#, fuzzy +msgid "" +msgstr "Brez" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Prepi¹i" +#: app/keys.c:134 +msgid "KOFF" +msgstr "" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Prilepi" +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "Tipka, ki vnese posebno noto za spust tipke za FastTrakerjeve module." -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "Poèisti vzorec" +#: app/keys.c:136 +msgid "JMP+" +msgstr "" -#: app/sample-editor.c:500 -#, fuzzy -msgid "Crop" -msgstr "Prepi¹i" +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "" -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(neizbrano)" +#: app/keys.c:138 +msgid "JMP-" +msgstr "" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." msgstr "" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Predvajaj skladbo" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Shranjujem modul..." + +#: app/keys.c:142 +msgid "RecMod" msgstr "" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Bralna napaka." +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Predvajam shemo..." -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Nalo¾i stereo vzorec" +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "Predvajaj shemo" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Predvajaj shemo" + +#: app/keys.c:146 +msgid "RecPat" msgstr "" -"Izbrali ste stereo vzorec!\n" -"(SoundTracker lahko obdeluje samo mono vzorce!)\n" -"\n" -"Prosim izberite kateri vzorec hoèete nalo¾iti:" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Levi" +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Predvajam shemo..." -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Me¹aj" +#: app/keys.c:148 +msgid "PlayCur" +msgstr "" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Desni" +#: app/keys.c:148 +msgid "Play module from cursor." +msgstr "" + +#: app/keys.c:150 +msgid "RecCur" +msgstr "" -#: app/sample-editor.c:1575 +#: app/keys.c:150 #, fuzzy -msgid "Signed" -msgstr "Sinusna" +msgid "Play module from cursor + recording." +msgstr "Predvajam shemo..." -#: app/sample-editor.c:1575 +#: app/keys.c:152 #, fuzzy -msgid "Unsigned" -msgstr "sinusna" +msgid "PlayRow" +msgstr "Predvajaj skladbo" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "" +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Trenutna shema" -#: app/sample-editor.c:1576 -msgid "Big-Endian" +#: app/keys.c:154 +msgid "PlayBlk" msgstr "" -#: app/sample-editor.c:1577 +#: app/keys.c:154 #, fuzzy -msgid "Mono" -msgstr "Spremljaj" +msgid "Play selected block." +msgstr "Nastavi izbrano tipko" -#: app/sample-editor.c:1577 -#, fuzzy -msgid "Stereo" -msgstr "Ustavi" +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Tipke zgornje oktave..." -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "Nalo¾i raw vzorec" +#: app/keys.c:167 +msgid "" +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." +msgstr "" +"Te tipke se nahajajo na zgornji polovici tipkovnice. Noto c ponavadi zaigra " +"tipka, ki je desno od tipke TAB. Ostale tipke naj bi bile razporejene kot " +"klaviatura pri klavirju, vkljuÄno s tipkami za Å¡tevilke, ki so vrtico viÅ¡je." + +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Tipke spodnje oktave..." -#: app/sample-editor.c:1597 +#: app/keys.c:173 msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." +msgstr "" +"Te tipke se nahajajo na spodnji polovici tipkovnice. Noto c ponavadi zaigra " +"prva tipka za Ärko, ki je desno od levega shifta. Ostale tipke naj bi bile " +"razporejene kot klaviatura pri klavirju, vkljuÄno s tipkami, ki so vrstico " +"viÅ¡je." + +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "Ostale tipke..." + +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Razne ostale tipke" + +#: app/keys.c:578 +msgid "Function" +msgstr "Funkcija" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "Dodelitev" + +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Nastavitev tipkovnice" + +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Razlaga skupine tipk" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Razlaga tipke" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Preuredbe:" + +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "Nastavi izbrano tipko" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "Nastavi vse tipke" + +#: app/keys.c:702 +msgid "" +"Please press the desired key combination!\n" +"Click into left list to cancel" +msgstr "" +"Prosim pritisnite željeno kombinacijo tipk!\n" +"Kliknite v levi seznam za preklic" + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "" + +#: app/keys.c:1028 +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." +msgstr "" +"Samodejna nastavitev tipk je bila neuspeÅ¡na.\n" +"Prosim, Äe uporabite dialog za nastavitev tipkovnice\n" +"v meniju Nastavitve." + +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" "\n" -"Please choose a format:" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" msgstr "" -"Izbrali ste vzorec, ki je v nepoznani obliki\n" -"Sedaj lahko nalo¾ite raw podatke.\n" + +#: app/menubar.c:126 +msgid "" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" "\n" -"Prosim izberite format:" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." +msgstr "" -#: app/sample-editor.c:1623 -#, fuzzy -msgid "Word format:" -msgstr "Wortformat:" +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"Ali ste prepriÄani, da želite to storiti?\n" +"Vse spremembe bodo izgubljene!" -#: app/sample-editor.c:1670 -#, fuzzy -msgid "Sampling Rate:" -msgstr "Vzorèenje" +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "" -#: app/sample-editor.c:1681 -msgid "8363" +#: app/mixers/kbfloat.c:838 +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" msgstr "" -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "V redu" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Ne morem prebrati vzorca" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Cyclic" +msgstr "" -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." -msgstr "Vzorec je predolg za trenutni me¹alni modul. Vseeno ga nalagam." +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Obdelujem lahko le 8 ali 16 bitne vzorce z najveè 2 kanaloma" +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" -#: app/sample-editor.c:1968 -msgid "Please select region first." +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" msgstr "" -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Zaèni vzorèiti" +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "Gonilnika za vzorèenje ni na voljo" +#: app/module-info.c:481 +msgid "Period" +msgstr "" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Vzorèevalno okno" +#: app/module-info.c:484 +msgid "s" +msgstr "" -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" +#: app/module-info.c:499 +msgid "Mode" msgstr "" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Nota:" -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." -msgstr "Posneti vzorec je predolg za trenutni me¹alni modul. Vseeno ga uporabljam." +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normaliziraj" +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Ime instrumenta" -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Izvr¹i" +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#vzor" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Nagibanje glasnosti" +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Ime vzorca" -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Izvedi linearni prehod na izboru" +#: app/module-info.c:665 +msgid "Linear" +msgstr "Linearno" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Levo [%]:" +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "P" +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Informacije o modulu" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "D" +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Ime skladbe:" -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Desno [%]:" +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Frekvence:" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" -msgstr "" +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "ProTrackerski naÄin" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Urejevalnik instrumentov" + +#: app/module-info.c:765 +msgid "Ins. 1" msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/module-info.c:768 +msgid "Smp. 1" msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/module-info.c:770 +msgid "Ins. 2" msgstr "" -#: app/tips-dialog.c:50 -msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +#: app/module-info.c:772 +msgid "Smp. 2" msgstr "" -"Dobrodo¹li v SoundTrackerju!\n" -"\n" -"Èe ste novi pri tej vrsti programov, boste verjetno najprej ¾eleli\n" -"dobiti nekaj XM in MOD datotek in se poigrati z njimi." -#: app/tips-dialog.c:55 -msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +#: app/module-info.c:781 +msgid "I1 => I2" msgstr "" -"Pri urejanju lahko dose¾ete kraj¹i odzivni èas tipkovnice tako, da v meniju\n" -"Nastavitev audia zmanj¹ate velikost predbranja za urejanje." -#: app/tips-dialog.c:59 -msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Trenutni instrument" + +#: app/module-info.c:786 +msgid "I1 <=> I2" msgstr "" -"Zanko vzorca lahko nastavite, èe dr¾ite tipko shift in\n" -"uporabite levi in desni mi¹kin gumb.\n" -#: app/tips-dialog.c:62 -msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Shrani instrument" + +#: app/module-info.c:791 +msgid "S1 => S2" msgstr "" -"Èe hoèete izvedeti veè o ustvarjanju glasbe s takim programom, poglejte na\n" -"http://www.united-trackers.org/" -#: app/tips-dialog.c:65 -msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" msgstr "" -"Instrumentu lahko dodelite vzorce na doloèene tipke tako, da\n" -"aktivirate vzorec in potem kliknite na klaviaturo v urejevalniku " -"instrumentov." -#: app/tips-dialog.c:69 -msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +#: app/module-info.c:796 +msgid "S1 <=> S2" msgstr "" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "SoundTrackerjev nasvet dneva" +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "Zamenjaj 1 <-> 2" -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Prej¹nji nasvet" +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Naslednji nasvet" +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Poka¾i nasvete tudi naslednjiè" +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "Arpreggio" +#: app/module-info.c:863 +msgid "Preview" +msgstr "" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "Porta gor" +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "Porta dol" +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" -msgstr "Tonska porta" +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "Vibrato" +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" -#: app/track-editor.c:118 +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "NatanÄna uglasitev" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "Osnov. nota" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "" + +#: app/playlist.c:511 +#, fuzzy +msgid "Remove current playlist entry" +msgstr "Trenutna shema" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Dolžina" + +#: app/playlist.c:548 +#, fuzzy +msgid "Song length" +msgstr "Dolžina skladbe" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Instr." + +#: app/playlist.c:567 +#, fuzzy +msgid "Song restart position" +msgstr "Poz. ponov. igr." + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"V vaÅ¡em domaÄem imeniku je bil usvarjen imenik\n" +"'.soundtracker' za shranjevanje nastavitnevih datotek.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Brez zanke" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "Ping pong" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8 bitni" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16 bitni" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Urejevalnik vzorcev" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "Glasnost" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Panorama" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Izbor:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "Brez" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Vse" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Dolžina:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "Nastavi kot zanko" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Naloži vzorec" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "Shrani XM brez vzorcev..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Shrani vzorec" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "Shrani XM brez vzorcev..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "Shrani odsek kot WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "Shrani WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "Shrani odsek" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Nagib glasnosti" + +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "Tremor" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "PoveÄaj na izbrano" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "Pokaži vse" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "PoveÄaj (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "PomanjÅ¡aj (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Obrni" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Izreži" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Odstrani" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "PrepiÅ¡i" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Prilepi" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "PoÄisti vzorec" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "PrepiÅ¡i" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(neizbrano)" + +#: app/sample-editor.c:1279 +msgid "Out of memory for copybuffer." +msgstr "" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "MeÅ¡aj" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Levi" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Desni" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d vzorcev)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "" + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "Bralna napaka." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"Izbrali ste stereo vzorec!\n" +"(SoundTracker lahko obdeluje samo mono vzorce!)\n" +"\n" +"Prosim izberite kateri vzorec hoÄete naložiti:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "ZaÄni vzorÄiti" + +#: app/sample-editor.c:1756 +#, fuzzy +msgid "Signed" +msgstr "Sinusna" + +#: app/sample-editor.c:1756 +#, fuzzy +msgid "Unsigned" +msgstr "sinusna" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "Naloži raw vzorec" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"Izbrali ste vzorec, ki je v nepoznani obliki\n" +"Sedaj lahko naložite raw podatke.\n" +"\n" +"Prosim izberite format:" + +#: app/sample-editor.c:1798 +#, fuzzy +msgid "Word format:" +msgstr "Wortformat:" + +#: app/sample-editor.c:1829 +#, fuzzy +msgid "Sampling Rate:" +msgstr "VzorÄenje" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Ne morem prebrati vzorca" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "Vzorec je predolg za trenutni meÅ¡alni modul. Vseeno ga nalagam." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "Obdelujem lahko le 8 ali 16 bitne vzorce z najveÄ 2 kanaloma" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Ne morem odpreti datoteke za pisanje." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "" + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "Gonilnika za vzorÄenje ni na voljo" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "VzorÄevalno okno" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "PoÄisti _vse" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "VzorÄenje" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"Izbrali ste stereo vzorec!\n" +"(SoundTracker lahko obdeluje samo mono vzorce!)\n" +"\n" +"Prosim izberite kateri vzorec hoÄete naložiti:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Naloži stereo vzorec" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"Posneti vzorec je predolg za trenutni meÅ¡alni modul. Vseeno ga uporabljam." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Nagibanje glasnosti" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normaliziraj" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "Izvedi linearni prehod na izboru" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Levo [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "P" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "D" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Desno [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"DobrodoÅ¡li v SoundTrackerju!\n" +"\n" +"ÄŒe ste novi pri tej vrsti programov, boste verjetno najprej želeli\n" +"dobiti nekaj XM in MOD datotek in se poigrati z njimi." + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"Pri urejanju lahko dosežete krajÅ¡i odzivni Äas tipkovnice tako, da v meniju\n" +"Nastavitev audia zmanjÅ¡ate velikost predbranja za urejanje." + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"Zanko vzorca lahko nastavite, Äe držite tipko shift in\n" +"uporabite levi in desni miÅ¡kin gumb.\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"ÄŒe hoÄete izvedeti veÄ o ustvarjanju glasbe s takim programom, poglejte na\n" +"http://www.united-trackers.org/" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Instrumentu lahko dodelite vzorce na doloÄene tipke tako, da\n" +"aktivirate vzorec in potem kliknite na klaviaturo v urejevalniku " +"instrumentov." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "PrejÅ¡nji nasvet" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "Naslednji nasvet" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "Pokaži nasvete tudi naslednjiÄ" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "SoundTrackerjev nasvet dneva" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "Arpreggio" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "Porta gor" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "Porta dol" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "Tonska porta" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "Vibrato" + +#: app/track-editor.c:135 msgid "Tone porta + Volume slide" msgstr "Tonska porta + drsenje glasnosti" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" -msgstr "Vibrato + drsenje glasnosti" +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "Vibrato + drsenje glasnosti" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "Tremolo" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "Nastavi izvor zvoka" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Vzorec je shranjen." + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "Nastavi glasnost" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Skok" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "Lom sheme" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "Nastavi hitrost / [u/min]" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "Nastavi globalno glasnost" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "Drsenje globalne glasnosti" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "Spust tipke" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "Nastavi položaj ovojnice" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "Drsenje panorame" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "NP resonanÄni filter" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "VeÄkratna ponovna sprožitev note" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "Tremor" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "Odrez NP filtra" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "NatanÄna porta gor" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "NatanÄna porta dol" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "Nastavi glissano" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "Nastavi vibrato" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "NatanÄna uglasitev" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "Shema" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "Nastavi tremolo" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "Ponovna sprožitev note" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "NatanÄno drenje glasnosti gor" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "NatanÄno drsenje glasnosti dol" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "Odrez note" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "Zakasnitev note" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "Zakasnitev sheme" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "Drenje glasnosti dol" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "Drsenje glasnosti gor" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "Nastavi hitrost vibrata" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "Drenje panorame v levo" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "Drsenje panorame v desno" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "sinusna" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "nagib navzdol" + +#: app/track-editor.c:203 +msgid "square" +msgstr "pravokotna" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +#, fuzzy +msgid "Extra fine porta up" +msgstr "NatanÄna porta gor" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "NatanÄna porta dol" + +#: app/track-editor.c:257 +#, fuzzy +msgid "None ]" +msgstr "Brez" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Jazzovsko urejanje:" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Urejevalnik stez" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "Seznam pisav" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "Dodaj pisavo" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "ZbriÅ¡i pisavo" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "Uveljavi pisavo" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "Izberi pisavo..." + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "Cela skladba" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "Vse sheme" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "Trenutna shema" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "Trenutna steza" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Trenutni instrument" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "Vsi instrumenti" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "ZviÅ¡aj za pol note" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "Znižaj za pol note" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "ZviÅ¡aj za oktavo" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "Znižaj za oktavo" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "Zamenjaj 1 <-> 2" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "Spremeni 1 -> 2" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "Prestavitvena orodja" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "Obseg operacije:" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Prestavitev not" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Spreminjanje instrumenta" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Instrument 1:" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Trenutni instrument" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Instrument 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "Dolžina sheme ni v dosegu: %d.\n" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Napaka pri nalaganju shem." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Instrument je naložen." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Instrument je naložen." + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Ovojnica panorame" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Ovojnica panorame" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Ovojnica panorame" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "NapaÄna vrsta vibrata %d, uporabil bom sinusno.\n" + +#: app/xm.c:678 app/xm.c:1233 +msgid "Out of memory error!" +msgstr "" + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "Datoteka ni XI instrument." + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Instrument je naložen." + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Ovojnica panorame" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Ovojnica panorame" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Instrument je naložen." + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "NapaÄna vrsta vibrata %d, uporabil bom sinusno.\n" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "Napaka pri nalaganju shem." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Ne morem odpreti datoteke" + +#: app/xm.c:1215 +#, fuzzy +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" +"Dolžina glave XM != 276. MogoÄe je to modul SoundTrackerja pre-0.0.12 :-)\n" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "Napaka pri nalaganju shem." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"Modul vsebuje vzorec/ce, ki so predolgi za trenutni meÅ¡aÅ¡alnik.\n" +"NajveÄja dolžina vzorca je %d." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +#, fuzzy +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "Ni FastTrackerjev XM in ne podprti MOD format." + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "" + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "" + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "" + +#: app/xm.c:1761 app/xm.c:1787 +#, fuzzy +msgid "Error during saving pattern!" +msgstr "Napaka pri nalaganju shem." + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "" + +#: app/midi-settings.c:414 +#, fuzzy +msgid "Channel" +msgstr "Kanali:" + +#: app/midi-settings.c:423 +#, fuzzy +msgid "Client number" +msgstr "OÅ¡tevilÄevanje kanalov" + +#: app/midi-settings.c:434 +#, fuzzy +msgid "Port number" +msgstr "Porta gor" + +#: app/midi-settings.c:453 +#, fuzzy +msgid "Input" +msgstr "Instr." + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "" + +#: app/midi-settings.c:468 +#, fuzzy +msgid "Output" +msgstr "Izhod za urejanje" + +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "" + +#: app/midi-settings.c:492 +#, fuzzy +msgid "Misc" +msgstr "MeÅ¡alniki" + +#: app/midi-settings.c:532 +#, fuzzy +msgid "MIDI Configuration" +msgstr "Nastavitev _MIDI..." + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Shema" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "_Steza" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_Ubij note" + +#: soundtracker.glade:104 soundtracker.glade:527 +#, fuzzy +msgid "_Insert track" +msgstr "_Vstavi" + +#: soundtracker.glade:112 soundtracker.glade:536 +#, fuzzy +msgid "_Delete track" +msgstr "_ZbriÅ¡i" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "ZveÄaj cmd vrednost" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "ZmanjÅ¡aj cmd vrednost" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "PoÄisti oznaÄbe _blokov" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "I_nterpolacijski uÄinki" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Datoteka" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_Odpri..." + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Shrani _kot..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Shrani modul kot _WAV..." + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "Shrani XM brez vzorcev..." + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Modul" + +#: soundtracker.glade:309 +msgid "Clear _All" +msgstr "PoÄisti _vse" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "PoÄisti samo _sheme" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Optimiziraj modul" + +#: soundtracker.glade:346 +msgid "_Set Optimal Amplification" +msgstr "" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Uredi" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "_Jazzovski naÄin urejanja" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "_Prestavitev..." + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Shema" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "_Steza" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Izbor" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "_OznaÄievalni naÄin" + +#: soundtracker.glade:614 +#, fuzzy +msgid "Transpose half-note up" +msgstr "Znižaj za pol note" + +#: soundtracker.glade:622 +#, fuzzy +msgid "Transpose half-note down" +msgstr "Znižaj za pol note" + +#: soundtracker.glade:630 +#, fuzzy +msgid "Transpose octave up" +msgstr "Znižaj za oktavo" + +#: soundtracker.glade:638 +#, fuzzy +msgid "Transpose octave down" +msgstr "Znižaj za oktavo" + +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "_Shema" + +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "Trenutna shema" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_Najdi neuporabljeno shemo" + +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_PrepiÅ¡i trenutno v neuporabljeno shemo" -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "Tremolo" +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "Trenutna shema" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "Nastavi izvor zvoka" +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Skok" +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "_ZbriÅ¡i neuporabljene sheme" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "Nastavi glasnost" +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "P_akiraj sheme" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "Lom sheme" +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "Trenutna shema" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "Nastavi hitrost / [u/min]" +#: soundtracker.glade:753 +#, fuzzy +msgid "_Expand Current Pattern" +msgstr "Trenutna shema" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Nastavi globalno glasnost" +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "Drsenje globalne glasnosti" +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "Spust tipke" +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "Trenutna steza" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "Nastavi polo¾aj ovojnice" +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "Trenutna steza" -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "Drsenje panorame" +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "Trenutna steza" -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "NP resonanèni filter" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Instrument" -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "Veèkratna ponovna spro¾itev note" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "Naloži XI" -#: app/track-editor.c:142 -msgid "Tremor" -msgstr "Tremor" +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "Shrani XI" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "Odrez NP filtra" +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_PoÄisti trenutnega" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "Natanèna porta gor" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_ZbriÅ¡i neuporabljene instrumente" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "Natanèna porta dol" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Nastavitve" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "Nastavi glissano" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Prikaži _ociloskope" -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "Nastavi vibrato" +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "" -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "Natanèna uglasitev" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Urejevalnik stez" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Nastavi zanko zaèetek/konec" +#: soundtracker.glade:913 +msgid "_Flicker-free Scrolling" +msgstr "" -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "Nastavi tremolo" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "_PrejÅ¡nja pisava" -#: app/track-editor.c:161 -msgid "Retrig note" -msgstr "Ponovna spro¾itev note" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "_Naslednja pisava" -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "Natanèno drenje glasnosti gor" +#: soundtracker.glade:944 +msgid "Change Preferred _Accidental Type" +msgstr "" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "Natanèno drsenje glasnosti dol" +#: soundtracker.glade:953 +msgid "Change Effect Column _Editing Direction" +msgstr "" -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "Odrez note" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "Nastavitev tipkovnice" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "Zakasnitev note" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "Nastavitev audia" -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "Zakasnitev sheme" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "Nastavitev GUI" -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "Drenje glasnosti dol" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "Nastavitev _MIDI..." -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "Drsenje glasnosti gor" +#: soundtracker.glade:1016 +msgid "_Disable Splash Screen" +msgstr "" -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "Nastavi hitrost vibrata" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_Shrani nastavitve takoj" -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "Drenje panorame v levo" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Shrani nastavitve ob _izhodu" -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "Drsenje panorame v desno" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_PomoÄ" -#: app/track-editor.c:184 -msgid "sine" -msgstr "sinusna" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "_O programu..." -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "nagib navzdol" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "Pokaži _nasvete..." -#: app/track-editor.c:186 -msgid "square" -msgstr "pravokotna" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "_XM uÄinki..." -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, fuzzy, c-format -msgid "None ]" -msgstr "Brez" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Predvajaj skladbo" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Jazzovsko urejanje:" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Predvajaj skladbo" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Urejevalnik stez" +#, fuzzy +#~ msgid "SoundTracker Startup" +#~ msgstr "SoundTrackerjev nasvet dneva" -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "Seznam pisav" +#~ msgid "Vibrato Type:" +#~ msgstr "Vrsta vibrata:" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "Dodaj pisavo" +#~ msgid "VolFade" +#~ msgstr "Prehod glas." -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "Zbri¹i pisavo" +#~ msgid "Set loop begin/loop" +#~ msgstr "Nastavi zanko zaÄetek/konec" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "Uveljavi pisavo" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Nota:" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Gor" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Dol" +#~ msgid "Error while loading instruments." +#~ msgstr "Napaka pri nalaganju instrumentov." -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "Izberi pisavo..." +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "UpoÅ¡tevajte, da je ESD izhod v interaktivnem\n" +#~ "naÄinu neuporaben, ker ESD povzroÄa prekritost. Za resno\n" +#~ "delo raje uporabljajte OSS ali ALSA izhodne prikljuÄke." -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "Cela skladba" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Nisem mogel povezati ESD za zvoÄni izhod:\n" +#~ "%s" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Vse sheme" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "Te nastavitve bodo upoÅ¡tevane Å¡ele po ponovnem predvajanju." -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "Trenutna shema" +#~ msgid "Monitor" +#~ msgstr "Spremljaj" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "Trenutna steza" +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#vzor" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Trenutni instrument" +#~ msgid "OK" +#~ msgstr "V redu" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Vsi instrumenti" +#~ msgid "Cancel" +#~ msgstr "PrekliÄi" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Zvi¹aj za pol note" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Neznana razliÄica XI 0x%x\n" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "Zni¾aj za pol note" +#~ msgid "(%d bytes)" +#~ msgstr "(%d bajtov)" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "Zvi¹aj za oktavo" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Predvidena zakasnitev audia: %f mikrosekund" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "Zni¾aj za oktavo" +#~ msgid "ALSA card number:" +#~ msgstr "Å tevilka ALSA kartice:" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "Zamenjaj 1 <-> 2" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Nisem mogel odpreti ALSA naprave za zvoÄni vhod (kartica:%d, naprava:" +#~ "%d):\n" +#~ "%s" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "Spremeni 1 -> 2" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "Zahtevani parametri za zvoÄni izhod niso podprti.\n" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "Prestavitvena orodja" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Nisem mogel odpreti ALSA naprave za zvoÄni izhod (kartica:%d, naprava:" +#~ "%d):\n" +#~ "%s" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Obseg operacije:" +#, fuzzy +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "Zahtevani parametri za zvoÄni izhod niso podprti.\n" -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Prestavitev not" +#, fuzzy +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "Nisem mogel odpreti /dev/dsp za zvoÄni izhod:\n" +#~ "%s" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Spreminjanje instrumenta" +#, fuzzy +#~ msgid "soundtracker" +#~ msgstr "Urejevalnik stez" -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Instrument 1:" +#~ msgid "Save Song" +#~ msgstr "Shrani skladbo" -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Trenutni instrument" +#, fuzzy +#~ msgid "No" +#~ msgstr "Brez" -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Instrument 2:" +#~ msgid "Close" +#~ msgstr "Zapri" -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Dol¾ina sheme ni v dosegu: %d.\n" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Ali ste prepriÄani, da želite pisati prek datoteke?" -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "Datoteka ni XI instrument." +#~ msgid "Load XM..." +#~ msgstr "Naloži XM..." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Neznana razlièica XI 0x%x\n" +#~ msgid "Save XM..." +#~ msgstr "Shrani XM..." -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "Napaèna vrsta vibrata %d, uporabil bom sinusno.\n" +#~ msgid "Save song as XM..." +#~ msgstr "Shrani skladbo kot XM..." -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "Napaka pri nalaganju shem." +#~ msgid "Load Instrument..." +#~ msgstr "Naloži instrument..." -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Ne morem odpreti datoteke" +#~ msgid "Save Instrument..." +#~ msgstr "Shrani instrument..." -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Napaka pri nalaganju instrumentov." +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "Konfiguracijska datoteka za tipkovnico je nepopolna.\n" +#~ "Prosim, Äe uporabite dialog za nastavitev tipkovnice." -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"Modul vsebuje vzorec/ce, ki so predolgi za trenutni me¹a¹alnik.\n" -"Najveèja dol¾ina vzorca je %d." +#~ msgid "Ok" +#~ msgstr "V redu" -#: app/xm.c:1399 -#, fuzzy -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "Ni FastTrackerjev XM in ne podprti MOD format." +#~ msgid "_Quit" +#~ msgstr "_Izhod" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "" +#~ msgid "C_ut" +#~ msgstr "_Izreži" -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "" +#~ msgid "_Copy" +#~ msgstr "_PrepiÅ¡i" -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "" +#~ msgid "_Paste" +#~ msgstr "P_rilepi" -#: app/xm.c:1468 #, fuzzy -msgid "Error during saving pattern!" -msgstr "Napaka pri nalaganju shem." +#~ msgid "P_aste" +#~ msgstr "Prilepi" -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "" +#~ msgid "_Load XI..." +#~ msgstr "_Naloži XI..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -#, fuzzy -msgid "Channel" -msgstr "Kanali:" +#~ msgid "_Save XI..." +#~ msgstr "Shrani XI..." -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -#, fuzzy -msgid "Client number" -msgstr "O¹tevilèevanje kanalov" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "Nastavitev _tipkovnice..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -#, fuzzy -msgid "Port number" -msgstr "Porta gor" +#~ msgid "_Audio Configuration..." +#~ msgstr "Nastavitev _audia..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -#, fuzzy -msgid "Input" -msgstr "Instr." +#~ msgid "_GUI Configuration..." +#~ msgstr "Nastavitev _GUI..." -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "" +#~ msgid "_MIDI Configuration..." +#~ msgstr "Nastavitev _MIDI..." -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -#, fuzzy -msgid "Output" -msgstr "Izhod za urejanje" +#~ msgid "Load Sample..." +#~ msgstr "Naloži vzorec..." -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "" +#~ msgid "Save WAV..." +#~ msgstr "Shrani WAV..." -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -#, fuzzy -msgid "Misc" -msgstr "Me¹alniki" +#~ msgid "Execute" +#~ msgstr "IzvrÅ¡i" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -#, fuzzy -msgid "MIDI Configuration" -msgstr "Nastavitev _MIDI..." +#~ msgid "Apply" +#~ msgstr "Uveljavi" -#~ msgid "Pattern" -#~ msgstr "Shema" +#~ msgid "Drivers" +#~ msgstr "Gonilniki" + +#~ msgid "Up" +#~ msgstr "Gor" + +#~ msgid "Down" +#~ msgstr "Dol" #~ msgid "Current pos" #~ msgstr "Trenutna poz." @@ -2140,7 +3685,7 @@ #~ msgstr "Ukaz 'Shrani XM' shrani vse sheme, ki niso prazne" #~ msgid "Advance cursor horizontally in effect columns" -#~ msgstr "Vodoravni premiki kurzorja v stolpcih za uèinke" +#~ msgstr "Vodoravni premiki kurzorja v stolpcih za uÄinke" #~ msgid "Tempo and BPM update" #~ msgstr "Nadgradi hirost in u/min" @@ -2149,11 +3694,12 @@ #~ msgstr "Samodejni preklop" #~ msgid "Use anti-aliased envelope editor" -#~ msgstr "Uporabi glajene èrte v urejevalniku ovojnice" +#~ msgstr "Uporabi glajene Ärte v urejevalniku ovojnice" #~ msgid "" #~ "You need to restart SoundTracker for this change to come into effect." -#~ msgstr "Èe ¾elite, da bodo spremembe opazne, morate znova zagnati SoundTracker." +#~ msgstr "" +#~ "ÄŒe želite, da bodo spremembe opazne, morate znova zagnati SoundTracker." #~ msgid "Idle." #~ msgstr "Nedejaven." @@ -2186,10 +3732,10 @@ #~ msgstr "/_Modul" #~ msgid "/Module/Clear _All" -#~ msgstr "/Modul/Poèisti _vse" +#~ msgstr "/Modul/PoÄisti _vse" #~ msgid "/Module/Clear _Patterns Only" -#~ msgstr "/Modul/Poèisti samo _sheme" +#~ msgstr "/Modul/PoÄisti samo _sheme" #~ msgid "/Module/_Optimize Module" #~ msgstr "/Modul/_Optimiziraj modul" @@ -2198,7 +3744,7 @@ #~ msgstr "/_Uredi" #~ msgid "/Edit/_Jazz Edit Mode" -#~ msgstr "/Uredi/_Jazzovski naèin urejanja" +#~ msgstr "/Uredi/_Jazzovski naÄin urejanja" #~ msgid "/Edit/-" #~ msgstr "/Uredi/-" @@ -2207,10 +3753,10 @@ #~ msgstr "/Uredi/_Prestavitev..." #~ msgid "/Edit/Pattern/C_ut" -#~ msgstr "/Uredi/Shema/_Izre¾i" +#~ msgstr "/Uredi/Shema/_Izreži" #~ msgid "/Edit/Pattern/_Copy" -#~ msgstr "/Uredi/Shema/_Prepi¹i" +#~ msgstr "/Uredi/Shema/_PrepiÅ¡i" #~ msgid "/Edit/Pattern/_Paste" #~ msgstr "/Uredi/Shema/P_rilepi" @@ -2219,10 +3765,10 @@ #~ msgstr "/Uredi/S_teza" #~ msgid "/Edit/Track/C_ut" -#~ msgstr "/Uredi/Steza/_Izre¾i" +#~ msgstr "/Uredi/Steza/_Izreži" #~ msgid "/Edit/Track/_Copy" -#~ msgstr "/Uredi/Steza/_Prepi¹i" +#~ msgstr "/Uredi/Steza/_PrepiÅ¡i" #~ msgid "/Edit/Track/_Paste" #~ msgstr "/Uredi/Steza/P_rilepi" @@ -2234,34 +3780,34 @@ #~ msgstr "/Uredi/Steza/_Vstavi" #~ msgid "/Edit/Track/_Delete" -#~ msgstr "/Uredi/Steza/_Zbri¹i" +#~ msgstr "/Uredi/Steza/_ZbriÅ¡i" #~ msgid "/Edit/_Selection" #~ msgstr "/Uredi/_Izbor" #~ msgid "/Edit/Selection/_Mark mode" -#~ msgstr "/Uredi/Izbor/_Oznaèevalni naèin" +#~ msgstr "/Uredi/Izbor/_OznaÄevalni naÄin" #~ msgid "/Edit/Selection/C_lear block marks" -#~ msgstr "/Uredi/Izbor/Poèisti oznaèbe _blokov" +#~ msgstr "/Uredi/Izbor/PoÄisti oznaÄbe _blokov" #~ msgid "/Edit/Selection/C_ut" -#~ msgstr "/Uredi/Izbor/_Izre¾i" +#~ msgstr "/Uredi/Izbor/_Izreži" #~ msgid "/Edit/Selection/_Copy" -#~ msgstr "/Uredi/Izbor/_Prepi¹i" +#~ msgstr "/Uredi/Izbor/_PrepiÅ¡i" #~ msgid "/Edit/Selection/_Paste" #~ msgstr "/Uredi/Izbor/P_rilepi" #~ msgid "/Edit/Selection/_Interpolate effects" -#~ msgstr "/Uredi/Izbor/I_nterpolacijski uèinki" +#~ msgstr "/Uredi/Izbor/I_nterpolacijski uÄinki" #~ msgid "/Edit/Track/Increment cmd value" -#~ msgstr "/Uredi/Steza/Po_veèaj cmd vrednost" +#~ msgstr "/Uredi/Steza/Po_veÄaj cmd vrednost" #~ msgid "/Edit/Track/Decrement cmd value" -#~ msgstr "/Uredi/Steza/Po_manj¹aj cmd vrednost" +#~ msgstr "/Uredi/Steza/Po_manjÅ¡aj cmd vrednost" #~ msgid "/_Pattern" #~ msgstr "/_Shema" @@ -2270,10 +3816,10 @@ #~ msgstr "/Shema/_Najdi neuporabljeno shemo" #~ msgid "/Pattern/_Copy Current to Unused Pattern" -#~ msgstr "/Shema/_Prepi¹i trenutno v neuporabljeno shemo" +#~ msgstr "/Shema/_PrepiÅ¡i trenutno v neuporabljeno shemo" #~ msgid "/Pattern/C_lear Unused Patterns" -#~ msgstr "/Shema/Poèisti _neuporabljene sheme" +#~ msgstr "/Shema/PoÄisti _neuporabljene sheme" #~ msgid "/Pattern/_Pack Patterns" #~ msgstr "/Shema/P_akiraj sheme" @@ -2282,7 +3828,7 @@ #~ msgstr "/_Instrument" #~ msgid "/Instrument/_Load XI..." -#~ msgstr "/Instrument/_Nalo¾i XI..." +#~ msgstr "/Instrument/_Naloži XI..." #~ msgid "/Instrument/_Save XI..." #~ msgstr "/Instrument/_Sharni XI..." @@ -2291,16 +3837,16 @@ #~ msgstr "/Instrument/-" #~ msgid "/Instrument/_Clear Current" -#~ msgstr "/Isntrument/_Poèisti trenutnega" +#~ msgstr "/Isntrument/_PoÄisti trenutnega" #~ msgid "/Instrument/_Delete Unused Instruments" -#~ msgstr "/Instrument/_Zbri¹i neuporabljene instrumente" +#~ msgstr "/Instrument/_ZbriÅ¡i neuporabljene instrumente" #~ msgid "/_Settings" #~ msgstr "/_Nastavitve" #~ msgid "/Settings/Display _Oscilloscopes" -#~ msgstr "/Nastavitve/Prika¾i _ociloskope" +#~ msgstr "/Nastavitve/Prikaži _ociloskope" #~ msgid "/Settings/_Tracker" #~ msgstr "/Nastavitve/_Urejevalnik stez" @@ -2309,7 +3855,7 @@ #~ msgstr "/Nastavitve/Urejevalnik stez/_Uporabi podporno zalogo " #~ msgid "/Settings/Tracker/_Previous font" -#~ msgstr "/Nastavitve/Urejevalnik stez/_Prej¹nja pisava" +#~ msgstr "/Nastavitve/Urejevalnik stez/_PrejÅ¡nja pisava" #~ msgid "/Settings/Tracker/_Next font" #~ msgstr "/Nastavitve/Urejvalnik stez/_Nalednja pisava" @@ -2336,23 +3882,19 @@ #~ msgstr "/Nastavitve/Shrani nastavitve ob _izhodu" #~ msgid "/_Help" -#~ msgstr "/_Pomoè" +#~ msgstr "/_PomoÄ" #~ msgid "/Help/_About..." -#~ msgstr "/Pomoè/_O programu..." +#~ msgstr "/PomoÄ/_O programu..." #~ msgid "/Help/-" -#~ msgstr "/Pomoè/-" +#~ msgstr "/PomoÄ/-" #~ msgid "/Help/Show _Tips..." -#~ msgstr "/Pomoè/Poka¾i _nasvete..." +#~ msgstr "/PomoÄ/Pokaži _nasvete..." #~ msgid "/Help/_XM Effects..." -#~ msgstr "/Pomoè/_XM uèinki..." +#~ msgstr "/PomoÄ/_XM uÄinki..." #~ msgid "Nothing to save." -#~ msgstr "Niè ni za shraniti." - -#~ msgid "" -#~ "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n" -#~ msgstr "Dol¾ina glave XM != 276. Mogoèe je to modul SoundTrackerja pre-0.0.12 :-)\n" +#~ msgstr "NiÄ ni za shraniti." diff -Nru soundtracker-0.6.8/po/soundtracker.pot soundtracker-1.0.2~pre2/po/soundtracker.pot --- soundtracker-0.6.8/po/soundtracker.pot 2006-02-25 13:25:04.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/soundtracker.pot 2020-05-27 18:54:25.000000000 +0000 @@ -1,22 +1,30 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Michael Krause -# This file is distributed under the same license as the PACKAGE package. +# This file is distributed under the same license as the soundtracker package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: soundtracker 1.0.1-pre1\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "" @@ -24,2004 +32,3237 @@ msgid "Editing Output" msgstr "" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" +#: app/cheat-sheet.c:91 +msgid "XM Effects Cheat Sheet" msgstr "" -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." +#: app/colors.c:42 +msgid "Background" msgstr "" -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" +#: app/colors.c:43 +msgid "Cursor background" msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" msgstr "" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" +#: app/colors.c:44 +msgid "Major lines" msgstr "" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" +#: app/colors.c:44 +msgid "Major lines highlighting" msgstr "" -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" +#: app/colors.c:45 +msgid "Minor lines" msgstr "" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" +#: app/colors.c:45 +msgid "Minor lines highlighting" msgstr "" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" +#: app/colors.c:46 soundtracker.glade:142 +msgid "Selection" msgstr "" -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" +#: app/colors.c:46 +msgid "Tracker selection" msgstr "" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" +#: app/colors.c:47 +msgid "Notes, waveforms" msgstr "" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" msgstr "" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" +#: app/colors.c:48 +msgid "Delimiters" msgstr "" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" +#: app/colors.c:48 +msgid "Tracker delimiters" msgstr "" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" +#: app/colors.c:49 +msgid "Channel numbers, loops" msgstr "" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." +#: app/colors.c:51 +msgid "Cursor editing" msgstr "" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" msgstr "" -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" +#: app/colors.c:52 +msgid "Cursor bg in selection" msgstr "" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" msgstr "" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" +#: app/colors.c:53 +msgid "Mixer position" msgstr "" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" +#: app/colors.c:53 +msgid "Mixer position indicator" msgstr "" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:54 +msgid "Zero line" msgstr "" -#: app/drivers/jack-output.c:254 -msgid "transport master" +#: app/colors.c:54 +msgid "Sample display zero line" msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" +#: app/colors.c:56 +msgid "White keys" msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" +#: app/colors.c:57 +msgid "Black keys" msgstr "" -#: app/drivers/jack-output.c:327 -#, c-format -msgid "soundtracker" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" +#: app/colors.c:58 +msgid "White keys pressed" msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" +#: app/colors.c:59 +msgid "Black keys pressed" msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" +#: app/colors.c:60 +msgid "White text pressed" msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, c-format -msgid "%s: Required sound encoding not supported.\n" +#: app/colors.c:61 +msgid "Black text pressed" msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "" + +#: app/colors.c:395 #, c-format -msgid "%s: Cannot set block size (%s)" +msgid "%s colors configuration" msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" +#: app/colors.c:398 +msgid "Reset" msgstr "" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" msgstr "" -#: app/envelope-box.c:878 -msgid "Length" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" msgstr "" -#: app/envelope-box.c:879 -msgid "Current" +#: app/colors.c:414 +msgid "Gtk clavier colors" msgstr "" -#: app/envelope-box.c:880 -msgid "Offset" +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" msgstr "" -#: app/envelope-box.c:881 -msgid "Value" +#: app/drivers/alsa1x.c:320 +msgid "ALSA device opening error" msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +msgid "Unable to set channels number" msgstr "" -#: app/envelope-box.c:1000 -msgid "Sustain" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" msgstr "" -#: app/envelope-box.c:1008 -msgid "Point" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" msgstr "" -#: app/file-operations.c:164 -msgid "Render WAV" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" msgstr "" -#: app/file-operations.c:168 -msgid "Load Instrument" +#: app/drivers/alsa1x.c:675 +#, c-format +msgid " = %u samples" msgstr "" -#: app/file-operations.c:169 -msgid "Save Instrument" +#: app/drivers/alsa1x.c:743 +msgid "Dev" msgstr "" -#: app/file-operations.c:175 -msgid "File" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." msgstr "" -#: app/file-operations.c:226 -msgid "Operation not supported." +#: app/drivers/alsa1x.c:755 +msgid "Devices list" msgstr "" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +msgid "8 bit" msgstr "" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +msgid "16 bit" msgstr "" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" msgstr "" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" msgstr "" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." msgstr "" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." msgstr "" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" +#: app/drivers/alsa1x.c:829 +msgid "Device:" msgstr "" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" msgstr "" -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" msgstr "" -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" msgstr "" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" msgstr "" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" msgstr "" -#: app/gui-settings.c:436 -msgid "Track line format:" +#: app/drivers/alsa1x.c:914 +msgid "Number of Periods:" msgstr "" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." +#: app/drivers/alsa1x.c:938 +msgid "Estimated audio delay:" msgstr "" -#: app/gui-subs.c:33 -msgid "Playing song..." +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." msgstr "" -#: app/gui-subs.c:34 -msgid "Playing pattern..." +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" msgstr "" -#: app/gui-subs.c:35 -msgid "Loading module..." +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" msgstr "" -#: app/gui-subs.c:36 -msgid "Module loaded." +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" msgstr "" -#: app/gui-subs.c:37 -msgid "Saving module..." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" msgstr "" -#: app/gui-subs.c:40 -msgid "Sample loaded." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" msgstr "" -#: app/gui-subs.c:41 -msgid "Saving sample..." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." +#: app/drivers/alsa1x.c:1293 +msgid "Error setting hw parameters" msgstr "" -#: app/gui-subs.c:45 -msgid "Saving instrument..." +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" msgstr "" -#: app/gui-subs.c:46 -msgid "Instrument saved." +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" msgstr "" -#: app/gui-subs.c:48 -msgid "Song saved." +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" msgstr "" -#: app/gui-subs.c:500 -msgid "No" +#: app/drivers/alsa1x.c:1328 +msgid "Unable to enable timestamping for playback" msgstr "" -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" +#: app/drivers/alsa1x.c:1329 +msgid "Unable to enable timestamping for capture" msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" +#: app/drivers/alsa1x.c:1335 +msgid "Unable to set timestamp type for playback" msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" +#: app/drivers/alsa1x.c:1336 +msgid "Unable to set timestamp type for capture" msgstr "" -#: app/gui.c:140 -msgid "Tempo" +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" msgstr "" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" msgstr "" -#: app/gui.c:301 -msgid "Highlight rows (major / minor):" +#: app/drivers/alsa1x.c:1352 +msgid "Unable to prepare playback" msgstr "" -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1353 +msgid "Unable to prepare capture" msgstr "" -#: app/gui.c:506 -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" msgstr "" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" msgstr "" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." msgstr "" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" msgstr "" -#: app/gui.c:638 -msgid "Error when opening pattern file!" +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." msgstr "" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/irix-output.c:178 +msgid "16 Bit output not supported." msgstr "" -#: app/gui.c:1719 -msgid "SoundTracker Startup" +#: app/drivers/irix-output.c:184 +msgid "Stereo output not supported." msgstr "" -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." +#: app/drivers/irix-output.c:192 +msgid "Couldn't open audio port." msgstr "" -#: app/gui.c:1804 -msgid "Use SoundTracker!" +#: app/drivers/oss.c:130 +msgid "OSS input: reading error" msgstr "" -#: app/gui.c:1862 -msgid "Load XM..." +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" msgstr "" -#: app/gui.c:1864 -msgid "Save XM..." +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" msgstr "" -#: app/gui.c:1867 -msgid "Render module as WAV..." +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" msgstr "" -#: app/gui.c:1870 -msgid "Save song as XM..." +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" msgstr "" -#: app/gui.c:1872 -msgid "Load current pattern..." +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" msgstr "" -#: app/gui.c:1874 -msgid "Save current pattern..." +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" msgstr "" -#: app/gui.c:1944 -msgid "Play Song" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" msgstr "" -#: app/gui.c:1956 -msgid "Play Pattern" +#: app/drivers/oss.c:445 +#, c-format +msgid "OSS driver (%s): Couldn't open %s" msgstr "" -#: app/gui.c:1968 -msgid "Stop" +#: app/drivers/oss.c:480 +#, c-format +msgid "Required %s format not supported." msgstr "" -#: app/gui.c:1973 -msgid "Pat" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" msgstr "" -#: app/gui.c:1979 -msgid "Edited pattern" +#: app/drivers/jack.c:371 +msgid "Jack server not running?" msgstr "" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" msgstr "" -#: app/gui.c:2008 -msgid "Number of Channels:" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." msgstr "" -#: app/gui.c:2025 -msgid "Pattern Length" +#: app/drivers/jack.c:542 +msgid "Update" msgstr "" -#: app/gui.c:2060 -msgid "Set preferred accidental type" +#: app/drivers/jack.c:551 +msgid "Jack autostart" msgstr "" -#: app/gui.c:2066 -msgid "Measure" +#: app/drivers/jack.c:562 +msgid "declick" msgstr "" -#: app/gui.c:2067 -msgid "Enable row highlighting" +#: app/drivers/jack.c:610 +msgid "Jack server is not running or some error occured." msgstr "" -#: app/gui.c:2093 -msgid "Other..." +#: app/drivers/sdl-output.c:76 +msgid "Experimental SDL support." msgstr "" -#: app/gui.c:2129 -msgid "Change effect column editing direction" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" msgstr "" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" +#: app/drivers/sun-output.c:402 +#, c-format +msgid "SUN output (%s): Cannot handle %d Hz" msgstr "" -#: app/gui.c:2216 -msgid "Editing" +#: app/drivers/sun-output.c:432 +#, c-format +msgid "SUN output (%s): Required sound encoding not supported" msgstr "" -#: app/gui.c:2223 -msgid "Octave" +#: app/drivers/sun-output.c:455 +#, c-format +msgid "SUN output (%s): Cannot set block size" msgstr "" -#: app/gui.c:2232 -msgid "Jump" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" msgstr "" -#: app/gui.c:2241 -msgid "Instr" +#: app/drivers/sun-input.c:77 +msgid "SUN input: reading error" msgstr "" -#: app/gui.c:2257 -msgid "Sample" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" msgstr "" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" msgstr "" -#: app/gui.c:2323 -msgid "%M:%S" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" msgstr "" -#: app/instrument-editor.c:81 -msgid "VolFade" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" msgstr "" -#: app/instrument-editor.c:82 -msgid "VibSpeed" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" msgstr "" -#: app/instrument-editor.c:83 -msgid "VibDepth" +#: app/drivers/sun-input.c:273 +#, c-format +msgid "SUN input (%s): Cannot handle %d Hz" msgstr "" -#: app/instrument-editor.c:84 -msgid "VibSweep" +#: app/drivers/sun-input.c:304 +#, c-format +msgid "SUN input (%s): Required sound encoding not supported." msgstr "" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." +#: app/drivers/sun-input.c:332 +#, c-format +msgid "SUN input (%s): Cannot set block size" msgstr "" -#: app/instrument-editor.c:229 -msgid "Sine" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" msgstr "" -#: app/instrument-editor.c:229 -msgid "Square" +#: app/envelope-box.c:1280 +msgid "Current" msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Down" +#: app/envelope-box.c:1281 +msgid "Offset" msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" +#: app/envelope-box.c:1282 +msgid "Value" msgstr "" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" msgstr "" -#: app/instrument-editor.c:242 -msgid "Volume envelope" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" msgstr "" -#: app/instrument-editor.c:250 -msgid "Panning envelope" +#: app/envelope-box.c:1369 +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" msgstr "" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." +#: app/envelope-box.c:1384 +msgid "Sustain" msgstr "" -#: app/instrument-editor.c:269 -msgid "Save Instrument..." +#: app/envelope-box.c:1392 +msgid "Point" msgstr "" -#: app/instrument-editor.c:271 -msgid "Load XI" +#: app/envelope-box.c:1394 +msgid "Loop" msgstr "" -#: app/instrument-editor.c:277 -msgid "Save XI" +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" msgstr "" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" msgstr "" -#: app/instrument-editor.c:368 -msgid "Note:" +#: app/file-operations.c:127 +#, c-format +msgid "" +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" msgstr "" -#: app/instrument-editor.c:386 -msgid "Initialize" +#: app/file-operations.c:225 +msgid "All supported types" msgstr "" -#: app/keys.c:57 -msgid "" +#: app/file-operations.c:245 +msgid "All files" msgstr "" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." +#: app/file-operations.c:388 +msgid "File" msgstr "" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." +#: app/gui-settings.c:293 +msgid "Classic ST" msgstr "" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." +#: app/gui-settings.c:293 +msgid "FT2" msgstr "" -#: app/keys.c:145 -msgid "Upper Octave Keys..." +#: app/gui-settings.c:293 +msgid "Mixed" msgstr "" -#: app/keys.c:146 -msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +#: app/gui-settings.c:309 +msgid "GUI Configuration" msgstr "" -#: app/keys.c:152 -msgid "Lower Octave Keys..." +#: app/gui-settings.c:321 +msgid "Scopes Frequency" msgstr "" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." +#: app/gui-settings.c:326 +msgid "Tracker Frequency" msgstr "" -#: app/keys.c:159 -msgid "Other Keys..." +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" msgstr "" -#: app/keys.c:160 -msgid "Various other keys" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" msgstr "" -#: app/keys.c:513 -msgid "Function" +#: app/gui-settings.c:343 +msgid "FT2-like volume column" msgstr "" -#: app/keys.c:514 -msgid "Assignment" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" msgstr "" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" msgstr "" -#: app/keys.c:575 -msgid "Key Group Explanation" +#: app/gui-settings.c:361 +msgid "Decimal volume representation" msgstr "" -#: app/keys.c:592 -msgid "Key Explanation" +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" msgstr "" -#: app/keys.c:623 -msgid "Modifiers:" +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" msgstr "" -#: app/keys.c:649 -msgid "Learn selected key" +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -#: app/keys.c:655 -msgid "Learn all keys" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" msgstr "" -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +#: app/gui-settings.c:398 +msgid "Record precise timings" msgstr "" -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" msgstr "" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" msgstr "" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" msgstr "" -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" msgstr "" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" msgstr "" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" msgstr "" -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "" + +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" msgstr "" -#: app/menubar.c:162 +#: app/gui-settings.c:451 msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." msgstr "" -#: app/menubar.c:419 -msgid "_Open..." +#: app/gui-settings.c:456 +msgid "Selection mode" msgstr "" -#: app/menubar.c:421 -msgid "Save _as..." +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" msgstr "" -#: app/menubar.c:427 -msgid "Save Module as _WAV..." +#: app/gui-settings.c:481 +msgid "Sample displays' mode" msgstr "" -#: app/menubar.c:429 -msgid "Save XM without samples..." +#: app/gui-settings.c:484 +msgid "Scopes" msgstr "" -#: app/menubar.c:434 -msgid "_Quit" +#: app/gui-settings.c:486 +msgid "Editor" msgstr "" -#: app/menubar.c:441 -msgid "Clear _All" +#: app/gui-settings.c:490 +msgid "Strobo" msgstr "" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" msgstr "" -#: app/menubar.c:448 -msgid "_Optimize Module" +#: app/gui-settings.c:494 +msgid "Minmax" msgstr "" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" msgstr "" -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" +#: app/gui-settings.c:511 +msgid "Track line format:" msgstr "" -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" +#: app/gui-settings.c:572 +msgid "Color scheme" msgstr "" -#: app/menubar.c:475 -msgid "_Kill notes" +#: app/gui-settings.c:573 +msgid "Tracker colors configuration" msgstr "" -#: app/menubar.c:480 -msgid "_Insert track" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." msgstr "" -#: app/menubar.c:482 -msgid "_Delete track" +#: app/gui-subs.c:35 +msgid "Playing song..." msgstr "" -#: app/menubar.c:487 -msgid "Increment cmd value" +#: app/gui-subs.c:36 +msgid "Playing pattern..." msgstr "" -#: app/menubar.c:489 -msgid "Decrement cmd value" +#: app/gui-subs.c:37 +msgid "Loading module..." msgstr "" -#: app/menubar.c:496 -msgid "_Mark mode" +#: app/gui-subs.c:38 +msgid "Module loaded." msgstr "" -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" +#: app/gui-subs.c:39 +msgid "Saving module..." msgstr "" -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" +#: app/gui-subs.c:40 +msgid "Module saved." msgstr "" -#: app/menubar.c:508 -msgid "Transpose half-note up" +#: app/gui-subs.c:41 +msgid "Loading sample..." msgstr "" -#: app/menubar.c:510 -msgid "Transpose half-note down" +#: app/gui-subs.c:42 +msgid "Sample loaded." msgstr "" -#: app/menubar.c:512 -msgid "Transpose octave up" +#: app/gui-subs.c:43 +msgid "Saving sample..." msgstr "" -#: app/menubar.c:514 -msgid "Transpose octave down" +#: app/gui-subs.c:44 +msgid "Sample saved." msgstr "" -#: app/menubar.c:526 -msgid "P_aste" +#: app/gui-subs.c:45 +msgid "Loading instrument..." msgstr "" -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" +#: app/gui-subs.c:46 +msgid "Instrument loaded." msgstr "" -#: app/menubar.c:534 -msgid "_Record keyreleases" +#: app/gui-subs.c:47 +msgid "Saving instrument..." msgstr "" -#: app/menubar.c:539 -msgid "Transp_osition..." +#: app/gui-subs.c:48 +msgid "Instrument saved." msgstr "" -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" +#: app/gui-subs.c:49 +msgid "Saving song..." msgstr "" -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" +#: app/gui-subs.c:50 +msgid "Song saved." msgstr "" -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" msgstr "" -#: app/menubar.c:578 -msgid "_Find Unused Pattern" +#: app/gui-subs.c:414 +msgid "Question" msgstr "" -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." msgstr "" -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" msgstr "" -#: app/menubar.c:587 -msgid "_Pack Patterns" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." msgstr "" -#: app/menubar.c:592 -msgid "_Save Current Pattern" +#: app/gui-subs.h:223 +msgid "Warning" msgstr "" -#: app/menubar.c:594 -msgid "L_oad Pattern" +#: app/gui-subs.h:225 +msgid "Information" msgstr "" -#: app/menubar.c:599 -msgid "Sh_rink Current Pattern" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" msgstr "" -#: app/menubar.c:601 -msgid "_Expand Current Pattern" +#: app/gui.c:260 +msgid "Highlight rows (major / minor):" msgstr "" -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" +#: app/gui.c:330 +msgid "" msgstr "" -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" +#: app/gui.c:451 +msgid "Saving module failed" msgstr "" -#: app/menubar.c:618 -msgid "_Load XI..." +#: app/gui.c:535 +msgid "File output" msgstr "" -#: app/menubar.c:620 -msgid "_Save XI..." +#: app/gui.c:612 +msgid "Can't open file for writing" msgstr "" -#: app/menubar.c:625 -msgid "_Clear Current" +#: app/gui.c:618 +msgid "Can't change file ownership" msgstr "" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." msgstr "" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" +#: app/gui.c:660 +msgid "An error occured while writing to file" msgstr "" -#: app/menubar.c:640 -msgid "_Previous font" +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" msgstr "" -#: app/menubar.c:642 -msgid "_Next font" +#: app/gui.c:715 +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" msgstr "" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" msgstr "" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" +#: app/gui.c:810 +#, c-format +msgid "Error when opening pattern file %s!" msgstr "" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" msgstr "" -#: app/menubar.c:660 -msgid "_Tracker" +#: app/gui.c:2124 +#, c-format +msgid "%s Startup" msgstr "" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." msgstr "" -#: app/menubar.c:666 -msgid "_Audio Configuration..." +#: app/gui.c:2195 +msgid "Use SoundTracker!" msgstr "" -#: app/menubar.c:668 -msgid "_GUI Configuration..." +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" msgstr "" -#: app/menubar.c:674 -msgid "_MIDI Configuration..." +#: app/gui.c:2279 +msgid "Amplification estimation" msgstr "" -#: app/menubar.c:679 -msgid "Disable splash screen" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." msgstr "" -#: app/menubar.c:681 -msgid "_Save Settings now" +#: app/gui.c:2296 +msgid "Estimating..." msgstr "" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" msgstr "" -#: app/menubar.c:690 -msgid "_About..." +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" msgstr "" -#: app/menubar.c:695 -msgid "Show _Tips..." +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" msgstr "" -#: app/menubar.c:697 -msgid "_XM Effects..." +#: app/gui.c:2400 +msgid "Extended pattern (*.xp)" msgstr "" -#: app/menubar.c:704 -msgid "_File" +#: app/gui.c:2408 +#, c-format +msgid "" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" msgstr "" -#: app/menubar.c:705 -msgid "_Module" +#: app/gui.c:2433 +msgid "Load Module" msgstr "" -#: app/menubar.c:706 -msgid "_Edit" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" msgstr "" -#: app/menubar.c:709 -msgid "_Instrument" +#: app/gui.c:2434 +msgid "Save Module" msgstr "" -#: app/menubar.c:710 -msgid "_Settings" +#: app/gui.c:2434 +msgid "Save the current module" msgstr "" -#: app/menubar.c:711 -msgid "_Help" +#: app/gui.c:2436 +msgid "Render WAV" msgstr "" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/gui.c:2436 +msgid "Render the current module as WAV file" msgstr "" -#: app/module-info.c:115 -msgid "Instrument Name" +#: app/gui.c:2438 +msgid "Save XM without samples..." msgstr "" -#: app/module-info.c:115 -msgid "#smpl" +#: app/gui.c:2439 +msgid "Load current pattern..." msgstr "" -#: app/module-info.c:116 -msgid "Sample Name" +#: app/gui.c:2440 +msgid "Save current pattern..." msgstr "" -#: app/module-info.c:117 -msgid "Linear" +#: app/gui.c:2507 +msgid "Play Song" msgstr "" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" +#: app/gui.c:2516 +msgid "Play Pattern" msgstr "" -#: app/module-info.c:124 -msgid "Module Info" +#: app/gui.c:2525 +msgid "Play From Cursor" msgstr "" -#: app/module-info.c:164 -msgid "Songname:" +#: app/gui.c:2534 +msgid "Play Block" msgstr "" -#: app/module-info.c:179 -msgid "Frequencies:" +#: app/gui.c:2543 +msgid "Stop" msgstr "" -#: app/module-info.c:184 -msgid "ProTracker Mode" +#: app/gui.c:2553 +msgid "Loop Playback" msgstr "" -#: app/module-info.c:395 -#, c-format -msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +#: app/gui.c:2562 +msgid "Pat" msgstr "" -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" +#: app/gui.c:2568 +msgid "Edited pattern" msgstr "" -#: app/playlist.c:535 -msgid "Remove current playlist entry" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." msgstr "" -#: app/playlist.c:543 -msgid "Add + Cpy" +#: app/gui.c:2583 +msgid "Pattern Length" msgstr "" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +#: app/gui.c:2593 +msgid "Tempo" msgstr "" -#: app/playlist.c:548 -msgid "Add Free" +#: app/gui.c:2605 +msgid "Number of Channels:" msgstr "" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" +#: app/gui.c:2632 +msgid "Set preferred accidental type" msgstr "" -#: app/playlist.c:560 -msgid "Len" +#: app/gui.c:2638 +msgid "Measure" msgstr "" -#: app/playlist.c:574 -msgid "Song length" +#: app/gui.c:2639 +msgid "Enable row highlighting" msgstr "" -#: app/playlist.c:580 -msgid "Rstrt" +#: app/gui.c:2660 +msgid "Other..." msgstr "" -#: app/playlist.c:593 -msgid "Song restart position" +#: app/gui.c:2687 +msgid "Change effect column editing direction" msgstr "" -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" msgstr "" -#: app/sample-editor.c:234 -msgid "No loop" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" msgstr "" -#: app/sample-editor.c:236 -msgid "PingPong" +#: app/gui.c:2740 +msgid "Pitchbend" msgstr "" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" msgstr "" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" +#: app/gui.c:2760 +msgid "Editing" msgstr "" -#: app/sample-editor.c:247 -msgid "Sample Editor" +#: app/gui.c:2767 +msgid "Octave" msgstr "" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" +#: app/gui.c:2776 +msgid "Jump" msgstr "" -#: app/sample-editor.c:288 -msgid "Panning" +#: app/gui.c:2785 +msgid "Instr" msgstr "" -#: app/sample-editor.c:289 -msgid "Finetune" +#: app/gui.c:2801 +msgid "Sample" msgstr "" -#: app/sample-editor.c:309 -msgid "Selection:" +#: app/gui.c:2827 +msgid "dB" msgstr "" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" +#: app/gui.c:2866 +#, c-format +msgid "Welcome to %s!" msgstr "" -#: app/sample-editor.c:319 -msgid "All" +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" msgstr "" -#: app/sample-editor.c:340 -msgid "Length:" +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." msgstr "" -#: app/sample-editor.c:356 -msgid "Set as loop" +#: app/instrument-editor.c:209 +msgid "Saving instrument failed." msgstr "" -#: app/sample-editor.c:364 -msgid "RelNote" +#: app/instrument-editor.c:232 +msgid "Clear current instrument?" msgstr "" -#: app/sample-editor.c:375 -msgid "Load Sample..." +#: app/instrument-editor.c:252 +msgid "Sine" msgstr "" -#: app/sample-editor.c:377 -msgid "Save WAV..." +#: app/instrument-editor.c:252 +msgid "Square" msgstr "" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." +#: app/instrument-editor.c:252 +msgid "Saw Down" msgstr "" -#: app/sample-editor.c:392 -msgid "Save WAV" +#: app/instrument-editor.c:252 +msgid "Saw Up" msgstr "" -#: app/sample-editor.c:402 -msgid "Save Region" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" msgstr "" -#: app/sample-editor.c:413 -msgid "Monitor" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" msgstr "" -#: app/sample-editor.c:419 -msgid "Volume Ramp" +#: app/instrument-editor.c:268 +msgid "Volume envelope" msgstr "" -#: app/sample-editor.c:425 -msgid "Trim" +#: app/instrument-editor.c:276 +msgid "Panning envelope" msgstr "" -#: app/sample-editor.c:436 -msgid "Zoom to selection" +#: app/instrument-editor.c:292 +msgid "Load Instrument" msgstr "" -#: app/sample-editor.c:442 -msgid "Show all" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" msgstr "" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" +#: app/instrument-editor.c:295 +msgid "Save Instrument" msgstr "" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" +#: app/instrument-editor.c:297 +msgid "Save the current instrument" msgstr "" -#: app/sample-editor.c:460 -msgid "Reverse" +#: app/instrument-editor.c:299 +msgid "Load XI" msgstr "" -#: app/sample-editor.c:470 -msgid "Cut" +#: app/instrument-editor.c:305 +msgid "Save XI" msgstr "" -#: app/sample-editor.c:476 -msgid "Remove" +#: app/instrument-editor.c:320 +msgid "Volume Fadeout" msgstr "" -#: app/sample-editor.c:482 -msgid "Copy" +#: app/instrument-editor.c:344 +msgid "Vibrato:" msgstr "" -#: app/sample-editor.c:488 -msgid "Paste" +#: app/instrument-editor.c:354 +msgid "Type" msgstr "" -#: app/sample-editor.c:494 -msgid "Clear Sample" +#: app/instrument-editor.c:356 +msgid "Speed" msgstr "" -#: app/sample-editor.c:500 -msgid "Crop" +#: app/instrument-editor.c:359 +msgid "Depth" msgstr "" -#: app/sample-editor.c:564 -msgid "(no selection)" +#: app/instrument-editor.c:361 +msgid "Sweep" msgstr "" -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" +#: app/instrument-editor.c:413 +msgid "Note:" msgstr "" -#: app/sample-editor.c:1188 -msgid "" +#: app/instrument-editor.c:431 +msgid "Initialize" msgstr "" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." +#: app/keys.c:58 +msgid "" msgstr "" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." +#: app/keys.c:134 +msgid "KOFF" +msgstr "" + +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "" + +#: app/keys.c:136 +msgid "JMP+" +msgstr "" + +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "" + +#: app/keys.c:138 +msgid "JMP-" +msgstr "" + +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "" + +#: app/keys.c:140 +msgid "PlayMod" +msgstr "" + +#: app/keys.c:140 +msgid "Play module." +msgstr "" + +#: app/keys.c:142 +msgid "RecMod" +msgstr "" + +#: app/keys.c:142 +msgid "Play module + recording." +msgstr "" + +#: app/keys.c:144 +msgid "PlayPat" +msgstr "" + +#: app/keys.c:144 +msgid "Play pattern." +msgstr "" + +#: app/keys.c:146 +msgid "RecPat" +msgstr "" + +#: app/keys.c:146 +msgid "Play pattern + recording." +msgstr "" + +#: app/keys.c:148 +msgid "PlayCur" +msgstr "" + +#: app/keys.c:148 +msgid "Play module from cursor." +msgstr "" + +#: app/keys.c:150 +msgid "RecCur" +msgstr "" + +#: app/keys.c:150 +msgid "Play module from cursor + recording." +msgstr "" + +#: app/keys.c:152 +msgid "PlayRow" +msgstr "" + +#: app/keys.c:152 +msgid "Play current pattern row." +msgstr "" + +#: app/keys.c:154 +msgid "PlayBlk" msgstr "" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" +#: app/keys.c:154 +msgid "Play selected block." msgstr "" -#: app/sample-editor.c:1484 +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "" + +#: app/keys.c:167 msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." +msgstr "" + +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "" + +#: app/keys.c:173 +msgid "" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." +msgstr "" + +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "" + +#: app/keys.c:179 +msgid "Various other keys" +msgstr "" + +#: app/keys.c:578 +msgid "Function" +msgstr "" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "" + +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "" + +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "" + +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "" + +#: app/keys.c:702 +msgid "" +"Please press the desired key combination!\n" +"Click into left list to cancel" +msgstr "" + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "" + +#: app/keys.c:1028 +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." +msgstr "" + +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" "\n" -"Please choose which channel to load:" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" msgstr "" -#: app/sample-editor.c:1495 -msgid "Left" +#: app/menubar.c:126 +msgid "" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." msgstr "" -#: app/sample-editor.c:1501 -msgid "Mix" +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" + +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "" + +#: app/mixers/kbfloat.c:838 +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" + +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" + +#: app/module-info.c:63 app/module-info.c:64 +msgid "Cyclic" +msgstr "" + +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" + +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" + +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" + +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" + +#: app/module-info.c:481 +msgid "Period" +msgstr "" + +#: app/module-info.c:484 +msgid "s" +msgstr "" + +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +#: app/module-info.c:517 app/module-info.c:844 +msgid "Note" +msgstr "" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "" + +#: app/module-info.c:756 +msgid "Extended Instrument/Sample Editor" +msgstr "" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +msgid "Copy Instrument 1 to Instrument 2" +msgstr "" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +msgid "Exchange Instruments 1 and 2" +msgstr "" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +msgid "Exchange Samples 1 and 2" +msgstr "" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "" + +#: app/playlist.c:511 +msgid "Remove current playlist entry" +msgstr "" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "" + +#: app/playlist.c:534 +msgid "Len" +msgstr "" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "" + +#: app/playlist.c:554 +msgid "Rstrt" +msgstr "" + +#: app/playlist.c:567 +msgid "Song restart position" +msgstr "" + +#: app/preferences.c:60 +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "" + +#: app/sample-editor.c:541 +msgid "Load sample into the current sample slot" +msgstr "" + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "" + +#: app/sample-editor.c:542 +msgid "Save the current sample" +msgstr "" + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "" + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "" + +#: app/sample-editor.c:593 +msgid "Trim" +msgstr "" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "" + +#: app/sample-editor.c:667 +msgid "Crop" +msgstr "" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "" + +#: app/sample-editor.c:1279 +msgid "Out of memory for copybuffer." +msgstr "" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "2 samples" +msgstr "" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "" + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "" + +#: app/sample-editor.c:1723 +#, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" + +#: app/sample-editor.c:1726 +msgid "Stereo sample loading" +msgstr "" + +#: app/sample-editor.c:1756 +msgid "Signed" +msgstr "" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "" + +#: app/sample-editor.c:1829 +msgid "Sampling Rate:" +msgstr "" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "" + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "" + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "" + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +msgid "Clear" +msgstr "" + +#: app/sample-editor.c:2263 +msgid "Sampling failed!" +msgstr "" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" + +#: app/sample-editor.c:2372 +msgid "Converting stereo sample" +msgstr "" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "" + +#: app/tips-dialog.c:146 +#, c-format +msgid "%s Tip of the day" +msgstr "" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "" + +#: app/track-editor.c:139 +msgid "Sample offset" +msgstr "" + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "" + +#: app/track-editor.c:175 +msgid "Pattern loop" +msgstr "" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "" + +#: app/track-editor.c:203 +msgid "square" +msgstr "" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +msgid "Extra fine porta up" +msgstr "" + +#: app/track-editor.c:247 +msgid "Extra fine porta down" +msgstr "" + +#: app/track-editor.c:257 +msgid "None ]" +msgstr "" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "" + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" msgstr "" -#: app/sample-editor.c:1507 -msgid "Right" +#: app/transposition.c:206 +msgid "Change 1 -> 2" msgstr "" -#: app/sample-editor.c:1575 -msgid "Signed" +#: app/transposition.c:215 +msgid "Transposition Tools" msgstr "" -#: app/sample-editor.c:1575 -msgid "Unsigned" +#: app/transposition.c:225 +msgid "Scope of the operation:" msgstr "" -#: app/sample-editor.c:1576 -msgid "Little-Endian" +#: app/transposition.c:230 +msgid "Note Transposition" msgstr "" -#: app/sample-editor.c:1576 -msgid "Big-Endian" +#: app/transposition.c:256 +msgid "Instrument Changing" msgstr "" -#: app/sample-editor.c:1577 -msgid "Mono" +#: app/transposition.c:268 +msgid "Instrument 1:" msgstr "" -#: app/sample-editor.c:1577 -msgid "Stereo" +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" msgstr "" -#: app/sample-editor.c:1589 -msgid "Load raw sample" +#: app/transposition.c:277 +msgid "Instrument 2:" msgstr "" -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" msgstr "" -#: app/sample-editor.c:1623 -msgid "Word format:" +#: app/xm.c:193 +msgid "Pattern header reading error." msgstr "" -#: app/sample-editor.c:1670 -msgid "Sampling Rate:" +#: app/xm.c:200 +#, c-format +msgid "Pattern length out of range: %d." msgstr "" -#: app/sample-editor.c:1681 -msgid "8363" +#: app/xm.c:226 +msgid "Error loading notes." msgstr "" -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." msgstr "" -#: app/sample-editor.c:1748 -msgid "Can't read sample" +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." msgstr "" -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +msgid "Instrument header reading error." msgstr "" -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" msgstr "" -#: app/sample-editor.c:1968 -msgid "Please select region first." +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." msgstr "" -#: app/sample-editor.c:2012 -msgid "Start sampling" +#: app/xm.c:598 +msgid "Sample map reading error." msgstr "" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" +#: app/xm.c:602 +msgid "Volume envelope points reading error." msgstr "" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" +#: app/xm.c:607 +msgid "Panning envelope points reading error." msgstr "" -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" +#: app/xm.c:613 +msgid "Envelope parameters reading error." msgstr "" -#: app/sample-editor.c:2155 -msgid "" +#: app/xm.c:632 +#, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." msgstr "" -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/xm.c:678 app/xm.c:1233 +msgid "Out of memory error!" msgstr "" -#: app/sample-editor.c:2239 -msgid "Normalize" +#: app/xm.c:694 +msgid "The file is not an XI instrument." msgstr "" -#: app/sample-editor.c:2240 -msgid "Execute" +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" msgstr "" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" +#: app/xm.c:729 +msgid "Instrument sample map reading error." msgstr "" -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" +#: app/xm.c:735 +msgid "Instrument volume envelope points reading error." msgstr "" -#: app/sample-editor.c:2281 -msgid "Left [%]:" +#: app/xm.c:742 +msgid "Instrument panning envelope points reading error." msgstr "" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" +#: app/xm.c:750 +msgid "Instrument envelope parameters reading error." msgstr "" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" +#: app/xm.c:769 +#, c-format +msgid "Invalid vibtype %d, using Sine." msgstr "" -#: app/sample-editor.c:2298 -msgid "Right [%]:" +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." msgstr "" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." msgstr "" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/xm.c:1079 +msgid "Pattern order table reading error." msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" msgstr "" -#: app/tips-dialog.c:50 -msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +#: app/xm.c:1200 +msgid "Can't open file" msgstr "" -#: app/tips-dialog.c:55 -msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +#: app/xm.c:1215 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" msgstr "" -#: app/tips-dialog.c:59 +#: app/xm.c:1222 +#, c-format msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" msgstr "" -#: app/tips-dialog.c:62 -msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." msgstr "" -#: app/tips-dialog.c:65 -msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +#: app/xm.c:1266 +msgid "Error while loading pattern order table." msgstr "" -#: app/tips-dialog.c:69 +#: app/xm.c:1279 msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +"Instruments loading error. Some of instruments can be missing or corrupted." msgstr "" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." msgstr "" -#: app/tips-dialog.c:154 -msgid "Previous Tip" +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." msgstr "" -#: app/tips-dialog.c:162 -msgid "Next Tip" +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." msgstr "" -#: app/tips-dialog.c:174 -msgid "Show tip next time" +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" msgstr "" -#: app/track-editor.c:113 -msgid "Arpeggio" +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" msgstr "" -#: app/track-editor.c:114 -msgid "Porta up" +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" msgstr "" -#: app/track-editor.c:115 -msgid "Porta down" +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" msgstr "" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" msgstr "" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" msgstr "" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" msgstr "" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" +#: app/xm.c:1716 +msgid "Incorrect pattern length!" msgstr "" -#: app/track-editor.c:120 -msgid "Tremolo" +#: app/xm.c:1761 app/xm.c:1787 +msgid "Error during saving pattern!" msgstr "" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" msgstr "" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" msgstr "" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" msgstr "" -#: app/track-editor.c:126 -msgid "Pattern break" +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" msgstr "" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" msgstr "" -#: app/track-editor.c:129 -msgid "Set global volume" +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" msgstr "" -#: app/track-editor.c:130 -msgid "Global volume slide" +#: app/midi-settings.c:399 +msgid "Auto connect" msgstr "" -#: app/track-editor.c:133 -msgid "Key off" +#: app/midi-settings.c:414 +msgid "Channel" msgstr "" -#: app/track-editor.c:134 -msgid "Set envelop position" +#: app/midi-settings.c:423 +msgid "Client number" msgstr "" -#: app/track-editor.c:138 -msgid "Panning slide" +#: app/midi-settings.c:434 +msgid "Port number" msgstr "" -#: app/track-editor.c:139 -msgid "LP filter resonance" +#: app/midi-settings.c:453 +msgid "Input" msgstr "" -#: app/track-editor.c:140 -msgid "Multi retrig note" +#: app/midi-settings.c:462 +msgid "For future development" msgstr "" -#: app/track-editor.c:142 -msgid "Tremor" +#: app/midi-settings.c:468 +msgid "Output" msgstr "" -#: app/track-editor.c:148 -msgid "LP filter cutoff" +#: app/midi-settings.c:479 +msgid "Debug level" msgstr "" -#: app/track-editor.c:153 -msgid "Fine porta up" +#: app/midi-settings.c:492 +msgid "Misc" msgstr "" -#: app/track-editor.c:154 -msgid "Fine porta down" +#: app/midi-settings.c:532 +msgid "MIDI Configuration" msgstr "" -#: app/track-editor.c:155 -msgid "Set gliss control" +#: soundtracker.glade:10 +msgid "Pattern" msgstr "" -#: app/track-editor.c:156 -msgid "Set vibrato control" +#: soundtracker.glade:49 +msgid "Track" msgstr "" -#: app/track-editor.c:157 -msgid "Set finetune" +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" msgstr "" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" msgstr "" -#: app/track-editor.c:159 -msgid "Set tremolo control" +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" msgstr "" -#: app/track-editor.c:161 -msgid "Retrig note" +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" msgstr "" -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" msgstr "" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" msgstr "" -#: app/track-editor.c:164 -msgid "Note cut" +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" msgstr "" -#: app/track-editor.c:165 -msgid "Note delay" +#: soundtracker.glade:210 +msgid "_File" msgstr "" -#: app/track-editor.c:166 -msgid "Pattern delay" +#: soundtracker.glade:217 +msgid "_Open…" msgstr "" -#: app/track-editor.c:171 -msgid "Volume slide down" +#: soundtracker.glade:237 +msgid "Save _as…" msgstr "" -#: app/track-editor.c:172 -msgid "Volume slide up" +#: soundtracker.glade:252 +msgid "Save Module as _WAV…" msgstr "" -#: app/track-editor.c:175 -msgid "Set vibrato speed" +#: soundtracker.glade:261 +msgid "Save _XM without samples…" msgstr "" -#: app/track-editor.c:178 -msgid "Panning slide left" +#: soundtracker.glade:276 +msgid "_Recent" msgstr "" -#: app/track-editor.c:179 -msgid "Panning slide right" +#: soundtracker.glade:302 +msgid "_Module" msgstr "" -#: app/track-editor.c:184 -msgid "sine" +#: soundtracker.glade:309 +msgid "Clear _All" msgstr "" -#: app/track-editor.c:185 -msgid "ramp down" +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" msgstr "" -#: app/track-editor.c:186 -msgid "square" +#: soundtracker.glade:333 +msgid "_Optimize Module" msgstr "" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, c-format -msgid "None ]" +#: soundtracker.glade:346 +msgid "_Set Optimal Amplification" msgstr "" -#: app/track-editor.c:360 -msgid "Jazz Edit:" +#: soundtracker.glade:358 +msgid "_Edit" msgstr "" -#: app/track-editor.c:405 -msgid "Tracker" +#: soundtracker.glade:398 +msgid "_Jazz edit mode" msgstr "" -#: app/tracker-settings.c:235 -msgid "Font list" +#: soundtracker.glade:412 +msgid "Transp_osition…" msgstr "" -#: app/tracker-settings.c:255 -msgid "Add font" +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" msgstr "" -#: app/tracker-settings.c:261 -msgid "Delete font" +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" msgstr "" -#: app/tracker-settings.c:267 -msgid "Apply font" +#: soundtracker.glade:569 +msgid "_Selection" msgstr "" -#: app/tracker-settings.c:282 -msgid "Up" +#: soundtracker.glade:577 +msgid "_Mark mode" msgstr "" -#: app/tracker-settings.c:285 -msgid "Down" +#: soundtracker.glade:614 +msgid "Transpose half-note up" msgstr "" -#: app/tracker-settings.c:288 -msgid "Select font..." +#: soundtracker.glade:622 +msgid "Transpose half-note down" msgstr "" -#: app/transposition.c:198 -msgid "Whole Song" +#: soundtracker.glade:630 +msgid "Transpose octave up" msgstr "" -#: app/transposition.c:199 -msgid "All Patterns" +#: soundtracker.glade:638 +msgid "Transpose octave down" msgstr "" -#: app/transposition.c:200 -msgid "Current Pattern" +#: soundtracker.glade:661 +msgid "_Load Pattern…" msgstr "" -#: app/transposition.c:201 -msgid "Current Track" +#: soundtracker.glade:670 +msgid "_Save Current Pattern…" msgstr "" -#: app/transposition.c:205 -msgid "Current Instrument" +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" msgstr "" -#: app/transposition.c:206 -msgid "All Instruments" +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" msgstr "" -#: app/transposition.c:210 -msgid "Half note up" +#: soundtracker.glade:703 +msgid "_Add Free Pattern" msgstr "" -#: app/transposition.c:211 -msgid "Half note down" +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" msgstr "" -#: app/transposition.c:212 -msgid "Octave up" +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" msgstr "" -#: app/transposition.c:213 -msgid "Octave down" +#: soundtracker.glade:732 +msgid "_Pack Patterns" msgstr "" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" +#: soundtracker.glade:745 +msgid "S_hrink Current Pattern" msgstr "" -#: app/transposition.c:217 -msgid "Change 1 -> 2" +#: soundtracker.glade:753 +msgid "_Expand Current Pattern" msgstr "" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" msgstr "" -#: app/transposition.c:250 -msgid "Scope of the operation:" +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" msgstr "" -#: app/transposition.c:257 -msgid "Note Transposition" +#: soundtracker.glade:789 +msgid "_Mute / Unmute Current Track" msgstr "" -#: app/transposition.c:288 -msgid "Instrument Changing" +#: soundtracker.glade:798 +msgid "_Unmute All Tracks" msgstr "" -#: app/transposition.c:303 -msgid "Instrument 1:" +#: soundtracker.glade:807 +msgid "Current Track _Solo" msgstr "" -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" +#: soundtracker.glade:820 +msgid "_Instrument" msgstr "" -#: app/transposition.c:313 -msgid "Instrument 2:" +#: soundtracker.glade:827 +msgid "_Load XI…" msgstr "" -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" +#: soundtracker.glade:836 +msgid "_Save XI…" msgstr "" -#: app/xm.c:547 -msgid "File is no XI instrument." +#: soundtracker.glade:850 +msgid "_Clear Current" msgstr "" -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" msgstr "" -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" +#: soundtracker.glade:880 +msgid "_Settings" msgstr "" -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" msgstr "" -#: app/xm.c:927 -msgid "Can't open file" +#: soundtracker.glade:896 +msgid "_Loop playback" msgstr "" -#: app/xm.c:990 -msgid "Error while loading instruments." +#: soundtracker.glade:905 +msgid "_Tracker" msgstr "" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." +#: soundtracker.glade:913 +msgid "_Flicker-free Scrolling" msgstr "" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" +#: soundtracker.glade:921 +msgid "_Previous Font" msgstr "" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" +#: soundtracker.glade:930 +msgid "_Next Font" msgstr "" -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" +#: soundtracker.glade:944 +msgid "Change Preferred _Accidental Type" msgstr "" -#: app/xm.c:1422 -msgid "Incorrect pattern length!" +#: soundtracker.glade:953 +msgid "Change Effect Column _Editing Direction" msgstr "" -#: app/xm.c:1468 -msgid "Error during saving pattern!" +#: soundtracker.glade:970 +msgid "_Keyboard Configuration…" msgstr "" -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" +#: soundtracker.glade:980 +msgid "_Audio Configuration…" msgstr "" -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -msgid "Channel" +#: soundtracker.glade:990 +msgid "_GUI Configuration…" msgstr "" -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" +#: soundtracker.glade:1000 +msgid "_MIDI Configuration…" msgstr "" -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" +#: soundtracker.glade:1016 +msgid "_Disable Splash Screen" msgstr "" -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -msgid "Input" +#: soundtracker.glade:1023 +msgid "_Save Settings Now" msgstr "" -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" msgstr "" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -msgid "Output" +#: soundtracker.glade:1046 +msgid "_Help" msgstr "" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" +#: soundtracker.glade:1053 +msgid "_About…" msgstr "" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -msgid "Misc" +#: soundtracker.glade:1068 +msgid "Show _Tips…" msgstr "" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -msgid "MIDI Configuration" +#: soundtracker.glade:1078 +msgid "_XM Effects" msgstr "" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/sv.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/sv.gmo differ diff -Nru soundtracker-0.6.8/po/sv.po soundtracker-1.0.2~pre2/po/sv.po --- soundtracker-0.6.8/po/sv.po 2006-02-25 13:25:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/sv.po 2020-05-27 18:54:29.000000000 +0000 @@ -6,15 +6,23 @@ msgstr "" "Project-Id-Version: soundtracker 0.6.7\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2004-03-23 00:51+0100\n" "Last-Translator: Christian Rose \n" "Language-Team: Swedish \n" +"Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "Uppspelningsutmatning" @@ -22,2109 +30,3711 @@ msgid "Editing Output" msgstr "Redigeringsutmatning" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Sampling" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "Drivrutinsmodul" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "Mixermodul" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Beskrivning" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "Ljudkonfiguration" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Drivrutiner" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Mixrar" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Stäng" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d byte)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Beräknad ljudfördröjning: %f µs" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "_XM-effekter..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Trackerfrekvens" + +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" msgstr "" -"Dessa ändringar kommer inte att börja gälla förrän du börjar om att spela." -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Upplösning:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Kanaler:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Frekvens [Hz]:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines" +msgstr "Aktivera radfärgmarkering" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Buffertstorlek:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines highlighting" +msgstr "Aktivera radfärgmarkering" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "ALSA-kortnummer:" - -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "ALSA-enhetsnummer:" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines" +msgstr "Aktivera radfärgmarkering" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" -msgstr "" -"Kunde inte öppna ALSA-enhet för ljudinläsning (kort: %d, enhet: %d):\n" -"%s" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines highlighting" +msgstr "Aktivera radfärgmarkering" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Det ljuduppspelningsformat som krävs stöds inte.\n" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Markering:" -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "De ljuduppspelningsparametrar som krävs stöds inte.\n" +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Trackerfrekvens" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Beräknad ljudfördröjning: %f ms" +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" msgstr "" -"Kunde inte öppna ALSA-enhet för ljuduppspelning (kort: %d, enhet: %d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "Utmatningskanalparametrar som krävs stöds inte.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "Ta bort" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "Kan inte förbereda ALSA-kanal.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "Ta bort" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "Alsa-konfigurationsfel.\n" +#: app/colors.c:49 +#, fuzzy +msgid "Channel numbers, loops" +msgstr "Kanaler" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -"Observera att ESD-utmatning är oanvändbart i\n" -"interaktivt läge pÃ¥ grund av den latens som\n" -"tillkommer genom ESD. Använd OSS- eller ALSA-\n" -"utmatningsinsticksmodulerna för seriöst arbete." -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -"Kunde inte ansluta till ESD för ljuduppspelning:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "inga inställningar (än), tyvärr!" +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Kan inte öppna fil för skrivning." +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" msgstr "" -"Dessa ändringar kommer inte att börja gälla förrän du börjar om att sampla." -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Inmatningsenhet (t.ex. \"/dev/dsp\"):" +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "Zooma till markering" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" msgstr "" -"Kunde inte öppna %s för sampling:\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d samplingsvärden)" - -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "Utmatningsenhet (t.ex. \"/dev/dsp\"):" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "LÃ¥tomstartsposition" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:53 +msgid "Mixer position indicator" msgstr "" -"Kunde inte öppna %s för ljuduppspelning:\n" -"%s" -# Osäker -#: app/drivers/jack-output.c:254 -msgid "transport master" -msgstr "transport-master" +#: app/colors.c:54 +msgid "Zero line" +msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" -msgstr "avklicka" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" -msgstr "Kör med %d Hz med %d ramar" +#: app/colors.c:56 +msgid "White keys" +msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" -msgstr "Jack-servern kör inte?" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "" -#: app/drivers/jack-output.c:327 -#, c-format -msgid "soundtracker" -msgstr "soundtracker" +#: app/colors.c:57 +msgid "Black keys" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "ut_1" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" +msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "ut_2" +#: app/colors.c:58 +msgid "White keys pressed" +msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" -msgstr "Utmatningsenhet (t.ex. \"/dev/audio\"):" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: Kan inte spela (%s)" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: Kan inte hantera %d Hz (%s)" +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s: Ljudkodning som krävs stöds inte.\n" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 -#, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: Kan inte ställa in blockstorlek (%s)" +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" -msgstr "Inmatningsenhet (t.ex. \"/dev/audio\"):" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: Kan inte spela in (%s)" +#: app/colors.c:395 +#, fuzzy, c-format +msgid "%s colors configuration" +msgstr "Tangentbordskonfiguration" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Längd" +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Baklänges" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Aktuell" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Förskjutning" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Värde" +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Lägg till" +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" +msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Ta bort" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "ALSA-enhetsnummer:" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" msgstr "" -"Grafisk\n" -"envelopredigerare\n" -"endast i\n" -"GNOME-versionen" - -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Utklangning" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Punkt" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Slinga" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +#, fuzzy +msgid "Unable to set channels number" +msgstr "Kan inte förbereda ALSA-kanal.\n" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Start" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Slut" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Läs in modul" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "Spara modul" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Rendera WAV" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Spara lÃ¥t" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Läs in sampling" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "Spara sampling" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Läs in instrument" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Spara instrument" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:175 -msgid "File" -msgstr "Fil" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Ã…tgärden stöds inte." +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d samplingsvärden)" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Oscilloskopfrekvens" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Trackerfrekvens" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "Konfiguration av användargränssnitt" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "Hexadecimala radnummer" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8-bitars" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Använd stora bokstäver i hexadecimala tal" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16-bitars" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" -msgstr "Asynkron mönsterredigering (IT-metoden)" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "Mono" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" -msgstr "Fxx-kommando uppdaterar reglage för tempo/BPM" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "Stereo" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" -msgstr "Växla till tracker efter inläsning/sparande" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "" +"Dessa ändringar kommer inte att börja gälla förrän du börjar om att spela." -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" -msgstr "Spara fönstergeometri vid avslut" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "" +"Dessa ändringar kommer inte att börja gälla förrän du börjar om att sampla." -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" -msgstr "Använd notnamn B istället för H" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" msgstr "" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Oscilloskopbuffertstorlek [MB]" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Upplösning:" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Radformat för spÃ¥r:" +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Kanaler:" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." -msgstr "Redo." +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Frekvens [Hz]:" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Spelar lÃ¥t..." +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Buffertstorlek:" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Spelar mönster..." +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "Antal kanaler:" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Läser in modul..." +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Beräknad ljudfördröjning: %f ms" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Modul inläst." +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." +msgstr "" -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Sparar modul..." +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" +msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Modul sparad." +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "Läser in sampling..." +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Sampling inläst." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Sparar sampling..." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Sampling sparad." +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "Läser in instrument..." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Instrument inläst." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Sparar instrument..." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Instrument sparat." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Sparar lÃ¥t..." +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "Fel vid inläsning av mönster." -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "LÃ¥t sparad." +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "FrÃ¥ga" +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "Ja" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "Nej" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Avbryt" +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Varning" +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "Fel!" +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" -msgstr "Konfiguration av radfärgmarkering" +#: app/drivers/alsa1x.c:1328 +#, fuzzy +msgid "Unable to enable timestamping for playback" +msgstr "Kan inte förbereda ALSA-kanal.\n" -#: app/gui.c:301 -msgid "Highlight rows (major / minor):" -msgstr "Färgmarkera rader (övre/undre):" +#: app/drivers/alsa1x.c:1329 +#, fuzzy +msgid "Unable to enable timestamping for capture" +msgstr "Kan inte förbereda ALSA-kanal.\n" -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" -msgstr "" -"Udda mönsterrader innehÃ¥ller data som kommer att gÃ¥ förlorade efter " -"krympning.\n" -"Vill du fortsätta ändÃ¥?" +#: app/drivers/alsa1x.c:1335 +#, fuzzy +msgid "Unable to set timestamp type for playback" +msgstr "Kan inte förbereda ALSA-kanal.\n" -#: app/gui.c:506 +#: app/drivers/alsa1x.c:1336 #, fuzzy -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" -msgstr "" -"Mönstret är för lÃ¥ngt för expandering.\n" -"En del data pÃ¥ slutet av mönstret kommer att gÃ¥ förlorade. Vill du fortsätta " -"ändÃ¥?" +msgid "Unable to set timestamp type for capture" +msgstr "Kan inte förbereda ALSA-kanal.\n" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "Ingen fil vald." +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" +msgstr "" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" msgstr "" -"Är du säker pÃ¥ att du vill frigöra det aktuella projektet?\n" -"Alla ändringar kommer att gÃ¥ förlorade!" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Är du säker pÃ¥ att du vill skriva över filen?" +#: app/drivers/alsa1x.c:1352 +#, fuzzy +msgid "Unable to prepare playback" +msgstr "Kan inte förbereda ALSA-kanal.\n" -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "Fel vid öppnande av mönsterfil!" +#: app/drivers/alsa1x.c:1353 +#, fuzzy +msgid "Unable to prepare capture" +msgstr "Kan inte förbereda ALSA-kanal.\n" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" msgstr "" -"Längden pÃ¥ det mönster som lästes in stämmer inte överens med den för det " -"aktuella mönstret i modulen.\n" -"Vill du ändra längden för det aktuella mönstret?" -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "SoundTracker-uppstart" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" +msgstr "" -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "Läser in..." +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "" -#: app/gui.c:1804 -msgid "Use SoundTracker!" -msgstr "Använd SoundTracker!" +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "inga inställningar (än), tyvärr!" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Läs in XM..." - -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "Spara XM..." +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Rendera modul som WAV..." +#: app/drivers/irix-output.c:178 +#, fuzzy +msgid "16 Bit output not supported." +msgstr "Ã…tgärden stöds inte." -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "Spara lÃ¥t som XM..." +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "Ã…tgärden stöds inte." -#: app/gui.c:1872 -msgid "Load current pattern..." -msgstr "Läs in aktuellt mönster..." +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." +msgstr "" +"Kunde inte öppna %s för sampling:\n" +"%s" -#: app/gui.c:1874 -msgid "Save current pattern..." -msgstr "Spara aktuellt mönster..." +#: app/drivers/oss.c:130 +#, fuzzy +msgid "OSS input: reading error" +msgstr "Instrumentbyte" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Spela lÃ¥t" +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Spela mönster" +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Beräknad ljudfördröjning: %f ms" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Stoppa" +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d samplingsvärden)" -# Antar att detta är kort för "Pattern". -#: app/gui.c:1973 -msgid "Pat" -msgstr "Mön" +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "Inmatningsenhet (t.ex. \"/dev/dsp\"):" -#: app/gui.c:1979 -msgid "Edited pattern" -msgstr "Redigerat mönster" +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "Utmatningsenhet (t.ex. \"/dev/dsp\"):" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" msgstr "" -"DÃ¥ detta är aktiverat ändrar inte bläddring i spellistan det redigerade " -"mönstret." -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Antal kanaler:" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "" -#: app/gui.c:2025 -msgid "Pattern Length" -msgstr "Mönsterlängd" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"Kunde inte öppna %s för sampling:\n" +"%s" -# Osäker. -#: app/gui.c:2060 -msgid "Set preferred accidental type" -msgstr "Ställ in föredragen tillfällighetstyp" +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "Det ljuduppspelningsformat som krävs stöds inte.\n" -#: app/gui.c:2066 -msgid "Measure" -msgstr "Mät" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" +msgstr "Kör med %d Hz med %d ramar" -#: app/gui.c:2067 -msgid "Enable row highlighting" -msgstr "Aktivera radfärgmarkering" +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "Jack-servern kör inte?" -#: app/gui.c:2093 -msgid "Other..." -msgstr "Annat..." +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/gui.c:2129 -msgid "Change effect column editing direction" -msgstr "Ändra riktning för effektkolumnredigering" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" -msgstr "Global förstärkning" +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -# Osäker. -#: app/gui.c:2196 -msgid "Pitchbend" -msgstr "Pitchbend" +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -# Osäker. -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" -msgstr "Ã…terställ pitchbend till sitt normala värde" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "avklicka" -#: app/gui.c:2216 -msgid "Editing" -msgstr "Redigering" +#: app/drivers/jack.c:610 +#, fuzzy +msgid "Jack server is not running or some error occured." +msgstr "Jack-servern kör inte?" -#: app/gui.c:2223 -msgid "Octave" -msgstr "Oktav" +#: app/drivers/sdl-output.c:76 +#, fuzzy +msgid "Experimental SDL support." +msgstr "Ã…tgärden stöds inte." -#: app/gui.c:2232 -msgid "Jump" -msgstr "Hopp" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "Utmatningsenhet (t.ex. \"/dev/audio\"):" -#: app/gui.c:2241 -msgid "Instr" -msgstr "Instrument" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Sampling" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "Välkommen till SoundTracker!" +#: app/drivers/sun-output.c:402 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "%s: Kan inte hantera %d Hz (%s)" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "%s: Ljudkodning som krävs stöds inte.\n" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "Volymborttoning" +#: app/drivers/sun-output.c:455 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "%s: Kan inte ställa in blockstorlek (%s)" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "Vib.hast." +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "Vib.djup" +#: app/drivers/sun-input.c:77 +#, fuzzy +msgid "SUN input: reading error" +msgstr "Instrumentbyte" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "Vib.svep" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Kan inte öppna fil." +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "Inmatningsenhet (t.ex. \"/dev/audio\"):" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sinus" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Fyrkant" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "SÃ¥gtand ner" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "SÃ¥gtand upp" +#: app/drivers/sun-input.c:273 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "%s: Kan inte hantera %d Hz (%s)" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Instrumentredigerare" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "%s: Ljudkodning som krävs stöds inte.\n" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Volymenvelop" +#: app/drivers/sun-input.c:332 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "%s: Kan inte ställa in blockstorlek (%s)" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Panoreringsenvelop" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Längd" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Läs in instrument..." - -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Spara instrument..." +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Aktuell" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "Läs in XI" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Förskjutning" -# src/menus.c:280 -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "Spara XI" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Värde" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Vibratotyp:" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Lägg till" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Not:" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "Ta bort" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Initiera" +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"Grafisk\n" +"envelopredigerare\n" +"endast i\n" +"GNOME-versionen" -#: app/keys.c:57 -msgid "" -msgstr "" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Utklangning" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "" -"Tangenten som infogar den speciella avtangentnoten för FastTracker-moduler." +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Punkt" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." -msgstr "Tangenten som ökar \"hopp\"-värdet." +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "Slinga" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." -msgstr "Tangenten som minskar \"hopp\"-värdet." +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "Start" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "Tangenter för övre oktav..." +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Slut" -#: app/keys.c:146 +#: app/file-operations.c:127 +#, c-format msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" msgstr "" -"Detta är tangenterna pÃ¥ den övre delen av tangentbordet. C-tangenten är " -"normalt tangenten till höger om tabulatorsteget. Resten av tangenterna, " -"inklusive taltangenterna ovanför, är arrangerade pÃ¥ pianoklaviatursvis." -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Tangenter för lägre oktav..." +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." +#: app/file-operations.c:245 +msgid "All files" msgstr "" -"Detta är tangenterna pÃ¥ den nedre delen av tangentbordet. C-tangenten är " -"normalt tangenten till vänster om skifttangenten. Resten av tangenterna, " -"inklusive raden ovanför, är arrangerade pÃ¥ pianoklaviatursvis." -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "Andra tangenter..." +#: app/file-operations.c:388 +msgid "File" +msgstr "Fil" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Diverse andra tangenter" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/keys.c:513 -msgid "Function" -msgstr "Funktion" +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Tilldelning" +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "Mixrar" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Tangentbordskonfiguration" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "Konfiguration av användargränssnitt" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Tangentgruppsförklaring" +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Oscilloskopfrekvens" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Tangentförklaring" +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Trackerfrekvens" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Modifierare:" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Hexadecimala radnummer" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Lär vald tangent" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Använd stora bokstäver i hexadecimala tal" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Lär alla tangenter" +#: app/gui-settings.c:343 +#, fuzzy +msgid "FT2-like volume column" +msgstr "Fin volymglidning upp" -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" msgstr "" -"Tryck den önskade tangentkombinationen!\n" -"Klicka i den vänstra listan för att avbryta" - -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Ok" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Verkställ" +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" +msgstr "" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +#: app/gui-settings.c:361 +msgid "Decimal volume representation" msgstr "" -"Tangentbordkonfigurationsfilen är trasig.\n" -"Använd tangentbordskonfigurationsdialogen." -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" -msgstr "KA%02d" +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" +msgstr "Asynkron mönsterredigering (IT-metoden)" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" -msgstr "Snabbhoppa till kanal %d" +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -"Automatisk tangentbordskonfiguration misslyckades.\n" -"Välj tangentbordskonfigurationsdialogen i\n" -"Inställningar-menyn." -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" msgstr "" -"Är du säker pÃ¥ att du vill göra detta?\n" -"Alla ändringar kommer att gÃ¥ förlorade!" -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +#: app/gui-settings.c:398 +msgid "Record precise timings" msgstr "" -"Är du säker pÃ¥ att du vill avsluta?\n" -"Alla ändringar kommer att gÃ¥ förlorade!" -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Öppna..." +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Spara so_m..." +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "Fxx-kommando uppdaterar reglage för tempo/BPM" -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Spara modul som _WAV..." +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "Spara XM utan samplingar..." +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "Växla till tracker efter inläsning/sparande" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "A_vsluta" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Töm _alla" +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" +msgstr "Spara fönstergeometri vid avslut" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Töm endast _mönster" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "Använd notnamn B istället för H" -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Optimera modul" +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "Klipp _ut" - -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Kopiera" - -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "Klistra _in" +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." +msgstr "" -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Döda noter" +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Markering:" -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "_Infoga spÃ¥r" +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Oscilloskopbuffertstorlek [MB]" -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "_Ta bort spÃ¥r" +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Sampling inläst." -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Öka kommandovärde" +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "" -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Minska kommandovärde" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Redigera" -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "_Markeringsläge" +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "" -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "T_öm blockmärken" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "" -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "_Interpolera effekter" +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "" -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Transponera halvt tonsteg uppÃ¥t" +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Transponera halvt tonsteg nedÃ¥t" +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Radformat för spÃ¥r:" -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Transponera oktav uppÃ¥t" +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Transponera oktav nedÃ¥t" +#: app/gui-settings.c:573 +#, fuzzy +msgid "Tracker colors configuration" +msgstr "Tangentbordskonfiguration" -#: app/menubar.c:526 -msgid "P_aste" -msgstr "Klistra _in" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "Redo." -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "_Jazzredigeringsläge" +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Spelar lÃ¥t..." -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "" +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Spelar mönster..." -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "Transp_onering..." +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "Läser in modul..." -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "M_önster" +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "Modul inläst." -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "S_pÃ¥r" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Sparar modul..." -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Markering" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "Modul sparad." -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_Sök oanvänt mönster" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "Läser in sampling..." -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Kopiera frÃ¥n aktuellt till oanvänt mönster" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Sampling inläst." -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "T_öm oanvända mönster" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Sparar sampling..." -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "_Packa mönster" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Sampling sparad." -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "_Spara aktuellt mönster" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "Läser in instrument..." -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "L_äs in mönster" +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Instrument inläst." -#: app/menubar.c:599 -msgid "Sh_rink Current Pattern" -msgstr "K_rymp aktuellt mönster" +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Sparar instrument..." -#: app/menubar.c:601 -msgid "_Expand Current Pattern" -msgstr "_Fäll ut aktuellt mönster" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Instrument sparat." -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" -msgstr "" +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Sparar lÃ¥t..." -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" -msgstr "" +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "LÃ¥t sparad." -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Läs in XI..." +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "Fel!" -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_Spara XI..." +#: app/gui-subs.c:414 +msgid "Question" +msgstr "FrÃ¥ga" -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_Töm aktuell" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Ta bort oanvända instrument" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "_Flimmerfri rullning" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "_FöregÃ¥ende typsnitt" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Varning" -#: app/menubar.c:642 -msgid "_Next font" -msgstr "_Nästa typsnitt" +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "Konfiguration av användargränssnitt" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" -msgstr "Ändra föredragen _tillfällighetstyp" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "Konfiguration av radfärgmarkering" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" -msgstr "Ändra _riktning för effektkolumnredigering" +#: app/gui.c:260 +msgid "Highlight rows (major / minor):" +msgstr "Färgmarkera rader (övre/undre):" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Visa _oscilloskop" +#: app/gui.c:330 +msgid "" +msgstr "" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Tracker" +#: app/gui.c:451 +#, fuzzy +msgid "Saving module failed" +msgstr "Sparar modul..." -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "_Tangentbordskonfiguration..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "_Ljudkonfiguration..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "Konfiguration av användar_gränssnitt..." - -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "_MIDI-konfiguration..." +#: app/gui.c:535 +msgid "File output" +msgstr "" -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "Inaktivera startbild" +#: app/gui.c:612 +#, fuzzy +msgid "Can't open file for writing" +msgstr "Kan inte öppna fil för skrivning." -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Spara inställningar nu" +#: app/gui.c:618 +#, fuzzy +msgid "Can't change file ownership" +msgstr "Kan inte öppna fil för skrivning." -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Spara inställningar vid a_vslut" +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "" -#: app/menubar.c:690 -msgid "_About..." -msgstr "_Om..." +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "" -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Visa _tips..." +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" +"Udda mönsterrader innehÃ¥ller data som kommer att gÃ¥ förlorade efter " +"krympning.\n" +"Vill du fortsätta ändÃ¥?" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "_XM-effekter..." +#: app/gui.c:715 +#, fuzzy +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" +"Mönstret är för lÃ¥ngt för expandering.\n" +"En del data pÃ¥ slutet av mönstret kommer att gÃ¥ förlorade. Vill du fortsätta " +"ändÃ¥?" -# Arkiv Arkiv Arkiv Arkiv Arkiv Arkiv Arkiv och inget annat än Arkiv! -#: app/menubar.c:704 -msgid "_File" -msgstr "_Arkiv" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"Är du säker pÃ¥ att du vill frigöra det aktuella projektet?\n" +"Alla ändringar kommer att gÃ¥ förlorade!" -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Modul" +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "Fel vid öppnande av mönsterfil!" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Redigera" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" +msgstr "" +"Längden pÃ¥ det mönster som lästes in stämmer inte överens med den för det " +"aktuella mönstret i modulen.\n" +"Vill du ändra längden för det aktuella mönstret?" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Instrument" +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "Start" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Inställningar" +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "Läser in..." -#: app/menubar.c:711 -msgid "_Help" -msgstr "_Hjälp" +#: app/gui.c:2195 +msgid "Use SoundTracker!" +msgstr "Använd SoundTracker!" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" msgstr "" -"Heltalsmixer, ingen interpolation, inga filter, maximal samplingslängd 1 MB" - -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Instrumentnamn" - -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#smpl" +"Är du säker pÃ¥ att du vill avsluta?\n" +"Alla ändringar kommer att gÃ¥ förlorade!" -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Samplingsnamn" +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Linjär" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "Läser in..." -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Modulinformation" +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" -#: app/module-info.c:164 -msgid "Songname:" -msgstr "LÃ¥tnamn:" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Frekvenser:" +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "ProTracker-läge" +#: app/gui.c:2400 +#, fuzzy +msgid "Extended pattern (*.xp)" +msgstr "Redigerat mönster" -#: app/module-info.c:395 +#: app/gui.c:2408 #, c-format msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" msgstr "" -"Oanvända mönster: %d (använda: %d)\n" -"Oanvända instrument: %d (använda: %d)\n" -"\n" -"Töm oanvända och sortera om spellistan?\n" - -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" -msgstr "Infoga det mönster som redigeras" -#: app/playlist.c:535 -msgid "Remove current playlist entry" -msgstr "Ta bort den aktuella spellisteposten" - -#: app/playlist.c:543 -msgid "Add + Cpy" -msgstr "Lägg till + Kopiera" +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Läs in modul" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" msgstr "" -"Lägg till ett ledigt mönster efter den aktuella positionen, och kopiera det " -"aktuella mönstret till det" - -#: app/playlist.c:548 -msgid "Add Free" -msgstr "Lägg till ledigt" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" -msgstr "Lägg till ett ledigt mönster efter den aktuella positionen" +#: app/gui.c:2434 +msgid "Save Module" +msgstr "Spara modul" -#: app/playlist.c:560 +#: app/gui.c:2434 #, fuzzy -msgid "Len" -msgstr "Längd" +msgid "Save the current module" +msgstr "Spara aktuellt mönster..." -#: app/playlist.c:574 -msgid "Song length" -msgstr "LÃ¥tlängd" +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Rendera WAV" -#: app/playlist.c:580 +#: app/gui.c:2436 #, fuzzy -msgid "Rstrt" -msgstr "Instrument" +msgid "Render the current module as WAV file" +msgstr "Rendera modul som WAV..." -#: app/playlist.c:593 -msgid "Song restart position" -msgstr "LÃ¥tomstartsposition" +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "Spara XM utan samplingar..." -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" -msgstr "" -"En katalog med namnet \".soundtracker\" har skapats i din\n" -"hemkatalog för lagring av konfigurationsfiler.\n" +#: app/gui.c:2439 +msgid "Load current pattern..." +msgstr "Läs in aktuellt mönster..." -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Ingen slinga" +#: app/gui.c:2440 +msgid "Save current pattern..." +msgstr "Spara aktuellt mönster..." -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "PingPong" +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Spela lÃ¥t" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8-bitars" +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Spela mönster" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16-bitars" +#: app/gui.c:2525 +msgid "Play From Cursor" +msgstr "" -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Samplingsredigerare" - -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Volym" +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "Spela lÃ¥t" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Panorering" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Stoppa" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Finjustera" +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Markering:" +# Antar att detta är kort för "Pattern". +#: app/gui.c:2562 +msgid "Pat" +msgstr "Mön" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Ingen" +#: app/gui.c:2568 +msgid "Edited pattern" +msgstr "Redigerat mönster" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Alla" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "" +"DÃ¥ detta är aktiverat ändrar inte bläddring i spellistan det redigerade " +"mönstret." -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Längd:" +#: app/gui.c:2583 +msgid "Pattern Length" +msgstr "Mönsterlängd" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Ställ in som slinga" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "Rel.not" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Antal kanaler:" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Läs in sampling..." +# Osäker. +#: app/gui.c:2632 +msgid "Set preferred accidental type" +msgstr "Ställ in föredragen tillfällighetstyp" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "Spara WAV..." +#: app/gui.c:2638 +msgid "Measure" +msgstr "Mät" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "Spara omrÃ¥de som WAV..." +#: app/gui.c:2639 +msgid "Enable row highlighting" +msgstr "Aktivera radfärgmarkering" -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "Spara WAV" +#: app/gui.c:2660 +msgid "Other..." +msgstr "Annat..." -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "Spara omrÃ¥de" +#: app/gui.c:2687 +msgid "Change effect column editing direction" +msgstr "Ändra riktning för effektkolumnredigering" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Monitor" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" +msgstr "Global förstärkning" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Volymramp" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "" -#: app/sample-editor.c:425 -#, fuzzy -msgid "Trim" -msgstr "Tremor" +# Osäker. +#: app/gui.c:2740 +msgid "Pitchbend" +msgstr "Pitchbend" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Zooma till markering" +# Osäker. +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "Ã…terställ pitchbend till sitt normala värde" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Visa alla" +#: app/gui.c:2760 +msgid "Editing" +msgstr "Redigering" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Zooma in (+50%)" +#: app/gui.c:2767 +msgid "Octave" +msgstr "Oktav" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Zooma ut (-50%)" +#: app/gui.c:2776 +msgid "Jump" +msgstr "Hopp" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Baklänges" +#: app/gui.c:2785 +msgid "Instr" +msgstr "Instrument" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Klipp ut" +#: app/gui.c:2801 +msgid "Sample" +msgstr "Sampling" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Ta bort" +#: app/gui.c:2827 +msgid "dB" +msgstr "" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Kopiera" +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "Välkommen till SoundTracker!" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Klistra in" +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "Töm sampling" +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Kan inte öppna fil." -#: app/sample-editor.c:500 +#: app/instrument-editor.c:209 #, fuzzy -msgid "Crop" -msgstr "Kopiera" - -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(ingen markering)" +msgid "Saving instrument failed." +msgstr "Sparar instrument..." -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "Slut pÃ¥ minne för kopieringsbuffert.\n" +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "Aktuellt instrument" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sinus" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." -msgstr "Slut pÃ¥ minne för samplingsdata." +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Fyrkant" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Läsfel." +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "SÃ¥gtand ner" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Läs in stereosampling" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "SÃ¥gtand upp" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" msgstr "" -"Du har valt en stereosampling!\n" -"(SoundTracker kan bara hantera monosamplingar!)\n" -"\n" -"Välj vilken kanal som ska läsas in:" - -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Vänster" -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Mixa" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Instrumentredigerare" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Höger" +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Volymenvelop" -#: app/sample-editor.c:1575 -msgid "Signed" -msgstr "Med tecken" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Panoreringsenvelop" -#: app/sample-editor.c:1575 -msgid "Unsigned" -msgstr "Utan tecken" +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Läs in instrument" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "Little-Endian" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" -#: app/sample-editor.c:1576 -msgid "Big-Endian" -msgstr "Big-Endian" +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Spara instrument" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "Mono" +#: app/instrument-editor.c:297 +#, fuzzy +msgid "Save the current instrument" +msgstr "Aktuellt instrument" -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "Stereo" +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "Läs in XI" -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "Läs in rÃ¥ sampling" +# src/menus.c:280 +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "Spara XI" -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" -msgstr "" -"Du har valt en sampling som inte är i ett känt\n" -"format. Du kan läsa in den rÃ¥a datan nu.\n" -"\n" -"Välj ett format:" +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "Volymglidning upp" -#: app/sample-editor.c:1623 -msgid "Word format:" -msgstr "Ordformat:" +#: app/instrument-editor.c:344 +#, fuzzy +msgid "Vibrato:" +msgstr "Vibrato" -#: app/sample-editor.c:1670 -msgid "Sampling Rate:" -msgstr "Samplingsfrekvens:" +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "" -# Varför ska detta översättas? -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" - -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "OK" +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "Vib.hast." -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Kan inte läsa sampling" +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "Vib.djup" -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." -msgstr "Samplingen är för lÃ¥ng för den aktuella mixermodulen. Läser in ändÃ¥." +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "Vib.svep" -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Kan bara hantera 8- och 16-bitarssamplingar med upp till tvÃ¥ kanaler" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Not:" -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "Välj region först." +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "Initiera" -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "PÃ¥börja sampling" +#: app/keys.c:58 +msgid "" +msgstr "" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "Ingen samplingsdrivrutin tillgänglig" +#: app/keys.c:134 +msgid "KOFF" +msgstr "" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Samplingsfönster" +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "" +"Tangenten som infogar den speciella avtangentnoten för FastTracker-moduler." -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" -msgstr "Slut pÃ¥ minne vid sampling!" +#: app/keys.c:136 +msgid "JMP+" +msgstr "" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "Tangenten som ökar \"hopp\"-värdet." -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/keys.c:138 +msgid "JMP-" msgstr "" -"Inlästa samplingen är för lÃ¥ng för den aktuella mixermodulen. Använder den " -"ändÃ¥." -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Normalisera" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "Tangenten som minskar \"hopp\"-värdet." -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Kör" +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Spela lÃ¥t" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Volymrampning" +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Sparar modul..." -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Utför linjär volymborttoning pÃ¥ markering" +#: app/keys.c:142 +msgid "RecMod" +msgstr "" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Vänster [%]:" +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Spelar mönster..." -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "H" +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "Spela mönster" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "D" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Spela mönster" -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Höger [%]:" +#: app/keys.c:146 +msgid "RecPat" +msgstr "" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Spelar mönster..." + +#: app/keys.c:148 +msgid "PlayCur" msgstr "" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/keys.c:148 +msgid "Play module from cursor." msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/keys.c:150 +msgid "RecCur" msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Spelar mönster..." + +#: app/keys.c:152 +#, fuzzy +msgid "PlayRow" +msgstr "Spela lÃ¥t" + +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Läs in aktuellt mönster..." + +#: app/keys.c:154 +msgid "PlayBlk" msgstr "" -#: app/tips-dialog.c:50 +#: app/keys.c:154 +#, fuzzy +msgid "Play selected block." +msgstr "Lär vald tangent" + +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Tangenter för övre oktav..." + +#: app/keys.c:167 msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." msgstr "" -"Välkommen till SoundTracker!\n" -"\n" -"Om du inte har tidigare erfarenhet av denna typ av program vill du\n" -"kanske skaffa en del XM- eller MOD-filer först och leka med dem." +"Detta är tangenterna pÃ¥ den övre delen av tangentbordet. C-tangenten är " +"normalt tangenten till höger om tabulatorsteget. Resten av tangenterna, " +"inklusive taltangenterna ovanför, är arrangerade pÃ¥ pianoklaviatursvis." + +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Tangenter för lägre oktav..." -#: app/tips-dialog.c:55 +#: app/keys.c:173 msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." msgstr "" -"Du kan göra SoundTrackers redigeringsläge mer känsligt för\n" -"tangentbordsinmatning genom att minska buffertstorleken i\n" -"\"Redigering\"-objektet i ljudkonfigurationen." +"Detta är tangenterna pÃ¥ den nedre delen av tangentbordet. C-tangenten är " +"normalt tangenten till vänster om skifttangenten. Resten av tangenterna, " +"inklusive raden ovanför, är arrangerade pÃ¥ pianoklaviatursvis." + +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "Andra tangenter..." + +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Diverse andra tangenter" + +#: app/keys.c:578 +msgid "Function" +msgstr "Funktion" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "Tilldelning" + +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Tangentbordskonfiguration" + +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Tangentgruppsförklaring" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Tangentförklaring" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Modifierare:" + +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "Lär vald tangent" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "Lär alla tangenter" -#: app/tips-dialog.c:59 +#: app/keys.c:702 msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +"Please press the desired key combination!\n" +"Click into left list to cancel" msgstr "" -"Du kan justera slingpunkterna i samplingsredigeraren genom att hÃ¥lla\n" -"nere Skift och använda vänster och höger musknapp.\n" +"Tryck den önskade tangentkombinationen!\n" +"Klicka i den vänstra listan för att avbryta" + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "KA%02d" -#: app/tips-dialog.c:62 +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "Snabbhoppa till kanal %d" + +#: app/keys.c:1028 msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." msgstr "" -"Om du vill veta mer om tracking och hur de olika kommandona fungerar\n" -"kan du ta en titt pÃ¥ http://www.united-trackers.org/" +"Automatisk tangentbordskonfiguration misslyckades.\n" +"Välj tangentbordskonfigurationsdialogen i\n" +"Inställningar-menyn." -#: app/tips-dialog.c:65 +#: app/menubar.c:115 +#, c-format msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" msgstr "" -"Du kan tilldela samplingar frÃ¥n ett instrument till de enskilda\n" -"tangenterna genom att aktivera dess sampling och sedan klicka pÃ¥\n" -"tangentbordet i intrumentredigerarsidan." -#: app/tips-dialog.c:69 +#: app/menubar.c:126 msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." msgstr "" -"Är din markör fast i ett talinmatningsfält?\n" -"Tryck bara Retur eller Tabb för att frigöra!" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "Dagens SoundTracker-tips" +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"Är du säker pÃ¥ att du vill göra detta?\n" +"Alla ändringar kommer att gÃ¥ förlorade!" -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "FöregÃ¥ende tips" +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "" +"Heltalsmixer, ingen interpolation, inga filter, maximal samplingslängd 1 MB" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Nästa tips" +#: app/mixers/kbfloat.c:838 +#, fuzzy +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" +"Heltalsmixer, ingen interpolation, inga filter, maximal samplingslängd 1 MB" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Visa tips nästa gÃ¥ng" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "Arpeggio" +#: app/module-info.c:63 app/module-info.c:64 +#, fuzzy +msgid "Cyclic" +msgstr "avklicka" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "Porta upp" +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "Porta ned" +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" -msgstr "Tonporta" +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "Vibrato" +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" -msgstr "Tonporta + volymglidning" +#: app/module-info.c:481 +msgid "Period" +msgstr "" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" -msgstr "Vibrato + volymglidning" +#: app/module-info.c:484 +msgid "s" +msgstr "" -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "Tremolo" +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Not:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Instrumentnamn" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#smpl" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Samplingsnamn" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "Linjär" + +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Modulinformation" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "LÃ¥tnamn:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Frekvenser:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "ProTracker-läge" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Instrumentredigerare" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Aktuellt instrument" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Spara instrument" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "Byt 1 <-> 2" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Finjustera" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "Rel.not" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" +"Oanvända mönster: %d (använda: %d)\n" +"Oanvända instrument: %d (använda: %d)\n" +"\n" +"Töm oanvända och sortera om spellistan?\n" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "Infoga det mönster som redigeras" + +#: app/playlist.c:511 +msgid "Remove current playlist entry" +msgstr "Ta bort den aktuella spellisteposten" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "Lägg till + Kopiera" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" +"Lägg till ett ledigt mönster efter den aktuella positionen, och kopiera det " +"aktuella mönstret till det" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "Lägg till ledigt" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "Lägg till ett ledigt mönster efter den aktuella positionen" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Längd" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "LÃ¥tlängd" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Instrument" + +#: app/playlist.c:567 +msgid "Song restart position" +msgstr "LÃ¥tomstartsposition" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"En katalog med namnet \".soundtracker\" har skapats i din\n" +"hemkatalog för lagring av konfigurationsfiler.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Ingen slinga" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "PingPong" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8-bitars" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16-bitars" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Samplingsredigerare" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "Volym" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Panorering" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Markering:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "Ingen" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Alla" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Längd:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "Ställ in som slinga" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Läs in sampling" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "Spara XM utan samplingar..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "Spara sampling" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "Spara XM utan samplingar..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "Spara omrÃ¥de som WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "Spara WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "Spara omrÃ¥de" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Volymramp" + +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "Tremor" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "Zooma till markering" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "Visa alla" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "Zooma in (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "Zooma ut (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Baklänges" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Klipp ut" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Ta bort" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Kopiera" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Klistra in" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "Töm sampling" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Kopiera" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(ingen markering)" + +#: app/sample-editor.c:1279 +#, fuzzy +msgid "Out of memory for copybuffer." +msgstr "Slut pÃ¥ minne för kopieringsbuffert.\n" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Mixa" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Vänster" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Höger" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d samplingsvärden)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "Slut pÃ¥ minne för samplingsdata." + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "Läsfel." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"Du har valt en stereosampling!\n" +"(SoundTracker kan bara hantera monosamplingar!)\n" +"\n" +"Välj vilken kanal som ska läsas in:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "PÃ¥börja sampling" + +#: app/sample-editor.c:1756 +msgid "Signed" +msgstr "Med tecken" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "Utan tecken" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "Little-Endian" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "Big-Endian" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "Läs in rÃ¥ sampling" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"Du har valt en sampling som inte är i ett känt\n" +"format. Du kan läsa in den rÃ¥a datan nu.\n" +"\n" +"Välj ett format:" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "Ordformat:" + +#: app/sample-editor.c:1829 +msgid "Sampling Rate:" +msgstr "Samplingsfrekvens:" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Kan inte läsa sampling" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "Samplingen är för lÃ¥ng för den aktuella mixermodulen. Läser in ändÃ¥." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "Kan bara hantera 8- och 16-bitarssamplingar med upp till tvÃ¥ kanaler" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Kan inte öppna fil för skrivning." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "Välj region först." + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "Ingen samplingsdrivrutin tillgänglig" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Samplingsfönster" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "Töm _alla" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Samplingsfrekvens" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "Slut pÃ¥ minne vid sampling!" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"Du har valt en stereosampling!\n" +"(SoundTracker kan bara hantera monosamplingar!)\n" +"\n" +"Välj vilken kanal som ska läsas in:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Läs in stereosampling" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"Inlästa samplingen är för lÃ¥ng för den aktuella mixermodulen. Använder den " +"ändÃ¥." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Volymrampning" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Normalisera" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "Utför linjär volymborttoning pÃ¥ markering" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Vänster [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "H" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "D" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Höger [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"Välkommen till SoundTracker!\n" +"\n" +"Om du inte har tidigare erfarenhet av denna typ av program vill du\n" +"kanske skaffa en del XM- eller MOD-filer först och leka med dem." + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"Du kan göra SoundTrackers redigeringsläge mer känsligt för\n" +"tangentbordsinmatning genom att minska buffertstorleken i\n" +"\"Redigering\"-objektet i ljudkonfigurationen." + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"Du kan justera slingpunkterna i samplingsredigeraren genom att hÃ¥lla\n" +"nere Skift och använda vänster och höger musknapp.\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"Om du vill veta mer om tracking och hur de olika kommandona fungerar\n" +"kan du ta en titt pÃ¥ http://www.united-trackers.org/" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Du kan tilldela samplingar frÃ¥n ett instrument till de enskilda\n" +"tangenterna genom att aktivera dess sampling och sedan klicka pÃ¥\n" +"tangentbordet i intrumentredigerarsidan." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" +"Är din markör fast i ett talinmatningsfält?\n" +"Tryck bara Retur eller Tabb för att frigöra!" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "FöregÃ¥ende tips" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "Nästa tips" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "Visa tips nästa gÃ¥ng" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "Dagens SoundTracker-tips" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "Arpeggio" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "Porta upp" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "Porta ned" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "Tonporta" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "Vibrato" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "Tonporta + volymglidning" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "Vibrato + volymglidning" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "Tremolo" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "Ställ in panorering" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Sampling sparad." + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "Ställ in volym" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Positionshoppa" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "Mönsterbrytning" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "Ställ in tempo/taktslag per minut" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "Ställ in global volym" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "Global volymglidning" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "Tangent av" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "Ställ in envelopposition" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "Panoreringsglidning" + +# src/header_stuff.c:479 +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "LP-filterresonans" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "Fleromtriggningsnot" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "Tremor" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "LP-filterflank" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "Finporta upp" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "Finporta ned" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "Ställ in glisskontroll" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "Ställ in vibratokontroll" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "Ställ in finjustering" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "Mönster" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "Ställ in tremolokontroll" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "Omtriggningsnot" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "Fin volymglidning upp" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "Fin volymglidning ned" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "Noturklipp" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "Notfördöjning" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "Mönsterfördröjning" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "Volymglidning ned" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "Volymglidning upp" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "Ställ in vibratohastighet" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "Panoreringsglidning vänster" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "Panoreringsglidning höger" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "sinus" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "ramp ned" + +#: app/track-editor.c:203 +msgid "square" +msgstr "fyrkant" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +#, fuzzy +msgid "Extra fine porta up" +msgstr "Finporta upp" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "Finporta ned" + +#: app/track-editor.c:257 +msgid "None ]" +msgstr "Ingen ]" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Jazzredigering:" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Tracker" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "Typsnittslista" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "Lägg till typsnitt" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "Ta bort typsnitt" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "Tillämpa typsnitt" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "Välj typsnitt..." + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "Hel lÃ¥t" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "Alla mönster" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "Aktuellt mönster" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "Aktuellt spÃ¥r" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Aktuellt instrument" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "Alla instrument" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "Halvnot upp" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "Halvnot ned" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "Oktav upp" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "Oktav ned" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "Byt 1 <-> 2" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "Ändra 1 -> 2" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "Transponeringsverktyg" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "OmrÃ¥de för Ã¥tgärden:" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Nottransponering" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Instrumentbyte" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Instrument 1:" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Aktuellt instrument" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Instrument 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "Mönsterlängd utanför intervallet: %d.\n" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Fel vid inläsning av mönster." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Instrument inläst." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Instrumentbyte" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Panoreringsenvelop" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Panoreringsenvelop" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Panoreringsenvelop" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "Ogiltig vibratotyp %d, använder sinus.\n" + +#: app/xm.c:678 app/xm.c:1233 +#, fuzzy +msgid "Out of memory error!" +msgstr "Slut pÃ¥ minne för kopieringsbuffert." + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "Filen är inget XI-instrument." + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Instrument inläst." + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Panoreringsenvelop" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Panoreringsenvelop" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Instrument inläst." + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "Ogiltig vibratotyp %d, använder sinus.\n" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "Fel vid inläsning av mönster." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Kan inte öppna fil" + +#: app/xm.c:1215 +#, fuzzy +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" +"XM-huvudlängd != 276. Kanske en SoundTracker-modul frÃ¥n innan 0.0.12? :-)\n" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "Fel vid inläsning av mönster." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"Modulen innehÃ¥ller samplingar som är för lÃ¥nga för den aktuella mixern.\n" +"Största samplingslängden är %d." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "Inte FastTracker XM och inget MOD-format som stöds!" + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "Fel vid filläsning eller oväntat slut pÃ¥ filen" + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "Ogiltig version eller version som inte stöds av mönsterfil!" + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "Ogiltig mönsterlängd!" + +#: app/xm.c:1761 app/xm.c:1787 +msgid "Error during saving pattern!" +msgstr "Fel vid sparande av mönster!" + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "Anslut automatiskt" + +#: app/midi-settings.c:414 +msgid "Channel" +msgstr "Kanal" + +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "Klientnummer" + +#: app/midi-settings.c:434 +msgid "Port number" +msgstr "Portnummer" + +#: app/midi-settings.c:453 +msgid "Input" +msgstr "Inmatning" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "För framtida utveckling" + +#: app/midi-settings.c:468 +msgid "Output" +msgstr "Utmatning" + +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "FelsökningsnivÃ¥" + +#: app/midi-settings.c:492 +msgid "Misc" +msgstr "Div." + +#: app/midi-settings.c:532 +msgid "MIDI Configuration" +msgstr "MIDI-konfiguration" + +#: soundtracker.glade:10 +msgid "Pattern" +msgstr "Mönster" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "S_pÃ¥r" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_Döda noter" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "_Infoga spÃ¥r" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "_Ta bort spÃ¥r" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "Öka kommandovärde" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Minska kommandovärde" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "T_öm blockmärken" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "_Interpolera effekter" + +# Arkiv Arkiv Arkiv Arkiv Arkiv Arkiv Arkiv och inget annat än Arkiv! +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Arkiv" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_Öppna..." + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Spara so_m..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Spara modul som _WAV..." + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "Spara XM utan samplingar..." + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Modul" + +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "/modul/Töm _alla" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Töm endast _mönster" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Optimera modul" + +#: soundtracker.glade:346 +#, fuzzy +msgid "_Set Optimal Amplification" +msgstr "Global förstärkning" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Redigera" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "_Jazzredigeringsläge" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "Transp_onering..." + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "M_önster" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "S_pÃ¥r" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Markering" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "_Markeringsläge" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Transponera halvt tonsteg uppÃ¥t" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Transponera halvt tonsteg nedÃ¥t" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Transponera oktav uppÃ¥t" + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Transponera oktav nedÃ¥t" + +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "L_äs in mönster" + +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "_Spara aktuellt mönster" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_Sök oanvänt mönster" + +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Kopiera frÃ¥n aktuellt till oanvänt mönster" + +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "_Fäll ut aktuellt mönster" + +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "" + +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "T_öm oanvända mönster" + +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "_Packa mönster" + +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "K_rymp aktuellt mönster" + +#: soundtracker.glade:753 +msgid "_Expand Current Pattern" +msgstr "_Fäll ut aktuellt mönster" + +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" + +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" + +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "Aktuellt spÃ¥r" + +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "Aktuellt spÃ¥r" + +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "Aktuellt spÃ¥r" + +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Instrument" + +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "Läs in XI" + +# src/menus.c:280 +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "Spara XI" + +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_Töm aktuell" + +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_Ta bort oanvända instrument" + +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Inställningar" + +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Visa _oscilloskop" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "Ställ in panorering" +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Positionshoppa" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Tracker" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "Ställ in volym" +#: soundtracker.glade:913 +#, fuzzy +msgid "_Flicker-free Scrolling" +msgstr "_Flimmerfri rullning" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "Mönsterbrytning" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "_FöregÃ¥ende typsnitt" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "Ställ in tempo/taktslag per minut" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "_Nästa typsnitt" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Ställ in global volym" +#: soundtracker.glade:944 +#, fuzzy +msgid "Change Preferred _Accidental Type" +msgstr "Ändra föredragen _tillfällighetstyp" -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "Global volymglidning" +#: soundtracker.glade:953 +#, fuzzy +msgid "Change Effect Column _Editing Direction" +msgstr "Ändra riktning för effektkolumnredigering" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "Tangent av" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "Tangentbordskonfiguration" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "Ställ in envelopposition" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "Ljudkonfiguration" -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "Panoreringsglidning" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "Konfiguration av användargränssnitt" -# src/header_stuff.c:479 -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "LP-filterresonans" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "MIDI-konfiguration" -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "Fleromtriggningsnot" +#: soundtracker.glade:1016 +#, fuzzy +msgid "_Disable Splash Screen" +msgstr "Inaktivera startbild" -#: app/track-editor.c:142 -msgid "Tremor" -msgstr "Tremor" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_Spara inställningar nu" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "LP-filterflank" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Spara inställningar vid a_vslut" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "Finporta upp" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_Hjälp" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "Finporta ned" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "_Om..." -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "Ställ in glisskontroll" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "Visa _tips..." -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "Ställ in vibratokontroll" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "_XM-effekter..." -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "Ställ in finjustering" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Spela lÃ¥t" -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Ställ in slingbörjan/slingslut" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Spela lÃ¥t" -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "Ställ in tremolokontroll" +# Osäker +#~ msgid "transport master" +#~ msgstr "transport-master" -#: app/track-editor.c:161 -msgid "Retrig note" -msgstr "Omtriggningsnot" +#~ msgid "SoundTracker Startup" +#~ msgstr "SoundTracker-uppstart" -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "Fin volymglidning upp" +#~ msgid "Vibrato Type:" +#~ msgstr "Vibratotyp:" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "Fin volymglidning ned" +#~ msgid "VolFade" +#~ msgstr "Volymborttoning" -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "Noturklipp" +#~ msgid "Set loop begin/loop" +#~ msgstr "Ställ in slingbörjan/slingslut" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "Notfördöjning" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Not:" -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "Mönsterfördröjning" +#~ msgid "Error while loading instruments." +#~ msgstr "Fel vid inläsning av instrument." -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "Volymglidning ned" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "Observera att ESD-utmatning är oanvändbart i\n" +#~ "interaktivt läge pÃ¥ grund av den latens som\n" +#~ "tillkommer genom ESD. Använd OSS- eller ALSA-\n" +#~ "utmatningsinsticksmodulerna för seriöst arbete." -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "Volymglidning upp" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Kunde inte ansluta till ESD för ljuduppspelning:\n" +#~ "%s" -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "Ställ in vibratohastighet" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "" +#~ "Dessa ändringar kommer inte att börja gälla förrän du börjar om att " +#~ "sampla." -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "Panoreringsglidning vänster" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Instrumentbyte" -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "Panoreringsglidning höger" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "%s: Ljudkodning som krävs stöds inte.\n" -#: app/track-editor.c:184 -msgid "sine" -msgstr "sinus" +#~ msgid "%s: %s" +#~ msgstr "%s: %s" -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "ramp ned" +#~ msgid "%s: Cannot play (%s)" +#~ msgstr "%s: Kan inte spela (%s)" -#: app/track-editor.c:186 -msgid "square" -msgstr "fyrkant" +#~ msgid "%s: Cannot handle %dHz (%s)" +#~ msgstr "%s: Kan inte hantera %d Hz (%s)" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, c-format -msgid "None ]" -msgstr "Ingen ]" +#~ msgid "%s: Cannot record (%s)" +#~ msgstr "%s: Kan inte spela in (%s)" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Jazzredigering:" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Okänd XI-version 0x%x\n" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Tracker" +#~ msgid "out_1" +#~ msgstr "ut_1" -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "Typsnittslista" +#~ msgid "out_2" +#~ msgstr "ut_2" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "Lägg till typsnitt" +#~ msgid "Monitor" +#~ msgstr "Monitor" -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "Ta bort typsnitt" +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#smpl" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "Tillämpa typsnitt" +#~ msgid "OK" +#~ msgstr "OK" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Upp" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Ner" +#~ msgid "Cancel" +#~ msgstr "Avbryt" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "Välj typsnitt..." +#~ msgid "(%d bytes)" +#~ msgstr "(%d byte)" -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "Hel lÃ¥t" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Beräknad ljudfördröjning: %f µs" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Alla mönster" +#~ msgid "ALSA card number:" +#~ msgstr "ALSA-kortnummer:" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "Aktuellt mönster" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Kunde inte öppna ALSA-enhet för ljudinläsning (kort: %d, enhet: %d):\n" +#~ "%s" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "Aktuellt spÃ¥r" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "De ljuduppspelningsparametrar som krävs stöds inte.\n" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Aktuellt instrument" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Kunde inte öppna ALSA-enhet för ljuduppspelning (kort: %d, enhet: %d):\n" +#~ "%s" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Alla instrument" +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "Utmatningskanalparametrar som krävs stöds inte.\n" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Halvnot upp" +#~ msgid "Alsa setup error.\n" +#~ msgstr "Alsa-konfigurationsfel.\n" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "Halvnot ned" +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "Kunde inte öppna %s för ljuduppspelning:\n" +#~ "%s" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "Oktav upp" +#~ msgid "soundtracker" +#~ msgstr "soundtracker" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "Oktav ned" +#~ msgid "Save Song" +#~ msgstr "Spara lÃ¥t" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "Byt 1 <-> 2" +#~ msgid "Yes" +#~ msgstr "Ja" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "Ändra 1 -> 2" +#~ msgid "No" +#~ msgstr "Nej" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "Transponeringsverktyg" +#~ msgid "Close" +#~ msgstr "Stäng" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "OmrÃ¥de för Ã¥tgärden:" +#~ msgid "No file selected." +#~ msgstr "Ingen fil vald." -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Nottransponering" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Är du säker pÃ¥ att du vill skriva över filen?" -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Instrumentbyte" +#~ msgid "Load XM..." +#~ msgstr "Läs in XM..." -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Instrument 1:" +#~ msgid "Save XM..." +#~ msgstr "Spara XM..." -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Aktuellt instrument" +#~ msgid "Save song as XM..." +#~ msgstr "Spara lÃ¥t som XM..." -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Instrument 2:" +#~ msgid "Load Instrument..." +#~ msgstr "Läs in instrument..." -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Mönsterlängd utanför intervallet: %d.\n" +#~ msgid "Save Instrument..." +#~ msgstr "Spara instrument..." -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "Filen är inget XI-instrument." +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "Tangentbordkonfigurationsfilen är trasig.\n" +#~ "Använd tangentbordskonfigurationsdialogen." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Okänd XI-version 0x%x\n" +#~ msgid "Ok" +#~ msgstr "Ok" -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "Ogiltig vibratotyp %d, använder sinus.\n" +#~ msgid "_Quit" +#~ msgstr "A_vsluta" -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "Fel vid inläsning av mönster." +#~ msgid "C_ut" +#~ msgstr "Klipp _ut" -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Kan inte öppna fil" +#~ msgid "_Copy" +#~ msgstr "_Kopiera" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Fel vid inläsning av instrument." +#~ msgid "_Paste" +#~ msgstr "Klistra _in" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"Modulen innehÃ¥ller samplingar som är för lÃ¥nga för den aktuella mixern.\n" -"Största samplingslängden är %d." +#~ msgid "P_aste" +#~ msgstr "Klistra _in" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "Inte FastTracker XM och inget MOD-format som stöds!" +#~ msgid "_Load XI..." +#~ msgstr "_Läs in XI..." -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "Fel vid filläsning eller oväntat slut pÃ¥ filen" +#~ msgid "_Save XI..." +#~ msgstr "_Spara XI..." -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "Ogiltig version eller version som inte stöds av mönsterfil!" +#~ msgid "Change effect column editing _direction" +#~ msgstr "Ändra _riktning för effektkolumnredigering" -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "Ogiltig mönsterlängd!" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "_Tangentbordskonfiguration..." -#: app/xm.c:1468 -msgid "Error during saving pattern!" -msgstr "Fel vid sparande av mönster!" +#~ msgid "_Audio Configuration..." +#~ msgstr "_Ljudkonfiguration..." -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "Anslut automatiskt" +#~ msgid "_GUI Configuration..." +#~ msgstr "Konfiguration av användar_gränssnitt..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -msgid "Channel" -msgstr "Kanal" +#~ msgid "_MIDI Configuration..." +#~ msgstr "_MIDI-konfiguration..." -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "Klientnummer" +#~ msgid "Load Sample..." +#~ msgstr "Läs in sampling..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" -msgstr "Portnummer" +#~ msgid "Save WAV..." +#~ msgstr "Spara WAV..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -msgid "Input" -msgstr "Inmatning" +# Varför ska detta översättas? +#~ msgid "8363" +#~ msgstr "8363" -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "För framtida utveckling" +#~ msgid "Execute" +#~ msgstr "Kör" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -msgid "Output" -msgstr "Utmatning" +#~ msgid "Apply" +#~ msgstr "Verkställ" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "FelsökningsnivÃ¥" +#~ msgid "Drivers" +#~ msgstr "Drivrutiner" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -msgid "Misc" -msgstr "Div." +#~ msgid "Up" +#~ msgstr "Upp" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -msgid "MIDI Configuration" -msgstr "MIDI-konfiguration" +#~ msgid "Down" +#~ msgstr "Ner" #~ msgid "" #~ "The pattern is too long for expanding.\n" @@ -2135,9 +3745,6 @@ #~ "En del data pÃ¥ slutet av mönstret kommer att gÃ¥ förlorade. Vill du " #~ "fortsätta ändÃ¥?" -#~ msgid "Pattern" -#~ msgstr "Mönster" - # Osäker #~ msgid "_Accidentals" #~ msgstr "_Tillfälligheter" @@ -2146,18 +3753,6 @@ #~ msgid "# _Accidentals" #~ msgstr "Antal _tillfälligheter" -#~ msgid "%s: Cannot handle %d Hz (%s)" -#~ msgstr "%s: Kan inte hantera %d Hz (%s)" - -#~ msgid "Out of memory for copybuffer." -#~ msgstr "Slut pÃ¥ minne för kopieringsbuffert." - -#~ msgid "Sampling Rate" -#~ msgstr "Samplingsfrekvens" - -#~ msgid "Channels" -#~ msgstr "Kanaler" - #~ msgid "Misc." #~ msgstr "Div." @@ -2215,9 +3810,6 @@ #~ msgid "/_Module" #~ msgstr "/_Modul" -#~ msgid "/Module/Clear _All" -#~ msgstr "/modul/Töm _alla" - #~ msgid "/Module/Clear _Patterns Only" #~ msgstr "/Modul/Töm endast _mönster" @@ -2382,9 +3974,3 @@ #~ msgid "Nothing to save." #~ msgstr "Inget att spara." - -#~ msgid "" -#~ "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n" -#~ msgstr "" -#~ "XM-huvudlängd != 276. Kanske en SoundTracker-modul frÃ¥n innan " -#~ "0.0.12? :-)\n" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/tr.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/tr.gmo differ diff -Nru soundtracker-0.6.8/po/tr.po soundtracker-1.0.2~pre2/po/tr.po --- soundtracker-0.6.8/po/tr.po 2006-02-25 13:25:08.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/tr.po 2020-05-27 18:54:29.000000000 +0000 @@ -6,15 +6,23 @@ msgstr "" "Project-Id-Version: soundtracker 0.6.7\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2004-06-14 11:48+0200\n" "Last-Translator: Aysun Kıran \n" "Language-Team: Turkish \n" +"Language: tr\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "Kayıttan yürütme çıkışı" @@ -22,2164 +30,3766 @@ msgid "Editing Output" msgstr "Düzenleme Çıkışı" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Örnekleme" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "Sürücü Birimi" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "Karıştırıcı Birimi" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Tanım" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "Ses Yapılandırması" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Sürücüler" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Karıştırıcılar" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Kapat" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d bayt)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Tahmin Edilen Ses Gecikmesi: %f mikrosaniye" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "_XM Etkileri..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Ä°zci Sıklığı" + +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" msgstr "" -"Yürütmeye yeniden baÅŸlayıncaya kadar bu deÄŸiÅŸiklikler etkili olmayacaktır." -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Çözünürlük" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Kanallar:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Sıklık[Hz]:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines" +msgstr "Satır vurgulamasını etkinleÅŸtir " -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Arabellik Boyutu:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines highlighting" +msgstr "Satır vurgulamasını etkinleÅŸtir " -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "ALSA kart numarası:" - -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "ALSA aygıt numarası:" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines" +msgstr "Satır vurgulamasını etkinleÅŸtir " -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" -msgstr "" -"Ses giriÅŸi için ALSA aygıtı açılamadı (kart:%d, aygıt:%d):\n" -"%s" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines highlighting" +msgstr "Satır vurgulamasını etkinleÅŸtir " -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "Gereken ses çıkışı desteklenmiyor.\n" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Seçim:" -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "Gereken ses çıkış deÄŸiÅŸtirgeleri desteklenmiyor.\n" +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Ä°zci Sıklığı" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Kestirilen ses gecikmesi:%f milisaniye" +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" msgstr "" -"Ses çıkışı için ALSA aygıtı açılamadı (kart:%d, aygıt:%d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "Mecburi çıkış-kanalı deÄŸiÅŸtirgeleri desteklenmiyor.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "Sil" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "ALSA kanalı hazırlanamıyor.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "Sil" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "Alsa kurma hatası.\n" +#: app/colors.c:49 +#, fuzzy +msgid "Channel numbers, loops" +msgstr "Kanallar:" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -"ESD çıkışının ESD tarafından eklenen\n" -" gecikme süresi nedeniyle etkileÅŸimli kipte\n" -" kullanılamadığına dikkat edin. Ciddi iÅŸler için OSS ya da ALSA çıkışı fiÅŸli " -"kabloları\n" -" kullanın." -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -"Ses çıkışı için ESD'ye baÄŸlanamadı:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "ayarlar yok (henüz), üzgünüz!" +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" +msgstr "" -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Dosya yazım için açılamıyor." +#: app/colors.c:51 +msgid "Cursor editing" +msgstr "" -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" msgstr "" -"Örneklendirme yeniden baÅŸlayıncaya kadar bu deÄŸiÅŸiklikler etkili " -"olmayacaktır." -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "GiriÅŸ Aygıtı (örn. '/dev/dsp):" +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "Seçim oranı" -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" msgstr "" -"Örnekleme için %s açılamadı:\n" -"%s" - -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d örnekler)" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "Çıkış aygıtı (örn. '/dev/dsp'):" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "Åžarkıyı yeniden baÅŸlatma konumu" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:53 +msgid "Mixer position indicator" msgstr "" -"Ses çıkışı için %s açılamadı:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" -msgstr "taşıma ustası" +#: app/colors.c:54 +msgid "Zero line" +msgstr "" -#: app/drivers/jack-output.c:259 -msgid "declick" -msgstr "tıklamayı geri al" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" -msgstr "%d çerçeveleriyle %d Hz'de çalışıyor" +#: app/colors.c:56 +msgid "White keys" +msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" -msgstr "FiÅŸ sunucusu çalışmıyor mu?" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "" -# TODO: this should be improved, both error handling and saving the string -# I'm probably not taking advantage of libjack -#: app/drivers/jack-output.c:327 -#, c-format -msgid "soundtracker" -msgstr "sestakipçisi" +#: app/colors.c:57 +msgid "Black keys" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "dış_1" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" +msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "dış_2" +#: app/colors.c:58 +msgid "White keys pressed" +msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" -msgstr "Çıkış aygıtı (örn. '/dev/ses'):" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: Okunamıyor (%s)" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: %dHz (%s) iÅŸlenemiyor" +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s: Gereken ses kodlaması desteklenmiyor.\n" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 -#, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: Blok boyutu ayarlanamıyor (%s)" +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" -msgstr "GiriÅŸ aygıtı (örn. '/dev/ses'):" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: Kaydedilemiyor (%s)" +#: app/colors.c:395 +#, fuzzy, c-format +msgid "%s colors configuration" +msgstr "Klavye Yapılandırması" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Uzunluk" +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Ters" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Geçerli" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Kaydır" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "DeÄŸer" +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Ekle" +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" +msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Sil" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "ALSA aygıt numarası:" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" msgstr "" -"Graphical\n" -"Zarf\n" -"Düzenleyici\n" -"sadece içinde\n" -"GNOME Sürümü" - -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Devam ettir" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Nokta" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Döngü" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +#, fuzzy +msgid "Unable to set channels number" +msgstr "ALSA kanalı hazırlanamıyor.\n" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "BaÅŸlat" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Sonlandır" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr " Birimi Yükle" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr " Birimi Kaydet" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "WAV'ı Göster" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "Åžarkıyı Kaydet" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "ÖrneÄŸi Yükle" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "ÖrneÄŸi Kaydet" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Aygıtı Yükle" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "Aygıtı Kaydet" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:175 -msgid "File" -msgstr "Dosya" +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "Ä°ÅŸlem desteklenmiyor." +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d örnekler)" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Alanlar Sıklığı" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Ä°zci Sıklığı" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "GUI Yapılandırması" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "Onaltılı satır sayıları" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8 bit" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Altılı sayılar için büyük harfleri kullan" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16 bit" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" -msgstr "EÅŸzamansız (IT-biçemi) desen düzenleme" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "Tekli" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" -msgstr "Fxx komutu Tempo/BPM kaydırıcılarını günceller" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "Çiftli" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" -msgstr "Yükleme/kaydetmeden sonra izciye dönüştür" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "" +"Yürütmeye yeniden baÅŸlayıncaya kadar bu deÄŸiÅŸiklikler etkili olmayacaktır." -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" -msgstr "Çıkışta pencere geometrisini kaydet" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "" +"Örneklendirme yeniden baÅŸlayıncaya kadar bu deÄŸiÅŸiklikler etkili " +"olmayacaktır." -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" -msgstr "Nota adı olarak H yerine B kullan" +#: app/drivers/alsa1x.c:829 +msgid "Device:" +msgstr "" -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" msgstr "" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Alanlar arabelleÄŸi boyutu [MB]" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Çözünürlük" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Satır biçimini izle:" +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Kanallar:" -# gtk_window_set_transient_for(GTK_WINDOW(gui_splash_window), GTK_WINDOW(mainwindow)); -# (doesn't do anything on WindowMaker) -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." -msgstr "Hazır." +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Sıklık[Hz]:" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Åžarkı okunuyor..." +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Arabellik Boyutu:" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Desen okunuyor..." +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "Kanal Sayısı:" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Birim yükleniyor..." +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Kestirilen ses gecikmesi:%f milisaniye" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Birim yüklendi." +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." +msgstr "" -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Birim kaydediliyor..." +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" +msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Birim kaydedildi." +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "Örnek yükleniyor." +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Örnek yüklendi." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Örnek kaydediliyor..." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Örnek kaydedildi." +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "Aygıt yükleniyor..." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Aygıt yüklendi." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Aygıt kaydediliyor..." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Aygıt kaydedildi." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Åžarkı kaydediliyor..." +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "Desenleri yüklemede hata." -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "Åžarkı kaydedildi." +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Soru" +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "Evet" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "Hayır" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Ä°ptal" +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Uyarı" +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "Hata!" +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Tempo" +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" -msgstr "Satır vurgulama yapılandırması" +#: app/drivers/alsa1x.c:1328 +#, fuzzy +msgid "Unable to enable timestamping for playback" +msgstr "ALSA kanalı hazırlanamıyor.\n" -#: app/gui.c:301 -msgid "Highlight rows (major / minor):" -msgstr "Satırları vurgulama (büyük / küçük):" +#: app/drivers/alsa1x.c:1329 +#, fuzzy +msgid "Unable to enable timestamping for capture" +msgstr "ALSA kanalı hazırlanamıyor.\n" -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" -msgstr "" -"Tek sayılı desen satırları küçültmeden sonra kaybedilecek bilgileri " -"içeriyor. \n" -"Yine de devam etmek istiyor musunuz?" +#: app/drivers/alsa1x.c:1335 +#, fuzzy +msgid "Unable to set timestamp type for playback" +msgstr "ALSA kanalı hazırlanamıyor.\n" -#: app/gui.c:506 +#: app/drivers/alsa1x.c:1336 #, fuzzy -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" -msgstr "" -"Desen geniÅŸletilemeyecek kadar uzun.\n" -"Desenin sonunda bazı bilgiler kaybedilecek. yine de devam etmek istiyor " -"musunuz?" +msgid "Unable to set timestamp type for capture" +msgstr "ALSA kanalı hazırlanamıyor.\n" -# No file was actually selected. -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "Seçili dosya yok." +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" +msgstr "" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" msgstr "" -"Geçerli projeyi boÅŸaltmak istediÄŸinizden emin misiniz?\n" -"Bütün deÄŸiÅŸiklikler kaybedilecek!" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Dosyanın üstüne yazmak istediÄŸinizden emin misiniz?" +#: app/drivers/alsa1x.c:1352 +#, fuzzy +msgid "Unable to prepare playback" +msgstr "ALSA kanalı hazırlanamıyor.\n" -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "Desen dosyasını açmada hata!" +#: app/drivers/alsa1x.c:1353 +#, fuzzy +msgid "Unable to prepare capture" +msgstr "ALSA kanalı hazırlanamıyor.\n" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" msgstr "" -"Yüklenmekte olan desenin uzunluÄŸu birimdeki geçerli deseninkiyle uyuÅŸmuyor.\n" -"Geçerli desen uzunluÄŸunu deÄŸiÅŸtirmek ister misiniz?" -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "SoundTracker Açılışı" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" +msgstr "" -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "Yükleniyor..." +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "" -#: app/gui.c:1804 -msgid "Use SoundTracker!" -msgstr "SoundTracker'ı Kullan!" +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "ayarlar yok (henüz), üzgünüz!" -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "XM'yi Yükle..." - -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "XM'yi Kaydet..." +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Birimi WAV olarak göster..." +#: app/drivers/irix-output.c:178 +#, fuzzy +msgid "16 Bit output not supported." +msgstr "Ä°ÅŸlem desteklenmiyor." -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "XM'yi ÅŸarkı olarak kaydet..." +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "Ä°ÅŸlem desteklenmiyor." -#: app/gui.c:1872 -msgid "Load current pattern..." -msgstr "Geçerli deseni yükle..." +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." +msgstr "" +"Örnekleme için %s açılamadı:\n" +"%s" -#: app/gui.c:1874 -msgid "Save current pattern..." -msgstr "Geçerli deseni kaydet..." +#: app/drivers/oss.c:130 +#, fuzzy +msgid "OSS input: reading error" +msgstr "Aygıt DeÄŸiÅŸtirme" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Åžarkıyı Çal" +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Deseni Oku" +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Kestirilen ses gecikmesi:%f milisaniye" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Dur" +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d örnekler)" -#: app/gui.c:1973 -msgid "Pat" -msgstr "Pat" +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "GiriÅŸ Aygıtı (örn. '/dev/dsp):" -#: app/gui.c:1979 -msgid "Edited pattern" -msgstr "Düzenlenen desen" +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "Çıkış aygıtı (örn. '/dev/dsp'):" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" msgstr "" -"Devreye sokulduÄŸunda ÅŸarkı listesine göz atma düzenlenen deseni deÄŸiÅŸtirmez." -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Kanal Sayısı:" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "" -#: app/gui.c:2025 -msgid "Pattern Length" -msgstr "Örüntü UzunluÄŸu" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"Örnekleme için %s açılamadı:\n" +"%s" -#: app/gui.c:2060 -msgid "Set preferred accidental type" -msgstr "Tercih edilen yanlış türü sapta" +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "Gereken ses çıkışı desteklenmiyor.\n" -#: app/gui.c:2066 -msgid "Measure" -msgstr "Önlem" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" +msgstr "%d çerçeveleriyle %d Hz'de çalışıyor" -#: app/gui.c:2067 -msgid "Enable row highlighting" -msgstr "Satır vurgulamasını etkinleÅŸtir " +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "FiÅŸ sunucusu çalışmıyor mu?" -#: app/gui.c:2093 -msgid "Other..." -msgstr "DiÄŸer..." +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/gui.c:2129 -msgid "Change effect column editing direction" -msgstr "Yönü düzenleyen etki sütununu deÄŸiÅŸtir" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" -msgstr "Genel büyütme" +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" -msgstr "Perdekıvrımı" +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" -msgstr "Perdekıvrımrnı yeniden normal deÄŸerine ayarla" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "tıklamayı geri al" -#: app/gui.c:2216 -msgid "Editing" -msgstr "Düzenleme" +#: app/drivers/jack.c:610 +#, fuzzy +msgid "Jack server is not running or some error occured." +msgstr "FiÅŸ sunucusu çalışmıyor mu?" -#: app/gui.c:2223 -msgid "Octave" -msgstr "Oktav" +#: app/drivers/sdl-output.c:76 +#, fuzzy +msgid "Experimental SDL support." +msgstr "Ä°ÅŸlem desteklenmiyor." -#: app/gui.c:2232 -msgid "Jump" -msgstr "Atla" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "Çıkış aygıtı (örn. '/dev/ses'):" -#: app/gui.c:2241 -msgid "Instr" -msgstr "Instr" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Örnek" +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -# Status Bar -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "SoundTracker'a HoÅŸgeldiniz!" +#: app/drivers/sun-output.c:402 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "%s: %dHz (%s) iÅŸlenemiyor" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "%s: Gereken ses kodlaması desteklenmiyor.\n" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "VolSönüşüm" +#: app/drivers/sun-output.c:455 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "%s: Blok boyutu ayarlanamıyor (%s)" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "VibHız" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "VibDerinlik" +#: app/drivers/sun-input.c:77 +#, fuzzy +msgid "SUN input: reading error" +msgstr "Aygıt DeÄŸiÅŸtirme" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "VibTarama" +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Dosya açılamıyor." +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "GiriÅŸ aygıtı (örn. '/dev/ses'):" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sinüs" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Kare" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "AÅŸağı Testere" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "Yukarı Testere" +#: app/drivers/sun-input.c:273 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "%s: %dHz (%s) iÅŸlenemiyor" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Aygıt Düzenleyici" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "%s: Gereken ses kodlaması desteklenmiyor.\n" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Ses zarfı" +#: app/drivers/sun-input.c:332 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "%s: Blok boyutu ayarlanamıyor (%s)" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Gezdirme zarfı" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Uzunluk" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Aygıtı Yükle..." - -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "Aygıtı Kaydet..." +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Geçerli" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "XI'yı Yükle" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Kaydır" -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "XI'yi Kaydet" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "DeÄŸer" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Vibrato Türü:" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Ekle" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Not:" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "Sil" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "BaÅŸlat" +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"Graphical\n" +"Zarf\n" +"Düzenleyici\n" +"sadece içinde\n" +"GNOME Sürümü" -#: app/keys.c:57 -msgid "" -msgstr "" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Devam ettir" -# 3 fixed entries, -# 32 dynamically generated ones (see keys_generate_channel_explanations()), -# 1 NULL terminator -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "Hızlıİzci birimleri için özel tuÅŸkapalı notasını yerleÅŸtiren tuÅŸ" +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Nokta" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." -msgstr "\"atlama\" deÄŸerini artıran tuÅŸ." +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "Döngü" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." -msgstr "\"atlama\" deÄŸerini azaltan tuÅŸ." +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "BaÅŸlat" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "Ãœst Oktav TuÅŸları..." +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Sonlandır" -#: app/keys.c:146 +#: app/file-operations.c:127 +#, c-format msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" msgstr "" -"Bunlar klavyenin üst yarısındaki tuÅŸlardır. C tuÅŸu normalde TAB tuÅŸunun " -"sağına denk gelen tuÅŸtur. TuÅŸların geri kalanı, yukarı satırdaki sayı tuÅŸlar " -"da dahil olmak üzere bir piyano klavyesi düzeninde düzenlenmelidir." -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Alt Oktav TuÅŸları..." +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." +#: app/file-operations.c:245 +msgid "All files" msgstr "" -"Bunlar klavyenin alt yarısındaki tuÅŸlardır. C tuÅŸu normalde sol ÃœstKarakter " -"tuÅŸunun sağına denk gelen ilk karakter tuÅŸudur. TuÅŸların geri kalanı, yukarı " -"satır da dahil olmak üzere bir piyano klavyesi düzeninde düzenlenmelidir." -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "DiÄŸer TuÅŸlar..." +#: app/file-operations.c:388 +msgid "File" +msgstr "Dosya" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "ÇeÅŸitli baÅŸka tuÅŸlar" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/keys.c:513 -msgid "Function" -msgstr "Ä°ÅŸlev" +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Atama" +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "Karıştırıcılar" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Klavye Yapılandırması" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "GUI Yapılandırması" -# Explaining Text -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "TuÅŸ Grubu Açıklaması" +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Alanlar Sıklığı" -# Explaining Text -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "TuÅŸ Açıklaması" +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Ä°zci Sıklığı" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "DeÄŸiÅŸtiriciler:" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Onaltılı satır sayıları" -# Learn-Buttons -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Seçili tuÅŸu öğren" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Altılı sayılar için büyük harfleri kullan" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Bütün tuÅŸları öğren" +# 9 +#: app/gui-settings.c:343 +#, fuzzy +msgid "FT2-like volume column" +msgstr "Yukarı ince ses slaydı" -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" msgstr "" -"Lütfen istenen tuÅŸ bileÅŸimine basın!\n" -" Ä°ptal etmek için soldaki listeye tıklayın" - -# Create the buttons. -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Tamam" -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Uygula" - -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" msgstr "" -"Klavye yapılandırma dosyası bozuk.\n" -"Lütfen Klavye Yapılandırma iletiÅŸim kutusunu kullanın." -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" -msgstr "CH%02d" +#: app/gui-settings.c:361 +msgid "Decimal volume representation" +msgstr "" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" -msgstr "Kanal %d'ye hızlı atlama" +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" +msgstr "EÅŸzamansız (IT-biçemi) desen düzenleme" -# Automatic key configuration unsuccessful. Popup requester. -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." -msgstr "O" +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "" -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -"Bunu yapmak istediÄŸnizden emin misiniz?\n" -"Bütün deÄŸiÅŸiklikler kaybedilecek!" -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" msgstr "" -"Çıkmak istediÄŸinizden emin misiniz?\n" -"Bütün deÄŸiÅŸiklikler kaybedilecek." -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Aç..." +#: app/gui-settings.c:398 +msgid "Record precise timings" +msgstr "" -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "Farklı_kaydet..." +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "Birimi WAV olarak_kaydet..." +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "Fxx komutu Tempo/BPM kaydırıcılarını günceller" -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "XM'yi örnekler olmadan kaydet..." +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "_Bırak" +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "Yükleme/kaydetmeden sonra izciye dönüştür" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Tümünü_Temizle" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Sadece_Desenleri Temizle" +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" +msgstr "Çıkışta pencere geometrisini kaydet" -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Birimi en iyi ÅŸekilde kullan" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "Nota adı olarak H yerine B kullan" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "K_es" - -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Kopyala" - -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "_Yapıştır" +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Notaları sonlandır" +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." +msgstr "" -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "_Ä°zi yerleÅŸtir" +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Seçim:" -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "_Ä°zi sil" +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Alanlar arabelleÄŸi boyutu [MB]" -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Cmd deÄŸerini artırma" +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Örnek yüklendi." -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Cmd deÄŸerini azaltma" +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "" -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "_Ä°m kipi" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Düzenle" -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "B_lok imlerini Temizle" +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "" -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "_Etkileri ara deÄŸerle" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "" -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Yarım-nota yukarı deÄŸiÅŸtir" +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "" -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Yarım-nota aÅŸağı deÄŸiÅŸtir" +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Oktavı yukarıya " +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Satır biçimini izle:" -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Oktavı aÅŸağı deÄŸiÅŸtir" +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:526 -msgid "P_aste" -msgstr "Y_apıştır" +#: app/gui-settings.c:573 +#, fuzzy +msgid "Tracker colors configuration" +msgstr "Klavye Yapılandırması" -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "_Jazz Düzenleme Kipi" +# gtk_window_set_transient_for(GTK_WINDOW(gui_splash_window), GTK_WINDOW(mainwindow)); +# (doesn't do anything on WindowMaker) +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "Hazır." -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "" +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Åžarkı okunuyor..." -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "DeÄŸiÅŸt_irme..." - -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "_Desen" +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Desen okunuyor..." -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "_Ä°zle" +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "Birim yükleniyor..." -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "_Seçim" +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "Birim yüklendi." -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "_" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Birim kaydediliyor..." -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Geçerli olanı Kullanılmayan Desene Kopyala" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "Birim kaydedildi." -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "K_ullanılmayan Desenleri Temizle" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "Örnek yükleniyor." -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "_Desenleri Paketle" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Örnek yüklendi." -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "_Geçerli Deseni Kaydet" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Örnek kaydediliyor..." -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "D_eseni Yükle" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Örnek kaydedildi." -#: app/menubar.c:599 -msgid "Sh_rink Current Pattern" -msgstr "Ge_çerli Deseni Küçült" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "Aygıt yükleniyor..." -#: app/menubar.c:601 -msgid "_Expand Current Pattern" -msgstr "_Geçerli Deseni GeniÅŸlet" +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Aygıt yüklendi." -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" -msgstr "" +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Aygıt kaydediliyor..." -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" -msgstr "" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Aygıt kaydedildi." -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_XI'yi yükle..." +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Åžarkı kaydediliyor..." -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_XI'yi Kaydet..." +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "Åžarkı kaydedildi." -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "_Geçerli olanı Temizle " +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "Hata!" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Kullanılmayan Aygıtları Sil" +#: app/gui-subs.c:414 +msgid "Question" +msgstr "Soru" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "_TitreÅŸimsiz kaydırma" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "_Önceki yazıtipi" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" -#: app/menubar.c:642 -msgid "_Next font" -msgstr "_Sonraki yazıtipi" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" -msgstr "Tercih edilen_yanlış türü deÄŸiÅŸtir" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Uyarı" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" -msgstr "Yönü_düzenleyen etki sütununu deÄŸiÅŸtir" +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "GUI Yapılandırması" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Göster_Oscilloscopes" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "Satır vurgulama yapılandırması" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "_Ä°zci" +#: app/gui.c:260 +msgid "Highlight rows (major / minor):" +msgstr "Satırları vurgulama (büyük / küçük):" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "_Klavye Yapılandırması..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "_Ses Yapılandırması..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "_GUI Yapılandırması..." - -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "_MIDI Yapılandırması..." +#: app/gui.c:330 +msgid "" +msgstr "" -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "Sıçrama ekranı devre dışı" +#: app/gui.c:451 +#, fuzzy +msgid "Saving module failed" +msgstr "Birim kaydediliyor..." -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_Ayarları ÅŸimdi kaydet" +#: app/gui.c:535 +msgid "File output" +msgstr "" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "Çıkışta Ayarları_Kaydet" +#: app/gui.c:612 +#, fuzzy +msgid "Can't open file for writing" +msgstr "Dosya yazım için açılamıyor." -#: app/menubar.c:690 -msgid "_About..." -msgstr "_Hakkında..." +#: app/gui.c:618 +#, fuzzy +msgid "Can't change file ownership" +msgstr "Dosya yazım için açılamıyor." -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Ä°puçlarını_Göster..." +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "_XM Etkileri..." +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "" -#: app/menubar.c:704 -msgid "_File" -msgstr "_Dosya" +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" +"Tek sayılı desen satırları küçültmeden sonra kaybedilecek bilgileri " +"içeriyor. \n" +"Yine de devam etmek istiyor musunuz?" -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Birim" +#: app/gui.c:715 +#, fuzzy +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" +"Desen geniÅŸletilemeyecek kadar uzun.\n" +"Desenin sonunda bazı bilgiler kaybedilecek. yine de devam etmek istiyor " +"musunuz?" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Düzenle" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"Geçerli projeyi boÅŸaltmak istediÄŸinizden emin misiniz?\n" +"Bütün deÄŸiÅŸiklikler kaybedilecek!" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "_Aygıt" +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "Desen dosyasını açmada hata!" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "_Ayarlar" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" +msgstr "" +"Yüklenmekte olan desenin uzunluÄŸu birimdeki geçerli deseninkiyle uyuÅŸmuyor.\n" +"Geçerli desen uzunluÄŸunu deÄŸiÅŸtirmek ister misiniz?" -#: app/menubar.c:711 -msgid "_Help" -msgstr "_Yardım" +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "BaÅŸlat" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" -msgstr "" -"Tam sayılar karıştırıcısı, ara deÄŸerleme yok, en fazla örnek uzunluÄŸu 1M" +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "Yükleniyor..." -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Aygıt Adı" +#: app/gui.c:2195 +msgid "Use SoundTracker!" +msgstr "SoundTracker'ı Kullan!" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#smpl" +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"Çıkmak istediÄŸinizden emin misiniz?\n" +"Bütün deÄŸiÅŸiklikler kaybedilecek." -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Örnek Adı" +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" -#: app/module-info.c:117 -msgid "Linear" -msgstr "DoÄŸrusal" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "Yükleniyor..." -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Birim Bilgisi" +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Åžarkı adı:" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Sıklıklar:" +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "ProÄ°zci Kipi" +#: app/gui.c:2400 +#, fuzzy +msgid "Extended pattern (*.xp)" +msgstr "Düzenlenen desen" -#: app/module-info.c:395 +#: app/gui.c:2408 #, c-format msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" msgstr "" -"Kullanılmayan desenler:%d (kullanılan: %d)\n" -"Kullanılmayan aygıtlar: %d (kullanılan: %d)\n" -"\n" -"Kullanılmayanı temizle ve ÅŸarkı listesini yeniden düzenle?\n" - -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" -msgstr "Düzenlenmekte olan deseni yerleÅŸtir" -#: app/playlist.c:535 -msgid "Remove current playlist entry" -msgstr "Geçerli ÅŸarkı listesini kaldır" - -#: app/playlist.c:543 -msgid "Add + Cpy" -msgstr "Ekle+Kpy" +#: app/gui.c:2433 +msgid "Load Module" +msgstr " Birimi Yükle" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" msgstr "" -"Geçerli konumun arkasına boÅŸ bir desen ekle, ve geçerli deseni ona kopyala" - -#: app/playlist.c:548 -msgid "Add Free" -msgstr "BoÅŸ Ekle" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" -msgstr "Geçerli konumun arkasına boÅŸ bir desen ekle" +#: app/gui.c:2434 +msgid "Save Module" +msgstr " Birimi Kaydet" -#: app/playlist.c:560 +#: app/gui.c:2434 #, fuzzy -msgid "Len" -msgstr "Uzunluk" +msgid "Save the current module" +msgstr "Geçerli deseni kaydet..." -#: app/playlist.c:574 -msgid "Song length" -msgstr "Åžarkı uzunluÄŸu" +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "WAV'ı Göster" -#: app/playlist.c:580 +#: app/gui.c:2436 #, fuzzy -msgid "Rstrt" -msgstr "Instr" +msgid "Render the current module as WAV file" +msgstr "Birimi WAV olarak göster..." -#: app/playlist.c:593 -msgid "Song restart position" -msgstr "Åžarkıyı yeniden baÅŸlatma konumu" +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "XM'yi örnekler olmadan kaydet..." -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" -msgstr "" -" Yapılandırma dosyalarını depolamak için ana dizininizde\n" -"'.soundtracker' adlı bir dizin oluÅŸturuldu. \n" +#: app/gui.c:2439 +msgid "Load current pattern..." +msgstr "Geçerli deseni yükle..." -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Döngü yok" +#: app/gui.c:2440 +msgid "Save current pattern..." +msgstr "Geçerli deseni kaydet..." -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "PinPon" - -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8 bit" +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Åžarkıyı Çal" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16 bit" +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Deseni Oku" -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Örnek Düzenleyici" +#: app/gui.c:2525 +msgid "Play From Cursor" +msgstr "" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Ses" +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "Åžarkıyı Çal" -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Gezdirme" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Dur" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Ä°nce ayar" +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Seçim:" +#: app/gui.c:2562 +msgid "Pat" +msgstr "Pat" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Hiçbiri" +#: app/gui.c:2568 +msgid "Edited pattern" +msgstr "Düzenlenen desen" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Tümü" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "" +"Devreye sokulduÄŸunda ÅŸarkı listesine göz atma düzenlenen deseni deÄŸiÅŸtirmez." -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Uzunluk:" +#: app/gui.c:2583 +msgid "Pattern Length" +msgstr "Örüntü UzunluÄŸu" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Döngü olarak ayarla" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Tempo" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "RelNotası" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Kanal Sayısı:" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "ÖrneÄŸi Yükle..." +#: app/gui.c:2632 +msgid "Set preferred accidental type" +msgstr "Tercih edilen yanlış türü sapta" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "WAV'i Kaydet..." +#: app/gui.c:2638 +msgid "Measure" +msgstr "Önlem" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "Bölgeyi WAV olarak Kaydet" +#: app/gui.c:2639 +msgid "Enable row highlighting" +msgstr "Satır vurgulamasını etkinleÅŸtir " -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "WAV'i Kaydet" +#: app/gui.c:2660 +msgid "Other..." +msgstr "DiÄŸer..." -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "Bölgeyi Kaydet" +#: app/gui.c:2687 +msgid "Change effect column editing direction" +msgstr "Yönü düzenleyen etki sütununu deÄŸiÅŸtir" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Görüntü birimi" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" +msgstr "Genel büyütme" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Ses YokuÅŸu" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "" -# R -# S -#: app/sample-editor.c:425 -#, fuzzy -msgid "Trim" -msgstr "TitreÅŸim" +#: app/gui.c:2740 +msgid "Pitchbend" +msgstr "Perdekıvrımı" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Seçim oranı" +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "Perdekıvrımrnı yeniden normal deÄŸerine ayarla" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Tümünü göster" +#: app/gui.c:2760 +msgid "Editing" +msgstr "Düzenleme" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "YakınlaÅŸtır (+50%)" +#: app/gui.c:2767 +msgid "Octave" +msgstr "Oktav" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "UzaklaÅŸtır (-50%)" +#: app/gui.c:2776 +msgid "Jump" +msgstr "Atla" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Ters" +#: app/gui.c:2785 +msgid "Instr" +msgstr "Instr" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Kes" +#: app/gui.c:2801 +msgid "Sample" +msgstr "Örnek" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Kaldır" +#: app/gui.c:2827 +msgid "dB" +msgstr "" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Kopyala" +# Status Bar +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "SoundTracker'a HoÅŸgeldiniz!" -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Yapıştır" +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "ÖrneÄŸi Temizle" +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Dosya açılamıyor." -#: app/sample-editor.c:500 +#: app/instrument-editor.c:209 #, fuzzy -msgid "Crop" -msgstr "Kopyala" - -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(seçim yok)" +msgid "Saving instrument failed." +msgstr "Aygıt kaydediliyor..." -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "KopyaarabelleÄŸi için bellek yetersiz.\n" +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "Geçerli aygıt" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sinüs" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." -msgstr "Örnek bilgileri için bellek yetersiz." +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Kare" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Okumada hata." +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "AÅŸağı Testere" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Çiftli örneÄŸi Yükle" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "Yukarı Testere" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" msgstr "" -"Ä°kili bir örnek seçtiniz!\n" -"(SoundTracker sadece tekli örnekleri iÅŸleyebiliyor!)\n" -"\n" -"Lütfen yüklenecek kanalı seçin:" -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Sol" - -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Karıştır" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Aygıt Düzenleyici" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "SaÄŸ" +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Ses zarfı" -#: app/sample-editor.c:1575 -msgid "Signed" -msgstr "Ä°ÅŸaretli" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Gezdirme zarfı" -#: app/sample-editor.c:1575 -msgid "Unsigned" -msgstr "Ä°ÅŸaretsiz" +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Aygıtı Yükle" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "Küçük-Sonlandırıcı" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" -#: app/sample-editor.c:1576 -msgid "Big-Endian" -msgstr "Büyük-Sonlandırıcı" +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "Aygıtı Kaydet" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "Tekli" +#: app/instrument-editor.c:297 +#, fuzzy +msgid "Save the current instrument" +msgstr "Geçerli aygıt" -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "Çiftli" +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "XI'yı Yükle" -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "Ham örneÄŸi Yükle" +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "XI'yi Kaydet" -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" -msgstr "" -"Bilinen biçimde \n" -"olmayan bir örnek seçtiniz. Åžimdi ham bilgileri yükleyebilirsiniz.\n" -" \n" -"Lütfen bir biçim seçin:" +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "Yukarı ses slaydı" -#: app/sample-editor.c:1623 -msgid "Word format:" -msgstr "Sözcük biçimi:" +# 3 +#: app/instrument-editor.c:344 +#, fuzzy +msgid "Vibrato:" +msgstr "Vibrato" -#: app/sample-editor.c:1670 -msgid "Sampling Rate:" -msgstr "Örnekleme Hızı:" +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "" -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" - -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "Tamam" +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "VibHız" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Örnek okunamıyor" +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "VibDerinlik" -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." -msgstr "Örnek geçerli karıştırıcı birimi için fazla uzun. Yine de yükleniyor. " +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "VibTarama" -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Sadece ikiye kadar kanalı olan 8 ve 16 bit örnekler iÅŸlenebiliyor" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Not:" -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "Lütfen ilk olarak bölgeyi seçin." +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "BaÅŸlat" -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Örneklemeyi BaÅŸlat" +#: app/keys.c:58 +msgid "" +msgstr "" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "Örnekleme sürücüsü mevcut deÄŸil" +#: app/keys.c:134 +msgid "KOFF" +msgstr "" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Örnekleme Penceresi" +# 3 fixed entries, +# 32 dynamically generated ones (see keys_generate_channel_explanations()), +# 1 NULL terminator +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "Hızlıİzci birimleri için özel tuÅŸkapalı notasını yerleÅŸtiren tuÅŸ" -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" -msgstr "Örneklemede bellek yetersiz!" +#: app/keys.c:136 +msgid "JMP+" +msgstr "" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "\"atlama\" deÄŸerini artıran tuÅŸ." -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/keys.c:138 +msgid "JMP-" msgstr "" -"Kaydedilen örnek geçerli karaıştırıcı birim için fazla uzun. Yine de " -"kullanılıyor. " - -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Düzgelemek" -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Yürüt" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "\"atlama\" deÄŸerini azaltan tuÅŸ." -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Ses Tırmanması" +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Åžarkıyı Çal" -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Seçim tuÅŸu üzerinde doÄŸrusal ses sönüşümü gerçekleÅŸtir" +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Birim kaydediliyor..." -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Sol [%]:" +#: app/keys.c:142 +msgid "RecMod" +msgstr "" -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "H" +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Desen okunuyor..." -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "D" +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "Deseni Oku" -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "SaÄŸ [%]:" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Deseni Oku" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/keys.c:146 +msgid "RecPat" msgstr "" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Desen okunuyor..." + +#: app/keys.c:148 +msgid "PlayCur" msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/keys.c:148 +msgid "Play module from cursor." msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/keys.c:150 +msgid "RecCur" msgstr "" -#: app/tips-dialog.c:50 +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Desen okunuyor..." + +#: app/keys.c:152 +#, fuzzy +msgid "PlayRow" +msgstr "Åžarkıyı Çal" + +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Geçerli deseni yükle..." + +#: app/keys.c:154 +msgid "PlayBlk" +msgstr "" + +# Learn-Buttons +#: app/keys.c:154 +#, fuzzy +msgid "Play selected block." +msgstr "Seçili tuÅŸu öğren" + +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Ãœst Oktav TuÅŸları..." + +#: app/keys.c:167 msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." msgstr "" -"SoundTracker'a HoÅŸgeldiniz!\n" -"\n" -"Bu tür programa tanıdık deÄŸilseniz, ilk önce bazı XM ya da MOD dosyalarını " -"edinip\n" -" onlarla oynamak isteyeceksiniz." +"Bunlar klavyenin üst yarısındaki tuÅŸlardır. C tuÅŸu normalde TAB tuÅŸunun " +"sağına denk gelen tuÅŸtur. TuÅŸların geri kalanı, yukarı satırdaki sayı tuÅŸlar " +"da dahil olmak üzere bir piyano klavyesi düzeninde düzenlenmelidir." + +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Alt Oktav TuÅŸları..." -#: app/tips-dialog.c:55 +#: app/keys.c:173 msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." msgstr "" -" Ses Yapılandırmasındaki \"düzenleme\" nesnesinin karıştırıcı ara bellek " -"boyutunu azaltarak SoundTracker'ın düzenleme kipini klavye\n" -" giriÅŸine daha duyarlı yapabilirsiniz." +"Bunlar klavyenin alt yarısındaki tuÅŸlardır. C tuÅŸu normalde sol ÃœstKarakter " +"tuÅŸunun sağına denk gelen ilk karakter tuÅŸudur. TuÅŸların geri kalanı, yukarı " +"satır da dahil olmak üzere bir piyano klavyesi düzeninde düzenlenmelidir." + +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "DiÄŸer TuÅŸlar..." + +#: app/keys.c:179 +msgid "Various other keys" +msgstr "ÇeÅŸitli baÅŸka tuÅŸlar" + +#: app/keys.c:578 +msgid "Function" +msgstr "Ä°ÅŸlev" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "Atama" -#: app/tips-dialog.c:59 +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Klavye Yapılandırması" + +# Explaining Text +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "TuÅŸ Grubu Açıklaması" + +# Explaining Text +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "TuÅŸ Açıklaması" + +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "DeÄŸiÅŸtiriciler:" + +# Learn-Buttons +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "Seçili tuÅŸu öğren" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "Bütün tuÅŸları öğren" + +#: app/keys.c:702 msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +"Please press the desired key combination!\n" +"Click into left list to cancel" msgstr "" -"Örnek düzenleyicisindeki döngü noktalarını ÃœstKarakteri\n" -" basılı tutarak ve saÄŸ ve sol fare düğmelerini kullanarak " -"ayarlayabilirsiniz.\n" +"Lütfen istenen tuÅŸ bileÅŸimine basın!\n" +" Ä°ptal etmek için soldaki listeye tıklayın" + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "CH%02d" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "Kanal %d'ye hızlı atlama" -#: app/tips-dialog.c:62 +# Automatic key configuration unsuccessful. Popup requester. +#: app/keys.c:1028 msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." +msgstr "O" + +#: app/menubar.c:115 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" msgstr "" -"Ä°zleme, ve çeÅŸitli komutların\n" -" nasıl çalıştığı üzerine daha fazla bilgi edinmek isterseniz, http://www." -"united-trackers.org/ adresine bakın" -#: app/tips-dialog.c:65 +#: app/menubar.c:126 msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." msgstr "" -"Bir aygıtın örneklerini onun örneÄŸini etkinleÅŸtirerek\n" -" ve sonra klavye üzerindeki\n" -" aygıt düzenleyici sayfasına tıklayarak tekli tuÅŸlara atayabilirsiniz." -#: app/tips-dialog.c:69 +#: app/menubar.c:151 msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +"Are you sure you want to do this?\n" +"All changes will be lost!" msgstr "" -"Ä°mleciniz bir sayı giriÅŸ alanına mı yakalandı?\n" -"Kendinizi kurtarmak için hemen Dönüş ya da Sekme tuÅŸuna basın!" +"Bunu yapmak istediÄŸnizden emin misiniz?\n" +"Bütün deÄŸiÅŸiklikler kaybedilecek!" -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "Günün SoundTracker Ä°pucu" +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "" +"Tam sayılar karıştırıcısı, ara deÄŸerleme yok, en fazla örnek uzunluÄŸu 1M" -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Önceki Ä°pucu" +#: app/mixers/kbfloat.c:838 +#, fuzzy +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "" +"Tam sayılar karıştırıcısı, ara deÄŸerleme yok, en fazla örnek uzunluÄŸu 1M" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Sonraki Ä°pucu" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Bir sonraki sefer ipucunu göster" +#: app/module-info.c:63 app/module-info.c:64 +#, fuzzy +msgid "Cyclic" +msgstr "tıklamayı geri al" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "Arpej" +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" -# 0 -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "Yukarı Porta" +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" -# 1 -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "AÅŸağı Porta" +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" -# 2 -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" -msgstr "Ton portası" +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" -# 3 -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "Vibrato" +#: app/module-info.c:481 +msgid "Period" +msgstr "" -# 4 -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" -msgstr "Ton portası + Ses slaydı" +#: app/module-info.c:484 +msgid "s" +msgstr "" -# 5 -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" -msgstr "Vibrato + Ses slaydı" +#: app/module-info.c:499 +msgid "Mode" +msgstr "" -# 6 -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "Tremolo" +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Not:" -# 7 -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "Gezdirmeyi ayarla" +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" -# 8 -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "Konum atlama" +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Aygıt Adı" -# 9 -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "Sesi ayarla" +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#smpl" -# C -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "Desen sonu" +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Örnek Adı" -# D -# E -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "Tempo/bpm'yi ayarla" +#: app/module-info.c:665 +msgid "Linear" +msgstr "DoÄŸrusal" -# F -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Genel sesi ayarla" +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" -# G -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "Genel ses slaydı" +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Birim Bilgisi" -# H -# I -# J -#: app/track-editor.c:133 -msgid "Key off" +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Åžarkı adı:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Sıklıklar:" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "ProÄ°zci Kipi" + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Aygıt Düzenleyici" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Geçerli Aygıt" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "Aygıtı Kaydet" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "DeÄŸiÅŸtirme 1 <-> 2" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Ä°nce ayar" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "RelNotası" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" +"Kullanılmayan desenler:%d (kullanılan: %d)\n" +"Kullanılmayan aygıtlar: %d (kullanılan: %d)\n" +"\n" +"Kullanılmayanı temizle ve ÅŸarkı listesini yeniden düzenle?\n" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "Düzenlenmekte olan deseni yerleÅŸtir" + +#: app/playlist.c:511 +msgid "Remove current playlist entry" +msgstr "Geçerli ÅŸarkı listesini kaldır" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "Ekle+Kpy" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" +"Geçerli konumun arkasına boÅŸ bir desen ekle, ve geçerli deseni ona kopyala" + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "BoÅŸ Ekle" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "Geçerli konumun arkasına boÅŸ bir desen ekle" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Uzunluk" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "Åžarkı uzunluÄŸu" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Instr" + +#: app/playlist.c:567 +msgid "Song restart position" +msgstr "Åžarkıyı yeniden baÅŸlatma konumu" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +" Yapılandırma dosyalarını depolamak için ana dizininizde\n" +"'.soundtracker' adlı bir dizin oluÅŸturuldu. \n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Döngü yok" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "PinPon" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8 bit" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16 bit" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Örnek Düzenleyici" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "Ses" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Gezdirme" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Seçim:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "Hiçbiri" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Tümü" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Uzunluk:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "Döngü olarak ayarla" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "ÖrneÄŸi Yükle" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "XM'yi örnekler olmadan kaydet..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "ÖrneÄŸi Kaydet" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "XM'yi örnekler olmadan kaydet..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "Bölgeyi WAV olarak Kaydet" + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "WAV'i Kaydet" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "Bölgeyi Kaydet" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Ses YokuÅŸu" + +# R +# S +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "TitreÅŸim" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "Seçim oranı" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "Tümünü göster" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "YakınlaÅŸtır (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "UzaklaÅŸtır (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Ters" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Kes" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Kaldır" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Kopyala" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Yapıştır" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "ÖrneÄŸi Temizle" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Kopyala" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(seçim yok)" + +#: app/sample-editor.c:1279 +#, fuzzy +msgid "Out of memory for copybuffer." +msgstr "KopyaarabelleÄŸi için bellek yetersiz.\n" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Karıştır" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Sol" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "SaÄŸ" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d örnekler)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "Örnek bilgileri için bellek yetersiz." + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "Okumada hata." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"Ä°kili bir örnek seçtiniz!\n" +"(SoundTracker sadece tekli örnekleri iÅŸleyebiliyor!)\n" +"\n" +"Lütfen yüklenecek kanalı seçin:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "Örneklemeyi BaÅŸlat" + +#: app/sample-editor.c:1756 +msgid "Signed" +msgstr "Ä°ÅŸaretli" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "Ä°ÅŸaretsiz" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "Küçük-Sonlandırıcı" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "Büyük-Sonlandırıcı" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "Ham örneÄŸi Yükle" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"Bilinen biçimde \n" +"olmayan bir örnek seçtiniz. Åžimdi ham bilgileri yükleyebilirsiniz.\n" +" \n" +"Lütfen bir biçim seçin:" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "Sözcük biçimi:" + +#: app/sample-editor.c:1829 +msgid "Sampling Rate:" +msgstr "Örnekleme Hızı:" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Örnek okunamıyor" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "Örnek geçerli karıştırıcı birimi için fazla uzun. Yine de yükleniyor. " + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "Sadece ikiye kadar kanalı olan 8 ve 16 bit örnekler iÅŸlenebiliyor" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Dosya yazım için açılamıyor." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "Lütfen ilk olarak bölgeyi seçin." + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "Örnekleme sürücüsü mevcut deÄŸil" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Örnekleme Penceresi" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "Tümünü_Temizle" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Örnekleme Hızı:" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "Örneklemede bellek yetersiz!" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"Ä°kili bir örnek seçtiniz!\n" +"(SoundTracker sadece tekli örnekleri iÅŸleyebiliyor!)\n" +"\n" +"Lütfen yüklenecek kanalı seçin:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Çiftli örneÄŸi Yükle" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"Kaydedilen örnek geçerli karaıştırıcı birim için fazla uzun. Yine de " +"kullanılıyor. " + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Ses Tırmanması" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Düzgelemek" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "Seçim tuÅŸu üzerinde doÄŸrusal ses sönüşümü gerçekleÅŸtir" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Sol [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "H" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "D" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "SaÄŸ [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"SoundTracker'a HoÅŸgeldiniz!\n" +"\n" +"Bu tür programa tanıdık deÄŸilseniz, ilk önce bazı XM ya da MOD dosyalarını " +"edinip\n" +" onlarla oynamak isteyeceksiniz." + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +" Ses Yapılandırmasındaki \"düzenleme\" nesnesinin karıştırıcı ara bellek " +"boyutunu azaltarak SoundTracker'ın düzenleme kipini klavye\n" +" giriÅŸine daha duyarlı yapabilirsiniz." + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"Örnek düzenleyicisindeki döngü noktalarını ÃœstKarakteri\n" +" basılı tutarak ve saÄŸ ve sol fare düğmelerini kullanarak " +"ayarlayabilirsiniz.\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"Ä°zleme, ve çeÅŸitli komutların\n" +" nasıl çalıştığı üzerine daha fazla bilgi edinmek isterseniz, http://www." +"united-trackers.org/ adresine bakın" + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Bir aygıtın örneklerini onun örneÄŸini etkinleÅŸtirerek\n" +" ve sonra klavye üzerindeki\n" +" aygıt düzenleyici sayfasına tıklayarak tekli tuÅŸlara atayabilirsiniz." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" +"Ä°mleciniz bir sayı giriÅŸ alanına mı yakalandı?\n" +"Kendinizi kurtarmak için hemen Dönüş ya da Sekme tuÅŸuna basın!" + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "Önceki Ä°pucu" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "Sonraki Ä°pucu" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "Bir sonraki sefer ipucunu göster" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "Günün SoundTracker Ä°pucu" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "Arpej" + +# 0 +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "Yukarı Porta" + +# 1 +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "AÅŸağı Porta" + +# 2 +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "Ton portası" + +# 3 +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "Vibrato" + +# 4 +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "Ton portası + Ses slaydı" + +# 5 +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "Vibrato + Ses slaydı" + +# 6 +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "Tremolo" + +# 7 +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "Gezdirmeyi ayarla" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Örnek kaydedildi." + +# 9 +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "Sesi ayarla" + +# 8 +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "Konum atlama" + +# C +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "Desen sonu" + +# D +# E +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "Tempo/bpm'yi ayarla" + +# F +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "Genel sesi ayarla" + +# G +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "Genel ses slaydı" + +# H +# I +# J +#: app/track-editor.c:150 +msgid "Key off" msgstr "TuÅŸ kapalı" -# K -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "Zarf konumunu ayarla" +# K +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "Zarf konumunu ayarla" + +# L +# M +# N +# O +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "Gezdirme slaydı" + +# P +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "LP süzgeci çınlaması" + +# Q +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "Çoklu retrig notası" + +# R +# S +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "TitreÅŸim" + +# T +# U +# V +# W +# X +# Y +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "LP süzgecinin kesilmesi" + +# 0 +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "Yukarı ince porta" + +# 1 +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "AÅŸağı ince porta" + +# 2 +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "Gliss denetimini ayarla" + +# 3 +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "Vibrato denetimini ayarla" + +# 4 +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "Ä°nce ayarı ayarla" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "_Desen" + +# 6 +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "Tremolo denetimini ayarla" + +# 7 +# 8 +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "Retrig notası" + +# 9 +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "Yukarı ince ses slaydı" + +# A +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "AÅŸağı ince ses slaydı" + +# B +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "Nota kesimi" + +# C +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "Nota gecikmesi" + +# D +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "Desen gecikmesi" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "AÅŸağı ses slaydı" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "Yukarı ses slaydı" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "TitreÅŸim hızını ayarla" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "Sola gezdirme slaydı" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "SaÄŸa gezdirme slaydı" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "sinüs" + +# 0 +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "aÅŸağı yokuÅŸ" + +# 1 +#: app/track-editor.c:203 +msgid "square" +msgstr "kare" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +# 0 +#: app/track-editor.c:244 +#, fuzzy +msgid "Extra fine porta up" +msgstr "Yukarı ince porta" + +# 1 +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "AÅŸağı ince porta" + +#: app/track-editor.c:257 +msgid "None ]" +msgstr "Hiçbiri ]" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Jazz " + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Ä°zci " + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "Yazı tipi listesi" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "Yazı tipini ekle" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "Yazı tipini sil" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "Yazı tipini uygula" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "Yazı tipini Seç..." + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "Bütün Åžarkı" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "Bütün Desenler" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "Geçerli Desen" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "Geçerli Ä°z" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Geçerli Aygıt" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "Bütün Aygıtlar" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "Yukarı yarım nota" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "AÅŸağı yarım nota" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "Yukarı oktav" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "AÅŸağı oktav" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "DeÄŸiÅŸtirme 1 <-> 2" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "DeÄŸiÅŸiklik 1 -> 2" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "DeÄŸiÅŸtirme Araçları" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "Ä°ÅŸlemin etki alanı:" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Nota DeÄŸiÅŸtirme" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Aygıt DeÄŸiÅŸtirme" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Aygıt 1:" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Geçerli aygıt" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Aygıt 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "Desen uzunluÄŸu gereken aralıkta deÄŸil: %d.\n" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Desenleri yüklemede hata." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Aygıt yüklendi." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Aygıt DeÄŸiÅŸtirme" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Gezdirme zarfı" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Gezdirme zarfı" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Gezdirme zarfı" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "SÄ°nüs kullanan geçersiz %d vibtürü.\n" + +#: app/xm.c:678 app/xm.c:1233 +#, fuzzy +msgid "Out of memory error!" +msgstr "KopyaarabelleÄŸi için bellek yetersiz.\n" + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "Dosyada XI aygıtı yok." + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Aygıt yüklendi." + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Gezdirme zarfı" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Gezdirme zarfı" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Aygıt yüklendi." + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "SÄ°nüs kullanan geçersiz %d vibtürü.\n" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "Desenleri yüklemede hata." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Dosya açılamıyor" + +#: app/xm.c:1215 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "Desenleri yüklemede hata." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"Birim geçerli karıştırıcı için fazla uzun olan örnek(ler) içeriyor.\n" +"En fazla örnek uzunluÄŸu %d'dir." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "Hızlıİzci XM yok ve MOD biçimi desteklenmiyor!" + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "Dosyanın okunmasında hata ya da dosyanın beklenmedik sonu" + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "Desen dosyasının yanlış ya da desteklenmeyen sürümü!" + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "Yanlış desen pattern uzunluÄŸu!" + +#: app/xm.c:1761 app/xm.c:1787 +msgid "Error during saving pattern!" +msgstr "Deseni kaydetmede hata!" + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "Otomatik baÄŸlantı" + +#: app/midi-settings.c:414 +msgid "Channel" +msgstr "Kanal" + +# Create the spin button for the input client number. +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "Kullanıcı sayısı" + +# Create the spin button for the input port number. +#: app/midi-settings.c:434 +msgid "Port number" +msgstr "BaÄŸlantı noktası sayısı" + +#: app/midi-settings.c:453 +msgid "Input" +msgstr "GiriÅŸ" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "Gelecek geliÅŸmeler için" + +#: app/midi-settings.c:468 +msgid "Output" +msgstr "Çıkış" + +# Create the spin button for the debug level. +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "Hata ayıklama düzeyi" + +#: app/midi-settings.c:492 +msgid "Misc" +msgstr "DiÄŸer" + +#: app/midi-settings.c:532 +msgid "MIDI Configuration" +msgstr "MIDI Yapılandırması" + +#: soundtracker.glade:10 +#, fuzzy +msgid "Pattern" +msgstr "_Desen" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "_Ä°zle" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_Notaları sonlandır" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "_Ä°zi yerleÅŸtir" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "_Ä°zi sil" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "Cmd deÄŸerini artırma" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Cmd deÄŸerini azaltma" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "B_lok imlerini Temizle" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "_Etkileri ara deÄŸerle" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Dosya" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_Aç..." + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "Farklı_kaydet..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "Birimi WAV olarak_kaydet..." + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "XM'yi örnekler olmadan kaydet..." + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Birim" + +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "Tümünü_Temizle" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Sadece_Desenleri Temizle" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Birimi en iyi ÅŸekilde kullan" + +#: soundtracker.glade:346 +#, fuzzy +msgid "_Set Optimal Amplification" +msgstr "Genel büyütme" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Düzenle" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "_Jazz Düzenleme Kipi" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "DeÄŸiÅŸt_irme..." + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Desen" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "_Ä°zle" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "_Seçim" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "_Ä°m kipi" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Yarım-nota yukarı deÄŸiÅŸtir" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Yarım-nota aÅŸağı deÄŸiÅŸtir" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Oktavı yukarıya " + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Oktavı aÅŸağı deÄŸiÅŸtir" + +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "D_eseni Yükle" + +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "_Geçerli Deseni Kaydet" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "_" + +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Geçerli olanı Kullanılmayan Desene Kopyala" + +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "_Geçerli Deseni GeniÅŸlet" + +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "" + +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "K_ullanılmayan Desenleri Temizle" + +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "_Desenleri Paketle" + +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "Ge_çerli Deseni Küçült" + +#: soundtracker.glade:753 +msgid "_Expand Current Pattern" +msgstr "_Geçerli Deseni GeniÅŸlet" + +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" + +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" + +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "Geçerli Ä°z" + +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "Geçerli Ä°z" + +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "Geçerli Ä°z" + +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "_Aygıt" + +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "XI'yı Yükle" + +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "XI'yi Kaydet" + +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "_Geçerli olanı Temizle " + +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_Kullanılmayan Aygıtları Sil" + +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "_Ayarlar" -# L -# M -# N -# O -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "Gezdirme slaydı" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Göster_Oscilloscopes" -# P -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "LP süzgeci çınlaması" +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "" -# Q -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "Çoklu retrig notası" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "_Ä°zci" -# R -# S -#: app/track-editor.c:142 -msgid "Tremor" -msgstr "TitreÅŸim" +#: soundtracker.glade:913 +#, fuzzy +msgid "_Flicker-free Scrolling" +msgstr "_TitreÅŸimsiz kaydırma" -# T -# U -# V -# W -# X -# Y -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "LP süzgecinin kesilmesi" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "_Önceki yazıtipi" -# 0 -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "Yukarı ince porta" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "_Sonraki yazıtipi" -# 1 -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "AÅŸağı ince porta" +#: soundtracker.glade:944 +#, fuzzy +msgid "Change Preferred _Accidental Type" +msgstr "Tercih edilen_yanlış türü deÄŸiÅŸtir" -# 2 -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "Gliss denetimini ayarla" +#: soundtracker.glade:953 +#, fuzzy +msgid "Change Effect Column _Editing Direction" +msgstr "Yönü düzenleyen etki sütununu deÄŸiÅŸtir" -# 3 -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "Vibrato denetimini ayarla" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "Klavye Yapılandırması" -# 4 -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "Ä°nce ayarı ayarla" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "Ses Yapılandırması" -# 5 -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Döngü baÅŸlangıcını/döngüyü ayarla" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "GUI Yapılandırması" -# 6 -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "Tremolo denetimini ayarla" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "MIDI Yapılandırması" -# 7 -# 8 -#: app/track-editor.c:161 -msgid "Retrig note" -msgstr "Retrig notası" +#: soundtracker.glade:1016 +#, fuzzy +msgid "_Disable Splash Screen" +msgstr "Sıçrama ekranı devre dışı" -# 9 -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "Yukarı ince ses slaydı" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_Ayarları ÅŸimdi kaydet" -# A -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "AÅŸağı ince ses slaydı" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "Çıkışta Ayarları_Kaydet" -# B -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "Nota kesimi" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "_Yardım" -# C -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "Nota gecikmesi" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "_Hakkında..." -# D -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "Desen gecikmesi" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "Ä°puçlarını_Göster..." -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "AÅŸağı ses slaydı" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "_XM Etkileri..." -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "Yukarı ses slaydı" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Åžarkıyı Çal" -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "TitreÅŸim hızını ayarla" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Åžarkıyı Çal" -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "Sola gezdirme slaydı" +#~ msgid "transport master" +#~ msgstr "taşıma ustası" -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "SaÄŸa gezdirme slaydı" +#~ msgid "SoundTracker Startup" +#~ msgstr "SoundTracker Açılışı" -#: app/track-editor.c:184 -msgid "sine" -msgstr "sinüs" +#~ msgid "Vibrato Type:" +#~ msgstr "Vibrato Türü:" -# 0 -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "aÅŸağı yokuÅŸ" +#~ msgid "VolFade" +#~ msgstr "VolSönüşüm" -# 1 -#: app/track-editor.c:186 -msgid "square" -msgstr "kare" +# 5 +#~ msgid "Set loop begin/loop" +#~ msgstr "Döngü baÅŸlangıcını/döngüyü ayarla" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, c-format -msgid "None ]" -msgstr "Hiçbiri ]" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Not:" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Jazz " +#~ msgid "Error while loading instruments." +#~ msgstr "Aygıtları yüklemede hata." -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Ä°zci " +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "ESD çıkışının ESD tarafından eklenen\n" +#~ " gecikme süresi nedeniyle etkileÅŸimli kipte\n" +#~ " kullanılamadığına dikkat edin. Ciddi iÅŸler için OSS ya da ALSA çıkışı " +#~ "fiÅŸli kabloları\n" +#~ " kullanın." -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "Yazı tipi listesi" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Ses çıkışı için ESD'ye baÄŸlanamadı:\n" +#~ "%s" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "Yazı tipini ekle" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "" +#~ "Örneklendirme yeniden baÅŸlayıncaya kadar bu deÄŸiÅŸiklikler etkili " +#~ "olmayacaktır." -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "Yazı tipini sil" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Aygıt DeÄŸiÅŸtirme" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "Yazı tipini uygula" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "%s: Gereken ses kodlaması desteklenmiyor.\n" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Yukarı" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "AÅŸağı" +#~ msgid "%s: %s" +#~ msgstr "%s: %s" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "Yazı tipini Seç..." +#~ msgid "%s: Cannot play (%s)" +#~ msgstr "%s: Okunamıyor (%s)" -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "Bütün Åžarkı" +#~ msgid "%s: Cannot record (%s)" +#~ msgstr "%s: Kaydedilemiyor (%s)" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Bütün Desenler" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Bilinmeyen XI sürümü 0x%x\n" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "Geçerli Desen" +#~ msgid "out_1" +#~ msgstr "dış_1" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "Geçerli Ä°z" +#~ msgid "out_2" +#~ msgstr "dış_2" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Geçerli Aygıt" +#~ msgid "Monitor" +#~ msgstr "Görüntü birimi" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Bütün Aygıtlar" +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#smpl" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Yukarı yarım nota" +#~ msgid "OK" +#~ msgstr "Tamam" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "AÅŸağı yarım nota" +#~ msgid "Cancel" +#~ msgstr "Ä°ptal" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "Yukarı oktav" +#~ msgid "(%d bytes)" +#~ msgstr "(%d bayt)" + +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Tahmin Edilen Ses Gecikmesi: %f mikrosaniye" + +#~ msgid "ALSA card number:" +#~ msgstr "ALSA kart numarası:" + +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Ses giriÅŸi için ALSA aygıtı açılamadı (kart:%d, aygıt:%d):\n" +#~ "%s" + +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "Gereken ses çıkış deÄŸiÅŸtirgeleri desteklenmiyor.\n" + +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Ses çıkışı için ALSA aygıtı açılamadı (kart:%d, aygıt:%d):\n" +#~ "%s" + +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "Mecburi çıkış-kanalı deÄŸiÅŸtirgeleri desteklenmiyor.\n" + +#~ msgid "Alsa setup error.\n" +#~ msgstr "Alsa kurma hatası.\n" + +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "Ses çıkışı için %s açılamadı:\n" +#~ "%s" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "AÅŸağı oktav" +# TODO: this should be improved, both error handling and saving the string +# I'm probably not taking advantage of libjack +#~ msgid "soundtracker" +#~ msgstr "sestakipçisi" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "DeÄŸiÅŸtirme 1 <-> 2" +#~ msgid "Save Song" +#~ msgstr "Åžarkıyı Kaydet" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "DeÄŸiÅŸiklik 1 -> 2" +#~ msgid "Yes" +#~ msgstr "Evet" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "DeÄŸiÅŸtirme Araçları" +#~ msgid "No" +#~ msgstr "Hayır" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Ä°ÅŸlemin etki alanı:" +#~ msgid "Close" +#~ msgstr "Kapat" -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Nota DeÄŸiÅŸtirme" +# No file was actually selected. +#~ msgid "No file selected." +#~ msgstr "Seçili dosya yok." -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Aygıt DeÄŸiÅŸtirme" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Dosyanın üstüne yazmak istediÄŸinizden emin misiniz?" -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Aygıt 1:" +#~ msgid "Load XM..." +#~ msgstr "XM'yi Yükle..." -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Geçerli aygıt" +#~ msgid "Save XM..." +#~ msgstr "XM'yi Kaydet..." -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Aygıt 2:" +#~ msgid "Save song as XM..." +#~ msgstr "XM'yi ÅŸarkı olarak kaydet..." -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Desen uzunluÄŸu gereken aralıkta deÄŸil: %d.\n" +#~ msgid "Load Instrument..." +#~ msgstr "Aygıtı Yükle..." -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "Dosyada XI aygıtı yok." +#~ msgid "Save Instrument..." +#~ msgstr "Aygıtı Kaydet..." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Bilinmeyen XI sürümü 0x%x\n" +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "Klavye yapılandırma dosyası bozuk.\n" +#~ "Lütfen Klavye Yapılandırma iletiÅŸim kutusunu kullanın." -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "SÄ°nüs kullanan geçersiz %d vibtürü.\n" +# Create the buttons. +#~ msgid "Ok" +#~ msgstr "Tamam" -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "Desenleri yüklemede hata." +#~ msgid "_Quit" +#~ msgstr "_Bırak" -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Dosya açılamıyor" +#~ msgid "C_ut" +#~ msgstr "K_es" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Aygıtları yüklemede hata." +#~ msgid "_Copy" +#~ msgstr "_Kopyala" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"Birim geçerli karıştırıcı için fazla uzun olan örnek(ler) içeriyor.\n" -"En fazla örnek uzunluÄŸu %d'dir." +#~ msgid "_Paste" +#~ msgstr "_Yapıştır" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "Hızlıİzci XM yok ve MOD biçimi desteklenmiyor!" +#~ msgid "P_aste" +#~ msgstr "Y_apıştır" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "Dosyanın okunmasında hata ya da dosyanın beklenmedik sonu" +#~ msgid "_Load XI..." +#~ msgstr "_XI'yi yükle..." -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "Desen dosyasının yanlış ya da desteklenmeyen sürümü!" +#~ msgid "_Save XI..." +#~ msgstr "_XI'yi Kaydet..." -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "Yanlış desen pattern uzunluÄŸu!" +#~ msgid "Change effect column editing _direction" +#~ msgstr "Yönü_düzenleyen etki sütununu deÄŸiÅŸtir" -#: app/xm.c:1468 -msgid "Error during saving pattern!" -msgstr "Deseni kaydetmede hata!" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "_Klavye Yapılandırması..." -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "Otomatik baÄŸlantı" +#~ msgid "_Audio Configuration..." +#~ msgstr "_Ses Yapılandırması..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -msgid "Channel" -msgstr "Kanal" +#~ msgid "_GUI Configuration..." +#~ msgstr "_GUI Yapılandırması..." -# Create the spin button for the input client number. -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "Kullanıcı sayısı" +#~ msgid "_MIDI Configuration..." +#~ msgstr "_MIDI Yapılandırması..." -# Create the spin button for the input port number. -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" -msgstr "BaÄŸlantı noktası sayısı" +#~ msgid "Load Sample..." +#~ msgstr "ÖrneÄŸi Yükle..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -msgid "Input" -msgstr "GiriÅŸ" +#~ msgid "Save WAV..." +#~ msgstr "WAV'i Kaydet..." -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "Gelecek geliÅŸmeler için" +#~ msgid "8363" +#~ msgstr "8363" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -msgid "Output" -msgstr "Çıkış" +#~ msgid "Execute" +#~ msgstr "Yürüt" -# Create the spin button for the debug level. -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "Hata ayıklama düzeyi" +#~ msgid "Apply" +#~ msgstr "Uygula" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -msgid "Misc" -msgstr "DiÄŸer" +#~ msgid "Drivers" +#~ msgstr "Sürücüler" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -msgid "MIDI Configuration" -msgstr "MIDI Yapılandırması" +#~ msgid "Up" +#~ msgstr "Yukarı" + +#~ msgid "Down" +#~ msgstr "AÅŸağı" Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/po/vi.gmo and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/po/vi.gmo differ diff -Nru soundtracker-0.6.8/po/vi.po soundtracker-1.0.2~pre2/po/vi.po --- soundtracker-0.6.8/po/vi.po 2006-02-25 13:25:09.000000000 +0000 +++ soundtracker-1.0.2~pre2/po/vi.po 2020-05-27 18:54:29.000000000 +0000 @@ -1,22 +1,30 @@ # Vietnamese translation for Soundtracker. # Copyright © 2006 Free Software Foundation, Inc. # Clytie Siddall , 2006. -# +# msgid "" msgstr "" "Project-Id-Version: soundtracker-0.6.7\n" "Report-Msgid-Bugs-To: soundtracker-discuss@soundtracker.org\n" -"POT-Creation-Date: 2006-02-25 14:25+0100\n" +"POT-Creation-Date: 2020-05-27 21:54+0300\n" "PO-Revision-Date: 2006-02-19 15:50+1030\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" +"Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0\n" "X-Generator: LocFactoryEditor 1.6b36\n" -#: app/audioconfig.c:63 +#: app/audio.c:648 app/gui.c:388 app/gui.c:399 app/gui.c:410 app/gui.c:421 +#: app/gui.c:1314 app/gui.c:1335 app/gui.c:1352 app/gui.c:1365 app/gui.c:1502 +#: app/gui.c:1622 app/gui.c:1672 app/gui.c:1762 app/gui.c:1786 app/gui.c:1835 +#: app/gui.c:1845 +msgid "Connection with audio thread failed!" +msgstr "" + +#: app/audioconfig.c:62 msgid "Playback Output" msgstr "Kết xuất phát lại" @@ -24,2095 +32,3691 @@ msgid "Editing Output" msgstr "Kết xuất hiệu chỉnh" -#: app/audioconfig.c:75 +#: app/audioconfig.c:76 app/gui-settings.c:488 app/sample-editor.c:581 msgid "Sampling" msgstr "Lấy mẫu" -#: app/audioconfig.c:261 +#: app/audioconfig.c:169 msgid "Driver Module" msgstr "Mô-Ä‘un Äiá»u khiển" -#: app/audioconfig.c:262 +#: app/audioconfig.c:218 msgid "Mixer Module" msgstr "Mô-Ä‘un Hoà tiếng" -#: app/audioconfig.c:263 +#: app/audioconfig.c:219 app/drivers/alsa1x.c:743 msgid "Description" msgstr "Mô tả" -#: app/audioconfig.c:271 app/audioconfig.c:274 +#: app/audioconfig.c:226 msgid "Audio Configuration" msgstr "Cấu hình Âm thanh" -#: app/audioconfig.c:289 -msgid "Drivers" -msgstr "Trình Ä‘iá»u khiển" - -#: app/audioconfig.c:326 +#: app/audioconfig.c:242 msgid "Mixers" msgstr "Bá»™ hoà tiếng" -#: app/audioconfig.c:359 app/gui-settings.c:512 app/gui.c:274 -#: app/sample-editor.c:2241 app/transposition.c:347 -msgid "Close" -msgstr "Äóng" +#: app/cheat-sheet.c:71 +msgid "No Cheat Sheet pages are found!" +msgstr "" -#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:134 -#: app/drivers/alsa2-input.c:125 app/drivers/alsa2-output.c:135 +#: app/cheat-sheet.c:76 #, c-format -msgid "(%d bytes)" -msgstr "(%d byte)" +msgid "" +"Cheat sheet file %s cannot be loaded.\n" +"%s" +msgstr "" -#: app/drivers/alsa-input.c:128 app/drivers/alsa2-input.c:128 -#, c-format -msgid "Estimated audio delay: %f microseconds" -msgstr "Trì hoãn âm thanh xấp xỉ: %f micrô-giây" +#: app/cheat-sheet.c:91 +#, fuzzy +msgid "XM Effects Cheat Sheet" +msgstr "Hiệu ứng _XM..." -#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:199 -#: app/drivers/alsa2-input.c:193 app/drivers/alsa2-output.c:198 -#: app/drivers/oss-output.c:205 app/drivers/sun-output.c:197 -msgid "These changes won't take effect until you restart playing." +#: app/colors.c:42 +#, fuzzy +msgid "Background" +msgstr "Tần số bá»™ theo dõi" + +#: app/colors.c:42 +msgid "Background for tracker and sample dislays" msgstr "" -"Những thay đổi này sẽ không hoạt Ä‘á»™ng cho đến khi đã chạy lại phát nhạc." -#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:211 -#: app/drivers/alsa2-input.c:205 app/drivers/alsa2-output.c:210 -#: app/drivers/oss-output.c:233 app/drivers/sun-output.c:225 -#: app/sample-editor.c:1612 -msgid "Resolution:" -msgstr "Äá»™ phân giải:" +#: app/colors.c:43 +msgid "Cursor background" +msgstr "" -#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:221 -#: app/drivers/alsa2-input.c:215 app/drivers/alsa2-output.c:220 -#: app/drivers/oss-output.c:243 app/drivers/sun-output.c:236 -#: app/sample-editor.c:1642 -msgid "Channels:" -msgstr "Kênh:" +#: app/colors.c:43 +msgid "Background for the tracker cursor line" +msgstr "" -#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:231 -#: app/drivers/alsa2-input.c:225 app/drivers/alsa2-output.c:230 -#: app/drivers/oss-output.c:253 app/drivers/sun-output.c:247 -msgid "Frequency [Hz]:" -msgstr "Tần số [Hz]:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines" +msgstr "Bật tô sáng hàng" -#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:241 -#: app/drivers/alsa2-input.c:235 app/drivers/alsa2-output.c:240 -#: app/drivers/oss-output.c:263 app/drivers/sun-output.c:258 -msgid "Buffer Size:" -msgstr "Cỡ bá»™ đệm:" +#: app/colors.c:44 +#, fuzzy +msgid "Major lines highlighting" +msgstr "Bật tô sáng hàng" -#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:274 -#: app/drivers/alsa2-input.c:268 app/drivers/alsa2-output.c:273 -msgid "ALSA card number:" -msgstr "Số thẻ ALSA:" - -#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:289 -#: app/drivers/alsa2-input.c:283 app/drivers/alsa2-output.c:288 -msgid "ALSA device number:" -msgstr "Số thiết bị ALSA:" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines" +msgstr "Bật tô sáng hàng" -#: app/drivers/alsa-input.c:374 -#, c-format -msgid "" -"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" -"%s" -msgstr "" -"Không thể mở thiết bị ALSA để nhập âm thanh (thẻ:%d, thiết bị:%d):\n" -"%s" +#: app/colors.c:45 +#, fuzzy +msgid "Minor lines highlighting" +msgstr "Bật tô sáng hàng" -#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:426 -#: app/drivers/oss-input.c:267 app/drivers/oss-output.c:424 -msgid "Required sound output format not supported.\n" -msgstr "ChÆ°a há»— trợ kiểu dạng thức xuất âm thanh cần thiết.\n" +#: app/colors.c:46 soundtracker.glade:142 +#, fuzzy +msgid "Selection" +msgstr "Vùng chá»n:" -#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:441 -msgid "Required sound output parameters not supported.\n" -msgstr "ChÆ°a há»— trợ các tham số xuất âm thanh cần thiết.\n" +#: app/colors.c:46 +#, fuzzy +msgid "Tracker selection" +msgstr "Tần số bá»™ theo dõi" -#: app/drivers/alsa-output.c:137 app/drivers/alsa2-output.c:138 -#: app/drivers/oss-output.c:149 app/drivers/sun-output.c:137 -#, c-format -msgid "Estimated audio delay: %f milliseconds" -msgstr "Trì hoãn âm thanh xấp xỉ: %f mili-giây" +#: app/colors.c:47 +msgid "Notes, waveforms" +msgstr "" -#: app/drivers/alsa-output.c:377 app/drivers/alsa2-input.c:375 -#: app/drivers/alsa2-output.c:379 -#, c-format -msgid "" -"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" -"%s" +#: app/colors.c:47 +msgid "Tracker text (notes, effects) and waveforms" msgstr "" -"Không thể mở thiết bị ALSA để xuất âm thanh (thẻ:%d, thiết bị:%d):\n" -"%s" -#: app/drivers/alsa2-input.c:436 app/drivers/alsa2-output.c:440 -msgid "Required output-channel parameters not supported.\n" -msgstr "ChÆ°a há»— trợ các tham số kênh xuất âm thanh cần thiết.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Delimiters" +msgstr "Xoá bá»" -#: app/drivers/alsa2-input.c:441 app/drivers/alsa2-output.c:445 -msgid "Unable to prepare ALSA channel.\n" -msgstr "Không thể chuẩn bị kênh ALSA.\n" +#: app/colors.c:48 +#, fuzzy +msgid "Tracker delimiters" +msgstr "Xoá bá»" -#: app/drivers/alsa2-input.c:454 app/drivers/alsa2-output.c:458 -msgid "Alsa setup error.\n" -msgstr "Lá»—i thiết lập ALSA.\n" +#: app/colors.c:49 +#, fuzzy +msgid "Channel numbers, loops" +msgstr "Kênh:" -#: app/drivers/esd-output.c:96 -msgid "" -"Note that the ESD output is unusable in\n" -"interactive mode because of the latency added\n" -"by ESD. Use the OSS or ALSA output plug-ins\n" -"for serious work." +#: app/colors.c:49 +msgid "Channel numbers and loops in the sample editor" msgstr "" -"Hãy ghi chú rằng không thể sá»­ dụng dữ liệu xuất\n" -"ESD trong chế Ä‘á»™ tÆ°Æ¡ng tác, vì sá»± âm á»· do ESD thêm.\n" -"Hãy sá»­ dụng bá»™ cầm phít OSS hay ALSA\n" -"cho việc quan trá»ng nào." -#: app/drivers/esd-output.c:161 -#, c-format -msgid "" -"Couldn't connect to ESD for sound output:\n" -"%s" +#: app/colors.c:50 +msgid "Cursor idle" msgstr "" -"Không thể kết nối đến ESD để xuất âm thanh:\n" -"%s" -#: app/drivers/file-output.c:92 app/drivers/file-output.c:297 -msgid "no settings (yet), sorry!" -msgstr "chÆ°a thiết lập gì." - -#: app/drivers/file-output.c:167 app/drivers/file-output.c:374 -#: app/sample-editor.c:1857 -msgid "Can't open file for writing." -msgstr "Không thể mở tập tin để ghi." - -#: app/drivers/oss-input.c:111 app/drivers/sun-input.c:105 -msgid "These changes won't take effect until you restart sampling." +#: app/colors.c:50 +msgid "Tracker cursor in idle mode" msgstr "" -"Những thay đổi này sẽ không hoạt Ä‘á»™ng cho đến khi đã khởi chạy lại lấy mẫu." -#: app/drivers/oss-input.c:123 -msgid "Input device (e.g. '/dev/dsp'):" -msgstr "Thiết bị nhập (v.d. ):" - -#: app/drivers/oss-input.c:234 -#, c-format -msgid "" -"Couldn't open %s for sampling:\n" -"%s" +#: app/colors.c:51 +msgid "Cursor editing" msgstr "" -"Không thể mở %s để lấy mẫu :\n" -"%s" -#: app/drivers/oss-output.c:183 app/drivers/sun-output.c:172 -#, c-format -msgid "(%d samples)" -msgstr "(%d mẫu)" +#: app/colors.c:51 +msgid "Tracker cursor in editing mode" +msgstr "" -#: app/drivers/oss-output.c:217 -msgid "Output device (e.g. '/dev/dsp'):" -msgstr "Thiết bị xuất (v.d. ):" +#: app/colors.c:52 +#, fuzzy +msgid "Cursor bg in selection" +msgstr "Phóng tá»›i phần chá»n" -#: app/drivers/oss-output.c:391 -#, c-format -msgid "" -"Couldn't open %s for sound output:\n" -"%s" +#: app/colors.c:52 +msgid "Background for the tracker cursor in the selection" msgstr "" -"không thể mở %s để xuất âm thanh:\n" -"%s" -#: app/drivers/jack-output.c:254 -msgid "transport master" -msgstr "truyá»n tải cái" +#: app/colors.c:53 +#, fuzzy +msgid "Mixer position" +msgstr "Vị trí phát lại bài hát" -#: app/drivers/jack-output.c:259 -msgid "declick" -msgstr "bá» nhắp" +#: app/colors.c:53 +msgid "Mixer position indicator" +msgstr "" -#: app/drivers/jack-output.c:279 -#, c-format -msgid "Running at %d Hz with %d frames" -msgstr "Äang chạy tại %d Hz vá»›i %d khung" +#: app/colors.c:54 +msgid "Zero line" +msgstr "" -#: app/drivers/jack-output.c:283 -#, c-format -msgid "Jack server not running?" -msgstr "Trình phục vụ Jack có chạy chÆ°a?" +#: app/colors.c:54 +msgid "Sample display zero line" +msgstr "" -#: app/drivers/jack-output.c:327 -#, c-format -msgid "soundtracker" -msgstr "bá»™ theo dõi âm thanh" +#: app/colors.c:56 +msgid "White keys" +msgstr "" -#: app/drivers/jack-output.c:347 -msgid "out_1" -msgstr "ra_1" +#: app/colors.c:56 +msgid "White clavier keys, text on black keys" +msgstr "" -#: app/drivers/jack-output.c:348 -msgid "out_2" -msgstr "ra_2" +#: app/colors.c:57 +msgid "Black keys" +msgstr "" -#: app/drivers/sun-output.c:209 -msgid "Output device (e.g. '/dev/audio'):" -msgstr "Thiết bị xuất (v.d. ):" +#: app/colors.c:57 +msgid "Black clavier keys, text on white keys" +msgstr "" -#: app/drivers/sun-output.c:389 app/drivers/sun-output.c:460 -#: app/drivers/sun-input.c:229 app/drivers/sun-input.c:311 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: app/colors.c:58 +msgid "White keys pressed" +msgstr "" -#: app/drivers/sun-output.c:395 -#, c-format -msgid "%s: Cannot play (%s)" -msgstr "%s: không thể phát (%s)" +#: app/colors.c:58 +msgid "White clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:402 app/drivers/sun-input.c:250 -#, c-format -msgid "%s: Cannot handle %dHz (%s)" -msgstr "%s: không thể quản lý %dHz (%s)" +#: app/colors.c:59 +msgid "Black keys pressed" +msgstr "" -#: app/drivers/sun-output.c:431 app/drivers/sun-input.c:280 -#, c-format -msgid "%s: Required sound encoding not supported.\n" -msgstr "%s: chÆ°a há»— trợ cách mã hoá âm thanh cần thiết.\n" +#: app/colors.c:59 +msgid "Black clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-output.c:454 app/drivers/sun-input.c:305 -#, c-format -msgid "%s: Cannot set block size (%s)" -msgstr "%s: không thể đặt kích cỡ khối (%s)" +#: app/colors.c:60 +msgid "White text pressed" +msgstr "" -#: app/drivers/sun-input.c:117 -msgid "Input device (e.g. '/dev/audio'):" -msgstr "Thiết bị nhập (v.d. ):" +#: app/colors.c:60 +msgid "Text on white clavier keys in pressed state" +msgstr "" -#: app/drivers/sun-input.c:242 -#, c-format -msgid "%s: Cannot record (%s)" -msgstr "%s: không thể thu (%s)" +#: app/colors.c:61 +msgid "Black text pressed" +msgstr "" -#: app/envelope-box.c:878 -msgid "Length" -msgstr "Dài" +#: app/colors.c:61 +msgid "Text on black clavier keys in pressed state" +msgstr "" -#: app/envelope-box.c:879 -msgid "Current" -msgstr "Hiện có" +#: app/colors.c:395 +#, fuzzy, c-format +msgid "%s colors configuration" +msgstr "Cấu hình Bàn phím" -#: app/envelope-box.c:880 -msgid "Offset" -msgstr "Hiệu số" +#: app/colors.c:398 +#, fuzzy +msgid "Reset" +msgstr "Ngược lại" -#: app/envelope-box.c:881 -msgid "Value" -msgstr "Giá trị" +#: app/colors.c:405 +msgid "Reset the color scheme to standard" +msgstr "" -#: app/envelope-box.c:887 app/playlist.c:524 -msgid "Insert" -msgstr "Chèn" +#: app/colors.c:407 +msgid "Reset colors to the latest set values" +msgstr "" -#: app/envelope-box.c:893 app/playlist.c:533 -msgid "Delete" -msgstr "Xoá bá»" +#: app/colors.c:414 +msgid "Gtk clavier colors" +msgstr "" -#: app/envelope-box.c:985 -msgid "" -"Graphical\n" -"Envelope\n" -"Editor\n" -"only in\n" -"GNOME Version" +#: app/drivers/alsa1x.c:261 +#, c-format +msgid "%f milliseconds" msgstr "" -"Bá»™ hiệu\n" -"chỉnh\n" -"bao bá»c\n" -"đồ há»a\n" -"chỉ trong\n" -"phiên bản GNOME" -#: app/envelope-box.c:1000 -msgid "Sustain" -msgstr "Kéo dài" +#: app/drivers/alsa1x.c:320 +#, fuzzy +msgid "ALSA device opening error" +msgstr "Số thiết bị ALSA:" -#: app/envelope-box.c:1008 -msgid "Point" -msgstr "Äiểm" +#: app/drivers/alsa1x.c:324 +msgid "hw params obtaining error" +msgstr "" -#: app/envelope-box.c:1010 -msgid "Loop" -msgstr "Lặp lặp" +#: app/drivers/alsa1x.c:353 app/drivers/alsa1x.c:555 app/drivers/alsa1x.c:584 +#: app/drivers/alsa1x.c:1241 +msgid "Unable to set audio format" +msgstr "" -#: app/envelope-box.c:1018 app/sample-editor.c:275 -msgid "Start" -msgstr "Äầu" +#: app/drivers/alsa1x.c:358 app/drivers/alsa1x.c:405 app/drivers/alsa1x.c:1256 +#, fuzzy +msgid "Unable to set channels number" +msgstr "Không thể chuẩn bị kênh ALSA.\n" -#: app/envelope-box.c:1019 app/sample-editor.c:276 -msgid "End" -msgstr "Cuối" +#: app/drivers/alsa1x.c:370 app/drivers/alsa1x.c:1278 +msgid "Unable to set appropriate buffer size" +msgstr "" -#: app/file-operations.c:162 -msgid "Load Module" -msgstr "Tải mô-Ä‘un" +#: app/drivers/alsa1x.c:379 +msgid "Unable to get minimal period size" +msgstr "" -#: app/file-operations.c:163 -msgid "Save Module" -msgstr "LÆ°u mô-Ä‘un" +#: app/drivers/alsa1x.c:385 +msgid "Unable to get maximal period size" +msgstr "" -#: app/file-operations.c:164 -msgid "Render WAV" -msgstr "Vẽ WAV" +#: app/drivers/alsa1x.c:409 +msgid "Unable to get minimal sample rate" +msgstr "" -#: app/file-operations.c:165 -msgid "Save Song" -msgstr "LÆ°u bài hát" +#: app/drivers/alsa1x.c:415 +msgid "Unable to get maximal sample rate" +msgstr "" -#: app/file-operations.c:166 app/sample-editor.c:383 -msgid "Load Sample" -msgstr "Tải mẫu" +#: app/drivers/alsa1x.c:421 +msgid "Unable to get minimal buffer size" +msgstr "" -#: app/file-operations.c:167 -msgid "Save Sample" -msgstr "LÆ°u mẫu" +#: app/drivers/alsa1x.c:427 +msgid "Unable to get maximal buffer size" +msgstr "" -#: app/file-operations.c:168 -msgid "Load Instrument" -msgstr "Tải nhạc khí" +#: app/drivers/alsa1x.c:528 +msgid "Unable to get minimal channels number" +msgstr "" -#: app/file-operations.c:169 -msgid "Save Instrument" -msgstr "LÆ°u nhạc khí" +#: app/drivers/alsa1x.c:533 +msgid "Unable to get maximal channels number" +msgstr "" -#: app/file-operations.c:175 -msgid "File" -msgstr "Tập tin" +#: app/drivers/alsa1x.c:538 +msgid "Both mono and stereo are not supported by ALSA device!" +msgstr "" -#: app/file-operations.c:226 -msgid "Operation not supported." -msgstr "ChÆ°a há»— trợ thao tác." +#: app/drivers/alsa1x.c:609 +msgid "Neither 8 nor 16 bit resolution is supported by ALSA device!" +msgstr "" -#: app/gui-settings.c:100 -msgid "Scopes Frequency" -msgstr "Tần số phạm vị" +#: app/drivers/alsa1x.c:675 +#, fuzzy, c-format +msgid " = %u samples" +msgstr "(%d mẫu)" -#: app/gui-settings.c:103 -msgid "Tracker Frequency" -msgstr "Tần số bá»™ theo dõi" +#: app/drivers/alsa1x.c:743 +msgid "Dev" +msgstr "" -#: app/gui-settings.c:317 app/gui-settings.c:320 -msgid "GUI Configuration" -msgstr "Cấu hình giao diện" +#: app/drivers/alsa1x.c:750 +msgid "No soundcards found..." +msgstr "" -#: app/gui-settings.c:354 -msgid "Hexadecimal row numbers" -msgstr "Số thứ tá»± hàng thập lục" +#: app/drivers/alsa1x.c:755 +msgid "Devices list" +msgstr "" -#: app/gui-settings.c:361 -msgid "Use upper case letters for hex numbers" -msgstr "Hiện số thập lục bằng chữ hoa" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "8 bit" +msgstr "8 bit" -#: app/gui-settings.c:368 -msgid "Asynchronous (IT-style) pattern editing" -msgstr "Cách hiệu chỉnh mẫu không đồng bá»™ (kiểu IT)" +#: app/drivers/alsa1x.c:811 app/gui.c:476 +#, fuzzy +msgid "16 bit" +msgstr "16 bit" -#: app/gui-settings.c:375 -msgid "Fxx command updates Tempo/BPM sliders" -msgstr "Lệnh Fxx cập nhật các bá»™ trượt Nhịp Äá»™/NMG" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Mono" +msgstr "Nguồn Ä‘Æ¡n" -#: app/gui-settings.c:382 -msgid "Switch to tracker after loading/saving" -msgstr "Chuyển sang bá»™ theo dõi sau khih tải/lÆ°u" +#: app/drivers/alsa1x.c:812 app/gui.c:475 app/sample-editor.c:1758 +msgid "Stereo" +msgstr "Âm lập thể" -#: app/gui-settings.c:389 -msgid "Save window geometry on exit" -msgstr "LÆ°u vị trí cá»­a sổ khi thoát" +#: app/drivers/alsa1x.c:816 app/drivers/oss.c:235 app/drivers/sun-output.c:200 +msgid "These changes won't take effect until you restart playing." +msgstr "" +"Những thay đổi này sẽ không hoạt Ä‘á»™ng cho đến khi đã chạy lại phát nhạc." -#: app/gui-settings.c:396 -msgid "Use note name B instead of H" -msgstr "Sá»­ dụng tên nốt B thay vào H" +#: app/drivers/alsa1x.c:817 app/drivers/oss.c:234 app/drivers/sun-input.c:119 +msgid "These changes won't take effect until you restart sampling." +msgstr "" +"Những thay đổi này sẽ không hoạt Ä‘á»™ng cho đến khi đã khởi chạy lại lấy mẫu." -#: app/gui-settings.c:403 -msgid "Save and restore permanent channels" +#: app/drivers/alsa1x.c:829 +msgid "Device:" msgstr "" -#: app/gui-settings.c:417 -msgid "Scopes buffer size [MB]" -msgstr "Kích cỡ bá»™ đệm phạm vị [MB]" +#: app/drivers/alsa1x.c:839 +msgid "List available hardware devices" +msgstr "" -#: app/gui-settings.c:436 -msgid "Track line format:" -msgstr "Dạng thức Ä‘Æ°á»ng theo dõi :" +#: app/drivers/alsa1x.c:853 app/drivers/oss.c:264 app/drivers/sun-output.c:229 +#: app/gui.c:554 app/sample-editor.c:1787 +msgid "Resolution:" +msgstr "Äá»™ phân giải:" -#: app/gui-subs.c:32 app/gui.c:2369 -msgid "Ready." -msgstr "Sẵn sàng." +#: app/drivers/alsa1x.c:863 app/drivers/oss.c:274 app/drivers/sun-output.c:239 +#: app/gui.c:545 app/sample-editor.c:1817 +msgid "Channels:" +msgstr "Kênh:" -#: app/gui-subs.c:33 -msgid "Playing song..." -msgstr "Äang phát bài hát..." +#: app/drivers/alsa1x.c:873 app/drivers/oss.c:284 app/drivers/sun-output.c:249 +#: app/gui.c:563 +msgid "Frequency [Hz]:" +msgstr "Tần số [Hz]:" -#: app/gui-subs.c:34 -msgid "Playing pattern..." -msgstr "Äang phát mẫu..." +#: app/drivers/alsa1x.c:892 app/drivers/oss.c:294 app/drivers/sun-output.c:259 +msgid "Buffer Size:" +msgstr "Cỡ bá»™ đệm:" -#: app/gui-subs.c:35 -msgid "Loading module..." -msgstr "Äang tải mô-Ä‘un..." +#: app/drivers/alsa1x.c:914 +#, fuzzy +msgid "Number of Periods:" +msgstr "Số kênh:" -#: app/gui-subs.c:36 -msgid "Module loaded." -msgstr "Mô-Ä‘un đã được tải." +#: app/drivers/alsa1x.c:938 +#, fuzzy +msgid "Estimated audio delay:" +msgstr "Trì hoãn âm thanh xấp xỉ: %f mili-giây" -#: app/gui-subs.c:37 -msgid "Saving module..." -msgstr "Äang lÆ°u mô-Ä‘un..." +#: app/drivers/alsa1x.c:943 +msgid "" +"The playback will start and stop immediately, but the reaction to the " +"interactive events will happens after this delay." +msgstr "" -#: app/gui-subs.c:38 -msgid "Module saved." -msgstr "Mô-Ä‘un đã được lÆ°u." +#: app/drivers/alsa1x.c:995 app/drivers/alsa1x.c:1065 +msgid "Unable to restart stream from suspending" +msgstr "" -#: app/gui-subs.c:39 -msgid "Loading sample..." -msgstr "Äang tải mẫu..." +#: app/drivers/alsa1x.c:1003 app/drivers/alsa1x.c:1072 +msgid "Stream preparation error" +msgstr "" -#: app/gui-subs.c:40 -msgid "Sample loaded." -msgstr "Mẫu đã được tải." +#: app/drivers/alsa1x.c:1010 +msgid "Sound playing error" +msgstr "" -#: app/gui-subs.c:41 -msgid "Saving sample..." -msgstr "Äang lÆ°u mẫu..." +#: app/drivers/alsa1x.c:1078 +msgid "Sound recording error" +msgstr "" -#: app/gui-subs.c:42 -msgid "Sample saved." -msgstr "Mẫu đã được lÆ°u." +#: app/drivers/alsa1x.c:1094 app/drivers/alsa1x.c:1364 +msgid "ALSA driver: Out of memory error!" +msgstr "" -#: app/gui-subs.c:43 -msgid "Loading instrument..." -msgstr "Äang tải nhạc khí..." +#: app/drivers/alsa1x.c:1156 +msgid "Error attaching sound output" +msgstr "" -#: app/gui-subs.c:44 -msgid "Instrument loaded." -msgstr "Nhạc khí đã được tải." +#: app/drivers/alsa1x.c:1234 +msgid "Unable to set access" +msgstr "" -#: app/gui-subs.c:45 -msgid "Saving instrument..." -msgstr "Äang lÆ°u nhạc khí..." +#: app/drivers/alsa1x.c:1266 +msgid "Unable to set sample rate" +msgstr "" -#: app/gui-subs.c:46 -msgid "Instrument saved." -msgstr "Nhạc khí đã được lÆ°u." +#: app/drivers/alsa1x.c:1284 +msgid "Unable to set periods number" +msgstr "" -#: app/gui-subs.c:47 -msgid "Saving song..." -msgstr "Äang lÆ°u bài hát..." +#: app/drivers/alsa1x.c:1288 +msgid "Unable to get period size" +msgstr "" -#: app/gui-subs.c:48 -msgid "Song saved." -msgstr "Bài hát đã được lÆ°u." +#: app/drivers/alsa1x.c:1293 +#, fuzzy +msgid "Error setting hw parameters" +msgstr "Gặp lá»—i khi tải mẫu." -#: app/gui-subs.c:483 app/gui-subs.c:554 -msgid "Question" -msgstr "Câu há»i" +#: app/drivers/alsa1x.c:1301 +msgid "Unable to determine current swparams for playback" +msgstr "" -#: app/gui-subs.c:492 -msgid "Yes" -msgstr "Có" - -#: app/gui-subs.c:500 -msgid "No" -msgstr "Không" - -#: app/gui-subs.c:507 app/gui-subs.c:571 app/keys.c:711 -#: app/sample-editor.c:1520 app/sample-editor.c:1695 app/sample-editor.c:2019 -#: app/sample-editor.c:2480 app/midi-settings-050.c:637 -#: app/midi-settings-09x.c:640 -msgid "Cancel" -msgstr "Thôi" +#: app/drivers/alsa1x.c:1302 +msgid "Unable to determine current swparams for capture" +msgstr "" -#: app/gui-subs.c:589 -msgid "Warning" -msgstr "Cảnh báo" +#: app/drivers/alsa1x.c:1309 +msgid "Unable to set start threshold mode for playback" +msgstr "" -#: app/gui-subs.c:615 -msgid "Error!" -msgstr "• Lá»—i •" +#: app/drivers/alsa1x.c:1310 +msgid "Unable to set start threshold mode for capture" +msgstr "" -#: app/gui.c:140 -msgid "Tempo" -msgstr "Nhịp Ä‘á»™" +#: app/drivers/alsa1x.c:1317 +msgid "Unable to set avail min for playback" +msgstr "" -#: app/gui.c:245 app/gui.c:255 app/gui.c:2078 -msgid "Row highlighting configuration" -msgstr "Cấu hình tô sáng hàng" +#: app/drivers/alsa1x.c:1318 +msgid "Unable to set avail min for capture" +msgstr "" -#: app/gui.c:301 -msgid "Highlight rows (major / minor):" -msgstr "Tô sáng hàng (lá»›n / nhá»):" +#: app/drivers/alsa1x.c:1328 +#, fuzzy +msgid "Unable to enable timestamping for playback" +msgstr "Không thể chuẩn bị kênh ALSA.\n" -#: app/gui.c:478 -msgid "" -"Odd pattern rows contain data which will be lost after shrinking.\n" -"Do you want to continue anyway?" -msgstr "" -"Các hàng mẫu lẻ chứa dữ liệu sẽ bị mất sau khi thu hẹp.\n" -"Bạn vẫn còn muốn tiếp tục không?" +#: app/drivers/alsa1x.c:1329 +#, fuzzy +msgid "Unable to enable timestamping for capture" +msgstr "Không thể chuẩn bị kênh ALSA.\n" -#: app/gui.c:506 -msgid "" -"The pattern is too long for expanding.\n" -"Some data at the end of the pattern will be lost.\n" -"Do you want to continue anyway?" -msgstr "" -"Mẫu quá dài để mở rá»™ng.\n" -"Má»™t số dữ liệu tại cuá»—i mẫu này sẽ bị mất. Bạn vẫn còn muốn tiếp tục không?" +#: app/drivers/alsa1x.c:1335 +#, fuzzy +msgid "Unable to set timestamp type for playback" +msgstr "Không thể chuẩn bị kênh ALSA.\n" -#: app/gui.c:555 app/instrument-editor.c:212 app/sample-editor.c:1719 -#: app/sample-editor.c:1915 app/sample-editor.c:1959 -msgid "No file selected." -msgstr "ChÆ°a chá»n tập tin." +#: app/drivers/alsa1x.c:1336 +#, fuzzy +msgid "Unable to set timestamp type for capture" +msgstr "Không thể chuẩn bị kênh ALSA.\n" -#: app/gui.c:563 -msgid "" -"Are you sure you want to free the current project?\n" -"All changes will be lost!" +#: app/drivers/alsa1x.c:1344 +msgid "Unable to set sw params for playback" msgstr "" -"Bạn có chắc muốn giải phóng dá»± án hiện thá»i không?\n" -"• Má»i thay đổi sẽ bị mất hoàn toàn. •" -#: app/gui.c:577 app/gui.c:592 app/gui.c:607 app/gui.c:625 -#: app/sample-editor.c:1928 app/sample-editor.c:1977 -msgid "Are you sure you want to overwrite the file?" -msgstr "Bạn có chắc muốn ghi đè lên tập tin này không?" +#: app/drivers/alsa1x.c:1345 +msgid "Unable to set sw params for capture" +msgstr "" -#: app/gui.c:638 -msgid "Error when opening pattern file!" -msgstr "• Gặp lá»—i khi mở tập tin mẫu. •" +#: app/drivers/alsa1x.c:1352 +#, fuzzy +msgid "Unable to prepare playback" +msgstr "Không thể chuẩn bị kênh ALSA.\n" -#: app/gui.c:651 -msgid "" -"The length of the pattern being loaded doesn't match with that of current " -"pattern in module.\n" -"Do you want to change the current pattern length?" +#: app/drivers/alsa1x.c:1353 +#, fuzzy +msgid "Unable to prepare capture" +msgstr "Không thể chuẩn bị kênh ALSA.\n" + +#: app/drivers/alsa1x.c:1371 +msgid "Unable to obtain poll descriptors for playback" msgstr "" -"Mẫu Ä‘ang được tải không có cùng má»™t Ä‘á»™ dài vá»›i mẫu hiện thá»i trong mô-Ä‘un.\n" -"Bạn có muốn thay đổi Ä‘á»™ dài của mẫu hiện thá»i không?" -#: app/gui.c:1719 -msgid "SoundTracker Startup" -msgstr "Khởi chạy Bá»™ Theo dõi Âm thanh" +#: app/drivers/alsa1x.c:1380 +msgid "Unable to start capture" +msgstr "" -#: app/gui.c:1778 app/gui.c:1815 -msgid "Loading..." -msgstr "Äang tải..." +#: app/drivers/dummy-drivers.c:40 +msgid "No driver available for your system." +msgstr "" -#: app/gui.c:1804 -msgid "Use SoundTracker!" -msgstr "Sá»­ dụng Bá»™ Theo dõi Âm thanh nhé. :)" +#: app/drivers/irix-output.c:98 +msgid "no settings (yet), sorry!" +msgstr "chÆ°a thiết lập gì." -#: app/gui.c:1862 -msgid "Load XM..." -msgstr "Tải XM..." - -#: app/gui.c:1864 -msgid "Save XM..." -msgstr "LÆ°u XM..." +#: app/drivers/irix-output.c:173 +msgid "ALnewconfig() failed." +msgstr "" -#: app/gui.c:1867 -msgid "Render module as WAV..." -msgstr "Vẽ mô-Ä‘un là WAV..." +#: app/drivers/irix-output.c:178 +#, fuzzy +msgid "16 Bit output not supported." +msgstr "ChÆ°a há»— trợ thao tác." -#: app/gui.c:1870 -msgid "Save song as XM..." -msgstr "LÆ°u bài hát dạng XM..." +#: app/drivers/irix-output.c:184 +#, fuzzy +msgid "Stereo output not supported." +msgstr "ChÆ°a há»— trợ thao tác." -#: app/gui.c:1872 -msgid "Load current pattern..." -msgstr "Tải mẫu hiện có..." +#: app/drivers/irix-output.c:192 +#, fuzzy +msgid "Couldn't open audio port." +msgstr "" +"Không thể mở %s để lấy mẫu :\n" +"%s" -#: app/gui.c:1874 -msgid "Save current pattern..." -msgstr "LÆ°u mẫu hiện có..." +#: app/drivers/oss.c:130 +#, fuzzy +msgid "OSS input: reading error" +msgstr "Chuyển đổi nhạc khí" -#: app/gui.c:1944 -msgid "Play Song" -msgstr "Phát bài hát" +#: app/drivers/oss.c:137 +msgid "OSS input: out of memory error" +msgstr "" -#: app/gui.c:1956 -msgid "Play Pattern" -msgstr "Phát mẫu" +#: app/drivers/oss.c:171 app/drivers/sun-output.c:134 +#, c-format +msgid "Estimated audio delay: %f milliseconds" +msgstr "Trì hoãn âm thanh xấp xỉ: %f mili-giây" -#: app/gui.c:1968 -msgid "Stop" -msgstr "Dừng" +#: app/drivers/oss.c:210 app/drivers/sun-output.c:171 +#, c-format +msgid "(%d samples)" +msgstr "(%d mẫu)" -#: app/gui.c:1973 -msgid "Pat" -msgstr "Mẫu" +#: app/drivers/oss.c:247 +msgid "Input device (e.g. '/dev/dsp'):" +msgstr "Thiết bị nhập (v.d. ):" -#: app/gui.c:1979 -msgid "Edited pattern" -msgstr "Mẫu đã sá»­a đổi" +#: app/drivers/oss.c:248 +msgid "Output device (e.g. '/dev/dsp'):" +msgstr "Thiết bị xuất (v.d. ):" -#: app/gui.c:1992 -msgid "When enabled, browsing the playlist does not change the edited pattern." +#: app/drivers/oss.c:385 +msgid "OSS driver: setting format failed" msgstr "" -"Khi bật, việc duyệt qua danh mục nhạc không thay đổi mẫu đã hiệu chỉnh." - -#: app/gui.c:2008 -msgid "Number of Channels:" -msgstr "Số kênh:" -#: app/gui.c:2025 -msgid "Pattern Length" -msgstr "Dài mẫu" +#: app/drivers/oss.c:398 +msgid "OSS driver: setting number of channels failed" +msgstr "" -#: app/gui.c:2060 -msgid "Set preferred accidental type" -msgstr "Äặt kiểu dấu thăng giáng bất thÆ°á»ng đã muốn" +#: app/drivers/oss.c:445 +#, fuzzy, c-format +msgid "OSS driver (%s): Couldn't open %s" +msgstr "" +"Không thể mở %s để lấy mẫu :\n" +"%s" -#: app/gui.c:2066 -msgid "Measure" -msgstr "Äo" +#: app/drivers/oss.c:480 +#, fuzzy, c-format +msgid "Required %s format not supported." +msgstr "ChÆ°a há»— trợ kiểu dạng thức xuất âm thanh cần thiết.\n" -#: app/gui.c:2067 -msgid "Enable row highlighting" -msgstr "Bật tô sáng hàng" +#: app/drivers/jack.c:367 +#, c-format +msgid "Running at %d Hz with %d frames" +msgstr "Äang chạy tại %d Hz vá»›i %d khung" -#: app/gui.c:2093 -msgid "Other..." -msgstr "Khác..." +#: app/drivers/jack.c:371 +msgid "Jack server not running?" +msgstr "Trình phục vụ Jack có chạy chÆ°a?" -#: app/gui.c:2129 -msgid "Change effect column editing direction" -msgstr "Thay đổi hÆ°á»›ng hiệu chỉnh cá»™t hiệu ứng" +#: app/drivers/jack.c:403 +#, c-format +msgid "" +"Jack driver error:\n" +"%s" +msgstr "" -#: app/gui.c:2160 -msgid "Global amplification" -msgstr "Khuếch đại toàn cục" +#: app/drivers/jack.c:462 +msgid "Jack driver activation failed." +msgstr "" -#: app/gui.c:2196 -msgid "Pitchbend" -msgstr "Pitchbend" +#: app/drivers/jack.c:542 +msgid "Update" +msgstr "" -#: app/gui.c:2204 -msgid "Reset pitchbend to its normal value" -msgstr "Phục hồi giá trị gốc của cong cao giá»ng (pitchbend)" +#: app/drivers/jack.c:551 +msgid "Jack autostart" +msgstr "" -#: app/gui.c:2216 -msgid "Editing" -msgstr "HIệu chỉnh" +#: app/drivers/jack.c:562 +msgid "declick" +msgstr "bá» nhắp" -#: app/gui.c:2223 -msgid "Octave" -msgstr "Quãng tám" +#: app/drivers/jack.c:610 +#, fuzzy +msgid "Jack server is not running or some error occured." +msgstr "Trình phục vụ Jack có chạy chÆ°a?" -#: app/gui.c:2232 -msgid "Jump" -msgstr "BÆ°á»›c" +#: app/drivers/sdl-output.c:76 +#, fuzzy +msgid "Experimental SDL support." +msgstr "ChÆ°a há»— trợ thao tác." -#: app/gui.c:2241 -msgid "Instr" -msgstr "Khí" +#: app/drivers/sun-output.c:212 +msgid "Output device (e.g. '/dev/audio'):" +msgstr "Thiết bị xuất (v.d. ):" -#: app/gui.c:2257 -msgid "Sample" -msgstr "Mẫu" +#: app/drivers/sun-output.c:385 +#, c-format +msgid "SUN output (%s): Cannot open device" +msgstr "" -#: app/gui.c:2296 -msgid "Welcome to SoundTracker!" -msgstr "Chào mừng dùng Bá»™ Theo dõi Âm thanh." +#: app/drivers/sun-output.c:393 +#, c-format +msgid "SUN output (%s) does not support playback" +msgstr "" -#: app/gui.c:2323 -msgid "%M:%S" -msgstr "%M:%S" +#: app/drivers/sun-output.c:402 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot handle %d Hz" +msgstr "%s: không thể quản lý %dHz (%s)" -#: app/instrument-editor.c:81 -msgid "VolFade" -msgstr "MỠâm" +#: app/drivers/sun-output.c:432 +#, fuzzy, c-format +msgid "SUN output (%s): Required sound encoding not supported" +msgstr "%s: chÆ°a há»— trợ cách mã hoá âm thanh cần thiết.\n" -#: app/instrument-editor.c:82 -msgid "VibSpeed" -msgstr "Tốc Ä‘á»™ rung" +#: app/drivers/sun-output.c:455 +#, fuzzy, c-format +msgid "SUN output (%s): Cannot set block size" +msgstr "%s: không thể đặt kích cỡ khối (%s)" -#: app/instrument-editor.c:83 -msgid "VibDepth" -msgstr "Sâu rung" +#: app/drivers/sun-output.c:462 app/drivers/sun-input.c:339 +#, c-format +msgid "SUN input (%s): Cannot get device information" +msgstr "" -#: app/instrument-editor.c:84 -msgid "VibSweep" -msgstr "Quét rung" +#: app/drivers/sun-input.c:77 +#, fuzzy +msgid "SUN input: reading error" +msgstr "Chuyển đổi nhạc khí" -#: app/instrument-editor.c:163 app/instrument-editor.c:186 -msgid "Can't open file." -msgstr "Không thể mở tập tin." +#: app/drivers/sun-input.c:84 +msgid "SUN input: out of memory error" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Sine" -msgstr "Sin" +#: app/drivers/sun-input.c:131 +msgid "Input device (e.g. '/dev/audio'):" +msgstr "Thiết bị nhập (v.d. ):" -#: app/instrument-editor.c:229 -msgid "Square" -msgstr "Vuông" +#: app/drivers/sun-input.c:246 +#, c-format +msgid "SUN input (%s): Cannot open device" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Down" -msgstr "CÆ°a xuống" +#: app/drivers/sun-input.c:254 +#, c-format +msgid "SUN input (%s) does not support full-duplex operation" +msgstr "" -#: app/instrument-editor.c:229 -msgid "Saw Up" -msgstr "CÆ°a lên" +#: app/drivers/sun-input.c:264 +#, c-format +msgid "SUN input (%s) does not support recording" +msgstr "" -#: app/instrument-editor.c:233 -msgid "Instrument Editor" -msgstr "Bá»™ hiệu chỉnh nhạc khí" +#: app/drivers/sun-input.c:273 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot handle %d Hz" +msgstr "%s: không thể quản lý %dHz (%s)" -#: app/instrument-editor.c:242 -msgid "Volume envelope" -msgstr "Bá»™ bao âm lượng" +#: app/drivers/sun-input.c:304 +#, fuzzy, c-format +msgid "SUN input (%s): Required sound encoding not supported." +msgstr "%s: chÆ°a há»— trợ cách mã hoá âm thanh cần thiết.\n" -#: app/instrument-editor.c:250 -msgid "Panning envelope" -msgstr "Bá»™ bao kéo ngang" +#: app/drivers/sun-input.c:332 +#, fuzzy, c-format +msgid "SUN input (%s): Cannot set block size" +msgstr "%s: không thể đặt kích cỡ khối (%s)" -#: app/instrument-editor.c:267 -msgid "Load Instrument..." -msgstr "Tải nhạc khí" +#: app/envelope-box.c:1279 app/gui.c:2589 +msgid "Length" +msgstr "Dài" -#: app/instrument-editor.c:269 -msgid "Save Instrument..." -msgstr "LÆ°u nhạc khí..." +#: app/envelope-box.c:1280 +msgid "Current" +msgstr "Hiện có" -#: app/instrument-editor.c:271 -msgid "Load XI" -msgstr "Tải XI" +#: app/envelope-box.c:1281 +msgid "Offset" +msgstr "Hiệu số" -#: app/instrument-editor.c:277 -msgid "Save XI" -msgstr "LÆ°u XI" +#: app/envelope-box.c:1282 +msgid "Value" +msgstr "Giá trị" -#: app/instrument-editor.c:296 -msgid "Vibrato Type:" -msgstr "Kiểu vi-bợ-ră-tá»™ :" +#: app/envelope-box.c:1288 app/playlist.c:503 +msgid "Insert" +msgstr "Chèn" -#: app/instrument-editor.c:368 -msgid "Note:" -msgstr "Nốt:" +#: app/envelope-box.c:1294 app/playlist.c:509 +msgid "Delete" +msgstr "Xoá bá»" -#: app/instrument-editor.c:386 -msgid "Initialize" -msgstr "Sở khởi" +#: app/envelope-box.c:1369 +#, fuzzy +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only with\n" +"GooCanvas" +msgstr "" +"Bá»™ hiệu\n" +"chỉnh\n" +"bao bá»c\n" +"đồ há»a\n" +"chỉ trong\n" +"phiên bản GNOME" -#: app/keys.c:57 -msgid "" -msgstr "" +#: app/envelope-box.c:1384 +msgid "Sustain" +msgstr "Kéo dài" -#: app/keys.c:129 -msgid "The key that inserts the special keyoff note for FastTracker modules." -msgstr "Phím chèn nốt kiểu ra phím đặc biệt cho mô-Ä‘un FastTracker." +#: app/envelope-box.c:1392 +msgid "Point" +msgstr "Äiểm" -#: app/keys.c:131 -msgid "The key that increases \"jump\" value." -msgstr "Phím tăng giá trị « bÆ°á»›c »." +#: app/envelope-box.c:1394 +msgid "Loop" +msgstr "Lặp lặp" -#: app/keys.c:133 -msgid "The key that decreases \"jump\" value." -msgstr "Phím giảm giá trị « bÆ°á»›c »." +#: app/envelope-box.c:1402 app/sample-editor.c:441 +msgid "Start" +msgstr "Äầu" -#: app/keys.c:145 -msgid "Upper Octave Keys..." -msgstr "Phím quãng tám trên..." +#: app/envelope-box.c:1403 app/sample-editor.c:442 +msgid "End" +msgstr "Cuối" -#: app/keys.c:146 +#: app/file-operations.c:127 +#, c-format msgid "" -"These are the keys on the upper half of the keyboard. The c key is normally " -"the key to the right of the TAB key. The rest of the keys should be ordered " -"in a piano keyboard fashion, including the number keys row above." +"The file named \"%s\" already exists.\n" +"Do you want to replace it?" msgstr "" -"Những phím này chiếm phần hai trên của bàn phím. Phím C thÆ°á»ng là phím bên " -"phải phím Tab. Các phím còn lại nên theo thứ tá»± pianô, gồm hàng phím số bên " -"trên." -#: app/keys.c:152 -msgid "Lower Octave Keys..." -msgstr "Phím quãng tám dÆ°á»›i..." +#: app/file-operations.c:225 +msgid "All supported types" +msgstr "" -#: app/keys.c:153 -msgid "" -"These are the keys on the lower half of the keyboard. The c key is normally " -"the first character key to the right of the left Shift key. The rest of the " -"keys should be ordered in a piano keyboard fashion, including the row above." +#: app/file-operations.c:245 +msgid "All files" msgstr "" -"Những phím này chiếm phần hai dÆ°á»›i của bàn phím. Phím C thÆ°á»ng là phím bên " -"phải phím Shift trái. Các phím còn lại nên theo thứ tá»± pianô, gồm hàng bên " -"trên." -#: app/keys.c:159 -msgid "Other Keys..." -msgstr "Phím khác..." +#: app/file-operations.c:388 +msgid "File" +msgstr "Tập tin" -#: app/keys.c:160 -msgid "Various other keys" -msgstr "Nhiá»u phím khác nhau" +#: app/gui-settings.c:293 +msgid "Classic ST" +msgstr "" -#: app/keys.c:513 -msgid "Function" -msgstr "Chức năng" +#: app/gui-settings.c:293 +msgid "FT2" +msgstr "" -#: app/keys.c:514 -msgid "Assignment" -msgstr "Cách gán" +#: app/gui-settings.c:293 +#, fuzzy +msgid "Mixed" +msgstr "Bá»™ hoà tiếng" -#: app/keys.c:523 app/keys.c:526 -msgid "Keyboard Configuration" -msgstr "Cấu hình Bàn phím" +#: app/gui-settings.c:309 +msgid "GUI Configuration" +msgstr "Cấu hình giao diện" -#: app/keys.c:575 -msgid "Key Group Explanation" -msgstr "Mô tả nhóm phím" +#: app/gui-settings.c:321 +msgid "Scopes Frequency" +msgstr "Tần số phạm vị" -#: app/keys.c:592 -msgid "Key Explanation" -msgstr "Mô tả phím" +#: app/gui-settings.c:326 +msgid "Tracker Frequency" +msgstr "Tần số bá»™ theo dõi" -#: app/keys.c:623 -msgid "Modifiers:" -msgstr "Phím sá»­a đổi:" +#: app/gui-settings.c:331 +msgid "Hexadecimal row numbers" +msgstr "Số thứ tá»± hàng thập lục" -#: app/keys.c:649 -msgid "Learn selected key" -msgstr "Há»c biết phím được chá»n" +#: app/gui-settings.c:337 +msgid "Use upper case letters for hex numbers" +msgstr "Hiện số thập lục bằng chữ hoa" -#: app/keys.c:655 -msgid "Learn all keys" -msgstr "Há»c biết má»i phím" +#: app/gui-settings.c:343 +#, fuzzy +msgid "FT2-like volume column" +msgstr "Trượt lên âm lượng tế nhị" -#: app/keys.c:661 -msgid "" -"Please press the desired key combination!\n" -"Click into left list to cancel" +#: app/gui-settings.c:349 +msgid "Use symbols in the volume column" msgstr "" -"Hãy bấm tổ hợp phím đã muốn.\n" -"Nhắp vào danh sách trái để thôi." -#: app/keys.c:691 app/menubar.c:104 app/sample-editor.c:2472 -#: app/midi-settings-050.c:635 app/midi-settings-09x.c:638 -msgid "Ok" -msgstr "Äược" - -#: app/keys.c:701 app/midi-settings-050.c:636 app/midi-settings-09x.c:639 -msgid "Apply" -msgstr "Ãp dụng" +#: app/gui-settings.c:355 +msgid "Leave Tone Porta as symbol \"m\"" +msgstr "" -#: app/keys.c:771 -msgid "" -"The keyboard configuration file is defective.\n" -"Please use the Keyboard Configuration dialog." +#: app/gui-settings.c:361 +msgid "Decimal volume representation" msgstr "" -"Tập tin cấu hình bàn phím là sai.\n" -"Hãy sá»­ dụng há»™p thoại Cấu hình Bàn phím." -#: app/keys.c:1000 -#, c-format -msgid "CH%02d" -msgstr "CH%02d" +#: app/gui-settings.c:367 +msgid "Asynchronous (IT-style) pattern editing" +msgstr "Cách hiệu chỉnh mẫu không đồng bá»™ (kiểu IT)" -#: app/keys.c:1001 -#, c-format -msgid "Fast jump to channel %d" -msgstr "BÆ°á»›c nhanh tá»›i kênh %d" +#: app/gui-settings.c:373 +msgid "Polyphonic try (non-editing) mode" +msgstr "" -#: app/keys.c:1076 -msgid "" -"Automatic key configuration unsuccessful.\n" -"Please use the Keyboard Configuration dialog\n" -"in the Settings menu." +#: app/gui-settings.c:379 +msgid "Record keyreleases" msgstr "" -"Việc tá»± Ä‘á»™ng cấu hình phím bị lá»—i.\n" -"Hãy sá»­ dụng há»™p thoại Cấu hình Bàn phím\n" -"trong trình Ä‘Æ¡n Thiết lập." -#: app/menubar.c:140 -msgid "" -"Are you sure you want to do this?\n" -"All changes will be lost!" +#: app/gui-settings.c:388 +msgid "Human-made delay compensation [s]" msgstr "" -"Bạn có chắc là muốn làm việc này không?\n" -"Má»i thay đổi sẽ bị mất hoàn toàn." -#: app/menubar.c:162 -msgid "" -"Are you sure you want to quit?\n" -"All changes will be lost!" +#: app/gui-settings.c:398 +msgid "Record precise timings" msgstr "" -"Bạn có chắc muốn thoát không?\n" -"Má»i thay đổi sẽ bị mất hoàn toàn." -#: app/menubar.c:419 -msgid "_Open..." -msgstr "_Mở..." +#: app/gui-settings.c:400 +msgid "Use FXes to record note press/release timings with tick accuracy" +msgstr "" -#: app/menubar.c:421 -msgid "Save _as..." -msgstr "LÆ°u _dạng..." +#: app/gui-settings.c:406 +msgid "Fxx command updates Tempo/BPM sliders" +msgstr "Lệnh Fxx cập nhật các bá»™ trượt Nhịp Äá»™/NMG" -#: app/menubar.c:427 -msgid "Save Module as _WAV..." -msgstr "LÆ°u mô-Ä‘un dạng _WAV..." +#: app/gui-settings.c:412 +msgid "Emulate FastTracker Rxx bug" +msgstr "" -#: app/menubar.c:429 -msgid "Save XM without samples..." -msgstr "LÆ°u XM không có mẫu..." +#: app/gui-settings.c:418 +msgid "Switch to tracker after loading/saving" +msgstr "Chuyển sang bá»™ theo dõi sau khih tải/lÆ°u" -#: app/menubar.c:434 -msgid "_Quit" -msgstr "T_hoát" +#: app/gui-settings.c:424 +msgid "Automatically add file extensions" +msgstr "" -#: app/menubar.c:441 -msgid "Clear _All" -msgstr "Xoá _hết" +#: app/gui-settings.c:430 +msgid "Save window geometry on exit" +msgstr "LÆ°u vị trí cá»­a sổ khi thoát" -#: app/menubar.c:443 -msgid "Clear _Patterns Only" -msgstr "Xoá chỉ các _mẫu" +#: app/gui-settings.c:436 +msgid "Use note name B instead of H" +msgstr "Sá»­ dụng tên nốt B thay vào H" -#: app/menubar.c:448 -msgid "_Optimize Module" -msgstr "_Ưu tiên hóa mô-Ä‘un" +#: app/gui-settings.c:442 +msgid "Save and restore permanent channels" +msgstr "" -#: app/menubar.c:455 app/menubar.c:466 app/menubar.c:522 app/menubar.c:556 -msgid "C_ut" -msgstr "Cắ_t" - -#: app/menubar.c:457 app/menubar.c:468 app/menubar.c:524 app/menubar.c:558 -msgid "_Copy" -msgstr "_Chép" - -#: app/menubar.c:459 app/menubar.c:470 app/menubar.c:560 -msgid "_Paste" -msgstr "_Dán" +#: app/gui-settings.c:451 +msgid "" +"Classis ST: only Ctrl + B to start/stop marking a block;\n" +"FT2: marking by SHIFT + arrows;\n" +"Mixed: marking is started by SHIFT + arrows,\n" +"stopped by Ctrl + B.\n" +"In the FT2 and Mixed modes Ctrl + B\n" +"can also be used to start marking." +msgstr "" -#: app/menubar.c:475 -msgid "_Kill notes" -msgstr "_Buá»™c kết thúc nốt" +#: app/gui-settings.c:456 +#, fuzzy +msgid "Selection mode" +msgstr "Vùng chá»n:" -#: app/menubar.c:480 -msgid "_Insert track" -msgstr "_Chèn rãnh" +#: app/gui-settings.c:472 +msgid "Scopes buffer size [MB]" +msgstr "Kích cỡ bá»™ đệm phạm vị [MB]" -#: app/menubar.c:482 -msgid "_Delete track" -msgstr "_Xoá bá» rãnh" +#: app/gui-settings.c:481 +#, fuzzy +msgid "Sample displays' mode" +msgstr "Mẫu đã được tải." -#: app/menubar.c:487 -msgid "Increment cmd value" -msgstr "Tăng dần giá trị lệnh" +#: app/gui-settings.c:484 +msgid "Scopes" +msgstr "" -#: app/menubar.c:489 -msgid "Decrement cmd value" -msgstr "Giảm dần giá trị lệnh" +#: app/gui-settings.c:486 +#, fuzzy +msgid "Editor" +msgstr "_Hiệu chỉnh" -#: app/menubar.c:496 -msgid "_Mark mode" -msgstr "Chế Ä‘á»™ đánh _dấu" +#: app/gui-settings.c:490 +msgid "Strobo" +msgstr "" -#: app/menubar.c:498 app/menubar.c:554 -msgid "C_lear block marks" -msgstr "X_oá các dấu khối" +#: app/gui-settings.c:492 +msgid "Fast, but not so much accurate method for waveforms' drawing" +msgstr "" -#: app/menubar.c:503 app/menubar.c:562 -msgid "_Interpolate effects" -msgstr "Ná»™i _suy hiệu ứng" +#: app/gui-settings.c:494 +msgid "Minmax" +msgstr "" -#: app/menubar.c:508 -msgid "Transpose half-note up" -msgstr "Äổi chá»— ná»­a nốt lên" +#: app/gui-settings.c:496 +msgid "More realistic waveform drawing method with higher CPU load" +msgstr "" -#: app/menubar.c:510 -msgid "Transpose half-note down" -msgstr "Äổi chá»— ná»­a nốt xuống" +#: app/gui-settings.c:511 +msgid "Track line format:" +msgstr "Dạng thức Ä‘Æ°á»ng theo dõi :" -#: app/menubar.c:512 -msgid "Transpose octave up" -msgstr "Äổi chố quãng tám lên" +#: app/gui-settings.c:572 +msgid "Color scheme" +msgstr "" -#: app/menubar.c:514 -msgid "Transpose octave down" -msgstr "Äổi chố quãng tám xuống" +#: app/gui-settings.c:573 +#, fuzzy +msgid "Tracker colors configuration" +msgstr "Cấu hình Bàn phím" -#: app/menubar.c:526 -msgid "P_aste" -msgstr "D_án" +#: app/gui-subs.c:34 app/gui.c:2975 +msgid "Ready." +msgstr "Sẵn sàng." -#: app/menubar.c:531 -msgid "_Jazz Edit Mode" -msgstr "Chế Ä‘á»™ hiệu chỉnh nhạc _ja" +#: app/gui-subs.c:35 +msgid "Playing song..." +msgstr "Äang phát bài hát..." -#: app/menubar.c:534 -msgid "_Record keyreleases" -msgstr "" +#: app/gui-subs.c:36 +msgid "Playing pattern..." +msgstr "Äang phát mẫu..." -#: app/menubar.c:539 -msgid "Transp_osition..." -msgstr "Äổi ch_á»—..." +#: app/gui-subs.c:37 +msgid "Loading module..." +msgstr "Äang tải mô-Ä‘un..." -#: app/menubar.c:544 app/menubar.c:569 app/menubar.c:707 -msgid "_Pattern" -msgstr "_Mẫu" +#: app/gui-subs.c:38 +msgid "Module loaded." +msgstr "Mô-Ä‘un đã được tải." -#: app/menubar.c:545 app/menubar.c:570 app/menubar.c:708 -msgid "_Track" -msgstr "_Rãnh" - -#: app/menubar.c:546 app/menubar.c:571 -msgid "_Selection" -msgstr "Vùng _chá»n" - -#: app/menubar.c:578 -msgid "_Find Unused Pattern" -msgstr "Tìm mẫu kh_ông dùng" +#: app/gui-subs.c:39 +msgid "Saving module..." +msgstr "Äang lÆ°u mô-Ä‘un..." -#: app/menubar.c:580 -msgid "_Copy Current to Unused Pattern" -msgstr "_Chép Ä‘iá»u hiện thá»i vào mẫu không dùng" +#: app/gui-subs.c:40 +msgid "Module saved." +msgstr "Mô-Ä‘un đã được lÆ°u." -#: app/menubar.c:585 -msgid "C_lear Unused Patterns" -msgstr "X_oá các mẫu không dùng" +#: app/gui-subs.c:41 +msgid "Loading sample..." +msgstr "Äang tải mẫu..." -#: app/menubar.c:587 -msgid "_Pack Patterns" -msgstr "_Nén mẫu" +#: app/gui-subs.c:42 +msgid "Sample loaded." +msgstr "Mẫu đã được tải." -#: app/menubar.c:592 -msgid "_Save Current Pattern" -msgstr "_LÆ°u mẫu hiện có" +#: app/gui-subs.c:43 +msgid "Saving sample..." +msgstr "Äang lÆ°u mẫu..." -#: app/menubar.c:594 -msgid "L_oad Pattern" -msgstr "Tải _mẫu" +#: app/gui-subs.c:44 +msgid "Sample saved." +msgstr "Mẫu đã được lÆ°u." -#: app/menubar.c:599 -msgid "Sh_rink Current Pattern" -msgstr "Thu hẹ_p mẫu hiện có" +#: app/gui-subs.c:45 +msgid "Loading instrument..." +msgstr "Äang tải nhạc khí..." -#: app/menubar.c:601 -msgid "_Expand Current Pattern" -msgstr "Mở _rá»™ng mẫu hiện có" +#: app/gui-subs.c:46 +msgid "Instrument loaded." +msgstr "Nhạc khí đã được tải." -#: app/menubar.c:608 -msgid "_Toggle Current Channel Permanentness" -msgstr "" +#: app/gui-subs.c:47 +msgid "Saving instrument..." +msgstr "Äang lÆ°u nhạc khí..." -#: app/menubar.c:610 -msgid "Toggle _All Channels Permanentness" -msgstr "" +#: app/gui-subs.c:48 +msgid "Instrument saved." +msgstr "Nhạc khí đã được lÆ°u." -#: app/menubar.c:618 -msgid "_Load XI..." -msgstr "_Tải XI..." +#: app/gui-subs.c:49 +msgid "Saving song..." +msgstr "Äang lÆ°u bài hát..." -#: app/menubar.c:620 -msgid "_Save XI..." -msgstr "_LÆ°u XI..." +#: app/gui-subs.c:50 +msgid "Song saved." +msgstr "Bài hát đã được lÆ°u." -#: app/menubar.c:625 -msgid "_Clear Current" -msgstr "X_oá Ä‘iá»u hiện có" +#: app/gui-subs.c:396 app/gui-subs.h:224 +msgid "Error!" +msgstr "• Lá»—i •" -#: app/menubar.c:630 -msgid "_Delete Unused Instruments" -msgstr "_Xoá bá» các nhạc khí không dùng" +#: app/gui-subs.c:414 +msgid "Question" +msgstr "Câu há»i" -#: app/menubar.c:637 -msgid "_Flicker-free scrolling" -msgstr "C_uá»™n miá»…n lung linh" +#: app/gui-subs.c:433 app/gui-subs.c:454 +#, c-format +msgid "" +"An error occured when filename character set conversion:\n" +"%s\n" +"The file operation probably failed." +msgstr "" -#: app/menubar.c:640 -msgid "_Previous font" -msgstr "Phông chữ t_rÆ°á»›c" +#: app/gui-subs.c:488 +#, c-format +msgid "" +"%s.\n" +"Loading widgets' description from %s file failed!\n" +msgstr "" -#: app/menubar.c:642 -msgid "_Next font" -msgstr "Phông chữ _kế" +#: app/gui-subs.c:633 +#, c-format +msgid "GUI creation error: Widget '%s' is not found in %s file." +msgstr "" -#: app/menubar.c:647 -msgid "Change preferred _accidental type" -msgstr "Äổi kiểu dấu th_ăng giáng bất thÆ°á»ng đã muốn" +#: app/gui-subs.h:223 +msgid "Warning" +msgstr "Cảnh báo" -#: app/menubar.c:649 -msgid "Change effect column editing _direction" -msgstr "Äổi h_Æ°á»›ng hiệu chỉnh cá»™t hiệu ứng" +#: app/gui-subs.h:225 +#, fuzzy +msgid "Information" +msgstr "Cấu hình giao diện" -#: app/menubar.c:657 -msgid "Display _Oscilloscopes" -msgstr "Hiện các cái nghiệm d_ao Ä‘á»™ng" +#: app/gui.c:251 app/gui.c:2666 +msgid "Row highlighting configuration" +msgstr "Cấu hình tô sáng hàng" -#: app/menubar.c:660 -msgid "_Tracker" -msgstr "Bá»™ th_eo dõi" +#: app/gui.c:260 +msgid "Highlight rows (major / minor):" +msgstr "Tô sáng hàng (lá»›n / nhá»):" -#: app/menubar.c:664 -msgid "_Keyboard Configuration..." -msgstr "Cấu hình _Bàn phím..." - -#: app/menubar.c:666 -msgid "_Audio Configuration..." -msgstr "Cấu hình _Âm thanh..." - -#: app/menubar.c:668 -msgid "_GUI Configuration..." -msgstr "_Cấu hình g_iao diện..." - -#: app/menubar.c:674 -msgid "_MIDI Configuration..." -msgstr "Cấu hình _MIDI..." +#: app/gui.c:330 +msgid "" +msgstr "" -#: app/menubar.c:679 -msgid "Disable splash screen" -msgstr "Tắt màn hình giật gân" +#: app/gui.c:451 +#, fuzzy +msgid "Saving module failed" +msgstr "Äang lÆ°u mô-Ä‘un..." -#: app/menubar.c:681 -msgid "_Save Settings now" -msgstr "_LÆ°u thiết lập ngay" +#: app/gui.c:535 +msgid "File output" +msgstr "" -#: app/menubar.c:683 -msgid "Save Settings on _Exit" -msgstr "LÆ°u thiết lập khi t_hoát" +#: app/gui.c:612 +#, fuzzy +msgid "Can't open file for writing" +msgstr "Không thể mở tập tin để ghi." -#: app/menubar.c:690 -msgid "_About..." -msgstr "_Giá»›i thiệu..." +#: app/gui.c:618 +#, fuzzy +msgid "Can't change file ownership" +msgstr "Không thể mở tập tin để ghi." -#: app/menubar.c:695 -msgid "Show _Tips..." -msgstr "Hiện _mẹo..." +#: app/gui.c:624 +msgid "Can't allocate mix buffer." +msgstr "" -#: app/menubar.c:697 -msgid "_XM Effects..." -msgstr "Hiệu ứng _XM..." +#: app/gui.c:660 +msgid "An error occured while writing to file" +msgstr "" -#: app/menubar.c:704 -msgid "_File" -msgstr "_Tập tin" +#: app/gui.c:691 +msgid "" +"Odd pattern rows contain data which will be lost after shrinking.\n" +"Do you want to continue anyway?" +msgstr "" +"Các hàng mẫu lẻ chứa dữ liệu sẽ bị mất sau khi thu hẹp.\n" +"Bạn vẫn còn muốn tiếp tục không?" -#: app/menubar.c:705 -msgid "_Module" -msgstr "_Mô-Ä‘un" +#: app/gui.c:715 +msgid "" +"The pattern is too long for expanding.\n" +"Some data at the end of the pattern will be lost.\n" +"Do you want to continue anyway?" +msgstr "" +"Mẫu quá dài để mở rá»™ng.\n" +"Má»™t số dữ liệu tại cuá»—i mẫu này sẽ bị mất. Bạn vẫn còn muốn tiếp tục không?" -#: app/menubar.c:706 -msgid "_Edit" -msgstr "_Hiệu chỉnh" +#: app/gui.c:757 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"Bạn có chắc muốn giải phóng dá»± án hiện thá»i không?\n" +"• Má»i thay đổi sẽ bị mất hoàn toàn. •" -#: app/menubar.c:709 -msgid "_Instrument" -msgstr "Nhạc _khí" +#: app/gui.c:810 +#, fuzzy, c-format +msgid "Error when opening pattern file %s!" +msgstr "• Gặp lá»—i khi mở tập tin mẫu. •" -#: app/menubar.c:710 -msgid "_Settings" -msgstr "Thiết _lập" +#: app/gui.c:829 +msgid "" +"The length of the pattern being loaded doesn't match with that of current " +"pattern in module.\n" +"Do you want to change the current pattern length?" +msgstr "" +"Mẫu Ä‘ang được tải không có cùng má»™t Ä‘á»™ dài vá»›i mẫu hiện thá»i trong mô-Ä‘un.\n" +"Bạn có muốn thay đổi Ä‘á»™ dài của mẫu hiện thá»i không?" -#: app/menubar.c:711 -msgid "_Help" -msgstr "Trợ _giúp" +#: app/gui.c:2124 +#, fuzzy, c-format +msgid "%s Startup" +msgstr "Äầu" -#: app/mixers/integer32.c:493 -msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" -msgstr "Bá»™ hoà tiếng số nguyên, không ná»™i suy, không lá»c, Ä‘á»™ dài mẫu tối Ä‘a 1M" +#: app/gui.c:2178 app/gui.c:2206 +msgid "Loading..." +msgstr "Äang tải..." -#: app/module-info.c:115 -msgid "Instrument Name" -msgstr "Tên nhạc khí" +#: app/gui.c:2195 +msgid "Use SoundTracker!" +msgstr "Sá»­ dụng Bá»™ Theo dõi Âm thanh nhé. :)" -#: app/module-info.c:115 -msgid "#smpl" -msgstr "#mẫu" +#: app/gui.c:2216 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"Bạn có chắc muốn thoát không?\n" +"Má»i thay đổi sẽ bị mất hoàn toàn." -#: app/module-info.c:116 -msgid "Sample Name" -msgstr "Tên mẫu" +#: app/gui.c:2279 +msgid "Amplification estimation" +msgstr "" -#: app/module-info.c:117 -msgid "Linear" -msgstr "Tuyến" +#: app/gui.c:2289 +msgid "" +"You are about to start the procedure for automatic amplification " +"estimation.\n" +"This may take some time." +msgstr "" -# Name: don't translate / Tên: đừng dịch -#: app/module-info.c:117 app/sample-editor.c:235 -msgid "Amiga" -msgstr "Amiga" +#: app/gui.c:2296 +#, fuzzy +msgid "Estimating..." +msgstr "Äang tải..." -#: app/module-info.c:124 -msgid "Module Info" -msgstr "Thông tin mô-Ä‘un" +#: app/gui.c:2391 app/gui.c:2394 +msgid "FastTracker modules (*.xm)" +msgstr "" -#: app/module-info.c:164 -msgid "Songname:" -msgstr "Tên bài hát:" +#: app/gui.c:2392 +msgid "Original SoundTracker modules (*.mod)" +msgstr "" -#: app/module-info.c:179 -msgid "Frequencies:" -msgstr "Tần số :" +#: app/gui.c:2397 app/sample-editor.c:379 +msgid "Microsoft RIFF (*.wav)" +msgstr "" -#: app/module-info.c:184 -msgid "ProTracker Mode" -msgstr "Chế Ä‘á»™ Siêu Theo dõi " +#: app/gui.c:2400 +#, fuzzy +msgid "Extended pattern (*.xp)" +msgstr "Mẫu đã sá»­a đổi" -#: app/module-info.c:395 +#: app/gui.c:2408 #, c-format msgid "" -"Unused patterns: %d (used: %d)\n" -"Unused instruments: %d (used: %d)\n" -"\n" -"Clear unused and reorder playlist?\n" +"%s.\n" +"%s startup is aborted\n" +"Failed GUI description file: %s\n" msgstr "" -"Mẫu không dùng: %d (đã dùng: %d)\n" -"Nạc khí không dùng: %d (đã dùng: %d)\n" -"\n" -"Xoá các Ä‘iá»u không dùng,\n" -"và sắp xếp lại danh mục nhạc không?\n" - -#: app/playlist.c:526 -msgid "Insert pattern that is being edited" -msgstr "Chèn mẫu Ä‘ang được hiệu chỉnh" - -#: app/playlist.c:535 -msgid "Remove current playlist entry" -msgstr "Gỡ bá» mục nhập danh mục nhạc hiện có" -#: app/playlist.c:543 -msgid "Add + Cpy" -msgstr "Thêm và Chép" +#: app/gui.c:2433 +msgid "Load Module" +msgstr "Tải mô-Ä‘un" -#: app/playlist.c:545 -msgid "" -"Add a free pattern behind current position, and copy current pattern to it" +#: app/gui.c:2433 +msgid "Load the selected module into the tracker" msgstr "" -"Thêm má»™t mẫu tá»± do ở sau vị trí hiện có, và sao chép mẫu hiện thá»i vào nó." - -#: app/playlist.c:548 -msgid "Add Free" -msgstr "Thêm Tá»± do" -#: app/playlist.c:550 -msgid "Add a free pattern behind current position" -msgstr "Thêm má»™t mẫu tá»± do ở sau vị trí hiện có" +#: app/gui.c:2434 +msgid "Save Module" +msgstr "LÆ°u mô-Ä‘un" -#: app/playlist.c:560 +#: app/gui.c:2434 #, fuzzy -msgid "Len" -msgstr "Dài" +msgid "Save the current module" +msgstr "LÆ°u mẫu hiện có..." -#: app/playlist.c:574 -msgid "Song length" -msgstr "Dài bài hát" +#: app/gui.c:2436 +msgid "Render WAV" +msgstr "Vẽ WAV" -#: app/playlist.c:580 +#: app/gui.c:2436 #, fuzzy -msgid "Rstrt" -msgstr "Khí" +msgid "Render the current module as WAV file" +msgstr "Vẽ mô-Ä‘un là WAV..." -#: app/playlist.c:593 -msgid "Song restart position" -msgstr "Vị trí phát lại bài hát" +#: app/gui.c:2438 +msgid "Save XM without samples..." +msgstr "LÆ°u XM không có mẫu..." -#: app/preferences.c:74 -msgid "" -"A directory called '.soundtracker' has been created in your\n" -"home directory to store configuration files.\n" -msgstr "" -"Má»›i tạo má»™t thÆ° mục tên <.soundtracker> trong thÆ° mục\n" -"chính của bạn, để lÆ°u các tập tin cấu hình.\n" +#: app/gui.c:2439 +msgid "Load current pattern..." +msgstr "Tải mẫu hiện có..." -#: app/sample-editor.c:234 -msgid "No loop" -msgstr "Không lặp" +#: app/gui.c:2440 +msgid "Save current pattern..." +msgstr "LÆ°u mẫu hiện có..." -#: app/sample-editor.c:236 -msgid "PingPong" -msgstr "PingPong" +#: app/gui.c:2507 +msgid "Play Song" +msgstr "Phát bài hát" -#: app/sample-editor.c:240 app/sample-editor.c:1574 -msgid "8 bits" -msgstr "8 bit" +#: app/gui.c:2516 +msgid "Play Pattern" +msgstr "Phát mẫu" -#: app/sample-editor.c:241 app/sample-editor.c:1574 -msgid "16 bits" -msgstr "16 bit" +#: app/gui.c:2525 +msgid "Play From Cursor" +msgstr "" -#: app/sample-editor.c:247 -msgid "Sample Editor" -msgstr "Bá»™ HIệu chỉnh Mẫu" +#: app/gui.c:2534 +#, fuzzy +msgid "Play Block" +msgstr "Phát bài hát" -#: app/sample-editor.c:287 app/midi-settings-050.c:504 -#: app/midi-settings-09x.c:507 -msgid "Volume" -msgstr "Âm lượng" - -#: app/sample-editor.c:288 -msgid "Panning" -msgstr "Kéo ngang" +#: app/gui.c:2543 +msgid "Stop" +msgstr "Dừng" -#: app/sample-editor.c:289 -msgid "Finetune" -msgstr "Dò chỉnh" +#: app/gui.c:2553 +msgid "Loop Playback" +msgstr "" -#: app/sample-editor.c:309 -msgid "Selection:" -msgstr "Vùng chá»n:" +#: app/gui.c:2562 +msgid "Pat" +msgstr "Mẫu" -#: app/sample-editor.c:313 app/track-editor.c:198 app/track-editor.c:208 -msgid "None" -msgstr "Không có" +#: app/gui.c:2568 +msgid "Edited pattern" +msgstr "Mẫu đã sá»­a đổi" -#: app/sample-editor.c:319 -msgid "All" -msgstr "Tất cả" +#: app/gui.c:2578 +msgid "When enabled, browsing the playlist does not change the edited pattern." +msgstr "" +"Khi bật, việc duyệt qua danh mục nhạc không thay đổi mẫu đã hiệu chỉnh." -#: app/sample-editor.c:340 -msgid "Length:" -msgstr "Dài:" +#: app/gui.c:2583 +msgid "Pattern Length" +msgstr "Dài mẫu" -#: app/sample-editor.c:356 -msgid "Set as loop" -msgstr "Äặt là vòng lặp" +#: app/gui.c:2593 +msgid "Tempo" +msgstr "Nhịp Ä‘á»™" -#: app/sample-editor.c:364 -msgid "RelNote" -msgstr "Nốt_lq" +#: app/gui.c:2605 +msgid "Number of Channels:" +msgstr "Số kênh:" -#: app/sample-editor.c:375 -msgid "Load Sample..." -msgstr "Tải mẫu..." +#: app/gui.c:2632 +msgid "Set preferred accidental type" +msgstr "Äặt kiểu dấu thăng giáng bất thÆ°á»ng đã muốn" -#: app/sample-editor.c:377 -msgid "Save WAV..." -msgstr "LÆ°u WAV..." +#: app/gui.c:2638 +msgid "Measure" +msgstr "Äo" -#: app/sample-editor.c:379 -msgid "Save region as WAV..." -msgstr "LÆ°u miá»n dạng WAV..." +#: app/gui.c:2639 +msgid "Enable row highlighting" +msgstr "Bật tô sáng hàng" -#: app/sample-editor.c:392 -msgid "Save WAV" -msgstr "LÆ°u WAV" +#: app/gui.c:2660 +msgid "Other..." +msgstr "Khác..." -#: app/sample-editor.c:402 -msgid "Save Region" -msgstr "LÆ°u miá»n" +#: app/gui.c:2687 +msgid "Change effect column editing direction" +msgstr "Thay đổi hÆ°á»›ng hiệu chỉnh cá»™t hiệu ứng" -#: app/sample-editor.c:413 -msgid "Monitor" -msgstr "Màn hình" +#: app/gui.c:2715 app/gui.c:2820 +msgid "Global amplification" +msgstr "Khuếch đại toàn cục" -#: app/sample-editor.c:419 -msgid "Volume Ramp" -msgstr "Dốc âm lượng" +#: app/gui.c:2724 +msgid "Estimate the best amplification by pressing on the clipping indicator" +msgstr "" -#: app/sample-editor.c:425 -#, fuzzy -msgid "Trim" -msgstr "Run" +#: app/gui.c:2740 +msgid "Pitchbend" +msgstr "Pitchbend" -#: app/sample-editor.c:436 -msgid "Zoom to selection" -msgstr "Phóng tá»›i phần chá»n" +#: app/gui.c:2748 +msgid "Reset pitchbend to its normal value" +msgstr "Phục hồi giá trị gốc của cong cao giá»ng (pitchbend)" -#: app/sample-editor.c:442 -msgid "Show all" -msgstr "Hiện hết" +#: app/gui.c:2760 +msgid "Editing" +msgstr "HIệu chỉnh" -#: app/sample-editor.c:448 -msgid "Zoom in (+50%)" -msgstr "Phóng to (+50%)" +#: app/gui.c:2767 +msgid "Octave" +msgstr "Quãng tám" -#: app/sample-editor.c:454 -msgid "Zoom out (-50%)" -msgstr "Thu nhá» (-50%)" +#: app/gui.c:2776 +msgid "Jump" +msgstr "BÆ°á»›c" -#: app/sample-editor.c:460 -msgid "Reverse" -msgstr "Ngược lại" +#: app/gui.c:2785 +msgid "Instr" +msgstr "Khí" -#: app/sample-editor.c:470 -msgid "Cut" -msgstr "Cắt" +#: app/gui.c:2801 +msgid "Sample" +msgstr "Mẫu" -#: app/sample-editor.c:476 -msgid "Remove" -msgstr "Gỡ bá»" +#: app/gui.c:2827 +msgid "dB" +msgstr "" -#: app/sample-editor.c:482 -msgid "Copy" -msgstr "Chép" +#: app/gui.c:2866 +#, fuzzy, c-format +msgid "Welcome to %s!" +msgstr "Chào mừng dùng Bá»™ Theo dõi Âm thanh." -#: app/sample-editor.c:488 -msgid "Paste" -msgstr "Dán" +#: app/gui.c:2883 app/sample-editor.c:2238 +msgid "%M:%S" +msgstr "%M:%S" -#: app/sample-editor.c:494 -msgid "Clear Sample" -msgstr "Xoá mẫu" +#: app/instrument-editor.c:184 app/instrument-editor.c:216 +msgid "Can't open file." +msgstr "Không thể mở tập tin." -#: app/sample-editor.c:500 +#: app/instrument-editor.c:209 #, fuzzy -msgid "Crop" -msgstr "Chép" - -#: app/sample-editor.c:564 -msgid "(no selection)" -msgstr "(chÆ°a chá»n gì)" +msgid "Saving instrument failed." +msgstr "Äang lÆ°u nhạc khí..." -#: app/sample-editor.c:1069 -msgid "Out of memory for copybuffer.\n" -msgstr "Hết bá»™ nhá»› cho bá»™ nhá»› đệm sao chép:\n" +#: app/instrument-editor.c:232 +#, fuzzy +msgid "Clear current instrument?" +msgstr "Nhạc khí hiện có" -#: app/sample-editor.c:1188 -msgid "" -msgstr "" +#: app/instrument-editor.c:252 +msgid "Sine" +msgstr "Sin" -#: app/sample-editor.c:1301 -msgid "Out of memory for sample data." -msgstr "Hết bá»™ nhá»› cho dữ liệu mẫu." +#: app/instrument-editor.c:252 +msgid "Square" +msgstr "Vuông" -#: app/sample-editor.c:1317 app/sample-editor.c:1329 -msgid "Read error." -msgstr "Lá»—i Ä‘á»c." +#: app/instrument-editor.c:252 +msgid "Saw Down" +msgstr "CÆ°a xuống" -#: app/sample-editor.c:1476 -msgid "Load stereo sample" -msgstr "Tải mẫu âm lập thể" +#: app/instrument-editor.c:252 +msgid "Saw Up" +msgstr "CÆ°a lên" -#: app/sample-editor.c:1484 -msgid "" -"You have selected a stereo sample!\n" -"(SoundTracker can only handle mono samples!)\n" -"\n" -"Please choose which channel to load:" +#: app/instrument-editor.c:254 +msgid "FastTracker instruments (*.xi)" msgstr "" -"Bạn đã chá»n má»™t mẫu âm lập thể.\n" -"• NhÆ°ng mà Bá»™ Theo dõi Âm thanh có thể quản lý chỉ mẫu nguồn Ä‘Æ¡n. •\n" -"\n" -"Hãy chá»n kênh nào cần tải:" - -#: app/sample-editor.c:1495 -msgid "Left" -msgstr "Trái" -#: app/sample-editor.c:1501 -msgid "Mix" -msgstr "Trá»™n" +#: app/instrument-editor.c:259 +msgid "Instrument Editor" +msgstr "Bá»™ hiệu chỉnh nhạc khí" -#: app/sample-editor.c:1507 -msgid "Right" -msgstr "Phải" +#: app/instrument-editor.c:268 +msgid "Volume envelope" +msgstr "Bá»™ bao âm lượng" -#: app/sample-editor.c:1575 -msgid "Signed" -msgstr "Äã ký" +#: app/instrument-editor.c:276 +msgid "Panning envelope" +msgstr "Bá»™ bao kéo ngang" -#: app/sample-editor.c:1575 -msgid "Unsigned" -msgstr "ChÆ°a ký" +#: app/instrument-editor.c:292 +msgid "Load Instrument" +msgstr "Tải nhạc khí" -#: app/sample-editor.c:1576 -msgid "Little-Endian" -msgstr "Cuối nhá»" +#: app/instrument-editor.c:294 +msgid "Load instrument in the current instrument slot" +msgstr "" -#: app/sample-editor.c:1576 -msgid "Big-Endian" -msgstr "Cuối lá»›n" +#: app/instrument-editor.c:295 +msgid "Save Instrument" +msgstr "LÆ°u nhạc khí" -#: app/sample-editor.c:1577 -msgid "Mono" -msgstr "Nguồn Ä‘Æ¡n" +#: app/instrument-editor.c:297 +#, fuzzy +msgid "Save the current instrument" +msgstr "Nhạc khí hiện có" -#: app/sample-editor.c:1577 -msgid "Stereo" -msgstr "Âm lập thể" +#: app/instrument-editor.c:299 +msgid "Load XI" +msgstr "Tải XI" -#: app/sample-editor.c:1589 -msgid "Load raw sample" -msgstr "Tải mẫu thô" +#: app/instrument-editor.c:305 +msgid "Save XI" +msgstr "LÆ°u XI" -#: app/sample-editor.c:1597 -msgid "" -"You have selected a sample that is not\n" -"in a known format. You can load the raw data now.\n" -"\n" -"Please choose a format:" -msgstr "" -"Bạn đã chá»n má»™t mẫu không phải\n" -"có dạng thức đã biết.\n" -"Lúc bây giá» bạn có thể tải dữ liệu thô.\n" -"\n" -"Hãy chá»n má»™t dạng thức:" +#: app/instrument-editor.c:320 +#, fuzzy +msgid "Volume Fadeout" +msgstr "Trượt âm lượng lên" -#: app/sample-editor.c:1623 -msgid "Word format:" -msgstr "Dạng thức từ" +#: app/instrument-editor.c:344 +#, fuzzy +msgid "Vibrato:" +msgstr "Vi-bợ-ră-tá»™" -#: app/sample-editor.c:1670 -msgid "Sampling Rate:" -msgstr "Tần số lấy mẫu :" +#: app/instrument-editor.c:354 +msgid "Type" +msgstr "" -#: app/sample-editor.c:1681 -msgid "8363" -msgstr "8363" - -#: app/sample-editor.c:1689 app/sample-editor.c:2004 -msgid "OK" -msgstr "Äược" +#: app/instrument-editor.c:356 +#, fuzzy +msgid "Speed" +msgstr "Tốc Ä‘á»™ rung" -#: app/sample-editor.c:1748 -msgid "Can't read sample" -msgstr "Không thể Ä‘á»c mẫu" +#: app/instrument-editor.c:359 +#, fuzzy +msgid "Depth" +msgstr "Sâu rung" -#: app/sample-editor.c:1761 -msgid "Sample is too long for current mixer module. Loading anyway." -msgstr "Mẫu quá dài cho mô-Ä‘un hoà tiếng hiện có. Vẫn Ä‘ang tải nó." +#: app/instrument-editor.c:361 +#, fuzzy +msgid "Sweep" +msgstr "Quét rung" -#: app/sample-editor.c:1785 -msgid "Can only handle 8 and 16 bit samples with up to 2 channels" -msgstr "Có thể quản lý mẫu chỉ 8 bit và 16 bit vá»›i đến 2 kênh" +#: app/instrument-editor.c:413 +msgid "Note:" +msgstr "Nốt:" -#: app/sample-editor.c:1968 -msgid "Please select region first." -msgstr "Hãy chá»n miá»n trÆ°á»›c tiên." +#: app/instrument-editor.c:431 +msgid "Initialize" +msgstr "Sở khởi" -#: app/sample-editor.c:2012 -msgid "Start sampling" -msgstr "Chạy lấy mẫu" +#: app/keys.c:58 +msgid "" +msgstr "" -#: app/sample-editor.c:2042 -msgid "No sampling driver available" -msgstr "Không có sẵn sàng trình Ä‘iá»u khiển lấy mẫu" +#: app/keys.c:134 +msgid "KOFF" +msgstr "" -#: app/sample-editor.c:2052 app/sample-editor.c:2055 -msgid "Sampling Window" -msgstr "Cá»­a sổ lấy mẫu" +#: app/keys.c:134 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "Phím chèn nốt kiểu ra phím đặc biệt cho mô-Ä‘un FastTracker." -#: app/sample-editor.c:2104 -msgid "Out of memory while sampling!" -msgstr "• Hết bá»™ nhá»› trong khi lấy mẫu. •" +#: app/keys.c:136 +msgid "JMP+" +msgstr "" -#: app/sample-editor.c:2155 -msgid "" -msgstr "" +#: app/keys.c:136 +msgid "The key that increases \"jump\" value." +msgstr "Phím tăng giá trị « bÆ°á»›c »." -#: app/sample-editor.c:2186 -msgid "Recorded sample is too long for current mixer module. Using it anyway." +#: app/keys.c:138 +msgid "JMP-" msgstr "" -"Mẫu đã ghi lÆ°u là quá dài cho mô-Ä‘un hoà tiếng hiện có. Vẫn Ä‘ang dùng nó." -#: app/sample-editor.c:2239 -msgid "Normalize" -msgstr "Chuẩn hóa" +#: app/keys.c:138 +msgid "The key that decreases \"jump\" value." +msgstr "Phím giảm giá trị « bÆ°á»›c »." -#: app/sample-editor.c:2240 -msgid "Execute" -msgstr "Thá»±c hiện" +#: app/keys.c:140 +#, fuzzy +msgid "PlayMod" +msgstr "Phát bài hát" -#: app/sample-editor.c:2250 app/sample-editor.c:2253 -msgid "Volume Ramping" -msgstr "Mức gốc âm lượng" +#: app/keys.c:140 +#, fuzzy +msgid "Play module." +msgstr "Äang lÆ°u mô-Ä‘un..." -#: app/sample-editor.c:2269 -msgid "Perform linear volume fade on Selection" -msgstr "Thá»±c hiện việc mỠâm lượng tuyến vá»›i vùng chá»n" +#: app/keys.c:142 +msgid "RecMod" +msgstr "" -#: app/sample-editor.c:2281 -msgid "Left [%]:" -msgstr "Trái [%]:" +#: app/keys.c:142 +#, fuzzy +msgid "Play module + recording." +msgstr "Äang phát mẫu..." -#: app/sample-editor.c:2284 app/sample-editor.c:2301 -msgid "H" -msgstr "H" +#: app/keys.c:144 +#, fuzzy +msgid "PlayPat" +msgstr "Phát mẫu" -#: app/sample-editor.c:2290 app/sample-editor.c:2307 -msgid "D" -msgstr "D" +#: app/keys.c:144 +#, fuzzy +msgid "Play pattern." +msgstr "Phát mẫu" -#: app/sample-editor.c:2298 -msgid "Right [%]:" -msgstr "Phải [%]:" +#: app/keys.c:146 +msgid "RecPat" +msgstr "" -#: app/sample-editor.c:2442 app/sample-editor.c:2453 -msgid "Trim parameters" +#: app/keys.c:146 +#, fuzzy +msgid "Play pattern + recording." +msgstr "Äang phát mẫu..." + +#: app/keys.c:148 +msgid "PlayCur" msgstr "" -#: app/sample-editor.c:2498 -msgid "Trim at the beginning" +#: app/keys.c:148 +msgid "Play module from cursor." msgstr "" -#: app/sample-editor.c:2505 -msgid "Trim at the end" +#: app/keys.c:150 +msgid "RecCur" msgstr "" -#: app/sample-editor.c:2512 -msgid "Threshold (dB)" +#: app/keys.c:150 +#, fuzzy +msgid "Play module from cursor + recording." +msgstr "Äang phát mẫu..." + +#: app/keys.c:152 +#, fuzzy +msgid "PlayRow" +msgstr "Phát bài hát" + +#: app/keys.c:152 +#, fuzzy +msgid "Play current pattern row." +msgstr "Tải mẫu hiện có..." + +#: app/keys.c:154 +msgid "PlayBlk" msgstr "" -#: app/tips-dialog.c:50 +#: app/keys.c:154 +#, fuzzy +msgid "Play selected block." +msgstr "Há»c biết phím được chá»n" + +#: app/keys.c:166 +msgid "Upper Octave Keys..." +msgstr "Phím quãng tám trên..." + +#: app/keys.c:167 msgid "" -"Welcome to SoundTracker!\n" -"\n" -"If you are new to this type of program, you will want to get hold of\n" -"some XM or MOD files first and play with them." +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." msgstr "" -"Chúc mừng bạn dùng Bá»™ Theo dõi Âm thanh.\n" -"\n" -"Nếu bạn không quen vá»›i chÆ°Æ¡ng trình kiểu này,\n" -"khuyên bạn lấy má»™t số tập tin dạng XM hay MOD trÆ°á»›c tien\n" -"và làm thá»­ nghiệm vá»›i chúng." +"Những phím này chiếm phần hai trên của bàn phím. Phím C thÆ°á»ng là phím bên " +"phải phím Tab. Các phím còn lại nên theo thứ tá»± pianô, gồm hàng phím số bên " +"trên." -#: app/tips-dialog.c:55 +#: app/keys.c:172 +msgid "Lower Octave Keys..." +msgstr "Phím quãng tám dÆ°á»›i..." + +#: app/keys.c:173 msgid "" -"You can make SoundTracker's edit mode more responsive to keyboard\n" -"input by decreasing the mixing buffer size of the \"Editing\" object in\n" -"the Audio Configuration." +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." msgstr "" -"Bạn có thể làm cho chế Ä‘á»™ hiệu chỉnh của Bá»™ Theo dõi Âm thanh là sẵn sàng " -"hÆ¡n đáp lại kết nhập bàn phím, bằng cách giảm kích cỡ của bá»™ đệm hoà tiếng " -"của đối tượng « Hiệu chỉnh » trong Cấu hình Âm Thanh." +"Những phím này chiếm phần hai dÆ°á»›i của bàn phím. Phím C thÆ°á»ng là phím bên " +"phải phím Shift trái. Các phím còn lại nên theo thứ tá»± pianô, gồm hàng bên " +"trên." + +#: app/keys.c:178 +msgid "Other Keys..." +msgstr "Phím khác..." + +#: app/keys.c:179 +msgid "Various other keys" +msgstr "Nhiá»u phím khác nhau" + +#: app/keys.c:578 +msgid "Function" +msgstr "Chức năng" + +#: app/keys.c:579 +msgid "Assignment" +msgstr "Cách gán" + +#: app/keys.c:588 +msgid "Keyboard Configuration" +msgstr "Cấu hình Bàn phím" + +#: app/keys.c:630 +msgid "Key Group Explanation" +msgstr "Mô tả nhóm phím" + +#: app/keys.c:643 +msgid "Key Explanation" +msgstr "Mô tả phím" -#: app/tips-dialog.c:59 +#: app/keys.c:668 +msgid "Modifiers:" +msgstr "Phím sá»­a đổi:" + +#: app/keys.c:687 +msgid "Learn selected key" +msgstr "Há»c biết phím được chá»n" + +#: app/keys.c:692 +msgid "Learn all keys" +msgstr "Há»c biết má»i phím" + +#: app/keys.c:702 msgid "" -"You can adjust the loop points in the sample editor by holding Shift\n" -"and using the left and right mousebuttons.\n" +"Please press the desired key combination!\n" +"Click into left list to cancel" msgstr "" -"Bạn có thể Ä‘iá»u chỉnh những Ä‘iểm lặp lặp trong bá»™ hiệu chỉnh mẫu, bằng cách " -"bấm giữ phím Shift rồi bấm nút trái và phải trên chuá»™t.\n" +"Hãy bấm tổ hợp phím đã muốn.\n" +"Nhắp vào danh sách trái để thôi." + +#: app/keys.c:948 +#, c-format +msgid "CH%02d" +msgstr "CH%02d" + +#: app/keys.c:949 +#, c-format +msgid "Fast jump to channel %d" +msgstr "BÆ°á»›c nhanh tá»›i kênh %d" -#: app/tips-dialog.c:62 +#: app/keys.c:1028 msgid "" -"If you want to know more about tracking, and how the various commands\n" -"work, have a look at http://www.united-trackers.org/" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." msgstr "" -"Nếu bạn muốn biết thêm vá» theo dõi, và vá» cách thá»±c hiện những lệnh khác " -"nhau, hãy xem ." +"Việc tá»± Ä‘á»™ng cấu hình phím bị lá»—i.\n" +"Hãy sá»­ dụng há»™p thoại Cấu hình Bàn phím\n" +"trong trình Ä‘Æ¡n Thiết lập." -#: app/tips-dialog.c:65 +#: app/menubar.c:115 +#, c-format msgid "" -"You can assign samples of an instrument to the individual keys by\n" -"activating its sample and then clicking on the keyboard in the\n" -"instrument editor page." +"%s is free software: you can redistribute it and/or modify it under the " +"terms of the GNU General Public License as published by the Free Software " +"Foundation; either version 2 of the License, or (at your option) any later " +"version.\n" +"\n" +"%s is distributed in the hope that it will be useful, but WITHOUT ANY " +"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " +"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " +"details.\n" +"\n" +"You should have received a copy of the GNU General Public License along with " +"%s. If not, see: http://www.gnu.org/licenses/" msgstr "" -"Bạn có thể gán mẫu của má»™t nhạc khí nào đó cho phím riêng bằng cách kích " -"hoạt mẫu nó rồi nhắp vào bàn phím trong trang hiệu chỉnh nhạc khí." -#: app/tips-dialog.c:69 +#: app/menubar.c:126 msgid "" -"Is your cursor trapped in a number entry field?\n" -"Just press Return or Tab to free yourself!" +"© 1998-2019 Michael Krause\n" +"© 2020 Yury Aliaev\n" +"\n" +"\n" +"Includes OpenCP player from Niklas Beisert and Tammo Hinrichs." msgstr "" -"Con chạy của bạn bị bẫy trong trÆ°á»ng nhập số phải không?\n" -"Hãy Ä‘Æ¡n giản bấm phím Return hay Tab để nhả nó." -#: app/tips-dialog.c:81 -msgid "SoundTracker Tip of the day" -msgstr "Mẹo của hôm nay của Bá»™ Theo dõi Âm thanh" +#: app/menubar.c:151 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"Bạn có chắc là muốn làm việc này không?\n" +"Má»i thay đổi sẽ bị mất hoàn toàn." -#: app/tips-dialog.c:154 -msgid "Previous Tip" -msgstr "Mẹo trÆ°á»›c" +#: app/mixers/integer32.c:439 +msgid "Integers mixer, no interpolation, no filters, maximum sample length 1M" +msgstr "Bá»™ hoà tiếng số nguyên, không ná»™i suy, không lá»c, Ä‘á»™ dài mẫu tối Ä‘a 1M" -#: app/tips-dialog.c:162 -msgid "Next Tip" -msgstr "Mẹo kế" +#: app/mixers/kbfloat.c:838 +#, fuzzy +msgid "" +"High-quality FPU mixer, cubic interpolation, IT filters, unlimited length " +"samples" +msgstr "Bá»™ hoà tiếng số nguyên, không ná»™i suy, không lá»c, Ä‘á»™ dài mẫu tối Ä‘a 1M" -#: app/tips-dialog.c:174 -msgid "Show tip next time" -msgstr "Hiển thị mẹo lần sau" +#: app/module-info.c:63 app/module-info.c:64 +msgid "Single" +msgstr "" -#: app/track-editor.c:113 -msgid "Arpeggio" -msgstr "Hợp âm rải" +#: app/module-info.c:63 app/module-info.c:64 +#, fuzzy +msgid "Cyclic" +msgstr "bá» nhắp" -#: app/track-editor.c:114 -msgid "Porta up" -msgstr "Mang lên" +#: app/module-info.c:63 +msgid "Keyboard" +msgstr "" -#: app/track-editor.c:115 -msgid "Porta down" -msgstr "Mang xuống" +#: app/module-info.c:64 +msgid "Coupled" +msgstr "" + +#: app/module-info.c:155 +#, c-format +msgid "%sIns. %i, Smp. %i" +msgstr "" + +#: app/module-info.c:158 +#, c-format +msgid "I%i, S%i" +msgstr "" + +#: app/module-info.c:481 +msgid "Period" +msgstr "" + +#: app/module-info.c:484 +msgid "s" +msgstr "" + +#: app/module-info.c:499 +msgid "Mode" +msgstr "" + +#: app/module-info.c:517 app/module-info.c:844 +#, fuzzy +msgid "Note" +msgstr "Nốt:" + +#: app/module-info.c:549 +msgid "Mixing a sample with itself is not a useful idea..." +msgstr "" + +#: app/module-info.c:657 +msgid "Instrument Name" +msgstr "Tên nhạc khí" + +#: app/module-info.c:657 +msgid "#smpl" +msgstr "#mẫu" + +#: app/module-info.c:658 +msgid "Sample Name" +msgstr "Tên mẫu" + +#: app/module-info.c:665 +msgid "Linear" +msgstr "Tuyến" + +# Name: don't translate / Tên: đừng dịch +#: app/module-info.c:665 app/sample-editor.c:357 +msgid "Amiga" +msgstr "Amiga" + +#: app/module-info.c:670 +msgid "Module Info" +msgstr "Thông tin mô-Ä‘un" + +#: app/module-info.c:731 +msgid "Songname:" +msgstr "Tên bài hát:" + +#: app/module-info.c:738 +msgid "Frequencies:" +msgstr "Tần số :" + +#: app/module-info.c:742 +msgid "ProTracker Mode" +msgstr "Chế Ä‘á»™ Siêu Theo dõi " + +#: app/module-info.c:756 +#, fuzzy +msgid "Extended Instrument/Sample Editor" +msgstr "Bá»™ hiệu chỉnh nhạc khí" + +#: app/module-info.c:765 +msgid "Ins. 1" +msgstr "" + +#: app/module-info.c:768 +msgid "Smp. 1" +msgstr "" + +#: app/module-info.c:770 +msgid "Ins. 2" +msgstr "" + +#: app/module-info.c:772 +msgid "Smp. 2" +msgstr "" + +#: app/module-info.c:781 +msgid "I1 => I2" +msgstr "" + +#: app/module-info.c:782 +#, fuzzy +msgid "Copy Instrument 1 to Instrument 2" +msgstr "Nhạc khí hiện có" + +#: app/module-info.c:786 +msgid "I1 <=> I2" +msgstr "" + +#: app/module-info.c:787 +#, fuzzy +msgid "Exchange Instruments 1 and 2" +msgstr "LÆ°u nhạc khí" + +#: app/module-info.c:791 +msgid "S1 => S2" +msgstr "" + +#: app/module-info.c:792 +msgid "Copy Sample 1 to Sample 2" +msgstr "" + +#: app/module-info.c:796 +msgid "S1 <=> S2" +msgstr "" + +#: app/module-info.c:797 +#, fuzzy +msgid "Exchange Samples 1 and 2" +msgstr "Trao đổi 1 ↔ 2" + +#: app/module-info.c:808 +msgid "Mixing balance" +msgstr "" + +#: app/module-info.c:819 app/module-info.c:822 +msgid "I1, S0" +msgstr "" + +#: app/module-info.c:845 +msgid "Note to play preview" +msgstr "" + +#: app/module-info.c:863 +msgid "Preview" +msgstr "" + +#: app/module-info.c:864 +msgid "Play the mixed sample without module modification" +msgstr "" + +#: app/module-info.c:868 +msgid "Mix!" +msgstr "" + +#: app/module-info.c:870 +msgid "" +"Mix sample 1 of instrument 1 with sample 2 of instrument 2 with the given " +"balance ratio" +msgstr "" + +#: app/module-info.c:878 +msgid "Tuning: " +msgstr "" + +#: app/module-info.c:891 app/sample-editor.c:455 +msgid "Finetune" +msgstr "Dò chỉnh" + +#: app/module-info.c:892 app/sample-editor.c:530 +msgid "RelNote" +msgstr "Nốt_lq" + +#: app/module-info.c:898 +msgid "Reference: " +msgstr "" + +#: app/module-info.c:1136 +#, c-format +msgid "" +"Unused patterns: %d (used: %d)\n" +"Unused instruments: %d (used: %d)\n" +"\n" +"Clear unused and reorder playlist?\n" +msgstr "" +"Mẫu không dùng: %d (đã dùng: %d)\n" +"Nạc khí không dùng: %d (đã dùng: %d)\n" +"\n" +"Xoá các Ä‘iá»u không dùng,\n" +"và sắp xếp lại danh mục nhạc không?\n" + +#: app/playlist.c:505 +msgid "Insert pattern that is being edited" +msgstr "Chèn mẫu Ä‘ang được hiệu chỉnh" + +#: app/playlist.c:511 +msgid "Remove current playlist entry" +msgstr "Gỡ bá» mục nhập danh mục nhạc hiện có" + +#: app/playlist.c:517 +msgid "Add + Cpy" +msgstr "Thêm và Chép" + +#: app/playlist.c:519 +msgid "" +"Add a free pattern behind current position, and copy current pattern to it" +msgstr "" +"Thêm má»™t mẫu tá»± do ở sau vị trí hiện có, và sao chép mẫu hiện thá»i vào nó." + +#: app/playlist.c:522 +msgid "Add Free" +msgstr "Thêm Tá»± do" + +#: app/playlist.c:524 +msgid "Add a free pattern behind current position" +msgstr "Thêm má»™t mẫu tá»± do ở sau vị trí hiện có" + +#: app/playlist.c:534 +#, fuzzy +msgid "Len" +msgstr "Dài" + +#: app/playlist.c:548 +msgid "Song length" +msgstr "Dài bài hát" + +#: app/playlist.c:554 +#, fuzzy +msgid "Rstrt" +msgstr "Khí" + +#: app/playlist.c:567 +msgid "Song restart position" +msgstr "Vị trí phát lại bài hát" + +#: app/preferences.c:60 +#, fuzzy +msgid "" +"A directory called \".soundtracker\" has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"Má»›i tạo má»™t thÆ° mục tên <.soundtracker> trong thÆ° mục\n" +"chính của bạn, để lÆ°u các tập tin cấu hình.\n" + +#: app/preferences.c:90 +msgid "Would you like to import settings from old version of Soundtracker?" +msgstr "" + +#: app/preferences.c:94 +#, c-format +msgid "" +"An error is occured during converting config:\n" +"%s" +msgstr "" + +#: app/preferences.c:109 +#, c-format +msgid "" +"An error is occured during reading or parsing config:\n" +"%s" +msgstr "" + +#: app/preferences.c:133 +#, c-format +msgid "" +"An error is occured during saving config:\n" +"%s" +msgstr "" + +#: app/sample-editor.c:356 +msgid "No loop" +msgstr "Không lặp" + +#: app/sample-editor.c:358 +msgid "PingPong" +msgstr "PingPong" + +#: app/sample-editor.c:361 app/sample-editor.c:1755 +msgid "8 bits" +msgstr "8 bit" + +#: app/sample-editor.c:362 app/sample-editor.c:1755 +msgid "16 bits" +msgstr "16 bit" + +#: app/sample-editor.c:366 +msgid "Apple/SGI audio (*aif, *.aiff, *.aifc)" +msgstr "" + +#: app/sample-editor.c:367 +msgid "SUN/NeXT audio (*.au, *.snd)" +msgstr "" + +#: app/sample-editor.c:368 +msgid "Audio Visual Research files (*.avr)" +msgstr "" + +#: app/sample-editor.c:369 +msgid "Apple Core Audio files (*.caf)" +msgstr "" + +#: app/sample-editor.c:370 +msgid "Amiga IFF/SV8/SV16 (*.iff)" +msgstr "" + +#: app/sample-editor.c:371 +msgid "Berkeley/IRCAM/CARL audio (*.sf)" +msgstr "" + +#: app/sample-editor.c:372 +msgid "Creative Labs audio (*.voc)" +msgstr "" + +#: app/sample-editor.c:373 +msgid "Microsoft RIFF/NIST Sphere (*.wav)" +msgstr "" + +#: app/sample-editor.c:374 +msgid "FLAC lossless audio (*.flac)" +msgstr "" + +#: app/sample-editor.c:375 +msgid "Psion audio (*.wve)" +msgstr "" + +#: app/sample-editor.c:376 +msgid "OGG compressed audio (*.ogg, *.vorbis)" +msgstr "" + +#: app/sample-editor.c:377 +msgid "RIFF 64 files (*.rf64)" +msgstr "" + +#: app/sample-editor.c:384 +msgid "HMM Tool Kit files (*.htk)" +msgstr "" + +#: app/sample-editor.c:385 +msgid "GNU Octave/Matlab files (*.mat)" +msgstr "" + +#: app/sample-editor.c:386 +msgid "Ensoniq PARIS files (*.paf)" +msgstr "" + +#: app/sample-editor.c:387 +msgid "Portable Voice Format files (*.pvf)" +msgstr "" + +#: app/sample-editor.c:388 +msgid "Headerless raw data (*.raw, *.r8)" +msgstr "" + +#: app/sample-editor.c:389 +msgid "Sound Designer II files (*.sd2)" +msgstr "" + +#: app/sample-editor.c:390 +msgid "Midi Sample Dump Standard files (*.sds)" +msgstr "" + +#: app/sample-editor.c:391 +msgid "SoundFoundry WAVE 64 files (*.w64)" +msgstr "" + +#: app/sample-editor.c:398 +msgid "Sample Vision files (*.smp)" +msgstr "" + +#: app/sample-editor.c:406 +msgid "Sample Editor" +msgstr "Bá»™ HIệu chỉnh Mẫu" + +#: app/sample-editor.c:453 app/midi-settings.c:406 +msgid "Volume" +msgstr "Âm lượng" + +#: app/sample-editor.c:454 +msgid "Panning" +msgstr "Kéo ngang" + +#: app/sample-editor.c:475 +msgid "Selection:" +msgstr "Vùng chá»n:" + +#: app/sample-editor.c:479 app/track-editor.c:215 +msgid "None" +msgstr "Không có" + +#: app/sample-editor.c:485 +msgid "All" +msgstr "Tất cả" + +#: app/sample-editor.c:506 +msgid "Length:" +msgstr "Dài:" + +#: app/sample-editor.c:522 +msgid "Set as loop" +msgstr "Äặt là vòng lặp" + +#: app/sample-editor.c:541 app/sample-editor.c:546 +msgid "Load Sample" +msgstr "Tải mẫu" + +#: app/sample-editor.c:541 +#, fuzzy +msgid "Load sample into the current sample slot" +msgstr "LÆ°u XM không có mẫu..." + +#: app/sample-editor.c:542 +msgid "Save Sample" +msgstr "LÆ°u mẫu" + +#: app/sample-editor.c:542 +#, fuzzy +msgid "Save the current sample" +msgstr "LÆ°u XM không có mẫu..." + +#: app/sample-editor.c:543 +msgid "Save region as WAV..." +msgstr "LÆ°u miá»n dạng WAV..." + +#: app/sample-editor.c:557 +msgid "Save WAV" +msgstr "LÆ°u WAV" + +#: app/sample-editor.c:569 +msgid "Save Region" +msgstr "LÆ°u miá»n" + +#: app/sample-editor.c:587 +msgid "Volume Ramp" +msgstr "Dốc âm lượng" + +#: app/sample-editor.c:593 +#, fuzzy +msgid "Trim" +msgstr "Run" + +#: app/sample-editor.c:603 +msgid "Zoom to selection" +msgstr "Phóng tá»›i phần chá»n" + +#: app/sample-editor.c:609 +msgid "Show all" +msgstr "Hiện hết" + +#: app/sample-editor.c:615 +msgid "Zoom in (+50%)" +msgstr "Phóng to (+50%)" + +#: app/sample-editor.c:621 +msgid "Zoom out (-50%)" +msgstr "Thu nhá» (-50%)" + +#: app/sample-editor.c:627 +msgid "Reverse" +msgstr "Ngược lại" + +#: app/sample-editor.c:637 +msgid "Cut" +msgstr "Cắt" + +#: app/sample-editor.c:643 +msgid "Remove" +msgstr "Gỡ bá»" + +#: app/sample-editor.c:649 +msgid "Copy" +msgstr "Chép" + +#: app/sample-editor.c:655 +msgid "Paste" +msgstr "Dán" + +#: app/sample-editor.c:661 +msgid "Clear Sample" +msgstr "Xoá mẫu" + +#: app/sample-editor.c:667 +#, fuzzy +msgid "Crop" +msgstr "Chép" + +#: app/sample-editor.c:730 +msgid "(no selection)" +msgstr "(chÆ°a chá»n gì)" + +#: app/sample-editor.c:1279 +#, fuzzy +msgid "Out of memory for copybuffer." +msgstr "Hết bá»™ nhá»› cho bá»™ nhá»› đệm sao chép:\n" + +#: app/sample-editor.c:1400 +msgid "" +msgstr "" + +#: app/sample-editor.c:1479 +msgid "Mix" +msgstr "Trá»™n" + +#: app/sample-editor.c:1479 +msgid "Left" +msgstr "Trái" + +#: app/sample-editor.c:1479 +msgid "Right" +msgstr "Phải" + +#: app/sample-editor.c:1479 +#, fuzzy +msgid "2 samples" +msgstr "(%d mẫu)" + +#: app/sample-editor.c:1497 +msgid "Load left and right channels into the current sample and the next one" +msgstr "" + +#: app/sample-editor.c:1528 app/sample-editor.c:2396 +msgid "" +"You have selected the last sample of the instrument, but going to load the " +"second stereo channel to the next sample. Please select a sample slot with " +"lower number or use another loading mode." +msgstr "" + +#: app/sample-editor.c:1536 app/sample-editor.c:2404 +msgid "" +"The next sample which is about to be overwritten is not empty!\n" +"Would you like to overwrite it?" +msgstr "" + +#: app/sample-editor.c:1548 app/sample-editor.c:1556 app/sample-editor.c:1643 +#: app/sample-editor.c:2361 app/sample-editor.c:2417 +msgid "Out of memory for sample data." +msgstr "Hết bá»™ nhá»› cho dữ liệu mẫu." + +#: app/sample-editor.c:1575 app/sample-editor.c:1585 +msgid "Read error." +msgstr "Lá»—i Ä‘á»c." + +#: app/sample-editor.c:1723 +#, fuzzy, c-format +msgid "" +"You have selected a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to load:" +msgstr "" +"Bạn đã chá»n má»™t mẫu âm lập thể.\n" +"• NhÆ°ng mà Bá»™ Theo dõi Âm thanh có thể quản lý chỉ mẫu nguồn Ä‘Æ¡n. •\n" +"\n" +"Hãy chá»n kênh nào cần tải:" + +#: app/sample-editor.c:1726 +#, fuzzy +msgid "Stereo sample loading" +msgstr "Chạy lấy mẫu" + +#: app/sample-editor.c:1756 +msgid "Signed" +msgstr "Äã ký" + +#: app/sample-editor.c:1756 +msgid "Unsigned" +msgstr "ChÆ°a ký" + +#: app/sample-editor.c:1757 +msgid "Little-Endian" +msgstr "Cuối nhá»" + +#: app/sample-editor.c:1757 +msgid "Big-Endian" +msgstr "Cuối lá»›n" + +#: app/sample-editor.c:1764 +msgid "Load raw sample" +msgstr "Tải mẫu thô" + +#: app/sample-editor.c:1772 +msgid "" +"You have selected a sample that is not\n" +"in a known format. You can load the raw data now.\n" +"\n" +"Please choose a format:" +msgstr "" +"Bạn đã chá»n má»™t mẫu không phải\n" +"có dạng thức đã biết.\n" +"Lúc bây giá» bạn có thể tải dữ liệu thô.\n" +"\n" +"Hãy chá»n má»™t dạng thức:" + +#: app/sample-editor.c:1798 +msgid "Word format:" +msgstr "Dạng thức từ" + +#: app/sample-editor.c:1829 +msgid "Sampling Rate:" +msgstr "Tần số lấy mẫu :" + +#: app/sample-editor.c:1915 +msgid "Can't read sample" +msgstr "Không thể Ä‘á»c mẫu" + +#: app/sample-editor.c:1929 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "Mẫu quá dài cho mô-Ä‘un hoà tiếng hiện có. Vẫn Ä‘ang tải nó." + +#: app/sample-editor.c:1954 +msgid "Can only handle 8 and 16 bit samples with up to 2 channels" +msgstr "Có thể quản lý mẫu chỉ 8 bit và 16 bit vá»›i đến 2 kênh" + +#: app/sample-editor.c:2021 +msgid "Can't open file for writing." +msgstr "Không thể mở tập tin để ghi." + +#: app/sample-editor.c:2079 +msgid "Please select region first." +msgstr "Hãy chá»n miá»n trÆ°á»›c tiên." + +#: app/sample-editor.c:2194 +msgid "No sampling driver available" +msgstr "Không có sẵn sàng trình Ä‘iá»u khiển lấy mẫu" + +#: app/sample-editor.c:2203 +msgid "Sampling Window" +msgstr "Cá»­a sổ lấy mẫu" + +#: app/sample-editor.c:2224 +msgid "Record" +msgstr "" + +#: app/sample-editor.c:2232 +#, fuzzy +msgid "Clear" +msgstr "Xoá _hết" + +#: app/sample-editor.c:2263 +#, fuzzy +msgid "Sampling failed!" +msgstr "Tần số lấy mẫu :" + +#: app/sample-editor.c:2298 +msgid "Out of memory while sampling!" +msgstr "• Hết bá»™ nhá»› trong khi lấy mẫu. •" + +#: app/sample-editor.c:2345 +msgid "" +msgstr "" + +#: app/sample-editor.c:2370 +#, fuzzy, c-format +msgid "" +"You have recorded a stereo sample!\n" +"(%s can only handle mono samples!)\n" +"\n" +"Please choose which channel to use:" +msgstr "" +"Bạn đã chá»n má»™t mẫu âm lập thể.\n" +"• NhÆ°ng mà Bá»™ Theo dõi Âm thanh có thể quản lý chỉ mẫu nguồn Ä‘Æ¡n. •\n" +"\n" +"Hãy chá»n kênh nào cần tải:" + +#: app/sample-editor.c:2372 +#, fuzzy +msgid "Converting stereo sample" +msgstr "Tải mẫu âm lập thể" + +#: app/sample-editor.c:2599 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"Mẫu đã ghi lÆ°u là quá dài cho mô-Ä‘un hoà tiếng hiện có. Vẫn Ä‘ang dùng nó." + +#: app/sample-editor.c:2657 +msgid "Volume Ramping" +msgstr "Mức gốc âm lượng" + +#: app/sample-editor.c:2658 +msgid "Normalize" +msgstr "Chuẩn hóa" + +#: app/sample-editor.c:2667 +msgid "Perform linear volume fade on Selection" +msgstr "Thá»±c hiện việc mỠâm lượng tuyến vá»›i vùng chá»n" + +#: app/sample-editor.c:2676 +msgid "Left [%]:" +msgstr "Trái [%]:" + +#: app/sample-editor.c:2679 app/sample-editor.c:2696 +msgid "H" +msgstr "H" + +#: app/sample-editor.c:2681 app/sample-editor.c:2698 +msgid "Half" +msgstr "" + +#: app/sample-editor.c:2685 app/sample-editor.c:2702 +msgid "D" +msgstr "D" + +#: app/sample-editor.c:2686 app/sample-editor.c:2704 +msgid "Double" +msgstr "" + +#: app/sample-editor.c:2693 +msgid "Right [%]:" +msgstr "Phải [%]:" + +#: app/sample-editor.c:2786 +msgid "Trim parameters" +msgstr "" + +#: app/sample-editor.c:2792 +msgid "Trim at the beginning" +msgstr "" + +#: app/sample-editor.c:2796 +msgid "Trim at the end" +msgstr "" + +#: app/sample-editor.c:2802 +msgid "Threshold (dB)" +msgstr "" + +#: app/tips-dialog.c:45 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" +"Chúc mừng bạn dùng Bá»™ Theo dõi Âm thanh.\n" +"\n" +"Nếu bạn không quen vá»›i chÆ°Æ¡ng trình kiểu này,\n" +"khuyên bạn lấy má»™t số tập tin dạng XM hay MOD trÆ°á»›c tien\n" +"và làm thá»­ nghiệm vá»›i chúng." + +#: app/tips-dialog.c:50 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" +"Bạn có thể làm cho chế Ä‘á»™ hiệu chỉnh của Bá»™ Theo dõi Âm thanh là sẵn sàng " +"hÆ¡n đáp lại kết nhập bàn phím, bằng cách giảm kích cỡ của bá»™ đệm hoà tiếng " +"của đối tượng « Hiệu chỉnh » trong Cấu hình Âm Thanh." + +#: app/tips-dialog.c:54 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" +"Bạn có thể Ä‘iá»u chỉnh những Ä‘iểm lặp lặp trong bá»™ hiệu chỉnh mẫu, bằng cách " +"bấm giữ phím Shift rồi bấm nút trái và phải trên chuá»™t.\n" + +#: app/tips-dialog.c:57 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" +"Nếu bạn muốn biết thêm vá» theo dõi, và vá» cách thá»±c hiện những lệnh khác " +"nhau, hãy xem ." + +#: app/tips-dialog.c:60 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" +"Bạn có thể gán mẫu của má»™t nhạc khí nào đó cho phím riêng bằng cách kích " +"hoạt mẫu nó rồi nhắp vào bàn phím trong trang hiệu chỉnh nhạc khí." + +#: app/tips-dialog.c:64 +msgid "" +"Is your cursor trapped in a number entry field?\n" +"Just press Return or Tab to free yourself!" +msgstr "" +"Con chạy của bạn bị bẫy trong trÆ°á»ng nhập số phải không?\n" +"Hãy Ä‘Æ¡n giản bấm phím Return hay Tab để nhả nó." + +#: app/tips-dialog.c:111 +msgid "Previous Tip" +msgstr "Mẹo trÆ°á»›c" + +#: app/tips-dialog.c:118 +msgid "Next Tip" +msgstr "Mẹo kế" + +#: app/tips-dialog.c:129 +msgid "Show tip next time" +msgstr "Hiển thị mẹo lần sau" + +#: app/tips-dialog.c:146 +#, fuzzy, c-format +msgid "%s Tip of the day" +msgstr "Mẹo của hôm nay của Bá»™ Theo dõi Âm thanh" + +#: app/track-editor.c:130 +msgid "Arpeggio" +msgstr "Hợp âm rải" + +#: app/track-editor.c:131 +msgid "Porta up" +msgstr "Mang lên" + +#: app/track-editor.c:132 +msgid "Porta down" +msgstr "Mang xuống" + +#: app/track-editor.c:133 app/track-editor.c:197 +msgid "Tone porta" +msgstr "Mang giá»ng" + +#: app/track-editor.c:134 app/track-editor.c:193 +msgid "Vibrato" +msgstr "Vi-bợ-ră-tá»™" + +#: app/track-editor.c:135 +msgid "Tone porta + Volume slide" +msgstr "Mạng giá»ng và Trượt âm lượng" + +#: app/track-editor.c:136 +msgid "Vibrato + Volume slide" +msgstr "Vi-bợ-ră-tá»™ và Trượt âm lượng" + +#: app/track-editor.c:137 +msgid "Tremolo" +msgstr "Vê" + +#: app/track-editor.c:138 app/track-editor.c:194 +msgid "Set panning" +msgstr "Äặt kéo ngang" + +#: app/track-editor.c:139 +#, fuzzy +msgid "Sample offset" +msgstr "Mẫu đã được lÆ°u." + +#: app/track-editor.c:140 app/track-editor.c:142 app/track-editor.c:211 +msgid "Set volume" +msgstr "Äặt âm lượng" + +#: app/track-editor.c:141 +msgid "Position jump" +msgstr "BÆ°á»›c vị trí" + +#: app/track-editor.c:143 +msgid "Pattern break" +msgstr "Ngắt mẫu" + +#: app/track-editor.c:145 +msgid "Set tempo/bpm" +msgstr "Äặt nhịp Ä‘á»™/NMP" + +#: app/track-editor.c:146 +msgid "Set global volume" +msgstr "Äặt âm lượng toàn cục" + +#: app/track-editor.c:147 +msgid "Global volume slide" +msgstr "Bá»™ trượt âm lượng toàn cục" + +#: app/track-editor.c:150 +msgid "Key off" +msgstr "Ra phím" + +#: app/track-editor.c:151 +msgid "Set envelop position" +msgstr "Äặt vị trí bao" + +#: app/track-editor.c:155 +msgid "Panning slide" +msgstr "Äang kéo ngang trượt" + +#: app/track-editor.c:156 +msgid "LP filter resonance" +msgstr "Cá»™ng hưởng lá»c phát lâu" + +#: app/track-editor.c:157 +msgid "Multi retrig note" +msgstr "Nốt Ä‘a gây nên lại" + +#: app/track-editor.c:159 +msgid "Tremor" +msgstr "Run" + +#: app/track-editor.c:165 +msgid "LP filter cutoff" +msgstr "Ngưỡng lá»c phát lâu" + +#: app/track-editor.c:170 +msgid "Fine porta up" +msgstr "Mang lên tế nhị" + +#: app/track-editor.c:171 +msgid "Fine porta down" +msgstr "Mang xuống tế nhị" + +#: app/track-editor.c:172 +msgid "Set gliss control" +msgstr "Äặt Ä‘iá»u khiển bÆ°á»›c lÆ°á»›t" + +#: app/track-editor.c:173 +msgid "Set vibrato control" +msgstr "Äặt Ä‘iá»u khiển vi-bợ-ră-tá»™" + +#: app/track-editor.c:174 +msgid "Set finetune" +msgstr "Äặt dò chỉnh" + +#: app/track-editor.c:175 +#, fuzzy +msgid "Pattern loop" +msgstr "_Mẫu" + +#: app/track-editor.c:176 +msgid "Set tremolo control" +msgstr "Äặt Ä‘iá»u khiển vê" + +#: app/track-editor.c:178 +msgid "Retrig note" +msgstr "Nốt gây nên lại" + +#: app/track-editor.c:179 app/track-editor.c:191 +msgid "Fine volume slide up" +msgstr "Trượt lên âm lượng tế nhị" + +#: app/track-editor.c:180 app/track-editor.c:190 +msgid "Fine volume slide down" +msgstr "Trượt xuống âm lượng tế nhị" + +#: app/track-editor.c:181 +msgid "Note cut" +msgstr "Cắt nốt" + +#: app/track-editor.c:182 +msgid "Note delay" +msgstr "Trì hoãn nốt" + +#: app/track-editor.c:183 +msgid "Pattern delay" +msgstr "Trì hoãn mẫu" + +#: app/track-editor.c:188 +msgid "Volume slide down" +msgstr "Trượt âm lượng xuống" + +#: app/track-editor.c:189 +msgid "Volume slide up" +msgstr "Trượt âm lượng lên" + +#: app/track-editor.c:192 +msgid "Set vibrato speed" +msgstr "Äặt tốc Ä‘á»™ vibợrătá»™" + +#: app/track-editor.c:195 +msgid "Panning slide left" +msgstr "Äang kéo ngang trượt trái" + +#: app/track-editor.c:196 +msgid "Panning slide right" +msgstr "Äang kéo ngang trượt phải" + +#: app/track-editor.c:201 +msgid "sine" +msgstr "sin" + +#: app/track-editor.c:202 +msgid "ramp down" +msgstr "dốc xuống" + +#: app/track-editor.c:203 +msgid "square" +msgstr "vuông" + +#: app/track-editor.c:206 +#, c-format +msgid "[Chnn: %02d] [Pos: %03d] [Instr: %03d] [Vol: " +msgstr "" + +#: app/track-editor.c:223 +msgid "[Cmd: " +msgstr "" + +#: app/track-editor.c:244 +#, fuzzy +msgid "Extra fine porta up" +msgstr "Mang lên tế nhị" + +#: app/track-editor.c:247 +#, fuzzy +msgid "Extra fine porta down" +msgstr "Mang xuống tế nhị" + +#: app/track-editor.c:257 +msgid "None ]" +msgstr "Không có]" + +#: app/track-editor.c:269 +#, c-format +msgid " => tempo: %02d ]" +msgstr "" + +#: app/track-editor.c:271 +#, c-format +msgid " => BPM: %03d ]" +msgstr "" + +#: app/track-editor.c:274 +#, c-format +msgid " => offset: %d ]" +msgstr "" + +#: app/track-editor.c:280 +msgid ", continuous mode" +msgstr "" + +#: app/track-editor.c:284 +msgid " begin ]" +msgstr "" + +#: app/track-editor.c:286 +#, c-format +msgid " %02d times ]" +msgstr "" + +#: app/track-editor.c:470 +msgid "Jazz Edit:" +msgstr "Hiệu chỉnh Ja:" + +#: app/track-editor.c:524 +msgid "Tracker" +msgstr "Bá»™ theo dõi" + +#: app/track-editor.c:1249 +msgid "" +"The last track of the pattern is not empty. It will be shifted beyond the " +"pattern scope. You can increase the number of channels to see it. Continue?" +msgstr "" + +#: app/track-editor.c:1253 +msgid "" +"Warning! The last track of the pattern is not empty. It will be brought to " +"digital nought! Do you really want to do this?" +msgstr "" + +#: app/tracker-settings.c:262 +msgid "Font list" +msgstr "Danh sách phông chữ" + +#: app/tracker-settings.c:284 +msgid "Add font" +msgstr "Thêm phông chữ" + +#: app/tracker-settings.c:290 +msgid "Delete font" +msgstr "Xoá bá» phông chữ" + +#: app/tracker-settings.c:296 +msgid "Apply font" +msgstr "Ãp dụng phông chữ" + +#: app/tracker-settings.c:312 +msgid "Select font..." +msgstr "Chá»n phông chữ..." + +#: app/transposition.c:189 +msgid "Whole Song" +msgstr "Toàn bá»™ bài hát" + +#: app/transposition.c:190 +msgid "All Patterns" +msgstr "Má»i mẫu" + +#: app/transposition.c:191 +msgid "Current Pattern" +msgstr "Mẫu hiện có" + +#: app/transposition.c:192 +msgid "Current Track" +msgstr "Rãnh hiện có" + +#: app/transposition.c:195 +msgid "Current Instrument" +msgstr "Nhạc khí hiện có" + +#: app/transposition.c:196 +msgid "All Instruments" +msgstr "Má»i nhạc khí" + +#: app/transposition.c:199 +msgid "Half note up" +msgstr "Ná»­a nốt lên" + +#: app/transposition.c:200 +msgid "Half note down" +msgstr "Ná»­a nốt xuống" + +#: app/transposition.c:201 +msgid "Octave up" +msgstr "Quãng tám lên" + +#: app/transposition.c:202 +msgid "Octave down" +msgstr "Quãng tám xuống" + +#: app/transposition.c:205 +msgid "Exchange 1 <-> 2" +msgstr "Trao đổi 1 ↔ 2" + +#: app/transposition.c:206 +msgid "Change 1 -> 2" +msgstr "Äổi 1 → 2" + +#: app/transposition.c:215 +msgid "Transposition Tools" +msgstr "Công cụ đổi chá»—" + +#: app/transposition.c:225 +msgid "Scope of the operation:" +msgstr "Phạm vị thao tác:" + +#: app/transposition.c:230 +msgid "Note Transposition" +msgstr "Äổi chá»— nốt" + +#: app/transposition.c:256 +msgid "Instrument Changing" +msgstr "Chuyển đổi nhạc khí" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "Nhạc khí 1:" + +#: app/transposition.c:270 app/transposition.c:279 +msgid "Current instrument" +msgstr "Nhạc khí hiện có" + +#: app/transposition.c:277 +msgid "Instrument 2:" +msgstr "Nhạc khí 2:" + +#: app/transposition.c:301 +msgid "Transposition is possible only in editing mode" +msgstr "" + +#: app/xm.c:193 +msgid "Pattern header reading error." +msgstr "" + +#: app/xm.c:200 +#, fuzzy, c-format +msgid "Pattern length out of range: %d." +msgstr "Äá»™ dài mẫu ở ngoại phạm vị: %d:\n" + +#: app/xm.c:226 +#, fuzzy +msgid "Error loading notes." +msgstr "Gặp lá»—i khi tải mẫu." + +#: app/xm.c:331 app/xm.c:1063 +msgid "Sample header reading error." +msgstr "" + +#: app/xm.c:375 app/xm.c:393 app/xm.c:1167 +msgid "Sample data reading error." +msgstr "" + +#: app/xm.c:557 app/xm.c:590 app/xm.c:687 app/xm.c:701 app/xm.c:713 +#: app/xm.c:784 app/xm.c:1054 +#, fuzzy +msgid "Instrument header reading error." +msgstr "Nhạc khí đã được tải." + +#: app/xm.c:573 +#, c-format +msgid "" +"XM Load Error: Number of samples in the instrument > %u.\n" +"%s can try to find the next valid instrument. Do it?" +msgstr "" + +#: app/xm.c:594 +msgid "XM Load Error: Sample header size != 40." +msgstr "" + +#: app/xm.c:598 +#, fuzzy +msgid "Sample map reading error." +msgstr "Chuyển đổi nhạc khí" + +#: app/xm.c:602 +#, fuzzy +msgid "Volume envelope points reading error." +msgstr "Bá»™ bao kéo ngang" + +#: app/xm.c:607 +#, fuzzy +msgid "Panning envelope points reading error." +msgstr "Bá»™ bao kéo ngang" + +#: app/xm.c:613 +#, fuzzy +msgid "Envelope parameters reading error." +msgstr "Bá»™ bao kéo ngang" + +#: app/xm.c:632 +#, fuzzy, c-format +msgid "XM Load Warning: Invalid vibtype %d, using Sine." +msgstr "Kiểu rung không hợp %d nên dùng Sin.\n" + +#: app/xm.c:678 app/xm.c:1233 +#, fuzzy +msgid "Out of memory error!" +msgstr "Hết bá»™ nhá»› cho bá»™ nhá»› đệm sao chép:\n" + +#: app/xm.c:694 +#, fuzzy +msgid "The file is not an XI instrument." +msgstr "Tập tin không phải là nhạc khí XI." + +#: app/xm.c:717 +#, c-format +msgid "" +"Unknown XI version 0x%04x != 0x0102\n" +"Will you still try to load this instrument?" +msgstr "" + +#: app/xm.c:729 +#, fuzzy +msgid "Instrument sample map reading error." +msgstr "Nhạc khí đã được tải." + +#: app/xm.c:735 +#, fuzzy +msgid "Instrument volume envelope points reading error." +msgstr "Bá»™ bao kéo ngang" + +#: app/xm.c:742 +#, fuzzy +msgid "Instrument panning envelope points reading error." +msgstr "Bá»™ bao kéo ngang" + +#: app/xm.c:750 +#, fuzzy +msgid "Instrument envelope parameters reading error." +msgstr "Nhạc khí đã được tải." + +#: app/xm.c:769 +#, fuzzy, c-format +msgid "Invalid vibtype %d, using Sine." +msgstr "Kiểu rung không hợp %d nên dùng Sin.\n" + +#: app/xm.c:854 +msgid "" +"Some characters in the instrument or samples names cannot be stored in XM " +"format. They will be skipped." +msgstr "" + +#: app/xm.c:1042 app/xm.c:1071 app/xm.c:1085 +msgid "Module header reading error." +msgstr "" + +#: app/xm.c:1079 +msgid "Pattern order table reading error." +msgstr "" + +#: app/xm.c:1122 app/xm.c:1271 +msgid "Error while loading patterns." +msgstr "Gặp lá»—i khi tải mẫu." + +#: app/xm.c:1149 +#, c-format +msgid "" +"%d: Wrong loop start parameter. Don't know how to handle this. %04x %04x %04x" +msgstr "" + +#: app/xm.c:1200 +msgid "Can't open file" +msgstr "Không thể mở tập tin" + +#: app/xm.c:1215 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)" +msgstr "" + +#: app/xm.c:1222 +#, c-format +msgid "" +"Unknown XM version 0x%04x!= 0x0104. The results may be unpredictable.\n" +"Will you still try to load this module?" +msgstr "" + +#: app/xm.c:1252 +msgid "Invalid number of channels in XM (only 1..32 allowed)." +msgstr "" + +#: app/xm.c:1266 +#, fuzzy +msgid "Error while loading pattern order table." +msgstr "Gặp lá»—i khi tải mẫu." + +#: app/xm.c:1279 +msgid "" +"Instruments loading error. Some of instruments can be missing or corrupted." +msgstr "" + +#: app/xm.c:1291 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"Mô-Ä‘un chứa mẫu quá dài cho bá»™ hoà tiếng hiện có :\n" +"Äá»™ dài mẫu tối Ä‘a là %d." + +#: app/xm.c:1368 +msgid "" +"Some characters in either module, instruments or samples names cannot be " +"stored in XM format. They will be skipped." +msgstr "" + +#: app/xm.c:1431 +msgid "Bzzzz, error extracting song, aborting operation." +msgstr "" + +#: app/xm.c:1521 +#, c-format +msgid "%s (Err 0)" +msgstr "" + +#: app/xm.c:1534 +#, c-format +msgid "%s (Err 1)" +msgstr "" + +#: app/xm.c:1574 +#, c-format +msgid "%s (Err 2)" +msgstr "" + +#: app/xm.c:1602 +#, c-format +msgid "%s (Err 3)" +msgstr "" + +#: app/xm.c:1686 +msgid "Not FastTracker XM and not supported MOD format!" +msgstr "" +"• Không phải là XM FastTracker, cÅ©ng không phải là dạng thức MOD được há»— " +"trợ. •" + +#: app/xm.c:1704 app/xm.c:1731 +msgid "Error when file reading or unexpected end of file" +msgstr "Gặp lá»—i khi Ä‘á»c hoặc gặp kết thúc tập tin bất ngá»." + +#: app/xm.c:1710 +msgid "Incorrect or unsupported version of pattern file!" +msgstr "• Phiên bản tập tin mẫu là không đúng hoặc không được há»— trợ. •" + +#: app/xm.c:1716 +msgid "Incorrect pattern length!" +msgstr "• Äá»™ dài mẫu không đúng. •" + +#: app/xm.c:1761 app/xm.c:1787 +msgid "Error during saving pattern!" +msgstr "• Gặp lá»—i trong khi lÆ°u mẫu. •" + +#: app/midi.c:229 +#, c-format +msgid "error opening ALSA MIDI input stream (%s)\n" +msgstr "" + +#: app/midi.c:246 +#, c-format +msgid "Get client info error: %s\n" +msgstr "" + +#: app/midi.c:257 +#, c-format +msgid "Set client info error: %s\n" +msgstr "" + +#: app/midi.c:275 +#, c-format +msgid "error creating sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:319 +#, c-format +msgid "error subscribing sequencer port (%s)\n" +msgstr "" + +#: app/midi.c:432 +#, c-format +msgid "error closing handle (%s)\n" +msgstr "" + +#: app/midi-settings.c:399 +msgid "Auto connect" +msgstr "Tá»± Ä‘á»™ng kết nối" + +#: app/midi-settings.c:414 +msgid "Channel" +msgstr "Kênh" + +#: app/midi-settings.c:423 +msgid "Client number" +msgstr "Số hiệu ứng dụng khách" + +#: app/midi-settings.c:434 +msgid "Port number" +msgstr "Số hiệu cổng" + +#: app/midi-settings.c:453 +msgid "Input" +msgstr "Nhập" + +#: app/midi-settings.c:462 +msgid "For future development" +msgstr "Äể phát triển trong tÆ°Æ¡ng lai" + +#: app/midi-settings.c:468 +msgid "Output" +msgstr "Xuất" + +#: app/midi-settings.c:479 +msgid "Debug level" +msgstr "Cấp gỡ lá»—i" + +#: app/midi-settings.c:492 +msgid "Misc" +msgstr "Lặt vặt" + +#: app/midi-settings.c:532 +msgid "MIDI Configuration" +msgstr "Cấu hình MIDI" + +#: soundtracker.glade:10 +#, fuzzy +msgid "Pattern" +msgstr "_Mẫu" + +#: soundtracker.glade:49 +#, fuzzy +msgid "Track" +msgstr "_Rãnh" + +#: soundtracker.glade:88 soundtracker.glade:510 +msgid "_Kill notes" +msgstr "_Buá»™c kết thúc nốt" + +#: soundtracker.glade:104 soundtracker.glade:527 +msgid "_Insert track" +msgstr "_Chèn rãnh" + +#: soundtracker.glade:112 soundtracker.glade:536 +msgid "_Delete track" +msgstr "_Xoá bá» rãnh" + +#: soundtracker.glade:125 soundtracker.glade:550 +msgid "Increment cmd value" +msgstr "Tăng dần giá trị lệnh" + +#: soundtracker.glade:131 soundtracker.glade:557 +msgid "Decrement cmd value" +msgstr "Giảm dần giá trị lệnh" + +#: soundtracker.glade:150 soundtracker.glade:586 +msgid "C_lear block marks" +msgstr "X_oá các dấu khối" + +#: soundtracker.glade:185 soundtracker.glade:600 +msgid "_Interpolate effects" +msgstr "Ná»™i _suy hiệu ứng" + +#: soundtracker.glade:210 +msgid "_File" +msgstr "_Tập tin" + +#: soundtracker.glade:217 +#, fuzzy +msgid "_Open…" +msgstr "_Mở..." + +#: soundtracker.glade:237 +#, fuzzy +msgid "Save _as…" +msgstr "LÆ°u _dạng..." + +#: soundtracker.glade:252 +#, fuzzy +msgid "Save Module as _WAV…" +msgstr "LÆ°u mô-Ä‘un dạng _WAV..." + +#: soundtracker.glade:261 +#, fuzzy +msgid "Save _XM without samples…" +msgstr "LÆ°u XM không có mẫu..." + +#: soundtracker.glade:276 +msgid "_Recent" +msgstr "" + +#: soundtracker.glade:302 +msgid "_Module" +msgstr "_Mô-Ä‘un" + +#: soundtracker.glade:309 +#, fuzzy +msgid "Clear _All" +msgstr "Xoá _hết" + +#: soundtracker.glade:318 +msgid "Clear _Patterns Only" +msgstr "Xoá chỉ các _mẫu" + +#: soundtracker.glade:333 +msgid "_Optimize Module" +msgstr "_Ưu tiên hóa mô-Ä‘un" + +#: soundtracker.glade:346 +#, fuzzy +msgid "_Set Optimal Amplification" +msgstr "Khuếch đại toàn cục" + +#: soundtracker.glade:358 +msgid "_Edit" +msgstr "_Hiệu chỉnh" + +#: soundtracker.glade:398 +#, fuzzy +msgid "_Jazz edit mode" +msgstr "Chế Ä‘á»™ hiệu chỉnh nhạc _ja" + +#: soundtracker.glade:412 +#, fuzzy +msgid "Transp_osition…" +msgstr "Äổi ch_á»—..." + +#: soundtracker.glade:426 soundtracker.glade:654 +msgid "_Pattern" +msgstr "_Mẫu" + +#: soundtracker.glade:468 soundtracker.glade:765 +msgid "_Track" +msgstr "_Rãnh" + +#: soundtracker.glade:569 +msgid "_Selection" +msgstr "Vùng _chá»n" + +#: soundtracker.glade:577 +msgid "_Mark mode" +msgstr "Chế Ä‘á»™ đánh _dấu" + +#: soundtracker.glade:614 +msgid "Transpose half-note up" +msgstr "Äổi chá»— ná»­a nốt lên" + +#: soundtracker.glade:622 +msgid "Transpose half-note down" +msgstr "Äổi chá»— ná»­a nốt xuống" + +#: soundtracker.glade:630 +msgid "Transpose octave up" +msgstr "Äổi chố quãng tám lên" + +#: soundtracker.glade:638 +msgid "Transpose octave down" +msgstr "Äổi chố quãng tám xuống" + +#: soundtracker.glade:661 +#, fuzzy +msgid "_Load Pattern…" +msgstr "Tải _mẫu" + +#: soundtracker.glade:670 +#, fuzzy +msgid "_Save Current Pattern…" +msgstr "_LÆ°u mẫu hiện có" + +#: soundtracker.glade:685 +msgid "_Find Unused Pattern" +msgstr "Tìm mẫu kh_ông dùng" + +#: soundtracker.glade:694 +msgid "_Copy Current to Unused Pattern" +msgstr "_Chép Ä‘iá»u hiện thá»i vào mẫu không dùng" + +#: soundtracker.glade:703 +#, fuzzy +msgid "_Add Free Pattern" +msgstr "Mở _rá»™ng mẫu hiện có" + +#: soundtracker.glade:711 +msgid "Add Free _Pattern and Copy" +msgstr "" + +#: soundtracker.glade:724 +msgid "C_lear Unused Patterns" +msgstr "X_oá các mẫu không dùng" + +#: soundtracker.glade:732 +msgid "_Pack Patterns" +msgstr "_Nén mẫu" + +#: soundtracker.glade:745 +#, fuzzy +msgid "S_hrink Current Pattern" +msgstr "Thu hẹ_p mẫu hiện có" + +#: soundtracker.glade:753 +msgid "_Expand Current Pattern" +msgstr "Mở _rá»™ng mẫu hiện có" + +#: soundtracker.glade:773 +msgid "_Toggle Current Track Permanentness" +msgstr "" + +#: soundtracker.glade:781 +msgid "Toggle _All Tracks Permanentness" +msgstr "" + +#: soundtracker.glade:789 +#, fuzzy +msgid "_Mute / Unmute Current Track" +msgstr "Rãnh hiện có" + +#: soundtracker.glade:798 +#, fuzzy +msgid "_Unmute All Tracks" +msgstr "Rãnh hiện có" + +#: soundtracker.glade:807 +#, fuzzy +msgid "Current Track _Solo" +msgstr "Rãnh hiện có" -#: app/track-editor.c:116 app/track-editor.c:180 -msgid "Tone porta" -msgstr "Mang giá»ng" +#: soundtracker.glade:820 +msgid "_Instrument" +msgstr "Nhạc _khí" -#: app/track-editor.c:117 app/track-editor.c:176 -msgid "Vibrato" -msgstr "Vi-bợ-ră-tá»™" +#: soundtracker.glade:827 +#, fuzzy +msgid "_Load XI…" +msgstr "Tải XI" -#: app/track-editor.c:118 -msgid "Tone porta + Volume slide" -msgstr "Mạng giá»ng và Trượt âm lượng" +#: soundtracker.glade:836 +#, fuzzy +msgid "_Save XI…" +msgstr "LÆ°u XI" -#: app/track-editor.c:119 -msgid "Vibrato + Volume slide" -msgstr "Vi-bợ-ră-tá»™ và Trượt âm lượng" +#: soundtracker.glade:850 +msgid "_Clear Current" +msgstr "X_oá Ä‘iá»u hiện có" -#: app/track-editor.c:120 -msgid "Tremolo" -msgstr "Vê" +#: soundtracker.glade:865 +msgid "_Delete Unused Instruments" +msgstr "_Xoá bá» các nhạc khí không dùng" -#: app/track-editor.c:121 app/track-editor.c:177 -msgid "Set panning" -msgstr "Äặt kéo ngang" +#: soundtracker.glade:880 +msgid "_Settings" +msgstr "Thiết _lập" -#: app/track-editor.c:122 app/track-editor.c:124 -msgid "Position jump" -msgstr "BÆ°á»›c vị trí" +#: soundtracker.glade:888 +msgid "Display _Oscilloscopes" +msgstr "Hiện các cái nghiệm d_ao Ä‘á»™ng" -#: app/track-editor.c:123 app/track-editor.c:125 app/track-editor.c:201 -msgid "Set volume" -msgstr "Äặt âm lượng" +#: soundtracker.glade:896 +msgid "_Loop playback" +msgstr "" -#: app/track-editor.c:126 -msgid "Pattern break" -msgstr "Ngắt mẫu" +#: soundtracker.glade:905 +msgid "_Tracker" +msgstr "Bá»™ th_eo dõi" -#: app/track-editor.c:128 -msgid "Set tempo/bpm" -msgstr "Äặt nhịp Ä‘á»™/NMP" +#: soundtracker.glade:913 +#, fuzzy +msgid "_Flicker-free Scrolling" +msgstr "C_uá»™n miá»…n lung linh" -#: app/track-editor.c:129 -msgid "Set global volume" -msgstr "Äặt âm lượng toàn cục" +#: soundtracker.glade:921 +#, fuzzy +msgid "_Previous Font" +msgstr "Phông chữ t_rÆ°á»›c" -#: app/track-editor.c:130 -msgid "Global volume slide" -msgstr "Bá»™ trượt âm lượng toàn cục" +#: soundtracker.glade:930 +#, fuzzy +msgid "_Next Font" +msgstr "Phông chữ _kế" -#: app/track-editor.c:133 -msgid "Key off" -msgstr "Ra phím" +#: soundtracker.glade:944 +#, fuzzy +msgid "Change Preferred _Accidental Type" +msgstr "Äổi kiểu dấu th_ăng giáng bất thÆ°á»ng đã muốn" -#: app/track-editor.c:134 -msgid "Set envelop position" -msgstr "Äặt vị trí bao" +#: soundtracker.glade:953 +#, fuzzy +msgid "Change Effect Column _Editing Direction" +msgstr "Thay đổi hÆ°á»›ng hiệu chỉnh cá»™t hiệu ứng" -#: app/track-editor.c:138 -msgid "Panning slide" -msgstr "Äang kéo ngang trượt" +#: soundtracker.glade:970 +#, fuzzy +msgid "_Keyboard Configuration…" +msgstr "Cấu hình Bàn phím" -#: app/track-editor.c:139 -msgid "LP filter resonance" -msgstr "Cá»™ng hưởng lá»c phát lâu" +#: soundtracker.glade:980 +#, fuzzy +msgid "_Audio Configuration…" +msgstr "Cấu hình Âm thanh" -#: app/track-editor.c:140 -msgid "Multi retrig note" -msgstr "Nốt Ä‘a gây nên lại" +#: soundtracker.glade:990 +#, fuzzy +msgid "_GUI Configuration…" +msgstr "Cấu hình giao diện" -#: app/track-editor.c:142 -msgid "Tremor" -msgstr "Run" +#: soundtracker.glade:1000 +#, fuzzy +msgid "_MIDI Configuration…" +msgstr "Cấu hình MIDI" -#: app/track-editor.c:148 -msgid "LP filter cutoff" -msgstr "Ngưỡng lá»c phát lâu" +#: soundtracker.glade:1016 +#, fuzzy +msgid "_Disable Splash Screen" +msgstr "Tắt màn hình giật gân" -#: app/track-editor.c:153 -msgid "Fine porta up" -msgstr "Mang lên tế nhị" +#: soundtracker.glade:1023 +#, fuzzy +msgid "_Save Settings Now" +msgstr "_LÆ°u thiết lập ngay" -#: app/track-editor.c:154 -msgid "Fine porta down" -msgstr "Mang xuống tế nhị" +#: soundtracker.glade:1034 +msgid "Save Settings on _Exit" +msgstr "LÆ°u thiết lập khi t_hoát" -#: app/track-editor.c:155 -msgid "Set gliss control" -msgstr "Äặt Ä‘iá»u khiển bÆ°á»›c lÆ°á»›t" +#: soundtracker.glade:1046 +msgid "_Help" +msgstr "Trợ _giúp" -#: app/track-editor.c:156 -msgid "Set vibrato control" -msgstr "Äặt Ä‘iá»u khiển vi-bợ-ră-tá»™" +#: soundtracker.glade:1053 +#, fuzzy +msgid "_About…" +msgstr "_Giá»›i thiệu..." -#: app/track-editor.c:157 -msgid "Set finetune" -msgstr "Äặt dò chỉnh" +#: soundtracker.glade:1068 +#, fuzzy +msgid "Show _Tips…" +msgstr "Hiện _mẹo..." -#: app/track-editor.c:158 -msgid "Set loop begin/loop" -msgstr "Äặt lặp Ä‘i/lặp" +#: soundtracker.glade:1078 +#, fuzzy +msgid "_XM Effects" +msgstr "Hiệu ứng _XM..." -#: app/track-editor.c:159 -msgid "Set tremolo control" -msgstr "Äặt Ä‘iá»u khiển vê" +#, fuzzy +#~ msgid "PlaySng" +#~ msgstr "Phát bài hát" -#: app/track-editor.c:161 -msgid "Retrig note" -msgstr "Nốt gây nên lại" +#, fuzzy +#~ msgid "Play song." +#~ msgstr "Phát bài hát" -#: app/track-editor.c:162 app/track-editor.c:174 -msgid "Fine volume slide up" -msgstr "Trượt lên âm lượng tế nhị" +#~ msgid "transport master" +#~ msgstr "truyá»n tải cái" -#: app/track-editor.c:163 app/track-editor.c:173 -msgid "Fine volume slide down" -msgstr "Trượt xuống âm lượng tế nhị" +#~ msgid "SoundTracker Startup" +#~ msgstr "Khởi chạy Bá»™ Theo dõi Âm thanh" -#: app/track-editor.c:164 -msgid "Note cut" -msgstr "Cắt nốt" +#~ msgid "Vibrato Type:" +#~ msgstr "Kiểu vi-bợ-ră-tá»™ :" -#: app/track-editor.c:165 -msgid "Note delay" -msgstr "Trì hoãn nốt" +#~ msgid "VolFade" +#~ msgstr "MỠâm" -#: app/track-editor.c:166 -msgid "Pattern delay" -msgstr "Trì hoãn mẫu" +#~ msgid "Set loop begin/loop" +#~ msgstr "Äặt lặp Ä‘i/lặp" -#: app/track-editor.c:171 -msgid "Volume slide down" -msgstr "Trượt âm lượng xuống" +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Nốt:" -#: app/track-editor.c:172 -msgid "Volume slide up" -msgstr "Trượt âm lượng lên" +#~ msgid "Error while loading instruments." +#~ msgstr "Gặp lá»—i trong khi tải các nhạc khí." -#: app/track-editor.c:175 -msgid "Set vibrato speed" -msgstr "Äặt tốc Ä‘á»™ vibợrătá»™" +#~ msgid "" +#~ "Note that the ESD output is unusable in\n" +#~ "interactive mode because of the latency added\n" +#~ "by ESD. Use the OSS or ALSA output plug-ins\n" +#~ "for serious work." +#~ msgstr "" +#~ "Hãy ghi chú rằng không thể sá»­ dụng dữ liệu xuất\n" +#~ "ESD trong chế Ä‘á»™ tÆ°Æ¡ng tác, vì sá»± âm á»· do ESD thêm.\n" +#~ "Hãy sá»­ dụng bá»™ cầm phít OSS hay ALSA\n" +#~ "cho việc quan trá»ng nào." -#: app/track-editor.c:178 -msgid "Panning slide left" -msgstr "Äang kéo ngang trượt trái" +#, fuzzy +#~ msgid "Couldn't connect to ESD for sound output" +#~ msgstr "" +#~ "Không thể kết nối đến ESD để xuất âm thanh:\n" +#~ "%s" -#: app/track-editor.c:179 -msgid "Panning slide right" -msgstr "Äang kéo ngang trượt phải" +#, fuzzy +#~ msgid "These changes won't take effect until you restart capturing." +#~ msgstr "" +#~ "Những thay đổi này sẽ không hoạt Ä‘á»™ng cho đến khi đã khởi chạy lại lấy " +#~ "mẫu." -#: app/track-editor.c:184 -msgid "sine" -msgstr "sin" +#, fuzzy +#~ msgid "Instrument header reading error" +#~ msgstr "Chuyển đổi nhạc khí" -#: app/track-editor.c:185 -msgid "ramp down" -msgstr "dốc xuống" +#, fuzzy +#~ msgid "%s: Required sound encoding not supported." +#~ msgstr "%s: chÆ°a há»— trợ cách mã hoá âm thanh cần thiết.\n" -#: app/track-editor.c:186 -msgid "square" -msgstr "vuông" +#~ msgid "%s: %s" +#~ msgstr "%s: %s" -#: app/track-editor.c:231 app/track-editor.c:237 app/track-editor.c:254 -#: app/track-editor.c:260 -#, c-format -msgid "None ]" -msgstr "Không có]" +#~ msgid "%s: Cannot play (%s)" +#~ msgstr "%s: không thể phát (%s)" -#: app/track-editor.c:360 -msgid "Jazz Edit:" -msgstr "Hiệu chỉnh Ja:" +#~ msgid "%s: Cannot record (%s)" +#~ msgstr "%s: không thể thu (%s)" -#: app/track-editor.c:405 -msgid "Tracker" -msgstr "Bá»™ theo dõi" +#~ msgid "Unknown XI version 0x%x\n" +#~ msgstr "Không biết phiên bản XI 0x%x\n" -#: app/tracker-settings.c:235 -msgid "Font list" -msgstr "Danh sách phông chữ" +#~ msgid "out_1" +#~ msgstr "ra_1" -#: app/tracker-settings.c:255 -msgid "Add font" -msgstr "Thêm phông chữ" +#~ msgid "out_2" +#~ msgstr "ra_2" -#: app/tracker-settings.c:261 -msgid "Delete font" -msgstr "Xoá bá» phông chữ" +#~ msgid "Monitor" +#~ msgstr "Màn hình" -#: app/tracker-settings.c:267 -msgid "Apply font" -msgstr "Ãp dụng phông chữ" +#, fuzzy +#~ msgid "2 smpls" +#~ msgstr "#mẫu" -#: app/tracker-settings.c:282 -msgid "Up" -msgstr "Lên" - -#: app/tracker-settings.c:285 -msgid "Down" -msgstr "Xuống" +#~ msgid "OK" +#~ msgstr "Äược" -#: app/tracker-settings.c:288 -msgid "Select font..." -msgstr "Chá»n phông chữ..." +#~ msgid "Cancel" +#~ msgstr "Thôi" -#: app/transposition.c:198 -msgid "Whole Song" -msgstr "Toàn bá»™ bài hát" +#~ msgid "(%d bytes)" +#~ msgstr "(%d byte)" -#: app/transposition.c:199 -msgid "All Patterns" -msgstr "Má»i mẫu" +#~ msgid "Estimated audio delay: %f microseconds" +#~ msgstr "Trì hoãn âm thanh xấp xỉ: %f micrô-giây" -#: app/transposition.c:200 -msgid "Current Pattern" -msgstr "Mẫu hiện có" +#~ msgid "ALSA card number:" +#~ msgstr "Số thẻ ALSA:" -#: app/transposition.c:201 -msgid "Current Track" -msgstr "Rãnh hiện có" +#~ msgid "" +#~ "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Không thể mở thiết bị ALSA để nhập âm thanh (thẻ:%d, thiết bị:%d):\n" +#~ "%s" -#: app/transposition.c:205 -msgid "Current Instrument" -msgstr "Nhạc khí hiện có" +#~ msgid "Required sound output parameters not supported.\n" +#~ msgstr "ChÆ°a há»— trợ các tham số xuất âm thanh cần thiết.\n" -#: app/transposition.c:206 -msgid "All Instruments" -msgstr "Má»i nhạc khí" +#~ msgid "" +#~ "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +#~ "%s" +#~ msgstr "" +#~ "Không thể mở thiết bị ALSA để xuất âm thanh (thẻ:%d, thiết bị:%d):\n" +#~ "%s" -#: app/transposition.c:210 -msgid "Half note up" -msgstr "Ná»­a nốt lên" +#~ msgid "Required output-channel parameters not supported.\n" +#~ msgstr "ChÆ°a há»— trợ các tham số kênh xuất âm thanh cần thiết.\n" -#: app/transposition.c:211 -msgid "Half note down" -msgstr "Ná»­a nốt xuống" +#~ msgid "Alsa setup error.\n" +#~ msgstr "Lá»—i thiết lập ALSA.\n" -#: app/transposition.c:212 -msgid "Octave up" -msgstr "Quãng tám lên" +#~ msgid "" +#~ "Couldn't open %s for sound output:\n" +#~ "%s" +#~ msgstr "" +#~ "không thể mở %s để xuất âm thanh:\n" +#~ "%s" -#: app/transposition.c:213 -msgid "Octave down" -msgstr "Quãng tám xuống" +#~ msgid "soundtracker" +#~ msgstr "bá»™ theo dõi âm thanh" -#: app/transposition.c:216 -msgid "Exchange 1 <-> 2" -msgstr "Trao đổi 1 ↔ 2" +#~ msgid "Save Song" +#~ msgstr "LÆ°u bài hát" -#: app/transposition.c:217 -msgid "Change 1 -> 2" -msgstr "Äổi 1 → 2" +#~ msgid "Yes" +#~ msgstr "Có" -#: app/transposition.c:226 app/transposition.c:229 -msgid "Transposition Tools" -msgstr "Công cụ đổi chá»—" +#~ msgid "No" +#~ msgstr "Không" -#: app/transposition.c:250 -msgid "Scope of the operation:" -msgstr "Phạm vị thao tác:" +#~ msgid "Close" +#~ msgstr "Äóng" -#: app/transposition.c:257 -msgid "Note Transposition" -msgstr "Äổi chá»— nốt" +#~ msgid "No file selected." +#~ msgstr "ChÆ°a chá»n tập tin." -#: app/transposition.c:288 -msgid "Instrument Changing" -msgstr "Chuyển đổi nhạc khí" +#~ msgid "Are you sure you want to overwrite the file?" +#~ msgstr "Bạn có chắc muốn ghi đè lên tập tin này không?" -#: app/transposition.c:303 -msgid "Instrument 1:" -msgstr "Nhạc khí 1:" +#~ msgid "Load XM..." +#~ msgstr "Tải XM..." -#: app/transposition.c:305 app/transposition.c:315 -msgid "Current instrument" -msgstr "Nhạc khí hiện có" +#~ msgid "Save XM..." +#~ msgstr "LÆ°u XM..." -#: app/transposition.c:313 -msgid "Instrument 2:" -msgstr "Nhạc khí 2:" +#~ msgid "Save song as XM..." +#~ msgstr "LÆ°u bài hát dạng XM..." -#: app/xm.c:196 -#, c-format -msgid "Pattern length out of range: %d.\n" -msgstr "Äá»™ dài mẫu ở ngoại phạm vị: %d:\n" +#~ msgid "Load Instrument..." +#~ msgstr "Tải nhạc khí" -#: app/xm.c:547 -msgid "File is no XI instrument." -msgstr "Tập tin không phải là nhạc khí XI." +#~ msgid "Save Instrument..." +#~ msgstr "LÆ°u nhạc khí..." -#: app/xm.c:557 -#, c-format -msgid "Unknown XI version 0x%x\n" -msgstr "Không biết phiên bản XI 0x%x\n" +#~ msgid "" +#~ "The keyboard configuration file is defective.\n" +#~ "Please use the Keyboard Configuration dialog." +#~ msgstr "" +#~ "Tập tin cấu hình bàn phím là sai.\n" +#~ "Hãy sá»­ dụng há»™p thoại Cấu hình Bàn phím." -#: app/xm.c:587 -#, c-format -msgid "Invalid vibtype %d, using Sine.\n" -msgstr "Kiểu rung không hợp %d nên dùng Sin.\n" +#~ msgid "Ok" +#~ msgstr "Äược" -#: app/xm.c:859 app/xm.c:984 -msgid "Error while loading patterns." -msgstr "Gặp lá»—i khi tải mẫu." +#~ msgid "_Quit" +#~ msgstr "T_hoát" -#: app/xm.c:927 -msgid "Can't open file" -msgstr "Không thể mở tập tin" +#~ msgid "C_ut" +#~ msgstr "Cắ_t" -#: app/xm.c:990 -msgid "Error while loading instruments." -msgstr "Gặp lá»—i trong khi tải các nhạc khí." +#~ msgid "_Copy" +#~ msgstr "_Chép" -#: app/xm.c:1001 -#, c-format -msgid "" -"Module contains sample(s) that are too long for the current mixer.\n" -"Maximum sample length is %d." -msgstr "" -"Mô-Ä‘un chứa mẫu quá dài cho bá»™ hoà tiếng hiện có :\n" -"Äá»™ dài mẫu tối Ä‘a là %d." +#~ msgid "_Paste" +#~ msgstr "_Dán" -#: app/xm.c:1399 -msgid "Not FastTracker XM and not supported MOD format!" -msgstr "" -"• Không phải là XM FastTracker, cÅ©ng không phải là dạng thức MOD được há»— " -"trợ. •" +#~ msgid "P_aste" +#~ msgstr "D_án" -#: app/xm.c:1414 app/xm.c:1435 -msgid "Error when file reading or unexpected end of file" -msgstr "Gặp lá»—i khi Ä‘á»c hoặc gặp kết thúc tập tin bất ngá»." +#~ msgid "_Load XI..." +#~ msgstr "_Tải XI..." -#: app/xm.c:1418 -msgid "Incorrect or unsupported version of pattern file!" -msgstr "• Phiên bản tập tin mẫu là không đúng hoặc không được há»— trợ. •" +#~ msgid "_Save XI..." +#~ msgstr "_LÆ°u XI..." -#: app/xm.c:1422 -msgid "Incorrect pattern length!" -msgstr "• Äá»™ dài mẫu không đúng. •" +#~ msgid "Change effect column editing _direction" +#~ msgstr "Äổi h_Æ°á»›ng hiệu chỉnh cá»™t hiệu ứng" -#: app/xm.c:1468 -msgid "Error during saving pattern!" -msgstr "• Gặp lá»—i trong khi lÆ°u mẫu. •" +#~ msgid "_Keyboard Configuration..." +#~ msgstr "Cấu hình _Bàn phím..." -#: app/midi-settings-050.c:497 app/midi-settings-09x.c:500 -msgid "Auto connect" -msgstr "Tá»± Ä‘á»™ng kết nối" +#~ msgid "_Audio Configuration..." +#~ msgstr "Cấu hình _Âm thanh..." -#: app/midi-settings-050.c:512 app/midi-settings-09x.c:515 -msgid "Channel" -msgstr "Kênh" +#~ msgid "_GUI Configuration..." +#~ msgstr "_Cấu hình g_iao diện..." -#: app/midi-settings-050.c:521 app/midi-settings-09x.c:524 -msgid "Client number" -msgstr "Số hiệu ứng dụng khách" +#~ msgid "_MIDI Configuration..." +#~ msgstr "Cấu hình _MIDI..." -#: app/midi-settings-050.c:531 app/midi-settings-09x.c:534 -msgid "Port number" -msgstr "Số hiệu cổng" +#~ msgid "Load Sample..." +#~ msgstr "Tải mẫu..." -#: app/midi-settings-050.c:549 app/midi-settings-09x.c:552 -msgid "Input" -msgstr "Nhập" +#~ msgid "Save WAV..." +#~ msgstr "LÆ°u WAV..." -#: app/midi-settings-050.c:558 app/midi-settings-09x.c:561 -msgid "For future development" -msgstr "Äể phát triển trong tÆ°Æ¡ng lai" +#~ msgid "8363" +#~ msgstr "8363" -#: app/midi-settings-050.c:564 app/midi-settings-09x.c:567 -msgid "Output" -msgstr "Xuất" +#~ msgid "Execute" +#~ msgstr "Thá»±c hiện" -#: app/midi-settings-050.c:575 app/midi-settings-09x.c:578 -msgid "Debug level" -msgstr "Cấp gỡ lá»—i" +#~ msgid "Apply" +#~ msgstr "Ãp dụng" -#: app/midi-settings-050.c:587 app/midi-settings-09x.c:590 -msgid "Misc" -msgstr "Lặt vặt" +#~ msgid "Drivers" +#~ msgstr "Trình Ä‘iá»u khiển" -#: app/midi-settings-050.c:631 app/midi-settings-09x.c:634 -msgid "MIDI Configuration" -msgstr "Cấu hình MIDI" +#~ msgid "Up" +#~ msgstr "Lên" + +#~ msgid "Down" +#~ msgstr "Xuống" diff -Nru soundtracker-0.6.8/README soundtracker-1.0.2~pre2/README --- soundtracker-0.6.8/README 2006-01-15 15:34:28.000000000 +0000 +++ soundtracker-1.0.2~pre2/README 2021-02-26 14:46:52.000000000 +0000 @@ -4,11 +4,28 @@ http://www.soundtracker.org/ -------------------------------------------------------------- - v0.6.8 - - Written and (C) 1998-2006 + Originally written and (C) 1998-2006 by Michael Krause [ raw style ^ farbrausch & lego ] - mk@soundtracker.org, http://www.soundtracker.org/raw/ + + +How to build from SourceForge GIT repository: + +- Clone repository: + + git clone https://git.code.sf.net/p/soundtracker/git soundtracker-git + +- Create build scripts (not necessary when building from a release archive): + + autoreconf -vfi + + (I used Linux Mint 19.1 Tessa with autoconf 2.69, automake 1.15.1, autopoint 0.19.8.1. This (among + others) requires macro definitions AM_PATH_ALSA and AM_PATH_SDL, which are defined by files in + /usr/share/aclocal, which in turn are provided by packages libasound2-dev and libsdl1.2-dev.) + +- Then run the usual configure / make / make install procedure + + (Requires GTK+ 2.0, which on Linux Mint 19.1 is available through libgtk2.0-dev. Suggest to use + libsndfile, which requires package libsndfile1-dev.) WHAT IS IT? @@ -64,22 +81,38 @@ Note that some functions are only accessible using the keyboard. These are all important key combinations, mostly inspired by the great Amiga -ProTracker (most alphanumeric keys are mapped to a piano keyboard): +ProTracker (most alphanumeric keys are mapped to a piano keyboard). +More actuali info about the keybindings can be found in the +doc/keybingings.odt file. TRACK EDITOR ------------ Right Ctrl Play Song Right Alt Play Pattern +Right Super Key Play Song from the current pattern position +Shift + the three above mentioned keys additionaly switch recoding mode on. + Right WinMenu Key Just play current pattern row +Shift + WinMeny key Play selected block + +These are the default keybindings; all these keys are configurable through +Settings->Keyboard->Other keys. + +Song/Pattern/Selection playing can be either looped or not depending on the +state of the looping toggle button which is to the right of the Play/Stop +buttons. + Space Stop Playing; edit mode on/off +Ctrl + Space Stop playing without edir mode switching Escape Edit mode on/off without stopping playing Shift - Space Toggle "jazz edit" mode F1 ... F7 Change editing octave Left Ctrl-1 ... -8 Change jump value -Two configurable keys Increase/decrease jump value (see Settings->Keyboard-> - other keys) +Two configurable keys Increase/decrease jump value (see Settings->Keyboard-> +(` and ~ (Shift + `) other keys) +by default) CrsrUp / Down Walk around in current pattern PgUp / Down Walk around in current pattern, quickly @@ -98,19 +131,16 @@ alphabetical row (UC-0 ... UC-1) -Left Shift + Ctrl + Fast jump to channels 17..24 +Left Shift + Alt + Fast jump to channels 17..24 above mentioned keys Left Shift + first 8 Fast jump to channels 9..16 keys in the second alphabetical row -Left Shift + Ctrl + Fast jump to channels 25..32 +Left Shift + Alt + Fast jump to channels 25..32 above mentioned keys -Holding fast jump keys Mute/unmute selected channel -and pressing SPACE - Left Ctrl - CrsrLeft Previous Instrument (faster with Left Shift) Left Ctrl - CrsrRight Next Instrument (faster with Left Shift) @@ -120,21 +150,29 @@ Left Alt - CrsrLeft Previous Pattern (faster with Left Shift) Left Alt - CrsrRight Next Pattern (faster with Left Shift) -Left Shift - CrsrLeft Previous Position in the pattern order table -Left Shift - CrsrRight Next Position in the pattern order table +Left Ctrl - PgUp Previous Position in the pattern order table + (faster with Left Shift) +Left Ctrl - PgDown Next Position in the pattern order table + (faster with Left Shift) +Left Ctrl - Home First Position in the pattern order table +Left Ctrl - End Last Position in the pattern order table Left Shift - CrsrLeft Previous Position in the pattern order table Left Shift - CrsrRight Next Position in the pattern order table -Left Ctrl - B Start marking a block +Left Ctrl - B Start/stop marking a block (all selection modes) Left Ctrl - C Copy block Left Ctrl - X Cut block Left Ctrl - V Paste block and advance to end -Left Alt - Q Transpose block by one half-tone up -Left Alt - A Transpose block by one half-tone down -Left Alt + Shift - Q Transpose block by one octave up -Left Alt + Shift - A Transpose block by one octave down +"FT2" and "Mixed" selection mode: Left Shift + CrsrLeft/Right/Up/Down/ +Home/End/PgUp/PgDown/F9-F12 to start marking a block. Stop marking: +releasing Shift in the "FT2" mode, Ctrl + B in the "Mixed" mode. + +Left Alt - = Transpose block by one half-tone up +Left Alt - - Transpose block by one half-tone down +Left Alt + Shift - = Transpose block by one octave up +Left Alt + Shift - - Transpose block by one octave down Left Shift - F3 Cut track Left Shift - F4 Copy track @@ -158,6 +196,12 @@ Down) Left Shift + M. Weel Scroll left and right through pattern (like a scrollbar under the tracker window) +Left Alt + M. Weel If the editing mode is on and the mouse pointer is above + either volume or FX column, the volume/FX parameter will be + increased or decreased. For FXes having two parameters, both + nibbes can be changed independently. +Left Ctrl + M. Weel Scroll position in the pattern order table (faster with + Left Shift). If SoundTracker is unable to configure the notes on your keyboard on its own, you must use the "Keyboard Configuration" dialog to set up @@ -186,19 +230,67 @@ (stay in the effects column) and hit Ctrl-minus ("decrement cmd value") to automatically insert a 3f there. + volume column + _____________ + +By default SoundTracker displays the volume colums as it is stored in +the XM file format, with the volume shifted + 0x10 from its effective +value (so that the volume value 0x10 corresponds to zero) and effects +coded by hexadecimal numbers. But the format of the volume column can +be switched to that resembling FastTracker ("FT2-like volume column" +GUI setting), where the effective volume value is displayed and +effects are coded either by ASCII or UNICODE mnemonic symbols (Set the +"Use symbols in the volume column" if you want to use mnemonics, +provided that your tracker font has necessary symbols). In the FT2 +mode the alternative keybindings for the volume column effects are +used, they given in the parentheses in the XM effects' cheat sheet. +These keybindings are mosltly the same as the effects' symbols when +not in the mnemonic mode (except that for panning slide left/right +either "" or "l/r" keys can be used). It is also possible to input +hexadecimal symbols corresponding to effects like in ST mode, the +correct effect mnemonics will be displayed (that is, typing "e" yields +to the ">" symbol). The only exception is "d" which is mapped to the +Fine volume slide down FX coded by digit "8". + +There is also an option "Decimal volume representation" in FT2 volume +colomn mode causing the volume value be represented by decimal number +from 0 to 64. This doesn't affect the effects representation, except +that the digit "6" cannot be used to code the Volume slide down FX, +only "-" sign. + INSTRUMENT EDITOR ----------------- -In the Envelope editor, use Ctrl + middle mouse button in order to -zoom in and out of the envelope. Use middle mouse button alone to pan -the display. Use left mouse button to move and add points. +In the Envelope editor, use Shift + middle mouse button or Ctrl + mouse +wheel in order to zoom in and out of the envelope. Use middle mouse +button alone to pan the display. Use mouse wheel to pan the display +horizontally and Shift + mouse wheel to pan the display vertically. Use +left mouse button to move and add points. With Ctrl pressed point +movement is restricted to either horizontal or vertical direction. + +At the piano keyboard use left and middle mouse buttons to play sounds, +right mouse button assigns the current sample to the clicked key. By +moving the mouse while keeping the right key pressed it is possible to +assign a sample to a range of keys. SAMPLE EDITOR ------------- Hold Shift and use left / right mouse buttons to set the loop points -in the sample display. +in the sample display. Use middle mouse button or mouse wheel to pan +the display. Use Ctrl + mouse wheel to zoom in and out the display. + +Keybindings: +Ctrl + A Select All +Ctrl + Shift + A Select None +Alt + S Zoom to Selection +Ctrl + = Zoom In +Ctrl + - Zoom Out +Ctrl + 1 1 : 1 Scale +Del Delete Selected range +Enter Toggle Sampling (when the sampling window is active), + this keybnding is a configurable one REPORTING BUGS @@ -273,13 +365,31 @@ cvs -d:pserver:anonymous@cvs.soundtracker.sourceforge.net:/cvsroot/soundtracker login -After anonymously logging in: +After anonymously logging in: cvs -z8 -d:pserver:anonymous@cvs.soundtracker.sourceforge.net:/cvsroot/soundtracker co soundtracker After the initial checkout, you can change into this directory and execute cvs commands without the -d option. For example: - cvs update + cvs update Watch the ChangeLog for detailed information about what has changed. + + +GIT REPOSITORY +============== + +The freshest (but sometimes buggy) sources are available using git. + +So, if you want to give it a try (from SourceForge git howto): + + git clone https://git.code.sf.net/p/soundtracker/git soundtracker-git + +After the initial checkout, you can change into this directory and +execute git commands. For example, if you want to update the source tree: + + git fetch + +Watch the ChangeLog and the git history for detailed information about +what has changed. diff -Nru soundtracker-0.6.8/rightarrow.xpm soundtracker-1.0.2~pre2/rightarrow.xpm --- soundtracker-0.6.8/rightarrow.xpm 2003-08-04 08:59:49.000000000 +0000 +++ soundtracker-1.0.2~pre2/rightarrow.xpm 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -/* XPM */ -static char * rightarrow_xpm[] = { -"16 16 3 1", -" c None", -". c #000000", -"+ c #A092A0", -" ", -" . ", -" .. ", -" .+. ", -" .++. ", -"..........+++. ", -".+++++++++++++. ", -".++++++++++++++.", -".++++++++++++++.", -".+++++++++++++. ", -"..........+++. ", -" .++. ", -" .+. ", -" .. ", -" . ", -" "}; diff -Nru soundtracker-0.6.8/ROADMAP soundtracker-1.0.2~pre2/ROADMAP --- soundtracker-0.6.8/ROADMAP 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/ROADMAP 2021-02-26 19:45:45.000000000 +0000 @@ -0,0 +1,46 @@ +Scheduled for 1.0.x: + +Full-screen mode: also hide menu, playlist, scopes and stuff between the playlist and scopes. +Editing toggle, jump, octave => songpos and pattern. Main notebook: hide thumbs. +Later: semi-transparent scopes above the upper tracks' part in the playing mode. + +Jack control modes: slave, master, autonomous; + +Interface improvements: the whole sample drawing after the recording. + +(optional) sample/inst number drawing inside scope; scope-group: permanent pango layout +for each scope, make an inheritant (quasi?) class with number object inside, try to make +it inheriting both ScalablePic and SampleDisplay + +Support for extra menu entries described +in the XML format for using the external programs as filters. The programs +should support communication through STDIO streams. + +Fix modules with broken samples or patterns. Develop an universal correlative seeking +procedure with adjustable threshold. + +1.1.x + +Modularized file operations; + +Probably dynamic sound drivers' loading; + +Plugins in the sample editor; + +Preparation for modularization: +1) Separate libstsubs with gui-subs.c, st_subs and recode.c; remove endian-conv.c; +2) Free gui-subs.c from references to mainwindow; +3) Check dependency on driver-inout.h/audio.h in headers and other interdependencies +between headers. playback_driver, editing_driver -> audioconfig.c, in audio.c they are extern. +current_driver is internal in audio.c, audio_get_play_time() with -1 on failure, +separate audio-defs.h from audio.h Including gtk.h in gui.h isn't needed since it's included in gui-subs.h + +1.2.x + +MetaModule (.xxm) related stuff, see TODO.extra + +2.x + +New object-oriented module player with per-channel rendering. The tracker itself is still (x)xm-based. +New features: DSP can be applied to channel groups in the Mixing Desk; instrument triggers (limited +function set, but features like NNA will be implemented and not only). \ No newline at end of file diff -Nru soundtracker-0.6.8/sample-editor.xml soundtracker-1.0.2~pre2/sample-editor.xml --- soundtracker-0.6.8/sample-editor.xml 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/sample-editor.xml 2020-11-09 19:45:17.000000000 +0000 @@ -0,0 +1,587 @@ + + + + + + True + + + True + _File + True + + + True + + + _Open… + False + True + image1 + False + + + + + _Save WAV… + False + True + image2 + False + + + + + Save _Region… + False + True + image3 + False + + + + + False + + + + + S_ampling… + True + True + image4 + False + + + + + + + + + + True + _Edit + True + + + True + + + gtk-cut + True + True + True + + + + + + gtk-copy + True + True + True + + + + + + gtk-paste + True + True + True + + + + + + gtk-delete + True + True + True + + + + + + C_lear Sample + True + True + image5 + False + + + + + + True + + + + + _Reverse + True + True + image6 + False + + + + + + Crop + True + False + image7 + False + + + + + + _Trim + True + True + image8 + False + + + + + + _Normalize + True + True + + + + + + _Volume Ramp + True + True + + + + + + Insert _Silence + True + True + + + + + + + + + + True + _Selection + True + + + True + + + Select _All + True + True + image14 + False + + + + + + Select _None + True + True + image9 + False + + + + + + Set as _Loop + True + True + + + + + + + + + + True + _View + True + + + True + + + Zoom to _Selection + True + True + image10 + False + + + + + + Show _All + True + True + image11 + False + + + + + + Zoom _In (+50%) + True + True + image12 + False + + + + + + Zoom _Out (-50%) + True + True + image13 + False + + + + + + + + + + True + + + Open… + False + image1a + Open Sound File + + + False + False + + + + + Save WAV… + False + image2a + Save as WAV + + + False + False + + + + + Sampling… + True + image4a + Sampling + + + + False + False + + + + + True + + + False + False + + + + + True + gtk-cut + Cut + + + + False + False + + + + + True + gtk-copy + Copy + + + + False + False + + + + + True + gtk-paste + Paste + + + + False + False + + + + + True + gtk-delete + Delete + + + + False + False + + + + + True + Clear + image5a + Clear Sample + + + + False + False + + + + + True + + + False + False + + + + + True + Select All + image14a + Select All + + + + False + False + + + + + True + Select None + image9a + Select None + + + + False + False + + + + + True + + + False + False + + + + + True + Zoom to Sel + image10a + Zoom to Selection + + + + False + False + + + + + True + Show All + image11a + Show All + + + + False + False + + + + + True + Zoom In + image12a + Zoom In (+50%) + + + + False + False + + + + + True + Zoom Out + image13a + Zoom Out (-50%) + + + + False + False + + + + + True + gtk-open + 1 + + + True + gtk-open + + + True + gtk-save-as + 1 + + + True + gtk-save-as + + + True + gtk-save-as + 1 + + + True + audio-input-microphone + 1 + + + True + audio-input-microphone + + + True + gtk-clear + 1 + + + True + gtk-clear + + + True + object-flip-horizontal + 1 + + + True + st-crop + 1 + + + True + gtk-cut + 1 + + + True + st-select-none + 1 + + + True + st-select-none + + + True + view-fullscreen + 1 + + + True + view-fullscreen + + + True + zoom-original + 1 + + + True + zoom-original + + + True + zoom-in + 1 + + + True + zoom-in + + + True + zoom-out + 1 + + + True + zoom-out + + + True + st-select-all + 1 + + + True + st-select-all + + diff -Nru soundtracker-0.6.8/sharp.xpm soundtracker-1.0.2~pre2/sharp.xpm --- soundtracker-0.6.8/sharp.xpm 2003-08-04 08:59:49.000000000 +0000 +++ soundtracker-1.0.2~pre2/sharp.xpm 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -/* XPM */ -static char * sharp1_xpm[] = { -"16 16 64 1", -" c None", -". c #FFFFFF", -"+ c #646564", -"@ c #656565", -"# c #545554", -"$ c #ADACAD", -"% c #F0F0F0", -"& c #595B59", -"* c #616161", -"= c #383938", -"- c #9B9C9B", -"; c #EFEFEF", -"> c #424342", -", c #818181", -"' c #959695", -") c #212121", -"! c #0C0D0C", -"~ c #909090", -"{ c #B3B4B3", -"] c #252625", -"^ c #0E0E0E", -"/ c #020202", -"( c #000000", -"_ c #242424", -": c #ACACAC", -"< c #747574", -"[ c #080808", -"} c #030503", -"| c #424142", -"1 c #2B2A2B", -"2 c #595959", -"3 c #717271", -"4 c #161716", -"5 c #7D7E7D", -"6 c #D5D5D5", -"7 c #565756", -"8 c #525152", -"9 c #BCBDBC", -"0 c #454645", -"a c #979797", -"b c #CFD0CF", -"c c #484948", -"d c #111111", -"e c #949594", -"f c #C2C3C2", -"g c #303230", -"h c #414141", -"i c #989998", -"j c #141414", -"k c #010301", -"l c #0A0C0A", -"m c #3A3A3A", -"n c #676767", -"o c #070707", -"p c #434243", -"q c #A8A6A8", -"r c #4B4D4B", -"s c #A9AAA9", -"t c #232423", -"u c #F2F2F2", -"v c #757675", -"w c #777777", -"x c #3F3F3F", -"y c #A2A1A2", -" .. ", -" ...+@. ", -" .#$%&*. ", -" .=-;&>. ", -" .=,')!~. ", -" .{]^/(_:. ", -" .<[}|12. ", -" .345678. ", -" 90abcde. ", -" fghg([i. ", -" .,j(klm. ", -" .nopqr*. ", -" .st-;&*. ", -" .=-uvw. ", -" .xy... ", -" .. "}; diff -Nru soundtracker-0.6.8/soundtracker.1 soundtracker-1.0.2~pre2/soundtracker.1 --- soundtracker-0.6.8/soundtracker.1 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/soundtracker.1 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,146 @@ +.TH SOUNDTRACKER 1 +.\" NAME should be all caps, SECTION should be 1-8, maybe w/ subsection +.\" other parms are allowed: see man(7), man(1) +.SH NAME +soundtracker \- a tracker for gnome that supports .xm files +.SH SYNOPSIS +.B soundtracker +.SH "DESCRIPTION" +This manual page documents briefly +.BR soundtracker. + +This manual page was written for the Debian GNU/Linux distribution +because the original program does not have a manual page. +Instead, it has some documentation in +.I /usr/share/doc/soundtracker +which will be more uptodate than this man page. + +.PP +.B soundtracker +is a program that allows one to arrange many sound samples into a tune, +comprising of multiple `tracks' which are mixed together, typically in +software. +.SH USING +Note that some functions are only accessible using the keyboard. These +are all important key combinations, mostly inspired by the great Amiga +ProTracker (most alphanumeric keys are mapped to a piano keyboard): +.SS TRACK EDITOR +.TP +Right Ctrl +Play Song +.TP +Right Alt +Play Pattern +.TP +Right Shift +Record (Play Pattern & Edit On) -- not yet! +.TP +Space +Stop Playing; edit mode on/off +.PP +.TP +F1 ... F7 +Change editing octave +.TP +Left Ctrl-1 ... -8 + Change jump value +.TP +CrsrUp / Down +Walk around in current pattern +.TP +PgUp / Down +Walk around in current pattern, quickly +.TP +F9 +Jump to position 0 +.TP +F10 +Jump to position L / 4 +.TP +F11 +Jump to position L / 2 +.TP +F12 +Jump to position 3 * L / 4 +.TP +CrsrLeft / Right +Change pattern column and/or channel +.TP +Tab +Skip to same column in next channel +.TP +Left Ctrl - CrsrLeft +Previous Instrument (faster with Left Shift) +.TP +Left Ctrl - CrsrRight +Next Instrument (faster with Left Shift) +.TP +Left Ctrl - CrsrDown +Previous Sample (faster with Left Shift) +.TP +Left Ctrl - CrsrUp +Next Sample (faster with Left Shift) +.TP +Left Alt - CrsrLeft +Previous Pattern (faster with Left Shift) +.TP +Left Alt - CrsrRight +Next Pattern (faster with Left Shift) +.TP +Left Ctrl - B +Start marking a block (one track horizontally) +.TP +Left Ctrl - C +Copy block +.TP +Left Ctrl - X +Cut block +.TP +Left Ctrl - V +Paste block and advance to end +.TP +Left Shift - F3 +Cut track +.TP +Left Shift - F4 +Copy track +.TP +Left Shift - F5 +Paste track +.TP +Left Alt - F3 +Cut pattern +.TP +Left Alt - F4 +Copy pattern +.TP +Left Alt - F5 +Paste pattern +.TP +Any other keys +Play notes on the keyboard. + +.SS SAMPLE EDITOR + +Hold Shift and use left / right mouse buttons to set the loop points +in the sample display. + +.SH SEE ALSO +If you want to know more about tracking in general, +.I http://www.united-trackers.org/ +has a lot of resources. + +Also see the SoundTracker homepage, +.I http://www.soundtracker.org/ + +SoundTracker still needs detailed documentation. If you want to help +out with this, you should become familiar with DocBook or similar SGML +tools first. +.SH AUTHOR +Michael Krause [ raw style / lego ] wrote SoundTracker. + +This manual page was mostly lifted from +.I /usr/share/doc/soundtracker/README +by Frankie Fisher , for the Debian GNU/Linux system (but may be used by others). +.SH BUGS +This documentation is possibly outdated. diff -Nru soundtracker-0.6.8/soundtracker.appdata.xml soundtracker-1.0.2~pre2/soundtracker.appdata.xml --- soundtracker-0.6.8/soundtracker.appdata.xml 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/soundtracker.appdata.xml 2019-12-08 20:18:47.000000000 +0000 @@ -0,0 +1,26 @@ + + + + soundtracker.desktop + CC0-1.0 + SoundTracker + SoundTracker + Play and edit XM and MOD musical modules + Проигрыватель и редактор музыки в формате Ñ‚Ñ€Ñкерных модулей XM и MOD + +

+ SoundTracker is a program for playing and editing musical files in the so-called + tracker formats XM and MOD. It offers most of the functions of the famous + Amiga/PC(MSDOS) program FastTracker II and includes a number of new features. +

+
+ +

+ SoundTracker - программа Ð´Ð»Ñ Ð¿Ñ€Ð¾ÑÐ»ÑƒÑˆÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¸ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÑƒÐ·Ñ‹ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… файлов + в так называемых Ñ‚Ñ€Ñкерных форматах (поддерживаютÑÑ MOD и XM). SoundTracker + поддерживает большинÑтво возможноÑтей популÑрной программы FastTracker II Ð´Ð»Ñ + компьютеров Amiga и PC(MSDOS), и помимо них, обладает Ñ€Ñдом новых функций. +

+
+ http://soundtracker.org +
diff -Nru soundtracker-0.6.8/soundtracker_convert_config soundtracker-1.0.2~pre2/soundtracker_convert_config --- soundtracker-0.6.8/soundtracker_convert_config 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/soundtracker_convert_config 2018-10-22 16:08:35.000000000 +0000 @@ -0,0 +1,38 @@ +#!/bin/bash +pushd ~ + if [ ! -d .soundtracker ]; then + echo "Warning!!! .soundtracker does not exist. Nothing to do!" + exit 1; + fi + if [ -a .soundtracker/config ]; then + if [ -n "$1" ]; then + if [ "$1" = "-f" ]; then + rm -rf .soundtracker/config; + else + echo "Warning!!! .soundtracker/config already exists! Use \"soundtracker_convert_config -f\" to override" + exit 1; + fi; + else + echo "Warning!!! .soundtracker/config already exists! Use \"soundtracker_convert_config -f\" to override" + exit 1; + fi; + fi; + CHARSET=`echo $LANG | sed s/^.*[.]//` + for i in `ls .soundtracker`; do + if [ -f .soundtracker/$i ] && [ $i != keyboard ] && [ $i != tracker-fonts ] && [ $i != jazz ] && [ $i != non-gnome-accels ] && [ $i != config ]; then + echo "[$i]" >> .soundtracker/config + cat .soundtracker/$i | iconv -f $CHARSET -t UTF-8 >> .soundtracker/config; + fi + if [ $i == settings ]; then + echo -n "fonts=" >> .soundtracker/config + cat .soundtracker/tracker-fonts | tr '\n' ';' >> .soundtracker/config + echo >> .soundtracker/config + echo -n "jazz-toggle=" >> .soundtracker/config + cat .soundtracker/jazz | sed "s/^jazz-toggle.*= *//" | tr '\n' ';' >> .soundtracker/config + echo >> .soundtracker/config; + fi + done + echo "[keyboard]" >> .soundtracker/config + cat .soundtracker/keyboard | sed -n -e '1~2h; 2~2{x;G;s/\n/=/;p}' >> .soundtracker/config +popd + diff -Nru soundtracker-0.6.8/soundtracker.desktop soundtracker-1.0.2~pre2/soundtracker.desktop --- soundtracker-0.6.8/soundtracker.desktop 2002-06-28 12:41:15.000000000 +0000 +++ soundtracker-1.0.2~pre2/soundtracker.desktop 2020-04-23 13:26:07.000000000 +0000 @@ -1,11 +1,18 @@ [Desktop Entry] +Version=1.0 Name=SoundTracker Name[pl]=SoundTracker Name[de]=SoundTracker +Name[ru]=SoundTracker + Comment=Module Player / Editor -Comment[pl]=Odtwarzacz i edytor modu³ów +Comment[pl]=Odtwarzacz i edytor modułów Comment[de]=Modul-Player / -Editor -Exec=soundtracker -#Icon=soundtracker.png -Terminal=0 +Comment[ru]=Программа Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð¸ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹ + +Exec=soundtracker %F +Icon=soundtracker-icon +Terminal=false Type=Application +Categories=X-Gtk;Audio;Sequencer;Player;Midi;AudioVideoEditing;Music;AudioVideo; +MimeType=audio/x-xm;audio/x-mod; diff -Nru soundtracker-0.6.8/soundtracker.glade soundtracker-1.0.2~pre2/soundtracker.glade --- soundtracker-0.6.8/soundtracker.glade 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/soundtracker.glade 2021-02-13 21:10:35.000000000 +0000 @@ -0,0 +1,1414 @@ + + + + + + True + + + True + Pattern + True + + + True + + + gtk-cut + True + True + True + + + + + + gtk-copy + True + True + True + + + + + + gtk-paste + True + True + True + + + + + + True + + + + + True + _Render to sample + True + + + + + + + + + + True + Track + True + + + True + + + gtk-cut + True + True + True + + + + + + gtk-copy + True + True + True + + + + + + gtk-paste + True + True + True + + + + + + True + + + + + _Kill notes + True + True + image1 + False + + + + + + True + + + + + True + _Insert track + True + + + + + + True + _Delete track + True + + + + + + True + + + + + True + Increment cmd value + + + + + True + Decrement cmd value + True + + + + + True + _Render to sample + True + + + + + + + + + + True + Selection + True + + + True + + + True + C_lear block marks + True + + + + + + gtk-cut + True + True + True + + + + + + gtk-copy + True + True + True + + + + + + gtk-paste + True + True + True + + + + + + Paste _in Place + image29 + True + True + + + + + + True + + + + + True + _Interpolate effects + True + + + + + + True + Interpolate m_atching effects only + True + + + + + + True + _Render to sample + True + + + + + + + + + + True + gtk-new + + + + + + True + + + True + + + True + _File + True + + + True + + + _Open… + True + True + image6 + False + + + + + + gtk-save + True + True + True + + + + + + + Save _as… + True + True + image7 + False + + + + + + True + + + + + Save Module as _WAV… + True + True + image2 + False + + + + + Save _XM without samples… + True + True + image3 + False + + + + + True + + + + + True + _Recent + True + + + + + True + + + + + gtk-quit + True + True + True + + + + + + + + + + + True + _Module + True + + + True + + + Clear _All + True + True + image8 + False + + + + + Clear _Patterns Only + True + True + image9 + False + + + + + True + + + + + True + _Optimize Module + True + + + + + + True + + + + + True + Adjust all Samples' _Volume + True + + + + + + True + _Set Optimal Amplification + True + + + + + + True + _Render Module to Sample + True + + + + + + + + + + True + _Edit + True + + + True + + + gtk-cut + True + True + True + + + + + + gtk-copy + True + True + True + + + + + + gtk-paste + True + True + True + + + + + + Paste _in Place + True + True + image28 + + + + + + + True + + + + + _Undo + True + True + image25 + False + + + + + + + _Redo + True + True + image26 + False + + + + + + + True + Undo _History + True + image27 + False + + + + + + + True + + + + + True + _Jazz edit mode + True + + + + + + + True + + + + + True + Transp_osition… + True + + + + + + + True + + + + + True + _Pattern + True + + + True + + + gtk-cut + True + True + True + + + + + + + gtk-copy + True + True + True + + + + + + + gtk-paste + True + True + True + + + + + + + + + + + True + _Track + True + + + True + + + gtk-cut + True + True + True + + + + + + + gtk-copy + True + True + True + + + + + + + gtk-paste + True + True + True + + + + + + + True + + + + + _Kill notes + True + True + image10 + False + + + + + + + True + + + + + True + _Insert track + True + + + + + + + True + _Delete track + True + + + + + + + True + + + + + True + Increment cmd value + + + + + + True + Decrement cmd value + True + + + + + + + + + + True + _Selection + True + + + True + + + True + _Mark mode + True + + + + + + + True + C_lear block marks + True + + + + + + + True + + + + + True + _Interpolate effects + True + + + + + + + True + Interpolate m_atching effects only + True + + + + + + + True + + + + + True + Transpose half-note up + True + + + + + + True + Transpose half-note down + True + + + + + + True + Transpose octave up + True + + + + + + True + Transpose octave down + True + + + + + + True + + + + + True + _Render to sample + True + + + + + + + + + + + + + + True + _Pattern + True + + + True + + + _Load Pattern… + True + True + image11 + False + + + + + _Save Current Pattern… + True + True + image12 + False + + + + + True + + + + + True + _Find Unused Pattern + True + False + image30 + + + + + + + True + _Copy Current to Unused Pattern + True + + + + + + + True + _Add Free Pattern + True + + + + + + True + Add Free _Pattern and Copy + True + + + + + + True + + + + + True + C_lear Unused Patterns + True + + + + + + True + _Pack Patterns + True + + + + + + True + + + + + True + S_hrink Current Pattern + True + + + + + + True + _Expand Current Pattern + True + + + + + + True + + + + + True + _Render to sample + True + + + + + + + + + + True + _Track + True + + + True + + + True + _Toggle Current Track Permanentness + True + + + + + + True + Toggle _All Tracks Permanentness + True + + + + + + True + _Mute / Unmute Current Track + True + + + + + + + True + _Unmute All Tracks + True + + + + + + + True + Current Track _Solo + True + + + + + + + True + + + + + True + _Render to sample + True + + + + + + + + + + True + _Instrument + True + + + True + + + _Load XI… + True + True + image13 + False + + + + + _Save XI… + True + True + image14 + False + + + + + True + + + + + _Clear Current + True + True + image15 + False + + + + + + True + _Find Instrument + True + False + image31 + + + + + + + True + + + + + _Delete Unused Instruments + True + True + image16 + False + + + + + + + + + + True + _Settings + True + + + True + + + True + Display _Oscilloscopes + True + + + + + + True + _Loop playback + True + + + + + + + True + _Tracker + True + + + True + + + True + _Flicker-free Scrolling + True + + + + + + True + _Previous Font + True + + + + + + + True + _Next Font + True + + + + + + + True + + + + + True + Change Preferred _Accidental Type + True + + + + + + + True + Change Effect Column _Editing Direction + True + + + + + + + + + + + True + + + + + _Keyboard Configuration… + True + True + image17 + False + + + + + + _Audio Configuration… + True + True + image18 + False + + + + + + _GUI Configuration… + True + True + image19 + False + + + + + + _MIDI Configuration… + True + True + image20 + False + + + + + + True + + + + + True + _Disable Splash Screen + True + + + + + + _Save Settings Now + True + True + image21 + False + + + + + + True + Save Settings on _Exit + True + + + + + + + + + + True + _Help + True + + + True + + + _About… + True + True + image22 + False + + + + + + True + + + + + Show _Tips… + True + True + image23 + False + + + + + + _XM Effects + True + True + image24 + False + + + + + + + + + + + False + 0 + + + + + + + True + gtk-save-as + 1 + + + True + gtk-save-as + 1 + + + True + gtk-open + 1 + + + True + gtk-save-as + 1 + + + True + gtk-new + 1 + + + True + gtk-new + 1 + + + True + gtk-new + + + True + gtk-open + 1 + + + True + gtk-save-as + 1 + + + True + gtk-open + 1 + + + True + gtk-save-as + 1 + + + True + gtk-new + + + True + gtk-clear + 1 + + + True + gtk-preferences + 1 + + + True + gtk-preferences + 1 + + + True + gtk-preferences + 1 + + + True + gtk-preferences + 1 + + + True + gtk-save + 1 + + + True + gtk-about + 1 + + + True + gtk-help + 1 + + + True + gtk-help + 1 + + + True + gtk-undo + 1 + + + True + gtk-redo + 1 + + + True + st-history + 1 + + + True + gtk-paste + 1 + + + True + gtk-paste + 1 + + + True + gtk-find + 1 + + + True + gtk-find + 1 + + Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/soundtracker-icon.png and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/soundtracker-icon.png differ diff -Nru soundtracker-0.6.8/soundtracker.spec soundtracker-1.0.2~pre2/soundtracker.spec --- soundtracker-0.6.8/soundtracker.spec 2006-02-25 12:04:32.000000000 +0000 +++ soundtracker-1.0.2~pre2/soundtracker.spec 2018-10-22 16:08:35.000000000 +0000 @@ -1,6 +1,6 @@ %define name soundtracker -%define version 0.6.8 -%define release 30 +%define version 0.6.7 +%define release 29 %define prefix /usr Summary: Sound modules editor/player @@ -29,7 +29,7 @@ %setup %build -LINGUAS="da de es fr gl hr it ja no pl ru rw sk sl sv tr vi" CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} --disable-alsa --disable-sndfile +LINGUAS="da de es fr gl hr it ja no pl ru sk sl sv" CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} --disable-alsa --disable-sndfile make %install Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/soundtracker_splash.png and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/soundtracker_splash.png differ diff -Nru soundtracker-0.6.8/soundtracker.xml soundtracker-1.0.2~pre2/soundtracker.xml --- soundtracker-0.6.8/soundtracker.xml 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/soundtracker.xml 2021-02-13 21:10:35.000000000 +0000 @@ -0,0 +1,1414 @@ + + + + + + True + + + True + Pattern + True + + + True + + + gtk-cut + True + True + True + + + + + + gtk-copy + True + True + True + + + + + + gtk-paste + True + True + True + + + + + + True + + + + + True + _Render to sample + True + + + + + + + + + + True + Track + True + + + True + + + gtk-cut + True + True + True + + + + + + gtk-copy + True + True + True + + + + + + gtk-paste + True + True + True + + + + + + True + + + + + _Kill notes + True + True + image1 + False + + + + + + True + + + + + True + _Insert track + True + + + + + + True + _Delete track + True + + + + + + True + + + + + True + Increment cmd value + + + + + True + Decrement cmd value + True + + + + + True + _Render to sample + True + + + + + + + + + + True + Selection + True + + + True + + + True + C_lear block marks + True + + + + + + gtk-cut + True + True + True + + + + + + gtk-copy + True + True + True + + + + + + gtk-paste + True + True + True + + + + + + Paste _in Place + image29 + True + True + + + + + + True + + + + + True + _Interpolate effects + True + + + + + + True + Interpolate m_atching effects only + True + + + + + + True + _Render to sample + True + + + + + + + + + + True + gtk-new + + + + + + True + + + True + + + True + _File + True + + + True + + + _Open… + True + True + image6 + False + + + + + + gtk-save + True + True + True + + + + + + + Save _as… + True + True + image7 + False + + + + + + True + + + + + Save Module as _WAV… + True + True + image2 + False + + + + + Save _XM without samples… + True + True + image3 + False + + + + + True + + + + + True + _Recent + True + + + + + True + + + + + gtk-quit + True + True + True + + + + + + + + + + + True + _Module + True + + + True + + + Clear _All + True + True + image8 + False + + + + + Clear _Patterns Only + True + True + image9 + False + + + + + True + + + + + True + _Optimize Module + True + + + + + + True + + + + + True + Adjust all Samples' _Volume + True + + + + + + True + _Set Optimal Amplification + True + + + + + + True + _Render Module to Sample + True + + + + + + + + + + True + _Edit + True + + + True + + + gtk-cut + True + True + True + + + + + + gtk-copy + True + True + True + + + + + + gtk-paste + True + True + True + + + + + + Paste _in Place + True + True + image28 + + + + + + + True + + + + + _Undo + True + True + image25 + False + + + + + + + _Redo + True + True + image26 + False + + + + + + + True + Undo _History + True + image27 + False + + + + + + + True + + + + + True + _Jazz edit mode + True + + + + + + + True + + + + + True + Transp_osition… + True + + + + + + + True + + + + + True + _Pattern + True + + + True + + + gtk-cut + True + True + True + + + + + + + gtk-copy + True + True + True + + + + + + + gtk-paste + True + True + True + + + + + + + + + + + True + _Track + True + + + True + + + gtk-cut + True + True + True + + + + + + + gtk-copy + True + True + True + + + + + + + gtk-paste + True + True + True + + + + + + + True + + + + + _Kill notes + True + True + image10 + False + + + + + + + True + + + + + True + _Insert track + True + + + + + + + True + _Delete track + True + + + + + + + True + + + + + True + Increment cmd value + + + + + + True + Decrement cmd value + True + + + + + + + + + + True + _Selection + True + + + True + + + True + _Mark mode + True + + + + + + + True + C_lear block marks + True + + + + + + + True + + + + + True + _Interpolate effects + True + + + + + + + True + Interpolate m_atching effects only + True + + + + + + + True + + + + + True + Transpose half-note up + True + + + + + + True + Transpose half-note down + True + + + + + + True + Transpose octave up + True + + + + + + True + Transpose octave down + True + + + + + + True + + + + + True + _Render to sample + True + + + + + + + + + + + + + + True + _Pattern + True + + + True + + + _Load Pattern… + True + True + image11 + False + + + + + _Save Current Pattern… + True + True + image12 + False + + + + + True + + + + + True + _Find Unused Pattern + True + False + image30 + + + + + + + True + _Copy Current to Unused Pattern + True + + + + + + + True + _Add Free Pattern + True + + + + + + True + Add Free _Pattern and Copy + True + + + + + + True + + + + + True + C_lear Unused Patterns + True + + + + + + True + _Pack Patterns + True + + + + + + True + + + + + True + S_hrink Current Pattern + True + + + + + + True + _Expand Current Pattern + True + + + + + + True + + + + + True + _Render to sample + True + + + + + + + + + + True + _Track + True + + + True + + + True + _Toggle Current Track Permanentness + True + + + + + + True + Toggle _All Tracks Permanentness + True + + + + + + True + _Mute / Unmute Current Track + True + + + + + + + True + _Unmute All Tracks + True + + + + + + + True + Current Track _Solo + True + + + + + + + True + + + + + True + _Render to sample + True + + + + + + + + + + True + _Instrument + True + + + True + + + _Load XI… + True + True + image13 + False + + + + + _Save XI… + True + True + image14 + False + + + + + True + + + + + _Clear Current + True + True + image15 + False + + + + + + True + _Find Instrument + True + False + image31 + + + + + + + True + + + + + _Delete Unused Instruments + True + True + image16 + False + + + + + + + + + + True + _Settings + True + + + True + + + True + Display _Oscilloscopes + True + + + + + + True + _Loop playback + True + + + + + + + True + _Tracker + True + + + True + + + True + _Flicker-free Scrolling + True + + + + + + True + _Previous Font + True + + + + + + + True + _Next Font + True + + + + + + + True + + + + + True + Change Preferred _Accidental Type + True + + + + + + + True + Change Effect Column _Editing Direction + True + + + + + + + + + + + True + + + + + _Keyboard Configuration… + True + True + image17 + False + + + + + + _Audio Configuration… + True + True + image18 + False + + + + + + _GUI Configuration… + True + True + image19 + False + + + + + + _MIDI Configuration… + True + True + image20 + False + + + + + + True + + + + + True + _Disable Splash Screen + True + + + + + + _Save Settings Now + True + True + image21 + False + + + + + + True + Save Settings on _Exit + True + + + + + + + + + + True + _Help + True + + + True + + + _About… + True + True + image22 + False + + + + + + True + + + + + Show _Tips… + True + True + image23 + False + + + + + + _XM Effects + True + True + image24 + False + + + + + + + + + + + False + 0 + + + + + + + True + gtk-save-as + 1 + + + True + gtk-save-as + 1 + + + True + gtk-open + 1 + + + True + gtk-save-as + 1 + + + True + gtk-new + 1 + + + True + gtk-new + 1 + + + True + gtk-new + + + True + gtk-open + 1 + + + True + gtk-save-as + 1 + + + True + gtk-open + 1 + + + True + gtk-save-as + 1 + + + True + gtk-new + + + True + gtk-clear + 1 + + + True + gtk-preferences + 1 + + + True + gtk-preferences + 1 + + + True + gtk-preferences + 1 + + + True + gtk-preferences + 1 + + + True + gtk-save + 1 + + + True + gtk-about + 1 + + + True + gtk-help + 1 + + + True + gtk-help + 1 + + + True + gtk-undo + 1 + + + True + gtk-redo + 1 + + + True + st-history + 1 + + + True + gtk-paste + 1 + + + True + gtk-paste + 1 + + + True + gtk-find + 1 + + + True + gtk-find + 1 + + diff -Nru soundtracker-0.6.8/stop.xpm soundtracker-1.0.2~pre2/stop.xpm --- soundtracker-0.6.8/stop.xpm 2003-08-04 08:59:49.000000000 +0000 +++ soundtracker-1.0.2~pre2/stop.xpm 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -/* XPM */ -static char * stop_xpm[] = { -"16 16 53 1", -" c None", -". c #000000", -"+ c #FFA9A9", -"@ c #FFB7B7", -"# c #FF8484", -"$ c #FFC2C2", -"% c #FFFCFC", -"& c #FFA3A3", -"* c #FF8888", -"= c #FF8383", -"- c #FF7171", -"; c #D55E5E", -"> c #FF8585", -", c #FFCFCF", -"' c #FFF5F5", -") c #FE8888", -"! c #F96161", -"~ c #AD4444", -"{ c #FF9797", -"] c #FFCBCB", -"^ c #FA6363", -"/ c #FA6565", -"( c #EF5D5D", -"_ c #FF9999", -": c #FF7878", -"< c #FB6868", -"[ c #FC6969", -"} c #FF9A9A", -"| c #E55959", -"1 c #FD6B6B", -"2 c #FE6E6E", -"3 c #FA6464", -"4 c #F55F5F", -"5 c #E95B5B", -"6 c #FFB2B2", -"7 c #FF9191", -"8 c #FC6868", -"9 c #FFB4B4", -"0 c #F06161", -"a c #FB6666", -"b c #FB6D6D", -"c c #FE7070", -"d c #FF8787", -"e c #B84848", -"f c #FF9393", -"g c #DF6262", -"h c #D05151", -"i c #F76565", -"j c #AA4343", -"k c #EB7979", -"l c #BA5151", -"m c #B24E4E", -"n c #A44040", -"................", -".+@############.", -".$%&*#####=---;.", -".>,')!!!!!!!!!~.", -".{]$^!!!!//((!~.", -"._: this is somehow related to +the FileChooserWidget used in file-operations.c. + +improve font selection dialog: show only monospace / fixed-width fonts: GTK+3 +has https://developer.gnome.org/gtk3/stable/GtkFontChooserDialog.html which +permits installation of a font filter, which gets the PangoFontFamily we can +filter on. -Find out why the x86-assembly mixer doesn't work any more. - -configure sagt bei "checking for bison": v. ?.??, bad. - -non-rpm bindist? - -in doku mit rein, daß das setuid-bit gesetzt sein sollte, auch wenn -manche distros das eventuell abschalten!! - -send archive to translation project - -> From: Martin Andersson -> theres a bug in sample_editor_zoom_[in|out]_clicked in -> soundtracker-0.6.7-pre3. you can only zoom in to -> minimal of 2 samples. With zoom to selection you can -> zoom in to 1 sample, but then you cant zoom out again -> :-) A quick source fix was to double the values of the -> variables ns,ne,l and divide ns and ne by 2 in the -> call to sample_display_set_window. - -aktuelles pattern während des playbacks ändern? -Thu Oct 8 22:22:50 1998 Michael Krause - * gui.c (change_current_pattern): Call mixer_set_pattern even when - we're not in playing_pattern mode. Can now change pattern while - playing a mod, just like in PT. - -buffer overflow patch von ... öh, irgendjemandem da. - -final transition to gtk2? - -Als v1.0.0 releasen? - - - - - - -WWW / Doku: ------------- - -web-page updaten bzgl. requirements.. alles mal durchgehen - -debian-pkgs sind laut junichi aktuell! - -jack-link auf die homepage -libsndfile auf die homepage in requirements - -gdk-pixbuf in die requirements - -libsndfile in doku erwähnen. - -www: united-trackers.org linken (unter dokumentation) - -cvs runterfahren - -gnome auf homepage erwähnen - -gentoo erwähnen +do we need ChangeLog any longer, now that we're using git? +Find out why the x86-assembly mixer doesn't work any more. -*********************** +setuid still needed for good performance? fix playback error in mod.alice d. 3xx bug (Michaël D. ) -> 3) I tried to save a file (ie wave file export) to a directory I didn't -> have write access to and the program segfaulted. I ran it up in GDB -> quickly once or twice and got the backtraces included below. - -> 1) The scopes don't seem to work in play mode on PowerPC (comparison made -> playing the same module on x86 and PPC machines). They are being redrawn, -> but the waveform seems to be all zero. However, if I am not in play mode -> and play the current sample from the keyboard, I do see waveform drawn. - -mixer: cubic interpolation abschalten - -icons von Micha%/1€Œiso8859-15³ Frydryszak - -icons von victor javier (die neuen!) - -eventuell neue pixmaps von ironya? - -> Anyway Soundtracker could chceck if the module was saved and inform that -> there could be not enough spce on drive to save module. - -protracker-mode als "gimmick" dokumentieren. - > There are modules which also use octaves 2 and 6. They are not > created using Protracker, but when they are loaded into ST, they > are identified as Protracker modules. The loader even works with @@ -106,55 +35,3 @@ > > There is also no such thing as an H-8 note ;o) (same thing as > with the RelNote) - -scopes buffer size automatisch ausrechnen. - -beim sample neu laden nicht die instrument settings ändern? - -> Scopes-Buffer sein. Der Scopes-Buffer speichert ja die gerenderten -> Sounddaten solange zwischen, bis sie wirklich von der Soundkarte -> ausgegeben werden -- und das Delay ist ja um so größer, je größer auch - -Antoher really helpful solution would be adding size and creation date -columns in files list / file tab. - -beautify error message dialogs! - -Find a workaround for the d->realtimecaps = i & DSP_CAP_REALTIME; -"bug" in the OSS driver which happened to Jonathan Giles and Jason Simpson - -> From: Yury Aliaev -> Yesterdy I've found the dependance between the sound buffer size in the -> audio settings and the scopes behavior: when the size of the buffer exceed -> 4096 bytes (I use OSS driver) the scopes showes only zero line, and -> everything is Ok with buffer size <= 4096 bytes. I write this 'cause it -> may help the diagnostics of the scopes bug. - -[ live recording ] -> Ein fr%/1€Œiso8859-15üherer Freund, hat damals den -> Amiga-Soundtracker so gepatcht, dass die Grenze der Tastenabfrage -> auf die Mitte der Beats gesetzt wurde. Also wenn ich die Taste nach -> der Mitte des aktuellen Beats anschlage, wird der Ton in den -> n%/1€Œiso8859-15ächsten Beat im Pattern geshrieben. - -Hallo Michael, - -hier ein Vorschlag für eine kleine Zusatzfunktion für den Soundtracker: -Es wäre praktisch, wenn man den Inhalt einer Spur oder eines Patterns -markieren und anschließend via Copy & Paste z.B. in einem Textprogramm -einfügen könnte, damit man das Pattern ausdrucken kann (wollte letztens -die Noten eines Patterns auf meinem Keyboard spielen und war einige Zeit -damit beschäftigt, den Patterninhalt mit Füller auf Papier zu bringen). -Der ModPlug-Tracker beherrscht dieses Feature schon, den gibt's aber -leider net für Linux... -Alternativ wäre es natürlich auch praktisch, wenn es einen Menüpunkt -"Print Pattern" oder "Print Track" gäbe. - -MfG, - -Dennis Schramm -www.dennis-schramm.com - - -Subject: [Soundtracker-discuss] BUG: E9x and Ryx effects -Date: Fri, 19 Apr 1996 21:29:45 +0400 (19:29 CEST) \ No newline at end of file diff -Nru soundtracker-0.6.8/TODO.extra soundtracker-1.0.2~pre2/TODO.extra --- soundtracker-0.6.8/TODO.extra 1970-01-01 00:00:00.000000000 +0000 +++ soundtracker-1.0.2~pre2/TODO.extra 2021-02-16 06:59:47.000000000 +0000 @@ -0,0 +1,103 @@ +If will be lacking keys: allow overlapping keys (the same key has different meaning depending +on conext, keys.c->keys_get_key_meaning() sould accept also context indicator) + +Mask for CCP operations (note, instrument, volume, effect type, effect parameter), see FT2 +Left-click to toggle masking, right-click to configure + +When clearing off unused instruments, query whether one wants to keep ins/sample names +Also query overwriting non-empty ins/sample names on new instance load (both GUI config entries) + +2) An ability to use the external sound processing programs (like Sox) to process samples. + +After the sample editor redesigning: support for extra menu entries described +in XML format for using the external programs as filters. The programs +should support communication through STDIO streams. + +Would it be possible to copy the memory address and the data type +(instrument, pattern selection, wave selection...) into the +regular clipboard buffer, in text form? Or would it cause a +segfault if the other instance tried to access the buffer? + +I know to few about all this. Can the X clipboard handle anything +other than text, at all? I've just checked: Gnoise can't copy +sound between two instances, Gimp can't copy image data between +two instances... This seems to be a general problem :o( + +What about support for fully stereo channels in ST? All modern windows +trackers and players support stereo samples in XM. Would it be too hard to +implement this into Soundtracker? + +I also have an +idea to paint various effects (and maybe instruments) with the different +colors for better distinguishability. + +And the another idea I have for future -- to make the fx command switching +various types of interpolation. + +...make a way for soundtracker to launch and +communicate with an existing standalone editor? + +In instrument/sample/maybe even module loading dialog single click to preview +the instance, double click to load (optionally) + +Play/Play pat/Stop/arrows icons from Gtk+/Gnome icon theme (optional). + +1) Acquire focus on file name entry when activating file selection page. +2) "Arrows" cursor keys support in file selection (keyboard navigation). +These two items are not possible with the actual Gtk File Chooser. In +order to implement these we should develop our own widget with the +required capabilities. + +Modular sound drivers: remove dummy input; instead disable sampling when no +input drivers are loaded. + +"Through" song scrolling (between the beginning and the end of the neighboring patterns). + +Full-screen mode: also hide menu, playlist, scopes and stuff between the playlist and scopes. +Editing toggle, jump, octave => songpos and pattern. Main notebook: hide thumbs. +Later: semi-transparent scopes above the upper tracks' part in the playing mode. + +Fix modules with broken samples or patterns. Develop an universal correlative seeking +procedure with adjustable threshold. + +Looping facility: show heighborhoods around both loop points. Correlative procedures to +adjust loop points. Crossfade to improve loop smothness. Far perspective: loop points +adjustment using FFT. + +Playlist editor (in a separate window) with DND support. With XXM: assign also a name and +a comment to each pattern. + +Sample editor: vertical line at the cursor: amplitude indicator (value is displayed in the +status bar). Loops and mixer position should be drawn not by sample display itself rather by +additional CustomDraw routines. + +MIDI input improvement: per channel instrument setting (on Program Change event) + +Support for MIDI output (like in FT2 clone) + +Hide all private fields of ST own widgets (tracker, playlist,..) inside private structures +not seen from main sources. Have a look on Gtk sources. + +Pop-up window for fast instrument selection, maybe with keypad keys + +**** XXM (extra extended module) **** + +Improvements that require a new file format ".xxm", meta-module. This +format will include the XML meta-file containing some parameters that +are not included in the usual XM file as well as a reference to some +XM, which contains the actual module. So one can open the XM itself +with some features lost. Also there is possible when several XXMs refer +to the same XM file. + +- "Mixing desk": a tab with volume and panning controls for each +instrument as well as for groups of channels (the grouping is +arbitrary, user-defined); +- Shared sample pool: some instruments can use the same sample (with +different envelopes, volume settings etc). Also two (or more) samples (even of different +instruments) can share the same data with different envelopes, loops and so on. Instruments +can even be stored outside the module to provide instruments' sharing between some +modules. At the instrument modification: choose either to modify the external instrument +itself (global change) or to make a local copy (embed); +- Tune table for each halftone with some presets (equal, just,...); +- DSP procedures chains can be applied to channel groups (ST v.2 with OO relayer); +- Extra instruments' fields like permanent tremolo (supported in GUS patches). \ No newline at end of file Binary files /tmp/tmpNDFyPo/NT0PkqZ5W4/soundtracker-0.6.8/unmuted.png and /tmp/tmpNDFyPo/2ArbQqbJN5/soundtracker-1.0.2~pre2/unmuted.png differ