xjadeo-0.8.10/0000755000175000017500000000000013775353060010064 500000000000000xjadeo-0.8.10/NEWS0000644000175000017500000001063512620454615010504 00000000000000------------------------------------------- 20140724 ------------------------------------------- Does anyone still read those NEWs files? For real news check out the ChangeLog and https://github.com/x42/xjadeo/commits/master ------------------------------------------- 20061123 ------------------------------------------- I'm feeling lucky that I've able to spend my sparetime (and some more) on pushing xjadeo in the last two weeks! It's about time to refocus on using xjadeo, but there'll be ongoing low-pri development and support. Luis has put it quite well in saying: Ooooh, how has this baby grown up :_( 8-D check the TODO and doc/ for further information. the docbook is available online at http://xjadeo.sourceforge.net/doc/index.html#news ------------------------------------------- 20061106 ------------------------------------------- xjadeo has been working fine for personal usage over few month now, and though we lack time to clean up xjadeo, it's yet time for another release :) ------------------------------------------- 20060521 ------------------------------------------- xjadeo has been working fine for personal usage over a month now, and though we lack time to clean up xjadeo, it's yet time for another release. ------------------------------------------- 20060422 ------------------------------------------- after 2 months of xjadeo-0.3 rewrite, testing and using we find that the current xjadeo implements all features we expect from a simple video monitor :) New Features: * XV, SDL, gtk display backends. * remote control API allows to interact with a running instance of xjadeo. * (independant) QT Graphical User Interface * MIDI MTC can be used as alternate synchronization source. ------------------------------------------- 20051103 ------------------------------------------- Robin Gareus has jumped aboard and carried xjadeo from a quick hack for my personal usage to the level of a distributable beta package, throwing in some improvements on the way for good measure. Many kudos to him! The main problem people had so far to use xjadeo is to install the right set of libraries to build it. Ffmpeg is especially problematic, since it is under heavy development and is thus very unstable. Using only a minimal part of ffmpeg API, we had to make changes in xjadeo to accomodate three different changes in ffmpeg interface that broke xjadeo. WARNING! WARNING! WARNING! WARNING! WARNING! It is likely that ffmpeg will continue evolving in a non backwards compatible way, so bear in mind that updating ffmpeg may break xjadeo. xjadeo has been tested with the following versions of ffmpeg: - ffmpeg-0.4.9-0.20041110.0.1.rhfc3.ccrma.i386.rpm - ffmpeg-0.4.9-0.20050427.1.1.fc3.rpm It has been tested in debian distros as well. NEW FUNCTIONALITY - Resizing the window will resize the movie as well. (CAVEAT: resizing a video frame to make it fit the window is a cpu expensive operation. If you are not comfortable with the screen size of your movie it is more cpu efficient that you resize the file before loading it in xjadeo, via, e.g., 'mencoder'.) - Pressing Mouse button 1 - will resize the monitor window to the original movie size. - Mouse button 2 and 3 adjust the window to match the movie aspect ratio. - Scroll Wheel (button 4,5) stepwise decreases / increases the window size maintaining the original aspect ratio. Use your Window Manager kill button or CTRL-C to quit xjadeo. NEW OPTIONS xjadeo accepts the following options: -q, --quiet, --silent Inhibit usual output. -v, --verbose Print more information. -k, --keyframes Seek only to keyframes of the video. (improves performance but makes playing jerky or simply static if keyframes are not frequent ). -t, --try-codec Check if the given video file can be played by xjadeo. No window is opened in this mode. The program exits with code 1 if the file format is not supported. -f, --fps How often xjadeo updates the screen. The default is 10 fps (not the video file default)! -h, --help Shows a summary of the options. -V, --version Shows the version of the program. -o --offset Time offset in video-frames. There is a machine-dependent time lag between jack transport and video display. This option allows to compensate for it. NEW PACKAGING OPTIONS Configuration files for building RPM and DEB packages have been added. AUTHORS Luis Garrido , Robin Gareus xjadeo-0.8.10/INSTALL0000644000175000017500000003661413544141530011036 00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software Foundation, Inc. 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 warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" 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'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== 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: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS 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. 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. 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'. Sharing Defaults ================ 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. Defining Variables ================== 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. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. xjadeo-0.8.10/contrib/0000755000175000017500000000000013775353060011524 500000000000000xjadeo-0.8.10/contrib/cli-remote/0000755000175000017500000000000013775353060013564 500000000000000xjadeo-0.8.10/contrib/cli-remote/jadeo.c0000644000175000017500000000740112620454615014730 00000000000000/* * xjadeo windowless remote-master * * 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. * * (C) 2006 Robin Gareus * * This is a quick hack to generate xjadeo remote commands * to stdout. this version also reads from stdin and echos * commands to stdout. * * the default "remote command header" is hardcoded. * * * examples: * ./xjadeo-rcli | xjadeo -R &>/dev/null * ./xjadeo-rcli | rsh xjadeo -R * ./xjadeo-rcli | ssh <[user@]host> rjadeo.sh -R * */ #include #include #include #include #include double framerate; // = frames / duration; char *program_name; long frames = 25; double duration =1; int jack_autostart = 1; /* hardcoded settings */ int want_quiet = 1; int want_verbose = 0; int want_debug = 0; #ifdef HAVE_MIDI int midi_clkconvert = 0; int midi_clkadj = 0; char *midiid = NULL; #endif int want_autodrop =1; /* --nodropframes -n (hidden option) */ int want_dropframes =0; /* --dropframes -N BEWARE! */ int have_dropframes =0; double delay = 0.04; // HERE: for MTC timeout only #ifdef JACK_SESSION // XXX jadeo does not actually support JACK-SESSION // but it uses xjadeo's jack.c char *jack_uuid = NULL; int loop_flag = 1; int interaction_override =0; #endif /* mode of operation */ int jack = 1; int readfromstdin = 1; // set to 0 or 1! void usage(int status) { printf("usage %s [fps-num:=25] [fps-den:=1]\n",program_name); exit(status); } int main (int argc, char **argv) { int run; char *filename = NULL; long frame, pframe; program_name = argv[0]; if (argc>3) usage(1); if (argc==3) { filename=argv[2]; frames=atol(argv[1]); } else if (argc>1) filename=argv[1]; if (frames < 1 || duration < 1) usage(1); if (!filename) usage(1); framerate = (double) frames / (double) duration; struct timeval tv; fd_set set; //TODO: trap some signals.. -> run=0; if (jack) { open_jack(); run= jack_connected(); } else{ #ifdef HAVE_MIDI midi_open(midiid); #endif run= midi_connected(); } printf ("jack disconnect\n"); printf ("load %s\n",filename); printf ("window mouse off\n"); printf ("window letterbox on\n"); printf ("window fullscreen on\n"); // printf ("window resize 880x545\n"); printf ("osd font /usr/share/fonts/truetype/freefont/FreeMonoBold.ttf\n"); printf ("osd off\n"); printf ("osd smpte 100\n"); printf ("set fps %.0f\n",framerate); pframe=-1; while (run) { tv.tv_sec = 0; tv.tv_usec = 1000000/framerate; FD_ZERO(&set); if (readfromstdin) FD_SET(0, &set); if (select(0+readfromstdin, &set, NULL, NULL, &tv) ) if (readfromstdin) { size_t rv; char buf[BUFSIZ]; if ((rv=read(0,buf,BUFSIZ)) > 0) { if (!strncmp(buf,"exit",3)) { printf ("quit\n"); run=0; }else write(1,buf,rv); } } if (jack) frame= jack_poll_frame(NULL); #ifdef HAVE_MIDI else frame= midi_poll_frame(); #else else exit (1); #endif if (pframe!=frame) printf ("seek %li\n",frame); pframe=frame; fflush(stdout); } if (jack) close_jack(); #ifdef HAVE_MIDI else midi_close(); #endif return (0); } int saveconfig (const char *filename) { return 0; } /* vim:set ts=8 sts=8 sw=8: */ xjadeo-0.8.10/contrib/cli-remote/Makefile.am0000644000175000017500000000124012620454615015531 00000000000000noinst_PROGRAMS=jadeo-rcli jadeo_rcli_SOURCES = jadeo.c ../../aclocal.m4 ../../config.h \ ../../src/xjadeo/jack.c ../../src/xjadeo/midi.c \ ../../src/xjadeo/smpte.c ../../src/xjadeo/common_jack.c \ ../../src/xjadeo/weak_libjack.c jadeo_rcli_CFLAGS = -Wall -g -O3 -I../../src/xjadeo/ @MIDI_CFLAGS@ @JACK_CFLAGS@ jadeo_rcli_LDADD = @MIDI_LIBS@ -lm if TARGET_LINUX jadeo_rcli_LDADD+=@JACK_LIBS@ endif if TARGET_WIN32 jadeo_rcli_CFLAGS+=-DUSE_WEAK_JACK jadeo_rcli_LDADD+=-lws2_32 -lwinmm endif if TARGET_OSX jadeo_rcli_CFLAGS+=-DUSE_WEAK_JACK jadeo_rcli_LDADD+=-ldl endif MAINTAINERCLEANFILES = Makefile.in xjadeo-0.8.10/contrib/cli-remote/README0000644000175000017500000000365112620454615014365 00000000000000---- DEPRECATED SOFTWARE ---- xjadeo can be remote-controlled by OSC or MQ; remote-synchronization is also possible using netjack. using xjadeo-rcli is highly discouraged. ---- DEPRECATED SOFTWARE ---- this is a quick hack to experiment with xjadeo remote control. jadeo-rcli is a Command Line Client xjadeo, that generates remote commands to be piped into a 'xjadeo -R' instance. eg. ./xjadeo-rcli | ../../src/xjadeo/xjadeo -R xjadeo-rcli connects to a local time source (jack or MIDI) and generates 'seek ' messages to stdout. It is a crude way to forward sync information from one host to another. I've been using a small script 'rjadeo.sh' to start a xjadeo on a local display of the remote-host: rjadeo.sh: (on remote host) --------8<------- #!/bin/sh export DISPLAY=:0 exec ~/xjadeo $@ &>/dev/null -------->8------- ./xjadeo-rcli | ssh ~/bin/rjadeo.sh -R This does not require the remote hosts to run a jackd, but gets you a monitor screen in sync with your local jack transport or MTC. With TCP or even SSL overhead, the latency is unpredictable, but even on a cheap system acceptable: playing at 25 fps, I got less than one video frame skew when transmitting to 2 remote hosts simulaneously on a local 11Mbit/s wireless! However if you want to have an accurate synchronization use netjack.sf.net to sync transport of the jackd's via UDP. ### jadeo.c: this is a proof of concept code. much of the code is hardcoded. edit jadeo.c for your needs.. * it outputs some hardcoded remote-commands to initialize the xjadeo * connect to local jackd or MIDI TC source. and generate 'seek ' messages if the frame changes. * read from and echo lines to . allows to insert custom remote commands. ### using the 'seek' remote command to play a movie is not an intended feature of xjadeo! Neither is the concept of passing sync info like this. However it may come in handy.. xjadeo-0.8.10/contrib/cli-remote/Makefile.in0000644000175000017500000007567113775353051015571 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ 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@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ noinst_PROGRAMS = jadeo-rcli$(EXEEXT) @TARGET_LINUX_TRUE@am__append_1 = @JACK_LIBS@ @TARGET_WIN32_TRUE@am__append_2 = -DUSE_WEAK_JACK @TARGET_WIN32_TRUE@am__append_3 = -lws2_32 -lwinmm @TARGET_OSX_TRUE@am__append_4 = -DUSE_WEAK_JACK @TARGET_OSX_TRUE@am__append_5 = -ldl subdir = contrib/cli-remote 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 = PROGRAMS = $(noinst_PROGRAMS) am_jadeo_rcli_OBJECTS = jadeo_rcli-jadeo.$(OBJEXT) \ jadeo_rcli-jack.$(OBJEXT) jadeo_rcli-midi.$(OBJEXT) \ jadeo_rcli-smpte.$(OBJEXT) jadeo_rcli-common_jack.$(OBJEXT) \ jadeo_rcli-weak_libjack.$(OBJEXT) jadeo_rcli_OBJECTS = $(am_jadeo_rcli_OBJECTS) am__DEPENDENCIES_1 = jadeo_rcli_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) jadeo_rcli_LINK = $(CCLD) $(jadeo_rcli_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ 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__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/jadeo_rcli-common_jack.Po \ ./$(DEPDIR)/jadeo_rcli-jack.Po ./$(DEPDIR)/jadeo_rcli-jadeo.Po \ ./$(DEPDIR)/jadeo_rcli-midi.Po ./$(DEPDIR)/jadeo_rcli-smpte.Po \ ./$(DEPDIR)/jadeo_rcli-weak_libjack.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = 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 = $(jadeo_rcli_SOURCES) DIST_SOURCES = $(jadeo_rcli_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 README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMLIB2_CFLAGS = @IMLIB2_CFLAGS@ IMLIB2_LIBS = @IMLIB2_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JACK_CFLAGS = @JACK_CFLAGS@ JACK_LIBS = @JACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBLO_CFLAGS = @LIBLO_CFLAGS@ LIBLO_LIBS = @LIBLO_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTC_CFLAGS = @LTC_CFLAGS@ LTC_LIBS = @LTC_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MIDI_CFLAGS = @MIDI_CFLAGS@ MIDI_LIBS = @MIDI_LIBS@ MKDIR_P = @MKDIR_P@ MQ_LIBS = @MQ_LIBS@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ 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@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ XPM_CFLAGS = @XPM_CFLAGS@ XPM_LIBS = @XPM_LIBS@ XV_CFLAGS = @XV_CFLAGS@ XV_LIBS = @XV_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_contrib_dir = @ac_contrib_dir@ ac_ct_CC = @ac_ct_CC@ ac_ct_OBJC = @ac_ct_OBJC@ ac_lrelease = @ac_lrelease@ ac_qmake = @ac_qmake@ ac_qmake_args = @ac_qmake_args@ ac_qtgui_dir = @ac_qtgui_dir@ 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@ 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@ 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@ jadeo_rcli_SOURCES = jadeo.c ../../aclocal.m4 ../../config.h \ ../../src/xjadeo/jack.c ../../src/xjadeo/midi.c \ ../../src/xjadeo/smpte.c ../../src/xjadeo/common_jack.c \ ../../src/xjadeo/weak_libjack.c jadeo_rcli_CFLAGS = -Wall -g -O3 -I../../src/xjadeo/ @MIDI_CFLAGS@ \ @JACK_CFLAGS@ $(am__append_2) $(am__append_4) jadeo_rcli_LDADD = @MIDI_LIBS@ -lm $(am__append_1) $(am__append_3) \ $(am__append_5) MAINTAINERCLEANFILES = Makefile.in all: all-am .SUFFIXES: .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 contrib/cli-remote/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu contrib/cli-remote/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ 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-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) jadeo-rcli$(EXEEXT): $(jadeo_rcli_OBJECTS) $(jadeo_rcli_DEPENDENCIES) $(EXTRA_jadeo_rcli_DEPENDENCIES) @rm -f jadeo-rcli$(EXEEXT) $(AM_V_CCLD)$(jadeo_rcli_LINK) $(jadeo_rcli_OBJECTS) $(jadeo_rcli_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jadeo_rcli-common_jack.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jadeo_rcli-jack.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jadeo_rcli-jadeo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jadeo_rcli-midi.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jadeo_rcli-smpte.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jadeo_rcli-weak_libjack.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @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@ $(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) '$<'` jadeo_rcli-jadeo.o: jadeo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -MT jadeo_rcli-jadeo.o -MD -MP -MF $(DEPDIR)/jadeo_rcli-jadeo.Tpo -c -o jadeo_rcli-jadeo.o `test -f 'jadeo.c' || echo '$(srcdir)/'`jadeo.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jadeo_rcli-jadeo.Tpo $(DEPDIR)/jadeo_rcli-jadeo.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jadeo.c' object='jadeo_rcli-jadeo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -c -o jadeo_rcli-jadeo.o `test -f 'jadeo.c' || echo '$(srcdir)/'`jadeo.c jadeo_rcli-jadeo.obj: jadeo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -MT jadeo_rcli-jadeo.obj -MD -MP -MF $(DEPDIR)/jadeo_rcli-jadeo.Tpo -c -o jadeo_rcli-jadeo.obj `if test -f 'jadeo.c'; then $(CYGPATH_W) 'jadeo.c'; else $(CYGPATH_W) '$(srcdir)/jadeo.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jadeo_rcli-jadeo.Tpo $(DEPDIR)/jadeo_rcli-jadeo.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jadeo.c' object='jadeo_rcli-jadeo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -c -o jadeo_rcli-jadeo.obj `if test -f 'jadeo.c'; then $(CYGPATH_W) 'jadeo.c'; else $(CYGPATH_W) '$(srcdir)/jadeo.c'; fi` jadeo_rcli-jack.o: ../../src/xjadeo/jack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -MT jadeo_rcli-jack.o -MD -MP -MF $(DEPDIR)/jadeo_rcli-jack.Tpo -c -o jadeo_rcli-jack.o `test -f '../../src/xjadeo/jack.c' || echo '$(srcdir)/'`../../src/xjadeo/jack.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jadeo_rcli-jack.Tpo $(DEPDIR)/jadeo_rcli-jack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../src/xjadeo/jack.c' object='jadeo_rcli-jack.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -c -o jadeo_rcli-jack.o `test -f '../../src/xjadeo/jack.c' || echo '$(srcdir)/'`../../src/xjadeo/jack.c jadeo_rcli-jack.obj: ../../src/xjadeo/jack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -MT jadeo_rcli-jack.obj -MD -MP -MF $(DEPDIR)/jadeo_rcli-jack.Tpo -c -o jadeo_rcli-jack.obj `if test -f '../../src/xjadeo/jack.c'; then $(CYGPATH_W) '../../src/xjadeo/jack.c'; else $(CYGPATH_W) '$(srcdir)/../../src/xjadeo/jack.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jadeo_rcli-jack.Tpo $(DEPDIR)/jadeo_rcli-jack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../src/xjadeo/jack.c' object='jadeo_rcli-jack.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -c -o jadeo_rcli-jack.obj `if test -f '../../src/xjadeo/jack.c'; then $(CYGPATH_W) '../../src/xjadeo/jack.c'; else $(CYGPATH_W) '$(srcdir)/../../src/xjadeo/jack.c'; fi` jadeo_rcli-midi.o: ../../src/xjadeo/midi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -MT jadeo_rcli-midi.o -MD -MP -MF $(DEPDIR)/jadeo_rcli-midi.Tpo -c -o jadeo_rcli-midi.o `test -f '../../src/xjadeo/midi.c' || echo '$(srcdir)/'`../../src/xjadeo/midi.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jadeo_rcli-midi.Tpo $(DEPDIR)/jadeo_rcli-midi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../src/xjadeo/midi.c' object='jadeo_rcli-midi.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -c -o jadeo_rcli-midi.o `test -f '../../src/xjadeo/midi.c' || echo '$(srcdir)/'`../../src/xjadeo/midi.c jadeo_rcli-midi.obj: ../../src/xjadeo/midi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -MT jadeo_rcli-midi.obj -MD -MP -MF $(DEPDIR)/jadeo_rcli-midi.Tpo -c -o jadeo_rcli-midi.obj `if test -f '../../src/xjadeo/midi.c'; then $(CYGPATH_W) '../../src/xjadeo/midi.c'; else $(CYGPATH_W) '$(srcdir)/../../src/xjadeo/midi.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jadeo_rcli-midi.Tpo $(DEPDIR)/jadeo_rcli-midi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../src/xjadeo/midi.c' object='jadeo_rcli-midi.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -c -o jadeo_rcli-midi.obj `if test -f '../../src/xjadeo/midi.c'; then $(CYGPATH_W) '../../src/xjadeo/midi.c'; else $(CYGPATH_W) '$(srcdir)/../../src/xjadeo/midi.c'; fi` jadeo_rcli-smpte.o: ../../src/xjadeo/smpte.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -MT jadeo_rcli-smpte.o -MD -MP -MF $(DEPDIR)/jadeo_rcli-smpte.Tpo -c -o jadeo_rcli-smpte.o `test -f '../../src/xjadeo/smpte.c' || echo '$(srcdir)/'`../../src/xjadeo/smpte.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jadeo_rcli-smpte.Tpo $(DEPDIR)/jadeo_rcli-smpte.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../src/xjadeo/smpte.c' object='jadeo_rcli-smpte.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -c -o jadeo_rcli-smpte.o `test -f '../../src/xjadeo/smpte.c' || echo '$(srcdir)/'`../../src/xjadeo/smpte.c jadeo_rcli-smpte.obj: ../../src/xjadeo/smpte.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -MT jadeo_rcli-smpte.obj -MD -MP -MF $(DEPDIR)/jadeo_rcli-smpte.Tpo -c -o jadeo_rcli-smpte.obj `if test -f '../../src/xjadeo/smpte.c'; then $(CYGPATH_W) '../../src/xjadeo/smpte.c'; else $(CYGPATH_W) '$(srcdir)/../../src/xjadeo/smpte.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jadeo_rcli-smpte.Tpo $(DEPDIR)/jadeo_rcli-smpte.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../src/xjadeo/smpte.c' object='jadeo_rcli-smpte.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -c -o jadeo_rcli-smpte.obj `if test -f '../../src/xjadeo/smpte.c'; then $(CYGPATH_W) '../../src/xjadeo/smpte.c'; else $(CYGPATH_W) '$(srcdir)/../../src/xjadeo/smpte.c'; fi` jadeo_rcli-common_jack.o: ../../src/xjadeo/common_jack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -MT jadeo_rcli-common_jack.o -MD -MP -MF $(DEPDIR)/jadeo_rcli-common_jack.Tpo -c -o jadeo_rcli-common_jack.o `test -f '../../src/xjadeo/common_jack.c' || echo '$(srcdir)/'`../../src/xjadeo/common_jack.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jadeo_rcli-common_jack.Tpo $(DEPDIR)/jadeo_rcli-common_jack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../src/xjadeo/common_jack.c' object='jadeo_rcli-common_jack.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -c -o jadeo_rcli-common_jack.o `test -f '../../src/xjadeo/common_jack.c' || echo '$(srcdir)/'`../../src/xjadeo/common_jack.c jadeo_rcli-common_jack.obj: ../../src/xjadeo/common_jack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -MT jadeo_rcli-common_jack.obj -MD -MP -MF $(DEPDIR)/jadeo_rcli-common_jack.Tpo -c -o jadeo_rcli-common_jack.obj `if test -f '../../src/xjadeo/common_jack.c'; then $(CYGPATH_W) '../../src/xjadeo/common_jack.c'; else $(CYGPATH_W) '$(srcdir)/../../src/xjadeo/common_jack.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jadeo_rcli-common_jack.Tpo $(DEPDIR)/jadeo_rcli-common_jack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../src/xjadeo/common_jack.c' object='jadeo_rcli-common_jack.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -c -o jadeo_rcli-common_jack.obj `if test -f '../../src/xjadeo/common_jack.c'; then $(CYGPATH_W) '../../src/xjadeo/common_jack.c'; else $(CYGPATH_W) '$(srcdir)/../../src/xjadeo/common_jack.c'; fi` jadeo_rcli-weak_libjack.o: ../../src/xjadeo/weak_libjack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -MT jadeo_rcli-weak_libjack.o -MD -MP -MF $(DEPDIR)/jadeo_rcli-weak_libjack.Tpo -c -o jadeo_rcli-weak_libjack.o `test -f '../../src/xjadeo/weak_libjack.c' || echo '$(srcdir)/'`../../src/xjadeo/weak_libjack.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jadeo_rcli-weak_libjack.Tpo $(DEPDIR)/jadeo_rcli-weak_libjack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../src/xjadeo/weak_libjack.c' object='jadeo_rcli-weak_libjack.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -c -o jadeo_rcli-weak_libjack.o `test -f '../../src/xjadeo/weak_libjack.c' || echo '$(srcdir)/'`../../src/xjadeo/weak_libjack.c jadeo_rcli-weak_libjack.obj: ../../src/xjadeo/weak_libjack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -MT jadeo_rcli-weak_libjack.obj -MD -MP -MF $(DEPDIR)/jadeo_rcli-weak_libjack.Tpo -c -o jadeo_rcli-weak_libjack.obj `if test -f '../../src/xjadeo/weak_libjack.c'; then $(CYGPATH_W) '../../src/xjadeo/weak_libjack.c'; else $(CYGPATH_W) '$(srcdir)/../../src/xjadeo/weak_libjack.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/jadeo_rcli-weak_libjack.Tpo $(DEPDIR)/jadeo_rcli-weak_libjack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../src/xjadeo/weak_libjack.c' object='jadeo_rcli-weak_libjack.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jadeo_rcli_CFLAGS) $(CFLAGS) -c -o jadeo_rcli-weak_libjack.obj `if test -f '../../src/xjadeo/weak_libjack.c'; then $(CYGPATH_W) '../../src/xjadeo/weak_libjack.c'; else $(CYGPATH_W) '$(srcdir)/../../src/xjadeo/weak_libjack.c'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(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 distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @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; \ 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 -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: 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: -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." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/jadeo_rcli-common_jack.Po -rm -f ./$(DEPDIR)/jadeo_rcli-jack.Po -rm -f ./$(DEPDIR)/jadeo_rcli-jadeo.Po -rm -f ./$(DEPDIR)/jadeo_rcli-midi.Po -rm -f ./$(DEPDIR)/jadeo_rcli-smpte.Po -rm -f ./$(DEPDIR)/jadeo_rcli-weak_libjack.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am 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 -rm -f ./$(DEPDIR)/jadeo_rcli-common_jack.Po -rm -f ./$(DEPDIR)/jadeo_rcli-jack.Po -rm -f ./$(DEPDIR)/jadeo_rcli-jadeo.Po -rm -f ./$(DEPDIR)/jadeo_rcli-midi.Po -rm -f ./$(DEPDIR)/jadeo_rcli-smpte.Po -rm -f ./$(DEPDIR)/jadeo_rcli-weak_libjack.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstPROGRAMS 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 # 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: xjadeo-0.8.10/contrib/xjadeo-example.mp40000644000175000017500000014235512620454615014777 00000000000000 ftypisomisomiso2avc1mp41free3mdatEH, #x264 - core 123 r2189 35cf912 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=16 deblock=1:0:0 analyse=0x3:0x133 me=tesa subme=11 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=24 chroma_me=1 trellis=2 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=4 threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=16 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=60 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.000eO?oKo YkQ~R:1`nsVB0Px:oG;Zޑ_'x@/9y4&o]@QE_lؽUmy0b_qqńbFjuZɍ0<|e$2L.ޥf5B#nȫPsJOIVl\*k7Ź𫩊KiRІ\pS3k0aa1|h !gAKP"--(c;ׇu)پvGFNH#-p,*=({hŗP/Fɨ6 pp$;!SѲ;SAx;~FuI‹C3d晡-ץ9J'Nm6֋M~:(zo*iA e^"Y  ui<v*wh2r+:frM*܊ԟ^ԴjbY=Ңݷr2Oh a /r2=x(6 ϣ5qekhFt)9,񡋞&?M)Ԩ; 29fB-5fBRmƸ+Q-gab^Tl2=YONf:*~K|½oJ1X H"J]b9w{J@ZŮEQyڱ0&!qC^yo U)!tlB8Ԉ$n>RێVM3dM5M(:c:׵BEbLAjme0?;e)Z^rY2W'G}>գ*%iKo0` '~:;[?bȌbI~EO703_|cٮ47">wMsU¼i)bQ3`|ʛvkBni%F=u ͙͜wQ>2q(mbqu?DAFU#ZR,Z_D.b5ò`-$&J̅:(yLjz1χԷSh߼7rB`#K@3RTfye0;y'TZ~K횕t{&sg4{[A<Xj,/?ʚ#a1aa3BR "vTJ-ҟG ܃ c̆)iyCjhq˨'Vw[E(*!:T4x&fJ̈́}ݤ]+^-40sj ^yA,F *^ˁ<:0-e]Sn>)|k%51Ya[RJ깗չRG0*Dz! #.@ti7 GMݣf.3_;ъ~o-s{QBvd6x)Oz.);Ϙ kU23"N+/o|g#N˵zﲤ(EyW ("P|&4cOFE*];lrLLzჩ=nh>0Vs(K's;n}Fh3X<,GYtpD7<,7| O.Bn&eRqq_Gc1RS\J3xM^&D潑U:Q(hGS1*n:|8 j:7#,΄H(*nܓeDH#kͨ,+dF~;6łYkGS0x<o2Fqj~4F׆G4ܷDo 鶸@O^~z#y<׆GCވD[t_j(5:Pm~4F;T5 aꎧ)@"i>lme4Le7M' me4N__oDo"7YM#DLZQkTxR⛄&kC 9>&mIx]chL\|MyBA_8S)VwS5zqs^t NZ9C:<Va.S4Ӿ}]oI_ L^B@2oΞrC#)2S@`UkWi9dCIx-@"n"MVbWQ栜E`:˥*܌=^h> SIjL+t GH?jH.RniA U!7`S"&иUӶקq /.rlƦ5v$e3~QAiJ -3{A-ګ|VS3<'BjivO 0.4?p*zj (0Q㸰+n%.V ֽF뒰\X$[-Pl9{-+` 1ݯAG}f}Eq!E,1L:!tδJ .#)#Gk^Z[]J$;F^L,CָWR@i7#-zȉA<:TJC zIdRJz<;}en1C#9cwx3% }3y*`v8;FnʆYo-i [ _n+7՚uO ~m ܔ"C>g҅{jCLY0vutT!P_cS6ߔ+YEht;0|*Ժ$Ѵk_Y8UGLөϻ@,V7}C(`翂V%,`X2Bhn AFMU^缣 +#/Em ̌'z69S(nAoX2(Q2SVܶu?1_QJ]]O1ۄdՁ6bѺYΧF9J^=@Zɽ~"Ql7,`X2rN~߾}~߾}j߾}~߾}~_}~߾}~??(;ezG&<} fsep)>5Z + ՗نK>`@jt GөډFlP>>͞VD3{]IunCZ7f*s2;m-}~[Wț8jxO7 FxGF">.XQ<:~Fn H@lR. #>O 4৒T=Q[1| ƷA&gDS2QT_͆AYUrzT$[Kpuqnm+D= 0k94['?}q>"?}`X2 e,`X2 e0>`X2 e,`X2 e1 ^??Q߾}~߾}`Po˞+l?7xcnZfZwclm$xԿLw{ P!|gV`;!Q~wKYd݈}l< -@ xn=fX8*7?I{GjN=Xqvݽ'FZ_q0A .QfI Ω{0n[Hf7!:J~Ie+O>P?VMvBPb=ҁni5J|Ŷ&!J NnL+ дulUD6+Kѻ~oTp&W^InrIQ+ֶؒң̀55m]Z*nc,q^ @Rhg9ͱll6??df"L=utK7JLToBҊ23z9~tl.EŚhì(< iQ_nGh`6`=%Β+b>v;mHSz= [E"gӨV{ajAe_BmU~GOh pOέ~0)3'LaTvao>'֭ 0܇CnWvn5D'*X;+>M %weRPvC~ZlqJp}V1Jc1<6xy˿k%Zd"cޅCDa)Fc#y d]w0X4=RbfH%sMHd݁/;zӤHy==2+@~|ĜJx;3F-6h.@(xVV 1X#.r=)c~B*mGrc,vƊ4w̙2Q \]!N Vݒ趝onj?B]ڮ+trfApVPۉȐziVV7i'{D807U\.Ճ*jIRץmJu b}[F5԰"&@}`ٝx]vc?pBƜ <1,wbmj)t_9`O7W4z+b츂b$yz|֨h"ч +9S晤"P>a4XKO}$tEG|/%5"皢]UPvCЬ+'#(Y14տA.TȫҺ7}nbəJg5T!; A62UJF#Vn8|klbo(vAZ/ zݘ%h1}HQLN2o J/M{VZzVjD*_jjk `CނYin~2]G(5FlU}':!u=?csW9tDxFR$I(UxKB~i&6ۙ (8m{K @[?ζ(&OL3kK^ط2üi4@|<Ʀ_7Hv?׀ncϵ6>6h6Յ*;FQYLgC9}5,Aw׮ߍfjљ e$e/4qc"xc$MP-L}TFd>B<_V;ԩ~꨿hA-ц=q脇 LPeRD W>oS3Y_> 냎 P%;U6ȶQ-_"(woҔj>  RG91N g 'hufY (HuajfUjt:8J}0<^ď 4/>q@~s5ME|y5L32jQ|5Oe(9DC0AW3T.{(ȼj?ʲz&l:y| DUZ#UY:u¤E1ѱEu:zW몷գ"?TӢ&LFrdL㚧eː ;k70o)L!O&守02<_ < *;K +[~>@NSM嫃/%>/`RoUQ鬳R^p1?BO }k1[?1PF0Ht& 'J:!=ObCEGOqmH0f~*yvlϟ7`mHLi#V+9cH~&d.) iTJ'uu (,"^a{{d1Oז'9ru;d?UN^e 6re)jH0`.1qb-ÂQ'Gʈ0n ژY([;gYP6/+,wNI* ʯ(P7@4's@‘&ౢ_k_=\"Cee"MDE8X5u% ~h<h~|7hg;旅m0aI$,җ82 B~`d{0B[fspBnoEm<L1{CIcm^ո!f߆~ x~jk&V3&J.9rsf74]()aI0|ՠx9osIհԃGb6ON$-afu`1 mđ,`3JzXiv-f?^u4=t>Gg=|Po9XLe`h`-;,#q:'_0.~I{¿vRĄB6ʥ}H1f[wv/oS /y6Bq2cjr!&z9;&F;pSJRQ+~8P% 9 {NP(?))^^(7{U7HZ#J7nX> gGdJg0nRޛO`!@h)'xmZ0K>CVϑɣ :3 )z*ţ@`jgbH-= ؎ڟ>^c~-|}EeO|i*hrb5 Y#~H?ʿiHsÓ)r= 'Bݫb Px#t,LZ$e_HwemH !Eδ+=+SOܸґ:7@g.G`` CY ^0DٞSIŖk]EeCNaD -E07SI_J=}7cS@,_A'd+P&M4)=aç\'z;h]*)tLC%yѶ2X _1xR<2E=a._7/ŔM"wjR[#dtEQ$mа%1x/6(8d+ F)& ]җsH:HzyL$-,KT;]iVD$Jϙey,ѡ@jOLbTq de?=*i31ݍ5[S,$ռ zHXE-01QtO+;Bzkf68OI:STKPp 6g -6+ ͞V]Q%O?nɅVu7kT\-@}}NU 7̨,EH裠^o׫6Ձ-b,[mK_!̊ ݄D) vSY^[ǩOC~)Fd3,MŸ^\Ubk(G-@Q7:<f`q!v#K^lىL}̘>j7kk\ka1隔kIK]Ȭ=[Q½uVCndt[ݸBƒ 8Jm/ps)ɰ)dfѪ7ȀYPZ7_DjZ-iZppb Jғ4G"eMdT}WψAG hUǣԗK* K+Gk׿Pr*Er;cY+%x%>dZPھ:('RL[^kBi+$g/-'@55.E}*}Bq-p|= @\H{n(`%ZJpAq] 'koyG(e5Ti7mֱ``aW6/PuA+y[7y]/r~mO_83!ثbF0 -ߛT+GBl?LGh@&F=Pk;4UovO2մ)선+б\sA;<ſ;<^Id75>dͱϱi;D2'86Mw-ڪ*ۅVFS$q]\|,%!/~[,=tO@R;T/T JHoY Z%w's;MR} %o.|TB!l=#z=tę6 x>|f  oYtK˲T;蠈Q[u&ݐsVP{wΪG=_xήU5yuyƭ0fMK3d͹ҺaNȪb/n !hF!3o%ILa,1|wi=ɳ- ض]\SXf5+:JރbcX+o .DYLYךtY؄d; Цұupە\Q",+[yc)VG9=yMԛ^sQ԰p) & Ki%6ډrl^^͟z,^愊W|:"FJiQ :?i2|hQEd9qKB~Yn$ޤLVWjAUi݉9z ?y{/$Cd23e84mhnY:yy-$S Ρ.PMl?54MĵsĎ9UVASnHbGN=[c8Uo[6!h !.(]t *.=Yq*U7sufuwpN1vN +%Fe]A96R.nmh| %G65jZm`kT4FtCe=I5g30pecG>؛~:# PSצ7w|@wwW55MgZ㝐(Z!䘫i1sent\[H{"vwE5JkMQT];υJ2Kb7bAϤs)CvF_z(_J+^?`eONӭ XG+P (s㳵4qn61҆;iR֘KچEt.&l!*m_jcs'D;Hg^(C$l~KGeyieֽ`7ڋAȐ@{^h ?%6 {~Y4Z~AMTO2onXȳ\xJW3dSӘ<(z!MXD58X.:ĞAkasmw- 2~CTfX*f:.C2ڰ(709]kJ53 z- wĎ zVUַ;i?ImynQ XOR iP>AHP0[KS2,&c r>Y1%Tr{@iqlR؁$3ђe 1~]!8pooRwۍl E6hW @ kYGU6Z)i,y:KT`FH?7|mjrF;0L)dHJQ,| yzF#|,|e&+뭶,o}rZyWWvH 6 oӉnd*s>:OVj\:eޭ]ɵ ˈXEr=n[/ <#"xl8Z-T[HQY. Nfwգ; %FOծ#ټ2\SǮXۊe$AٹPqNeR;[%&8>B<17C`@D>3\ I3sƇe~TL ʭvů)y1 \1-R!p poc/ɺ |L7cg9hF4! DMd((Բgd3"s18^)eCSʣz9Qt(KWzkDB3걕 ~ЌۅVKy-F4Hl5Ěn?&p#k"-& br NѧJ؁0IތXu\| nɳcܜ2A0aO£{תv +A6ݻsf义jٯi 5SnB wAx1kd/ ZrƎK`Okq46J_)o vG6>,Sd-O$X]dBz!6C/KCφlѨF\US[q v/*M VI+u¸+ # TZC2  FAQS+mkCL`^1zύg灛;A͊ Fjch}#`/ݿe$ө0@0P-aDW`xHKmw26ܘsR΁TARV -RM@ߨݑ/r wyDDrY}E9; Ew@!%(Uo2+:o=2z=s}D:HcO<%@hzVɏu^ā8Kt%\h`[EJCR/(`_jooBv!'`=1#DW`xHKmw2w+kYgpo6Xà ͬCȿΟrt!\x|m6e`ף(>}, 끋NHLUDbX*M"Z v]= I'اYrT<|->SAб{)E'*sYȌ8yz@ 7I)br̺[j٤Sy%0LIֹe ^<!g ؜YZCå \>P K8R/Y@ws 7Y<5՘N5cfӛ*\f*g-7"NlVT^3ǎMTF!/7hKOvsWx?7DWfJ irMXSI`^o6^WTY< ME`WJi^2`+([9#u(,3TI [iԄfĿ]Ja(:oA,`s7NbK\P%&,;c2'h[y +>]0Qͩщ 1$Ce(vS }l n8">KI̟]wG)פlmϸ(!qvE0E0ۧ[R;2^"U]2'j|J<݌–[<U$-8/>GDWDӀo`M5<"r_32Dݢ Ӱ}t12z/:WQ㹉>Kr iR_Q)XOO q qr;w$RʁO?'H- >!O4;C+&V6q7GBf}鬒-+F'ߣž̾vE~뤌!|k9%8;{Ԫu&9ӥ0q*=2ԣfzc>Q+c mՇ+S(x "d?7bla2 n "s#@ S7_\/zK_ Fw~vWQ$3zD# <8ܛ]?T;_i[BVaG.I1I;;Rn $>^wH)J6]ϯ\o~!{1~^piɧ/% 8R2;~vqS|О)[n Mz{ Wafj"@i..AYxj'6(oݣ biӾ2zCSΧY7zo{#vSvC.ui,<[R4OQ8=~ㆽkzM֮NƂt: F&w0v}RWzգۺF$#) 0-*-XW62Och:} ҫB]V@n46Xuū2at#|L ]#ZNl0G2@nMԑ1n6AA5_akPʴBlwƨ%bp ~Ua ݊kʱ(+4Dn'M#Â|"ܒuٯT=&ݑfC Oq}G6>o ^TzTіdN [+S?VU#C75HkEXQ)Նb Ce|jzInWȾMxy-oP2: Q$p mY`ux7au"Ŵv{ j~~=CNӬatnobRl$6cR%$P| ESrE<'Y|_uHl$BC3hl(<$s c'"ח2$t OiukozzQׅޥᇫ$b!O#o牙gmOŨf_Ci`*>Ld}C艎~?׆+ADhLY;ہ]{&zV$>4`)2|OMgpV31ը OeG?@vCuw@}덷 zGZ_i\\'DL)iU6]m1 ]YZ|6p\#[re_Nd(B PaC9dЄszDlE Z7{ jO$LљufT?- LcL~UEG&%YxuyM 7t_(Hꕌ2YhLgmg $ƀs"FzAhVd .2 W]?h &w"[ßW3~/}:"k%.׆^]qШMR7Hy.+"ߤ P40D& =C&=tg˴8 w5 ?5of n)¥ؖkSs@ `6 znGr}R1|+tAP|HD"-Q7>f9*$~:D dL`߃,E(O=fѴaBc0ɻN[HaT/9CD hkHx.2H| kW5?I?t&`G; [3コX4lGpt Qcy{I]~m|Tp8(qtuD%c 3NcX@Sc o^tfxw'evnqЁ.2o{InC6?IsIFexgt{#; b>]Hnj@Wn &>^sswu} .;ݔty:H6' X@`̰!N+bʻ8ZA|kJW p5\ɉX>!S Md26Ge jo#d[ݭ['״9 s5e+avHmVs3~^ܱX\p9&N;B*> '*i߄;9R 濧"ڸ{QWϘ/ݑ]ې>7Iίf0Vw_PleJMp kNT<2J@ OU@|&=a^ݣTs IϹr|[H,϶`oU^sꖂʑe3Ҷ}H`wH48,aOe / >S^M윅PXiyoyl4_meg -۰X' vs~ ")A +hCZc%i?IQbZkrCo}vUn<'5i8oǒtjzCLm xkoT5vCDB%~Ab$XEW/G;x4jYL;ʼQUwXMLEb?@+^: &.]cި3:Yb T|T>u,Y/KQ[侾g}a?AMb:Q؋ɱtf,F;:=[UXU9Ԡٵ>Պnm(HJ24μ Q[ݵȥw[:Dhߎ ˁV 7dLYjΣw.$x$M!oY2#ڶ㊆U?{mP{(Aʲex(Z4; )˩:}!|A>/K~¶/K*&/[t=bZּW)咨3Χ체򌤍6З<|u"/ |_,([+OG6T1 Y6R*p07T|QsUcyKz!0T.pFVЉFUB7̛+70*;P-Jya>`5kLd1X~:6.0(p\D :Ho(5kⱮ\cDHNԨd-/45Y}g}"**(,OOhQo >+[93_7Ձ*O?N'*C:^㫅Xڟ~x-hZ#bLnu5-Sg$j]zz[?9F-(S>̨< j_*dԷO>q#_y%Yk}r0m\bT+ܿlc3 *~5_uG2w_$Uqs  r $cy'BN'ۤо)x nv sd*oc#&,<͖:-VAff G ^^Rkm\a,ƫv+(J(0J]kVwm*$HTJr؇|Rax*J?uG8 *݀Dѱؤ&LW,; .@4s0);#%2Mn7=߽ e >Jęf[汻߹~G1* dEHc7 + 7ve'4hg2 3GШ:<7i53(J(ZaL㑘nNa ̞Ibwd( P`@49wuEz.pcY"xe0%#7Z$D'$d",8+k9qhʂ0-;eodNL/AXw|ϗMHOwm'ksm9>"Y.0\t-X2gOIfB[$%Ǜua= 7]a"ЗwW!9\,\L`.*Bѻ'/͗k/N?: hQqB)&IOͤEb+c b<7:Y>wZ ke*0':5T|d%[]:c3F sJ7Žx.W^̙9 S0oT?F+UKcٌ35V|wqЇMQ"S. ')}A@ueO;.J 0UU[~-MM2[N+!0ԫe-)&-(lЍ2"Vc"AL d, ^ 1$~ oJuے`Xl%^xY>KK+u'(Bf8/ )6IOͨ2L: z#LO ϙwPpqu*lr2?-7H[^ %rU n_fHJ=[m3yXXSB|zR%him6irð9I@ Yuu_] p&<0~ |$X|LL&4㮼/i_&8G'^LԽSBb ywfFӼzXF QcwNYe0A)ځmhL6gUlqǫPrτ ^֦E7 i)meBztsknGrph*JvSIs,_zXM 0_%% \tJ;, bk$A!U|M&NM8Il|tw2Yu6#,vK:xcTU]J:@R!+P9vTErZ5 i*ϒuKsxM2LH1`;BW">z7 fwK΅]u E RgN['ZQLݒ܈w|$TK_?)C&j DԀ4^AU'Sk0TX'ȝt!~dM Pz.iN9TEgPt^aY"OqԳY޻xA/4nCoچ<;9c Lةn1{_86͗Wp-q"3UQhKڱk"^C _,c 72T_KX/4ב:ҽa#v_,-"B,kgV>tD.$ j:tC׶Hlރ*"@_.,(+>OuX`H 9iߔ9pH%Ɛ \>EKnV2'jbMoBϡ!aTNPd й`Q֥xnv{ɻ wnVAheha'u/spʌ(ibsX˥Wo*YOc]cMJ@kӔ۔ިS/뫃\8!va>TcrZU-e2j-*Y[!bd(\9i/PiyP[^FװaJW^)a<˨NjzW_O%0Ƅ~NHQdh|7zC 7cloٰj;*~9HWH̩;~R< ώiY9ha eAMC={uHɴ_VΒBW -`︔+:W8MXGhYt&@NDgxThԎBoI6Yud@M/;)eR+{T}€A:F@[[Z&S+MUZpCg7"* Ճ&uf ~LGF0B>DcZF6~8t6r@s=M_Ű)W1F,B%@ `_+BڟY>mz ;I~ 4gR8RVP-LnD*-{Co  Sfr/!Vb4>J^J4=ϓFvȻt4e3QU=;E.hx(^=|O>jKN2!^cguY9A? }o8 JQ,-B ;5*U[Sa5UD"n]rHVM!AB6xrh=eJ0>f 8r̮YۿoPp=":7L"HVƋ@n_OzT''&fͱ/AbݫPg{-VZ ]\?7!ۢsM}Gp7eY/$" pC̟rHY M\: qں&g)ȹItE۵]q8HG/@jLa]$z[ϧdgRz99~Rue0o\d %ެ|0  ,KO4vPI,=ߘZohxsӂd.X3&5^Pa&o_ XJtE!u AF3&@Yւy [_^y<(ft#sBi*Jx)S[Fj-1 ^Z!!pa.) 6"4*éGIu=k'̊Ɲr-V~]?3v1kEmv'DCլTC&<[{J)VkWԦmJtE!980&P Ku,N;Ä+W&1FfKV~mP x3GD|aBJ ?˰Mk:@#^UZ !grc)/sk9x}WstR5a i㯼/u03,ՉȢG3;2HV* џ xib8?KQz`?kyJ&tE!981|A>wsOY>B}/lmwvƞI%?Q7`{G%$M#o-aVJBΕCRXZ3[09C;nM} jNB3oNxAt|F_ե$"*U 5 C1aCJF"E*ٍ)UBw)Qy>aL xN #?Sz1z,h_.'+Ɂ K-I-3 +nV^tN=C8Fp Z>TٔIh!ִ)#`s:i'FC @)[``D"%"WUz¶YgunpV}vq3JV"E*ٍ*X~{~ m/QJ%br8;@; ViF1+#@]DR3 `}L?}=:v\-eDZIp݀ʷt19HPQ%Q^Y޸BzOa~㾆6r6'$L|k /OdT 2at ['}j{ 3'-N^Œ.K'2 /wjz KXۯ+f' ҄Dq%ԹgJf"E!ȢH9fG:bu !A6?Jܜ)}!;)ŚEU_dvRܸh!@(Y /ۨUW'jbA D,4AD.gu%sWu6C[9S5\2ƏTPhq;a&FkB΃_$WJS?dA y&!ucbdԅnd8wkUϝu(W6^&<6OnJI"$ZSq<^Hsbd!4T&(/ɠqڏx覡(3Ca$V#ث,'v'(Co(KyYhk{!Ĉ4)f{WQj AK$V@[[[Z&S"X3{Gkגpx^碕NTx+!lzE`c-?~H;r)QM[ EəVG*"xY\+2 P>+=@ l_㍜P4o3"@s^lu\sY=aɵ[B`t¥-ζL~i[*E[ y!E>r$Mx4 ivS 2q4Mao dSO *6 ^PLEvIKx4yV'o٪Glat W.fKFі` *\Sncj&oLq@_*<.N~ډ?Y[Ƶ{t<~]^~YE^z#kF-_4MG!:J(Iz^qs DVҢO9Ky ˵rSgq;{;[^b LPr &-F"k{̩wʣM5ZGBDxOb7fOd:\:=TRp{HUԤko[:1U`ouόVƤX (xkV-_;Z3RSK #ZZ}UVTSU;`ʕ֗6Ʃ >uPE)Դos'&=?m &BB05ضRG)muEY {%9q喍#3Kf(TL䐴r %UJZƷ6Jakf-_ 9=9 e V(Q-rg.Eo;a0D%YHVy]aVy'SYox=-G|?mЈgQ1Vf@v,v#[=ZvJaM!)d6@|qґdav@~$mV^%@1k2Ebɺ?enY1PE4u"}:acHbykJWV iRJxF RsacP$0@ʖJ\χ_ǣ괬;(?Ԁ%y`R6Pe4߂()k2EҵpZ+N FܽP~V]c_T=&T(oPlt%vO+#(M`C^x+cI#ӑLy[cj]l#+5= EsqjXKtfXd 7; <Zލsh.P>E3䢓}4Y N3HX2LEWĽɡϠ#SNjɯs+(vUBrRalD95k n Q4r0qk2E%Mv|Ǧ95$7GYi^ME2e&엧D!T̗M mG5lBW@vo9E0)i4" aBSIK1F2~{N3Wu6C[9S5\2Əy!]4l%o!q?r]x\f-*9ˤ0m \hD02fPoуG-[5g`lr嶗RdܞTRIo 8k2E%Mv|Ǧ3?i:F+˸jFK_sOPӾ?Nʆ?B[e$M#o-aNw*|k5h4ˠ l@y̜SIjSD{>8dXهN$+./<$xȵ]wsw_JѴUmpN4nI Ü5uj_p[Z;%EC+٫@IEh>Aldv@[[[[[Z&S" 813t M)I^>I<M..vBڼ>@ TvQx_sh3{òJzCcX0ś'=}S^RE%}OMɣF @v\wQ/L`lc .VZlx*KAWHkfmzY)$;uZqʄ5>%ijY4Bl:3˹-ee.[|E?Oh#%R䁔̚8[ȧNnĦP?[% vrAt6" \zRǞ`>3RBJRYAI=)1Y,;lOy}e yK%DQXP>iVb6r'!ë3+Wn/Z~h; e=_X+k;f#&bk\e?r馡 9>XnLY1^= Ȼ횳!{5_'=WAQK o40m2,@/&B |v䙏 HD%iasTLje.’x## c*x y0`zƝPoҨ%)}G4g!?+sϬA8i_P7_>9`THuQHB{(M R.|5_!E_,Z`fmѲ4XhAsd5ǧ獍#wZ?3¦/amndyKIB;YrdHRCyOPu9(A&4I fU P/nfr EIr_P˅,P5]A[,cD'qZ#iMH;oj I /=8n/KV|&:E!h\7?UГTo5Z$@3r0_Qt8TD3_}2H:dFhtA4'j:-< ٨J)x80ePqȚ'g̎ ~p,{LCVIN͚~ ɕtLөE;|6:E!hm UF.K弓08&|ж8xQ 00d!W㏴Kޤ'yehEkX)v@;( :x[>. ܮhV~ 6zӲwBߪoKzm#pL [|Yh%T zIŗ .+UA擊 : g驀VA(v $-tsO/`Ffb/$|F:E%1AH+} ^7^%^0FnⷭUY=  51=](㠓GCS_*3Hc]L]QfKY/]Xbjo.2vK[71+D:Yve??>ӛgxUPy& z6vJZFޞalcv ³Zrs+=ĻRi=fg) ?uiZ|kA1ٸust3,IA}P -) :zFάٔ?ǕCl8NbP\Pw)s+c'gzLeR/LgR1yPAKRatc WS=hMdڌTOB3ӮA})6g! kUtB1h/R$┋g7NM\O`諴0;n%BGIf WÚqv5_nY ua< Tm`,m!Jإ U.]_"KVtzjI\Tql_G%~xA#ZHv,ŭ,AH,~Nr|+f$ʒ)N^7\_s8+fg@5_gD:/V0'Y+8\TdY~W'/0gie-k,)y劮1:6쫬9 1 o0M5WH>;:EAsvl1 c-+k= 1?$}&Q \oKxƭlhj?}EH%|CmE ]:7&Y`x)YӣˣB8PsfGxA.k}@FP:Eh~kݝiX7MbkоFX3£Q6NV-1畣ϺpR'iYS~I1&*rl$`03PTWZ373apt$t5p:Eߔ9"F%1$D7O_ w<;bnE|1aܭI#"RLCOzPG7m_ͲX>d> q\oϚ$ņ*:E/PiKYnZۿ6B{YZ,t݌ڮ!BpW".-L\7KC,=`xBjJcMzbu|g /@ɏiE^ 'z>Yv80ijВb<.x}/;씚vvE*k#-.r֟Fk}9S#*SP}͠+80; 0?$NWz܀ AP -) sc rBd\Ou@7 ~)'YQl*qh 6*k͞Y y  DI8:\ О iC}sU˳O7,LLp/Rۥ`ZA~@(ݗ4VxkFVmiloI3\J_Ryc`<5oWXnSAp㛹;ZjTZ~AV>PEx蔍T'\lKQz7=;̥Zgk)= V@Xg4>yb)4@\ !)DeJ x?w5_ܜxZBbqT89ot?c^m 0E1bkd%5t0uXHXbڑ67mp^ C$mD'ijrqQ+`ZdsP'JqlZa!/ea^$G'5 E ^6諂(ZfozWH֞L&5_>Cgs,֌OIA\z1UOFe,g]N +N, Q-ޛʛͮ82v}$9⼿S=`iGNe*]N*2Y/t; ZLp;0mbxI7Qܷ$zk:D؀@ꅕx೏U/Җa, gP`Ĉ>xq;BYʛ`lip^׀I0+onr[sUٳ;ЁF5_!6nԈׁQCp&pb>vT5/{x2葉$m-Cy?'\ArpԼBM ʮ=TH}[g ¢i˃r˦$nݱۮ]KvxNS/h}|xWԌigpn#:jZwv9rW/QRc7Ω@=d:"޺9Ouv:E"!3Y6DafG̶5T5#GAPYL ֈ5K؈P穚8OS>֖34"IjBZ<4%}8tܫE_5cLH<ߩ7=-CK@A)!]x˓*h\ :E"!`t%YA:_C[an%W85;ulKEM#\䥰?CfQge ]7 F^#PEYHHIbe{eY+#΂(hH́"sė\=-0AVOIk R:E"!`t%BV;*̚ef AT?"Nfqa}Cͮ^Or[;bTAk8G)"7B WHX.[I&K1Sth![I0ږJ(YP`EZp\qT#A`Lܛ!&XvDp=qy.}xִKnF4hƈԟH]Xhڔ:'0/ $-옽kE]̊O)o?UodP 3,d ޏêQV_oʶB6̈&9a,Yp#n)N3\ȡ?8Lڜ7$μA7 ب@Aig/Tb{wD};㳪0S[ky^Ks/s^E@(8-=4P bQP]bYPEޖ5fqK&#%` 5ELŐu5(M@9QɍS!Er,Z XA ?ֽyIT0Uq ƙmVp Sɛ97Hfޫ4@?TC@/v*&';)58UٝVIuagEkGn'>Eς"oTmwTLBQ }qj(a Z^@9)b^FFKm0 ;JA񷤷&Ui@ђ3tc<5q|_C`Y$۪!SmhK)#.aliPNA!6uurA5_d#"tw./T5 ,nipR#][մa RTk dQa}˿Db&VҤ2Y5nHg"B Rm Q ǚ??<gx Cr\l=(d"wCy&wKL'Qϊ|X$UbFL-@+{7djp fl ,Blr|g/S3m]$mځS5_dTQL6jFAX: 2QC'Hʳ%NW_!TV+xc1~&6/ng8W-jH`2ͭKerEPͱw@j%OSz~?gt(.CEy5*}bjsA\CĮ?yQʢ<6^|j qp*Bk Lw&9_`4>n@,'>Bq34'FQi`]H@gA`1a ^pU^azIQG`|_ZD*5_d!q6RaxNDD45]4!+%7 TV:fg.ei^Q^Ùglvj`2}"不M4(W /lAd3K|XhG:إ:(8ݭh6 .Ğ5e`?ݝ=<|>M@#o |RtwoJ)ԮyhdPK2?\rism8)!Q=omBEs!'7 H5_d!qHP嚯fϼGF')ԣ,ɟd|%TFUBbKh9ŹQj#e#OAA$ˊUR` 4'a)$V[ iׇ?_0&7<"Ĕ$dypZ6 4Vo`;Gfc`Z籿'5xPÜaX;7M;%mF|䴣}o5_ԪգAΎ6+kR!}jYRWLZuw8o#Lk=k£ ul ~Ww^VP."B;OGB%ܯ &5_GȪs8wUFSwm3avIIQX_غM-܃C_-Cdр]x sNzLJX+_i!:c3tvm%m*#=Y4*L\N -#RrA&:EnXь$Cҏ`mҿIe[: H`#9(BM8_ $dnM-mV #_B9N,KN_uˑگӤ<޳>PR%?lQ)9 @ʈVxI$RsgI8WV P_~6:Eޖ5mML xG=a4!kIWe!HR):f:EԖi[7~PBuۨR#.G^x [>RGYvLJ1uŨFfN\+@i~1͡! צˋXs5cyQNdJY_ё]Tk-M(fw :BBW*V64=)ؤ o3DDq̱OWz^I8{ S%| ΝR"@Ykӊ.; 56 sv:E0 4pZẜ'cs#fU^n9 ȮFî)[30:{)faf,Q޾Ѵ8' <\a6]5戗(!e=iW"(UCu&F90m]AE0y [M}p!,3fM7I߁94W28<i A#P -) s"lK&;bnUPqVI (bm\B&!=@,wdl>DSlRUgco!9#s܉ xZ(.DΆWl[К)9wݠxnl3W|qSJHe6DT>Tb&)P=C\ F^Au+ӷב\ì¼H3EF:Otv"EfH7rkYU2(C5-[m㸒 ٬U^cyV-0kU)aT .XG E1U`oPE%9쀤mtPp{>*R;ʁOR{a5+B('%a ];Omٳb!Vɣ\(C|ܰF2"T'#]Am؜{N |HS?eGI?@O|u~=LCd5?95W:9@^GkqpKπV\^όβ 7̢e -ÚKp|eLv¦C$MSǹsǼJ: >X=DXqھ. .23, Dn9pHpB PR.|7JRVUUZ!مlx'.GR$ʴ^K&ZbxN95_nX)9=[0쑭`0g͘]@9tWF}vzk!H N:{X\[5sZ;ASc.ZP nn%_bIT}@V 5_̖C'K3B5="^>ꃰsfґZnoDSYU:;l k]㤮o268K7* r;#fB̃ɶJ<I"T ~p@w)orlGɞ~j1 'h/9~Q#![kRہrh7튯5_"!vlŢG?}j% \ G↹އGd1?n+28Ư :(umԫ43P<>jfL^5 ?fM~=~:+B>Ղ.X7+мB5mT P!<8q]NP#guj#YkFC:EnXÇ5ԺkHeqV0ɖy ܟ]R^mA߄uh8ɑebȿ rާ*WzS0>ے#x3XMbi.P!C+G<8:Er2UU M[ +Ex$",7? @ckɴ} FUґ߳V!W;S&gRT{+dŌ%F$ `$:azlnF,R<ݚ1#)@/r"!7&jt<*t?#f(7{QO:E",K&*(35</cWKE5mY&WRf7vvyWzO)dz}]Ӹ <}w7~4˥{I8 >4CH/:U;x J\Cqŕ:9QN C=#C/BN#;A vr1;Xח1NuY#ipِgE9>!H z՞ڪw(Z^`Y!\^›C'$u<mLXyTL*Q)]G0-?Y5AP -) tzε"upE+@h,i8Mi%"60d'nx~?+rouW-P`pZ ʤRpClwtKSQBᖽ/X9븾+V&ND%M`ξ'(IYSRlI%2{nX* `b]<g8Ue7ښc.Aop+0sӚʩGdM>D 9P Qؚ3@nz:vB Av>PEBDSnR/ \{o8eڿXn(5-K i({TnUًޑdmD:79n~0BC`S69%&4{B+7ЈNaxO<; q&Gջr 4 ۜuMiB L:;RltJ5v͖<3OFhj؎QF7ac&tYXˤK(id$d?싦w^͛\kzq?|@65_\%ntQ4omhBmPU]:ϭfɄ$>/|@3\fG[n~)Qo&.3Aᰠfv0;&7 A*`1,(KF5_!6US =G-;'qy2%NE) A3s; {Dvb 'PewgvRi=ȗBeV(ݼ4i;yy{UkΡ>}>?ܱT9fvJG>͗wWb~9m4J-A'V5_!ݛj04k#&&[ K=W{!کc읈+BC~JytW{Z&MTᩋ?txU\ioc a>S+god^$'^IoJJ (U cN*\8?q?qk4cоLB鷈 eI R<0?˸ef5_eͳ}jհT^A#FEvdĶ wEr{=_I<`FNM7”)=mIm!s9J^A4*ų^A  Jitn禗&$oo2 UKŒ'& F|>؋-/<\60!Jc BwଣOy;D(6i}mEz mJ%9F;9?u0er 9φ:Eols#@~`od/76pp ^6  LfԾiHwڬ.(!7b6E|W|iTR(QtÆ6`$5]k?vϖ:E-PXeQćMA>'u`E,T˒DpH&80Q'ۜ`<`W*庉O]jMtɗg2xCPMYLjN[c-0!ٵ$cfN>s 뿷;|E%9Ϧ:E-PXeQOlyf2ft'}x0\_lSSyOr'p &;MWs-wh2q&5ty(>@fG+;%NNa<5}.68{ t3+hE ϶:E-PMugGǥ[Tc,!C)\..Yg } i-xQ aǘxr4;Zap=@Oph7W;ow=֣$\7rWVc7RԻqYrE~?l'k5l/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_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 ;; 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. 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 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 about your system, $0: 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 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 # 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 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 as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits 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 :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && 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 sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } 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 rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi 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 else as_ln_s='cp -pR' fi 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='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi 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'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # 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` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="xjadeo.c" ac_unique_file="src/xjadeo/xjadeo.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS ac_contrib_dir ac_qtgui_dir ac_qmake_args ac_lrelease ac_qmake LTC_LIBS LTC_CFLAGS FREETYPE_CONFIG FREETYPE_LIBS FREETYPE_CFLAGS MIDI_CFLAGS MIDI_LIBS IMLIB2_LIBS IMLIB2_CFLAGS GL_LIBS GL_CFLAGS SDL_LIBS SDL_CFLAGS XV_CFLAGS XV_LIBS XPM_LIBS XPM_CFLAGS LIBLO_LIBS LIBLO_CFLAGS MQ_LIBS FFMPEG_LIBS FFMPEG_CFLAGS JACK_LIBS JACK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG ALLOCA EGREP GREP CPP am__fastdepOBJC_FALSE am__fastdepOBJC_TRUE OBJCDEPMODE ac_ct_OBJC OBJCFLAGS OBJC am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC EMBED_FONT_FALSE EMBED_FONT_TRUE WINDRES TARGET_WIN32_FALSE TARGET_WIN32_TRUE TARGET_NETBSD_FALSE TARGET_NETBSD_TRUE TARGET_LINUX_FALSE TARGET_LINUX_TRUE TARGET_OSX_FALSE TARGET_OSX_TRUE 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_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build 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 am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_xv enable_opengl enable_imlib2 enable_sdl enable_ft with_fontfile enable_jacksession enable_mq enable_ipc enable_osc enable_ltc enable_midi enable_portmidi enable_alsamidi enable_embed_font enable_qtgui with_qt4prefix with_qmakeargs enable_contrib enable_timescale enable_framecrop enable_weakjack enable_dependency_tracking ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS OBJC OBJCFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR JACK_CFLAGS JACK_LIBS FFMPEG_CFLAGS FFMPEG_LIBS LIBLO_CFLAGS LIBLO_LIBS XPM_CFLAGS XPM_LIBS SDL_CFLAGS SDL_LIBS GL_CFLAGS GL_LIBS IMLIB2_CFLAGS IMLIB2_LIBS FREETYPE_CFLAGS FREETYPE_LIBS LTC_CFLAGS LTC_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 exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # 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' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' 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 ac_prev= continue fi 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_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. 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_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. 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_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -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 ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --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) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --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=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. 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_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. 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. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) 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. 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. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi 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 fi # 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=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) 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' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- 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 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 srcdir=.. fi else ac_srcdir_defaulted=no fi 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. # if test "$ac_init_help" = "long"; then # 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. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --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 --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 \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. 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] --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/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names 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 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] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --disable-xv Disable Xvideo extension (default:auto) --disable-opengl Disable OpenGL display (default:auto) --disable-imlib2 Disable use of imlib2 for display (default:auto) --disable-sdl Disable use of SDL display (default:auto) --disable-ft Disable freetype On-Screen.Display support (default:auto) --disable-jacksession disable JACK-Session support (default:auto) --disable-mq disable POSIX message-queue remote control (default:auto) --disable-ipc disable IPC message-queue remote control (default:auto) --disable-osc disable OSC remote control support (default:auto) --disable-ltc disable LTC sync support (default:auto) --disable-midi Do not build any of the MIDI drivers (default:on) --disable-portmidi disable portmidi support (default:auto) --disable-alsamidi disable alsamidi support (default:auto) --enable-embed-font include OnScreenDisplay font in binary (default: off) --enable-qtgui Build the Qt GUI controller (default:off) --enable-contrib Compile and install code in contrib folder (default:off) --enable-timescale enable time-mapping/loop-playback support - experimental - DO NOT USE --enable-framecrop hardcoded frame cropping - experimental - DO NOT USE --enable-weakjack load libjack at runtime (weak linking -- always enabled on OSX and Windows) --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-fontfile=file.ttf specify a path to a truetype font file to be used as default OSD font. --with-qt4prefix prefix for Qt4 installation, e.g. "/usr/lib/qt4" --with-qmakeargs specify custom qmake arguments 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 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 OBJC Objective C compiler command OBJCFLAGS Objective C compiler flags 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 JACK_CFLAGS C compiler flags for JACK, overriding pkg-config JACK_LIBS linker flags for JACK, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config LIBLO_CFLAGS C compiler flags for LIBLO, overriding pkg-config LIBLO_LIBS linker flags for LIBLO, overriding pkg-config XPM_CFLAGS C compiler flags for XPM, overriding pkg-config XPM_LIBS linker flags for XPM, overriding pkg-config SDL_CFLAGS C compiler flags for SDL, overriding pkg-config SDL_LIBS linker flags for SDL, overriding pkg-config GL_CFLAGS C compiler flags for GL, overriding pkg-config GL_LIBS linker flags for GL, overriding pkg-config IMLIB2_CFLAGS C compiler flags for IMLIB2, overriding pkg-config IMLIB2_LIBS linker flags for IMLIB2, overriding pkg-config FREETYPE_CFLAGS C compiler flags for FREETYPE, overriding pkg-config FREETYPE_LIBS linker flags for FREETYPE, overriding pkg-config LTC_CFLAGS C compiler flags for LTC, overriding pkg-config LTC_LIBS linker flags for LTC, 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 the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. 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 .) # We are building in place. ac_srcdir=. 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 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 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 $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 $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 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 fi ## ------------------------ ## ## 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 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_objc_try_compile LINENO # ----------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_objc_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_objc_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 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_objc_try_compile # 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 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_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { 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_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_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &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; } # 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; } # 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;} ;; 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_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_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { 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 eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=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 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_type # 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 $as_me, 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 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) 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 case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { 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: 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 $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" 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 $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" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do 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 $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do 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 $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do 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 -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #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 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" \ || { { $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. 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";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false 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 case $ac_old_set,$ac_new_set in set,) { $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) { $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 # 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=`$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. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $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' 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_aux_dir= 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 ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break 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 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. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $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 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 { $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 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # 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}- VERSION_MAJOR=0 VERSION_MINOR=8 VERSION_SUB=10 am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # 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. # 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 ${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]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do 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. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else 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 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. 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 value is a relative name. INSTALL=$ac_install_sh fi fi { $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. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $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 ( 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 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 rm -f conftest.file test "$program_prefix" != NONE && 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 $. # By default was `s,x,x', remove it if useless. 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` 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= { $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 { $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. 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_AWK="$ac_prog" $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 AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $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 '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # 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 \$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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi 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 # 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 if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=xjadeo VERSION=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_SUB} cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} 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)' # 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}' # 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 -' # 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" # Check whether --enable-xv was given. if test "${enable_xv+set}" = set; then : enableval=$enable_xv; fi # Check whether --enable-opengl was given. if test "${enable_opengl+set}" = set; then : enableval=$enable_opengl; fi # Check whether --enable-imlib2 was given. if test "${enable_imlib2+set}" = set; then : enableval=$enable_imlib2; fi # Check whether --enable-sdl was given. if test "${enable_sdl+set}" = set; then : enableval=$enable_sdl; fi # Check whether --enable-ft was given. if test "${enable_ft+set}" = set; then : enableval=$enable_ft; fi # Check whether --with-fontfile was given. if test "${with_fontfile+set}" = set; then : withval=$with_fontfile; fontfile="$withval" else fontfile="" fi # Check whether --enable-jacksession was given. if test "${enable_jacksession+set}" = set; then : enableval=$enable_jacksession; fi # Check whether --enable-mq was given. if test "${enable_mq+set}" = set; then : enableval=$enable_mq; fi # Check whether --enable-ipc was given. if test "${enable_ipc+set}" = set; then : enableval=$enable_ipc; fi # Check whether --enable-osc was given. if test "${enable_osc+set}" = set; then : enableval=$enable_osc; fi # Check whether --enable-ltc was given. if test "${enable_ltc+set}" = set; then : enableval=$enable_ltc; fi # Check whether --enable-midi was given. if test "${enable_midi+set}" = set; then : enableval=$enable_midi; fi # Check whether --enable-portmidi was given. if test "${enable_portmidi+set}" = set; then : enableval=$enable_portmidi; fi # Check whether --enable-alsamidi was given. if test "${enable_alsamidi+set}" = set; then : enableval=$enable_alsamidi; fi # Check whether --enable-embed-font was given. if test "${enable_embed_font+set}" = set; then : enableval=$enable_embed_font; fi # Check whether --enable-qtgui was given. if test "${enable_qtgui+set}" = set; then : enableval=$enable_qtgui; fi # Check whether --with-qt4prefix was given. if test "${with_qt4prefix+set}" = set; then : withval=$with_qt4prefix; qt4prefix="$withval" else qt4prefix="" fi # Check whether --with-qmakeargs was given. if test "${with_qmakeargs+set}" = set; then : withval=$with_qmakeargs; qmakeargs="$withval" else qmakeargs="" fi # Check whether --enable-contrib was given. if test "${enable_contrib+set}" = set; then : enableval=$enable_contrib; fi # Check whether --enable-timescale was given. if test "${enable_timescale+set}" = set; then : enableval=$enable_timescale; fi # Check whether --enable-framecrop was given. if test "${enable_framecrop+set}" = set; then : enableval=$enable_framecrop; fi # Check whether --enable-weakjack was given. if test "${enable_weakjack+set}" = set; then : enableval=$enable_weakjack; fi LIBPREF=lib LIBSUF=.a case $target_os in *darwin*) { $as_echo "$as_me:${as_lineno-$LINENO}: TARGET: OSX" >&5 $as_echo "$as_me: TARGET: OSX" >&6;} PM_OS=mac $as_echo "#define PLATFORM_OSX /**/" >>confdefs.h PLATFORM_OSX=1 LDFLAGS="$LDFLAGS -lz -lbz2" GL_LIBS="-framework Cocoa -framework OpenGL" $as_echo "#define HAVE_GL 1" >>confdefs.h HAVE_GL=1 if true; then TARGET_OSX_TRUE= TARGET_OSX_FALSE='#' else TARGET_OSX_TRUE='#' TARGET_OSX_FALSE= fi if false; then TARGET_LINUX_TRUE= TARGET_LINUX_FALSE='#' else TARGET_LINUX_TRUE='#' TARGET_LINUX_FALSE= fi if false; then TARGET_NETBSD_TRUE= TARGET_NETBSD_FALSE='#' else TARGET_NETBSD_TRUE='#' TARGET_NETBSD_FALSE= fi if false; then TARGET_WIN32_TRUE= TARGET_WIN32_FALSE='#' else TARGET_WIN32_TRUE='#' TARGET_WIN32_FALSE= fi if test $(sw_vers -productVersion | cut -d '.' -f 1) -lt 11 -a $(sw_vers -productVersion | cut -d '.' -f 2) -lt 15; then LDFLAGS="$LDFLAGS -framework Carbon -framework Quicktime" fi ;; *linux*|gnu*|k*bsd*-gnu) $as_echo "#define PLATFORM_LINUX /**/" >>confdefs.h PLATFORM_LINUX=1 { $as_echo "$as_me:${as_lineno-$LINENO}: TARGET: LINUX" >&5 $as_echo "$as_me: TARGET: LINUX" >&6;} PM_OS="linux"; $as_echo "#define IMLIB2RGBA /**/" >>confdefs.h if false; then TARGET_OSX_TRUE= TARGET_OSX_FALSE='#' else TARGET_OSX_TRUE='#' TARGET_OSX_FALSE= fi if true; then TARGET_LINUX_TRUE= TARGET_LINUX_FALSE='#' else TARGET_LINUX_TRUE='#' TARGET_LINUX_FALSE= fi if false; then TARGET_NETBSD_TRUE= TARGET_NETBSD_FALSE='#' else TARGET_NETBSD_TRUE='#' TARGET_NETBSD_FALSE= fi if false; then TARGET_WIN32_TRUE= TARGET_WIN32_FALSE='#' else TARGET_WIN32_TRUE='#' TARGET_WIN32_FALSE= fi LIBS="$LIBS -L/usr/X11R6/lib" ;; *netbsd*) $as_echo "#define PLATFORM_NETBSD /**/" >>confdefs.h PLATFORM_NETBSD=1 { $as_echo "$as_me:${as_lineno-$LINENO}: TARGET: NETBSD" >&5 $as_echo "$as_me: TARGET: NETBSD" >&6;} PM_OS="netbsd"; $as_echo "#define IMLIB2RGBA /**/" >>confdefs.h if false; then TARGET_OSX_TRUE= TARGET_OSX_FALSE='#' else TARGET_OSX_TRUE='#' TARGET_OSX_FALSE= fi if false; then TARGET_LINUX_TRUE= TARGET_LINUX_FALSE='#' else TARGET_LINUX_TRUE='#' TARGET_LINUX_FALSE= fi if true; then TARGET_NETBSD_TRUE= TARGET_NETBSD_FALSE='#' else TARGET_NETBSD_TRUE='#' TARGET_NETBSD_FALSE= fi if false; then TARGET_WIN32_TRUE= TARGET_WIN32_FALSE='#' else TARGET_WIN32_TRUE='#' TARGET_WIN32_FALSE= fi ;; *mingw32*|*win*) { $as_echo "$as_me:${as_lineno-$LINENO}: TARGET: WINDOWS" >&5 $as_echo "$as_me: TARGET: WINDOWS" >&6;} PM_OS=win $as_echo "#define PLATFORM_WINDOWS /**/" >>confdefs.h PLATFORM_WINDOWS=1 LIBSUF=.dll EXESUF=.exe GL_LIBS="-lopengl32 -lglu32 -lgdi32" $as_echo "#define HAVE_GL 1" >>confdefs.h HAVE_GL=1 if false; then TARGET_OSX_TRUE= TARGET_OSX_FALSE='#' else TARGET_OSX_TRUE='#' TARGET_OSX_FALSE= fi if false; then TARGET_LINUX_TRUE= TARGET_LINUX_FALSE='#' else TARGET_LINUX_TRUE='#' TARGET_LINUX_FALSE= fi if false; then TARGET_NETBSD_TRUE= TARGET_NETBSD_FALSE='#' else TARGET_NETBSD_TRUE='#' TARGET_NETBSD_FALSE= fi if true; then TARGET_WIN32_TRUE= TARGET_WIN32_FALSE='#' else TARGET_WIN32_TRUE='#' TARGET_WIN32_FALSE= fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; 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_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # 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_WINDRES="${ac_tool_prefix}windres" $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 WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; 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_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # 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_WINDRES="windres" $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_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 $as_echo "$ac_ct_WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="false" 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 WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = "false"; then as_fn_error $? "Could not find an implementation of windres in PATH." "$LINENO" 5 fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** unknown target OS ***" >&5 $as_echo "$as_me: WARNING: *** unknown target OS ***" >&2;} ;; esac if test "x$enable_embed_font" = "xyes"; then if true; then EMBED_FONT_TRUE= EMBED_FONT_FALSE='#' else EMBED_FONT_TRUE='#' EMBED_FONT_FALSE= fi else if false; then EMBED_FONT_TRUE= EMBED_FONT_FALSE='#' else EMBED_FONT_TRUE='#' EMBED_FONT_FALSE= fi 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 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 { $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. 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_CC="${ac_tool_prefix}gcc" $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 CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $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 { $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. 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_CC="gcc" $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_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi 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. set dummy ${ac_tool_prefix}cc; 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_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. 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_CC="${ac_tool_prefix}cc" $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 CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } 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 { $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. else ac_prog_rejected=no 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 if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $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 $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $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.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 { $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. 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_CC="$ac_tool_prefix$ac_prog" $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 CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $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.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 { $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. 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_CC="$ac_prog" $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_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done 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" && { { $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. $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=$? 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files 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. { $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 | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) 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 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 { { $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 rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $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=$? $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 # `rm'. 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 | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done 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 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 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 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 main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj 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 | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $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 { $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 { $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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $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 { $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 main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else 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 () { ; 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 core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $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 if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $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_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #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); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* 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 -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 -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);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # 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; } ;; *) 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 : 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. */ int main () { ; return 0; } _ACEOF # 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 { $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 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" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 $as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 $as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; 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 AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $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". 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_CC_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 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 # 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_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $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 test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=m ac_cpp='$OBJCPP $CPPFLAGS' ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_objc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gcc objcc objc cc CC 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJC"; then ac_cv_prog_OBJC="$OBJC" # 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_OBJC="$ac_tool_prefix$ac_prog" $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 OBJC=$ac_cv_prog_OBJC if test -n "$OBJC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJC" >&5 $as_echo "$OBJC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$OBJC" && break done fi if test -z "$OBJC"; then ac_ct_OBJC=$OBJC for ac_prog in gcc objcc objc cc CC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; 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_OBJC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJC"; then ac_cv_prog_ac_ct_OBJC="$ac_ct_OBJC" # 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_OBJC="$ac_prog" $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_OBJC=$ac_cv_prog_ac_ct_OBJC if test -n "$ac_ct_OBJC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJC" >&5 $as_echo "$ac_ct_OBJC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_OBJC" && break done if test "x$ac_ct_OBJC" = x; then OBJC="gcc" 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 OBJC=$ac_ct_OBJC fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for Objective 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=$? 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Objective C compiler" >&5 $as_echo_n "checking whether we are using the GNU Objective C compiler... " >&6; } if ${ac_cv_objc_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_objc_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_objc_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objc_compiler_gnu" >&5 $as_echo "$ac_cv_objc_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GOBJC=yes else GOBJC= fi ac_test_OBJCFLAGS=${OBJCFLAGS+set} ac_save_OBJCFLAGS=$OBJCFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $OBJC accepts -g" >&5 $as_echo_n "checking whether $OBJC accepts -g... " >&6; } if ${ac_cv_prog_objc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_objc_werror_flag=$ac_objc_werror_flag ac_objc_werror_flag=yes ac_cv_prog_objc_g=no OBJCFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_objc_try_compile "$LINENO"; then : ac_cv_prog_objc_g=yes else OBJCFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_objc_try_compile "$LINENO"; then : else ac_objc_werror_flag=$ac_save_objc_werror_flag OBJCFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_objc_try_compile "$LINENO"; then : ac_cv_prog_objc_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 core conftest.err conftest.$ac_objext conftest.$ac_ext ac_objc_werror_flag=$ac_save_objc_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_objc_g" >&5 $as_echo "$ac_cv_prog_objc_g" >&6; } if test "$ac_test_OBJCFLAGS" = set; then OBJCFLAGS=$ac_save_OBJCFLAGS elif test $ac_cv_prog_objc_g = yes; then if test "$GOBJC" = yes; then OBJCFLAGS="-g -O2" else OBJCFLAGS="-g" fi else if test "$GOBJC" = yes; then OBJCFLAGS="-O2" else OBJCFLAGS= fi 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 depcc="$OBJC" am_compiler_list='gcc3 gcc' { $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_OBJC_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". 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_OBJC_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 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 # 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_OBJC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_OBJC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_OBJC_dependencies_compiler_type" >&5 $as_echo "$am_cv_OBJC_dependencies_compiler_type" >&6; } OBJCDEPMODE=depmode=$am_cv_OBJC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_OBJC_dependencies_compiler_type" = gcc3; then am__fastdepOBJC_TRUE= am__fastdepOBJC_FALSE='#' else am__fastdepOBJC_TRUE='#' am__fastdepOBJC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h 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 { $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 ${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" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $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 # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : 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 $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } 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 { $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 { $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" { $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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else 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 : 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 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 : 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 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)) #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)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else 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 fi fi { $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 # 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 { $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 int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _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. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no 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 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 int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _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. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no 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 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 core conftest.err conftest.$ac_objext conftest.$ac_ext else 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 int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else 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 fi fi { $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 { $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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else 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 : 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 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 : 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 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)) #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)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else 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 fi fi { $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 # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5 $as_echo_n "checking size of float... " >&6; } if ${ac_cv_sizeof_float+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default"; then : else if test "$ac_cv_type_float" = yes; then { { $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 "cannot compute sizeof (float) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_float=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5 $as_echo "$ac_cv_sizeof_float" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_FLOAT $ac_cv_sizeof_float _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 $as_echo_n "checking size of double... " >&6; } if ${ac_cv_sizeof_double+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : else if test "$ac_cv_type_double" = yes; then { { $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 "cannot compute sizeof (double) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_double=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 $as_echo "$ac_cv_sizeof_double" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $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 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5 $as_echo_n "checking size of unsigned long... " >&6; } if ${ac_cv_sizeof_unsigned_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then : else if test "$ac_cv_type_unsigned_long" = yes; then { { $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 "cannot compute sizeof (unsigned long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5 $as_echo "$ac_cv_sizeof_unsigned_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long _ACEOF for ac_header in time.h string.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 done $as_echo "#define CFG_WARN_ONLY 1" >>confdefs.h $as_echo "#define DND 1" >>confdefs.h $as_echo "#define WINMENU 1" >>confdefs.h $as_echo "#define XDLG 1" >>confdefs.h $as_echo "#define XFIB 1" >>confdefs.h $as_echo "#define DRAW_CROSS 1" >>confdefs.h $as_echo "#define COLOREQ 1" >>confdefs.h if test "x$enable_timescale" != "xyes"; then $as_echo "#define TIMEMAP 1" >>confdefs.h fi if test "x$enable_framecrop" = "xyes"; then $as_echo "#define CROPIMG 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5 $as_echo_n "checking whether sys/types.h defines makedev... " >&6; } if ${ac_cv_header_sys_types_h_makedev+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return makedev(0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_header_sys_types_h_makedev=yes else ac_cv_header_sys_types_h_makedev=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_types_h_makedev" >&5 $as_echo "$ac_cv_header_sys_types_h_makedev" >&6; } if test $ac_cv_header_sys_types_h_makedev = no; then ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" if test "x$ac_cv_header_sys_mkdev_h" = xyes; then : $as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h fi if test $ac_cv_header_sys_mkdev_h = no; then ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" if test "x$ac_cv_header_sys_sysmacros_h" = xyes; then : $as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h fi fi fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ void *alloca (size_t); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if ${ac_cv_struct_tm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi 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 $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_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 IFS=$as_save_IFS ;; esac fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $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 ;; 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 test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" 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 PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi 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 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\""; } >&5 ($PKG_CONFIG --exists --print-errors "jack") 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" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else 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\""; } >&5 ($PKG_CONFIG --exists --print-errors "jack") 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" 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 JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "jack" 2>&1` else JACK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "jack" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$JACK_PKG_ERRORS" >&5 as_fn_error $? "Could not fine JACK audio development kit - jackaudio.org." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Could not fine JACK audio development kit - jackaudio.org." "$LINENO" 5 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; } fi if test "x$enable_jacksession" != "xno"; then tmp_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $JACK_CFLAGS" for ac_header in jack/session.h do : ac_fn_c_check_header_mongrel "$LINENO" "jack/session.h" "ac_cv_header_jack_session_h" "$ac_includes_default" if test "x$ac_cv_header_jack_session_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_JACK_SESSION_H 1 _ACEOF $as_echo "#define JACK_SESSION 1" >>confdefs.h JACK_SESSION=1 fi done CPPFLAGS="$tmp_CPPFLAGS" fi tmp_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $JACK_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack_port_get_latency_range in -ljack" >&5 $as_echo_n "checking for jack_port_get_latency_range in -ljack... " >&6; } if ${ac_cv_lib_jack_jack_port_get_latency_range+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljack $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 jack_port_get_latency_range (); int main () { return jack_port_get_latency_range (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_jack_jack_port_get_latency_range=yes else ac_cv_lib_jack_jack_port_get_latency_range=no fi 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_jack_jack_port_get_latency_range" >&5 $as_echo "$ac_cv_lib_jack_jack_port_get_latency_range" >&6; } if test "x$ac_cv_lib_jack_jack_port_get_latency_range" = xyes; then : $as_echo "#define NEW_JACK_LATENCY_API 1" >>confdefs.h NEW_JACK_LATENCY_API=1 fi LDFLAGS="$tmp_LDFLAGS" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FFMPEG" >&5 $as_echo_n "checking for FFMPEG... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavformat libavcodec libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavformat libavcodec libavutil libswscale") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavformat libavcodec libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavformat libavcodec libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavformat libavcodec libavutil libswscale") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavformat libavcodec libavutil libswscale" 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 FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavformat libavcodec libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavformat libavcodec libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? " Could not find ffmpeg. Please set PKG_CONFIG_PATH to where FFMPEG installed its pkg files. If you have the choice prefer ffmpeg.org over libav.org. Both are supported but xjadeo is developed and tested with the former. " "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? " Could not find ffmpeg. Please set PKG_CONFIG_PATH to where FFMPEG installed its pkg files. If you have the choice prefer ffmpeg.org over libav.org. Both are supported but xjadeo is developed and tested with the former. " "$LINENO" 5 else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi MQ_LIBS="" if test "x$enable_mq" != "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mq_open in -lrt" >&5 $as_echo_n "checking for mq_open in -lrt... " >&6; } if ${ac_cv_lib_rt_mq_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $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 mq_open (); int main () { return mq_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rt_mq_open=yes else ac_cv_lib_rt_mq_open=no fi 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_rt_mq_open" >&5 $as_echo "$ac_cv_lib_rt_mq_open" >&6; } if test "x$ac_cv_lib_rt_mq_open" = xyes; then : $as_echo "#define HAVE_MQ 1" >>confdefs.h MQ_LIBS="-lrt" HAVE_MQ=1 fi fi $as_echo "#define MQLEN 512" >>confdefs.h if test "x$enable_ipc" != "xno"; then if test -z "$HAVE_MQ"; then for ac_header in sys/ipc.h sys/msg.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 $as_echo "#define HAVE_IPCMSG 1" >>confdefs.h HAVE_IPCMSG=1 fi done fi fi if test "x$enable_osc" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBLO" >&5 $as_echo_n "checking for LIBLO... " >&6; } if test -n "$LIBLO_CFLAGS"; then pkg_cv_LIBLO_CFLAGS="$LIBLO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5 ($PKG_CONFIG --exists --print-errors "liblo") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBLO_CFLAGS=`$PKG_CONFIG --cflags "liblo" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBLO_LIBS"; then pkg_cv_LIBLO_LIBS="$LIBLO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5 ($PKG_CONFIG --exists --print-errors "liblo") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBLO_LIBS=`$PKG_CONFIG --libs "liblo" 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 LIBLO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "liblo" 2>&1` else LIBLO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "liblo" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBLO_PKG_ERRORS" >&5 NOFAIL=0 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } NOFAIL=0 else LIBLO_CFLAGS=$pkg_cv_LIBLO_CFLAGS LIBLO_LIBS=$pkg_cv_LIBLO_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBLO 1" >>confdefs.h HAVE_LIBLO=1 fi fi if test -z "$PLATFORM_OSX$PLATFORM_WINDOWS"; then : for ac_header in X11/Xlib.h do : 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 : cat >>confdefs.h <<_ACEOF #define HAVE_X11_XLIB_H 1 _ACEOF else as_fn_error $? "X11 is mandatory on this platform - install libx11/xcb development package." "$LINENO" 5 fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XOpenDisplay in -lX11" >&5 $as_echo_n "checking for XOpenDisplay in -lX11... " >&6; } if ${ac_cv_lib_X11_XOpenDisplay+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $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 XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_X11_XOpenDisplay=yes else ac_cv_lib_X11_XOpenDisplay=no fi 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_X11_XOpenDisplay" >&5 $as_echo "$ac_cv_lib_X11_XOpenDisplay" >&6; } if test "x$ac_cv_lib_X11_XOpenDisplay" = xyes; then : XV_LIBS="-lXext" else as_fn_error $? "X11 is mandatory on this platform - install libx11/xcb development package." "$LINENO" 5 fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XPM" >&5 $as_echo_n "checking for XPM... " >&6; } if test -n "$XPM_CFLAGS"; then pkg_cv_XPM_CFLAGS="$XPM_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xpm\""; } >&5 ($PKG_CONFIG --exists --print-errors "xpm") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_XPM_CFLAGS=`$PKG_CONFIG --cflags "xpm" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$XPM_LIBS"; then pkg_cv_XPM_LIBS="$XPM_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xpm\""; } >&5 ($PKG_CONFIG --exists --print-errors "xpm") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_XPM_LIBS=`$PKG_CONFIG --libs "xpm" 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 XPM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "xpm" 2>&1` else XPM_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "xpm" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$XPM_PKG_ERRORS" >&5 as_fn_error $? "Xpm support is mandatory on this platform - install libxpm development package." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Xpm support is mandatory on this platform - install libxpm development package." "$LINENO" 5 else XPM_CFLAGS=$pkg_cv_XPM_CFLAGS XPM_LIBS=$pkg_cv_XPM_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi if test "x$enable_xv" != "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XvQueryAdaptors in -lXv" >&5 $as_echo_n "checking for XvQueryAdaptors in -lXv... " >&6; } if ${ac_cv_lib_Xv_XvQueryAdaptors+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXv $X_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 XvQueryAdaptors (); int main () { return XvQueryAdaptors (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xv_XvQueryAdaptors=yes else ac_cv_lib_Xv_XvQueryAdaptors=no fi 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_Xv_XvQueryAdaptors" >&5 $as_echo "$ac_cv_lib_Xv_XvQueryAdaptors" >&6; } if test "x$ac_cv_lib_Xv_XvQueryAdaptors" = xyes; then : $as_echo "#define HAVE_LIBXV 1" >>confdefs.h XV_LIBS="$XV_LIBS -lXv" HAVE_LIBXV=1 fi fi if test "x$enable_sdl" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL" >&5 $as_echo_n "checking for SDL... " >&6; } if test -n "$SDL_CFLAGS"; then pkg_cv_SDL_CFLAGS="$SDL_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl\""; } >&5 ($PKG_CONFIG --exists --print-errors "sdl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SDL_CFLAGS=`$PKG_CONFIG --cflags "sdl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$SDL_LIBS"; then pkg_cv_SDL_LIBS="$SDL_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl\""; } >&5 ($PKG_CONFIG --exists --print-errors "sdl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SDL_LIBS=`$PKG_CONFIG --libs "sdl" 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 SDL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sdl" 2>&1` else SDL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sdl" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$SDL_PKG_ERRORS" >&5 NOFAIL=0 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } NOFAIL=0 else SDL_CFLAGS=$pkg_cv_SDL_CFLAGS SDL_LIBS=$pkg_cv_SDL_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_SDL 1" >>confdefs.h HAVE_SDL=1 fi fi if test "x$enable_opengl" != "xno" -a -z "$PLATFORM_WINDOWS$PLATFORM_OSX"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GL" >&5 $as_echo_n "checking for GL... " >&6; } if test -n "$GL_CFLAGS"; then pkg_cv_GL_CFLAGS="$GL_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu gl\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu gl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GL_CFLAGS=`$PKG_CONFIG --cflags "glu gl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GL_LIBS"; then pkg_cv_GL_LIBS="$GL_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu gl\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu gl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GL_LIBS=`$PKG_CONFIG --libs "glu gl" 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 GL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu gl" 2>&1` else GL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu gl" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GL_PKG_ERRORS" >&5 NOFAIL=0 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } NOFAIL=0 else GL_CFLAGS=$pkg_cv_GL_CFLAGS GL_LIBS=$pkg_cv_GL_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_GL 1" >>confdefs.h HAVE_GL=1 fi fi if test "x${enable_imlib2}" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IMLIB2" >&5 $as_echo_n "checking for IMLIB2... " >&6; } if test -n "$IMLIB2_CFLAGS"; then pkg_cv_IMLIB2_CFLAGS="$IMLIB2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"imlib2 >= 1.3.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "imlib2 >= 1.3.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_IMLIB2_CFLAGS=`$PKG_CONFIG --cflags "imlib2 >= 1.3.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$IMLIB2_LIBS"; then pkg_cv_IMLIB2_LIBS="$IMLIB2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"imlib2 >= 1.3.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "imlib2 >= 1.3.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_IMLIB2_LIBS=`$PKG_CONFIG --libs "imlib2 >= 1.3.0" 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 IMLIB2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "imlib2 >= 1.3.0" 2>&1` else IMLIB2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "imlib2 >= 1.3.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$IMLIB2_PKG_ERRORS" >&5 NOFAIL=0 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } NOFAIL=0 else IMLIB2_CFLAGS=$pkg_cv_IMLIB2_CFLAGS IMLIB2_LIBS=$pkg_cv_IMLIB2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_IMLIB2 1" >>confdefs.h HAVE_IMLIB2=1 fi fi if test "x$enable_midi" != "xno"; then MIDI_CFLAGS="" MIDI_CFLAGS="" if test "x$enable_portmidi" != "xno"; then for ac_header in portmidi.h porttime.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 FOUND_H_PORTMIDI=yes fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Pm_CountDevices in -lportmidi" >&5 $as_echo_n "checking for Pm_CountDevices in -lportmidi... " >&6; } if ${ac_cv_lib_portmidi_Pm_CountDevices+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lportmidi $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 Pm_CountDevices (); int main () { return Pm_CountDevices (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_portmidi_Pm_CountDevices=yes else ac_cv_lib_portmidi_Pm_CountDevices=no fi 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_portmidi_Pm_CountDevices" >&5 $as_echo "$ac_cv_lib_portmidi_Pm_CountDevices" >&6; } if test "x$ac_cv_lib_portmidi_Pm_CountDevices" = xyes; then : FOUND_L_PORTMIDI=yes fi fi if test "x$FOUND_H_PORTMIDI$FOUND_L_PORTMIDI" = "xyesyes"; then MIDI_LIBS="-lportmidi" if test "$PM_OS" != "mac"; then MIDI_LIBS="${MIDI_LIBS} -lporttime" fi fi if test "x$JACKMIDI" != "xno"; then tmp_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $JACK_CFLAGS" for ac_header in jack/midiport.h do : ac_fn_c_check_header_mongrel "$LINENO" "jack/midiport.h" "ac_cv_header_jack_midiport_h" "$ac_includes_default" if test "x$ac_cv_header_jack_midiport_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_JACK_MIDIPORT_H 1 _ACEOF FOUND_H_JACKMIDI=yes fi done CPPFLAGS=$tmp_CPPFLAGS fi if test "x$enable_alsamidi" != "xno"; then for ac_header in alsa/asoundlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default" if test "x$ac_cv_header_alsa_asoundlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ALSA_ASOUNDLIB_H 1 _ACEOF FOUND_H_ALSAMIDI=yes fi done for ac_header in pthread.h do : ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTHREAD_H 1 _ACEOF FOUND_H_PTHREAD=yes fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for snd_rawmidi_open in -lasound" >&5 $as_echo_n "checking for snd_rawmidi_open in -lasound... " >&6; } if ${ac_cv_lib_asound_snd_rawmidi_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lasound $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 snd_rawmidi_open (); int main () { return snd_rawmidi_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_asound_snd_rawmidi_open=yes else ac_cv_lib_asound_snd_rawmidi_open=no fi 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_rawmidi_open" >&5 $as_echo "$ac_cv_lib_asound_snd_rawmidi_open" >&6; } if test "x$ac_cv_lib_asound_snd_rawmidi_open" = xyes; then : FOUND_L_ALSAMIDI=yes fi fi if test "x$FOUND_H_ALSAMIDI$FOUND_L_ALSAMIDI$FOUND_H_PTHREAD" = "xyesyesyes"; then $as_echo "#define ALSA_SEQ_MIDI 1" >>confdefs.h $as_echo "#define ALSA_RAW_MIDI 1" >>confdefs.h $as_echo "#define HAVE_MIDI 1" >>confdefs.h HAVE_MIDI=1 ALSA_SEQ_MIDI=1 ALSA_RAW_MIDI=1 MIDI_LIBS="$MIDI_LIBS -lasound" fi if test "x$FOUND_H_PORTMIDI$FOUND_L_PORTMIDI" = "xyesyes"; then $as_echo "#define HAVE_MIDI 1" >>confdefs.h $as_echo "#define HAVE_PORTMIDI 1" >>confdefs.h HAVE_MIDI=1 HAVE_PORTMIDI=1 fi if test "x$FOUND_H_JACKMIDI" = "xyes"; then $as_echo "#define HAVE_MIDI 1" >>confdefs.h $as_echo "#define HAVE_JACKMIDI 1" >>confdefs.h HAVE_MIDI=1 HAVE_JACKMIDI=1 fi fi if test "x$enable_weakjack" = "xyes"; then JACK_CFLAGS+=" -DUSE_WEAK_JACK" JACK_LIBS=-ldl fi FREETYPE_LIBS= FREETYPE_CFLAGS= pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE" >&5 $as_echo_n "checking for FREETYPE... " >&6; } if test -n "$FREETYPE_CFLAGS"; then pkg_cv_FREETYPE_CFLAGS="$FREETYPE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FREETYPE_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FREETYPE_LIBS"; then pkg_cv_FREETYPE_LIBS="$FREETYPE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FREETYPE_LIBS=`$PKG_CONFIG --libs "freetype2" 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 FREETYPE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "freetype2" 2>&1` else FREETYPE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "freetype2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FREETYPE_PKG_ERRORS" >&5 freetype_pkgconfig=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } freetype_pkgconfig=no else FREETYPE_CFLAGS=$pkg_cv_FREETYPE_CFLAGS FREETYPE_LIBS=$pkg_cv_FREETYPE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } freetype_pkgconfig=yes fi if test "x$freetype_pkgconfig" = "xyes"; then if test ! "x$enable_ft" = "xno"; then $as_echo "#define HAVE_FREETYPE_H 1" >>confdefs.h $as_echo "#define HAVE_FT 1" >>confdefs.h HAVE_FT=1 else FREETYPE_LIBS= FREETYPE_CFLAGS= fi else # Extract the first word of "freetype-config", so it can be a program name with args. set dummy freetype-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_FREETYPE_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $FREETYPE_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_FREETYPE_CONFIG="$FREETYPE_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_FREETYPE_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 test -z "$ac_cv_path_FREETYPE_CONFIG" && ac_cv_path_FREETYPE_CONFIG="no" ;; esac fi FREETYPE_CONFIG=$ac_cv_path_FREETYPE_CONFIG if test -n "$FREETYPE_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE_CONFIG" >&5 $as_echo "$FREETYPE_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$FREETYPE_CONFIG" != "xno" -a ! "x$enable_ft" = "xno"; then FREETYPE_CFLAGS=`$FREETYPE_CONFIG --cflags` FREETYPE_LIBS=`$FREETYPE_CONFIG --libs` $as_echo "#define HAVE_FREETYPE_H 1" >>confdefs.h $as_echo "#define HAVE_FT 1" >>confdefs.h HAVE_FT=1 fi fi if test -n "$fontfile" ; then # I'm not sure if this is the proper way to escape a #define string. # AC_DEFINE(TTFFONTFILE, "\"$fontfile\"") - no # FREETYPE_CFLAGS="$FREETYPE_CFLAGS -DTTFFONTFILE=\\\"$fontfile\\\"" - maybe echo "#define TTFFONTFILE \"$fontfile\"" >> confdefs.h fi if test "x$enable_ltc" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LTC" >&5 $as_echo_n "checking for LTC... " >&6; } if test -n "$LTC_CFLAGS"; then pkg_cv_LTC_CFLAGS="$LTC_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ltc\""; } >&5 ($PKG_CONFIG --exists --print-errors "ltc") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LTC_CFLAGS=`$PKG_CONFIG --cflags "ltc" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LTC_LIBS"; then pkg_cv_LTC_LIBS="$LTC_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ltc\""; } >&5 ($PKG_CONFIG --exists --print-errors "ltc") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LTC_LIBS=`$PKG_CONFIG --libs "ltc" 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 LTC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ltc" 2>&1` else LTC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ltc" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LTC_PKG_ERRORS" >&5 NOFAIL=0 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } NOFAIL=0 else LTC_CFLAGS=$pkg_cv_LTC_CFLAGS LTC_LIBS=$pkg_cv_LTC_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LTC 1" >>confdefs.h HAVE_LTC=1 fi fi if test "$enable_qtgui" = "yes"; then if test "x$qt4prefix" = "x"; then qt4prefix=$($PKG_CONFIG --variable=prefix QtGui) fi # Check for Qt qmake utility. # Extract the first word of "qmake", so it can be a program name with args. set dummy qmake; 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_qmake+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_qmake in [\\/]* | ?:[\\/]*) ac_cv_path_ac_qmake="$ac_qmake" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $qt4prefix/bin 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_qmake="$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 test -z "$ac_cv_path_ac_qmake" && ac_cv_path_ac_qmake="no" ;; esac fi ac_qmake=$ac_cv_path_ac_qmake if test -n "$ac_qmake"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_qmake" >&5 $as_echo "$ac_qmake" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "lrelease", so it can be a program name with args. set dummy lrelease; 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_lrelease+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_lrelease in [\\/]* | ?:[\\/]*) ac_cv_path_ac_lrelease="$ac_lrelease" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $qt4prefix/bin 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_lrelease="$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 test -z "$ac_cv_path_ac_lrelease" && ac_cv_path_ac_lrelease="no" ;; esac fi ac_lrelease=$ac_cv_path_ac_lrelease if test -n "$ac_lrelease"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_lrelease" >&5 $as_echo "$ac_lrelease" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_qmake" = "xno" -o "x$ac_lrelease" = "xno" ; then as_fn_error $? "qmake not found: please install the Qt4 development package of your distribution. Try setting --with-qt4prefix=QTROOT or use --disable-qtgui to compile xjadeo." "$LINENO" 5 fi HAVE_QT4=1 if test "x$qmakeargs" = "x"; then if test -n "$PLATFORM_WINDOWS"; then ac_qmake_args="-spec win32-x-g++ -config release" else ac_qmake_args="-config release" fi else ac_qmake_args="$qmakeargs" fi ac_qtgui_dir="qt-gui" ac_config_files="$ac_config_files src/qt-gui/Makefile src/qt-gui/qjadeo.pro" else ac_qtgui_dir="" fi ac_contrib_dir="" if test "x$enable_contrib" = "xyes"; then ac_contrib_dir="contrib/cli-remote/" fi if test "x$enable_contrib" = "xyes"; then ac_config_files="$ac_config_files contrib/cli-remote/Makefile" fi ac_config_files="$ac_config_files Makefile src/Makefile src/xjadeo/Makefile xjadeo.lsm" 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 # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # 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 $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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end 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 { $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 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' 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_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 "${TARGET_OSX_TRUE}" && test -z "${TARGET_OSX_FALSE}"; then as_fn_error $? "conditional \"TARGET_OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_LINUX_TRUE}" && test -z "${TARGET_LINUX_FALSE}"; then as_fn_error $? "conditional \"TARGET_LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_NETBSD_TRUE}" && test -z "${TARGET_NETBSD_FALSE}"; then as_fn_error $? "conditional \"TARGET_NETBSD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_WIN32_TRUE}" && test -z "${TARGET_WIN32_FALSE}"; then as_fn_error $? "conditional \"TARGET_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_OSX_TRUE}" && test -z "${TARGET_OSX_FALSE}"; then as_fn_error $? "conditional \"TARGET_OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_LINUX_TRUE}" && test -z "${TARGET_LINUX_FALSE}"; then as_fn_error $? "conditional \"TARGET_LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_NETBSD_TRUE}" && test -z "${TARGET_NETBSD_FALSE}"; then as_fn_error $? "conditional \"TARGET_NETBSD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_WIN32_TRUE}" && test -z "${TARGET_WIN32_FALSE}"; then as_fn_error $? "conditional \"TARGET_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_OSX_TRUE}" && test -z "${TARGET_OSX_FALSE}"; then as_fn_error $? "conditional \"TARGET_OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_LINUX_TRUE}" && test -z "${TARGET_LINUX_FALSE}"; then as_fn_error $? "conditional \"TARGET_LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_NETBSD_TRUE}" && test -z "${TARGET_NETBSD_FALSE}"; then as_fn_error $? "conditional \"TARGET_NETBSD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_WIN32_TRUE}" && test -z "${TARGET_WIN32_FALSE}"; then as_fn_error $? "conditional \"TARGET_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_OSX_TRUE}" && test -z "${TARGET_OSX_FALSE}"; then as_fn_error $? "conditional \"TARGET_OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_LINUX_TRUE}" && test -z "${TARGET_LINUX_FALSE}"; then as_fn_error $? "conditional \"TARGET_LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_NETBSD_TRUE}" && test -z "${TARGET_NETBSD_FALSE}"; then as_fn_error $? "conditional \"TARGET_NETBSD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_WIN32_TRUE}" && test -z "${TARGET_WIN32_FALSE}"; then as_fn_error $? "conditional \"TARGET_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${EMBED_FONT_TRUE}" && test -z "${EMBED_FONT_FALSE}"; then as_fn_error $? "conditional \"EMBED_FONT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${EMBED_FONT_TRUE}" && test -z "${EMBED_FONT_FALSE}"; then as_fn_error $? "conditional \"EMBED_FONT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then 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 as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepOBJC_TRUE}" && test -z "${am__fastdepOBJC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepOBJC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $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. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # 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=: # 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_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 ;; 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. 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 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 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 as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits 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 rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi 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 else as_ln_s='cp -pR' fi 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='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # 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'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 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. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac 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" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$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 [OPTION]... [TAG]... -h, --help print this help, then exit -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 Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _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.69, with options \\"\$ac_cs_config\\" 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." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF 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_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --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 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 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. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then 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 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "src/qt-gui/Makefile") CONFIG_FILES="$CONFIG_FILES src/qt-gui/Makefile" ;; "src/qt-gui/qjadeo.pro") CONFIG_FILES="$CONFIG_FILES src/qt-gui/qjadeo.pro" ;; "contrib/cli-remote/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/cli-remote/Makefile" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/xjadeo/Makefile") CONFIG_FILES="$CONFIG_FILES src/xjadeo/Makefile" ;; "xjadeo.lsm") CONFIG_FILES="$CONFIG_FILES xjadeo.lsm" ;; *) 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 # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # 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 || { 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 "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { 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 { 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 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 || 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 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 || $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=. 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 .) # We are building in place. ac_srcdir=. 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 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 case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$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 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 # 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 || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b 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;} rm -f "$ac_tmp/stdin" case $ac_file 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 { $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 rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $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. _am_arg="$ac_file" _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" || $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 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac 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. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF 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. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false 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 || 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 MIDIREPORT="" if test -n "$HAVE_PORTMIDI"; then MIDIREPORT="${MIDIREPORT}portmidi "; fi if test -n "$HAVE_JACKMIDI"; then MIDIREPORT="${MIDIREPORT}jack-midi "; fi if test -n "$ALSA_SEQ_MIDI"; then MIDIREPORT="${MIDIREPORT}alsa-seq "; fi if test -n "$ALSA_RAW_MIDI"; then MIDIREPORT="${MIDIREPORT}alsa-RAW "; fi if test -z "$HAVE_MIDI"; then MIDIREPORT="${MIDIREPORT}disabled."; fi if test -n "$HAVE_MQ"; then RCTLREPORT="POSIX-MQ"; elif test -n "$HAVE_IPCMSG"; then RCTLREPORT="IPC-MSG"; else RCTLREPORT="N/A (stdio only)"; fi if test -z "$HAVE_FT"; then OSDREPORT="disabled" else OSDREPORT=" - freetype: yes - custom font: " if test -n "$fontfile" ; then OSDREPORT="${OSDREPORT}$fontfile"; else OSDREPORT="${OSDREPORT}-" fi if test "x$enable_embed_font" = "xyes"; then OSDREPORT="${OSDREPORT} - embed font: yes" else OSDREPORT="${OSDREPORT} - embed font: no" fi fi CONTREPORT="no" if test "x$enable_contrib" = "xyes"; then CONTREPORT="yes" fi if test -n "$HAVE_GL"; then RPT_OPENGL="yes"; else RPT_OPENGL="not avail."; fi if test -n "$HAVE_LIBXV"; then RPT_LIBXV="yes"; else RPT_LIBXV="not avail."; fi if test -n "$HAVE_IMLIB2"; then RPT_IMLIB2="yes"; else RPT_IMLIB2="not avail."; fi if test -n "$PLATFORM_OSX"; then RPT_MACOSX="yes"; else RPT_MACOSX="not avail."; fi if test -n "$HAVE_SDL"; then RPT_SDL="yes"; else RPT_SDL="not avail."; fi if test -n "$HAVE_LIBLO"; then RPT_LIBLO="yes"; else RPT_LIBLO="not avail."; fi if test -n "$HAVE_QT4"; then RPT_QT4="yes"; else RPT_QT4="no"; fi if test -n "$PLATFORM_OSX"; then RPT_QT4="${RPT_QT4} (OSX-built-in)"; fi if test -n "$JACK_SESSION"; then RPT_JACKSESSION="yes"; else RPT_JACKSESSION="not avail."; fi if test -n "$NEW_JACK_LATENCY_API"; then RPT_JACK_LATENCY="yes"; else RPT_JACK_LATENCY="not avail."; fi if test -n "$HAVE_LTC"; then RPT_LTC="yes"; else RPT_LTC="not avail."; fi { $as_echo "$as_me:${as_lineno-$LINENO}: ------------------------------------------------------------------------ $PACKAGE $VERSION - Configuration Report ------------------------------------------------------------------------ prefix: $prefix exec-prefix: $exec_prefix install path: $bindir System wide config: $sysconfdir/xjadeorc Video Displays - openGL: $RPT_OPENGL - libxv: $RPT_LIBXV - libx11/imlib2: $RPT_IMLIB2 - mac/quartz: $RPT_MACOSX - SDL: $RPT_SDL Sync: - JACK-transport: yes - LTC: $RPT_LTC - MIDI: $MIDIREPORT JACK-session: $RPT_JACKSESSION JACK-latency-api: $RPT_JACK_LATENCY remote control: $RCTLREPORT OSC remote control: $RPT_LIBLO On-screen-display: $OSDREPORT GUI (qjadeo): $RPT_QT4 build contrib/*: $CONTREPORT " >&5 $as_echo "$as_me: ------------------------------------------------------------------------ $PACKAGE $VERSION - Configuration Report ------------------------------------------------------------------------ prefix: $prefix exec-prefix: $exec_prefix install path: $bindir System wide config: $sysconfdir/xjadeorc Video Displays - openGL: $RPT_OPENGL - libxv: $RPT_LIBXV - libx11/imlib2: $RPT_IMLIB2 - mac/quartz: $RPT_MACOSX - SDL: $RPT_SDL Sync: - JACK-transport: yes - LTC: $RPT_LTC - MIDI: $MIDIREPORT JACK-session: $RPT_JACKSESSION JACK-latency-api: $RPT_JACK_LATENCY remote control: $RCTLREPORT OSC remote control: $RPT_LIBLO On-screen-display: $OSDREPORT GUI (qjadeo): $RPT_QT4 build contrib/*: $CONTREPORT " >&6;} if test "x$enable_contrib" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: Note for Packagers: --enable-contrib does not make a difference when packaging. All programs in contrib/ are noinst targets. They are intended for advanced users, developers and testing only. " >&5 $as_echo "$as_me: Note for Packagers: --enable-contrib does not make a difference when packaging. All programs in contrib/ are noinst targets. They are intended for advanced users, developers and testing only. " >&6;} fi if test -n "$PLATFORM_LINUX$PLATFORM_NETBSD" -a -n "$HAVE_PORTMIDI"; then { $as_echo "$as_me:${as_lineno-$LINENO}: PortMidi is intended for non Un*x Platforms only. On Linux, please use JACK, ALSA-seq or ALSA-raw. " >&5 $as_echo "$as_me: PortMidi is intended for non Un*x Platforms only. On Linux, please use JACK, ALSA-seq or ALSA-raw. " >&6;} fi if test -n "$PLATFORM_LINUX$PLATFORM_OSX$PLATFORM_NETBSD" -a -n "$HAVE_QT4"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: qjadeo is deprecated an not intended to be used. It will be removed in future releases. Xjadeo now features a complete built-in user interface. Do not use --enable-qtgui unless you really know what you are doing. " >&5 $as_echo "$as_me: WARNING: qjadeo is deprecated an not intended to be used. It will be removed in future releases. Xjadeo now features a complete built-in user interface. Do not use --enable-qtgui unless you really know what you are doing. " >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: type \"make\" followed my \"make install\" as root. " >&5 $as_echo "$as_me: type \"make\" followed my \"make install\" as root. " >&6;} xjadeo-0.8.10/Makefile.am0000644000175000017500000000216512620454615012040 00000000000000AC_AUX_DIR = m4 AC_MACRO_DIR = m4 SUBDIRS = src @ac_contrib_dir@ man_MANS = doc/xjadeo.1 doc/xjremote.1 EXTRA_DIST= \ xjadeo.lsm.in \ doc/xjadeorc \ doc/Makefile doc/xjadeo.1 doc/xjremote.1 \ \ src/xjadeo/icons/osd_bitmaps.h \ src/xjadeo/icons/brightness.bitmap src/xjadeo/icons/brightness_mask.xbm \ src/xjadeo/icons/contrast.bitmap src/xjadeo/icons/contrast_mask.xbm \ src/xjadeo/icons/gamma.bitmap src/xjadeo/icons/gamma_mask.xbm \ src/xjadeo/icons/hue.bitmap src/xjadeo/icons/hue_mask.xbm \ src/xjadeo/icons/saturation.bitmap src/xjadeo/icons/saturation_mask.xbm \ \ src/xjadeo/icons/xjadeo8.ico src/xjadeo/icons/xjadeo8_ico.h \ src/xjadeo/icons/xjadeoH.ico src/xjadeo/icons/xjadeoH.h \ src/xjadeo/icons/xjadeo8.xpm src/xjadeo/icons/xjadeoH128.png \ src/xjadeo/icons/xjadeo_win.ico \ src/xjadeo/fonts/ArdourMono.ttf \ \ contrib/cli-remote/jadeo.c \ contrib/cli-remote/Makefile.am \ contrib/cli-remote/README \ \ contrib/xjadeo-example.mp4 MAINTAINERCLEANFILES = \ Makefile.in \ aclocal.m4 \ compile \ config.guess \ config.h.in \ config.sub \ configure \ depcomp \ install-sh \ Makefile.in \ missing xjadeo-0.8.10/config.sub0000755000175000017500000010645013544141530011764 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-22' # 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 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 # 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # 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: # https://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. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2018 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." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # 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-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" ] then os=`echo "$1" | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -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 | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # 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 | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | 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 | ia16 | ia64 \ | ip2k | iq2000 \ | 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 \ | 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 \ | open8 | or1k | or1knd | or32 \ | pdp10 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | 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 | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) ;; ms1) basic_machine=mt-unknown ;; 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 # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; # 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-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | 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-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | 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-* \ | pru-* \ | pyramid-* \ | 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-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # 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. 386bsd) basic_machine=i386-pc os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) 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 ;; balance) 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 ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2*) 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 ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) 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 ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; 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 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; nsv-tandem) basic_machine=nsv-tandem ;; nsx-tandem) basic_machine=nsx-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) 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 ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh5el) basic_machine=sh5le-unknown ;; simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; x64) basic_machine=x86_64-pc ;; xbox) basic_machine=i686-pc os=-mingw32 ;; 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 ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # 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|'` ;; -solaris) os=-solaris2 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # es1800 is here to avoid being matched by es* (a different OS) -es1800*) os=-ose ;; # Now accept the basic system types. # The portable systems comes first. # 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* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -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* | -cegcc* | -glidix* \ | -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* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ | -midnightbsd*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -xray | -os68k* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4*) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $basic_machine in arm*) os=-eabi ;; *) os=-elf ;; esac ;; -nacl*) ;; -ios) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; 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 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; pru-*) os=-elf ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac echo "$basic_machine$os" exit # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xjadeo-0.8.10/aclocal.m40000644000175000017500000014762713775352465011675 00000000000000# generated automatically by aclocal 1.16.1 -*- Autoconf -*- # Copyright (C) 1996-2018 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. 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 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]) 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 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]) 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 _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 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 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 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 m4_default([$4], [AC_MSG_ERROR( [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. _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. _PKG_TEXT 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 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 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 _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR # Copyright (C) 2002-2018 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_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.16' 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.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _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], []) # 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.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2018 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-2018 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-2018 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 # 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 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]) ]) # 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 ]) # 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 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 ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2018 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_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. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _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. # This creates each '.Po' and '.Plo' makefile fragment that we'll 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" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2018 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. # 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. 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 ]) # 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 # 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 fi AC_SUBST([CYGPATH_W]) # 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 _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]) 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. 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 AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # 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_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]) # Copyright (C) 2001-2018 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_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])]) # Copyright (C) 2003-2018 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])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2018 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_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2018 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 ]) # -*- Autoconf -*- # Obsolete and "removed" macros, that must however still report explicit # error messages when used, to smooth transition. # # Copyright (C) 1996-2018 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-2018 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-2018 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])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2018 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_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-2018 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 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 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 ]) # Copyright (C) 2009-2018 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_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 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 ]) # Copyright (C) 2001-2018 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_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])]) # Copyright (C) 2006-2018 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_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($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2018 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_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 xjadeo-0.8.10/doc/0000755000175000017500000000000013775353060010631 500000000000000xjadeo-0.8.10/doc/Makefile0000644000175000017500000000351312624631335012207 00000000000000.PHONY: all validate html clean man VERSION=$(shell awk '/define VERSION /{print $$3;}' ../config.h | sed 's/"//g') WINVERS=$(shell grep " VERSION " ../config.h | cut -d ' ' -f3 | sed 's/"//g'| sed 's/\./_/g') RELDATE=$(shell date '+%B %Y') all: man html: xjadeo.1 xjremote.1 mkdir -p html/static cp -f favicon.ico html/ cp -a static/* html/static/ groff -m man -T xhtml -P -l xjadeo.1 | sed 's/cellspacing="0" cellpadding="0"//g;s/width="100%" border="0" rules="none" frame="void"//g;s/valign="top" align="left"//g;s/width="/style="width:/g;s/><\/col>/\/>/g' > pages/xjadeo.html groff -m man -T xhtml -P -l xjremote.1 | sed 's/cellspacing="0" cellpadding="0"//g' > pages/xjremote.html `which echo` -e "/\n1,.d\n/\n.d\n/\n.d\n/<\\/body>\n.,\$$d\nw\nq" | ed -s pages/xjadeo.html `which echo` -e "/\n1,.d\n/\n.d\n/\n.d\n/<\\/body>\n.,\$$d\nw\nq" | ed -s pages/xjremote.html for file in pages/*; do echo $$file; cat tpl/head tpl/page $$file tpl/epage tpl/foot > html/`basename $$file`; done cat tpl/head tpl/front tpl/foot > html/index.html sed -i 's/@VERSION@/$(VERSION)/g;s/@WINVERSION@/$(WINVERS)/g;s/@DATE@/$(RELDATE)/g' html/download.html rm -f pages/xjadeo.html pages/xjremote.html clean: -rm -fr xjadeo.1 xjremote.1 html/ ../src/xjadeo/xjremote: $(MAKE) -C ../src/xjadeo/ ../src/xjadeo/xjadeo: $(MAKE) -C ../src/xjadeo/ xjadeo.1: ../src/xjadeo/xjadeo help2man -N -n 'X Jack Video Monitor' -o xjadeo.1 ../src/xjadeo/xjadeo sed -i 's/^\.SS "/.SH "/;s/^Video Codecs and Formats:/.SH "Video Codecs and Formats:"/;s/^Configuration Files:/.SH "Configuration Files:"/;s/^User Interaction:/.SH "User Interaction:"/' xjadeo.1 xjremote.1: ../src/xjadeo/xjremote help2man -N -n 'X Jack Video Monitor Remote Control' -o xjremote.1 ../src/xjadeo/xjremote man: xjadeo.1 xjremote.1 .PHONY: man all dist-clean html xjadeo-0.8.10/doc/xjremote.10000644000175000017500000000361613775353057012504 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.8. .TH XJREMOTE "1" "January 2021" "xjremote version 0.8.10" "User Commands" .SH NAME xjremote \- X Jack Video Monitor Remote Control .SH SYNOPSIS .B xjremote[ \fI\,OPTIONS \/\fR] .SH DESCRIPTION xjremote \- jack video monitor remote control utility .PP Xjremote opens a connection to a running instance of xjadeo or launches a new instance ready for remote\-control. .PP Interaction with xjremote takes place via standard input/output mechanism, while xjremote itself communicate with xjadeo out\-of\-band using platform specific operations (e.g. POSIX message queues, IPC or OSC). .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR display this help and exit .TP \fB\-V\fR, \fB\-\-version\fR print version information and exit .TP \fB\-f\fR, \fB\-\-nofork\fR connect only to already running instances and do NOT launch a new xjadeo if none found. .TP \fB\-P\fR, \fB\-\-noping\fR do not check if xjadeo is alive. just connect. .TP \fB\-q\fR, \fB\-\-quiet\fR, \fB\-\-silent\fR inhibit usual output .TP \fB\-I\fR, \fB\-\-id\fR specify queue id. .TP \fB\-J\fR, \fB\-\-no\-initial\-sync\fR passed on to xjadeo as option. .TP \fB\-u\fR, \fB\-\-unlink\fR remove existing queues .TP \fB\-U\fR, \fB\-\-unlinkonly\fR remove queues and exit active connections will not be affected by an unlink event. .PP xjemote also accepts \fB\-R\fR, \fB\-Q\fR, and \fB\-W\fR options to be compatible with xjadeo as a drop\-in\-replacement. Those options are ignored by xjremote. .SH "REPORTING BUGS" Report bugs to Robin Gareus .br Website: .TP built from: scm\-v0.8.10 .TP configuration: [ POSIX\-MQueue ] .SH COPYRIGHT Copyright \(co GPL 2006\-2021 Robin Gareus .br This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. xjadeo-0.8.10/doc/xjadeo.10000644000175000017500000002553313775353057012123 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.8. .TH XJADEO "1" "January 2021" "xjadeo version 0.8.10" "User Commands" .SH NAME xjadeo \- X Jack Video Monitor .SH SYNOPSIS .B xjadeo [ \fI\,OPTIONS \/\fR] [ \fI\,video-file \/\fR] .SH DESCRIPTION xjadeo \- the X Jack Video Monitor .PP Xjadeo is a software video player that displays a video clip synchronized to an external time source (MTC, LTC, JACK transport). .PP Xjadeo is intended for soundtrack composition, video monitoring and useful for any task that requires to synchronizing movie frames with audio events. .SH OPTIONS .TP \fB\-A\fR, \fB\-\-avverbose\fR Display verbose video decoder messages. .TP \fB\-a\fR, \fB\-\-ontop\fR Keep xjadeo window on top of other applications. .TP \fB\-b\fR, \fB\-\-no\-letterbox\fR Scale movie to fit window. Without this option a letterbox is used to retain the aspect ratio. .TP \fB\-D\fR, \fB\-\-debug\fR Print development related information. .TP \fB\-d\fR , \fB\-\-midi\-driver\fR Specify midi driver to use. Run 'xjadeo \fB\-V\fR' to list supported driver(s). is case insensitive and can be shortened to the first unique name. eg '\-d j' for jack, '\-d alsa\-r' for alsa\-raw .TP \fB\-f\fR , \fB\-\-screen\-fps\fR Desired refresh rate of the video display in frames If this value is equal or less than zero, xjadeo will use the FPS of the video file as its update frequency (which is the default). Note: This does not affect screen/vblank sync. Synchronizing to the screen's vertical refresh is hardware dependent (and always used if available). .TP \fB\-h\fR, \fB\-\-help\fR Display this help and exit. .TP \fB\-I\fR, \fB\-\-ignore\-file\-offset\fR This option is only useful for video files with a start offset, such as split vob files. Per default xjadeo honors offsets specified in the video file header. This option allows one to override (and subtract) this offset to align the start of the file with timecode 00:00:00:00. .TP \fB\-i\fR , \fB\-\-info\fR Display time information using the OSD (on screen display). 0:Off, 1: Frame number, 2: Timecode, 3: both. .TP \fB\-J\fR, \fB\-\-no\-initial\-sync\fR Do not connect to JACK, nor use any other sync source at application start. .TP \fB\-K\fR , \fB\-\-keyframe\-limit\fR Specify a maximum key\-frame interval limit. With most video codecs, a video frame is the sum of a key\-frame plus differences from the closest key\-frame. For non continuous playback and random seeks xjadeo will have to go back to a key\-frame and decode sequentially to the target frame. This can be quite CPU intense and hence the max. sequential decoding sequence is limited. By default to 100 frames For fast frame accurate seeks, it is highly recommended to transcode the video file using a codec where every frame is a key\-frame (eg. mjpeg), and the video consists only of "intra" frames. (the key\-frame interval is sometimes also called "group of pictures"s or GOP). .TP \fB\-l\fR, \fB\-\-ltc\fR Sync to Linear Time Code (audio jack). .TP \fB\-M\fR , \fB\-\-midifps\fR Specify MTC conversion mode: .TP 0: use frame\-rate from MTC clock (default) .TP 1: use video file's fps .TP 2: "resample" file's fps / MTC .TP \fB\-m\fR , \fB\-\-midi\fR Use MTC as sync source The argument is midi driver specific: .TP jack\-midi: specify a midi port name to connect to, .TP or "" to not auto connect. alsa\-seq: specify ID to connect to (\fB\-1\fR: none) .TP eg. \fB\-m\fR ardour or \fB\-m\fR 80 alsa\-raw: specify hardware device .TP eg. \fB\-m\fR hw:1,0 or \fB\-m\fR 1 portmidi: numeric id; \fB\-1\fR: autodetect .TP a value > \fB\-1\fR specifies the port number to use. use '\-v \fB\-m\fR \fB\-1\fR' to list midi ports. .TP \fB\-O\fR , \fB\-\-osc\fR Listen for OSC messages on the given port. Xjadeo can be remote controlled using Open Sound Control. For a list of available commands, please see the source code or online documentation. .TP \fB\-o\fR , \fB\-\-offset\fR Time offset video from timecode source. This allows one to offset the video playback a certain number of (video) frames relative to the time source. Positive and negative values are permitted. The offset van be specified either as integer frame number of as colon separated timecode. .TP \fB\-\-osc\-doc\fR Print available OSC commands and exit. .TP \fB\-Q\fR, \fB\-\-mq\fR Enable POSIX realtime message queues. This sets up a communication channel for remote, intended to be used with `xjremote`. .TP \fB\-q\fR, \fB\-\-quiet\fR, \fB\-\-silent\fR inhibit usual output. .TP \fB\-R\fR, \fB\-\-remote\fR Enable interactive remote control mode using standard I/O. This option implies non\-verbose and quiet as the terminal is used for interaction. .TP \fB\-r\fR , \fB\-\-rc\fR Specify a custom configuration file to load. .TP \fB\-S\fR, \fB\-\-no\-splash\fR Skip the on screen display startup sequence. .TP \fB\-s\fR, \fB\-\-fullscreen\fR Start xjadeo in full screen mode. .TP \fB\-T\fR , \fB\-\-ttf\-file\fR path to .ttf font for on screen display .TP \fB\-U\fR, \fB\-\-uuid\fR specify JACK SESSION UUID. .TP \fB\-V\fR, \fB\-\-version\fR Print version information and exit. .TP \fB\-W\fR , \fB\-\-ipc\fR Setup IPC message queues for remote control Inter Process Communication is used by `xjremote` on OSX and other platforms that do not support realtime message queues .TP \fB\-v\fR, \fB\-\-verbose\fR print more information .TP \fB\-x\fR , \fB\-\-vo\fR , \fB\-\-videomode\fR Select a video output mode (default: 0: autodetect) A value of \fB\-1\fR lists the available mode and exits .SH "Synchronization Sources:" .TP JACK: JACK transport .TP LTC: Linear/Longitudinal Time Code \- via JACK audio .TP MTC: MIDI Time Code via JACK MIDI .TP MTC: MIDI Time Code via ALSA sequencer (Linux only) .TP MTC: MIDI Time Code via ALSA raw devices (Linux only) .TP MTC: MIDI Time Code via portmidi (OSX, Windows) .TP Manual: Remote controlled manual seeks. .PP If neither \fB\-m\fR nor \fB\-l\fR options are given, xjadeo synchronizes to jack transport by default. .PP .SH "Video Codecs and Formats:" Xjadeo uses ffmpeg to decode video files, so a wide range of formats and codecs are supported. Note however that not all the codecs support reliable seeking. It is highly recommended to transcode the video file into a suitable format/codec. The recommend combination is avi/mjpeg. e.g. ffmpeg \fB\-i\fR input\-file.xxx \fB\-an\fR \fB\-vcodec\fR mjpeg output\-file.avi This creates from your input\-file.xxx an AVI mjpeg encoded video file without sound, and no compression between frames (motion jpeg \- every frame is a key\-frame). You may want also to shrink the size of the file by scaling down its geometry. This uses fewer system resources for decoding and display and leaves more space on the screen for your audio software. see ffmpeg \fB\-s\fR x option and read up on the ffmpeg man page for further options. e.g. \fB\-qscale\fR 0 to retain image quality. .PP .SH "Configuration Files:" At startup xjadeo reads the following resource configuration files in the following order: .TP system wide: \fI\,/etc/xjadeorc\/\fP or \fI\,/usr/local/etc/xjadeorc\/\fP .TP old user config: $HOME/.xjadeorc .TP user config: \fI\,$XDM_CONFIG_HOME/xjadeo/xjadeorc\/\fP (usually $HOME/.config/) .TP on OSX: \fI\,$HOME/Library/Preferences/xjadeorc\/\fP .TP on Windows: $HOMEDRIVE$HOMEPATH\exjadeorc .TP and $HOMEDRIVE$HOMEPATH\eLocal Settings\exjadeorc (usually C:\eDocuments and Settings\e\e) .TP project specific: \fI\,$PWD/xjadeorc\/\fP .PP Every line in the configuration file is a KEY=VALUE pair. If the first character on a line is either is a literal '#' or ';', the line is ignored. KEYS are case insensitive. Boolean values are specified as 'yes' or 'no'. As for a list of available keys, please see the example configuration file, which is available in the documentation folder of the source code. .PP If xjadeo is compiled with jack session support, it will save its current state as config file and pass it as handle to the jack session manager. .PP .SH "User Interaction:" The xjadeo window offers a right\-click context menu (except on OSX where the application has a main menu bar) which provides easy access to common functionality. On OSX and Windows this menu offers a file open dialog to change the video file that is being monitored. On Linux new files can be loaded by dragging the file onto the window itself. In addition xjadeo reacts to key presses. The following shortcuts are defined: .TP \&'Esc' Close window and quit .TP \&'a' Toggle always\-on\-top mode .TP \&'b' Toggle On Screen Display black border .TP \&'Shift+C' Clear all OSD display messages. .TP \&'f' Toggle full screen mode .TP \&'g' Toggle On Screen file geometry display .TP \&'i' Toggle On Screen file time info display .TP \&'l' Toggle letterbox scaling .TP \&'m' Toggle mouse\-cursor visibility .TP \&'o' Cycle though offset display modes. .TP \&'p' Swap OSD timecode/frame number position. .TP \&'s' Toggle On Screen sync source timecode display .TP \&'v' Cycle On Screen VTS/frame number display .TP \&'x' Toggle seek\-bar (experimental) .TP \&'\e' Reset timecode offset to zero .TP \&'=' Increase timecode offset by one frame .TP \&'\-' Decrease timecode offset by one frame .TP \&'+' Increase timecode offset by one second .TP \&'_' Decrease timecode offset by one second .TP \&'{' Decrement timecode offset by one minute .TP \&'}' Increment timecode offset by one minute .TP \&',' Resize window to match aspect ratio .TP \&'.' Resize window to original video size .TP \&'<' Decrease window size by 20% .TP \&'>' Increase window size by 20% .TP \&'backspace' Return jack transport to 00:00:00:00 .TP \&'space' Toggle jack transport play/pause .TP \&'e' Show color equalizer (x11/imlib and XV only) .TP \&'Shift+E' Reset color equalizer (x11/imlib and XV only) .TP \&'0\-9' Change color equalization (x11/imlib and XV only) .TP \&'Shift+1\-4' Fine tune color equalization (x11/imlib and XV only) brightness:1+2, contrast:3+4, gamma:5+6, saturation:7+8 hue:9+0. XV color balance is hardware dependent. .PP Note that it is possible to disable certain features using the remote control. A Host can take control of certain aspects e.g. offset or disallow closing the video monitor, except by host\-provided means. .SH "REPORTING BUGS" Report bugs at .br Website: .TP built from: scm\-v0.8.10 .IP compiled with: AVFORMAT=0x3a1464 AVCODEC=0x3a2364 AVUTIL:0x381664 configuration: [ LTC JACK\-SESSION POSIX\-MQueue OSC ] .br MTC/MIDI: [ jack\-midi alsa\-sequencer portmidi alsa\-raw ] .br Display(s): [ openGL Xv SDL X11/imlib2(RGBA32) ] .SH COPYRIGHT Copyright \(co GPL 2006\-2021 Robin Gareus .br Copyright \(co GPL 2006\-2011 Luis Garrido .br This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. xjadeo-0.8.10/doc/xjadeorc0000644000175000017500000000600612620454615012271 00000000000000# xjadeorc # # lines beginning with '#' or ';' are ignored. # # Every line in the configuration file is a KEY=VALUE pair. # the "KEY" is case insesitive, as are boolen values # (YES, NO). # # xjadeo load files if they exist from the following locations: # @sysconfdir@/xjadeorc (usually /etc/xjadeorc or /usr/local/etc/xjadeorc) # $HOME/.xjadeorc (old, deprecated) # $HOMEDRIVE$HOMEPATH\xjadeorc (windows only) # $HOMEDRIVE$HOMEPATH\Local Settings\xjadeorc (windows only) # (HOMEDRIVE$HOMEPATH is usually C:\Documents and Settings\Username\) # $XDM_CONFIG_HOME/xjadeo/xjadeorc (usually $HOME/.config/xjadeo/xjadeorc) # $HOME/Library/Preferences/ (OSX Only) # ./xjadeorc # #verbose=[yes|no] ; --verbose ;verbose=no #quiet=[yes|no] ; --quiet ;quiet=no #Desired refresh-rate of the video display in frames # per second. If this value is equal or less than zero, # xjadeo will use the FPS of the video-file as its update # frequency. #fps= ; --screen-fps ;fps=10.0 # select the video library/interface to use. #videomode=[auto|opengl|xv|imlib2|sdl|mac] ; --videomode ;videomode=auto # en/disable message queues (remote control) #mq=[on|off] ; --mq ;mq=off # absolute path to a TTF font file to be used for on-screen-display #fontfile= ; --ttf-file ;fontfile=/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf # specify whether to retain the aspect ratio of the movie when scaling # the window. (only Xv) #letterbox=[yes|no] ; --no-letterbox ;letterbox=yes # do not dispay xjadeo logo on screen on startup. #nosplash=[yes|no] ; --no-splash ;nosplash=no # select sync source # 0: none 1: jack 2: MTC 3: LTC # using MTC requires a valid 'midiid' setting #syncsource= ; --no-initial-sync, --ltc, --midi ;syncsource=1 # Enable interactive remote control mode # using standard I/O. This option implies non-verbose # and quiet as the terminal is used for interaction. #remotectl=[yes|no] ; --remote ;remotectl=no # Set-up IPC message queues for remote-control # Inter-Process Communication is used by `xjremote` # on OSX and other platforms that do not support # realtime message queues #ipc= ; --ipc ;ipc= ### # MIDI OPTIONS # (midi options will be ignored if midi is not available) # # --midi, --midi-driver : MTC settings # jack-midi: specify midi-port name to connect to or "" to not auto-connect. # alsa-seq: specify id to connect to. (-1: none) eg. -m ardour or -m 80 # portmidi: numeric-id; -1: autodetect, > -1 specifies a (input) midi port. # use '-v -m -1' to list midi-ports. # alsa-raw: specify device-name eg. -m hw:1,0 or -m 1 # # 'xjadeo -h' shows more information, 'xjadeo -V' lists available drivers. ;mididriver=jack-midi ;midiid=-1 # do not use MTC quarter frames for #midiclk=[yes|no] ; --no-midiclk (advanced, debug only) ;midiclk=no # -M : how to convert the MTC smpte to video smpte # 1: use MTC information (-v to check) - default # 2: force video file's fps # 3: convert/adjust framerates #midismpte=[1|2|3] ; --midiclk (advanced, debug only) ;midismpte=1 # END of xjadeorc xjadeo-0.8.10/ChangeLog0000644000175000017500000006171313775351443011571 000000000000002021-01-06 (0.8.10) Robin Gareus * add keyboard shortcuts for +/- 1 second offsets * tweak Windows installer 32/64bit reg-keys * fix Linux gcc10 builds * add support for macOS BigSur and Apple/ARM 2018-11-30 (0.8.9) Robin Gareus * prefer -pthread over -lpthread, fixes #18 * mainly a build-system, binary only update 2018-06-06 (0.8.8) Robin Gareus * use PortMidi default device (allow using portmidisetup) * fix loading fonts with non ASCII paths on Windows * allow verbose/debug logging on windows 2016-11-28 (0.8.7) Robin Gareus * fix release builds (mistake in 0.8.6) 2016-11-28 (0.8.6) Robin Gareus * explicitly request single-screen fullscreen on OSX * weak-link against libjack (binaries) * add NetBSD support 2015-11-26 (0.8.5) Robin Gareus * release openGL context * add compatibility for ffmpeg-2.9 * allow to compile on OSX/10.11 2015-09-09 (0.8.4) Robin Gareus * drop jack requirement for OSX 2015-09-09 (0.8.3) Robin Gareus * defined LARGEFILE64 for huge videos * fix OSX openGL init (El Capitan support) 2015-06-24 (0.8.2) Robin Gareus * fix CPU-hog after end of video * fix compilation with gcc5 * fix typos in manaul * various build-system updates (OSX, win) 2014-11-23 (0.8.1) Robin Gareus * fix OSX remote-control threading * X11 file open dialog * add recently-used files list * show splash screen when no file is open * various typo fixes 2014-08-22 (0.8.0) Robin Gareus * fix various typos * prepare build-stack for binary releases * re-add windows on-jack-shutdown handler * update app icon * fix some compiler warnings * request X11-focus after file drag/drop. 2014-08-15 (0.8.0-rc3) Robin Gareus * embed font-file in Linux statically linked binaries * improve overall consistency, interaction and display: - add "Offset" menu to document all keyboard shortcuts - "Close Video" menu entry - dedicated VTC OSD as alternative to frame-number - remove 'q' quit shortcut (use Esc or Ctrl-Q) - darker 'cross' for RGB[A] display (was already grey for YUV) * improve OSD text and optimize OSD re-exposure * Add File Time and Geometry Info OSD * update icons and splash image * fix various typos * re-use color-eq bars for progress-bar. * new example/test video * update xjadeorc documentation 2014-07-31 (0.8.0-rc2) Robin Gareus * update usage() help text * add --osc-doc option * rearrange remote-control commands and improve their doc. * re-do website and documentation * amend seek-index, create table for PTS * disable screensaver * overhaul windows UI (threading, draw while resize, fullscreen screen) * proper monospace for timecode + framenumber OSD * complete migration to 64 bit timecode * enable letterbox by default * update expose strategy and OSD + splash rendering 2014-07-27 (0.8.0-rc1) Robin Gareus * v0.8 pre-release * add openGL display (Linux, Win32, OSX) * fix RGBA32 (imlib2, openGL) blank frame alpha. * weak linking against jack (windows, OSX) * OSX: don't connect to jack by default. * support XDG_CONFIG_HOME * remove deprecated qjadeo import (xjinfo/mencoder) -> use ffmpeg * remove LASH support (use jack-session) * remove support for ancient ffmpeg < 0.5 * change -J semantics: don't connect to and later (remote) don't autostart jack * major cleanup of accumulated cruft. * rework fps detection (new ffmpeg API) * remove custom debian package -> use debian's *real* package. * fix memleak when connecting jack-midi ports * add override for sync and file changes (OSX menu, X11 DnD) * fix X11/GLX drag-drop * built-in X11/GLX context-menu * disable left/right mouse button scaling. * allow to start xjadeo without file (use DnD or Menu to load) * update seek-mechanism: create seek index table * remove -k option (no more seek-modes!) all indexed * -K option changed to specify max-continuous-keyframe limit. * add native windows application support (openGL) and context-menu * decrease max possible OSD font-size (to accommodate messages) 2014-07-13 (0.7.8) Robin Gareus * document -J option in --help * SDL window-position and on-top functionality (now SDL is compatible to xv and x11 video backends) * built script updates for statically linked binaries: - dynamically link to libX11/libxcb - add statically linked SDL (in case XVideo is n/a) - add fallback to imlib2/x11 output in case no hardware acceleration is available 2014-06-06 (0.7.7) Robin Gareus * add -J option (don't connect to jackd by default) * fix registry key for windows installer * updates for libav * Fix hardening for qjadeo, passed CPPFLAGS and LDFLAGS to qmake. (from mira) * Misspelling patch (also by Jaromír Mikeš) 2013-08-08 (0.7.6) Robin Gareus * fix DAR, SAR aspect ratio and odd-number of lines * detect jack-latency API independently from jack-sessio * fix some compiler warnings & work-around undocumented libav API change 2013-07-25 (0.7.5) Robin Gareus * fix UYVY422 colorspace (OSX default) stride * xjinfo - fix segfault if invalid file-name is given 2013-06-27 (0.7.4) Robin Gareus * fix for XVideo, YUV - force even number of pixels per line * OSX build w/header-pad for dynamic libs. 2013-06-16 (0.7.3) Robin Gareus * propagate unhandled keyboard events to remote ctrl * Add Czech translation by Pavel Fric * add missing remote.h source * fix windows installer * tentative seek-to-frame workarounds for OSX m4v. 2013-06-09 (0.7.2) Robin Gareus * rework X11 keyboard events (use xkeymap) * allow to forward keyboard events via remote-control * request settings-dump on exit (via remote-ctrl) 2013-05-31 (0.7.1) Robin Gareus * fix OSD font-spacing * add -T option to set OSD font * fix 32/64bit issue in xjinfo, allow to hardedn qjadeo * deprecated qjadeo GUI and xjinfo (use ffprobe instead) explicit --enable-qt-gui is requred to build either. * prepare moving repo & issue-tracker to github. * fix LTC jack-latency compensation * fix LTC 32 bit wrap-around (i386 only) * various build-system updates 2013-04-07 (0.7.0) Robin Gareus * fixes for clang/llvm compiler * SMPTE on-screen-display ignore offset * use libltc; deprecate libltcsmpte support * reset aspect-ratio when opening a new file * add /jadeo/cmd OSC command - full remote control * fix OSC concurrency problems. * graceful jack shutdown handling * reverse scroll-wheel zoom direction 2012-05-14 (0.6.4) Robin Gareus * pixel and display aspect ratio corrections done during rendering 2012-04-15 (0.6.3) Robin Gareus * update to new ffmpeg API * fixed some compiler warnings. 2011-09-26 (0.6.2) Robin Gareus * updated French translation Raphael Doursenaud) * fixed issue with remote-ctrl closing filedes on fork. 2011-07-13 (0.6.1) Robin Gareus * added qjadeo translations - thanks to Alexandre Prokoudine * JACK-Session support. * LTC+JACK - new jack latency API 2011-07-03 (0.6.0) Robin Gareus * Changes since 0.6.0-rc7: - fixed LTC parsing for other than 25fps - splash screen update (fixed duration) - added greek translation by Michales Michaloudes. - ffmpeg compat - build system updates (require libX, git version detection..) - version 0.6.0 * Changes since 0.4.X: - rewritten/updated manual - win32 support - qjadeo QT3 -> QT4 - added LTC sync source - disabled LASH (by default) soon to be removed in favor of JACK-Session - various autoconf updates - interaction overrides and remote-control features for ardour integration 2010-11-21 (0.6.0~rc7) Robin Gareus * release candidate v0.6 ... see git changelog 2010-11-12 (0.6.0~rc6) Robin Gareus * release candidate v0.6 ... see git changelog 2010-11-12 (0.6.0~rc5) Robin Gareus * release candidate v0.6 ... see git changelog 2010-11-11 (0.6.0~rc4) Robin Gareus * release candidate v0.6 ... see git changelog 2010-11-10 (0.6.0~rc3) Robin Gareus * release candidate v0.6 ... see git changelog 2010-11-10 (0.6.0~rc2) Robin Gareus * release candidate v0.6 ... see git changelog 2010-10-03 (0.6.0~rc1) Robin Gareus * release candidate v0.6 detailed changelog will be included here with 0.6.0 2010-10-01 (0.5.99) Robin Gareus * discard 0.5-branch (xj-five) opengl/vblank/shmem experiments 2010-08-03 (0.4.13) Robin Gareus * made portmidi optional - Thanks to Alex Stone. * added 'mididriver' config-file option * qjadeo - MTC menu: ALSA/JACK * qjadeo - added OSD box toggle * fixed remote-ctrl frame notification * use ffmpeg fps ratio calculation functions * fixed some spelling errors & text clarifications 2010-07-25 (0.4.12) Robin Gareus * allow to select midi-driver on runtime (JACK-MIDI, ALSA-sequencer, portmidi, ALSA-raw-midi). * fixed rounding error for non-integer framerates in the remote-ctrl SMPTE-text parser. (xjadeo+JACK or MTC is not affected; it's only relevant when useing 'seek ' instead of 'seek SMPTE' * fixed unresponsive "Preferences" Alert message (OSX) * added JACK-Midi to menu (OSX) 2010-07-15 (0.4.11) Robin Gareus * new defaults (update-fps = filefps, MTC-quater-frame: on) * added System-V IPC remote ctrl mode (for OSX) * add xjremote to OSX bundle * many small remote-ctl extensions for ardour3 integration * added JACK-MIDI for MTC 2010-05-23 (0.4.10) Robin Gareus * implemented file drop-frame timecode detection 2010-02-08 (0.4.9) Robin Gareus * re-implemented start-time parsing * re-added contrib folder to dist 2010-02-05 (0.4.8) Robin Gareus * fixed parsing video-start offset for m2v files 2009-04-04 (0.4.7) Robin Gareus * added basic OSC control support * cleaned up configure.ac - ffmpeg-header include files * framecropping (for sahra's installation) 2009-02-02 (0.4.6) Robin Gareus * updated URLs in doc * minor fixes for ffmpeg API changes 2008-07-28 (0.4.5) Robin Gareus * xjadeo now leaves XV-colorkey untouched. * changed include paths for ffmpeg. * fixed a compiler warnings for gcc-4.3.1 2008-04-01 (0.4.4) Robin Gareus * updates for ffmpeg-svn compat (ffmpeg-svn 12642,12665) 2008-03-20 (0.4.3) Robin Gareus * fixed backwards compat ffmpeg w/o swscale * fixed segfault using remote-mode w/o video-file (swscale) 2007-09-12 (0.4.2) Robin Gareus * added -s --fullscreen command line option * removed SDL video mode * obsoleted imlib1 * fixed automake variable substitution * added ffmpeg swscale support 2007-05-07 (0.4.1) Robin Gareus * default black-YUV frame * minor updates in the manual. * preparing for 0.5 development branch. * fixed contrib configure bug. 2007-02-23 (0.4.0) Robin Gareus * added call to jack_activate * fixed segfault when movie is smaller than splashscreen (neg. x-offset) * disabled splash-screen when it's larger than current movie anyway. * added POSIX sys includes * added -lavutil -lmp3lame to auto-detected ffmpeg configuration. * disabled PPC duration workaround (only ffmpeg-0.4.9 - LIBAVFORMAT_BUILD 4616) * merged-in French qjadeo translation - thanks to R. Doursenaud * fixed av_q2d for LIBAVFORMAT_BUILD <= 4623 2006-12-02 (0.4.0~rc3) Robin Gareus * fixed fontfile= config option * fixed build --enable-contrib --enable-midi=off 2006-12-01 (0.4.0~rc2) Robin Gareus * fixed version to comply with RPM '-' -> '.' -> 0.4.0.rc2 * added contrib/tsmm - time stamp movie maker * added autogen.sh to debian/rules 2006-11-30 (0.4.0~rc1) Robin Gareus * bump version to 0.4.0-rc1 2006-11-30 (0.3.29-3) Robin Gareus * qjadeo - round update fps * xjadeo remote commands - 'window size' -> 'window resize' - 'window fixaspect' -> RMB 2006-11-30 (0.3.29-2) Robin Gareus * debian control imlib2-dev -> libimlib2-dev * xjadeo new remote command - 'window mouse [on|off|toggle]' 2006-11-29 (0.3.29-1) Robin Gareus * updated xjinfo + dtd - rational values - added sample aspect ratio - updated information fields (title,author,..) - xml-version 0.2 2006-11-28 (0.3.29) Robin Gareus * qjadeo disable frame notification on disconnect, terminate xjadeo when disconnecting. * xjadeo remote commands: 'notify off' alias for 'notify disable' 'exit' - print warning that xjadeo is not xjremote * fixed contrib build * added xml-preamble and DOCTYPE to xjinfo 2006-11-27 (0.3.28) Robin Gareus * fixed typos * begin to clean up source tree for 0.4 * removed pts/dts calc for ffmpeg_seek LIBAVFORMAT_BUILD < 4617 * new seek code only for AVFORMAT_BUILD > 2629 * missing manual page xjinfo.1 2006-11-27 x42 *** CHANGELOG STYLE CHANGE *** git log is the preferred method. 2006-11-25 x42 - manual and xjadeorc typo - xjadeo usage() and cosmetic code changes - preliminary jack_position_t->audio_frames_per_video_frame support. 2006-11-24 x42 - splash screen + config option - '-A' --avverbose : print ffmpeg messages. - spec.in updated. - install icons and menu entry - mpeg dts/pts timestamps - --genpts, -P (ffmpeg option) - --ignorefileoffset, -I for splitted avi/vob files. * version v0.3.27 2006-11-22 x42 - XV (hardware) color eq - imlib2 (software) color eq - OSD improvements - changed qjadeo environement variable from XJADEO to XJREMOTE. - reduced xjremote timeout 5sec -> 0.5 sec - qjadeo extra mencoder options * version v0.3.26 2006-11-21 x42 - fixed xjremote, xjadeo path detection. - xjinfo version '-V' 2006-11-21 x42 - xjinfo - fixed BINDIR, SYSCFGFIR '/' suffix - qtjadeo file-info via xjinfo - version via svnversion - qjadeo icons + seek menu * version v0.3.24 2006-11-20 x42 - qt-gui removed debug, added QMessageBoxes, qjadeo preferences dialog update. - xjadeo: 'l' key to toggle letterbox - letterbox mode for imlib2 - xjadeo DnD fix * version v0.3.23 2006-11-19 x42 - qt-gui improvements (mencoder dialog, prefs) 2006-11-18 x42 - LASH remember window position - key bindings to scale video output 2006-11-17 x42 - change between all window modes: x11+imlib re-init/retain - added keystrokes to control OSD and offset * version v0.3.22 2006-11-16 x42 - properly convert escaped DnD text - portmidi quarter frames support 2006-11-15 x42 - SMPTE / MIDI TC drop frames code - alsa-midi: parse quarter frames (-C) - added midi options to cfgfile - removed command 'midi autoconnect' and added 'midi reconnect' - crudly convert '%20' to whitespaces when receiving drag data. - added '-P' --noping option to xjremote. 2006-11-14 rgareus - preparing for proper midi+smpte conversion. - added debian files to SVN. 2006-11-14 rgareus - qjadeo - sync-menu radio buttons - position slider (sync off mode) - query xjadeo settings (OSD, sync) on startup - renamed fullscreen -> maximize - xjadeo: get osdcfg, get syncsource remote commands - Xv letterbox (-b, --leterbox, "window letterbox [on|off]") - use file-fps as delay when (0 >= delay ) * version v0.3.21 2006-11-13 rgareus - fixed drag/drop accept area. - catch signals + clean up 2006-11-13 rgareus - `ffmpeg-config` and other configure.ac updates. - lash=[yes|no] and mq=[yes|no] config file options. - a little more documentation. * version v0.3.20 2006-11-12 rgareus - moved icons - completed lash support - unlink stale message queues - added x86_64*) ARCH=amd64 ;; (thanks to Detlef Reichelt & the PackMan-Team) - created xjremote man page. - message queues option becomes -Q - unlink option for xjremote 2006-11-11 rgareus - implemented message queues: xjremote! - 'remote=yes|no' config file option - -L, --nolash - more variables stored in lash config. - preliminary qjadeo patch -> xjremote. 2006-11-10 rgareus - icon - fixed qt BINDIR define (again) - prepared remote stdio replacement: mqueues prereq. for proper lash + gui 2006-11-09 rgareus - display_x11 cleanup part one. - docs description update - seek timeout. - re-indented sources (!) 2006-11-09 rgareus - on LASH resume -> ignore '-R' remote-mode - imlib2 - RGB24+RGBA32 - dropped gdk/gtk - revamped configure.ac - fixed continuous seeking (was in debug mode) 2006-11-07 rgareus - preliminary LASH support - so far only command line args. - preliminary Xv/x11 dnd 2006-11-06 rgareus - imlib2 support 2006-11-05 rgareus - added support for LIBAVCODEC_BUILD 4646 (ffmpeg-0.4.9-pre1) old seek code. 2006-11-04 rgareus - changed default seek behaviour to SEEK_ANY -k -> seek only to keyframes -K -> continuously decode all frames (starting @ keyframe) - config-file option seek=any|key|cont - removed hardcoded list of font files. 2006-10-28 rgareus - made -V a little more verbose. and -q a little more quiet :D 2006-10-28 rgareus - changed audioframe -> videoframe conversion back to floor() - updated framerate detection. - re-indented seek code. and changed -K, -k behaviour (no continuous seeks) - fixed ffmpeg packet allocation - XV-videomode only: - added always on top feature. ( '-a' ; press 'a' on widow ; no remote command for that yet) - added support to hide [mouse] cursor (press 'm' ) 2006-08-27 rgareus - added simple Extended Window Manager Hints(EWMH) fullscreen support for XV videomode. 2006-08-12 rgareus - av_q2d - fix to compile with older ffmpeg before LIBAVCODEC_BUILD 4753 2006-06-25 rgareus - updated debian-marillat to debian-multimedia in doc 2006-06-16 rgareus - updated contrib README and encode.sh 2006-06-13 rgareus - added jadio to contrib folder. 2006-06-12 rgareus - smpte support for non-integer fps - '-F ' allow to override fps info of file - '-K' -> 'old' seek to any frame mode - messed up avseek - added support for multi-packet frames. urgent TODO: remove all the nasty goto's from the initial example code :-X now that seeking is 'known to work' rewrite the whole darn thing and fix the dts/pts issues. This release is better than the version from June 06 as it fixes a possible endless (until EOF) frame seek issue... 2006-06-06 rgareus - when seeking to non key frames, the video can be decoded starting from the prev keyframe. - removed LIBAVCODEC < 4622 backwards seek compat. - new valid seekmodes (remote ctrl) are 'key', 'any' and 'continuous' (default). - OSD Frame is now the displayed frame, while the SMPTE still corresponds to jack time. - XV,SDL (YUV): added support for video image strides other than XV pitches. eg. if video width is not a multiple of 8 - prev. versions of xjadeo either crash, or display wrong colors... * version v0.3.13 2006-05-30 rgareus - proper YV12 and I420 support for XV. - SDL 1.2.9 or 1.1.6 2006-05-24 rgareus - added simple resource config parser. 2006-05-21 rgareus - minor fixes on the build environement for `make dist` (contrib, qt-gui sources, ..) - fixed some typos in yesterdays Makefile.am - never ending overkilling docbook * version v0.3.12 2006-05-20 rgareus - added docbook xslt and doc/Makefile... - work in progres on the manual. - changed Audioframe to videoframe, smpte converstion from floor to rint transport increments in steps of audiobuffer-size so we get proper results as audiobuffer-size != 1920 (48k->PAL) or 1601 (48k->NTSC) 2006-04-28 rgareus - fixed typo: since the 04/23 patches xjadeo was displaying the previous instead of the current frame! 2006-27-09 Luis Garrido - Added OSD font, frame and smpte commands to qjadeo menu. - OSD font is stored as a qjadeo preference. - Some docbook fixing. - Revamped qjadeo layout. 2006-04-23 rgareus - some remote function help typos - parsing videomode integer and text - notify [loop|frame] - more work in progress documentation. * version v0.3.11 2006-04-22 rgareus - added contrib folder - implememted 'list videomodes' - disabled 'get windowpos' - configure.ac: added contrib/cli-remote/Makefile to AC_CONFIG_FILES Note: contrib will not be built as it is not a subdir in Makefile.am - remote command return status now identifies physical units. added doc to the source: remote.c - changed return value of some xapi function. only MINOR numbers have been changed (rv: = MAJOR*100 + MINOR) * xjadeo v0.3.10 2006-04-17 rgareus - amidi seqencer instead of alsa rawmidi - remote cmd midi status fixed. - cmd arg. added "-x list" as alias for "-x -1" 2006-04-16 rgareus - configure.ac: --disable-portmidi -> 'force to' use alsamidi if avaliable - midi.c: added MTC sysex parser for alsamidi. - main.c: xjadeo new command line option -i , --info - xjadeo: fixed -t option. (exit instead of segfault when file not found :) * xjadeo v0.3.9 2006-04-11 rgareus many minor typos and fixes. fixed midi autodetection in configure.ac added alsa midi support as fallback if portmidi is not found * xjadeo v0.3.8 2006-04-11 rgareus * configure.ac: renamed options for consistancy. new defaults: autodetect all feat. only gtk is disabled by default added -DTTFFONTFILE comment. no configure option yet. * xjadeo: - --vo [|]. also swapped --vo option numbering.. for: - fallback video mode auto detection. - implemented rudimentary keyboard event support (for all display modes) - key quits xjadeo (all display modes) - --midifps [MTC|Video|resample] option and 'get/set midisync' remote cmd. - initialize midi just before event loop -> prevent midi buffer overflow - added alsamidi code. (works but not integrated in xjadeo & build system) - xapi 'get/set seekmode': seek to keyframes only. - minor fixes. 2006-04-09 Luis Garrido - configure.ac: fixed Qt autoconf test so Qt4 debug lib is not required. - src/qt-gui/Makefile.am: fixed typo. 2006-04-08 Luis Garrido - Fixed qjadeo makefile so the qt4 compilation keeps a backup of the qt3 version. 2006-04-08 Luis Garrido - Fixed broken autogen.sh (after removal of m4 subdir) - Fixed --disable-qtgui option. 2006-04-08 Luis Garrido - Autotoolification of qjadeo for Qt4. Now qjadeo takes the xjadeo binary from the environment variable XJADEO or from the install path. 2006-04-08 rgareus split xjadeo.c -> main.c remote.c - and loads of extern's :( xjadeo v0.3.7 2006-04-07 rgareus fixed b0rken XV (typo in display.c) added smpte parser and output (via remote and OSD) added MTC-fps to video-fps conversion code. 2006-04-07 rgareus splitted the display.c into sdl, gtk and X11 source files quick fixed configure.ac (qmake on debian) 2006-04-07 rgareus fixed HAVE_GTK and HAVE_SDL #defines in display.c 2006-04-06 Luis Garrido - Autotoolification of qjadeo for Qt3. Info taken from qjackctl and http://www.8ung.at/leising/autoconf/qt_qmake_autoconf_automake2.html 2006-04-06 Luis Garrido - Implementation of the maintainer-clean target. 2006-04-06 Luis Garrido - Reorganization of source tree. 2005-11-07 Luis Garrido - Fixed avseekflags for compatibility with LIBAVFORMAT_BUILD <= 4622. Thanks to Geoff Beasley for his cooperation. 2005-11-03 Luis Garrido - Edited NEWS, xjadeo.1, README 2005-11-03 rgareus - dynamic jack name. allowing multiple instances of xjadeo 2005-10-31 rgareus - added -o --offset time offset. in video-frames 2005-10-30 rgareus - new build environement, that checks dep. libraries. - parse command line options - fixes to work with newer Version of libffmpeg. * xjadeo v0.1.1 2005-02-02 luis * xjadeo v0.1.0 xjadeo-0.8.10/missing0000755000175000017500000001533613544141530011402 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2018 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 # 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. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... 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 Supported PROGRAM values: 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 $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # 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 perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://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 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: xjadeo-0.8.10/depcomp0000755000175000017500000005602013544141530011353 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2018 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, 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 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 # 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 # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # 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 gcc3) ## 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. ## 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; 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). 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 gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # 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. ## 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. ## 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. 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. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # 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 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" 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 # dependency line. 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 ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else 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 # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. 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 $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi 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 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" ;; ## 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 '\' : # 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 if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. 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" 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. 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 ;; 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 # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # 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. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$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" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift 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/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$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 ;; cpp) # Important note: in order to support this mode, a compiler *must* # 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 # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -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" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # 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 "$@" "$arg" shift shift ;; esac done "$@" -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" 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 "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: xjadeo-0.8.10/config.h.in0000644000175000017500000001453213775352470012040 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define as 1 to enable ALSA-raw midi (linux,netbsd) */ #undef ALSA_RAW_MIDI /* Define as 1 to enable ALSA sequencer (linux,netbsd) */ #undef ALSA_SEQ_MIDI /* errors in the resource config file only result in a warning message instead of forcing xjadeo to exit. */ #undef CFG_WARN_ONLY /* enable XV and imlib2 color equalizer */ #undef COLOREQ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* enable frame cropping */ #undef CROPIMG /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* enable xjadeo x11/glx drag and drop */ #undef DND /* paint a X on screen when unable to decode or display a frame. */ #undef DRAW_CROSS /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_ALSA_ASOUNDLIB_H /* Have FreeType2 include files */ #undef HAVE_FREETYPE_H /* Use freetype for OSD */ #undef HAVE_FT /* Define to enable openGL (linux,netbsd,osx,win) */ #undef HAVE_GL /* Video Output: plain old imlib2 (linux,netbsd) */ #undef HAVE_IMLIB2 /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define as 1 if you have IPC message queues (system-V) */ #undef HAVE_IPCMSG /* Define as 1 to enable JACK-MIDI */ #undef HAVE_JACKMIDI /* Define to 1 if you have the header file. */ #undef HAVE_JACK_MIDIPORT_H /* Define to 1 if you have the header file. */ #undef HAVE_JACK_SESSION_H /* experimental code to use jack_transport fps, jack-svn >= r591 */ #undef HAVE_JACK_VIDEO /* Define as 1 if you have the loblo OSC library */ #undef HAVE_LIBLO /* Video Output: XVideo support (linux,netbsd) */ #undef HAVE_LIBXV /* Define as 1 if you have libltc - http://github.com/x42/libltc */ #undef HAVE_LTC /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* general MIDI (MTC) support */ #undef HAVE_MIDI /* Define as 1 if you have POSIX message queues (libc, librt) */ #undef HAVE_MQ /* Define as 1 to enable the portmidi driver (win,osx) */ #undef HAVE_PORTMIDI /* Define to 1 if you have the header file. */ #undef HAVE_PORTMIDI_H /* Define to 1 if you have the header file. */ #undef HAVE_PORTTIME_H /* Define to 1 if you have the header file. */ #undef HAVE_PTHREAD_H /* Define as 1 if you have the SDL toolkit (linux,netbsd,osx,win) */ #undef HAVE_SDL /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IPC_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MSG_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_X11_XLIB_H /* Define for RGBA32 imlib2 (not RGB24) */ #undef IMLIB2RGBA /* add JACK Session support */ #undef JACK_SESSION /* Define to 1 if `major', `minor', and `makedev' are declared in . */ #undef MAJOR_IN_MKDEV /* Define to 1 if `major', `minor', and `makedev' are declared in . */ #undef MAJOR_IN_SYSMACROS /* max length of a remote control line. */ #undef MQLEN /* use JACKs new latency API (ltc) */ #undef NEW_JACK_LATENCY_API /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* 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 /* GNU/Linux version */ #undef PLATFORM_LINUX /* NetBSD version */ #undef PLATFORM_NETBSD /* Mac OSX version */ #undef PLATFORM_OSX /* Windows version */ #undef PLATFORM_WINDOWS /* The size of `double', as computed by sizeof. */ #undef SIZEOF_DOUBLE /* The size of `float', as computed by sizeof. */ #undef SIZEOF_FLOAT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `unsigned long', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_LONG /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* enable dynamic time scaling */ #undef TIMEMAP /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* absolute path to truetype default OSD font file */ #undef TTFFONTFILE /* Version number of package */ #undef VERSION /* enable xjadeo windows context-menu */ #undef WINMENU /* 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 /* enable xjadeo x11/glx context menu */ #undef XDLG /* enable xjadeo x11 file browser */ #undef XFIB /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `unsigned int' if does not define. */ #undef size_t xjadeo-0.8.10/config.guess0000755000175000017500000012637313544141530012327 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-24' # 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 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 # 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2018 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." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' 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 "$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 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > "$dummy.c" ; for c in cc gcc c89 c99 ; do if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown 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" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl fi ;; 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 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 # compatibility and a consistent mechanism for selecting the # object file format. # # 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=`(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) 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 -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) 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 # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) 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}${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 ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 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}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. 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 ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") 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`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *: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:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) 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: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 # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" 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 case "`/bin/arch`" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # 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" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # 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 ] || \ [ "$TARGET_BINARY_INTERFACE"x = x ] then echo m88k-dg-dgux"$UNAME_RELEASE" else echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *: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/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 echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` case "$UNAME_MACHINE" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 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 fi if [ "$HP_ARCH" = "" ]; then eval "$set_cc_for_build" 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); } EOF (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 ] then eval "$set_cc_for_build" # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) 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 ;; 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}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) echo "$UNAME_MACHINE"-pc-pw32 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 ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system 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 "[: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 "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) 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:*:* | mips64:Linux:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; 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 PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; 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-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; 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:*:*) if objdump -f /bin/sh | grep -q elf32-x86-64; then echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 else echo "$UNAME_MACHINE"-pc-linux-"$LIBC" fi exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" 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 # sysname and nodename. 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, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv32 fi 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 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 ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' 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; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /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 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi 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 echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; 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 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux"$UNAME_RELEASE" exit ;; 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 ;; *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown 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 # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc 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 UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "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 UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) 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` case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&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` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xjadeo-0.8.10/README0000644000175000017500000000233112620454615010657 00000000000000xjadeo - jack video monitor =========================== xjadeo is a simple video player that gets sync from jack. Please refer to the documentation in the doc folder for any details, or visit http://xjadeo.sf.net/ Basic build instructions ------------------------ git clone git://github.com/x42/xjadeo.git ./autogen.sh ./configure make sudo make install Build Dependencies ------------------ Development packages for the following software must be available to compile xjadeo: * ffmpeg (from ffmpeg.org at least version 1.0) * jack-audio-connection-kit (jackaudio.org) * libX11 (on Linux Only) * glu (mandatory for OSX and Windows only, but recommended on GNU/Linux) Recommended optional dependencies: * glu (opengl display) * freetype2 (on-screen-display) * asound (ALSA MIDI [MTC] support) * portmidi, porttime (windows/OSX MIDI [MTC] support) * libltc (LTC support) * liblo (OSC remote control support) Options: * libxv (on Linux, X-video acceleration) * imlib2 (Linux RGB display) * SDL (meant for windows only, really - but works on Linux, OSX too) Deprecated: * QT3 or QT4 (for external remote-control GUI) Copyright (C) 2005 - 2014 GPLv2 Luis Garrido Robin Gareus xjadeo-0.8.10/AUTHORS0000644000175000017500000000025712620454615011054 00000000000000Luis Garrido Robin Gareus Translations: * French: R. Doursenaud * Russian: Alexandre Prokoudine * Czech: Pavel Fric xjadeo-0.8.10/COPYING0000644000175000017500000004311012620454615011032 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. xjadeo-0.8.10/xjadeo.lsm.in0000644000175000017500000000205612620454615012377 00000000000000Begin4 Title: xjadeo Version: @VERSION@ Entered-date: @ISODATE@ Description: jack video monitor xjadeo is a software video player that displays a video-clip in sync with an external time source (MTC, LTC, JACK-transport). It has applications in soundtrack composition, video monitoring or any task that requires to associate movie frames with audio events. For instance when a JACK-client (like Muse, Rosegarden or Ardour) acts as timebase master, xjadeo will display the video in sync. xjadeo supports a multitude of video file formats, display libraries and sync sources. It includes an optional GUI that provides file-history and allows to modify settings of a running instance. see http://xjadeo.sourceforge.net/ for further information. @configure_input@ Author: robin@gareus.org Keywords: jack video monitor Maintained-by: robin@gareus.org Primary-site: http://xjadeo.sourceforge.net/ 212K xjadeo-@VERSION@.tar.gz 500 xjadeo.lsm Alternate-site: https://github.com/x42/xjadeo Original-site: Platforms: any Copying-policy: GPL v2 End xjadeo-0.8.10/compile0000755000175000017500000001632713544141530011362 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2018 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 | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.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 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: xjadeo-0.8.10/configure.ac0000644000175000017500000004657113775351454012314 00000000000000dnl Process this file with autoconf to produce a configure script. AC_INIT(xjadeo.c) AC_CONFIG_SRCDIR(src/xjadeo/xjadeo.c) AC_CANONICAL_HOST AC_CANONICAL_TARGET VERSION_MAJOR=0 VERSION_MINOR=8 VERSION_SUB=10 AM_INIT_AUTOMAKE(xjadeo, [${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_SUB}]) AM_CONFIG_HEADER(config.h) AC_ARG_ENABLE(xv, AC_HELP_STRING([--disable-xv], [Disable Xvideo extension (default:auto)])) AC_ARG_ENABLE(opengl, AC_HELP_STRING([--disable-opengl], [Disable OpenGL display (default:auto)])) AC_ARG_ENABLE(imlib2, AC_HELP_STRING([--disable-imlib2], [Disable use of imlib2 for display (default:auto)])) AC_ARG_ENABLE(sdl, AC_HELP_STRING([--disable-sdl], [Disable use of SDL display (default:auto)])) AC_ARG_ENABLE(ft, AC_HELP_STRING([--disable-ft], [Disable freetype On-Screen.Display support (default:auto)])) AC_ARG_WITH(fontfile, AS_HELP_STRING([--with-fontfile=file.ttf], [specify a path to a truetype font file to be used as default OSD font.]), fontfile="$withval", fontfile="") AC_ARG_ENABLE(jacksession, AC_HELP_STRING([--disable-jacksession], [disable JACK-Session support (default:auto)])) AC_ARG_ENABLE(mq, AC_HELP_STRING([--disable-mq], [disable POSIX message-queue remote control (default:auto)])) AC_ARG_ENABLE(ipc, AC_HELP_STRING([--disable-ipc], [disable IPC message-queue remote control (default:auto)])) AC_ARG_ENABLE(osc, AC_HELP_STRING([--disable-osc], [disable OSC remote control support (default:auto)])) AC_ARG_ENABLE(ltc, AC_HELP_STRING([--disable-ltc], [disable LTC sync support (default:auto)])) AC_ARG_ENABLE(midi, AC_HELP_STRING([--disable-midi], [Do not build any of the MIDI drivers (default:on)])) AC_ARG_ENABLE(portmidi, AC_HELP_STRING([--disable-portmidi], [disable portmidi support (default:auto)])) AC_ARG_ENABLE(alsamidi, AC_HELP_STRING([--disable-alsamidi], [disable alsamidi support (default:auto)])) AC_ARG_ENABLE(embed-font, AC_HELP_STRING([--enable-embed-font], [include OnScreenDisplay font in binary (default: off)])) AC_ARG_ENABLE(qtgui, AC_HELP_STRING([--enable-qtgui],[Build the Qt GUI controller (default:off)])) AC_ARG_WITH(qt4prefix, AS_HELP_STRING([--with-qt4prefix], [prefix for Qt4 installation, e.g. "/usr/lib/qt4"]), qt4prefix="$withval", qt4prefix="") AC_ARG_WITH(qmakeargs, AS_HELP_STRING([--with-qmakeargs], [specify custom qmake arguments]), qmakeargs="$withval", qmakeargs="") AC_ARG_ENABLE(contrib, AC_HELP_STRING([--enable-contrib], [Compile and install code in contrib folder (default:off)])) AC_ARG_ENABLE(timescale, AC_HELP_STRING([--enable-timescale], [enable time-mapping/loop-playback support - experimental - DO NOT USE])) AC_ARG_ENABLE(framecrop, AC_HELP_STRING([--enable-framecrop], [hardcoded frame cropping - experimental - DO NOT USE])) AC_ARG_ENABLE(weakjack, AC_HELP_STRING([--enable-weakjack], [load libjack at runtime (weak linking -- always enabled on OSX and Windows)])) LIBPREF=lib LIBSUF=.a case $target_os in *darwin*) AC_MSG_NOTICE([TARGET: OSX]) PM_OS=mac AC_DEFINE([PLATFORM_OSX], [], [Mac OSX version]) PLATFORM_OSX=1 LDFLAGS="$LDFLAGS -lz -lbz2" GL_LIBS="-framework Cocoa -framework OpenGL" AC_DEFINE(HAVE_GL) HAVE_GL=1 AM_CONDITIONAL([TARGET_OSX], true) AM_CONDITIONAL([TARGET_LINUX], false) AM_CONDITIONAL([TARGET_NETBSD], false) AM_CONDITIONAL([TARGET_WIN32], false) if test $(sw_vers -productVersion | cut -d '.' -f 1) -lt 11 -a $(sw_vers -productVersion | cut -d '.' -f 2) -lt 15; then LDFLAGS="$LDFLAGS -framework Carbon -framework Quicktime" fi dnl 2006/11/13 : 32 bit RGBA is known not to work on OSX ffmpeg+imlib2 dnl IMLIB2RGBA ;; *linux*|gnu*|k*bsd*-gnu) AC_DEFINE([PLATFORM_LINUX], [], [GNU/Linux version]) PLATFORM_LINUX=1 AC_MSG_NOTICE([TARGET: LINUX]) PM_OS="linux"; AC_DEFINE([IMLIB2RGBA], [], [use native RGB32 ffmpeg -> imlib.]) AM_CONDITIONAL([TARGET_OSX], false) AM_CONDITIONAL([TARGET_LINUX], true) AM_CONDITIONAL([TARGET_NETBSD], false) AM_CONDITIONAL([TARGET_WIN32], false) LIBS="$LIBS -L/usr/X11R6/lib" ;; *netbsd*) AC_DEFINE([PLATFORM_NETBSD], [], [NetBSD version]) PLATFORM_NETBSD=1 AC_MSG_NOTICE([TARGET: NETBSD]) PM_OS="netbsd"; AC_DEFINE([IMLIB2RGBA], [], [use native RGB32 ffmpeg -> imlib.]) AM_CONDITIONAL([TARGET_OSX], false) AM_CONDITIONAL([TARGET_LINUX], false) AM_CONDITIONAL([TARGET_NETBSD], true) AM_CONDITIONAL([TARGET_WIN32], false) ;; *mingw32*|*win*) AC_MSG_NOTICE([TARGET: WINDOWS]) PM_OS=win AC_DEFINE([PLATFORM_WINDOWS], [], [Windows version]) PLATFORM_WINDOWS=1 LIBSUF=.dll EXESUF=.exe GL_LIBS="-lopengl32 -lglu32 -lgdi32" AC_DEFINE(HAVE_GL) HAVE_GL=1 AM_CONDITIONAL([TARGET_OSX], false) AM_CONDITIONAL([TARGET_LINUX], false) AM_CONDITIONAL([TARGET_NETBSD], false) AM_CONDITIONAL([TARGET_WIN32], true) AC_CHECK_TOOL(WINDRES, windres, false) if test "$WINDRES" = "false"; then AC_MSG_ERROR([Could not find an implementation of windres in PATH.]) fi ;; *) AC_MSG_WARN([*** unknown target OS ***]) ;; esac if test "x$enable_embed_font" = "xyes"; then AM_CONDITIONAL([EMBED_FONT], true) else AM_CONDITIONAL([EMBED_FONT], false) fi dnl AC_SUBST(DISPLAY_OPENGL) AC_SUBST(VERSION) dnl ISODATE=`date +%Y-%m-%d` dnl AC_SUBST(ISODATE) dnl Checks for compiler(s). AC_PROG_INSTALL AC_PROG_CC AM_PROG_CC_C_O AC_PROG_OBJC AC_C_CONST AC_C_BIGENDIAN dnl Standard Checks AC_HEADER_STDC AC_CHECK_SIZEOF(float) AC_CHECK_SIZEOF(double) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(unsigned long) AC_CHECK_HEADERS(time.h string.h) dnl Checks for libraries. dnl video output AH_TEMPLATE([HAVE_GL], [Define to enable openGL (linux,netbsd,osx,win)]) AH_TEMPLATE([HAVE_SDL], [Define as 1 if you have the SDL toolkit (linux,netbsd,osx,win)]) AH_TEMPLATE([HAVE_LIBXV], [Video Output: XVideo support (linux,netbsd)]) AH_TEMPLATE([HAVE_IMLIB2], [Video Output: plain old imlib2 (linux,netbsd)]) AH_TEMPLATE([IMLIB2RGBA], [Define for RGBA32 imlib2 (not RGB24)]) dnl MTC sync AH_TEMPLATE([HAVE_MIDI], [general MIDI (MTC) support]) AH_TEMPLATE([HAVE_JACKMIDI], [Define as 1 to enable JACK-MIDI]) AH_TEMPLATE([HAVE_PORTMIDI], [Define as 1 to enable the portmidi driver (win,osx)]) AH_TEMPLATE([ALSA_SEQ_MIDI], [Define as 1 to enable ALSA sequencer (linux,netbsd)]) AH_TEMPLATE([ALSA_RAW_MIDI], [Define as 1 to enable ALSA-raw midi (linux,netbsd)]) dnl LTC sync AH_TEMPLATE([HAVE_LTC], [Define as 1 if you have libltc - http://github.com/x42/libltc ]) dnl jack options AH_TEMPLATE([JACK_SESSION], [add JACK Session support]) AH_TEMPLATE([HAVE_JACK_VIDEO], [experimental code to use jack_transport fps, jack-svn >= r591]) AH_TEMPLATE([NEW_JACK_LATENCY_API], [use JACKs new latency API (ltc)]) dnl remote control AH_TEMPLATE([HAVE_MQ], [Define as 1 if you have POSIX message queues (libc, librt)]) AH_TEMPLATE([HAVE_IPCMSG], [Define as 1 if you have IPC message queues (system-V)]) AH_TEMPLATE([HAVE_LIBLO], [Define as 1 if you have the loblo OSC library]) AH_TEMPLATE([TTFFONTFILE], [absolute path to truetype default OSD font file]) dnl misc AH_TEMPLATE([CFG_WARN_ONLY], [errors in the resource config file only result in a warning message instead of forcing xjadeo to exit.]) AH_TEMPLATE([DND], [enable xjadeo x11/glx drag and drop]) AH_TEMPLATE([XDLG], [enable xjadeo x11/glx context menu]) AH_TEMPLATE([XFIB], [enable xjadeo x11 file browser]) AH_TEMPLATE([COLOREQ], [enable XV and imlib2 color equalizer]) AH_TEMPLATE([TIMEMAP], [enable dynamic time scaling]) AH_TEMPLATE([CROPIMG], [enable frame cropping]) AH_TEMPLATE([DRAW_CROSS], [paint a X on screen when unable to decode or display a frame.]) AH_TEMPLATE([WINMENU], [enable xjadeo windows context-menu]) dnl fixed configuration AC_DEFINE(CFG_WARN_ONLY) AC_DEFINE(DND) AC_DEFINE(WINMENU) AC_DEFINE(XDLG) AC_DEFINE(XFIB) AC_DEFINE(DRAW_CROSS) AC_DEFINE(COLOREQ) if test "x$enable_timescale" != "xyes"; then AC_DEFINE(TIMEMAP) fi if test "x$enable_framecrop" = "xyes"; then AC_DEFINE(CROPIMG) fi AC_HEADER_MAJOR AC_FUNC_ALLOCA AC_STRUCT_TM dnl --------------------------------------------------------------------------- dnl JACK first. PKG_CHECK_MODULES(JACK, jack, , AC_MSG_ERROR([Could not fine JACK audio development kit - jackaudio.org.])) AC_SUBST(JACK_CFLAGS) AC_SUBST(JACK_LIBS) if test "x$enable_jacksession" != "xno"; then tmp_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $JACK_CFLAGS" AC_CHECK_HEADERS([jack/session.h], AC_DEFINE(JACK_SESSION) JACK_SESSION=1) CPPFLAGS="$tmp_CPPFLAGS" fi tmp_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $JACK_LDFLAGS" AC_CHECK_LIB(jack, jack_port_get_latency_range, [AC_DEFINE(NEW_JACK_LATENCY_API) NEW_JACK_LATENCY_API=1]) LDFLAGS="$tmp_LDFLAGS" dnl --------------------------------------------------------------------------- dnl Check for ffmpeg: avformat/avcodec PKG_CHECK_MODULES(FFMPEG, libavformat libavcodec libavutil libswscale, , AC_MSG_ERROR([ Could not find ffmpeg. Please set PKG_CONFIG_PATH to where FFMPEG installed its pkg files. If you have the choice prefer ffmpeg.org over libav.org. Both are supported but xjadeo is developed and tested with the former. ])) AC_SUBST(FFMPEG_CFLAGS) AC_SUBST(FFMPEG_LIBS) dnl --------------------------------------------------------------------------- dnl remote control.. MQ_LIBS="" if test "x$enable_mq" != "xno"; then AC_CHECK_LIB(rt, mq_open, [AC_DEFINE(HAVE_MQ) MQ_LIBS="-lrt" HAVE_MQ=1]) fi AC_SUBST(MQ_LIBS) AC_DEFINE(MQLEN, 512, [ max length of a remote control line. ]) dnl prefer POSIX RT mqueue over IPC.. if test "x$enable_ipc" != "xno"; then if test -z "$HAVE_MQ"; then AC_CHECK_HEADERS([sys/ipc.h sys/msg.h] , AC_DEFINE(HAVE_IPCMSG) HAVE_IPCMSG=1 ) fi fi AS_IF([test "x$enable_osc" != "xno"], [ PKG_CHECK_MODULES(LIBLO, liblo, [AC_DEFINE(HAVE_LIBLO) HAVE_LIBLO=1], [NOFAIL=0]) ]) AC_SUBST(LIBLO_CFLAGS) AC_SUBST(LIBLO_LIBS) dnl --------------------------------------------------------------------------- dnl Display related AS_IF([test -z "$PLATFORM_OSX$PLATFORM_WINDOWS"], [ AC_CHECK_HEADERS([X11/Xlib.h], , AC_MSG_ERROR([X11 is mandatory on this platform - install libx11/xcb development package.])) AC_CHECK_LIB([X11], [XOpenDisplay], [XV_LIBS="-lXext"], AC_MSG_ERROR([X11 is mandatory on this platform - install libx11/xcb development package.])) PKG_CHECK_MODULES(XPM, xpm, , AC_MSG_ERROR([Xpm support is mandatory on this platform - install libxpm development package.])) ]) if test "x$enable_xv" != "xno"; then AC_CHECK_LIB(Xv, XvQueryAdaptors, [AC_DEFINE(HAVE_LIBXV) XV_LIBS="$XV_LIBS -lXv" HAVE_LIBXV=1 ], [], $X_LIBS) fi AC_SUBST(XV_LIBS) AC_SUBST(XV_CFLAGS) AS_IF([test "x$enable_sdl" != "xno"], [ PKG_CHECK_MODULES(SDL, sdl, [AC_DEFINE(HAVE_SDL) HAVE_SDL=1], [NOFAIL=0]) ]) AC_SUBST(SDL_LIBS) AC_SUBST(SDL_CFLAGS) AS_IF([test "x$enable_opengl" != "xno" -a -z "$PLATFORM_WINDOWS$PLATFORM_OSX"], [ PKG_CHECK_MODULES(GL, glu gl, [AC_DEFINE(HAVE_GL) HAVE_GL=1], [NOFAIL=0]) ]) AC_SUBST(GL_LIBS) AC_SUBST(GL_CFLAGS) AS_IF([test "x${enable_imlib2}" != "xno"], [ PKG_CHECK_MODULES(IMLIB2, imlib2 >= 1.3.0, [AC_DEFINE(HAVE_IMLIB2) HAVE_IMLIB2=1], [NOFAIL=0]) ]) AC_SUBST(IMLIB2_CFLAGS) AC_SUBST(IMLIB2_LIBS) dnl --------------------------------------------------------------------------- dnl midi lib detection if test "x$enable_midi" != "xno"; then MIDI_CFLAGS="" MIDI_CFLAGS="" if test "x$enable_portmidi" != "xno"; then AC_CHECK_HEADERS(portmidi.h porttime.h , [FOUND_H_PORTMIDI=yes]) AC_CHECK_LIB([portmidi], [Pm_CountDevices], [FOUND_L_PORTMIDI=yes]) fi if test "x$FOUND_H_PORTMIDI$FOUND_L_PORTMIDI" = "xyesyes"; then MIDI_LIBS="-lportmidi" dnl TODO check if porttime is needed for threading if test "$PM_OS" != "mac"; then MIDI_LIBS="${MIDI_LIBS} -lporttime" fi fi if test "x$JACKMIDI" != "xno"; then tmp_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $JACK_CFLAGS" AC_CHECK_HEADERS(jack/midiport.h, [FOUND_H_JACKMIDI=yes]) CPPFLAGS=$tmp_CPPFLAGS fi if test "x$enable_alsamidi" != "xno"; then AC_CHECK_HEADERS(alsa/asoundlib.h, [FOUND_H_ALSAMIDI=yes]) AC_CHECK_HEADERS(pthread.h, [FOUND_H_PTHREAD=yes]) AC_CHECK_LIB([asound], [snd_rawmidi_open], [FOUND_L_ALSAMIDI=yes]) fi if test "x$FOUND_H_ALSAMIDI$FOUND_L_ALSAMIDI$FOUND_H_PTHREAD" = "xyesyesyes"; then AC_DEFINE(ALSA_SEQ_MIDI) AC_DEFINE(ALSA_RAW_MIDI) AC_DEFINE(HAVE_MIDI) HAVE_MIDI=1 ALSA_SEQ_MIDI=1 ALSA_RAW_MIDI=1 MIDI_LIBS="$MIDI_LIBS -lasound" fi if test "x$FOUND_H_PORTMIDI$FOUND_L_PORTMIDI" = "xyesyes"; then AC_DEFINE(HAVE_MIDI) AC_DEFINE(HAVE_PORTMIDI) HAVE_MIDI=1 HAVE_PORTMIDI=1 dnl LIBS have been set above fi if test "x$FOUND_H_JACKMIDI" = "xyes"; then AC_DEFINE(HAVE_MIDI) AC_DEFINE(HAVE_JACKMIDI) HAVE_MIDI=1 HAVE_JACKMIDI=1 dnl no extra libs are needed (jack is already required) fi fi AC_SUBST(MIDI_LIBS) AC_SUBST(MIDI_CFLAGS) dnl --------------------------------------------------------------------------- dnl weak-jack if test "x$enable_weakjack" = "xyes"; then JACK_CFLAGS+=" -DUSE_WEAK_JACK" JACK_LIBS=-ldl AC_SUBST(JACK_CFLAGS) AC_SUBST(JACK_LIBS) fi dnl --------------------------------------------------------------------------- dnl Check for freetype (On Screen Display) FREETYPE_LIBS= FREETYPE_CFLAGS= PKG_CHECK_MODULES(FREETYPE, freetype2, [freetype_pkgconfig=yes], [freetype_pkgconfig=no]) if test "x$freetype_pkgconfig" = "xyes"; then if test ! "x$enable_ft" = "xno"; then AC_DEFINE(HAVE_FREETYPE_H, 1, [Have FreeType2 include files]) AC_DEFINE(HAVE_FT, 1, [Use freetype for OSD]) HAVE_FT=1 else FREETYPE_LIBS= FREETYPE_CFLAGS= fi else AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no) if test "x$FREETYPE_CONFIG" != "xno" -a ! "x$enable_ft" = "xno"; then FREETYPE_CFLAGS=`$FREETYPE_CONFIG --cflags` FREETYPE_LIBS=`$FREETYPE_CONFIG --libs` AC_DEFINE(HAVE_FREETYPE_H, 1, [Have FreeType2 include files]) AC_DEFINE(HAVE_FT, 1, [Use freetype for OSD]) HAVE_FT=1 fi fi AC_SUBST(FREETYPE_CFLAGS) AC_SUBST(FREETYPE_LIBS) if test -n "$fontfile" ; then # I'm not sure if this is the proper way to escape a #define string. # AC_DEFINE(TTFFONTFILE, "\"$fontfile\"") - no # FREETYPE_CFLAGS="$FREETYPE_CFLAGS -DTTFFONTFILE=\\\"$fontfile\\\"" - maybe dnl hack alert - we 'should' use our own .h file for this dnl this might not work with some autoconf's echo "#define TTFFONTFILE \"$fontfile\"" >> confdefs.h fi dnl --------------------------------------------------------------------------- dnl https://github.com/x42/libltc AS_IF([ test "x$enable_ltc" != "xno"], [ PKG_CHECK_MODULES(LTC, ltc, [AC_DEFINE(HAVE_LTC) HAVE_LTC=1], [NOFAIL=0] ) ]) AC_SUBST(LTC_CFLAGS) AC_SUBST(LTC_LIBS) dnl --------------------------------------------------------------------------- dnl Qt GUI stuff (unmaintained) if test "$enable_qtgui" = "yes"; then if test "x$qt4prefix" = "x"; then qt4prefix=$($PKG_CONFIG --variable=prefix QtGui) fi # Check for Qt qmake utility. AC_PATH_PROG(ac_qmake, qmake, [no], $qt4prefix/bin) AC_PATH_PROG(ac_lrelease, lrelease, [no], $qt4prefix/bin) if test "x$ac_qmake" = "xno" -o "x$ac_lrelease" = "xno" ; then AC_MSG_ERROR([qmake not found: please install the Qt4 development package of your distribution. Try setting --with-qt4prefix=QTROOT or use --disable-qtgui to compile xjadeo.]) fi HAVE_QT4=1 if test "x$qmakeargs" = "x"; then if test -n "$PLATFORM_WINDOWS"; then ac_qmake_args="-spec win32-x-g++ -config release" else ac_qmake_args="-config release" fi else ac_qmake_args="$qmakeargs" fi AC_SUBST(ac_qmake) AC_SUBST(ac_qmake_args) AC_SUBST(ac_lrelease) ac_qtgui_dir="qt-gui" AC_CONFIG_FILES(src/qt-gui/Makefile src/qt-gui/qjadeo.pro) else ac_qtgui_dir="" fi AC_SUBST(ac_qtgui_dir) dnl ---------- End of Qt GUI stuff --------------- ac_contrib_dir="" if test "x$enable_contrib" = "xyes"; then ac_contrib_dir="contrib/cli-remote/" fi AC_SUBST(ac_contrib_dir) if test "x$enable_contrib" = "xyes"; then AC_CONFIG_FILES([contrib/cli-remote/Makefile]) fi dnl --------------------------------------------------------------------------- dnl We're done! AC_CONFIG_FILES([Makefile src/Makefile src/xjadeo/Makefile xjadeo.lsm]) dnl write a niiiice report AC_OUTPUT MIDIREPORT="" if test -n "$HAVE_PORTMIDI"; then MIDIREPORT="${MIDIREPORT}portmidi "; fi if test -n "$HAVE_JACKMIDI"; then MIDIREPORT="${MIDIREPORT}jack-midi "; fi if test -n "$ALSA_SEQ_MIDI"; then MIDIREPORT="${MIDIREPORT}alsa-seq "; fi if test -n "$ALSA_RAW_MIDI"; then MIDIREPORT="${MIDIREPORT}alsa-RAW "; fi if test -z "$HAVE_MIDI"; then MIDIREPORT="${MIDIREPORT}disabled."; fi if test -n "$HAVE_MQ"; then RCTLREPORT="POSIX-MQ"; elif test -n "$HAVE_IPCMSG"; then RCTLREPORT="IPC-MSG"; else RCTLREPORT="N/A (stdio only)"; fi if test -z "$HAVE_FT"; then OSDREPORT="disabled" else OSDREPORT=" - freetype: yes - custom font: " if test -n "$fontfile" ; then OSDREPORT="${OSDREPORT}$fontfile"; else OSDREPORT="${OSDREPORT}-" fi if test "x$enable_embed_font" = "xyes"; then OSDREPORT="${OSDREPORT} - embed font: yes" else OSDREPORT="${OSDREPORT} - embed font: no" fi fi CONTREPORT="no" if test "x$enable_contrib" = "xyes"; then CONTREPORT="yes" fi if test -n "$HAVE_GL"; then RPT_OPENGL="yes"; else RPT_OPENGL="not avail."; fi if test -n "$HAVE_LIBXV"; then RPT_LIBXV="yes"; else RPT_LIBXV="not avail."; fi if test -n "$HAVE_IMLIB2"; then RPT_IMLIB2="yes"; else RPT_IMLIB2="not avail."; fi if test -n "$PLATFORM_OSX"; then RPT_MACOSX="yes"; else RPT_MACOSX="not avail."; fi if test -n "$HAVE_SDL"; then RPT_SDL="yes"; else RPT_SDL="not avail."; fi if test -n "$HAVE_LIBLO"; then RPT_LIBLO="yes"; else RPT_LIBLO="not avail."; fi if test -n "$HAVE_QT4"; then RPT_QT4="yes"; else RPT_QT4="no"; fi if test -n "$PLATFORM_OSX"; then RPT_QT4="${RPT_QT4} (OSX-built-in)"; fi if test -n "$JACK_SESSION"; then RPT_JACKSESSION="yes"; else RPT_JACKSESSION="not avail."; fi if test -n "$NEW_JACK_LATENCY_API"; then RPT_JACK_LATENCY="yes"; else RPT_JACK_LATENCY="not avail."; fi if test -n "$HAVE_LTC"; then RPT_LTC="yes"; else RPT_LTC="not avail."; fi AC_MSG_NOTICE([ ------------------------------------------------------------------------ $PACKAGE $VERSION - Configuration Report ------------------------------------------------------------------------ prefix: $prefix exec-prefix: $exec_prefix install path: $bindir System wide config: $sysconfdir/xjadeorc Video Displays - openGL: $RPT_OPENGL - libxv: $RPT_LIBXV - libx11/imlib2: $RPT_IMLIB2 - mac/quartz: $RPT_MACOSX - SDL: $RPT_SDL Sync: - JACK-transport: yes - LTC: $RPT_LTC - MIDI: $MIDIREPORT JACK-session: $RPT_JACKSESSION JACK-latency-api: $RPT_JACK_LATENCY remote control: $RCTLREPORT OSC remote control: $RPT_LIBLO On-screen-display: $OSDREPORT GUI (qjadeo): $RPT_QT4 build contrib/*: $CONTREPORT ]) if test "x$enable_contrib" = "xyes"; then AC_MSG_NOTICE([ Note for Packagers: --enable-contrib does not make a difference when packaging. All programs in contrib/ are noinst targets. They are intended for advanced users, developers and testing only. ]) fi if test -n "$PLATFORM_LINUX$PLATFORM_NETBSD" -a -n "$HAVE_PORTMIDI"; then AC_MSG_NOTICE([ PortMidi is intended for non Un*x Platforms only. On Linux, please use JACK, ALSA-seq or ALSA-raw. ]) fi if test -n "$PLATFORM_LINUX$PLATFORM_OSX$PLATFORM_NETBSD" -a -n "$HAVE_QT4"; then AC_MSG_WARN([ qjadeo is deprecated an not intended to be used. It will be removed in future releases. Xjadeo now features a complete built-in user interface. Do not use --enable-qtgui unless you really know what you are doing. ]) fi AC_MSG_NOTICE([ type "make" followed my "make install" as root. ]) xjadeo-0.8.10/config.h0000644000175000017500000001532113775352470011430 00000000000000/* config.h. Generated from config.h.in by configure. */ /* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ /* #undef AC_APPLE_UNIVERSAL_BUILD */ /* Define as 1 to enable ALSA-raw midi (linux,netbsd) */ #define ALSA_RAW_MIDI 1 /* Define as 1 to enable ALSA sequencer (linux,netbsd) */ #define ALSA_SEQ_MIDI 1 /* errors in the resource config file only result in a warning message instead of forcing xjadeo to exit. */ #define CFG_WARN_ONLY 1 /* enable XV and imlib2 color equalizer */ #define COLOREQ 1 /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ /* #undef CRAY_STACKSEG_END */ /* enable frame cropping */ /* #undef CROPIMG */ /* Define to 1 if using `alloca.c'. */ /* #undef C_ALLOCA */ /* enable xjadeo x11/glx drag and drop */ #define DND 1 /* paint a X on screen when unable to decode or display a frame. */ #define DRAW_CROSS 1 /* Define to 1 if you have `alloca', as a function or macro. */ #define HAVE_ALLOCA 1 /* Define to 1 if you have and it should be used (not on Ultrix). */ #define HAVE_ALLOCA_H 1 /* Define to 1 if you have the header file. */ #define HAVE_ALSA_ASOUNDLIB_H 1 /* Have FreeType2 include files */ #define HAVE_FREETYPE_H 1 /* Use freetype for OSD */ #define HAVE_FT 1 /* Define to enable openGL (linux,netbsd,osx,win) */ #define HAVE_GL 1 /* Video Output: plain old imlib2 (linux,netbsd) */ #define HAVE_IMLIB2 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define as 1 if you have IPC message queues (system-V) */ /* #undef HAVE_IPCMSG */ /* Define as 1 to enable JACK-MIDI */ #define HAVE_JACKMIDI 1 /* Define to 1 if you have the header file. */ #define HAVE_JACK_MIDIPORT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_JACK_SESSION_H 1 /* experimental code to use jack_transport fps, jack-svn >= r591 */ /* #undef HAVE_JACK_VIDEO */ /* Define as 1 if you have the loblo OSC library */ #define HAVE_LIBLO 1 /* Video Output: XVideo support (linux,netbsd) */ #define HAVE_LIBXV 1 /* Define as 1 if you have libltc - http://github.com/x42/libltc */ #define HAVE_LTC 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* general MIDI (MTC) support */ #define HAVE_MIDI 1 /* Define as 1 if you have POSIX message queues (libc, librt) */ #define HAVE_MQ 1 /* Define as 1 to enable the portmidi driver (win,osx) */ #define HAVE_PORTMIDI 1 /* Define to 1 if you have the header file. */ #define HAVE_PORTMIDI_H 1 /* Define to 1 if you have the header file. */ #define HAVE_PORTTIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_PTHREAD_H 1 /* Define as 1 if you have the SDL toolkit (linux,netbsd,osx,win) */ #define HAVE_SDL 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_IPC_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_MSG_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to 1 if you have the header file. */ #define HAVE_X11_XLIB_H 1 /* Define for RGBA32 imlib2 (not RGB24) */ #define IMLIB2RGBA /**/ /* add JACK Session support */ #define JACK_SESSION 1 /* Define to 1 if `major', `minor', and `makedev' are declared in . */ /* #undef MAJOR_IN_MKDEV */ /* Define to 1 if `major', `minor', and `makedev' are declared in . */ #define MAJOR_IN_SYSMACROS 1 /* max length of a remote control line. */ #define MQLEN 512 /* use JACKs new latency API (ltc) */ #define NEW_JACK_LATENCY_API 1 /* Name of package */ #define PACKAGE "xjadeo" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "" /* Define to the full name of this package. */ #define PACKAGE_NAME "" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "" /* GNU/Linux version */ #define PLATFORM_LINUX /**/ /* NetBSD version */ /* #undef PLATFORM_NETBSD */ /* Mac OSX version */ /* #undef PLATFORM_OSX */ /* Windows version */ /* #undef PLATFORM_WINDOWS */ /* The size of `double', as computed by sizeof. */ #define SIZEOF_DOUBLE 8 /* The size of `float', as computed by sizeof. */ #define SIZEOF_FLOAT 4 /* The size of `long', as computed by sizeof. */ #define SIZEOF_LONG 8 /* The size of `unsigned long', as computed by sizeof. */ #define SIZEOF_UNSIGNED_LONG 8 /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ /* #undef STACK_DIRECTION */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* enable dynamic time scaling */ #define TIMEMAP 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* absolute path to truetype default OSD font file */ /* #undef TTFFONTFILE */ /* Version number of package */ #define VERSION "0.8.10" /* enable xjadeo windows context-menu */ #define WINMENU 1 /* 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 /* enable xjadeo x11/glx context menu */ #define XDLG 1 /* enable xjadeo x11 file browser */ #define XFIB 1 /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ xjadeo-0.8.10/src/0000755000175000017500000000000013775353060010653 500000000000000xjadeo-0.8.10/src/xjadeo/0000755000175000017500000000000013775353060012125 500000000000000xjadeo-0.8.10/src/xjadeo/display_mac.c0000644000175000017500000014256413747775355014530 00000000000000/* xjadeo - openGL display for OSX * * (C) 2008,2014 Robin Gareus * * this code was inspired by mplayer's libvo/vo_quartz.c * (c) 2004 Nicolas Plourde * (C) 2004 Romain Dolbeau * * 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. */ #include "xjadeo.h" #if defined PLATFORM_OSX && (defined __i386 || defined __ppc__) void xapi_open(void *d); extern int loop_flag; extern int OSD_mode; extern int force_redraw; // tell the main event loop that some cfg has changed extern int want_letterbox; extern int hide_mouse; extern int interaction_override; // disable some options. extern int movie_width; extern int movie_height; extern int ffctv_width; extern int ffctv_height; extern float movie_aspect; extern double delay; extern double framerate; extern int start_fullscreen; extern int start_ontop; #ifdef CROPIMG extern int xoffset; #endif #define memcpy_pic(d, s, b, h, ds, ss) memcpy_pic2(d, s, b, h, ds, ss, 0) static inline void * memcpy_pic2(void * dst, const void * src, int bytesPerLine, int height, int dstStride, int srcStride, int limit2width) { int i; void *retval=dst; if(!limit2width && dstStride == srcStride) { if (srcStride < 0) { src = (uint8_t*)src + (height-1)*srcStride; dst = (uint8_t*)dst + (height-1)*dstStride; srcStride = -srcStride; } memcpy(dst, src, srcStride*height); } else { for(i=0; i #include #ifdef WORDS_BIGENDIAN #define be2me_16(x) (x) #define be2me_32(x) (x) #define be2me_64(x) (x) #define le2me_16(x) bswap_16(x) #define le2me_32(x) bswap_32(x) #define le2me_64(x) bswap_64(x) #else #define be2me_16(x) bswap_16(x) #define be2me_32(x) bswap_32(x) #define be2me_64(x) bswap_64(x) #define le2me_16(x) (x) #define le2me_32(x) (x) #define le2me_64(x) (x) #endif int levelList[] = { kCGDesktopWindowLevelKey, kCGNormalWindowLevelKey, kCGScreenSaverWindowLevelKey }; /// prototypes static void flip_page(void); static OSStatus KeyEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData); static OSStatus MouseEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData); static OSStatus WindowEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData); static OSStatus DialogEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData); void mac_put_key(UInt32 key, UInt32 charcode); OSStatus mac_menu_cmd(OSStatus result, HICommand *acmd); /// static int vo_fs = 0; // enter fullscreen - user setting static int vo_mac_fs = 0; // we are in fullscreen /// static int winLevel = 1; // always on top static Rect imgRect; // size of the original image (unscaled) static Rect dstRect; // size of the displayed image (after scaling) static Rect winRect; // size of the window containg the displayed image (include padding) static Rect oldWinRect; // size of the window containg the displayed image (include padding) when NOT in fullscreen mode static Rect oldWinBounds; // last size before entering full-screen static Rect deviceRect; // size of the display device static int device_width; static int device_height; static int device_id; static short fs_res_x=0; // full screen res static short fs_res_y=0; static MenuRef windMenu; static MenuRef movMenu; static MenuRef osdMenu; static MenuRef scrnMenu; static MenuRef zoomMenu; static MenuRef jackMenu; static MenuRef syncMenu; static MenuRef osdoMenu; #if 0 static MenuRef fpsMenu; static MenuRef fileMenu; #endif enum // menubar { mQuit = 1, mOpen, mSettings, mHalfScreen, mNormalScreen, mDoubleScreen, mFullScreen, mKeepAspect, // letterbox mOSDOffset, mOSDFrame, mOSDSmpte, mOSDBox, mOSDOffO, mOSDOffS, mOSDOffF, mSyncJack, mSyncLTC, mSyncJackMidi, mSyncPortMidi, mSyncNone, mJackPlay, mJackStop, mJackRewind }; static WindowRef theWindow = NULL; static WindowGroupRef winGroup = NULL; static CGContextRef context; static GDHandle deviceHdl; // main display device static CGRect bounds; // RGB[A] image boundaries static CGDataProviderRef dataProviderRef; // RGB[A] ref static CGImageRef image; // RGB[A] image // YUV & CoDec static uint32_t image_depth; static uint32_t image_format; static uint32_t image_size; static uint32_t image_buffer_size; static char *image_data = NULL; static ImageSequence seqId; //static CodecType image_qtcodec; static PlanarPixmapInfoYUV420 *P = NULL; static uint8_t *yuvbuf = NULL; static struct { ImageDescriptionHandle desc; Handle extension_colr; Handle extension_fiel; Handle extension_clap; Handle extension_pasp; } yuv_qt_stuff; static MatrixRecord matrix; //////////////////////////////////////////////////////////////////// // update checked menu items static void checkMyMenu(void) { CheckMenuItem (osdMenu, 1, (OSD_mode&OSD_FRAME)!=0); CheckMenuItem (osdMenu, 2, (OSD_mode&OSD_SMPTE)!=0); CheckMenuItem (osdMenu, 5, (OSD_mode&OSD_BOX)!=0); CheckMenuItem (osdoMenu, 1, (OSD_mode&(OSD_OFFS|OSD_OFFF))==0); CheckMenuItem (osdoMenu, 2, (OSD_mode&OSD_OFFS)!=0); CheckMenuItem (osdoMenu, 3, (OSD_mode&OSD_OFFF)!=0); CheckMenuItem (zoomMenu, 6, want_letterbox); CheckMenuItem (syncMenu, 1, ui_syncsource() == SYNC_JACK); CheckMenuItem (syncMenu, 4, ui_syncsource() == SYNC_LTC); CheckMenuItem (syncMenu, 5, ui_syncsource() == SYNC_MTC_PORTMIDI); CheckMenuItem (syncMenu, 6, ui_syncsource() == SYNC_MTC_JACK); CheckMenuItem (syncMenu, 7, ui_syncsource() == SYNC_NONE); } // main window setup and painting.. static void mac_CreateWindow(uint32_t d_width, uint32_t d_height, WindowAttributes windowAttrs) { CFStringRef titleKey; CFStringRef windowTitle; OSStatus result; MenuItemIndex index; // FIXME : these may leak memory when re-opening the window. CFStringRef movMenuTitle; CFStringRef zoomMenuTitle; CFStringRef jackMenuTitle; CFStringRef osdMenuTitle; CFStringRef osdoMenuTitle; CFStringRef scrnMenuTitle; CFStringRef syncMenuTitle; #if 0 CFStringRef fpsMenuTitle; CFStringRef fileMenuTitle; #endif const EventTypeSpec win_events[] = { { kEventClassWindow, kEventWindowClosed }, { kEventClassWindow, kEventWindowBoundsChanged }, { kEventClassCommand, kEventCommandProcess } }; const EventTypeSpec key_events[] = { { kEventClassKeyboard, kEventRawKeyDown }, { kEventClassKeyboard, kEventRawKeyRepeat } }; const EventTypeSpec mouse_events[] = { { kEventClassMouse, kEventMouseMoved }, //{ kEventClassMouse, kEventMouseWheelMoved }, { kEventClassMouse, kEventMouseDown }, { kEventClassMouse, kEventMouseUp }, //{ kEventClassMouse, kEventMouseDragged } }; SetRect(&winRect, 0, 0, d_width, d_height); SetRect(&oldWinRect, 0, 0, d_width, d_height); SetRect(&dstRect, 0, 0, d_width, d_height); //Clear Menu Bar ClearMenuBar(); //Create Window Menu CreateStandardWindowMenu(0, &windMenu); InsertMenu(windMenu, 0); #if 1 EnableMenuCommand(0, kHICommandPreferences); //DisableMenuCommand(0, kHICommandServices); //AEInstallEventHandler(kCoreEventClass, kAEShowPreferences, NewAEEventHandlerUPP(WindowEventHandler), NULL, false); #endif ////Create Movie Menu CreateNewMenu (1004, 0, &movMenu); movMenuTitle = CFSTR("Movie"); SetMenuTitleWithCFString(movMenu, movMenuTitle); AppendMenuItemTextWithCFString(movMenu, CFSTR("Load File"), 0, mOpen, &index); //AppendMenuItemTextWithCFString(movMenu, NULL, kMenuItemAttrSeparator, 0, &index); //AppendMenuItemTextWithCFString(movMenu, CFSTR("Seek"), 0, 0, &index); #if 0 AppendMenuItemTextWithCFString(movMenu, CFSTR("Attributes"), 0, 0, &index); //Create File Attribute Menu CreateNewMenu (0, 0, &fileMenu); fileMenuTitle = CFSTR("View"); SetMenuTitleWithCFString(fileMenu, fileMenuTitle); SetMenuItemHierarchicalMenu(movMenu, 4, fileMenu); AppendMenuItemTextWithCFString(fileMenu, CFSTR("use file's FPS"), 1, 0, &index); //XXX AppendMenuItemTextWithCFString(fileMenu, CFSTR("override FPS"), 1, 0, &index); //XXX #endif #if 0 AppendMenuItemTextWithCFString(movMenu, NULL, kMenuItemAttrSeparator, 0, &index); AppendMenuItemTextWithCFString(movMenu, CFSTR("About"), 0, kHICommandAbout, &index); #endif //Create Screen Menu CreateNewMenu (0, 0, &scrnMenu); scrnMenuTitle = CFSTR("Screen"); SetMenuTitleWithCFString(scrnMenu, scrnMenuTitle); AppendMenuItemTextWithCFString(scrnMenu, CFSTR("OSD"), 0, 0, &index); AppendMenuItemTextWithCFString(scrnMenu, CFSTR("Zoom"), 0, 0, &index); #if 0 AppendMenuItemTextWithCFString(scrnMenu, CFSTR("Monitor Speed"), 0, 0, &index); //Create FPS Menu CreateNewMenu (0, 0, &fpsMenu); fpsMenuTitle = CFSTR("Monitor Speed"); SetMenuTitleWithCFString(fpsMenu, fpsMenuTitle); SetMenuItemHierarchicalMenu(scrnMenu, 3, fpsMenu); AppendMenuItemTextWithCFString(fpsMenu, CFSTR("at screen fps"), 1, 0, &index); //XXX AppendMenuItemTextWithCFString(fpsMenu, CFSTR("at files fps"), 1, 0, &index); //XXX //CheckMenuItem (fpsMenu, 2, (delay==-1)); AppendMenuItemTextWithCFString(fpsMenu, CFSTR("custom"), 1, 0, &index); //XXX #endif //Create OSD Menu CreateNewMenu (0, 0, &osdMenu); osdMenuTitle = CFSTR("OSD"); SetMenuTitleWithCFString(osdMenu, osdMenuTitle); SetMenuItemHierarchicalMenu(scrnMenu, 1, osdMenu); AppendMenuItemTextWithCFString(osdMenu, CFSTR("Frameno."), 0, mOSDFrame, &index); AppendMenuItemTextWithCFString(osdMenu, CFSTR("SMPTE"), 0, mOSDSmpte, &index); AppendMenuItemTextWithCFString(osdMenu, CFSTR("SMPTE-Offset"), 0, 0, &index); AppendMenuItemTextWithCFString(osdMenu, NULL, kMenuItemAttrSeparator, 0, &index); AppendMenuItemTextWithCFString(osdMenu, CFSTR("Box"), 0, mOSDBox, &index); CreateNewMenu (0, 0, &osdoMenu); osdoMenuTitle = CFSTR("SMPTE-Offset"); SetMenuTitleWithCFString(osdoMenu, osdoMenuTitle); SetMenuItemHierarchicalMenu(osdMenu, 3, osdoMenu); AppendMenuItemTextWithCFString(osdoMenu, CFSTR("off"), 0, mOSDOffO, &index); AppendMenuItemTextWithCFString(osdoMenu, CFSTR("as SMPTE"), 0, mOSDOffS, &index); AppendMenuItemTextWithCFString(osdoMenu, CFSTR("as Frameno"), 0, mOSDOffF, &index); //Create Zoom Menu CreateNewMenu (0, 0, &zoomMenu); zoomMenuTitle = CFSTR("Zoom"); SetMenuTitleWithCFString(zoomMenu, zoomMenuTitle); SetMenuItemHierarchicalMenu(scrnMenu, 2, zoomMenu); AppendMenuItemTextWithCFString(zoomMenu, CFSTR("Half Size"), 0, mHalfScreen, &index); AppendMenuItemTextWithCFString(zoomMenu, CFSTR("Normal Size"), 0, mNormalScreen, &index); AppendMenuItemTextWithCFString(zoomMenu, CFSTR("Double Size"), 0, mDoubleScreen, &index); AppendMenuItemTextWithCFString(zoomMenu, CFSTR("Full Screen"), 0, mFullScreen, &index); AppendMenuItemTextWithCFString(zoomMenu, NULL, kMenuItemAttrSeparator, 0, &index); AppendMenuItemTextWithCFString(zoomMenu, CFSTR("Letterbox"), 0, mKeepAspect, &index); //Create Sync Menu CreateNewMenu (0, 0, &syncMenu); syncMenuTitle = CFSTR("Sync"); SetMenuTitleWithCFString(syncMenu, syncMenuTitle); AppendMenuItemTextWithCFString(syncMenu, CFSTR("JACK"), 0, mSyncJack, &index); AppendMenuItemTextWithCFString(syncMenu, CFSTR("JACK Transport"), 0, 0, &index); AppendMenuItemTextWithCFString(syncMenu, NULL, kMenuItemAttrSeparator, 0, &index); AppendMenuItemTextWithCFString(syncMenu, CFSTR("LTC (jack)"), 0, mSyncLTC, &index); AppendMenuItemTextWithCFString(syncMenu, CFSTR("MTC (portmidi)"), 0, mSyncPortMidi, &index); AppendMenuItemTextWithCFString(syncMenu, CFSTR("MTC (jackmidi)"), 0, mSyncJackMidi, &index); AppendMenuItemTextWithCFString(syncMenu, CFSTR("none"), 0, mSyncNone, &index); //Create Jack Menu CreateNewMenu (0, 0, &jackMenu); jackMenuTitle = CFSTR("JACK Transport"); SetMenuTitleWithCFString(jackMenu, jackMenuTitle); SetMenuItemHierarchicalMenu(syncMenu, 2, jackMenu); AppendMenuItemTextWithCFString(jackMenu, CFSTR("Play"), 0, mJackPlay, &index); AppendMenuItemTextWithCFString(jackMenu, CFSTR("Stop"), 0, mJackStop, &index); AppendMenuItemTextWithCFString(jackMenu, CFSTR("Rewind"), 0, mJackRewind, &index); checkMyMenu(); InsertMenu(movMenu, GetMenuID(windMenu)); InsertMenu(scrnMenu, GetMenuID(windMenu)); InsertMenu(syncMenu, GetMenuID(windMenu)); //insert before Window menu DrawMenuBar(); //create window CreateNewWindow(kDocumentWindowClass, windowAttrs, &winRect, &theWindow); CreateWindowGroup(0, &winGroup); SetWindowGroup(theWindow, winGroup); //Set window title titleKey = CFSTR("jadeo"); windowTitle = CFCopyLocalizedString(titleKey, NULL); result = SetWindowTitleWithCFString(theWindow, windowTitle); CFRelease(titleKey); CFRelease(windowTitle); //Install event handler InstallApplicationEventHandler (NewEventHandlerUPP (KeyEventHandler), GetEventTypeCount(key_events), key_events, NULL, NULL); InstallApplicationEventHandler (NewEventHandlerUPP (MouseEventHandler), GetEventTypeCount(mouse_events), mouse_events, NULL, NULL); InstallWindowEventHandler (theWindow, NewEventHandlerUPP (WindowEventHandler), GetEventTypeCount(win_events), win_events, theWindow, NULL); } //////////////////////////////////////////////////////// DialogRef midiAlertDialog = 0; static OSStatus midiAlert(void) { OSStatus status = 0; const EventTypeSpec win_events[] = { { kEventClassWindow, kEventWindowClosed }, { kEventClassCommand, kEventCommandProcess } }; CreateStandardAlert(kAlertNoteAlert, CFSTR("Midi connect failed!"), CFSTR("could not connect to MIDI Port. check the settings."), NULL, &midiAlertDialog); //RunStandardAlert(midiAlertDialog, NULL, NULL); ShowWindow (GetDialogWindow(midiAlertDialog)); InstallWindowEventHandler (GetDialogWindow(midiAlertDialog), NewEventHandlerUPP (DialogEventHandler), GetEventTypeCount(win_events), win_events, GetDialogWindow(midiAlertDialog), NULL); RunAppModalLoopForWindow (GetDialogWindow(midiAlertDialog)); return(status); } // TODO DialogRef settingsDialog = 0; static OSStatus NavOpenSettings(void) { OSStatus status = 0; #if 0 Rect setRect; WindowRef theSettings = NULL; SetRect(&setRect, 0, 0, 300, 200); WindowAttributes windowAttrs; windowAttrs = kWindowNoShadowAttribute | kWindowOpaqueForEventsAttribute; CreateNewWindow(kDocumentWindowClass, kWindowStandardDocumentAttributes, &setRect, &theSettings); #else const EventTypeSpec win_events[] = { { kEventClassWindow, kEventWindowClosed }, { kEventClassCommand, kEventCommandProcess } }; CreateStandardAlert(kAlertNoteAlert, CFSTR("settings dialog"), CFSTR("not yet implemented. use .xjadeorc file in your $HOME to make settings persist."),NULL, &settingsDialog); InstallWindowEventHandler (GetDialogWindow(settingsDialog), NewEventHandlerUPP (DialogEventHandler), GetEventTypeCount(win_events), win_events, GetDialogWindow(settingsDialog), NULL); ShowWindow (GetDialogWindow(settingsDialog)); RunAppModalLoopForWindow (GetDialogWindow(settingsDialog)); #endif return(status); } //////////////////////////////////////////////////////// static OSStatus OpenDocuments( AEDescList docList ) { long index; FSRef fsRef; //CFStringRef fileName; long count = 0; OSStatus status = AECountItems( &docList, &count ); require_noerr( status, CantGetCount ); for( index = 1; index <= count; index++ ) { if ( (status = AEGetNthPtr( &docList, index, typeFSRef, NULL, NULL, &fsRef, sizeof(FSRef), NULL) ) == noErr ) { unsigned char revpath[PATH_MAX]; OSErr error; error = FSRefMakePath(&fsRef, revpath, sizeof(revpath)); if (error !=noErr) continue; if (!(interaction_override&OVR_LOADFILE)) xapi_open(revpath); break; } } CantGetCount: return(status); } int ask_close() { DialogRef noticeDialog; DialogItemIndex itemIndex; AlertStdCFStringAlertParamRec inAlertParam; GetStandardAlertDefaultParams(&inAlertParam, kStdCFStringAlertVersionOne); inAlertParam.defaultButton = kAlertStdAlertCancelButton; inAlertParam.defaultText = CFSTR("Quit"); inAlertParam.cancelText = CFSTR("Don't Quit"); CreateStandardAlert(kAlertCautionAlert, CFSTR("Really Quit?"), CFSTR("Application terminaton is beeing blocked by remote control.\nPlease use the controlling application to quit Jadeo.\nQuit anyway?"), &inAlertParam, ¬iceDialog); RunStandardAlert(noticeDialog, NULL, &itemIndex); if (itemIndex == 1) return 1; return 0; } static OSStatus NavOpenDocument(void) { printf("NavOpenDocument\n"); OSStatus status; NavDialogCreationOptions options; NavReplyRecord navReply; static NavObjectFilterUPP navFilterUPP = NULL; NavDialogRef navDialog = NULL; status = NavGetDefaultDialogCreationOptions( &options ); require_noerr( status, CantGetDefaultOptions ); //if ( navFilterUPP == NULL ) navFilterUPP = NewNavObjectFilterUPP( NavOpenFilterProc ); status = NavCreateChooseFileDialog( &options, NULL, NULL, NULL, navFilterUPP, NULL, &navDialog ); require_noerr( status, CantCreateDialog ); status = NavDialogRun( navDialog ); require_noerr( status, CantRunDialog ); status = NavDialogGetReply( navDialog, &navReply ); require( (status == noErr) || (status == userCanceledErr), CantGetReply ); if ( navReply.validRecord ) status = OpenDocuments( navReply.selection ); else status = userCanceledErr; NavDisposeReply( &navReply ); CantGetReply: CantRunDialog: if ( navDialog != NULL ) NavDialogDispose( navDialog ); CantCreateDialog: CantGetDefaultOptions: return(status); } //////////////////////////////////////////////////////// // osx helpers void window_resized_mac() { //printf("resized\n"); int padding = 0; CGRect tmpBounds; GetPortBounds( GetWindowPort(theWindow), &winRect ); if(want_letterbox) { float window_aspect = (float)((float)(winRect.right)/(float)winRect.bottom); if (window_aspect > movie_aspect ) { padding = (winRect.right - winRect.bottom*movie_aspect)/2; SetRect(&dstRect, padding, 0, winRect.bottom*movie_aspect+padding, winRect.bottom); } else { padding = (winRect.bottom - winRect.right/movie_aspect)/2; SetRect(&dstRect, 0, padding, winRect.right, winRect.right/movie_aspect+padding); } } else { SetRect(&dstRect, 0, 0, winRect.right, winRect.bottom); } switch (image_format) { case AV_PIX_FMT_RGB24: case AV_PIX_FMT_RGBA32: { bounds = CGRectMake(dstRect.left, dstRect.top, dstRect.right-dstRect.left, dstRect.bottom-dstRect.top); CreateCGContextForPort (GetWindowPort (theWindow), &context); break; } case AV_PIX_FMT_YUV420P: case AV_PIX_FMT_YUYV422: case AV_PIX_FMT_UYVY422: { long scale_X = FixDiv(Long2Fix(dstRect.right - dstRect.left),Long2Fix(imgRect.right)); long scale_Y = FixDiv(Long2Fix(dstRect.bottom - dstRect.top),Long2Fix(imgRect.bottom)); SetIdentityMatrix(&matrix); if (((dstRect.right - dstRect.left) != imgRect.right) || ((dstRect.bottom - dstRect.right) != imgRect.bottom)) { ScaleMatrix(&matrix, scale_X, scale_Y, 0, 0); if (padding > 0) { TranslateMatrix(&matrix, Long2Fix(dstRect.left), Long2Fix(dstRect.top)); } } SetDSequenceMatrix(seqId, &matrix); break; } default: break; } //Clear Background tmpBounds = CGRectMake( 0, 0, winRect.right, winRect.bottom); CreateCGContextForPort(GetWindowPort(theWindow),&context); CGContextFillRect(context, tmpBounds); } void window_ontop() { SetWindowGroupLevel(winGroup, CGWindowLevelForKey(levelList[winLevel])); } void window_fullscreen() { static Ptr restoreState = NULL; if(vo_fs) { if(winLevel != 0) { if(device_id == 0) { SetSystemUIMode(kUIModeAllHidden, kUIOptionAutoShowMenuBar); } if(fs_res_x != 0 || fs_res_y != 0) { BeginFullScreen( &restoreState, deviceHdl, &fs_res_x, &fs_res_y, NULL, NULL, 0); //Get Main device info/////////////////////////////////////////////////// deviceRect = (*deviceHdl)->gdRect; device_width = deviceRect.right; device_height = deviceRect.bottom; } } // end if winLevel !=0 //save old window size if (!vo_mac_fs) { GetWindowPortBounds(theWindow, &oldWinRect); GetWindowBounds(theWindow, kWindowContentRgn, &oldWinBounds); } //go fullscreen int panscan_x = 0; // offset window->image int panscan_y = 0; if(want_letterbox) { float window_aspect = (float)((float)(device_width)/(float)device_height); if (window_aspect > movie_aspect) panscan_x = (device_width - device_height*movie_aspect); else panscan_y = (device_height - device_width/movie_aspect); } ChangeWindowAttributes(theWindow, kWindowNoShadowAttribute, 0); MoveWindow(theWindow, deviceRect.left-(panscan_x >> 1), deviceRect.top-(panscan_y >> 1), 1); SizeWindow(theWindow, device_width+panscan_x, device_height+panscan_y,1); vo_mac_fs = 1; } else { //go back to windowed mode vo_mac_fs = 0; if(restoreState != NULL) { EndFullScreen(restoreState, 0); //Get Main device info/////////////////////////////////////////////////// deviceRect = (*deviceHdl)->gdRect; device_width = deviceRect.right; device_height = deviceRect.bottom; restoreState = NULL; } SetSystemUIMode( kUIModeNormal, 0); //revert window to previous setting ChangeWindowAttributes(theWindow, 0, kWindowNoShadowAttribute); SizeWindow(theWindow, oldWinRect.right, oldWinRect.bottom,1); MoveWindow(theWindow, oldWinBounds.left, oldWinBounds.top, 1); } window_resized_mac(); } //default keyboard event handler static OSStatus KeyEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData) { printf ("key-event\n"); OSStatus result = noErr; UInt32 class = GetEventClass (event); UInt32 kind = GetEventKind (event); result = CallNextEventHandler(nextHandler, event); if(class == kEventClassKeyboard) { char macCharCodes; UInt32 macKeyCode; UInt32 macKeyModifiers; GetEventParameter(event, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(macCharCodes), NULL, &macCharCodes); GetEventParameter(event, kEventParamKeyCode, typeUInt32, NULL, sizeof(macKeyCode), NULL, &macKeyCode); GetEventParameter(event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(macKeyModifiers), NULL, &macKeyModifiers); if(macKeyModifiers != 256) { #if 1 if (kind == kEventRawKeyRepeat || kind == kEventRawKeyDown) { mac_put_key(macKeyCode, macCharCodes); } #endif } else if(macKeyModifiers == 256) { #if 0 switch(macCharCodes) { case '[': SetWindowAlpha(theWindow, winAlpha-=0.05); break; case ']': SetWindowAlpha(theWindow, winAlpha+=0.05); break; } #endif } else result = eventNotHandledErr; } return result; } //default mouse event handler static OSStatus MouseEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData) { //printf ("mouse-event\n"); OSStatus result = noErr; UInt32 class = GetEventClass (event); UInt32 kind = GetEventKind (event); result = CallNextEventHandler(nextHandler, event); if(class == kEventClassMouse) { WindowPtr tmpWin; Point mousePos; Point winMousePos; GetEventParameter(event, kEventParamMouseLocation, typeQDPoint, 0, sizeof(Point), 0, &mousePos); GetEventParameter(event, kEventParamWindowMouseLocation, typeQDPoint, 0, sizeof(Point), 0, &winMousePos); switch (kind) { case kEventMouseMoved: break; case kEventMouseWheelMoved: { #if 0 int wheel; short part; GetEventParameter(event, kEventParamMouseWheelDelta, typeSInt32, 0, sizeof(int), 0, &wheel); part = FindWindow(mousePos,&tmpWin); if(part == inContent) { if(wheel > 0) mac_put_key(0, '>'); else mac_put_key(0, '<'); } #endif } break; case kEventMouseDown: case kEventMouseUp: { EventMouseButton button; short part; Rect bounds; // XXX bounds is also a static/global GetWindowPortBounds(theWindow, &bounds); GetEventParameter(event, kEventParamMouseButton, typeMouseButton, 0, sizeof(EventMouseButton), 0, &button); part = FindWindow(mousePos,&tmpWin); if(kind == kEventMouseUp) { break; } if( (winMousePos.h > (bounds.right - 15)) && (winMousePos.v > (bounds.bottom)) ) { if(!vo_mac_fs) GrowWindow(theWindow, mousePos, NULL); } else if(part == inMenuBar) { MenuSelect(mousePos); HiliteMenu(0); } else if(part == inContent) { result = eventNotHandledErr; } } break; case kEventMouseDragged: break; default:result = eventNotHandledErr;break; } } return result; } static OSStatus DialogEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData) { if (midiAlertDialog) { QuitAppModalLoopForWindow(GetDialogWindow(midiAlertDialog)); DisposeDialog(midiAlertDialog); midiAlertDialog=0; } if (settingsDialog) { QuitAppModalLoopForWindow(GetDialogWindow(settingsDialog)); DisposeDialog(settingsDialog); settingsDialog=0; } return noErr; } //default window event handler static OSStatus WindowEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData) { //printf ("window-event\n"); OSStatus result = noErr; //uint32_t d_width; //uint32_t d_height; UInt32 class = GetEventClass (event); UInt32 kind = GetEventKind (event); if(class == kEventClassCommand) { //printf("kEventClassCommand\n"); HICommand theHICommand; result = CallNextEventHandler(nextHandler, event); GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof( HICommand ), NULL, &theHICommand); result = mac_menu_cmd(result, &theHICommand); // or slider // if (kind == kEventCommandProcess) {;} } else if(class == kEventClassWindow) { //printf("kEventClassWindow\n"); WindowRef window; Rect rectPort = {0,0,0,0}; GetEventParameter(event, kEventParamDirectObject, typeWindowRef, NULL, sizeof(WindowRef), NULL, &window); if(window) { GetPortBounds(GetWindowPort(window), &rectPort); } switch (kind) { case kEventWindowClose: if ((interaction_override&OVR_QUIT_WMG) == 0 || ask_close()) { result = CallNextEventHandler(nextHandler, event); } break; case kEventWindowClosed: result = CallNextEventHandler(nextHandler, event); // TODO: catch window close theWindow = NULL; loop_flag=0; //exit(0); // XXX //ExitToShell(); break; //resize window case kEventWindowZoomed: case kEventWindowBoundsChanged: result = CallNextEventHandler(nextHandler, event); window_resized_mac(); flip_page(); window_resized_mac(); break; default: result = CallNextEventHandler(nextHandler, event); //result = eventNotHandledErr; break; } } return result; } static void flip_page(void) { int curTime; static int lastTime = 0; if(theWindow == NULL) return; //CGContextFlush (context); // XXX not needed switch (image_format) { case AV_PIX_FMT_RGB24: case AV_PIX_FMT_RGBA32: { CGContextDrawImage (context, bounds, image); } break; case AV_PIX_FMT_YUV420P: case AV_PIX_FMT_YUYV422: case AV_PIX_FMT_UYVY422: { OSErr qterr; CodecFlags flags = 0; qterr = DecompressSequenceFrameWhen(seqId, (char *)yuvbuf, image_buffer_size, 0, //codecFlagUseImageBuffer, &flags, NULL, NULL); if (qterr) { fprintf(stderr, "mac error: DecompressSequenceFrameWhen in flip_page (%d) flags:0x%08x\n", qterr, flags); } } break; } #if 1 if(!vo_mac_fs) { //render resize box CGContextBeginPath(context); CGContextSetAllowsAntialiasing(context, false); //CGContextSaveGState(context); //line white CGContextSetRGBStrokeColor (context, 0.2, 0.2, 0.2, 0.5); CGContextMoveToPoint( context, winRect.right-1, 1); CGContextAddLineToPoint( context, winRect.right-1, 1); CGContextMoveToPoint( context, winRect.right-1, 5); CGContextAddLineToPoint( context, winRect.right-5, 1); CGContextMoveToPoint( context, winRect.right-1, 9); CGContextAddLineToPoint( context, winRect.right-9, 1); CGContextStrokePath( context ); //line gray CGContextSetRGBStrokeColor (context, 0.4, 0.4, 0.4, 0.5); CGContextMoveToPoint( context, winRect.right-1, 2); CGContextAddLineToPoint( context, winRect.right-2, 1); CGContextMoveToPoint( context, winRect.right-1, 6); CGContextAddLineToPoint( context, winRect.right-6, 1); CGContextMoveToPoint( context, winRect.right-1, 10); CGContextAddLineToPoint( context, winRect.right-10, 1); CGContextStrokePath( context ); //line black CGContextSetRGBStrokeColor (context, 0.6, 0.6, 0.6, 0.5); CGContextMoveToPoint( context, winRect.right-1, 3); CGContextAddLineToPoint( context, winRect.right-3, 1); CGContextMoveToPoint( context, winRect.right-1, 7); CGContextAddLineToPoint( context, winRect.right-7, 1); CGContextMoveToPoint( context, winRect.right-1, 11); CGContextAddLineToPoint( context, winRect.right-11, 1); CGContextStrokePath( context ); //CGContextRestoreGState( context ); CGContextFlush (context); } #endif #if 1 //update activity every 30 seconds to prevent //screensaver from starting up. curTime = TickCount()/60; if( ((curTime - lastTime) >= 30) || (lastTime == 0) ) { UpdateSystemActivity(UsrActivity); lastTime = curTime; } #endif } static int draw_frame(uint8_t *src) { //printf("draw_frame\n"); switch (image_format) { case AV_PIX_FMT_RGB24: case AV_PIX_FMT_RGBA32: memcpy(image_data,src,image_size); return 0; case AV_PIX_FMT_YUV420P: case AV_PIX_FMT_YUYV422: case AV_PIX_FMT_UYVY422: #ifdef CROPIMG { stride_memcpy(yuvbuf, src+(xoffset*2), movie_width*2,movie_height, movie_width*2, movie_width*4); } #else memcpy_pic(((char*)yuvbuf), src, imgRect.right * 2, imgRect.bottom, imgRect.right * 2, imgRect.right * 2); #endif return 0; } return -1; } /******************************************************************************* * xjadeo API */ int open_window_mac (void) { uint32_t width = movie_width; uint32_t height = movie_height; uint32_t d_height= ffctv_height; uint32_t d_width = ffctv_width; device_id = 0; image_format = AV_PIX_FMT_YUV420P; //image_format = AV_PIX_FMT_RGBA32; WindowAttributes windowAttrs; OSErr qterr = 0; int i; CGRect tmpBounds; deviceHdl = GetMainDevice(); for(i=0; igdRect; device_width = deviceRect.right-deviceRect.left; device_height = deviceRect.bottom-deviceRect.top; //misc setup///////////////////////////////////////////////////// SetRect(&imgRect, 0, 0, width, height); switch (image_format) { case AV_PIX_FMT_RGBA32: image_depth = 32; break; case AV_PIX_FMT_RGB24: image_depth = 24; break; case AV_PIX_FMT_YUV420P: case AV_PIX_FMT_YUYV422: case AV_PIX_FMT_UYVY422: image_depth = 16; break; } image_size = ((imgRect.right*imgRect.bottom*image_depth)+7)/8; vo_fs = start_fullscreen; if(image_data) free(image_data); image_data = malloc(image_size); //Create player window////////////////////////////////////////////////// windowAttrs = kWindowStandardDocumentAttributes | kWindowStandardHandlerAttribute | kWindowInWindowMenuAttribute | kWindowAsyncDragAttribute | kWindowLiveResizeAttribute; windowAttrs &= (~kWindowResizableAttribute); if (theWindow == NULL) { mac_CreateWindow(d_width, d_height, windowAttrs); if (theWindow == NULL) { fprintf(stderr, "mac error: Couldn't create window !!!!!\n"); return -1; } #if 1 tmpBounds = CGRectMake( 0, 0, winRect.right, winRect.bottom); CreateCGContextForPort(GetWindowPort(theWindow),&context); CGContextFillRect(context, tmpBounds); #else SetWindowGroupLevel(winGroup, kCGDesktopIconWindowLevel - 1); SetWindowGroup(theWindow, winGroup); RGBColor black = { 0, 0, 0 }; SetWindowContentColor(theWindow, &black); #endif } else { //printf("re-set window\n"); #if 1 HideWindow(theWindow); ChangeWindowAttributes(theWindow, ~windowAttrs, windowAttrs); SetRect(&winRect, 0, 0, d_width, d_height); SetRect(&oldWinRect, 0, 0, d_width, d_height); SizeWindow (theWindow, d_width, d_height, 1); #endif } switch (image_format) { case AV_PIX_FMT_RGB24: case AV_PIX_FMT_RGBA32: { CreateCGContextForPort (GetWindowPort (theWindow), &context); dataProviderRef = CGDataProviderCreateWithData (0, image_data, imgRect.right * imgRect.bottom * 4, 0); image = CGImageCreate (imgRect.right, imgRect.bottom, 8, image_depth, ((imgRect.right*32)+7)/8, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipFirst, dataProviderRef, 0, 1, kCGRenderingIntentDefault); break; } case AV_PIX_FMT_YUYV422: case AV_PIX_FMT_UYVY422: case AV_PIX_FMT_YUV420P: { SetIdentityMatrix(&matrix); if ((d_width != width) || (d_height != height)) { ScaleMatrix(&matrix, FixDiv(Long2Fix(d_width),Long2Fix(width)), FixDiv(Long2Fix(d_height),Long2Fix(height)), 0, 0); } yuv_qt_stuff.desc = (ImageDescriptionHandle)NewHandleClear( sizeof(ImageDescription) ); yuv_qt_stuff.extension_colr = NewHandleClear(sizeof(NCLCColorInfoImageDescriptionExtension)); ((NCLCColorInfoImageDescriptionExtension*)(*yuv_qt_stuff.extension_colr))->colorParamType = kVideoColorInfoImageDescriptionExtensionType; ((NCLCColorInfoImageDescriptionExtension*)(*yuv_qt_stuff.extension_colr))->primaries = 2; ((NCLCColorInfoImageDescriptionExtension*)(*yuv_qt_stuff.extension_colr))->transferFunction = 2; ((NCLCColorInfoImageDescriptionExtension*)(*yuv_qt_stuff.extension_colr))->matrix = 2; yuv_qt_stuff.extension_fiel = NewHandleClear(sizeof(FieldInfoImageDescriptionExtension)); ((FieldInfoImageDescriptionExtension*)(*yuv_qt_stuff.extension_fiel))->fieldCount = 1; ((FieldInfoImageDescriptionExtension*)(*yuv_qt_stuff.extension_fiel))->fieldOrderings = 0; yuv_qt_stuff.extension_clap = NewHandleClear(sizeof(CleanApertureImageDescriptionExtension)); ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->cleanApertureWidthN = imgRect.right; ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->cleanApertureWidthD = 1; ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->cleanApertureHeightN = imgRect.bottom; ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->cleanApertureHeightD = 1; ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->horizOffN = 0; ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->horizOffD = 1; ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->vertOffN = 0; ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->vertOffD = 1; yuv_qt_stuff.extension_pasp = NewHandleClear(sizeof(PixelAspectRatioImageDescriptionExtension)); ((PixelAspectRatioImageDescriptionExtension*)(*yuv_qt_stuff.extension_pasp))->hSpacing = 1; ((PixelAspectRatioImageDescriptionExtension*)(*yuv_qt_stuff.extension_pasp))->vSpacing = 1; (*yuv_qt_stuff.desc)->idSize = sizeof(ImageDescription); (*yuv_qt_stuff.desc)->cType = k422YpCbCr8CodecType; (*yuv_qt_stuff.desc)->version = 2; (*yuv_qt_stuff.desc)->revisionLevel = 0; (*yuv_qt_stuff.desc)->vendor = 'xj-5'; (*yuv_qt_stuff.desc)->width = imgRect.right; (*yuv_qt_stuff.desc)->height = imgRect.bottom; (*yuv_qt_stuff.desc)->hRes = Long2Fix(72); (*yuv_qt_stuff.desc)->vRes = Long2Fix(72); (*yuv_qt_stuff.desc)->temporalQuality = 0; (*yuv_qt_stuff.desc)->spatialQuality = codecLosslessQuality; (*yuv_qt_stuff.desc)->frameCount = 1; (*yuv_qt_stuff.desc)->dataSize = 0; (*yuv_qt_stuff.desc)->depth = 24; // (*yuv_qt_stuff.desc)->clutID = -1; qterr = AddImageDescriptionExtension(yuv_qt_stuff.desc, yuv_qt_stuff.extension_colr, kColorInfoImageDescriptionExtension); if (qterr) { fprintf(stderr, "mac error: AddImageDescriptionExtension [colr] (%d)\n", qterr); } qterr = AddImageDescriptionExtension(yuv_qt_stuff.desc, yuv_qt_stuff.extension_fiel, kFieldInfoImageDescriptionExtension); if (qterr) { fprintf(stderr, "mac error: AddImageDescriptionExtension [fiel] (%d)\n", qterr); } qterr = AddImageDescriptionExtension(yuv_qt_stuff.desc, yuv_qt_stuff.extension_clap, kCleanApertureImageDescriptionExtension); if (qterr) { fprintf(stderr, "mac error: AddImageDescriptionExtension [clap] (%d)\n", qterr); } qterr = AddImageDescriptionExtension(yuv_qt_stuff.desc, yuv_qt_stuff.extension_pasp, kCleanApertureImageDescriptionExtension); if (qterr) { fprintf(stderr, "mac error: AddImageDescriptionExtension [pasp] (%d)\n", qterr); } if (P != NULL) { // second or subsequent movie free(P); } P = calloc(1, sizeof(PlanarPixmapInfoYUV420)); if (yuvbuf != NULL) { // second or subsequent movie free(yuvbuf); } yuvbuf = calloc(1, image_size); #if 0 switch (image_format) { default: /* case IMGFMT_YV12: case IMGFMT_IYUV: case IMGFMT_I420: */ case AV_PIX_FMT_YUV420P: //XXX P->componentInfoY.offset = be2me_32(sizeof(PlanarPixmapInfoYUV420)); P->componentInfoCb.offset = be2me_32(be2me_32(P->componentInfoY.offset) + image_size / 2); P->componentInfoCr.offset = be2me_32(be2me_32(P->componentInfoCb.offset) + image_size / 4); P->componentInfoY.rowBytes = be2me_32(imgRect.right); P->componentInfoCb.rowBytes = be2me_32(imgRect.right / 2); P->componentInfoCr.rowBytes = be2me_32(imgRect.right / 2); image_buffer_size = image_size + sizeof(PlanarPixmapInfoYUV420); break; /* case IMGFMT_UYVY: case IMGFMT_YUY2: */ case AV_PIX_FMT_YUYV422 : //XXX case AV_PIX_FMT_UYVY422: image_buffer_size = image_size; break; } #else image_buffer_size = image_size; #endif qterr = DecompressSequenceBeginS( &seqId, yuv_qt_stuff.desc, (char *) yuvbuf, // XXX use moviebuffer here? image_buffer_size, GetWindowPort(theWindow), NULL, NULL, ((d_width != width) || (d_height != height)) ? &matrix : NULL, srcCopy, NULL, 0, codecMinQuality, // codecLosslessQuality, bestSpeedCodec); if (qterr) { fprintf(stderr, "mac error: DecompressSequenceBeginS (%d)\n", qterr); return -1; } // Turn off gamma correction (TODO: unless requested) if (1) QTSetPixMapHandleRequestedGammaLevel(GetPortPixMap(GetWindowPort(theWindow)), kQTUseSourceGammaLevel); break; } // end case YUV default: fprintf(stderr, "unsupported Image format (%d).\n", qterr); return -1; } //Show window RepositionWindow(theWindow, NULL, kWindowCenterOnMainScreen); ShowWindow (theWindow); //SelectWindow (theWindow); SetWindowGroupLevel(winGroup, CGWindowLevelForKey(levelList[winLevel])); GetWindowBounds(theWindow, kWindowContentRgn, &oldWinBounds); if(vo_fs) window_fullscreen(); if(start_ontop) { winLevel=2; window_ontop(); } #if 0 if(vo_rootwin) { vo_fs = 1; winLevel = 0; SetWindowGroupLevel(winGroup, CGWindowLevelForKey(levelList[winLevel])); window_fullscreen(); } #endif window_resized_mac(); return 0; } void close_window_mac (void) { printf("close window\n"); if (1) { // XX ONLY YUV ... OSErr qterr; qterr = CDSequenceEnd(seqId); if (qterr) {;} } ShowMenuBar(); } void newsrc_mac (void) { close_window_mac(); open_window_mac(); } void resize_mac (unsigned int x, unsigned int y) { //printf("resize %i %i\n",x,y); if(vo_mac_fs) { vo_fs = (!(vo_fs)); window_fullscreen(); } SizeWindow(theWindow, x, y ,1); window_resized_mac(); } void getsize_mac (unsigned int *x, unsigned int *y) { static Rect rect; GetWindowPortBounds(theWindow, &rect); //GetPortBounds( GetWindowPort(theWindow), &rect ); //GetWindowBounds(theWindow, kWindowContentRgn, &rect); if(x)*x=rect.right; if(y)*y=rect.bottom; printf("getsize %i %i\n", *x, *y); } void position_mac (int x, int y) { printf("set position %i %i\n",x,y); MoveWindow(theWindow, x, y, 1); } void getpos_mac (int *x, int *y) { static Rect rect; //GetWindowPortBounds(theWindow, &rect); // OSX < 10.4/5 ?! GetWindowBounds(theWindow, kWindowContentRgn, &rect); // OSX 10.6 if(x)*x=rect.left; if(y)*y=rect.top; printf("get window pos %i %i\n", *x, *y); } void fullscreen_mac (int a) { vo_fs=a; if (vo_fs != vo_mac_fs) window_fullscreen(); } int get_fullscreen_mac() { return (vo_fs); } void mousepointer_mac (int a) { if (a>1) a = !hide_mouse; //printf("mouse cursor: %s\n",a?"hide":"show"); if (a) { CGDisplayHideCursor(kCGDirectMainDisplay); hide_mouse = 1; } else { CGDisplayShowCursor(kCGDirectMainDisplay); hide_mouse = 0; } } void ontop_mac (int a) { //printf("ontop %i\n",a?1:0); if (a) winLevel=2; else winLevel=1; window_ontop(); } int get_ontop_mac() { return(winLevel==2?1:0); } void render_mac (uint8_t *mybuffer) { //printf("render\n"); //imgRect.right= movie_width; //imgRect.bottom= movie_height; #if 1 draw_frame(mybuffer); #elif 0 // testing size_t Ylen= movie_width * movie_height; size_t UVlen= movie_width/2 * movie_height/2; memcpy(yuvbuf,mybuffer,Ylen+UVlen+UVlen); #else /* http://www.fourcc.org/indexyuv.htm */ uint8_t *Yptr=mybuffer; uint8_t *Uptr=Yptr + Ylen; uint8_t *Vptr=Uptr + UVlen; stride_memcpy(mac_overlay->pixels[0],Yptr,movie_width,movie_height,mac_overlay->pitches[0],movie_width);//Y stride_memcpy(mac_overlay->pixels[1],Vptr,movie_width/2,movie_height/2,mac_overlay->pitches[1],movie_width/2);//V stride_memcpy(mac_overlay->pixels[2],Uptr,movie_width/2,movie_height/2,mac_overlay->pitches[2],movie_width/2);//U #endif flip_page(); //printf("render done.\n"); } void mac_letterbox_change (void){ force_redraw=1; window_resized_mac(); } void handle_X_events_mac (void) { EventRef theEvent; EventTargetRef theTarget; OSStatus theErr; theTarget = GetEventDispatcherTarget(); theErr = ReceiveNextEvent(0, 0, kEventDurationNoWait,true, &theEvent); if(theErr == noErr && theEvent != NULL) { SendEventToEventTarget (theEvent, theTarget); ReleaseEvent(theEvent); } } void mac_put_key(UInt32 key, UInt32 charcode) { char c; switch (key) { case 0x35: if ((interaction_override&OVR_QUIT_KEY) == 0) { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) 0xff1b); loop_flag=0; return; // ESCAPE } default: c= (char) charcode; } switch (c) { case 'a': ontop_mac(winLevel==2?0:1); break; case 'f': fullscreen_mac(!vo_fs); break; case 'l': want_letterbox = !want_letterbox; mac_letterbox_change(); break; case 'o': ui_osd_offset_cycle(); break; case 'p': ui_osd_permute(); break; case 's': ui_osd_tc(); break; case 'v': //'v' // OSD - current video frame ui_osd_fn(); break; case 'b': //'b' // OSD - black box ui_osd_box(); break; case 'C': //'C' // OSD - clear all ui_osd_clear(); break; case 'i': //'i' // OSD - fileinfo ui_osd_fileinfo(); break; case 'g': //'g' // OSD - geometry ui_osd_geo(); break; case '\\': XCtimeoffset(0, (unsigned int) charcode); break; case '=': XCtimeoffset(1, (unsigned int) charcode); break; case '-': XCtimeoffset(-1, (unsigned int) charcode); break; case '{': XCtimeoffset(-2, (unsigned int) charcode); break; case '}': XCtimeoffset(2, (unsigned int) charcode); break; case '+': XCtimeoffset(4, (unsigned int) charcode); break; case '_': XCtimeoffset(-4, (unsigned int) charcode); break; case 'm': mousepointer_mac(2); break; case '.': //'.' // resize 100% XCresize_percent(100); break; case ',': //',' // resize to aspect ratio XCresize_aspect(0); break; case '<': //'<' // resize *.83 XCresize_scale(-1); break; case '>': //'>' // resize *1.2 XCresize_scale(1); break; #ifdef CROPIMG case '[': { xoffset-=2; if (xoffset<0) xoffset=0; force_redraw=1; } break; case ']': { xoffset+=2; if (xoffset>movie_width) xoffset=movie_width; force_redraw=1; } break; #endif case 0x8: if ((interaction_override&OVR_JCONTROL) == 0) jackt_rewind(); remote_notify(NTY_KEYBOARD, 310, "keypress=%d # backspace", (unsigned int) 0xff08); break; case ' ': if ((interaction_override&OVR_JCONTROL) == 0) jackt_toggle(); remote_notify(NTY_KEYBOARD, 310, "keypress=%d # space", (unsigned int) 0x0020); break; default: remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) charcode); //printf("yet unhandled keyboard event: '%c' 0x%x\n",c,c); break; } checkMyMenu(); } OSStatus mac_menu_cmd(OSStatus result, HICommand *acmd) { switch ( acmd->commandID ) { case kHICommandQuit: case mQuit: if ((interaction_override&OVR_QUIT_OSX) == 0 || ask_close()) loop_flag=0; break; case kHICommandAbout: break; case kHICommandClose: break; case kHICommandOpen: case mOpen: NavOpenDocument(); break; case kHICommandPreferences: case mSettings: NavOpenSettings(); break; case mHalfScreen: { resize_mac(ffctv_width/2, ffctv_height/2); } break; case mNormalScreen: { resize_mac(ffctv_width, ffctv_height); } break; //case kHICommandFullScreen: case mFullScreen: vo_fs = (!(vo_fs)); window_fullscreen(); break; case mDoubleScreen: { resize_mac(ffctv_width*2, ffctv_height*2); } break; case mKeepAspect: want_letterbox = !want_letterbox; force_redraw=1; window_resized_mac(); break; case mOSDFrame: ui_osd_fn(); break; case mOSDSmpte: ui_osd_tc(); break; case mOSDOffO: ui_osd_offset_none(); break; case mOSDOffS: ui_osd_offset_tc(); break; case mOSDOffF: ui_osd_offset_fn(); break; case mOSDBox: ui_osd_box(); break; case mJackPlay: if ((interaction_override&OVR_JCONTROL) == 0) jackt_start(); break; case mJackRewind: if ((interaction_override&OVR_JCONTROL) == 0) jackt_rewind(); break; case mJackStop: jackt_stop(); break; case mSyncJack: ui_sync_to_jack(); break; case mSyncLTC: ui_sync_to_ltc(); break; case mSyncJackMidi: ui_sync_to_mtc_jack(); break; case mSyncPortMidi: ui_sync_to_mtc_portmidi(); if (ui_syncsource() != SYNC_MTC_PORTMIDI) { midiAlert(); } break; case mSyncNone: ui_sync_none(); break; #if 1 case kHICommandNew: case kHICommandSave: case kHICommandSaveAs: case kHICommandUndo: case kHICommandCut: case kHICommandCopy: case kHICommandPaste: case kHICommandClear: case kHICommandSelectAll: DisableMenuItem(acmd->menu.menuRef, acmd->menu.menuItemIndex); break; #endif default: printf("yet unhandled menu entry id:%u\n",(unsigned int)acmd->commandID); result = eventNotHandledErr; break; } checkMyMenu(); // update checked menu items return result; } #endif /* PLATFORM_OSX PPC,i386 */ // vim: sw=2 sts=2 ts=8 et xjadeo-0.8.10/src/xjadeo/common_jack.c0000644000175000017500000000647012620454615014474 00000000000000/* xjadeo - common jack abstraction * * (C) 2010-2014 Robin Gareus * * 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. */ #include "weak_libjack.h" #include "xjadeo.h" extern int jack_autostart; extern int interaction_override; extern int want_quiet; extern int want_debug; extern int want_verbose; static jack_client_t *xj_jack_client = NULL; #ifdef JACK_SESSION #include extern char *jack_uuid; extern int loop_flag; static void jack_session_cb (jack_session_event_t *event, void *arg) { char filename[256]; char command[256]; if (interaction_override&OVR_JSESSION) { /* DO NOT SAVE SESSION * e.g. if xjadeo will be restored by wrapper-program * f.i. ardour3+videotimeline */ WJACK_session_reply (xj_jack_client, event); WJACK_session_event_free (event); return; } snprintf(filename, sizeof(filename), "%sxjadeo.state", event->session_dir); snprintf(command, sizeof(command), "xjadeo -U %s --rc ${SESSION_DIR}xjadeo.state", event->client_uuid); saveconfig (filename); event->command_line = strdup (command); WJACK_session_reply (xj_jack_client, event); if (event->type == JackSessionSaveAndQuit) loop_flag=0; WJACK_session_event_free (event); } #endif void xj_shutdown_jack () { xj_jack_client = NULL; } void xj_close_jack (void *client_pointer) { jack_client_t **client = (jack_client_t**) client_pointer; xj_jack_client = NULL; if (*client) { WJACK_deactivate (*client); WJACK_client_close (*client); } *client = NULL; } int xj_init_jack (void *client_pointer, const char *client_name) { jack_client_t **client = (jack_client_t**) client_pointer; jack_status_t status; jack_options_t options = jack_autostart ? JackNullOption : JackNoStartServer; *client = NULL; xj_jack_client = NULL; #ifdef JACK_SESSION if (jack_uuid) *client = WJACK_client_open2 (client_name, options|JackSessionID, &status, jack_uuid); else #endif *client = WJACK_client_open1 (client_name, options, &status); if (!*client) { if (!want_quiet) { fprintf (stderr, "jack_client_open() failed, status = 0x%2.0x\n", status); } return -1; } xj_jack_client = *client; if (want_verbose && (status & JackServerStarted)) { fprintf (stdout, "JACK server was started.\n"); } if (want_verbose && (status & JackNameNotUnique)) { fprintf (stdout, "JACK client name was not unique\n"); } if (want_verbose) { client_name = WJACK_get_client_name (*client); fprintf (stdout, "JACK client name: `%s'\n", client_name); } #ifdef JACK_SESSION WJACK_set_session_callback (*client, jack_session_cb, NULL); #endif return 0; } const char *xj_jack_client_name() { if (!xj_jack_client) return "N/A"; return WJACK_get_client_name(xj_jack_client); } xjadeo-0.8.10/src/xjadeo/gtime.c0000644000175000017500000001677112620454615013326 00000000000000/* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * gmain.c: Main loop abstraction, timeouts, and idle functions * Copyright 1998 Owen Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, see . */ #include "gtime.h" #ifdef PLATFORM_WINDOWS #include static ULONGLONG (*g_GetTickCount64) (void) = NULL; static uint32_t g_win32_tick_epoch = 0; static int clock_initialized = 0; static void xj_clock_win32_init (void) { HMODULE kernel32; g_GetTickCount64 = NULL; kernel32 = GetModuleHandle ("KERNEL32.DLL"); if (kernel32 != NULL) g_GetTickCount64 = (void *) GetProcAddress (kernel32, "GetTickCount64"); g_win32_tick_epoch = ((uint32_t)GetTickCount()) >> 31; } int64_t xj_get_monotonic_time (void) { if (!clock_initialized) { xj_clock_win32_init(); clock_initialized = 1; } uint64_t ticks; uint32_t ticks32; /* There are four sources for the monotonic time on Windows: * * Three are based on a (1 msec accuracy, but only read periodically) clock chip: * - GetTickCount (GTC) * 32bit msec counter, updated each ~15msec, wraps in ~50 days * - GetTickCount64 (GTC64) * Same as GetTickCount, but extended to 64bit, so no wrap * Only available in Vista or later * - timeGetTime (TGT) * similar to GetTickCount by default: 15msec, 50 day wrap. * available in winmm.dll (thus known as the multimedia timers) * However apps can raise the system timer clock frequency using timeBeginPeriod() * increasing the accuracy up to 1 msec, at a cost in general system performance * and battery use. * * One is based on high precision clocks: * - QueryPrecisionCounter (QPC) * This has much higher accuracy, but is not guaranteed monotonic, and * has lots of complications like clock jumps and different times on different * CPUs. It also has lower long term accuracy (i.e. it will drift compared to * the low precision clocks. * * Additionally, the precision available in the timer-based wakeup such as * MsgWaitForMultipleObjectsEx (which is what the mainloop is based on) is based * on the TGT resolution, so by default it is ~15msec, but can be increased by apps. * * The QPC timer has too many issues to be used as is. The only way it could be used * is to use it to interpolate the lower precision clocks. Firefox does something like * this: * https://bugzilla.mozilla.org/show_bug.cgi?id=363258 * * However this seems quite complicated, so we're not doing this right now. * * The approach we take instead is to use the TGT timer, extending it to 64bit * either by using the GTC64 value, or if that is not available, a process local * time epoch that we increment when we detect a timer wrap (assumes that we read * the time at least once every 50 days). * * This means that: * - We have a globally consistent monotonic clock on Vista and later * - We have a locally monotonic clock on XP * - Apps that need higher precision in timeouts and clock reads can call * timeBeginPeriod() to increase it as much as they want */ if (g_GetTickCount64 != NULL) { uint32_t ticks_as_32bit; ticks = g_GetTickCount64 (); ticks32 = timeGetTime(); /* GTC64 and TGT are sampled at different times, however they * have the same base and source (msecs since system boot). * They can differ by as much as -16 to +16 msecs. * We can't just inject the low bits into the 64bit counter * as one of the counters can have wrapped in 32bit space and * the other not. Instead we calculate the signed difference * in 32bit space and apply that difference to the 64bit counter. */ ticks_as_32bit = (uint32_t)ticks; /* We could do some 2's complement hack, but we play it safe */ if (ticks32 - ticks_as_32bit <= INT_MAX) ticks += ticks32 - ticks_as_32bit; else ticks -= ticks_as_32bit - ticks32; } else { uint32_t epoch = g_win32_tick_epoch; /* Must read ticks after the epoch. Then we're guaranteed * that the ticks value we read is higher or equal to any * previous ones that lead to the writing of the epoch. */ ticks32 = timeGetTime(); /* We store the MSB of the current time as the LSB * of the epoch. Comparing these bits lets us detect when * the 32bit counter has wrapped so we can increase the * epoch. * * This will work as long as this function is called at * least once every ~24 days, which is half the wrap time * of a 32bit msec counter. I think this is pretty likely. * * Note that g_win32_tick_epoch is a process local state, * so the monotonic clock will not be the same between * processes. */ if ((ticks32 >> 31) != (epoch & 1)) { epoch++; g_win32_tick_epoch = epoch; } ticks = (uint64_t)ticks32 | ((uint64_t)epoch) << 31; } return ticks * 1000; } #elif defined PLATFORM_OSX #include #include #include int64_t xj_get_monotonic_time (void) { static mach_timebase_info_data_t timebase_info; if (timebase_info.denom == 0) { /* This is a fraction that we must use to scale * mach_absolute_time() by in order to reach nanoseconds. * * We've only ever observed this to be 1/1, but maybe it could be * 1000/1 if mach time is microseconds already, or 1/1000 if * picoseconds. Try to deal nicely with that. */ mach_timebase_info (&timebase_info); /* We actually want microseconds... */ if (timebase_info.numer % 1000 == 0) timebase_info.numer /= 1000; else timebase_info.denom *= 1000; /* We want to make the numer 1 to avoid having to multiply... */ if (timebase_info.denom % timebase_info.numer == 0) { timebase_info.denom /= timebase_info.numer; timebase_info.numer = 1; } else { /* We could just multiply by timebase_info.numer below, but why * bother for a case that may never actually exist... * * Plus -- performing the multiplication would risk integer * overflow. If we ever actually end up in this situation, we * should more carefully evaluate the correct course of action. */ mach_timebase_info (&timebase_info); /* Get a fresh copy for a better message */ fprintf(stderr, "Got weird mach timebase info of %d/%d.\n", timebase_info.numer, timebase_info.denom); } } return mach_absolute_time () / timebase_info.denom; } #else #include int64_t xj_get_monotonic_time (void) { struct timespec ts; clock_gettime (CLOCK_MONOTONIC, &ts); return (((int64_t) ts.tv_sec) * 1000000) + (ts.tv_nsec / 1000); } #endif xjadeo-0.8.10/src/xjadeo/main.c0000644000175000017500000011156613775352732013154 00000000000000/* xjadeo - jack video monitor main * * (C) 2006-2021 Robin Gareus * (C) 2006-2011 Luis Garrido * * 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. */ #include "xjadeo.h" #include // needed for PIX_FMT #include #include #include #include #include #include #ifndef EXIT_FAILURE #define EXIT_FAILURE 1 #endif #ifdef PLATFORM_OSX #include void osx_main (); void osx_shutdown(); #endif // configuration strings char const * const cfg_features = "" #define CFG_STRING "" #ifdef HAVE_LTC "LTC " #endif #ifdef JACK_SESSION "JACK-SESSION " #endif #ifdef HAVE_MQ "POSIX-MQueue " #elif defined HAVE_IPCMSG "IPC-MSG " #endif #ifdef HAVE_LIBLO "OSC " #endif ; char const * const cfg_midi = "" #ifndef HAVE_MIDI "*disabled*" #else /* have Midi */ # ifdef HAVE_JACKMIDI "jack-midi " # endif # ifdef ALSA_SEQ_MIDI "alsa-sequencer " # endif # ifdef HAVE_PORTMIDI "portmidi " # endif # ifdef ALSA_RAW_MIDI "alsa-raw " # endif #endif /* HAVE_MIDI */ ; char const * const cfg_displays = "" #if HAVE_GL "openGL " #endif #if HAVE_LIBXV "Xv " #endif #ifdef HAVE_SDL "SDL " #endif #if HAVE_IMLIB2 "X11/imlib2" # ifdef IMLIB2RGBA "(RGBA32) " # else "(RGB24) " # endif #endif #ifdef PLATFORM_OSX "OSX/quartz " #endif ; #ifndef CFG_COMPAT #define CFG_COMPAT "xjadeo1" #endif char cfg_compat[1024] = CFG_COMPAT; //------------------------------------------------ // Globals //------------------------------------------------ // Display loop /* int loop_flag: main xjadeo event loop * if loop_flag is set to 0, xjadeo will exit */ int loop_flag = 1; /* int loop_run: video update enable * if set to 0 no smpte will be polled and * no video frame updates are performed. */ int loop_run = 1; // Video Decoder int movie_width = 640; int movie_height = 360; int ffctv_width = 640; int ffctv_height = 360; float movie_aspect = 640.0 / 360.0; AVFormatContext *pFormatCtx = NULL; int videoStream = -1; AVCodecContext *pCodecCtx = NULL; AVFrame *pFrame = NULL; AVFrame *pFrameFMT = NULL; uint8_t *buffer = NULL; int render_fmt = AV_PIX_FMT_YUV420P; ///< needs to be set before calling movie_open /* Video File Info */ double duration = 1; double framerate = 1; int64_t frames = 1; int64_t file_frame_offset = 0; /* Option flags and variables */ char *current_file = NULL; char *smpte_offset = NULL; int64_t ts_offset = 0; int64_t userFrame = 0; // seek to this frame if jack and midi are N/A int64_t dispFrame = 0; // global strorage... = (SMPTE+offset) with boundaries to [0..movie_file_frames] int force_redraw = 0; int hide_mouse = 0; int interaction_override = 0; // disable some options. /* 1 (bit 0) : ignore 'ESC' quit key * 2 (bit 1) : igore window-manager close button * 4 (bit 2) : ignore OSX-Menu QUIT * 8 (bit 3) : ignore left-mouse click * 16(bit 4) : disable '+' '-' '{' '}' offset keys */ int want_quiet =0; /* --quiet, --silent */ int want_debug =0; /* -D --debug (hidden option) */ int want_verbose =0; /* --verbose */ int want_avverbose =0; /* --avverbose */ int want_genpts =0; /* --genpts */ int want_ignstart =0; /* --ignorefileoffset */ int want_nosplash =0; /* --nosplash */ int want_noindex =0; /* --noindex */ int start_ontop =0; /* --ontop // -a */ int start_fullscreen =0;/* --fullscreen // -s */ int want_letterbox =1; /* --letterbox -b */ int want_dropframes =0; /* --dropframes -N -- force using drop-frame timecode */ int want_autodrop =1; /* --nodropframes -n (hidden option) -- allow using drop-frame timecode */ int remote_en =0; /* --remote, -R */ int no_initial_sync =0; /* --nosyncsource, -J */ int jack_autostart =0; /* linked to no_initial_sync */ int osc_port =0; /* --osc, -O */ int mq_en =0; /* --mq, -Q */ char *ipc_queue = NULL; /* --ipc, -W */ int remote_mode =0; /* 0: undirectional ; >0: bidir * bitwise enable async-messages * so far only: * (1) notify timecode * (2) notify changed timecode */ #ifdef HAVE_MIDI char midiid[128] = "-2"; /* --midi # -1: autodetect -2: jack-transport, -3: none/userFrame */ int midi_clkconvert =0; /* --midifps [0:MTC|1:VIDEO|2:RESAMPLE] */ char *midi_driver = NULL; /* --mididriver */ #endif int have_dropframes =0; /* detected from MTC; TODO: force to zero if jack or user TC */ int jack_clkconvert =1; /* --jackfps - NOT YET IMPLEMENTED * [0:audio_frames_per_video_frame * 1:video-file] */ int use_jack = 1; #ifdef HAVE_LTC int use_ltc = 0; /* -l , --ltc */ #endif char *load_rc = NULL; char *load_movie = NULL; #ifdef JACK_SESSION char *jack_uuid = NULL; int jack_session_restore = 0; int js_winx = -1; int js_winy = -1; int js_winw = -1; int js_winh = -1; #endif int midi_clkadj =1; /* --midiclk */ int videomode = 0; // --vo - default: autodetect double delay = -1; // use file's FPS int keyframe_interval_limit = 100; // On screen display char OSD_fontfile[1024] = FONT_FILE; char OSD_text[128] = "xjadeo!"; char OSD_msg[128] = ""; char OSD_frame[48] = ""; char OSD_smpte[20] = ""; char OSD_nfo_tme[5][48] = {"", "", "", "", ""}; char OSD_nfo_geo[5][48] = {"", "", "", "", ""}; int OSD_mode = OSD_BOX; int OSD_fx = OSD_CENTER; int OSD_tx = OSD_CENTER; int OSD_sx = OSD_CENTER; int OSD_fy = 98; // percent int OSD_sy = 2; // percent int OSD_ty = 50; // percent // prototypes . int init_weak_jack(); static void usage (int status); static void printversion (void); static struct option const long_options[] = { {"avverbose", no_argument, 0, 'A'}, {"ontop", no_argument, 0, 'a'}, {"no-letterbox", no_argument, 0, 'b'}, {"midiclk", no_argument, 0, 'C'}, {"no-midiclk", no_argument, 0, 'c'}, {"debug", no_argument, 0, 'D'}, {"midi-driver", required_argument, 0, 'd'}, {"screen-fps", required_argument, 0, 'f'}, {"help", no_argument, 0, 'h'}, {"ignore-file-offset", no_argument, 0, 'I'}, {"no-file-offset", no_argument, 0, 'I'}, {"info", required_argument, 0, 'i'}, {"no-initial-sync", no_argument, 0, 'J'}, {"keyframe-limit", required_argument, 0, 'K'}, {"ltc", no_argument, 0, 'l'}, {"midifps", required_argument, 0, 'M'}, {"midi", required_argument, 0, 'm'}, {"drop-frames", no_argument, 0, 'N'}, {"no-drop-frames", no_argument, 0, 'n'}, #ifdef HAVE_LIBLO {"osc", required_argument, 0, 'O'}, #endif {"offset", required_argument, 0, 'o'}, {"genpts", no_argument, 0, 'P'}, {"mq", no_argument, 0, 'Q'}, {"quiet", no_argument, 0, 'q'}, {"silent", no_argument, 0, 'q'}, {"remote", no_argument, 0, 'R'}, #ifdef JACK_SESSION {"rc", required_argument, 0, 'r'}, #endif {"no-splash", no_argument, 0, 'S'}, {"fullscreen", no_argument, 0, 's'}, {"ttf-font", required_argument, 0, 'T'}, #ifdef JACK_SESSION {"uuid", required_argument, 0, 'U'}, #endif {"version", no_argument, 0, 'V'}, {"verbose", no_argument, 0, 'v'}, {"ipc", required_argument, 0, 'W'}, {"videomode", required_argument, 0, 'x'}, {"vo", required_argument, 0, 'x'}, {"osc-doc", no_argument, 0, 0x100}, {"no-index", no_argument, 0, 0x101}, {NULL, 0, NULL, 0} }; /* Set all the option flags according to the switches specified. Return the index of the first non-option argument. */ static int decode_switches (int argc, char **argv) { int c; while ((c = getopt_long (argc, argv, "A" /* avverbose */ "a" /* always on top */ "b" /* letterbox */ "C" /* --midiclk */ "c" /* --no-midiclk */ "D" /* debug */ "d:" /* midi driver */ "F:" /* file FPS */ "f:" /* screen fps */ "h" /* help */ "I" /* ignorefileoffset */ "i:" /* info - OSD-mode */ "J" /* no jack / no-initial sync */ "K:" /* keyframe limit */ "l" /* --ltc */ "M:" /* midi clk convert */ "m:" /* midi interface */ "N" /* --dropframes */ "n" /* --nodropframes */ "O:" /* --osc */ "o:" /* offset */ "P" /* genpts */ "Q" /* POSIX rt-message queues */ "q" /* quiet or silent */ "R" /* stdio remote control */ "r:" /* --rc */ "S" /* nosplash */ "s" /* start in full-screen mode */ "T:" /* ttf-font */ #ifdef JACK_SESSION "U:" /* --uuid */ #endif "V" /* version */ "v" /* verbose */ "W:" /* IPC message queues */ "x:" /* video-mode */ , long_options, (int *) 0)) != EOF) { switch (c) { case 'A': want_avverbose = !remote_en; break; case 'a': start_ontop = 1; break; case 'b': want_letterbox = 0; break; case 'D': want_debug = 1; break; case 'f': if(atof(optarg) > 0) { delay = 1.0 / atof(optarg); } else { delay = -1; // use file-framerate } break; case 'h': usage (0); break; case 'I': want_ignstart = 1; break; case 'i': OSD_mode = atoi(optarg) & (OSD_FRAME | OSD_SMPTE); if (!want_quiet) printf("On screen display: [%s%s%s]\n", (!OSD_mode) ? "off": (OSD_mode & OSD_FRAME) ? "frames":"", (OSD_mode & (OSD_FRAME | OSD_SMPTE)) == (OSD_FRAME | OSD_SMPTE) ? " " : "", (OSD_mode & OSD_SMPTE) ? "SMPTE" : "" ); break; case 'J': no_initial_sync = 1; break; case 'K': keyframe_interval_limit = atoi(optarg); if (keyframe_interval_limit < 10) keyframe_interval_limit = 10; if (keyframe_interval_limit > 5000) keyframe_interval_limit = 5000; if (!want_quiet) printf("Set Keyframe Limit to: %d\n", keyframe_interval_limit); break; case 'l': #ifdef HAVE_LTC use_ltc = 1; #else printf("This version of xjadeo is compiled without LTC support\n"); #endif break; case 'N': want_dropframes = 1; break; case 'n': want_autodrop = 0; break; case 'O': #ifdef HAVE_LIBLO osc_port = atoi(optarg); if (osc_port < 0) osc_port = 0; if (osc_port > 65535) osc_port = 65535; #else printf("This version of xjadeo is compiled without OSC support\n"); #endif break; case 'o': smpte_offset = strdup(optarg); break; case 'P': want_genpts = 1; break; case 'Q': mq_en = 1; break; case 'q': want_quiet = 1; want_verbose = 0; want_avverbose = 0; break; case 'R': remote_en = 1; want_quiet = 1; want_verbose = 0; want_avverbose = 0; break; case 'r': if (load_rc) free(load_rc); load_rc = strdup(optarg); break; case 'S': want_nosplash = 1; break; case 's': start_fullscreen = 1; break; case 'T': strcpy(OSD_fontfile, optarg); break; case 'U': #ifdef JACK_SESSION if (jack_uuid) free(jack_uuid); jack_uuid = strdup(optarg); jack_autostart = 1; #endif break; case 'V': printversion(); exit(0); case 'W': if (ipc_queue) free(ipc_queue); ipc_queue = strdup(optarg); break; case 'v': want_verbose = !remote_en; break; case 'x': videomode = atoi(optarg); if (videomode == 0) videomode = parsevidoutname(optarg); break; #ifdef HAVE_MIDI case 'C': midi_clkadj = 1; break; case 'c': midi_clkadj = 0; break; case 'd': if (midi_driver) free(midi_driver); midi_driver = strdup(optarg); break; case 'M': midi_clkconvert = atoi(optarg); break; case 'm': strncpy(midiid,optarg,sizeof(midiid)); midiid[(sizeof(midiid)-1)]=0; break; #else case 'C': case 'c': case 'd': case 'M': case 'm': printf("This version of xjadeo is compiled without MIDI support\n"); break; #endif case 0x100: xjosc_documentation (); exit (0); break; case 0x101: want_noindex = 1; break; default: usage (EXIT_FAILURE); break; } } return optind; } static void usage (int status) { printf ("xjadeo - the X Jack Video Monitor\n\n"); printf ("Usage: xjadeo [ OPTIONS ] [ video-file ]\n\n"); printf ("\n\n" "Xjadeo is a software video player that displays a video clip synchronized to an\n" "external time source (MTC, LTC, JACK transport).\n" "\n" "Xjadeo is intended for soundtrack composition, video monitoring and useful for\n" "any task that requires to synchronizing movie frames with audio events.\n" "\n" /*-------------------------------------------------------------------------------|" */ "Options:\n" " -A, --avverbose Display verbose video decoder messages.\n" " -a, --ontop Keep xjadeo window on top of other applications.\n" " -b, --no-letterbox Scale movie to fit window. Without this option a\n" " letterbox is used to retain the aspect ratio.\n" #if 0 // hidden option " -C, --midiclk Use MIDI quarter frames (default)\n" " -c, --no-midiclk Ignore MTC quarter frames.\n" #endif " -D, --debug Print development related information.\n" " -d , --midi-driver \n" " Specify midi driver to use. Run 'xjadeo -V' to\n" " list supported driver(s). is case insensitive\n" " and can be shortened to the first unique name.\n" " eg '-d j' for jack, '-d alsa-r' for alsa-raw\n" " -f , --screen-fps \n" " Desired refresh rate of the video display in frames\n" " If this value is equal or less than zero, xjadeo\n" " will use the FPS of the video file as its update\n" " frequency (which is the default).\n" " Note: This does not affect screen/vblank sync.\n" " Synchronizing to the screen's vertical refresh is\n" " hardware dependent (and always used if available).\n" /*-------------------------------------------------------------------------------|" */ " -h, --help Display this help and exit.\n" " -I, --ignore-file-offset\n" " This option is only useful for video files with a\n" " start offset, such as split vob files.\n" " Per default xjadeo honors offsets specified in the\n" " video file header. This option allows one to\n" " override (and subtract) this offset to align the\n" " start of the file with timecode 00:00:00:00.\n" " -i , --info Display time information using the OSD (on screen \n" " display).\n" " 0:Off, %d: Frame number, %d: Timecode, %d: both.\n" "", OSD_FRAME,OSD_SMPTE,OSD_FRAME|OSD_SMPTE); // :) printf ("" /* take a breath */ " -J, --no-initial-sync Do not connect to JACK, nor use any other sync\n" " source at application start.\n" " -K , --keyframe-limit \n" " Specify a maximum key-frame interval limit.\n" " With most video codecs, a video frame is the sum\n" " of a key-frame plus differences from the closest\n" " key-frame.\n" " For non continuous playback and random seeks\n" " xjadeo will have to go back to a key-frame and\n" " decode sequentially to the target frame.\n" " This can be quite CPU intense and hence the max.\n" " sequential decoding sequence is limited. By\n" " default to 100 frames\n" " For fast frame accurate seeks, it is highly\n" " recommended to transcode the video file using a\n" " codec where every frame is a key-frame (eg. mjpeg),\n" " and the video consists only of \"intra\" frames.\n" " (the key-frame interval is sometimes also called\n" " \"group of pictures\"s or GOP).\n" /*-------------------------------------------------------------------------------|" */ " -l, --ltc Sync to Linear Time Code (audio jack).\n" " -M , --midifps \n" " Specify MTC conversion mode:\n" "\n" " 0: use frame-rate from MTC clock (default)\n" " 1: use video file's fps\n" " 2: \"resample\" file's fps / MTC \n" " -m , --midi \n" " Use MTC as sync source\n" " The argument is midi driver specific:\n" "\n" " jack-midi: specify a midi port name to connect to,\n" " or \"\" to not auto connect.\n" " alsa-seq: specify ID to connect to (-1: none)\n" " eg. -m ardour or -m 80 \n" " alsa-raw: specify hardware device\n" " eg. -m hw:1,0 or -m 1 \n" " portmidi: numeric id; -1: autodetect\n" " a value > -1 specifies the port number to use.\n" " use '-v -m -1' to list midi ports.\n" #if 0 // - undocumented /hidden/ options " -N , --drop-frames Force the SMPTE converter to use the drop frames\n" " algorithm. (Frame dropping is only useful in \n" " combination with a 29fps MIDI time source.\n" " MTC in 29.97 frame drop format is automatically\n" " detected and it is illegal to use this algorithm\n" " for other frame-rates.) DO NOT USE THIS OPTION,\n" " unless you really know what you are doing.\n" " -n , --no-drop-frames Parse MTC as announced, but do not use frame drop\n" " algorithm for OSD - useful for debugging\n" #endif /*-------------------------------------------------------------------------------|" */ " -O , --osc Listen for OSC messages on the given port.\n" " Xjadeo can be remote controlled using Open Sound\n" " Control. For a list of available commands, please\n" " see the source code or online documentation.\n" " -o , --offset \n" " Time offset video from timecode source. This allows\n" " one to offset the video playback a certain number\n" " of (video) frames relative to the time source.\n" " Positive and negative values are permitted.\n" " The offset van be specified either as integer frame\n" " number of as colon separated timecode.\n" #if 0 " -P , --genpts This option passed on to ffmpeg. It can be used to\n" " generate "presentation timestamps" if they're\n" " missing or invalid in a given file.\n" " Note that this may requires parsing future frames\n" " and impact performance\n" #endif " --osc-doc Print available OSC commands and exit.\n" " -Q, --mq Enable POSIX realtime message queues.\n" " This sets up a communication channel for remote,\n" " intended to be used with `xjremote`.\n" " -q, --quiet, --silent inhibit usual output.\n" " -R, --remote Enable interactive remote control mode\n" " using standard I/O. This option implies non-verbose\n" " and quiet as the terminal is used for interaction.\n" " -r , --rc Specify a custom configuration file to load.\n" " -S, --no-splash Skip the on screen display startup sequence.\n" " -s, --fullscreen Start xjadeo in full screen mode.\n" " -T , --ttf-file \n" " path to .ttf font for on screen display\n" " -U, --uuid specify JACK SESSION UUID.\n" " -V, --version Print version information and exit.\n" " -W , --ipc \n" " Setup IPC message queues for remote control\n" " Inter Process Communication is used by `xjremote`\n" " on OSX and other platforms that do not support\n" " realtime message queues\n" " -v, --verbose print more information\n" " -x , --vo , --videomode \n" " Select a video output mode (default: 0: autodetect)\n" " A value of -1 lists the available mode and exits\n" "\n"); printf ("" "Synchronization Sources:\n" " JACK: JACK transport\n" " LTC: Linear/Longitudinal Time Code - via JACK audio\n" " MTC: MIDI Time Code via JACK MIDI\n" " MTC: MIDI Time Code via ALSA sequencer (Linux only)\n" " MTC: MIDI Time Code via ALSA raw devices (Linux only)\n" " MTC: MIDI Time Code via portmidi (OSX, Windows)\n" " Manual: Remote controlled manual seeks.\n" "\n" "If neither -m nor -l options are given, xjadeo synchronizes to jack transport\n" "by default.\n" "\n"); /*-------------------------------------------------------------------------------|" */ printf ("" "Video Codecs and Formats:\n" "Xjadeo uses ffmpeg to decode video files, so a wide range of formats and codecs\n" "are supported. Note however that not all the codecs support reliable seeking.\n" "It is highly recommended to transcode the video file into a suitable\n" "format/codec. The recommend combination is avi/mjpeg.\n" "e.g. ffmpeg -i input-file.xxx -an -vcodec mjpeg output-file.avi\n" "This creates from your input-file.xxx an AVI mjpeg encoded video file without\n" "sound, and no compression between frames (motion jpeg - every frame is a\n" "key-frame). You may want also to shrink the size of the file by scaling down\n" "its geometry. This uses fewer system resources for decoding and display and\n" "leaves more space on the screen for your audio software.\n" "see ffmpeg -s x option and read up on the ffmpeg man page\n" "for further options. e.g. -qscale 0 to retain image quality.\n" "\n"); /*-------------------------------------------------------------------------------|" */ printf ("" "Configuration Files:\n" "At startup xjadeo reads the following resource configuration files in the\n" "following order:\n" " system wide: /etc/xjadeorc or /usr/local/etc/xjadeorc\n" " old user config: $HOME/.xjadeorc\n" " user config: $XDM_CONFIG_HOME/xjadeo/xjadeorc (usually $HOME/.config/)\n" " on OSX: $HOME/Library/Preferences/xjadeorc\n" " on Windows: $HOMEDRIVE$HOMEPATH\\xjadeorc\n" " and $HOMEDRIVE$HOMEPATH\\Local Settings\\xjadeorc\n" " (usually C:\\Documents and Settings\\\\)\n" " project specific: $PWD/xjadeorc\n" "Every line in the configuration file is a KEY=VALUE pair. If the first\n" "character on a line is either is a literal '#' or ';', the line is ignored.\n" "KEYS are case insensitive. Boolean values are specified as 'yes' or 'no'.\n" "As for a list of available keys, please see the example configuration file,\n" "which is available in the documentation folder of the source code.\n" "\n" "If xjadeo is compiled with jack session support, it will save its current\n" "state as config file and pass it as handle to the jack session manager.\n" "\n"); /*-------------------------------------------------------------------------------|" */ printf ("" "User Interaction:\n" "The xjadeo window offers a right-click context menu (except on OSX where the\n" "application has a main menu bar) which provides easy access to common\n" "functionality.\n" "On OSX and Windows this menu offers a file open dialog to change the video file\n" "that is being monitored. On Linux new files can be loaded by dragging the file\n" "onto the window itself.\n" "In addition xjadeo reacts to key presses. The following shortcuts are defined:\n" " 'Esc' Close window and quit\n" " 'a' Toggle always-on-top mode\n" " 'b' Toggle On Screen Display black border\n" " 'Shift+C' Clear all OSD display messages.\n" " 'f' Toggle full screen mode\n" " 'g' Toggle On Screen file geometry display\n" " 'i' Toggle On Screen file time info display\n" " 'l' Toggle letterbox scaling\n" " 'm' Toggle mouse-cursor visibility\n" " 'o' Cycle though offset display modes.\n" " 'p' Swap OSD timecode/frame number position.\n" " 's' Toggle On Screen sync source timecode display\n" " 'v' Cycle On Screen VTS/frame number display\n" " 'x' Toggle seek-bar (experimental)\n" " '\\' Reset timecode offset to zero\n" " '=' Increase timecode offset by one frame\n" " '-' Decrease timecode offset by one frame\n" " '+' Increase timecode offset by one second\n" " '_' Decrease timecode offset by one second\n" " '{' Decrement timecode offset by one minute\n" " '}' Increment timecode offset by one minute\n" " ',' Resize window to match aspect ratio\n" " '.' Resize window to original video size\n" " '<' Decrease window size by 20%%\n" " '>' Increase window size by 20%%\n" " 'backspace' Return jack transport to 00:00:00:00\n" " 'space' Toggle jack transport play/pause\n" #ifdef CROPIMG " '[' Shift cropped image 2px to the left.\n" " ']' Shift cropped image 2px to the right.\n" #endif #if 1 " 'e' Show color equalizer (x11/imlib and XV only)\n" " 'Shift+E' Reset color equalizer (x11/imlib and XV only)\n" " '0-9' Change color equalization (x11/imlib and XV only)\n" " 'Shift+1-4' Fine tune color equalization (x11/imlib and XV only)\n" " brightness:1+2, contrast:3+4, gamma:5+6, saturation:7+8\n" " hue:9+0. XV color balance is hardware dependent.\n" "\n" "Note that it is possible to disable certain features using the remote control.\n" "A Host can take control of certain aspects e.g. offset or disallow closing the\n" "video monitor, except by host-provided means.\n" #endif /*-------------------------------------------------------------------------------|" */ "\n" "Report bugs at \n" "Website: \n" ); exit (status); } static void printversion (void) { printf ("xjadeo version %s\n\n", VERSION); #ifdef SUBVERSION if (strlen(SUBVERSION)>0 && strcmp(SUBVERSION, "exported")) { printf (" built from: scm-%s\n", SUBVERSION); } #endif printf (" compiled with: AVFORMAT=0x%x AVCODEC=0x%x AVUTIL:0x%x\n", LIBAVFORMAT_VERSION_INT, LIBAVCODEC_VERSION_INT, LIBAVUTIL_VERSION_INT); printf (" configuration: [ %s]\n", cfg_features); printf (" MTC/MIDI: [ %s]\n", cfg_midi); printf (" Display(s): [ %s]\n", cfg_displays); printf ("\n" "Copyright (C) GPL 2006-2021 Robin Gareus \n" "Copyright (C) GPL 2006-2011 Luis Garrido \n" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"); } static int stat_osd_fontfile(void) { #ifdef HAVE_FT struct stat s; if (stat(OSD_fontfile, &s) == 0) { if (want_verbose) fprintf(stdout,"OSD font file: %s\n", OSD_fontfile); return 0; } else { if (want_verbose) fprintf(stdout,"font: '%s' was not found.\n", OSD_fontfile); return 1; } #else return 0; #endif } //-------------------------------------------- // Main //-------------------------------------------- static void clean_up (int status) { if(remote_en) close_remote_ctrl(); #ifdef HAVE_MQ if(mq_en) close_mq_ctrl(); #elif defined HAVE_IPCMSG if(ipc_queue) { close_ipcmsg_ctrl(); free(ipc_queue); } #endif xjosc_shutdown(); close_window(); close_movie(); #ifdef HAVE_MIDI if (midi_driver) free(midi_driver); if (midi_connected()) midi_close(); else #endif #ifdef HAVE_LTC if (ltcjack_connected()) close_ltcjack(); else #endif close_jack(); free_freetype(); if (smpte_offset) free(smpte_offset); if (load_rc) free(load_rc); if (load_movie) free(load_movie); x_fib_save_recent (x_fib_recent_file ("xjadeo")); x_fib_free_recent (); if (!want_quiet) fprintf(stdout, "\nBye!\n"); exit(status); } void catchsig (int sig) { #ifndef PLATFORM_WINDOWS signal(SIGHUP, catchsig); /* reset signal */ signal(SIGINT, catchsig); #endif if (!want_quiet) fprintf(stdout,"\n CAUGHT SIGINT - shutting down.\n"); loop_flag=0; clean_up(1); exit(1); } static void *xjadeo (void *arg) { open_window(); // try fallbacks if window open failed in autodetect mode if (videomode==0 && getvidmode() == VO_AUTO) { // re-use cmd-option variable as counter. if (want_verbose) printf("trying video driver fallbacks.\n"); while (getvidmode() == VO_AUTO) { // check if window is open. videomode++; int tv=try_next_vidoutmode(videomode); if (tv<0) break; // no videomode found! if (want_verbose) printf("trying videomode: %i: %s\n",videomode,vidoutname(videomode)); if (tv==0) continue; // this mode is not available render_fmt = vidoutmode(videomode); open_window(); } } if (getvidmode() == VO_AUTO) { fprintf(stderr,"Could not open display.\n"); if(!remote_en) { // && !mq_en && !ipc_queue) /* TODO: allow windowless startup with MQ ?! */ #ifdef HAVE_MIDI if (midi_driver) free(midi_driver); if (midi_connected()) midi_close(); else #endif #ifdef HAVE_LTC if (ltcjack_connected()) close_ltcjack(); else #endif close_jack(); exit(1); } } /* setup sync source */ #ifdef HAVE_MIDI midi_choose_driver(midi_driver); #ifdef JACK_SESSION if (jack_uuid && !strcmp(midi_driver_name(), "JACK-MIDI")) { // don't auto-connect jack-midi on session restore. if (atoi(midiid) == 0) midiid[0]='\0'; } #endif #endif if (no_initial_sync #ifdef JACK_SESSION && !jack_uuid #endif ) { if (!(remote_en || mq_en || ipc_queue || osc_port)) { fprintf(stderr, "Warning: There is no Initial sync-source, and no remote-control enbled to\n" "change the sync source. Do not use '-J' option (unless you're testing).\n"); } } #ifdef HAVE_MIDI else if (atoi(midiid) >= -1 ) { if (!want_quiet) printf("using MTC as sync-source.\n"); midi_open(midiid); } else #endif #ifdef HAVE_LTC if (use_ltc) { if (!want_quiet) printf("using LTC as sync source.\n"); open_ltcjack(NULL); } else #endif if (use_jack) { if (!want_quiet) printf("using JACK-transport as sync source.\n"); open_jack(); } if (!no_initial_sync) { jack_autostart = 1; } #ifdef HAVE_MQ if(mq_en) open_mq_ctrl(); #elif defined HAVE_IPCMSG if(ipc_queue) open_ipcmsg_ctrl(ipc_queue); #endif if(remote_en) open_remote_ctrl(); /* MAIN LOOP */ event_loop(); #ifdef PLATFORM_OSX osx_shutdown(); #endif return NULL; } #if defined PLATFORM_WINDOWS static FILE* pStdOut = 0; static FILE* pStdErr = 0; static BOOL bConsole; static HANDLE hStdOut; static int IsAConsolePort (HANDLE handle) { DWORD mode; return (GetConsoleMode(handle, &mode) != 0); } static void console_madness_begin () { bConsole = AttachConsole(ATTACH_PARENT_PROCESS); hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); /* re-attach to the console so we can see 'printf()' output etc. */ if ((bConsole) && (IsAConsolePort(hStdOut))) { pStdOut = freopen( "CONOUT$", "w", stdout ); pStdErr = freopen( "CONOUT$", "w", stderr ); } } static void console_madness_end () { if (pStdOut) { fclose (pStdOut); } if (pStdErr) { fclose (pStdErr); } if (bConsole) { /* Detach and free the console from our application, and line feed */ INPUT_RECORD input_record; input_record.EventType = KEY_EVENT; input_record.Event.KeyEvent.bKeyDown = TRUE; input_record.Event.KeyEvent.dwControlKeyState = 0; input_record.Event.KeyEvent.uChar.UnicodeChar = VK_RETURN; input_record.Event.KeyEvent.wRepeatCount = 1; input_record.Event.KeyEvent.wVirtualKeyCode = VK_RETURN; input_record.Event.KeyEvent.wVirtualScanCode = MapVirtualKey( VK_RETURN, 0 ); DWORD written = 0; WriteConsoleInput( GetStdHandle( STD_INPUT_HANDLE ), &input_record, 1, &written ); FreeConsole(); } } #endif #if defined PLATFORM_WINDOWS && defined USE_WINMAIN #ifdef HAVE_SDL #include #endif int xjadeo_main (int argc, char **argv); #include int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int nCmdShow) { _fmode = O_BINARY; LPWSTR *szArglist; int nArgs; int i; int argc = 0; char **argv = NULL; szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); if (NULL == szArglist) { return -1; } argv = alloca(sizeof(char*) * (nArgs + 2)); if (!argv) { return -1; } for (i = 0; i < nArgs; ++i) { int argChars = wcslen (szArglist[i]); argv[argc] = alloca(sizeof(char) * (argChars + 1)); if (!argv[argc]) continue; wcstombs (argv[argc++], szArglist[i], argChars + 1); } argv[argc] = 0; #ifdef HAVE_SDL SDL_SetModuleHandle(hInst); #endif return xjadeo_main (argc, argv); } int xjadeo_main (int argc, char **argv) #else int main (int argc, char **argv) #endif { int i; char *movie; #ifdef PLATFORM_WINDOWS console_madness_begin (); #endif xjadeorc(); // read config files - default values before parsing cmd line. #ifdef PLATFORM_OSX if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) { char **gArgv = (char **) malloc(sizeof (char *) * argc); int i; gArgv[0] = argv[0]; for (i=1;i 0) xjosc_initialize(osc_port); open_movie(movie); init_moviebuffer(); #ifdef PLATFORM_OSX // Cocoa can only handle UI events in the main thread since // various OSX Frameworks hardcode pthread_main_np for their use. // Oh well, fight hacks with hacks. pthread_t xjadeo_thread; if (pthread_create (&xjadeo_thread, NULL, xjadeo, NULL)) { return -1; } osx_main(); pthread_join (xjadeo_thread, NULL); #else xjadeo(NULL); #endif clean_up(0); #ifdef PLATFORM_WINDOWS console_madness_end (); #endif return (0); } xjadeo-0.8.10/src/xjadeo/remote.h0000644000175000017500000000500012620454615013500 00000000000000void xapi_printversion(void *d); void xapi_open(void *d); void xapi_close(void *d); void xapi_close_window(void *d); void xapi_set_videomode(void *d); void xapi_open_window(void *d); void xapi_pvideomode(void *d); void xapi_lvideomodes(void *d); void xapi_pletterbox(void *d); void xapi_sletterbox(void *d); void xapi_pwinpos(void *d); void xapi_pwinsize(void *d); void xapi_saspect (void *d); void xapi_swinsize(void *d); void xapi_ontop(void *d); void xapi_fullscreen(void *d); void xapi_pontop(void *d); void xapi_pfullscreen(void *d); void xapi_mousepointer(void *d); void xapi_poverride(void *d); void xapi_soverride(void *d); void xapi_swinpos(void *d); void xapi_exit(void *d); void xapi_quit(void *d); void xapi_pfilename(void *d); void xapi_pduration(void *d); void xapi_pframerate(void *d); void xapi_pframes(void *d); void xapi_poffset(void *d); void xapi_ptimescale(void *d); void xapi_ploop(void *d); void xapi_pseekmode (void *d); void xapi_sseekmode (void *d); void xapi_pmwidth(void *d); void xapi_pmheight(void *d); void xapi_soffset(void *d); void xapi_stimescale(void *d); void xapi_sloop(void *d); void xapi_sreverse(void *d); void xapi_pposition(void *d); void xapi_psmpte(void *d); void xapi_seek(void *d); void xapi_pfps(void *d); void xapi_sfps(void *d); void xapi_sframerate(void *d); void xapi_jack_status(void *d); void xapi_ltc_status(void *d); void xapi_open_ltc(void *d); void xapi_close_ltc(void *d); void xapi_open_jack(void *d); void xapi_close_jack(void *d); void xapi_osd_smpte(void *d); void xapi_osd_frame(void *d); void xapi_osd_off(void *d); void xapi_osd_on(void *d); void xapi_osd_text(void *d); void xapi_osd_font(void *d); void xapi_osd_nobox(void *d); void xapi_osd_box(void *d); void xapi_osd_avail(void *d); void xapi_osd_mode(void *d); void xapi_posd(void *d); void xapi_psync(void *d); void xapi_osd_pos(void *d); void xapi_midi_status(void *d); void xapi_smididriver(void *d); void xapi_open_midi(void *d); void xapi_reopen_midi(void *d); void xapi_close_midi(void *d); void xapi_detect_midi(void *d); void xapi_pmidilibrary (void *d); void xapi_pmidiclk(void *d); void xapi_smidiclk(void *d); void xapi_pmidisync(void *d); void xapi_smidisync(void *d); void xapi_bidir_alloff(void *d); void xapi_bidir_loop(void *d); void xapi_bidir_noloop(void *d); void xapi_bidir_frame(void *d); void xapi_bidir_noframe(void *d); void xapi_bidir_settings(void *d); void xapi_bidir_nosettings(void *d); void xapi_bidir_keyboard(void *d); void xapi_bidir_nokeyboard(void *d); void xapi_ping(void *d); void xapi_null(void *d); xjadeo-0.8.10/src/xjadeo/xjadeo.h0000644000175000017500000001671412624327117013475 00000000000000/* shared header file for xjadeo */ #ifndef XJADEO_H #include #include #include #include /* uint8_t */ #include /* memcpy */ #include #ifdef HAVE_CONFIG_H # include #endif #ifdef PLATFORM_WINDOWS # include # include # include # define vsnprintf _vsnprintf # define snprintf _snprintf #else # include #endif #include #include #include #ifndef AV_PIX_FMT_BGRA32 #define AV_PIX_FMT_BGRA32 AV_PIX_FMT_BGRA #endif #ifndef AV_PIX_FMT_RGBA32 #define AV_PIX_FMT_RGBA32 AV_PIX_FMT_RGBA #endif /* xjadeo seek modes */ enum { SEEK_ANY, ///< directly seek to givenvideo frame SEEK_KEY, ///< seek to next keyframe after given frame. SEEK_CONTINUOUS ///< seek to keframe before this frame and advance to current frame. }; /* display modes */ enum VideoModes { VO_AUTO = 0, VO_GL, VO_XV, VO_SDL, VO_X11, VO_MAC, }; /* freetype - On screen display */ enum { OSD_LEFT=-1, OSD_CENTER=-2, OSD_RIGHT=-3 }; ///< use positive values as percent or pixel. /* override bitwise flags -- see xjadeo.h * 0x0001 : ignore ESC, menu > exit / quit * 0x0002 : ignore "window closed by WM" / quit * 0x0004 : (osx only) menu-exit / quit * 0x0008 : ignore mouse-button 1 -- resize * 0x0010 : no A/V offset control with keyboard * 0x0020 : don't use jack-session * 0x0040 : disable jack transport control * 0x0080 : disallow sync source change (OSX menu) * 0x0100 : disallow file open (OSX menu, X11 DnD) */ enum { OVR_QUIT_KEY = 0x0001, OVR_QUIT_WMG = 0x0002, OVR_QUIT_OSX = 0x0004, OVR_MOUSEBTN = 0x0008, // unused OVR_AVOFFSET = 0x0010, OVR_JSESSION = 0x0020, OVR_JCONTROL = 0x0040, OVR_MENUSYNC = 0x0080, OVR_LOADFILE = 0x0100 }; /* async notficy */ enum { NTY_FRAMELOOP = 0x01, NTY_FRAMECHANGE = 0x02, NTY_SETTINGS = 0x04, NTY_KEYBOARD = 0x08 }; #define OSD_FRAME (0x0001) #define OSD_SMPTE (0x0002) #define OSD_VTC (0x0200) #define OSD_EQ (0x0008) #define OSD_OFFS (0x0010) #define OSD_OFFF (0x0020) #define OSD_TEXT (0x0040) #define OSD_MSG (0x0080) #define OSD_BOX (0x0100) #define OSD_NFO (0x0400) #define OSD_IDXNFO (0x0800) #define OSD_POS (0x1000) #define OSD_GEO (0x2000) #define OSD_VTCOOR (0x4000) #ifdef TTFFONTFILE # define FONT_FILE TTFFONTFILE #else # define FONT_FILE SHAREDIR "/xjadeo/ArdourMono.ttf" #endif /* define maximum size for OSD in pixel */ #ifdef HAVE_FT # define ST_WIDTH (1920) # define ST_HEIGHT (128) #else # define ST_WIDTH (0) # define ST_HEIGHT (0) #endif #define ST_PADDING (10) /* X11 only - but defined here since needed in remote.c and display.c * EWMH state actions, see http://freedesktop.org/Standards/wm-spec/index.html#id2768769 */ #define _NET_WM_STATE_REMOVE 0 /* remove/unset property */ #define _NET_WM_STATE_ADD 1 /* add/set property */ #define _NET_WM_STATE_TOGGLE 2 /* toggle property */ /* prototypes of fn's in display.c */ void newsourcebuffer (void); void close_window(void); void open_window(void); int vidoutmode(int user_req); int parsevidoutname (char *arg); int vidoutsupported (int i); int getvidmode (void); const char *vidoutname (int i); int try_next_vidoutmode(int user_req); void splash (uint8_t *mybuffer); void render_buffer (uint8_t *mybuffer); void handle_X_events (void); void Xresize (unsigned int x, unsigned int y); void Xfullscreen (int a); void Xmousepointer (int a); void Xletterbox (int a); void Xontop (int a); void Xgetsize (unsigned int *x, unsigned int *y); void Xposition (int x, int y); void Xgetpos (int *x, int *y); int Xgetontop (void); int Xgetfullscreen (void); int Xgetletterbox (void); int Xgetmousepointer (void); void XCresize_percent (float p); void XCresize_aspect (int relscale); void XCresize_scale (int relscale); void XCtimeoffset (int mode, unsigned int charcode); /* remote.c */ void exec_remote_cmd (char *cmd); void close_remote_ctrl (void) ; void open_remote_ctrl (void); void close_mq_ctrl (void) ; void open_mq_ctrl (void); void close_ipcmsg_ctrl (void) ; int open_ipcmsg_ctrl (const char *); int remote_read_mq(void); int remote_read_ipc(void); int remote_read_io(void); #ifdef PLATFORM_WINDOWS int remote_read_h(void); #endif void remote_printf(int val, const char *format, ...); void remote_notify(int mode, int rv, const char *format, ...); int remote_fd_set(fd_set *fd); /* xjadeo.c */ void display_frame(int64_t timestamp, int force_update); int open_movie(char* file_name); int have_open_file (); int close_movie(); void avinit (void); void init_moviebuffer(void); void event_loop(void); size_t video_buffer_size(); /* common_jack.c */ int xj_init_jack(void *client_pointer, const char *client_name); void xj_close_jack (void *client_pointer); void xj_shutdown_jack (); const char *xj_jack_client_name(); /* common.c */ void ui_seek_cont (); void ui_seek_any (); void ui_seek_key (); void INT_sync_to_jack(int remote_msg); void INT_sync_to_ltc(char *port, int remote_msg); void ui_sync_none (); void ui_sync_manual (float percent); void ui_sync_to_jack (); void ui_sync_to_ltc (); void ui_sync_to_mtc_jack (); void ui_sync_to_mtc_portmidi (); void ui_sync_to_mtc_alsaraw (); void ui_sync_to_mtc_alsaseq (); void ui_osd_clear(); void ui_osd_offset_cycle(); void ui_osd_offset_tc(); void ui_osd_offset_fn(); void ui_osd_offset_none(); void ui_osd_tc(); void ui_osd_fn(); void ui_osd_box(); void ui_osd_fileinfo(); void ui_osd_permute (); void ui_osd_vtc_fn (); void ui_osd_vtc_tc (); void ui_osd_vtc_off (); void ui_osd_pos(); void ui_osd_geo(); void ui_osd_outofrange (); enum SyncSource { SYNC_JACK = 0, // used in display_x_dialog.c SYNC_LTC, SYNC_MTC_JACK, SYNC_MTC_PORTMIDI, SYNC_MTC_ALSASEQ, SYNC_MTC_ALSARAW, SYNC_NONE }; enum SyncSource ui_syncsource(); /* jack.c function prototypes */ int64_t jack_poll_frame (uint8_t *rolling); void open_jack(void ); void close_jack(void); int jack_connected(void); void jackt_rewind(); void jackt_start(); void jackt_stop(); void jackt_toggle(); /* ltc-jack.c function prototypes */ int64_t ltc_poll_frame (void); void open_ltcjack(char *autoconnect); void close_ltcjack(void); int ltcjack_connected(void); /* smpte.c prototypes */ int64_t smptestring_to_frame (char *str); int frame_to_smptestring(char *smptestring, int64_t frame, uint8_t add_sign); int64_t smpte_to_frame(int type, int f, int s, int m, int h, int overflow); /* midi.c function prototype */ int midi_connected(void); const char *midi_driver_name(); #ifdef HAVE_MIDI int64_t midi_poll_frame (void); void midi_open(char *midiid); void midi_close(void); int midi_choose_driver(const char *); #endif /* xjosc.c */ int xjosc_initialize(int osc_port); void xjosc_shutdown(void); int xjosc_process(void); void xjosc_documentation (void); /* configfile.c */ void xjadeorc (void); int testfile (char *filename); int saveconfig (const char *filename); int readconfig (char *fn); /* freetype - On screen display */ int render_font (char *fontfile, char *text, int px, int dx); void free_freetype (); /* xvesifib.c - shared */ void x_fib_free_recent (); int x_fib_add_recent (const char *path, time_t atime); int x_fib_save_recent (const char *fn); int x_fib_load_recent (const char *fn); unsigned int x_fib_recent_count (); const char *x_fib_recent_at (unsigned int i); const char *x_fib_recent_file(const char *appname); // configuration extern char const * const cfg_features; extern char const * const cfg_displays; extern char const * const cfg_midi; extern char cfg_compat[]; #endif xjadeo-0.8.10/src/xjadeo/display_x_dnd.c0000644000175000017500000001730513604414725015035 00000000000000/* xjadeo - X11 Drag/Drop support * * Copyright (C) 2014 Robin Gareus * * 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. */ #include "xjadeo.h" #include "display.h" #ifdef DND #if (defined HAVE_LIBXV || defined HAVE_IMLIB2 || (defined HAVE_GL && !defined PLATFORM_WINDOWS && !defined PLATFORM_OSX)) extern int interaction_override; // disable some options. #define MAX_DND_FILES 8 void xapi_open(void *d); /******************************************************************************* * Drag and Drop - common X11 code */ static Atom xj_a_XdndDrop; static Atom xj_a_XdndFinished; static Atom xj_a_XdndActionCopy; static Atom xj_a_XdndLeave; static Atom xj_a_XdndPosition; static Atom xj_a_XdndStatus; static Atom xj_a_XdndEnter; static Atom xj_a_XdndAware; static Atom xj_a_XdndTypeList; static Atom xj_a_XdndSelection; static Atom xj_atom; static int dnd_source = 0; static const int xdnd_version = 5; static int dnd_enabled = 0; static void HandleEnter(Display *dpy, XEvent * xe) { const long *l = xe->xclient.data.l; xj_atom = None; dnd_source = 0; const Atom ok0 = XInternAtom(dpy, "text/uri-list", False); const Atom ok1 = XInternAtom(dpy, "text/plain", False); const Atom ok2 = XInternAtom(dpy, "UTF8_STRING", False); const int version = (int)(((unsigned long)(l[1])) >> 24); if (version > xdnd_version) return; dnd_source = l[0]; if (l[1] & 0x1UL) { Atom type = 0; int f; unsigned long n, a; unsigned char *data; a=1; while(a && xj_atom == None) { int ll; XGetWindowProperty(dpy, dnd_source, xj_a_XdndTypeList, 0, 0x8000000L, False, XA_ATOM, &type, &f, &n, &a, &data); if(data == NULL || type != XA_ATOM || f != 32) { if (data) XFree(data); return; } Atom *types = (Atom *) data; for (ll = 1; ll < n; ++ll) { //if (types[ll] != None) printf("DEBUG atomN:%s\n", XGetAtomName(dpy, types[ll])); if ((types[ll] == ok1) || (types[ll] == ok1) || (types[ll] == ok2)) { xj_atom = types[ll]; break; } } if (data) XFree(data); } } else { int i; for(i = 2; i < 5; i++) { //if (l[i] != None) printf("DEBUG atom3:%s\n", XGetAtomName(dpy, l[i])); if ((l[i] == ok0) || (l[i] == ok1) || (l[i] == ok2)) xj_atom= l[i]; } } if (want_debug) printf("DEBUG: DND ok: %i\n", xj_atom != None); } static void SendStatus (Display *dpy, Window win, XEvent * xe) { XEvent xev; memset(&xev, 0, sizeof(XEvent)); xev.xany.type = ClientMessage; xev.xany.display = dpy; xev.xclient.window = dnd_source; xev.xclient.message_type = xj_a_XdndStatus; xev.xclient.format = 32; xev.xclient.data.l[0] = win; xev.xclient.data.l[1] = (xj_atom != None) ? 1 : 0; xev.xclient.data.l[4] = xj_a_XdndActionCopy; XSendEvent(dpy, dnd_source, False, NoEventMask, &xev); } static void SendFinished (Display *dpy, Window win) { XEvent xev; memset(&xev,0,sizeof(XEvent)); xev.xany.type = ClientMessage; xev.xany.display = dpy; xev.xclient.window = dnd_source; xev.xclient.message_type = xj_a_XdndFinished; xev.xclient.format = 32; xev.xclient.data.l[0] = win; XSendEvent(dpy, dnd_source, False, NoEventMask, &xev); } static void getDragData (Display *dpy, Window win, XEvent *xe) { Atom type; int f; unsigned long n, a; unsigned char *data; if(xe->xselection.property != xj_a_XdndSelection) return; XGetWindowProperty(dpy, xe->xselection.requestor, xe->xselection.property, 0, 65536, True, xj_atom, &type, &f, &n, &a, &data); SendFinished(dpy, win); if (!data) { if (!want_quiet) fprintf(stderr, "WARNING: drag-n-drop - no data received.\n"); return; } /* Handle dropped files */ int num = 0; char *retain = (char*) data; char *files[MAX_DND_FILES]; while(retain < (char*)data + n) { int nl = 0; if (!strncmp(retain,"file:", 5)) { retain += 5; } files[num++] = retain; while(retain < (char*)data + n) { if(*retain == '\r' || *retain == '\n') { *retain=0; nl = 1; } else if (nl) { break; } ++retain; } if (num >= MAX_DND_FILES) { break; } } if (want_debug) { for (f=0; f < num; ++f) { printf("DnD: recv: %i '%s'\n", f, files[f]); } } if (num > 0) { //translate %20 -> to whitespaces, etc. char *t = files[0]; while ((t = strchr(t, '%')) && strlen(t) > 2) { int ti = 0; char tc= t[3]; t[3] = 0; ti = (int)strtol(&(t[1]), NULL, 16); t[3] = tc; memmove(t + 1, t + 3, strlen(t) - 2); tc = (char)ti; *t = tc; t[strlen(t)]='\0'; t++; } } if (num > 0 && !(interaction_override&OVR_LOADFILE)) { xapi_open(files[0]); XSetInputFocus(dpy, win, RevertToNone, CurrentTime); } free(data); } void init_dnd (Display *dpy, Window win) { Atom atm = (Atom)xdnd_version; if ((xj_a_XdndDrop = XInternAtom (dpy, "XdndDrop", False)) != None && (xj_a_XdndLeave = XInternAtom (dpy, "XdndLeave", False)) != None && (xj_a_XdndEnter = XInternAtom (dpy, "XdndEnter", False)) != None && (xj_a_XdndActionCopy = XInternAtom (dpy, "XdndActionCopy", False)) != None && (xj_a_XdndFinished = XInternAtom (dpy, "XdndFinished", False)) != None && (xj_a_XdndPosition = XInternAtom (dpy, "XdndPosition", False)) != None && (xj_a_XdndStatus = XInternAtom (dpy, "XdndStatus", False)) != None && (xj_a_XdndTypeList = XInternAtom (dpy, "XdndTypeList", False)) != None && (xj_a_XdndSelection = XInternAtom (dpy, "XdndSelection", False)) != None && (xj_a_XdndAware = XInternAtom (dpy, "XdndAware", False)) != None) { if(!want_quiet) printf("enabled drag-DROP support.\n"); XChangeProperty(dpy, win, xj_a_XdndAware, XA_ATOM, 32, PropModeReplace, (unsigned char *)&atm, 1); dnd_enabled = 1; } } void disable_dnd (Display *dpy, Window win) { if (!dnd_enabled) return; XDeleteProperty(dpy, win, xj_a_XdndAware); dnd_enabled = 0; } int handle_dnd_event (Display *dpy, Window win, XEvent *event) { int handled = 1; if (!dnd_enabled) return 0; switch (event->type) { case SelectionRequest: break; case SelectionNotify: if (want_debug) printf("DnD SelectionNotify\n"); getDragData(dpy, win, event); break; case ClientMessage: if (event->xclient.message_type == xj_a_XdndPosition) { SendStatus(dpy, win, event); } else if (event->xclient.message_type == xj_a_XdndLeave) { if (want_debug) printf("DnD Leave\n"); xj_atom = None; } else if (event->xclient.message_type == xj_a_XdndEnter) { if (want_debug) printf("DnD Enter\n"); HandleEnter(dpy, event); } else if (event->xclient.message_type == xj_a_XdndDrop) { if ((event->xclient.data.l[0] != XGetSelectionOwner(dpy, xj_a_XdndSelection)) || (event->xclient.data.l[0] != dnd_source)) { if (!want_quiet) fprintf(stderr,"[x11] DnD owner mismatch."); break; } if (xj_atom != None) { if(want_debug) printf("DnD Drop\n"); XConvertSelection(dpy, xj_a_XdndSelection, xj_atom, xj_a_XdndSelection, win, CurrentTime); } else { if(want_debug) printf("DnD Drop Ignored\n"); } SendFinished(dpy, win); } else { handled = 0; } break; default: handled = 0; break; } return handled; } # endif /* X11 */ # endif /* DND */ xjadeo-0.8.10/src/xjadeo/midi.c0000644000175000017500000006624113305567757013155 00000000000000/* xjadeo - MIDI / MTC sync * * (C) 2006-2014 Robin Gareus * (C) 2006 Luis Garrido * (C) 2005 Clemens Ladisch * * 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. */ #include #include #include #include #include "weak_libjack.h" #ifdef HAVE_MIDI extern int want_quiet; extern int want_verbose; extern int want_debug; extern double framerate; extern int midi_clkadj; extern double delay; typedef struct { int frame; int sec; int min; int hour; int day; // overflow int type; int tick; // 1/8 of a frame. } smpte; /* global Vars */ static smpte tc; static smpte last_tc; static int full_tc = 0; const char MTCTYPE[4][10] = { "24fps", "25fps", "29fps", "30fps", }; /* midi system exclusive start/end byte*/ #define MIDI_SOX 0xf0 #define MIDI_EOX 0xf7 #define SE(ARG) prevtick = tc.tick; tc.tick=ARG; full_tc|=1<<(ARG); #define SL(ARG) ARG = ( ARG &(~0xf)) | (data&0xf); #define SH(ARG) ARG = ( ARG &(~0xf0)) | ((data&0xf)<<4); /* parse MTC 0x71 message data */ static void parse_timecode( int data) { static int prevtick =0; switch (data>>4) { case 0x0: // #0000 frame LSN SE(1); SL(tc.frame); break; case 0x1: // #0001 frame MSN SE(2); SH(tc.frame); break; case 0x2: // #0010 sec LSN SE(3); SL(tc.sec); break; case 0x3: // #0011 sec MSN SE(4); SH(tc.sec); break; case 0x4: // #0100 min LSN SE(5); SL(tc.min); break; case 0x5: // #0101 min MSN SE(6); SH(tc.min); break; case 0x6: // #0110 hour LSN SE(7); SL(tc.hour); break; case 0x7: // #0111 hour MSN and type SE(0);tc.hour= (tc.hour&(~0xf0)) | ((data&1)<<4); tc.type = (data>>1)&3; if (full_tc!=0xff) break; if (want_verbose) { printf("\r\t\t\t\t\t\t\t->- %02i:%02i:%02i.%02i[%s]\r",tc.hour,tc.min,tc.sec,tc.frame,MTCTYPE[tc.type]); fflush(stdout); } memcpy(&last_tc,&tc,sizeof(smpte)); tc.type=tc.min=tc.frame=tc.sec=tc.hour=tc.tick=0; default: ; } if (full_tc!=0xff) { last_tc.tick=0; return; } // count quarterframes switch (tc.tick - prevtick) { case 7: // assert(tc.tick==7); case -1: /*reverse direction */ last_tc.tick=0-tc.tick; // -7+(7-tc.tick) compensate for latency if (want_verbose) { printf("\r\t\t\t\t\t\t\t-<-\r"); fflush(stdout); } break; case -7: // assert(prevtick==7); case 1: /* transport rolling */ last_tc.tick=tc.tick+7; // compensate for latency break; default: full_tc=last_tc.tick=0; } } /* parse system exclusive MSGs * seek frame - if transport is not rolling */ static int parse_sysex_urtm (int data, int state, int type) { /* * Structure of a System Exclusive Message * * # Start of Exclusive: F0 * # Manufacturer ID: 00-7D, 7E=Universal non-realtime, 7F=Universal realtime * # Device number: 00-0F = dev 1 -16, 7F=all * # Model ID: 00-7F * # 0 or more data bytes * # Checksum: 00-7F (all data + checksum = 0 for lowest 7 bits) * # End of Exclusive: F7 * * eg: * F0 7F 7F 01 01 20 00 03 01 F7 * F0 7F 7F 06 44 06 01 20 00 03 01 00 F7 * timecode 00:00:03:01 (@ 25fps) -- Roland MTC * * roland MTC sysex real time message - reverse engineered format * 01 01 [fps: bit 6..5 hour: bit4..0] [min] [sec] [frame] F7 * 06 xx 06 xx [fps (bit 6..5) hour: bit4..0)] [min] [sec] [frame] Checksum F7 * * fps/hour: (011HHHHH): 30 fps, 29fps - non drop * (010HHHHH : 29 fps (drop) * (001HHHHH): 25 fps * (000HHHHH): 24 fps * min,sec,frame are 6bit values */ int rv=type; if (type<0) return (-1); if (state<2 && data !=0x7f) return(-1); if (state<3 && type>0) return (-1); if (state==2 && type==0) { if (data==0x01) rv=1; if (data==0x06) rv=2; last_tc.tick=0; } if (state>2 && type <=0 ) return (-4); if (state==3 && type ==1 && data!=0x01) return (-1); if (state==3 && type ==2 && data!=0x44) return (-1); if (state==3 && type ==2 && data!=0x44) return (-1); if (state==4 && type ==2 && data!=0x06) return (-1); if (state==5 && type ==2 && data!=0x01) return (-1); // type==1 && state4,5,6,7 if (state==4 && type ==1 ) { last_tc.hour=(data&0x1f); last_tc.type=(data>>5)&3; } // hour + format if (state==5 && type ==1 ) { last_tc.min=(data&0x7f); } // min if (state==6 && type ==1 ) { last_tc.sec=(data&0x7f); } // sec if (state==7 && type ==1 ) { last_tc.frame=(data&0x7f); } // frame if (state>7 && type ==1 ) { if (want_verbose) { if (want_debug) printf("\r\t\t\t\t\t\t\t~-~ %02i:%02i:%02i.%02i[%s]\r",tc.hour,tc.min,tc.sec,tc.frame,MTCTYPE[tc.type]); else printf("\r\t\t\t\t\t\t\t-~- %02i:%02i:%02i.%02i[%s]\r",last_tc.hour,last_tc.min,last_tc.sec,last_tc.frame,MTCTYPE[last_tc.type]); fflush(stdout); } return (-1); } // type==2 && state6,7,8,9 if (state==6 && type ==2 ) { last_tc.hour=(data&0x1f); /*last_tc.type=(data>>5)&3*/; } // hour if (state==7 && type ==2 ) { last_tc.min=(data&0x7f); } // min if (state==8 && type ==2 ) { last_tc.sec=(data&0x7f); } // sec if (state==9 && type ==2 ) { last_tc.frame=(data&0x7f); } // frame if (state>9 && type ==2 ) { if (want_verbose) { if (want_debug) printf("\r\t\t\t\t\t\t\t-V- %02i:%02i:%02i.%02i[%s]\r",tc.hour,tc.min,tc.sec,tc.frame,MTCTYPE[tc.type]); else printf("\r\t\t\t\t\t\t\t-v- %02i:%02i:%02i.%02i[%s]\r",last_tc.hour,last_tc.min,last_tc.sec,last_tc.frame,MTCTYPE[last_tc.type]); fflush(stdout); } return (-1); } return (rv); } static int64_t convert_smpte_to_frame (smpte now) { return(smpte_to_frame( now.type, now.frame, now.sec, now.min, now.hour, now.day)); } /************************************************ * portmidi */ #ifdef HAVE_PORTMIDI #include #include typedef void PmQueue; PmQueue *Pm_QueueCreate(long num_msgs, long bytes_per_msg); PmError Pm_QueueDestroy(PmQueue *queue); PmError Pm_Enqueue(PmQueue *queue, void *msg); PmError Pm_Dequeue(PmQueue *queue, void *msg); PmStream * pm_midi = NULL; /* if INPUT_BUFFER_SIZE is 0, PortMidi uses a default value */ #define INPUT_BUFFER_SIZE 0 static int pm_midi_detectdevices (int print) { int i; int midiid = Pm_GetDefaultInputDeviceID(); /* list device information */ for (i = 0; i < Pm_CountDevices(); i++) { const PmDeviceInfo *info = Pm_GetDeviceInfo(i); if (info->input) { if(midiid == pmNoDevice) { midiid=i; } } if (print) { printf("%d: %s, %s", i, info->interf, info->name); if (info->input) printf(" (input)"); if (info->output) printf(" (output)"); if(midiid == i) printf(" (*)"); printf("\n"); } } return (midiid); } static int pm_midi_check (int midiid) { if (midiid < 0 || midiid >=Pm_CountDevices()) { fprintf(stderr,"Error: invalid midi device id.\n"); return(-1); } return(0); } static int active = FALSE; static int sysex_state = -1; static int sysex_type = 0; /* shared queues */ PmQueue *midi_to_main; PmQueue *main_to_midi; /* timer interrupt for processing midi data */ static void process_midi(PtTimestamp timestamp, void *userData) { PmError result; PmEvent buffer; /* just one message at a time */ smpte msg; if (!active) return; /* check for messages */ do { result = Pm_Dequeue(main_to_midi, &msg); if (result) { if (msg.frame == 0xaffe) { // stop thread Pm_Enqueue(midi_to_main, &msg); active= FALSE; return; } else if (msg.frame == 0x4711) { // transport stopped - reset ticks. full_tc=last_tc.tick=0; Pm_Enqueue(midi_to_main, &msg); } else { memcpy(&msg,&last_tc,sizeof(smpte)); Pm_Enqueue(midi_to_main, &msg); } } } while (result); /* see if there is any midi input to process */ do { result = Pm_Poll(pm_midi); if (result) { int shift, data; data = 0; if (Pm_Read(pm_midi, &buffer, 1) == pmBufferOverflow) continue; /* parse only MTC relevant messages */ if (Pm_MessageStatus(buffer.message) == 0xf1) parse_timecode (Pm_MessageData1(buffer.message)); for (shift = 0; shift < 32 && (data != MIDI_EOX); shift += 8) { data = (buffer.message >> shift) & 0xFF; /* if this is a status byte that's not MIDI_EOX, the sysex * message is incomplete and there is no more sysex data */ if (data & 0x80 && data != MIDI_EOX && data != MIDI_SOX) { sysex_state=-1; break; } /* sysex- universal real time message f0 7f ... f7 */ if (data == 0xf7) { sysex_state=-1;} else if (sysex_state < 0 && data == 0xf0) { sysex_state=0; sysex_type=0; } else if (sysex_state>=0) { sysex_type = parse_sysex_urtm (data,sysex_state,sysex_type); sysex_state++; } } } } while (result); } static void pm_midi_open(char *midiid) { int midi_input; if (pm_midi) return; midi_input = atoi(midiid); if (want_verbose && midi_input < 0) midi_input = pm_midi_detectdevices(1); else if (midi_input <0 ) midi_input = pm_midi_detectdevices(0); if (pm_midi_check(midi_input)) return ; // init smpte tc.type=tc.min=tc.frame=tc.sec=tc.hour=0; last_tc.type=last_tc.min=last_tc.frame=last_tc.sec=last_tc.hour=0; sysex_state = -1; midi_to_main = Pm_QueueCreate(2, sizeof(smpte)); main_to_midi = Pm_QueueCreate(2, sizeof(smpte)); if (!midi_to_main || !main_to_midi ) { fprintf(stderr, "Could not create portmidi queues\n"); return; } PmEvent buffer[1]; Pt_Start(1, &process_midi, 0); /* timer started w/millisecond accuracy */ Pm_Initialize(); /* open input device */ Pm_OpenInput(&pm_midi, midi_input, NULL, INPUT_BUFFER_SIZE, NULL, NULL); if (!want_quiet) printf("Midi Input opened.\n"); Pm_SetFilter(pm_midi, PM_FILT_ACTIVE | PM_FILT_CLOCK); /* flush the buffer after setting filter, just in case anything got through */ while (Pm_Poll(pm_midi)) { Pm_Read(pm_midi, buffer, 1); } active = TRUE; } static void pm_midi_close(void) { smpte cmd; if (!want_quiet) printf("closing midi..."); if(!pm_midi) return; cmd.frame=0xaffe; // shutdown CMD Pm_Enqueue(main_to_midi, &cmd); while (Pm_Dequeue(midi_to_main, &cmd)==0) ; // spin Pt_Stop(); /* stop the timer */ Pm_QueueDestroy(midi_to_main); Pm_QueueDestroy(main_to_midi); Pm_Close(pm_midi); pm_midi=NULL; } static int pm_midi_connected(void) { if (pm_midi) return (1); return (0); } static int64_t pm_midi_poll_frame (void) { int spin; int64_t frame; static int64_t lastframe = -1 ; static int stopcnt = 0; smpte now; if (!pm_midi) return (0); now.frame=0; // CMD request Pm_Enqueue(main_to_midi, &now); // request data do { spin = Pm_Dequeue(midi_to_main, &now); } while (spin == 0); /* spin */ ; frame = convert_smpte_to_frame(now); if(midi_clkadj && (full_tc==0xff)) { double dly = delay>0?delay:(1.0/framerate); //add time that has passed sice last full MTC frame.. smpte cmd; cmd.frame=0x4711; // reset-full_tc CMD double diff= now.tick/4.0; // in smpte frames. // check if transport is stuck... if (lastframe != frame) { stopcnt=0; lastframe=frame; } else if (stopcnt++ > (int) ceil(4.0*framerate/dly)) { // we expect a full midi MTC every (2.0*framerate/delay) polls Pm_Enqueue(main_to_midi, &cmd); // request data while (Pm_Dequeue(midi_to_main, &cmd)==0) ; // spin diff=0.0; if (want_verbose) printf("\r\t\t\t\t\t\t -?-\r"); } frame += (int64_t) rint(diff); if (want_verbose) // subtract 7 quarter frames latency when running.. printf("\r\t\t\t\t\t\t |+%g/8\r",diff<0?rint(4.0*(1.75-diff)):diff<2.0?0:rint(4.0*(diff-1.75))); } return(frame); } #endif /* HAVE_PORTMIDI */ #ifdef HAVE_JACKMIDI /************************************************ * jack-midi * */ static jack_client_t *jack_midi_client = NULL; static jack_port_t *jack_midi_port; #define JACK_MIDI_QUEUE_SIZE (1024) typedef struct my_midi_event { jack_nframes_t time; size_t size; jack_midi_data_t buffer[16]; } my_midi_event_t; static my_midi_event_t event_queue[JACK_MIDI_QUEUE_SIZE]; static int queued_events_start = 0; static int queued_events_end = 0; static int queued_cycle_id = 0; static void dequeue_jmidi_events(jack_nframes_t until) { int ci = queued_cycle_id; int new=0; // always process data from prev. jack cycles. while (queued_events_start != queued_events_end) { if (queued_events_start == ci ) new=1; if (new && event_queue[queued_events_start].time > until) { break; } my_midi_event_t *ev = &event_queue[queued_events_start]; if (ev->size==2 && ev->buffer[0] == 0xf1) { parse_timecode(ev->buffer[1]); } else if (ev->size >9 && ev->buffer[0] == 0xf0) { int i; int sysex_type = 0; for (i=1; isize; ++i) { sysex_type = parse_sysex_urtm(ev->buffer[i],i-1,sysex_type); } } queued_events_start = (queued_events_start +1 ) % JACK_MIDI_QUEUE_SIZE; } } static int jack_midi_process(jack_nframes_t nframes, void *arg) { void *jack_buf = WJACK_port_get_buffer(jack_midi_port, nframes); int nevents = WJACK_midi_get_event_count(jack_buf); int n; queued_cycle_id = queued_events_end; for (n=0; n 15) { continue; } else { event_queue[queued_events_end].time = ev.time; event_queue[queued_events_end].size = ev.size; memcpy (event_queue[queued_events_end].buffer, ev.buffer, ev.size); queued_events_end = (queued_events_end +1 ) % JACK_MIDI_QUEUE_SIZE; } } return 0; } static void jack_midi_shutdown(void *arg) { jack_midi_client=NULL; xj_shutdown_jack(); if (!want_quiet) fprintf (stderr, "jack server shutdown\n"); } static void jm_midi_close(void) { xj_close_jack(&jack_midi_client); } static void jm_midi_open(char *midiid) { if (midi_connected()) { fprintf (stderr, "xjadeo is already connected to jack-midi.\n"); return; } if (xj_init_jack(&jack_midi_client, "xjadeo")) { return; } #ifndef PLATFORM_WINDOWS WJACK_on_shutdown (jack_midi_client, jack_midi_shutdown, 0); #endif WJACK_set_process_callback(jack_midi_client, jack_midi_process, NULL); jack_midi_port = WJACK_port_register(jack_midi_client, "MTC in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput , 0); if (jack_midi_port == NULL) { fprintf(stderr, "can't register jack-midi-port\n"); midi_close(); return; } // init smpte tc.type=tc.min=tc.frame=tc.sec=tc.hour=0; last_tc.type=last_tc.min=last_tc.frame=last_tc.sec=last_tc.hour=0; if (WJACK_activate(jack_midi_client)) { fprintf(stderr, "can't activate jack-midi-client\n"); midi_close(); } if (midiid && strlen(midiid)>0) { const char **found_ports = WJACK_get_ports(jack_midi_client, NULL, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput); if (found_ports) { int j; for (j = 0; found_ports[j]; ++j) { if (!strncasecmp(found_ports[j], midiid, strlen(midiid))) { if (want_verbose) { printf("JACK-connect '%s' -> '%s'\n", found_ports[j], WJACK_port_name(jack_midi_port)); } if (WJACK_connect(jack_midi_client, found_ports[j], WJACK_port_name(jack_midi_port))) { if (!want_quiet) fprintf(stderr,"can not auto-connect jack-midi port.\n"); } } } WJACK_free(found_ports); } } } static int jm_midi_connected(void) { if (jack_midi_client) return (1); return (0); } static int64_t jm_midi_poll_frame (void) { int64_t frame =0 ; static int64_t lastframe = -1 ; static int stopcnt = 0; dequeue_jmidi_events(WJACK_frames_since_cycle_start(jack_midi_client)); frame = convert_smpte_to_frame(last_tc); if(midi_clkadj && (full_tc==0xff)) { double dly = delay>0?delay:(1.0/framerate); //add time that has passed sice last full MTC frame. double diff; // unit: smpte-frames. // check if transport is stuck... if (lastframe != frame) { stopcnt=0; lastframe=frame; } else if (stopcnt++ > (int) ceil(4.0*framerate/dly)) { // we expect a full midi MTC every (2.0*framerate/delay) polls full_tc=last_tc.tick=0; if (want_verbose) printf("\r\t\t\t\t\t\t -?-\r"); } diff= last_tc.tick/4.0; if (want_verbose) // subtract 7 quarter frames latency when running.. printf("\r\t\t\t\t\t\t |+%g/8\r",diff<0?rint(4.0*(1.75-diff)):diff<2.0?0:rint(4.0*(diff-1.75))); frame += (int64_t) rint(diff); } return(frame); } #endif /* HAVE_JACKMIDI */ /************************************************ * alsamidi */ #ifdef ALSA_RAW_MIDI /* old alsa raw midi */ #include static snd_rawmidi_t *amidi= NULL; static int ar_sysex_state = -1; static int ar_sysex_type = 0; static void amidi_open(char *port_name) { int err=0; if (amidi) return; if ((err = snd_rawmidi_open(&amidi, NULL, port_name, 0)) < 0) { fprintf(stderr,"cannot open port \"%s\": %s\n", port_name, snd_strerror(err)); return; } // init smpte tc.type=tc.min=tc.frame=tc.sec=tc.hour=0; last_tc.type=last_tc.min=last_tc.frame=last_tc.sec=last_tc.hour=0; ar_sysex_state = -1; snd_rawmidi_nonblock(amidi, 1); // snd_rawmidi_read(amidi, NULL, 0); } static void ar_midi_close(void) { if (!want_quiet) printf("closing alsa midi..."); if(!amidi) return; snd_rawmidi_close(amidi); amidi=NULL; } // TODO increase buffer size ( avg: 15Hz * 8 msgs ) // better: standalone thread static void amidi_event(void) { int i,rv; int npfds = 0; struct pollfd *pfds; unsigned char buf[256]; unsigned short revents; npfds = snd_rawmidi_poll_descriptors_count(amidi); pfds = alloca(npfds * sizeof(struct pollfd)); snd_rawmidi_poll_descriptors(amidi, pfds, npfds); if (poll(pfds, npfds, 0)<= 0) return; if (snd_rawmidi_poll_descriptors_revents(amidi, pfds, npfds, &revents) < 0) return; if (!(revents & POLLIN)) return; // TODO: loop until buffer is empty... if rv>=256 if ((rv = snd_rawmidi_read(amidi, buf, sizeof(buf))) <=0 ) return; for (i = 0; i < rv; ++i) { int data; if (buf[i] == 0xf1 && (i+1 < rv) && !(buf[i+1]&0x80)) parse_timecode(buf[i+1]); #if 1 /* parse sysex msgs */ data = (buf[i]) & 0xFF; /* if this is a status byte that's not MIDI_EOX, the sysex * message is incomplete and there is no more sysex data */ if (data & 0x80 && data != MIDI_EOX && data != MIDI_SOX) {ar_sysex_state=-1;} // sysex- universal real time message f0 7f ... f7 if (data == 0xf7) { ar_sysex_state=-1;} else if (ar_sysex_state < 0 && data == 0xf0) { ar_sysex_state=0; ar_sysex_type=0; } else if (ar_sysex_state>=0) { ar_sysex_type = parse_sysex_urtm (data,ar_sysex_state,ar_sysex_type); ar_sysex_state++; } #endif } } static int64_t ar_midi_poll_frame (void) { if (!amidi) return (0); amidi_event(); // process midi buffers - get most recent timecode return(convert_smpte_to_frame(last_tc)); } static void ar_midi_open(char *midiid) { char devicestring[32]; if (atoi(midiid)<0) { if (!want_quiet) fprintf(stdout,"AlsaMIDI does not support autodetection. using default hw:0,0,0\n"); snprintf(devicestring,31,"hw:0,0,0"); } else if (isdigit(midiid[0])) { snprintf(devicestring,31,"hw:%s",midiid); } else { snprintf(devicestring,31,"%s",midiid); } if (want_verbose) printf("amidi device: '%s'\n",devicestring); amidi_open(devicestring); } static int ar_midi_connected(void) { if (amidi) return (1); return (0); } #endif /* ALSA RAW */ #ifdef ALSA_SEQ_MIDI /* alsa sequcer */ /************************************************ * alsa seq midi interface */ #include #include // getpid() #include #include static pthread_t aseq_thread; static pthread_mutex_t aseq_lock; static snd_seq_t *seq= NULL; static int as_sysex_type = 0; static int aseq_stop=0; // only modify in main thread. static void aseq_close(void) { if(!seq) return; if (!want_quiet) printf("closing alsa midi..."); snd_seq_close(seq); seq=NULL; } static void aseq_open(char *port_name) { int err=0; snd_seq_addr_t port; char seq_name[32]; snprintf(seq_name,32,"xjadeo-%i",(int) getpid()); if (seq) return; /* open sequencer */ // SND_SEQ_OPEN_INPUT if ((err = snd_seq_open(&seq, "default", SND_SEQ_OPEN_INPUT, 0)) <0 ) { fprintf(stderr,"cannot open alsa sequencer: %s\n", snd_strerror(err)); seq=NULL; return; } if ((err = snd_seq_set_client_name(seq, seq_name)) <0 ) { fprintf(stderr,"cannot set client name: %s\n", snd_strerror(err)); aseq_close(); return; } if ((err = snd_seq_create_simple_port(seq, "MTC in", SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE, SND_SEQ_PORT_TYPE_MIDI_GENERIC | SND_SEQ_PORT_TYPE_APPLICATION)) < 0) { fprintf(stderr,"cannot create port: %s\n", snd_strerror(err)); aseq_close(); return; } if (port_name) { err = snd_seq_parse_address(seq, &port, port_name); if (err < 0) { fprintf(stderr,"Cannot find port %s - %s\n", port_name, snd_strerror(err)); } err = snd_seq_connect_from(seq, 0, port.client, port.port); if (err < 0) { fprintf(stderr,"Cannot connect from port %d:%d - %s\n", port.client, port.port, snd_strerror(err)); } } snd_seq_nonblock(seq, 1); // init smpte tc.type=tc.min=tc.frame=tc.sec=tc.hour=0; last_tc.type=last_tc.min=last_tc.frame=last_tc.sec=last_tc.hour=0; } static void process_seq_event(const snd_seq_event_t *ev) { if (ev->type == SND_SEQ_EVENT_QFRAME) parse_timecode(ev->data.control.value); else if (ev->type == SND_SEQ_EVENT_SYSEX) { unsigned int i; as_sysex_type = 0; for (i = 1; i < ev->data.ext.len; ++i) { as_sysex_type = parse_sysex_urtm(((unsigned char*)ev->data.ext.ptr)[i],i-1,as_sysex_type); } } } static int64_t as_midi_poll_frame (void) { int64_t frame =0 ; static int64_t lastframe = -1 ; static int stopcnt = 0; if (!seq) return (0); pthread_mutex_lock(&aseq_lock); frame = convert_smpte_to_frame(last_tc); pthread_mutex_unlock(&aseq_lock); if(midi_clkadj && (full_tc==0xff)) { double dly = delay>0?delay:(1.0/framerate); //add time that has passed sice last full MTC frame. double diff; // unit: smpte-frames. // check if transport is stuck... if (lastframe != frame) { stopcnt=0; lastframe=frame; } else if (stopcnt++ > (int) ceil(4.0*framerate/dly)) { // we expect a full midi MTC every (2.0*framerate/delay) polls pthread_mutex_lock(&aseq_lock); full_tc=last_tc.tick=0; pthread_mutex_unlock(&aseq_lock); if (want_verbose) printf("\r\t\t\t\t\t\t -?-\r"); } diff= last_tc.tick/4.0; if (want_verbose) // subtract 7 quarter frames latency when running.. printf("\r\t\t\t\t\t\t |+%g/8\r",diff<0?rint(4.0*(1.75-diff)):diff<2.0?0:rint(4.0*(diff-1.75))); frame += (int64_t) rint(diff); } return(frame); } static void as_midi_close(void) { if(!seq) return; aseq_stop =1; pthread_join(aseq_thread,NULL); pthread_mutex_destroy(&aseq_lock); aseq_close(); } static void *aseq_run(void *arg) { int err; int npfds = 0; struct pollfd *pfds; npfds = snd_seq_poll_descriptors_count(seq, POLLIN); pfds = alloca(sizeof(*pfds) * npfds); for (;;) { snd_seq_poll_descriptors(seq, pfds, npfds, POLLIN); if (poll(pfds, npfds, 1) < 0) break; do { snd_seq_event_t *event; err = snd_seq_event_input(seq, &event); if (err < 0) break; if (event) { // TODO: lock only when actually modifying last_tc pthread_mutex_lock(&aseq_lock); process_seq_event(event); pthread_mutex_unlock(&aseq_lock); } } while (err > 0); if (aseq_stop) break; } pthread_exit(NULL); return (NULL); } /* list devices... * borrowed from aseqdump.c * Copyright (c) 2005 Clemens Ladisch * GPL */ static void as_midi_detectdevices (int print) { if (print) { snd_seq_client_info_t *cinfo; snd_seq_port_info_t *pinfo; snd_seq_client_info_alloca(&cinfo); snd_seq_port_info_alloca(&pinfo); printf(" Dumping midi seq ports: (not connecting to any)\n"); printf(" Port Client name Port name\n"); snd_seq_client_info_set_client(cinfo, -1); while (snd_seq_query_next_client(seq, cinfo) >= 0) { int client = snd_seq_client_info_get_client(cinfo); snd_seq_port_info_set_client(pinfo, client); snd_seq_port_info_set_port(pinfo, -1); while (snd_seq_query_next_port(seq, pinfo) >= 0) { /* we need both READ and SUBS_READ */ if ((snd_seq_port_info_get_capability(pinfo) & (SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ)) != (SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ)) continue; printf(" %3d:%-3d %-32.32s %s\n", snd_seq_port_info_get_client(pinfo), snd_seq_port_info_get_port(pinfo), snd_seq_client_info_get_name(cinfo), snd_seq_port_info_get_name(pinfo)); } } } } static void as_midi_open(char *midiid) { if (atoi(midiid)<0) { aseq_open(NULL); if (want_verbose) as_midi_detectdevices(1); } else { aseq_open(midiid); } if (!seq) return; aseq_stop =0; pthread_mutex_init(&aseq_lock, NULL); if(pthread_create(&aseq_thread, NULL, aseq_run, NULL)) { fprintf(stderr,"could not start midi seq. thread\n"); pthread_mutex_destroy(&aseq_lock); aseq_close(); } } static int as_midi_connected(void) { if (seq) return (1); return (0); } #endif /* alsa seq midi */ static int null_midi_connected(void) { return 0;} static void null_midi_open(char *midiid) {;} static void null_midi_close(void) {;} static int64_t null_midi_poll_frame (void) { return 0L;} #define NULLMIDI 0, &null_midi_open, &null_midi_close, &null_midi_connected, &null_midi_poll_frame typedef struct { const char *name; int supported; // 1: format compiled in -- 0: not supported void (*midi_open)(char *); void (*midi_close)(void); int (*midi_connected)(void); int64_t (*midi_poll_frame) (void); }midiapi; const midiapi MA[] = { { "JACK-MIDI", #ifdef HAVE_JACKMIDI 1, &jm_midi_open, &jm_midi_close, &jm_midi_connected, &jm_midi_poll_frame #else NULLMIDI #endif }, { "ALSA-Sequencer", #ifdef ALSA_SEQ_MIDI /* alsa sequcer */ 1, &as_midi_open, &as_midi_close, &as_midi_connected, &as_midi_poll_frame #else NULLMIDI #endif }, { "PORTMIDI", #ifdef HAVE_PORTMIDI 1, &pm_midi_open, &pm_midi_close, &pm_midi_connected, &pm_midi_poll_frame #else NULLMIDI #endif }, { "ALSA-RAW-MIDI", #ifdef ALSA_RAW_MIDI 1, &ar_midi_open, &ar_midi_close, &ar_midi_connected, &ar_midi_poll_frame #else NULLMIDI #endif }, {NULL, NULLMIDI} // the end. }; int current_midi_driver = 0; int midi_choose_driver(const char *id) { if (midi_connected()) return -1; int i=0; while (MA[i].name) { if ((id && !strncasecmp(MA[i].name, id, strlen(id))) || (!id && MA[i].supported) ) { current_midi_driver = i; break; } ++i; } if (!want_quiet && MA[current_midi_driver].supported) { printf("selected MIDI driver: %s\n", MA[current_midi_driver].name); } return MA[current_midi_driver].supported; } const char *midi_driver_name() { return MA[current_midi_driver].name; } int midi_connected(void) { return (MA[current_midi_driver].midi_connected());} void midi_open(char *midiid) {MA[current_midi_driver].midi_open(midiid);} void midi_close(void) {MA[current_midi_driver].midi_close();} int64_t midi_poll_frame (void) { return (MA[current_midi_driver].midi_poll_frame());} #else /* HAVE_MIDI */ int midi_connected(void) { return (0); } const char *midi_driver_name() { return "none"; } #endif /* HAVE_MIDI */ xjadeo-0.8.10/src/xjadeo/display_sdl.c0000644000175000017500000003434013747774274014541 00000000000000/* xjadeo - SDL display variant * * (C) 2006-2014 Robin Gareus * (C) 2006-2011 Luis Garrido * * 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. */ #include "xjadeo.h" #include "display.h" /******************************************************************************* * SDL */ #ifdef HAVE_SDL #define MYSDLFLAGS (SDL_HWSURFACE | SDL_RESIZABLE | SDL_DOUBLEBUF) static SDL_Surface* sdl_screen; static SDL_Overlay *sdl_overlay; static SDL_Rect sdl_rect; static SDL_Rect sdl_dest_rect; static int sdl_pic_format= SDL_YV12_OVERLAY; // fourcc static int full_screen_width = 1024; static int full_screen_height = 768; static int sdl_ontop = 0; static int sdl_full_screen = 0; static SDL_Rect sdl_oldsize; static void calc_letterbox(int src_w, int src_h, int out_w, int out_h, int *sca_w, int *sca_h); static void resized_sdl (); void close_window_sdl(void) { if(sdl_overlay) SDL_FreeYUVOverlay(sdl_overlay); SDL_Quit(); } int open_window_sdl (void) { const SDL_VideoInfo *video_info; int video_bpp; if(SDL_Init(SDL_INIT_VIDEO) < 0) goto no_sdl; /* Get the "native" video mode */ video_info = SDL_GetVideoInfo(); switch (video_info->vfmt->BitsPerPixel) { case 16: case 32: video_bpp = video_info->vfmt->BitsPerPixel; break; default: video_bpp = 16; break; } full_screen_width = video_info->current_w; full_screen_height = video_info->current_h; sdl_rect.x = 0; sdl_rect.y = 0; sdl_rect.h = ffctv_height; sdl_rect.w = ffctv_width; sdl_screen = SDL_SetVideoMode(sdl_rect.w, sdl_rect.h, video_bpp,MYSDLFLAGS); SDL_WM_SetCaption("xjadeo", "xjadeo"); newsrc_sdl(); if((!sdl_overlay)) fprintf(stderr, "NO OVERLAY\n"); if((!sdl_overlay || SDL_LockYUVOverlay(sdl_overlay)<0)) { printf("OVERLAY error.\n"); goto no_overlay; } resized_sdl(); if (sdl_overlay->pitches[0] != movie_width || sdl_overlay->pitches[1] != sdl_overlay->pitches[2] ) { fprintf(stderr,"unsupported SDL YV12.\n"); goto no_overlay; } if (start_ontop) { sdl_set_ontop(1); } if (start_fullscreen) { sdl_toggle_fullscreen(1); } return(0); no_overlay: if(sdl_overlay) SDL_FreeYUVOverlay(sdl_overlay); SDL_Quit(); no_sdl: return 1; } static void black_border_sdl(SDL_Rect b) { SDL_FillRect(sdl_screen, &b, SDL_MapRGB(sdl_screen->format, 0,0,0)); SDL_UpdateRect(sdl_screen, b.x, b.y, b.w, b.h); } static void resized_sdl () { if (!want_letterbox) { memcpy(&sdl_dest_rect, &sdl_rect, sizeof (SDL_Rect)); return; } /* want letterbox: */ int dw,dh; calc_letterbox(movie_width, movie_height, sdl_rect.w, sdl_rect.h, &dw, &dh); sdl_dest_rect.w = dw; sdl_dest_rect.h = dh; sdl_dest_rect.x = (sdl_rect.w - sdl_dest_rect.w)/2; sdl_dest_rect.y = (sdl_rect.h - sdl_dest_rect.h)/2; SDL_Rect b; if (sdl_dest_rect.y >0 ){ b.x=0;b.y=0; b.w=sdl_rect.w; b.h=sdl_dest_rect.y; black_border_sdl(b); b.x=0;b.y=sdl_rect.h - sdl_dest_rect.y; b.w=sdl_rect.w; b.h=sdl_dest_rect.y; black_border_sdl(b); } if (sdl_dest_rect.x >0 ){ b.x=0;b.y=0; b.w=sdl_dest_rect.x; b.h=sdl_rect.h; black_border_sdl(b); b.x=sdl_rect.w - sdl_dest_rect.x;b.y=0; b.w=sdl_dest_rect.x; b.h=sdl_rect.h; black_border_sdl(b); } } void mousecursor_sdl(int action) { if (action==2) hide_mouse ^= 1; else hide_mouse = action ? 1 : 0; SDL_ShowCursor(!hide_mouse); } void resize_sdl (unsigned int x, unsigned int y) { sdl_screen = SDL_SetVideoMode(x, y, 0, MYSDLFLAGS); sdl_rect.w=x; sdl_rect.h=y; resized_sdl(); force_redraw=1; } void getsize_sdl (unsigned int *x, unsigned int *y) { if(x) *x = sdl_rect.w; if(y) *y = sdl_rect.h; } void get_window_pos_sdl (int *rx, int *ry) { SDL_SysWMinfo info; SDL_VERSION(&info.version); if ( SDL_GetWMInfo(&info) > 0 ) { #ifdef PLATFORM_WINDOWS #if 0 // legacy WINDOWINFO w; GetWindowInfo(info.window, &w); *x= w.rcWindow.left; *y= w.rcWindow.top; printf("%ld - %ld\n", w.rcWindow.left, w.rcWindow.top); #endif RECT rect; //GetWindowRect() <> SetWindowPos() if (GetClientRect(info.window, &rect)) { *rx = rect.left; *ry = rect.top; return; } #elif (defined HAVE_LIBXV || defined HAVE_IMLIB2) if (info.subsystem == SDL_SYSWM_X11 ) { // NB. with SDL window decorations are not taken into account :( Window dummy; info.info.x11.lock_func(); XTranslateCoordinates(info.info.x11.display, info.info.x11.wmwindow, DefaultRootWindow(info.info.x11.display), 0, 0, rx, ry, &dummy); while (dummy !=None) { int x = 0; int y = 0; XTranslateCoordinates(info.info.x11.display, info.info.x11.wmwindow, dummy, 0, 0, &x, &y, &dummy); if (dummy!=None) { (*rx)-=x; (*ry)-=y; } else { (*rx)+=x; (*ry)+=y; } } info.info.x11.unlock_func(); return; } #endif } if(rx) *rx=1; if(ry) *ry=1; } void position_sdl(int x, int y) { SDL_SysWMinfo info; SDL_VERSION(&info.version); if ( SDL_GetWMInfo(&info) > 0 ) { #ifdef PLATFORM_WINDOWS SetWindowPos(info.window, sdl_ontop ? HWND_TOPMOST : HWND_NOTOPMOST, x, y, sdl_rect.w, sdl_rect.h, 0); #endif #if (defined HAVE_LIBXV || defined HAVE_IMLIB2) if ( info.subsystem == SDL_SYSWM_X11 ) { info.info.x11.lock_func(); XMoveWindow(info.info.x11.display, info.info.x11.wmwindow, x, y); info.info.x11.unlock_func(); } #endif } } #if (defined HAVE_LIBXV || defined HAVE_IMLIB2) static void net_wm_set_property(char *atom, int state) { SDL_SysWMinfo info; SDL_VERSION(&info.version); if ( SDL_GetWMInfo(&info) <= 0 ) { return; } XEvent xev; int set = _NET_WM_STATE_ADD; Atom type, property; if (state == _NET_WM_STATE_TOGGLE) set = _NET_WM_STATE_TOGGLE; else if (!state) set = _NET_WM_STATE_REMOVE; type = XInternAtom(info.info.x11.display, "_NET_WM_STATE", True); if (type == None) return; property = XInternAtom(info.info.x11.display, atom, 0); if (property == None) return; xev.type = ClientMessage; xev.xclient.type = ClientMessage; xev.xclient.window = info.info.x11.wmwindow; xev.xclient.message_type = type; xev.xclient.format = 32; xev.xclient.data.l[0] = set; xev.xclient.data.l[1] = property; xev.xclient.data.l[2] = 0; if (!XSendEvent(info.info.x11.display, DefaultRootWindow(info.info.x11.display), False, SubstructureRedirectMask|SubstructureNotifyMask, &xev)) { fprintf(stderr,"error changing X11 property\n"); } } #endif void sdl_set_ontop (int action) { if (action==2) sdl_ontop^=1; else sdl_ontop=action; #ifdef PLATFORM_WINDOWS SDL_SysWMinfo info; SDL_VERSION(&info.version); if ( SDL_GetWMInfo(&info) > 0 ) { SetWindowPos(info.window, sdl_ontop ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } #elif (defined HAVE_LIBXV || defined HAVE_IMLIB2) net_wm_set_property("_NET_WM_STATE_ABOVE", action); #endif } int sdl_get_ontop () { return sdl_ontop; } void render_sdl (uint8_t *mybuffer) { /* http://www.fourcc.org/indexyuv.htm */ size_t Ylen= movie_width * movie_height; size_t UVlen= movie_width/2 * movie_height/2; // decode ffmpeg - YUV uint8_t *Yptr=mybuffer; uint8_t *Uptr=Yptr + Ylen; uint8_t *Vptr=Uptr + UVlen; if (sdl_pic_format == SDL_YV12_OVERLAY) { // encode SDL YV12 stride_memcpy(sdl_overlay->pixels[0],Yptr,movie_width,movie_height,sdl_overlay->pitches[0],movie_width);//Y stride_memcpy(sdl_overlay->pixels[1],Vptr,movie_width/2,movie_height/2,sdl_overlay->pitches[1],movie_width/2);//V stride_memcpy(sdl_overlay->pixels[2],Uptr,movie_width/2,movie_height/2,sdl_overlay->pitches[2],movie_width/2);//U } else { // encode SDL YUV stride_memcpy(sdl_overlay->pixels[0],Yptr,movie_width,movie_height,sdl_overlay->pitches[0],movie_width);//Y stride_memcpy(sdl_overlay->pixels[1],Uptr,movie_width/2,movie_height/2,sdl_overlay->pitches[1],movie_width/2);//U stride_memcpy(sdl_overlay->pixels[2],Vptr,movie_width/2,movie_height/2,sdl_overlay->pitches[2],movie_width/2);//V } SDL_UnlockYUVOverlay(sdl_overlay); SDL_DisplayYUVOverlay(sdl_overlay, &sdl_dest_rect); SDL_LockYUVOverlay(sdl_overlay); } int sdl_get_fullscreen () { return (sdl_full_screen); } void sdl_toggle_fullscreen(int action) { if (sdl_full_screen && action !=1) { sdl_rect.w=sdl_oldsize.w; sdl_rect.h=sdl_oldsize.h; sdl_screen = SDL_SetVideoMode(sdl_rect.w, sdl_rect.h, 0, MYSDLFLAGS); sdl_full_screen=0; // dv_center_window(sdl_screen); } else if (!sdl_full_screen && action !=0) { sdl_oldsize.w=sdl_rect.w; sdl_oldsize.h=sdl_rect.h; sdl_rect.w= full_screen_width; sdl_rect.h= full_screen_height; sdl_screen = SDL_SetVideoMode(sdl_rect.w, sdl_rect.h, 0, (MYSDLFLAGS & ~SDL_RESIZABLE) | SDL_FULLSCREEN ); sdl_full_screen=1; } resized_sdl(); force_redraw=1; } static void calc_letterbox(int src_w, int src_h, int out_w, int out_h, int *sca_w, int *sca_h) { const float asp_src = movie_aspect?movie_aspect:(float)src_w/src_h; if (asp_src * out_h > out_w) { (*sca_w)=out_w; (*sca_h)=(int)round((float)out_w/asp_src); } else { (*sca_h)=out_h; (*sca_w)=(int)round((float)out_h*asp_src); } } void sdl_letterbox_change(void) { resized_sdl(); force_redraw=1; } void newsrc_sdl (void) { if(sdl_overlay) SDL_FreeYUVOverlay(sdl_overlay); // FIXME: on linux the SDL_*_OVERLAY are defined as FOURCC numbers rather than beeing abstract // so we could try other ffmpeg/lqt compatible 420P formats as I420 (0x30323449) sdl_overlay = SDL_CreateYUVOverlay(movie_width, movie_height, 0x30323449, sdl_screen); sdl_pic_format=0x30323449; if(!sdl_overlay || (!sdl_overlay->hw_overlay)) { sdl_overlay = SDL_CreateYUVOverlay(movie_width, movie_height, SDL_YV12_OVERLAY, sdl_screen); sdl_pic_format=SDL_YV12_OVERLAY; } } void handle_X_events_sdl (void) { SDL_Event ev; unsigned int key; while (SDL_PollEvent(&ev)) { switch(ev.type){ case SDL_VIDEOEXPOSE: // SDL render event render_sdl(buffer); break; case SDL_QUIT: if ((interaction_override&OVR_QUIT_KEY) == 0) loop_flag=0; break; case SDL_KEYDOWN: key = ev.key.keysym.sym; if(ev.key.keysym.sym==SDLK_ESCAPE) { if ((interaction_override&OVR_QUIT_KEY) == 0) { loop_flag=0; } else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if(ev.key.keysym.sym==SDLK_s) { ui_osd_tc(); } else if(ev.key.keysym.sym==SDLK_a) { sdl_set_ontop(sdl_ontop^=1); } else if(ev.key.keysym.sym==SDLK_f) { sdl_toggle_fullscreen(2); } else if(ev.key.keysym.sym==SDLK_l) { want_letterbox=!want_letterbox; sdl_letterbox_change(); } else if(ev.key.keysym.sym==SDLK_m) { mousecursor_sdl(2); } else if(ev.key.keysym.sym==SDLK_v) { ui_osd_fn(); } else if(ev.key.keysym.sym==SDLK_b) { ui_osd_box(); } else if(ev.key.keysym.sym==SDLK_i) { ui_osd_fileinfo(); } else if(ev.key.keysym.sym==SDLK_g) { ui_osd_geo(); } else if(ev.key.keysym.sym== SDLK_c && ev.key.keysym.mod&KMOD_SHIFT) { ui_osd_clear(); } else if(ev.key.keysym.sym== SDLK_LESS || (ev.key.keysym.sym== SDLK_COMMA && ev.key.keysym.mod&KMOD_SHIFT) ) { // '<' XCresize_scale(-1); } else if(ev.key.keysym.sym== SDLK_GREATER || (ev.key.keysym.sym== SDLK_PERIOD && ev.key.keysym.mod&KMOD_SHIFT) ) { // '>' XCresize_scale(1); } else if(ev.key.keysym.sym==SDLK_PERIOD) { XCresize_percent(100); resize_sdl(ffctv_width, ffctv_height); } else if(ev.key.keysym.sym== SDLK_COMMA) { // ',' XCresize_aspect(0); } else if(ev.key.keysym.sym==SDLK_o) { ui_osd_offset_cycle(); } else if(ev.key.keysym.sym==SDLK_p) { ui_osd_permute(); } else if(ev.key.keysym.sym== SDLK_BACKSLASH) { XCtimeoffset(0, (unsigned int) key); } else if(ev.key.keysym.sym== SDLK_EQUALS ) { // '=' :/ XCtimeoffset(1, (unsigned int) key); } else if(ev.key.keysym.sym==SDLK_MINUS) { XCtimeoffset(-1, (unsigned int) key); } else if(ev.key.keysym.sym== SDLK_EQUALS && ev.key.keysym.mod&KMOD_SHIFT) { // '+' SDLK_PLUS does not work :/ XCtimeoffset(4, (unsigned int) key); } else if(ev.key.keysym.sym==SDLK_MINUS && ev.key.keysym.mod&KMOD_SHIFT) { XCtimeoffset(-4, (unsigned int) key); } else if(ev.key.keysym.sym== SDLK_LEFTBRACKET && ev.key.keysym.mod&KMOD_SHIFT) { // '{' XCtimeoffset(-2, (unsigned int) key); } else if(ev.key.keysym.sym== SDLK_RIGHTBRACKET&& ev.key.keysym.mod&KMOD_SHIFT) { // '}' XCtimeoffset(2, (unsigned int) key); #ifdef CROPIMG } else if(ev.key.keysym.sym== SDLK_LEFTBRACKET) { // '[' } else if(ev.key.keysym.sym== SDLK_RIGHTBRACKET) { // ']' #endif } else if(ev.key.keysym.sym== SDLK_BACKSPACE) { if ((interaction_override&OVR_JCONTROL) == 0) jackt_rewind(); remote_notify(NTY_KEYBOARD, 310, "keypress=%d # backspace", 0xff08); } else if(ev.key.keysym.sym== SDLK_SPACE) { if ((interaction_override&OVR_JCONTROL) == 0) jackt_toggle(); remote_notify(NTY_KEYBOARD, 310, "keypress=%d # space", 0x0020); } else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); //printf("SDL key event: %x\n", ev.key.keysym.sym); } break; case SDL_VIDEORESIZE: sdl_screen = SDL_SetVideoMode(ev.resize.w, ev.resize.h, 0, MYSDLFLAGS); sdl_rect.w=ev.resize.w; sdl_rect.h=ev.resize.h; resized_sdl(); force_redraw=1; break; case SDL_MOUSEBUTTONUP: switch(ev.button.button) { case SDL_BUTTON_WHEELUP: XCresize_aspect(-1); break; case SDL_BUTTON_WHEELDOWN: XCresize_aspect(1); break; case SDL_BUTTON_MIDDLE: XCresize_aspect(0); break; default: break; } break; case SDL_ACTIVEEVENT: /** Application loses/gains visibility */ /* TODO disable rendering when inactive */ break; case SDL_MOUSEMOTION: break; default: /* unhandled event */ //printf("SDL EVENT: %x\n", ev.type ); break; } } } #endif /* HAVE_SDL */ xjadeo-0.8.10/src/xjadeo/jack.c0000644000175000017500000000675612620454615013133 00000000000000/* xjadeo - JACK transport sync interface * * (C) 2006-2014 Robin Gareus * (C) 2006-2011 Luis Garrido * * 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. */ #include #include #include #include "weak_libjack.h" #include "xjadeo.h" extern double framerate; extern int want_quiet; extern int jack_clkconvert; extern int interaction_override; extern int jack_autostart; static jack_client_t *jack_client = NULL; /* when jack shuts down... */ static void jack_shutdown(void *arg) { jack_client=NULL; xj_shutdown_jack(); if (!want_quiet) fprintf (stderr, "jack server shutdown\n"); } int jack_connected(void) { if (jack_client) return (1); return (0); } void open_jack(void ) { if (jack_client) { fprintf (stderr, "xjadeo is alredy connected to jack.\n"); return; } if (xj_init_jack(&jack_client, "xjadeo")) { return; } WJACK_on_shutdown (jack_client, jack_shutdown, 0); } void jackt_rewind() { if (jack_client) { WJACK_transport_locate (jack_client,0); } } void jackt_start() { if (jack_client) { WJACK_transport_start (jack_client); } } void jackt_stop() { if (jack_client) { WJACK_transport_stop (jack_client); } } void jackt_toggle() { if (jack_client) { switch (WJACK_transport_query(jack_client, NULL)) { case JackTransportRolling: jackt_stop(); break; case JackTransportStopped: jackt_start(); break; default: break; } } } void close_jack(void) { if (jack_client) { jack_client_t *b = jack_client; // prevent any timecode query while we're closing jack_client=NULL; xj_close_jack(&b); } jack_client=NULL; } int64_t jack_poll_frame (uint8_t *rolling) { jack_position_t jack_position; int64_t frame = 0; if (!jack_client) return (-1); memset(&jack_position, 0, sizeof(jack_position)); jack_transport_state_t jts = WJACK_transport_query(jack_client, &jack_position); #ifdef JACK_DEBUG fprintf(stdout, "jack position: %u %u/ \n", (unsigned int) jack_position.frame, (unsigned int) jack_position.frame_rate); fprintf(stdout, "jack frame position time: %g sec %g sec\n", jack_position.frame_time , jack_position.next_time); #endif #ifdef HAVE_JACK_VIDEO if ((jack_position.valid & JackAudioVideoRatio) && jack_clkconvert == 0 ) { frame = (int64_t)floor (jack_position.audio_frames_per_video_frame * jack_position.frame / (double) jack_position.frame_rate); # ifdef JACK_DEBUG fprintf(stdout, "jack calculated frame: %li\n", frame); # endif } else #endif /* HAVE_JACK_VIDEO */ { double jack_time = 0; jack_time = jack_position.frame / (double) jack_position.frame_rate; frame = (int64_t)floor (framerate * jack_time); #ifdef JACK_DEBUG fprintf(stdout, "jack calculated time: %lf sec - frame: %li\n", jack_time, frame); #endif } if (rolling) { *rolling = (jts != JackTransportStopped) ? 1 : 0; } return(frame); } xjadeo-0.8.10/src/xjadeo/display_gl_common.h0000644000175000017500000002124413747774274015735 00000000000000/* xjadeo - jack video monitor, common openGL functions * * Copyright (C) 2014,2015 Robin Gareus * * 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. */ #include "xjadeo.h" #ifdef HAVE_GL #include #include #include #include #include "display.h" #ifdef __APPLE__ #include "OpenGL/glu.h" #else #include #endif #ifndef GL_BGRA #define GL_BGRA 0x80E1 #endif #ifndef GL_TEXTURE_RECTANGLE_ARB #define GL_TEXTURE_RECTANGLE_ARB 0x84F5 #endif /////////////////////////////////////////////////////////////////////////////// static int _gl_width; static int _gl_height; static int _gl_ontop = 0; static int _gl_fullscreen = 0; static float _gl_quad_x = 1.0; static float _gl_quad_y = 1.0; static int _gl_reexpose = 0; static unsigned int _gl_texture_id = 0; static int _gl_vblank_sync = 0; /////////////////////////////////////////////////////////////////////////////// static void gl_make_current(); static void gl_clear_current(); static void gl_swap_buffers(); static void gl_sync_lock(); static void gl_sync_unlock(); static void gl_reshape(int width, int height) { gl_make_current(); glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho (-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f); glClear (GL_COLOR_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); _gl_width = width; _gl_height = height; gl_letterbox_change(); gl_clear_current(); } static int gl_reallocate_texture(int width, int height) { glDeleteTextures (1, &_gl_texture_id); glViewport (0, 0, _gl_width, _gl_height); glMatrixMode (GL_PROJECTION); glLoadIdentity (); glOrtho (-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f); glClear (GL_COLOR_BUFFER_BIT); glGenTextures (1, &_gl_texture_id); glBindTexture (GL_TEXTURE_RECTANGLE_ARB, _gl_texture_id); glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); //TODO use glBindBuffer() // glBindBufferARB() glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); #ifndef PLATFORM_WINDOWS glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); #endif return 0; } static void gl_init () { glClearColor (0.0f, 0.0f, 0.0f, 0.0f); glDisable (GL_DEPTH_TEST); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_TEXTURE_RECTANGLE_ARB); } static void opengl_draw (int width, int height, unsigned char* surf_data) { glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT); glPushMatrix (); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, _gl_texture_id); glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, width, height, /*border*/ 0, GL_BGRA, GL_UNSIGNED_BYTE, surf_data); glBegin(GL_QUADS); glTexCoord2f( 0.0f, (GLfloat) height); glVertex2f(-_gl_quad_x, -_gl_quad_y); glTexCoord2f((GLfloat) width, (GLfloat) height); glVertex2f( _gl_quad_x, -_gl_quad_y); glTexCoord2f((GLfloat) width, 0.0f); glVertex2f( _gl_quad_x, _gl_quad_y); glTexCoord2f( 0.0f, 0.0f); glVertex2f(-_gl_quad_x, _gl_quad_y); glEnd(); glDisable(GL_TEXTURE_2D); glPopMatrix(); } /////////////////////////////////////////////////////////////////////////////// static void xjglExpose(uint8_t *buf) { if (!buf) buf = buffer; if (!buf) return; gl_make_current(); opengl_draw (movie_width, movie_height, buf); glFlush(); gl_swap_buffers(); if (_gl_vblank_sync) { glFinish(); } gl_clear_current(); } static void xjglButton(int btn) { switch (btn) { case 2: XCresize_aspect(0); break; case 5: XCresize_aspect(-1); break; case 4: XCresize_aspect(1); break; default: break; } } static void xjglKeyPress(const unsigned int sym, const char *key) { if (sym == 0xff1b || sym == 0x1b) { if ((interaction_override&OVR_QUIT_KEY) == 0) { loop_flag=0; } else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", sym); } } else if (!strcmp(key, "a")) { gl_set_ontop(2); } else if (!strcmp(key, "f")) { //NB. gl_win handles this directly. gl_set_fullscreen(2); } else if (!strcmp(key, "o")) { gl_sync_lock(); ui_osd_offset_cycle(); gl_sync_unlock(); } else if (!strcmp(key, "p")) { gl_sync_lock(); ui_osd_permute(); gl_sync_unlock(); } else if (!strcmp(key, "r")) { gl_sync_lock(); ui_osd_outofrange(); gl_sync_unlock(); } else if (!strcmp(key, "x")) { gl_sync_lock(); ui_osd_pos(); gl_sync_unlock(); } else if (!strcmp(key, "l")) { gl_sync_lock(); want_letterbox=!want_letterbox; gl_letterbox_change(); _gl_reexpose = 1; gl_sync_unlock(); } else if (!strcmp(key, "s")) { gl_sync_lock(); ui_osd_tc(); gl_sync_unlock(); } else if (!strcmp(key, "v")) { gl_sync_lock(); ui_osd_fn(); gl_sync_unlock(); } else if (!strcmp(key, "b")) { gl_sync_lock(); ui_osd_box(); gl_sync_unlock(); } else if (!strcmp(key, "C")) { gl_sync_lock(); ui_osd_clear(); gl_sync_unlock(); } else if (!strcmp(key, "g")) { gl_sync_lock(); ui_osd_geo(); gl_sync_unlock(); } else if (!strcmp(key, "i")) { gl_sync_lock(); ui_osd_fileinfo(); gl_sync_unlock(); } else if (!strcmp(key, ".")) { XCresize_percent(100); } else if (!strcmp(key, ",")) { XCresize_aspect(0); } else if (!strcmp(key, "<")) { XCresize_scale(-1); } else if (!strcmp(key, ">")) { XCresize_scale(1); } else if (!strcmp(key, "\\")) { gl_sync_lock(); XCtimeoffset(0, sym); gl_sync_unlock(); } else if (!strcmp(key, "=")) { gl_sync_lock(); XCtimeoffset(1, sym); gl_sync_unlock(); } else if (!strcmp(key, "-")) { gl_sync_lock(); XCtimeoffset(-1, sym); gl_sync_unlock(); } else if (!strcmp(key, "+")) { gl_sync_lock(); XCtimeoffset(4, sym); gl_sync_unlock(); } else if (!strcmp(key, "_")) { gl_sync_lock(); XCtimeoffset(-4, sym); gl_sync_unlock(); } else if (!strcmp(key, "}")) { gl_sync_lock(); XCtimeoffset(2, sym); gl_sync_unlock(); } else if (!strcmp(key, "{")) { gl_sync_lock(); XCtimeoffset(-2, sym); gl_sync_unlock(); } else if (!strcmp(key, "m")) { gl_mousepointer(2); } else if (sym == 0xff08 || sym == 0x7f || sym == 0x08) { // BackSpace, Del if ((interaction_override&OVR_JCONTROL) == 0) jackt_rewind(); remote_notify(NTY_KEYBOARD, 310, "keypress=%d # backspace", sym); } else if (!strcmp(key, " ") || sym == 0x0020) { if ((interaction_override&OVR_JCONTROL) == 0) jackt_toggle(); remote_notify(NTY_KEYBOARD, 310, "keypress=%d # space", sym); } else { if (want_debug) { printf("unassigned key pressed: 0x%x '%s' [", sym, key); while (*key != 0) { printf("%02x ", *key); ++key; } printf("]\n"); } gl_sync_lock(); remote_notify(NTY_KEYBOARD, 310, "keypress=%d", sym); gl_sync_unlock(); } } void gl_letterbox_change () { if (!want_letterbox) { _gl_quad_x = 1.0; _gl_quad_y = 1.0; } else { const float asp_src = movie_aspect ? movie_aspect : (float)movie_width/(float)movie_height; const float asp_dst = (float)_gl_width / (float)_gl_height; if (asp_dst > asp_src) { _gl_quad_x = asp_src / asp_dst; _gl_quad_y = 1.0; } else { _gl_quad_x = 1.0; _gl_quad_y = asp_dst / asp_src; } } } static float calc_slider(int x, int y) { if (interaction_override&OVR_MENUSYNC) return -1; // TODO: cache those for a given values of // _gl_width, _gl_height, movie_width, movie_height const float xw = _gl_width * _gl_quad_x; const int bar_x0 = xw * ((.5 / _gl_quad_x - .5) + PB_X / (float)movie_width); const int bar_xw = xw * ( (movie_width - 2 * PB_X) / (float)movie_width); const int bar_y1 = _gl_height * (.5 + _gl_quad_y * (BAR_Y - .5)); // 89% = bottom of OSD_bar const int bar_y0 = bar_y1 - (PB_H - 4) * (_gl_height * _gl_quad_y) / (float)movie_height; if (y > bar_y0 && y < bar_y1 && x >= bar_x0 && x <= bar_x0 + bar_xw) { return (100.f * (x - bar_x0) / (float)(bar_xw)); } return -1; } #endif xjadeo-0.8.10/src/xjadeo/fonts/0000755000175000017500000000000013775353060013256 500000000000000xjadeo-0.8.10/src/xjadeo/fonts/ArdourMono.ttf0000644000175000017500000034403012620454615016002 00000000000000pFFTMX!OS/2˕x`cmapjsNcvt DMrfpgms# 4gasp glyf#head}݉6hhea [4$hmtx r  locantmaxpwX nameU2Lpost2 prepAڂ<~.x _</"/"#sm#R/Zc33f  @ [(1ASC@ m J -=')=!uqTTf}!5!f!of\sR`RwNJ+\VBo!!!!!!TTTTTP}}}}!-ssssssRR!!!OufufufufHTsTsTs9fff}}}}}}!R!fffdTs}!-PsF9+!e|z!DfT!qoTf!59J!yyR==sjJ+PZsZ B!qTf5y=`Db9#!ssyRJ`}m+q{s#jRRb=b{ \{u9PTs?R?RFPTsRXR^))/=#;;+jTsfy!R!R5`qs!!-TTTsTsTsDRRR+#`q5`5`11#+'Py{uq)!q\!!!!U!!!!!!!!YLTsTsTsJJTsTsTsTsTsTsTsTs}}}}}}}!R!R!R!R{N=wR`JR yJJF}11BB79%P9o19-#999#D(~ #?M   " & 0 3 : < D  !!!!"!&!.!^"""""""+"H"`"e%  #>M   & 0 2 9 < D  !!!!"!&!.!["""""""+"H"`"d%WN6|g[ZUP=C)$ G:8-*#TQIHA>2ݘbhl   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a;rdei=xpkOvj_\s`agwVYX]l|cn[B^Wm}>b018945b:EKBCcd<y6:?QXqTUVzYWR@EYXUTSRQPONMLKJIHGFEDCBA@?>=<;:9876510/.-,('&%$#"! ,E#F` &`&#HH-,E#F#a &a&#HH-,E#F` a F`&#HH-,E#F#a ` &a a&#HH-,E#F`@a f`&#HH-,E#F#a@` &a@a&#HH-, <<-, E# D# ZQX# D#Y QX# MD#Y &QX# D#Y!!-, EhD ` EFvhE`D-, C#Ce -, C#C -,(#p(>(#p(E: -, E%EadPQXED!!Y-,I#D-, EC`D-,CCe -, i@a ,b`+ d#da\XaY-,E+)#D)z-,Ee,#DE+#D-,KRXED!!Y-,KQXED!!Y-,%# `#-,%# a#-,%-,F#F`F# F`ab# # pE` PXaFY`h:-, E%FRKQ[X%F ha%%?#!8!Y-, E%FPX%F ha%%?#!8!Y-,CC -,!! d#d@b-,!QX d#d b@/+Y`-,!QX d#dUb/+Y`-, d#d@b`#!-,KSX%Id#Ei@ab aj#D#!# 9/Y-,KSX %Idi &%Id#ab aj#D&#D#D& 9# 9//Y-,E#E`#E`#E`#vhb -,H+-, ETX@D E@aD!!Y-,E0/E#Ea``iD-,KQX/#p#B!!Y-,KQX %EiSXD!!Y!!Y-,EC`c`iD-,/ED-,E# E`D-,E#E`D-,K#QX34 34YDD-,CX&EXdf`d `f X!@YaY#XeY)#D#)!!!!!Y-,CTXKS#KQZX8!!Y!!!!Y-,CX%Ed `f X!@Ya#XeY)#D%% XY%% F%#B<%%%% F%`#B< XY%%)) EeD%%)%% XY%%CH%%%%`CH!Y!!!!!!!-,% F%#B%%EH!!!!-,% %%CH!!!-,E# E P X#e#Y#h @PX!@Y#XeY`D-,KS#KQZX E`D!!Y-,KTX E`D!!Y-,KS#KQZX8!!Y-,!KTX8!!Y-,CTXF+!!!!Y-,CTXG+!!!Y-,CTXH+!!!!Y-,CTXI+!!!Y-, #KSKQZX#8!!Y-,%ISX @8!Y-,F#F`#Fa#  Fab@@pE`h:-, #Id#SX<!Y-,KRX}zY-,KKTB-,B#Q@SZX TXC`BY$QX @TXC`B$TX C`BKKRXC`BY@TXC`BY@cTXC`BY@cTXC`BY@cTX@C`BYYYYY-,Eh#KQX# E d@PX|Yh`YD-,%%#>#> #eB #B#?#? #eB#B-,zE#-@o/o3@3U3U3U@h F pU3/@FSJpМ@8 F 8 0@SGŽ@vutPsPoHnGUa`e`d_y?OFO_o[[[Z9ZZ3UU3UQP@ FIF`H;G3UU3UUGU@oTS++KRK P[%S@QZUZ[XYBK2SX`YKdSX@YKSXBYssst+++++++_ss++_s+sss+++_ss+ss+ssssss++++++++++s_ss+s++ssssss+ssss++++++s+ss+s++++s+s+++++s++ QuJs}wUinfoxH/NyL' JxyZmmsexT9zo((((Zp,Hv6TtZdvF  ^ v  N  L 6 \ 4p lfV :RtT:Bv:^&6B:p L !`!v!""b""#4#x##$$8$$$%%r%%%%%&&|&&&&&'' '8'R''''(((4(() )"):)T)l)*$*<*T*l***+@+R+j++++++,,,,,,,--d--...6.L.....//,/L/d/|/////00(0D0L000011&1<1P1d1|1111122$2:2P2h223$3<3T3l33333344\4445 5"5555556 6666677*7B7Z7r778,8r8888899V999::6:N:f:~:::::;;;2;H;`;v;<$<<>>.>D>v>?8??@L@^@@@@AA(A>AVA^AAAB4BjBC CFCCCCCD:DDDEE4EVEtEEEEEF FFFHFFFFGHGPGXGGGH H(HNHVHHHIVI^IJ.JHJbJzJJJJK0KKLLLMMTMMMNBNNOjOrOPPxPQQ>QRJRS2SJSdSzSSTDTUHU`UzUUVHVPVXVrVzVW>WWWWXXX\XdXlXXYjYZZ4ZZZZZ[[ [[[[[[\\\\\]J]]^D^^__d___``aXatabZbcc$cLcTc\ccccd2dhdeeDeef:ffgg(ggghh h&h.hhhii*i@izjjjk ZDqNV #+Ϲ" H @ H H H H@! H H Hg****!@H@Hh&&&&!@.H!-h g($ ????/]]+]99//+]+]33]10++++++++"&54632'254#" #"&54632'254#"#'#w/J8v=%-@'& $@0H@$4$$GHO;G 0yG@ H/)H@ HFFV7@7 H!PX X&8'X')'('& O,Q ???9/]9]]]]]9+]]]/+3/3/+]99//]]_]]+]]+93910 673#'#"&5467&54632>54&#" 32ZG!5}كdccQWcˆ]yݦֻfAOwJJ\YQv{i@ ?/]10#))' '@ ??/]3/333103#?Da) '@p ??/3333/]10#3@s wwH$@     ?2/39/]10% '%7++wo`f`Fo3 @  ?32/]3210!5!3!!#}}{?@)p@ H//]9/+]]10#79L#Cy @ 0?/]3/]105!Ѩ-@0 ?9/]102#"54f-@ ??3/33/210 #sJ9 6@ oo @ Hs s??/+^]]10"!2%2#"d+n}=; +@ n  ??99/^]3/310!#47'3'Raz+Fy{+-U@o@H@ H  st?2?39/]22+]+]3/]10)5>54&#"'632!-q^|lfv}~qwԳw"_@: o _ o$sh s s ?3?39/]9/]]3]9/]3/910]!"'53 !#532654&#"'632ibr\/O`!}fwy}ƥ=f V@ H n @H@ H@ Ht  ??9/9332/+3+9/]+332210+##!533!4#fհ\{ $6eHH0dfNR@1 @ H o  s st ??39/3/]3/3333]9/+10753 !"'!!632#"PYZ7'kf;`:&9]3!O@@ Hn  #o@Hu  ss??39/]2/+]2]9/+10&#"3632#"!24&#"326G_ _hΪQ4Z hݰ;G@0yGW'(t??2/]2]9/3]10]]!!5!N31)|@  &nn n  +!nH@" H9Yiy* #s#s??9]]]+]/+]]99//999910#"&5%&54632654&#"!2654&'5鲸f~nj}cl~Ϻߡ7gejjeZ}yuZJ3!N@ H o#n  @H u us??39/2/+]]29/+10532##"&5432!"32654&#"Cc `i2󑜣gޮf-@ 0` ??9/]32102#"542#"54fffD@.) 0` /??/]9/]2/]102#"54#7m3}>&f3a@=gwhxv@? /]]33/]]]]]29333/29]10]]%5 3e5fà3@@' pO_oP/]]]3/]]]3/]32105!5!eTf3_@54&#"'6322#"54\sSAkvBH%xRatd\sZaälWlZJ.8@Z44/88 `$ *:$6-1 ?O0 @   '!/3?99//]]32/]]99//]]]]]93]29]10##"&5463232#"327# !2#"&#"32JxžwHd޼ﵥN )rL61Y_Ѱ/`&  ɷ& 6 F  @H        Hy X   H H HG Z`p  @`w&6Vf  ?2?39]]]/8]]]3/8/]299]10+]++]]]]]+]]]]]]+]!##373>yr%3.@@HZP`p_??/]+1033!{q\@ @% H'  H:   ) @M H5& H(    @P Y  ?22]2.3?33/]2]]210]]+]]]]]+]]]+]]]+]]]!##333#4#XJwf!Ds @NHE U e 4  %  HJZj;*  IYF V  ?22]?3]3/]2210]]]]+]]]]+!###3353DBL/e T{ $@ [[/_ _??/]10 ! '2# hyx",/F 8@"[ Z`  `??9/]/]2]10#! !'3265!#jƫ9TTb{U@0 H [l| H[ /  _ _?33/3?/]2/3+]9910+%&'# ! 2# ^Uy\$('y@",/ s@K+ H)   H)    F [@H Z` ` ?3?9/9/]2+99]3/8310]]+]]+]]#! #'32654&+ue夫\aiq\|?8@Z!Z  `_??99/]3/]3/10753 54&'.54$32&# # ^е@ۃ1VhpMIˢNNf|GXfd<@$ZcP_??2/]_]_]_]]]/10!#!5!!û^_}P'@ Z Z _?2?/]]10# 3! P3'L\}! @g H) @; H&hHX*  GW%@ H?3?39]+/3]]]3/3]]]9=/3]3]10]]]]+]]]]+]]3#367')/>Jaϑc@T)9''&6) 9 (&6Hh)9@!HTEw@ Hx H    i y [ J  g & 6 F  $4d  ('K [   ?3?39/99]3/3]3/]3]9=///]]3]]3]]]]]]]3+]]]]]3+]]]]]3]]+]]]3]]10]]]]]]]]]]]]]363#&'#367= ?F( !˪X".X56JDoil'5 @$    @ H&  H  ) @< H& H )      ?2?39/33/33/]22/39]+]+]+]+10!# # 3 3ZKNZ{/L!@$ H&6hxZH)9' H@JHYH{PZcP4?3?9/3]3//]_]_]_]]]9/]]]2+]]2+10+]]]]]]]]+ 3#3d}/fd D@(&) __?2?2/3/33/]3/310]]]])5!5!!d-3@  ??/]]3/]310!!!!Z1@ ??3/33/310 #sJ!14p@H ??/]33/+]10!!5!!!Zϕo%^3@ H/]33/23/229=/+33103# of%d!H//3/10!5!+!@ _/]3/310#&'53+yjVXَ{^!B@& !G#HR PN??2?39//^]3]2210!'##"&5%754#"'6323265%M?Ļ˴ĤȓaKLER`knD:@"HGPP ???2?2/]229]10%##33632#"3 !"T %ksQ;%^+@  HQ Q ?3?3/]]2/10&# !27# !2%>vi"#9cj>=#&/:@#GH P P??2?2?/]]2210%##"323&53#54&# !26qt #+ -!)ZbH^G@,HH    PPQ?3?9/^]/]q2q210!!27#"32%!! HPï=LK+ 7#1ZF@( GNP ??3?332/]3/]323/9/10!#!5%54632&#"!{=с{)hg{X?n!`#dshff^$,6@/4$ 'F_8 0?O_+F@ H"%R.)O".Q "2N?2??9/29/99/+]3/]3/]293/10#"';2!"&547&547.54632254#"#"! 54&fAվ7d`YfV@EdJqU8MT:/kpP%e ƮX=-<@&$4G G P?2??2/^]2]10]!# #3363 wͶ gr2o333@ G V N N S???29/]322102#"54%5!!5%yj?+k`Xr:9sr{E{{V9@ G P NS???3/]9/]329102#"5453265%5!#"kkj u\ZΤrssr)'re9{Av@ )9@>HFV  +; H` G `   ??3993?/]223/]+33/39910]]]]+]]73 ##3 V)%RZ6+ -@G] O  NN??29/]]33210%5!!5%`Xz{{{\s^ k@EveV7GG z  G   "G@P P ?22??3299/]2]]9/]]]]]]]210!4&#"##"#3363236325>WO}TH C2LtÒrJ3-^6@!G G  P ?2??2/^]2]10!# #3363 wͶ grJo3sX^ "@H HP P??/]10"32' ! b670Η`\D^>@&HG PP ???2?2/^]22q10%##33632#"3 !"T ns!+6d)/^<@%GHP P??2??2/]]210373#47##"3254&# !26y qs)+ -)Zb#^1@ G/ Q ???39/]]23/]10&#"#33>32#1{eLv1-Jwf^<@"F!F P `  PP?3?399/]3/3/10753 54&'.54632&#"#"byƫJ`k*:JrUp' RdJ F@ Hp @ HNN?2?2/]]3/3+]2/3+10)5!5!!+y}Db@?  p _@      /  ??9/]]]9/]]]]29/]93210$4!5 5%pJRpQKNMKQ) )@ O??/]103#`@>  P O  /  ??9/]]]9/]]3]]9/]93210475&54&'5! 5>5qRIq;) )LQLLQJ3Z/@   p ?  /]]]323/]105632327#"'&#"cdGlwcdFlJl?8yl?8^ %@    ?/9/9/329910"54323#fy3H%N@F 0  H@HP Q?3/3?3/3/+]]29/]3210&# !27#5$%53碜>vizN'89bk=;EJwVR@1 o  u/_ s t?2?39/]32/]3299//3210&#"!!!!56=#534632'By!ٵyHىN1ՉD'^@ %@ H O _ o  )@ H"?Oo/]3/+]]]3/+]10'76327'#"''7&542654&#"/berrccCCacrva`AxdecbDD`erx_`BD`_vrdefdN}@ H H@<Hfv t   g n g    @0@ ?3?99//]]]332329/]]]33229]2/399//3/]]]399//10]+++ 33!!!#!5!5!533dZ.Ҳ-!@O??99///]32103#3#'2}@+ (/-H**I F4G//I& F&&@ H&&3(- -( N N?3?39333/+]33/]23/]999910]]]&54632&#"#"'53254&'.54654&'Э8xcwVprq+PxHCt6N=>qXPAR9P>ThaLmYo00Ik?J 7@$p  Oo/]323/3/]102#"54!2#"54``````fggffggf ,o@F)#/? . +&!$!o `!p!!!!!! ??99//]]]]33/99//]310 ! 2#"#"&54632&#"32fCAkrܿ~=nSy^hjXWU..Um2>6G@% /0  ??2?39//]33/]]2210'#"546?54#"'63 326=!hު}p)#rxhi}vtg 3n:D?4KZn[s G@*  `  @0`   ?322/]3]]210%5uu5uu)NNNN3,@ H?2/3/+]10#!53y #+@^"$'""``"""" - $$+o "`p ??9///]]]]]]3]3/99//]]]9332910 ! 2#"###3 %3254&+fCAv^EoHTYEhjXWU..UPu`}J;?//10!5! +V @   H H@ H@! H 0  @  H?+]/]]10+]+]+]+]2#"&5462654&#"fOrsNOqp˻pNQrsPNp3 )@    ?32?/]332210!5!3!!#5!}}}{\oM@3O_ `p H  ?2?3+9/]2/22/]3/10!57>54#"'632!oo=oQSNuvFkfve9sLVgxhBVN@O O_`po  H H?3+?3+9/]]]]]9/]3/3/]9/3/]910#"'53254+53254#"'632Tn]HF{aGZBom='t2|A}hoFV]m^+!@ _/]3/210673#^PpyJ=@ GG@H P  ?3??2?/+]22]21032653#'##"'#3jڔ `NjJ:XW6B7M`@%H"2  @ H Q/2?9/3/+9/]]+]10#### 3!7yy=U]3y3H^"@0` /9/]102#"54f^!C @! H0 H   _  //993/3/]993310++53254'73!"!/[x9"l\J's%o !@   ?9?9/33/103#47'J )!FIE,3X 0@    0 ??/]3/]]10"&54632'254#"dws G@*? @     ?322/]]2]210 '7'7uu5itt6eN\\NbeN\\Nb'{&Ep9Y<@'P@]]]]]5]]]]]55?55'{&EtZaD@-   P@]]]]5]]5]]]]]]5?5'u&E5pNY8@$&&&&&&!!!!!!]]]]]5]]]]55?55w^![@7!@P# #G Q0 ?]]/]39/]9/]]]]9/]2310"5432327#"&5467>='YvT>kwAH%wTate]qZjãlWkZ!s&$CR&%+5+5!s&$vfR@ &f%+5+5!s&$QR@ &%+5+5!5&$XR&%+5+5!+&$jR&%+55+55!&$V}4@P@ %+55]]]]]]]55@T H7 ZO_ _ _ h    __/3?299//]]/329///]q323]]99+10)!#!!!!!3#s`Rh#Jwj;<&&zP (" %+5#s&(CR & %+5+5#s&(v?R@ &' %+5+5#s&(Q#R@  &  %+5+5#+&(jR@ &%+55+55s&,CR & %+5+5s&,vwR@ &x %+5+5s&,QR@  & %+5+5+&,jR@ &%+55+55{ I@,[ Z_h/ ``??9/]]32/]329103#53! !!!3 !V=ar|` C4D5&1XR@ &%+5+5T{s&2CR&%+5+5T{s&2vZR@ &Y%+5+5T{s&2QR&%+5+5T{5&2XR@ &%+5+5T{+&2jR@ &%+55+55-{ \H@ HH H H  HH@ H/]/]]10++++++++ 7   'i=Bh?ff?i>gf=gP!`@8 H H [  #[/_ _ ?3?399/]329910++%'7&!27#"&#  3245\yu|\}slPzPJNŸ`iNɼxD^V",}Ps&8CR&%+5+5}Ps&8vLR@ &L%+5+5}Ps&8QR@ &%+5+5}P+&8jR@ &%+55+55!s&<vLR@ &M %+5+5F >@$[ Z ``??99///]22]10#33 !'3265!#jƫ=T*r@K F GO _     G&,G P)P???39/]9///]]]]]]10]%53254&'.547654#"#!2#"ߏ[b{dمT1:z^ȷ1VQf=NzWujjZNouJ>!'HFV  +; H` F `    ?3?3993/]223/]+33/39910]]]]+]]73 ##3 VR}Js&/veR &H %+5+5+&OvN@ &A %+5+5;&/m' %+5+5;+&Om 'ݴ %+5+5&/l %+55R&Olsf %+55&/U %+557&OUf8Y %+]55HD }@6  y *v%  Z@ H  _??99//9/+]33/29/10]]]]}!'73%!}Iƻ+N{N}}X}F+@i f     H@< H o    G@]O N   N??99//929/]]3/]322/]210++}]]'7%5!7!5%NäM`XP\yz_ly{{Ds&1vbR@ &c%+5+5-!&Qvo@ &o%+5+5;D&1m'ϴ%+5+5;-^&Qm'%+5+5Ds&1RR&%+5+5-!&QR @ & %+5+5j7@G G/ P??3??2/32/]210#6# #33>3 2~<(`㶔 *gnJrJNZo3{DbH@6HEUe4% _ ?33?33/3/]22229/10]]]]++##3353#"'5325)B Ȼ^>MQ^-^<@#G  GP P???2?3/]2]9/10!#3363 !"'5325# V gQ46=JomrT{&2SR@ &%+5+5sXo&RS@ & %+5+5T{@&2TR&%+5+5sX&RT@ & %+5+5T{s&2YPR@ &N%+55+55sX!&RYR@ &R %+55+55I@)Z Z_h _ ___????9/]/299//]210)# !2!!!!!%&# !203.RHrg:I5F < X!9^$)l@) )G@Pp%F@ H +"G@HP))' P P?3322?3229//+]+29/]29910%#"32632!327#"&%2#"#"XYTIl`^{W䨪ZNO{} 3 +qLIv!1s&5vR&ݴ %+5+5#!&Uv\@ &-%+5+5;&5m' %+5+5;#^&Um&@'_?%+]]]]5+5s&5RR& %+5+5#!&UR &ݴ%+5+5?s&6v`R@ &&` #%+5+5!&Vv^@ &&^ #%+5+5?s&6QR@  && %+5+5!&VQ@  && %+5+5?&6z ,%+5^&Vz ,%+55?s&6RR@ $&( %+5+5!&VR @ $& ( %+5+5f;d&7m 'ߴ %+5+5;o&Wm@ '% %+5+5fds&7RR@  &%+5+5&Wl1Q %+55fdY@3  Z     c  P  ` _?2?9/32/]_]_]_]]]39/2/9/10!5!!!!#!5^_&ڻ3ߤ!bop@CG  /?N  N P?3?33329/32]2/9/]]333/]922910%# 5#535!5%3!!!!32z MiJ3] X^1ۉ}P5&8XR@ &%+5+5-&XX@ &%+5+5}P&8SR&%+5+5-o&XS@ &%+5+5}P@&8TR&%+5+5-&XT@ &%+5+5}P&8VR@ &%+55+55-&XV&%+55+55}Ps&8YLR@ &K%+55+55-!&XYP@ &O%+55+55}9P&8W%+559dJ&XW5@%+]]55s&:QR@ & %+5+5!&ZQ& %+5+5!s&<QR@  & %+5+5Ry!&\Q@ & %+5+5!+&<jR@  &%+55+55fds&=v9R@ &: %+5+5!&]vN@ &O %+5+5fd7&=UR@ & %+5+5&]U@ & %+5+5fds&=RR@ & %+5+5!&]R @ &  %+5+5d .@GO_ P ??3]9/]10&#"#4632)izw\}`wNR@*! o   ! u s s?3?39/329/]33/299//99//10#"'53265#5754632&#"33F;8\?™ad/OA\?D?fqKD%fqT 43@[+[6![ /  0_&_??32/]2210#".54>32>7332>54.#"{@ȇɁ<<ˎ|B  !1D.**$O\]N##N\]P$ݩllkZV4?I(4cWJ[鉉ۙQQۉڗQQs +5@J&H-!H  )P$P??32/]3301#".54>32>533 4&#"XJogNIoaB&+*9K1&*ם6'ՑLLՉӑKBA8HW0Er[CBc}&6@[`p%Z(Z & _??33/3/]2]10>53#".5332>5/7 0RyW-cslc.6YACV14Ma6EiKfrEA~z3WV+0ZR'WJ!!!H!@#H!G&)G  &  P??2?33/3/3/]222++]01!'##".5332>53>53 2U\+?).bi=4e`:{2Ne8FnH!&kR o %+5!s&$&V}vHRR@0(`(P(@((DP@ &)%%+55+5]]]]]]]55?]]]]5&D&Vv^H@1@@@@`@@@""""&@<%+%!%+%+55+5+]]]55]]]]]]5s&vR@ &%+5+5-!&vq@ :&p47 %+5+5Ps&v9R@ (&5"% %+5+5sX!&vP@ *&Q$'%+5+5;?&6m@ "' #%+5+5;^&Vm"' #%+5+5 5!+@  _/]293/329/3310#&'#567673yU~Nx"%%;82&OOC!+@   _/]293/329/3310#&/53673"##;xRzYy&LLC6;FoA@p@ H@ H/+]3/+]3/]10!!F?o9 L@ `p@ H   _/]23/]3/+]10# 3327 mOh L1}J@4[B& Oo/]3]]]]]]]]]102#"54fkkjrssrH   @ H@ H H H@*H H  H /@ H_/]+]++]+10+]+]+]+]"&54632"32654&bfyyfeg1?p2??tcctv_bwH<5q<55<9/8@"-=M0 H O_ /]/3/3/]9910+]#"&547332/ISw~Bqm^l}q`3@    /]323/3/]10#323273#"'&#"fh:gf"Pi9dd(R88r98!C@* @P O _ o   _/]323/]3/]2210673#%673#^PpdjWWpevHM@H/H @H pH/+]+/+]+10#".54>324&#"326H#>T12R; ;R20T>$u?21?972?3Q88O33O87O45<<55<<+!C+!vX!.@ /]9/3/3/9/3301#'>54.#"5>32!-<" q%;*$242)':)o! l[! 0@_/22/3/]3/3/01#.'53#.'53d"RM@+.0e"RM?+.0SXQ"QQLSXQ"QQL}  //014632#"&=-,?'-=<77<+7! @  _/]3/3/3107673# c=mkrPS+ W@9  O o   /]329//3/]99//]310673#'2#"54!2#"542)]zRa8)`aa`lf16gffggf!&$aED%+]5?5H^"@0` /9/]102#"54f^#&(a!@     %+]]]5?5eF&+a!@     %+]]]5?5&,a Ŵ %+]5?5|{&2a%+5?5&<a4 4 %+5?5z&a%+5?5&bZ %+555!$q%/9@@HZPH@ H_??/++]q+10!#/D չ @HHH) @ HG& H @THW G %    ` HX H *    /Oo[)9IH _?99?3]+]]/]]3]]]]+/]3]]]]+9=/33]]10+]]]]+]]]]]+]+%!53!&»_3%4}}1n #(fd=F+T{ a@@t/?{ 0X  [W[/`h _ _??9/]]/]]]99//]]]]10 ! '2# !!heyx",/,.! @H  HH )     @HG &   H   @DHWG%HXH* /H H ?2?3]++/]2]]]]+/3]]]]+9=/33]]10+]]]]+]]]]]+]+!#&'#3?-+ǍȆ`q\0D1o\ G@)/? 0   _h _ _??9/]/3/q2/99//]]10!!!!!5eQs<T{2F%@Z Z_?2?/]10!#!#!FF3H @W7 &   7&8)   _ _?9?9=/39/]333]29/310]]]]]]]]]35 5!! !n}Xgf%fd7!<'@Y& ) )& Z'   r @ P ` 4   HZ/?o)#@$ H#Z'` P  ``p?2/]32?3/]32/+]+9/_]]_]_]]]332210]]]]332+#5#"54;32654&+";//! ˴>6SջѬ5;9u@NZIrP`4D Z/?oZ  w` ??339/3]2/]]9/_]]_]_]+]3210+##"&3;332653嬊B!ZJw@N HO_  H@PX[ W[/_ _?32?/]3]2]9/]]3+]]]2+10%!5!&32!!5$! -  +8\S褓 E+&,jR@ &%+55+55!+&<jR@  &%+55+55y!&a.&&* %+5+5!&a`@ (&] $%+5+5-!&aP@ &O%+5+5!&a@ &* %+5+5;&b!% %+555555y^%=@"G '!H #P P??2?3322/]]222103673327#"'##"3254&# !26^ &3T4?( lUg-]o )*ZbP&Q@.* !HG( G  P P$P??3?9/9/]23/9/]910]#"'#46323 4&+532654&# }غu燚%^Fr=0?4ҷyP+~vRyJk@%HD T t   H 0@ H/? @ H ??33+?33/]3+3/]3+9/]93310%#433673ne7G$H?)>hiF"O@1+  F!H$HP P?3?9/]]29/9910]]&54632&#"#"$5%3 4-IJVTi%'˅mjI@?gdt,d^^Q@/  !GGPyPP ?3?39/]]9/]3/]29/910# !27#"&5475&54632&#"!HĪا?VKK BLHo+@W *  &  + HF  H{mI;-ykI;- P?2?99]]]]]]]]]]]/]3]2+3/3]10]]!#654&'.5%#!FtŦ嫗yygBx׉v'eob9A# -^1@G G P ????2/]2]10# #3363 wͶ frJoG9 O@2 ;(H  '7GO  /  PP??9/]]]/]]2]_]210"32! #"!32d3+n|n;mJ &@G  o P??3]9/]10327# bpe]J XJ=!U@3 $! H/?H  PP ??39]?/]+333]]99333103'.#"5632327#"&'&'#=5"VI80A>FF%A2ARWE$S;hH )o PWz-J:@# GG P  ?3??2?/]2]21032653#'##"'#3V a̭K:XW6=JJ t@F  H 5 E U $  )9  c s   DtG @ H ?2?3/8+2]9=/]3]]]]310]]]]]+3363#=n JEro+,@_)F"$_$$F  .H{mI;-Hy k I ; -  #O/,,,%"P#??29/]999]]]]]+]]]]]]/]]9///]]]99310#"#654&'$4675&5467+5!#"3LyycJזh>Eٷw[i8 dod5ADZ* ;r3 qhsX^RJy@5K [ k : (   G TE6'G @ P ` @H    P  P?3??22999//+]33]]]]]3]]]]10%#"!##57!#324Umފ&Z.PJPN};^5@H @H GPP ???22/]22+10%##32#"'32654&# TרqpFa0dto)^g@B FH{mI;,ykI;,Q ??399]]]]]]]]]]]]/]]2310#654&'$!2&# yT7>rfoc<;GZ;9H#BJ 2@HH  P P??2/]]2910!#"!#"3265+;;ǨJ>п j9JS@ G  @H= /   @ H_ PP ?3?29]2+9/]]]+]3]10!327# !579%kTT†J#XsJP;J3 F @H G GP ?2?/]3+103!2654'3# ??>JJ^\@:VfGI F IP/?P P??32?3/9/]]]9/33]]210$7!2$#" >xaD 1:ZΆ!^}&o+N@\&IY& )FV )  H @+ H  P  P ?3?3?39?399993/]3/33/+3/+399933]]]]]]]]}10 3327#"&'#&#"5632}7_.P@,$B4fG۴DT"5LQn7P3rYZy|> mPi@V f G  I FF@+HF@P/?P  ???32?3/]]]2+9/3]]210$43#&3-??'Ӭs&'ZZuJ@VG6@cHW6FV f G  II?!YH9HX9II0@P/ P?2?3229//]]3]]+3]]]]9/]]93]]+3]]]10332653323!"'## åhCKO?iiߵ2 2Jo~2΂2ز(.&j@ & %+55+55;&j& %+55+55sX!&RaH@ &H %+5+5;!&a'@ & %+5+5Zu!&a3@ (&1 $%+5+5 + O]@7FCC;GMQQQ3F>OONN"N)))N)N)8NH8N??99//]32/]]3/]329/10.#"#".54>54&#"'>32324&'.54>323j 9M[0LV.j<@ăoV" 6%%d62E, 0N:C'QYhuKlt=XH8iR3:s7_}E(]YK-! 2D(#V]a-*J620>KxQCpR.Tߋ H @F H& 6   YT )  ZcP ;;'@ H??9+]]]33/]_]_]_]]]2]]9]]2]]++10>7>32.#"#3dKNI.6@)"+ ! ># /:B?8K,(=' /<Sn</J @_@<V8f8G88I77!I B,I@P/771' P <1P?222?229//]]3/]9/]]9910".54>7#57!##"&'#4.'!32>=332>{OnE ## EnO^o o ## #4$$6#O?$4#DrCtnrBJPBrntCrDW[[W>rpvCCvpr>[R&)Hb9˂&R#s&(CR & %+5+5#+&(jR@ &%+55+55}@IH Z  F V 7 /?  Z _@_ _ ??2?39/]99//]]]]]3/]2/+]210%532=4+#!5!!!2#"DCIνX#o/s&nvmR@  &: %+5+5D@'@H [  _h__ ?3?39/]/]299//+10!!!27# !2&#"LuŒf6ܣNN:;iZVN?6,+&,jR@ &%+55+55- @X HxWg H x   H Z`G" _`_ a?3??9//]99//]]23+]]+]]2+10#"'532>7!3 +3 4&+wp8( $#5)'Ϧ- Fa^ xBC@% ZZ@ H_ h `?2?39/]32/+29/3210!!#3!332#'3 4&+%¥>')- Vhܠ xi@;H Z  F V 7  Z _ _0@  ?3?9/]29/]]]3/]22/+]10!2#4+#!5!!κI#s&vR@ &B %+5+5Fs&CR&%+5+5i&jR@ &%+5+5F C@*Z Z Z _/33/?3/]9/]10)#!3!3Fv{I!$o 3@[ Z_ _ `??9//]22103!!! #%! 4&++R<^ܠ yq%/n @ H  H  H @ H[Z  @% H    Z _  _?3/322?/3/99//]+]+]10+]+]+#!#36!3!# űq Pk'Xjk#(@Lg w   6 F V  F V 7    Zhx 9IYg  g@ g@2hh   @ P    ?33?339933/8]3]3/83]/83]3/82]9/]]33]]]]]23]]10 333 ###u]Vs<<</#Q@.[!! [%  `h ` ` ?3?39/]]9/]39/3/9]10!"'53 !#532654&#"'6!2cvɌv]O`}gzy}ƥFb@@H5EH:J )  i&  ?22?33/]22]]2]210]+]+333#4##BլpJFFi&jR&%+5+5 @`% *'  Z`p)  )@`?2?399/8]]]2]2/83]/]23]10]]!##336<BFo@! @H | Z j - = M   @ H HZ@ HZ_ ` ??3?/9/+]10++]]]]]+!#! #"'532!FuGB98fn~/iq\0F+T{2F{F3&fd7@    H@YHIY8) FV7&O_oe6%  _?2?39]]]3/]3]]]]]]3/3]]]]]]99=//++33]10 #"'53267337TLx~hJU]ny6  '8b-gz?m5; :@" Z Z _?3/2?3/]]3/10%3#!3!3 }F/@Z Z _??39/3/]210!## 33273FgnۻVZsGтePyV \@@eV7G{Z Z? Z0@P _?2?33/]]]9/]]]]10)33333V#=@Ye V 7 G {  Z  Z?Z/o  _?3/22?33/]]]]3/]9/]]]]10%3#!33333 u ;@! Z[ _ _ `??9/3/9/]210!!5!3 !'3 4&+FD#^bRD z`m S@5I  0p? Z 0_ `?2?39/3/]2]9/]]10333 #'3 4&+3`/JNR/^ܠ yVJF <@ [ Z@H_ `??9/3/+]2]10333 #'3 4&+Rƪ^ܠ yDLJ@+ [ /  _h_ _?3?39/]3/]3]29/]10'63 !"'53 !5!.#"M0YԒŃqٜV{k;:bn@+/O_@H @ H 7Zf@ H_h __ ????9/]3/+]]2+9/+]310##3332#"26&#"qj_`il^]V]"qs;eh9 q@   H Z   H[@H` ` ?3?9/23/+]3/83+]299+10]] #$)## ;b}tʤ\b6J\^D;#>@%H @H !HPP?2?9/22/]2+2103632#"4>! #"!s tܺ>h% _#CAҪh? j9wlTJ [ @1 HF FGPx PP??9/]]]9/]23/910+]#!! !2654#!254&#L5%r>F#ߕJ@HT>\H#J.@GoP??99//]]10!#!˶PJ!hJ t@ ( H@5 H P     F GO _ o  GN  P?3/322?/]3/99//]]33++10]]#!#3!3!#hVP$}+P$H^HJ@iyK[)9 fvDT&6 V f  7 G   G   hx H H@Pgw H  H @   ?33?3399333/83+]3/83+]3/8]3+]3/83+]9/]]33]]]]]22]10]]]]]]]]]]33 ### 3^mo5--5^ W@3 F F"`p!P  x  PP ?3?39/]]]93/]33/9/9102654#"'632#"'53 54!#5?ɖOWHL9 AϗEV-J H @P H  H H iyfviF f  F    ?33?33/]22]]]2]]210]]]]]++]++3##L  JdjJ-&j%@&p$ %+]]]5+5J @NX HveFV5&X H   G@H ?2?39/+]2222/310]]+]]]]]]]]]]]+]3 ##36ݴJ-JJ@ H @oHTd2B$ H )x9Ii     H ) 9    0@HGP O ??3?/]9/+]]]3]]+]]]]3]]]3]+10]]]]]]+]+!#! #"'532!%>o$/ sZJ@HGH@7H H\l|:J)I@0HScs5E& I  @ P p    ?333?333/]2]]]+]]]2]]]+]9=/3+]3+]10]]!##&'#367673Z Շ<00 dU&yJpM '"-J ?@&G  G  Px ?2?39/]]]/]2]210!3#!#V!߶J9JsX^R-J)@G GP?2?/]]10!#!#!VJD^S%^FyRJ<@%G P??29/]3/]2/]10!#!5!RooPRyJ\J ]@;VfGI  IIP / ?  P P??32?32?/]]]9/33]]2210#$%3$51ϝ#Z2*$-  )s<~!y`jJ[J 8@ GGo   G P?3/2?3/]]3/10#!3!33}JPP%J/@ GG P ?2?9/22/]]2103273##"&5NͫȠJfs}RJ Z@?FVfI 7I? 8I0@PP ?33?2/]]]]]9/]10%33!333+JPmJm@IIFVfI 7I?8  I 0 @ P   P   ?33?3/22/]]]]]]9/]3/10%333#!333vVP}JP+J C@) GI P P  P??9/]/]9/]2103 )!5!3254&#J\vZRqZJc@BI Y i  I`p7I88  I7 P P?3?39/]/]]]2]]9/]]]103 )33254&##3\ޡv¢JZRJDJ>@ F G@H P P??9/]/+]2]10! )3!254&#\9vJZR%^i69  H@1 HH Q/xQ Q?3?39/]]]3/]3]29/10++]]753 !5!!"'63 !"_l> )>\=9;{^f@!II @ H 8I@ HPx PP ????9/]]]/+]2+9/]310##33!2! %2654&#"#LSg]\jh]]J9ŗs J o@$H)   G  Ww@ 7G PP ?2?9/9/]]3/]83]]299]]]+10!#&5463!#!%!"39#̭CfH!&HC&Դ %+5+5H&Hj@ &! %+55+55-"b@: G$ G  P!PO   ??99//]323?/]32]9/9105325#"##5353!!363 !"6=좓{ jQ-DՉo#!&vh@  &6 %+5+5%^]@:69     HQ/x Q Q ?3?39/]]]/]2]29/10]]]]&# !!!27# !2%>p]# #9Ú>=$$^V3L3&j&%+55+55VMJy@N  Hz   H H HG`I PPO P??3?9//]]99//]23++33+10]+]3 !## #"'5326!3254&#3\Ѻ!4\`>)1-#7v&k T~ZRjJV@8I I8I@ H PP ?2?9/]32?/+]29/3]210!33 !#!#3254&# +3\բo7vJ9=JZR-!&vZ@ & %+5+5-!&C & %+5+5Ry&\j @ &  %+5+5-J D@+G G G  P  ?3?33//]]9/]10%!3!#!3V!}JR{<u@   @ H ::'>.---@" H--3/'';;8* .. 0_*::8_"?32223?32/29//]2/+]39/93/+]310%32>5#"'>32#".'#".532&#"3273'80C*NB7)/"X0"N^!6.+*.5!^O#0X"/)8BM+D09%+Ye %% e%fgY+J*z@.  &!""""I_I ,*@ HI& ""O?33?3393/3/+]]q33]9/]3/]]3399]10!33>733>53 #.'ᠣ" Vm?O-BqXT jJ\U38AC!`g`!hT8>u!A@!Z [#!__` ??99//32/9/3220132#!!5!3!!32654.+^7<~†+wh.[]JNBqWap=`@Fa<X'!C@"G F# PPP ??3/39/2/9/3229/01!!2#!#5353!32>54.#/eqN+7]D&!A`@לM|X/)B01B(b-V@0"@ H*/!_!! +_*' _?32???329/32/29///]+3201"!!3267#".'##33>32.DrU7 )-U}RBt9;@I,xx> LpT32.#"!!3267UrF KrS"D@9/243{ \$@]=Hs0/n:{J9r4   \T(% @  @@ H H    ` _ ?33?9/322/3/9/]93+]q9}3+]q3]910##3###!'.'p s7'%3<VJVDniKK\=J @l G  G I    H   uFVf7% HP@ H R   ?33???9/+322/]/9/]]93]]]]]]]9}3+]]]910 #####.'#3ch## "" JJ\Z]VW]["b@   w  YiVf  x  Zj2) `P@ H`  ?333?39/323+]322/22/]]]]/]9/]]]]]]]93]]]9}]9]]3]]]]01##!#3!3###3'.'/'}-( &VVlJVJTaKK[{ J@z IfTI4DjYE3   d    PP P  ?333//?39/323322//]/]qq9/]33}/]9/]]]]]]]]]q]]210 #######3!3.'#l::'\ JJ9ǐV`^##^`V#&S@,$ JZ(% (&#'a$ &_?22?9/332/33/333/39/]]329011>75!#.+##" !q1LrVYqJ/qq"1F66F1"q%Ub:狋8bV;H_9H9_H?` J#&u@D$f  IzYK'&#'%   R$ &P?22?9/33233/3/]333/]39/]]]]]]]32]9013>75!#.+##"! w*BdPPdB,wv$/B33B0$wT=eM1 dii1Lf>P6H+ +H6-\(+s@@)   *[+Z (/ 0 "`) + ?222?9/22333/]2/]33//]3/9/]32910!>7##3!5!#.+##"!`8 ɦ:AS4 77 .&'- 8BQl(Vዋ8aW;I_8H8_I?Z{ J(+@[)I       u h   *HI+H`  (I* I""P) +  ?222?39/3/2/]22/]3]3/]/]3/9/]]]]]]q3]]2910!>7##3!5!#.+##"!sI բ =N3 II )! !) L)}T2C J9^ii1Mg>P5G, ,G5-uF'v@DbGQQMYYl9[gg,[rrxNMMMCDD"22Z"Z]@VVNC>abl2a33QGDb'` _?2/3322?3339/922/2/3/3/33/]32/3/23/93301"32>32.#"#".54>32>54.+532>54.#"'>7.'53>32.#"G[4$=/AaTQ2V^ 5N51GJ\FhP1fkYQ&8hY\a2&D_97aVO&\;f762y3b6:CK*/ !10.S}U+3[}KX_1B )$ )H`732.#"#".54>32>54&+532>54&#"'>7.'53>}.\*;bE&2G+/S=$7yJY/%@06mfZ$HN $+."\lw<_zE#UnQ}U-y;oV5yOS?>vF/0-y6e8=GSRuK> .D\;2N;) +B\>CuV1&#   +EW-3ZC(+E3^[ #B6MM&""983#`8"F9$9PT{)+@%[+$[ `$$__??9//2201#".54>322>7!"!.{@ȇɁ<<ˎǃ@W{O'g(P{XUzQ**OxݩllkkGzz†GCuuCsX^+@H H PPP??9//2201#".54>32 ! !XJogNIogN e#'ՑLLՉӑKKdDF?!O@/7&8  0P` a ??3??32/3/]993]3]]92/01"#3>7>32.#5*$= -* 7>32.#"#R f5AS<, ( J?FJC9]ge%@]uC(A.?!s& _R&m1%+55+55R!&!_$&8$%+55+55F'Ho@DHHH HH/(7AA')))((( (6 6677 H/ID=6(#_???3?33//]]]9/]3/]]]3/99+]10#".54>3232>54.#"%33>73#"&'5326?j8m]]m89m^]l8y .#$. -#$. d j)>X>%0/1?ݶcbee貉ۙQQۉڗQQ8=?>@<aNxS+ WcP^>@dX>h>9>I>(>%>-I666XhxIY X,I,8,,,,I-fvI %>:P3,PP???3?99/]]/]]]]]9/]]]]3/]3]]99]]]01#".54>32324&#"%33>73#"&'5326?s&Gf@=dH'(Ie<9dI+{;9u<9td j)>X>%001?'݂44ݨہ33ۨ΃8=?>@<aNxS+ WcT{)?^@5% ;+50[A [/;O8_8885_+@(P(((%_ ?32/]2?32/]2/]9933333301#"&'.54>7>32>32>54.'#"&'{0acJ6:Gg^,,^gG:6Jca0/K6C30E7M00M7F04D5J/ݒ~>55>~}>12;~le-%'-dnnc0(&.esX!6X@/$ 5*/,H8"H5_222/QP'''$*Q ?322/]?32/]2/]9933333301#"&'.54>7>32>3264&'#"&'X6bV <6:;Qc85aT :9*Qd9׿ 8309 c` 9037 'u\6,,6\ts[6( $[sG&&GJ#*(GR{='f@k56?6O6_666660<(F" F"" "P54.5463232>5#"'>32#".'#".532&#"32>7Pr^&+7vg6jp}Jwz<8$2.;D}$Z30C*NB7)/"X0"N^!6.+*.5!^O#0X"/)8BM+D0-)(ˁ$*$-5#ke$*$MsL-%&F9BYe !! e%fgY .Xs;Qb@)////@ H//)I! 7dFIXR]]UU==H @- HI X`VU``HCL<==HHHU.,,Q2/&!Q?3322?3332232/]3/323/9/2/+]2/2/3//3992/+]10"&'#".54>32&#"32>732654&#"'>32#".#"#5463235654.54632>[ XIDf_.("#(/^eDJ:23#^-FmK'3Z~iPn`.+7vh>llwJxyt$2.;D# #<כۉ>>۝Չ?$+$.4lq$*$MsL)3&&FR{ J@dH; ;;;HHHHHHHH5  !L   A5II8F<<>_8;;8   8HHF_+&0?33223?3222332239//]]933333339/]]q3/]2/10#'##'##'532>5#"'>32#".'#".532&#"3273R#11#11#O'80C*NB7)/"X0"N^!6.+*.5!^O#0X"/)8BM+D09%gggg+Ye %% e%fgY+ 8@//#0I888&8F8V888@fH8000000)0I0Y0i040)(8 )I  *: P  I#04   )?3?3322293?3/]]933333339/]]99]]q33+]q33]01#'##'##'533>733>53 #.'R#12"21#P:ᠣ" Vm?O-BqXT jgggg\J\U38AC!`g`!hT8>#4@Z! %[!_  _/?2?32/]3/39/01"32>7##".54>32.k{C;vv-(%LWlON?'QډۖN bln,* .%^5@G !HQ Q?2?32?/]3/39/01".54>32.#"3267#qđSTzZB>:O1^W5U"?Ֆۉ>"#ic0h^o @K ?O_ 0 @ P         @H @ H/33/+33/3/33/8+3/9939939999/33/33/]322/]32/93901%'%7%7%BG㴁FGJ{J;{Z}9IĤ{@  //3/301#!#"&54>3!>32+9?,08( &.08*P9),338% -12@  /23/3/]/102>32#54&#"+5Nwp:m|:.*eyUf$+$el#4.$+$5#@@ H  /]/9/+014632.D;/2%954.54632xz<9$2.;DMsL.&&F)/5 )7EScq2#.#"#>2#.#"#>%2#.#"#>!2#.#"#>2#.#"#>!2#.#"#>2#.#"#>!2#.#"#>`ABE% HCBABE% HC>FI!JCAEH%F>>FI!JCAEH%F>H?GJ  IAAEI#JC5M> "?LK> "?JO>"#?NO>"#?N9O> "?NO> "?NNA #BMNA"#BM)b +6?JU>@+$ 6JD5/ !%U>OOO:/]22//22/01%#>73>73#.'5.'5>7''>7.'7.'7 -Od -T d59:@>9L.u8?A<6o,?784F/q3@)m7Hw5=%$ GP2;&$! J/w6Wr#0u6?>: T d -R gi4;$&#G7;J'J5o-?:5/H5o/?:6/Hh1\@21'&& 3@  1',! _?3/?3?3322/]229/3/2210!46767##3333##".'332>7׮B٦a0]dgW*3K5,I6#9ALMF>CC JLhMwP)'OwP9H),G5%H@` H%5 H H* :   %FF F '@F %   P?3/?3?3322/^]229/3/2210]]]]]++]++!#333##".'332>7^ : {{%0]dgW*3K5,I6#jJdP}NvQ)'PwP9I)+H5/F!A@![#Z !__` ??99//32/3229/0132#!#5353!!32654.+7<~†N.[]NBqWap=`@Fa<=D!I@'F#GPO/P??99//]32/3229/]01!!!2#!#5353!2>54.#/eq98]C&!A`@!M|X/)B01B(F#l@;[% Z ` #` ??9/32/33/99399/]22/3]3/9939901'+#!23267'7>54&+F3R:hj},b9~<$ ;^mv<; =sfU N 9mgL"y]D^#9x@C2!3 547H;433* G   $P 2!3 3544/P ?22/32/99399???3/^]22222/3q3/9939901".'##33>32'"3267'7654&=bO= _Tkkt DDOmC DoT"jlo\+: "7+6#=-HԌEN .^_)ek7Lh#>@@H ZH@ H_??3//++]+103!#s--#-@Go GO??3//]]10!#!3߶!?J?d 1@Z  _ _ ??9/32/329/01!!!##53dP}J 1@  G O P??9/32/329/01!#53!!!!#q&8@"[( Z _  _??9//32/]2/01"#!!>32#".'53 4.%<H-WRv1ND< ?HwC{ \O  y~@ XJ)5@H%+FQ P Q/??9//]2/01".'532>54&#"#!!>32)A7104=&FnM( S# "N*}ДRL   0ci/J>۝և?r@@ /?iB   _??33/?339333/3/33]]]]22/]32/9/]332210!### 333 3#1`HAw<<<Jb@5 I I    P/33?333/9333/22/]]]3]29/3322310!## 3333#àZJJt--5e}B/&2, %+55B^&/)%+55x@Mu6V Z`p W @ %   (U6$ ?3/3?393/]]]]]2]3/]]]]3/]22]]]10%3###33+76˦<BJM@, F  G   P ?3/3?393/^]22/]22/310!#33 3#ݴ-J_} Z@I & `p@`      ?2?99//93299?993/8]]]33/3/]9/]]33222201!###3733wwBdbceJ@K I  {`G`   ?0?3?99//]]9399399/]2/8]]]33/39/]]32210'#3733 ##}6}J8 ';w@J Z `pHX@`_  ?2?39/]932333/8]]]33/3]/]322999/10!###53533#73>yr`{3;z@IveVE G  H`Yv   O ??9/32?393]3]3/8]+33/3/]3229/99]]]]10353!!373 ###;{ V^uߘ%RZ_@. H Z  X  _?2?3933]]]3/833/83/9/299+q01!##!5!73hudN+J \@6(8 gVGG  P ?3?393/8/9/]2]]]223]3/83]]013 ##!5!`LJ-N@/ Z    Z_  ?3/3?39//]]2/^]q201%3##!#3!3 VhJU@5G F   O o  G P  P?3/3?39//^]2/]]]q201!!#3!33#F𶠰J9P} K@/ Z?O@H  Z_ ?2?39//^]q2/]+]210!#!#3!!!aVhJ ;@" GO  G P ?2?39//^]2/]201!#!#3!!#ǷFJ9ǚj$D@&"@ H&!0""! _#!_ ??3?9//]+9/2/10>32#"&'532654&#"#!#!1b[+3^T6U+&I/sdgp3a\O  J)N@,I` I%%%+IQ PQ/22?3?9//]]9/]3/210"&'532>54.#"#!#!>329<\(*R82F,/L9-F0N]40Wy /bkkf1-PJ'9ݥׅ<TASk@=3OOL[8 888#""B[ U+[/G`p====&_O30_ _ ?332222?/]/]3/3/2/39/q9333103267#"&'#".54>32.#"3267.54>324.#">{6G'7#;D E>)U;~ĆFE2]&8="Q|T*.X~P%8&)PsJJsP* , , 80.js%  ,4_^ D㞝݋?6uV|<7vVY-4`TO!e|ss^P@9H4CWH 9Y9H999$##HCNNCCR,H NP>>>>>@ H>>1$'P# 1PHJP?322?329/+]q/]]2/2/39/]]q]933310>54.#""&'#".54>32.#"3:7.54>323267!+9B ,>?RA|9&S/oGCv9O -8*QuK$'MsL "4$0TrAAnR.0@%'59?4[M@-k3T: zh%LхԗS  8lgai8'PZg=^Y+'VcFwcO B&&v$ %+55B%^&F75"%+55fd J@, ZcP_ _?3/?2/]_]_]_]]]/01!#!5!!3#û^_yRJ 6@ G GPP P?3/?2/]/10!!5!!3# oo}!<RyJc@>7G&H) G{cP ??3933/]_]]_]]]9/]2]]]2]]10#33>73H  HJ Z]VV]Z o!ʹ@$ H&6hxZH)9' H@THY H{P Z    c  P   _ ?3?9/32333/]_]_]_]]]32/9/]]]2+]]2+01+]]]]]]]]+ 3!!#!5!53d}&ڻ'=X3RyJ@ v  @G H y HGcPO ??39/332/]_]_]_]]]3/39/]2+]]2+]]01!!#!5!33>73 H  HcJ Z]VV]Z o5@GWH h x    @ H  &  @@ H&  H  )   H )   _?3/3?39333/33]+3/3]+/3]+3/3]+933]3]01%3## # 3 33GZKNZ{/L`J@$ H   H H@ HI  H  F@3H   FP   ?3?3/93333/3/333/]33/3933301]+]]+]+_]+]+]+] 3 3 3## #w"#u-P3fg}L9@0Z Z _ _  ?3/2?32///]01%!33#!#5!#J?@$ G F@ G P P?3/2?3//]]/]01#!#5!#!33y}P=@"Z  Z_  _?3/?39/32/]2/]01%3###"&5332673 QT2R=MT?&G9W:JA@%GF/G  P P?3/?39/32/]/]]201!#".53326733#F'NRZ3RX/idNI% /TsDfXV-+P}FQ@& ZZ   _    ??39/333/32/22/]29/3210!###"&53;3>73FAm5!2R= 3q?V$ 'G9W:X $%J_@7I@Pp G GP  ?3/]33??39/333/3/]29/]3201;3673##5#".5Nid}hi5e7}/RX/JfXV-F%3/TsDF+@ Z Z_ ??39/32/]2013>32#4&#"#n_ĻduVk--/tt((95J;@$G G   P   ?2?9/32/^]2]01!4&#"#3>32idZT,W\e9RX/XV:9+J/ /SsDZ{-8T@/4[:#&g&w&&3[("`3"(( _._??329/32/3]22]]22/012!32>7#".'.54673;>"!4.}]$`$KxZ/OGA!!AL\<~v< f !0WeZz†G  ]rz*B>#a[A~xuCX^,5^@81H((7 fvI0H/ @HP0 "-P'"Q(?22?9/32/+3]22]]22/01".'.54673;>32!32>7"!4.lK 02KuZcn;L3WPM'(MQW`s 8XFǁor'?:"/1lu=Gnq ۜDqP,{0;g@97[=&)g)w))"6[,%"`6%++ _1_??33/329/32/3]22]]22/9/012!32>7#.'.54673;>"!4.}]$`$KxZ/OGA!;CN1ZV. f !0WeZz†G  }orz*B>#a[A~xuCX^-6q@BF2H8"%f%v%%%I1H)/!@HP1!(( Q.P??33/329/32/+3]22]]22/9/102!32>7#.'.54673;>"!4.cn;L3WPM'BNTc9 02KuVs 8X^Gnq  "uToor'?:"/1lu=DqP,,i&jR@ & %+5+5&j@ &%+5+5X%X@1  7 g w ![' Z a _?3/32?39/32/]3/223/301]]]"#3332#".'53 4.9R#5җSRw1ND<?~IvEs}<XQ휪O  w8 XJ"U@0"!!""H$ 6FF  N!Q ?3/32?39/32/]3/2]23/3]801#"&'532654.#"#33jdOJfLi/,iB4aUSKb=ϕՈ@%jb.LJ#K@* """""[Z_"a_?3/?32?/3/9/]9901%3####"&'532>7>7!Ð٦ !"5OnN#J; 0@* !'+AqQgo; ?bu69:J?@! IGGPO P?3/??/3/9/9901%3##! #"&'532>7!{{@_V17YE3}iuoFN@. ZZ  0_/ _/22??39/^]]/]q3/2201".'53265!#3!3X-G=68n?IJ  VhݪO -JH@* GG PQ/22??39//^]3/2]201"&'532>5!#3!3Ki/+jB;[=߶!?o %-aiJ9Ո@T@1 Z  0  [ Z_  /     ?3/3?39/^]]/32/]q201%3##!#3!3Ð٦ VhJI@)G G  G P  P?3/3?39//^]2/3201!!#3!33#B춶{{J9P}F=@ Z Z  _ _ ?3?3/9/32/]22/01%#"&5332>73##9e^\12R=-VY`8" G9W: J'%JK@-FG G   P P ?3?3/9/]/^]]22/01#".5332673##3o,W\e9RX/idYT0 /TsDfXV:9q@< l|[:J)      @XHc s T 5 E  &        _   ?3/3_]2_]?333?/]222]/]q2]2293301]]]]+]]]q]]]]]]]]]qq!##3333##46767#򚹰lJI?9Xw4=GIsJ$@$$$$$$i$Z$H$)$9$$ $UeF7&   I$$I{$$P??3/3_]3?333/]32/]293301_]]]]]]]]]]]]]]]]]]]]]]]3###.'#3>7{{{ǃ  JP}EJDy>IKJp"QK>=JN",!i&$jR&%+5+5&Dj@ $&%'"%+5+5!+&$jR&%+55+55&Dj @ &&-(,%+55+55-^#i&(jR& %+5+5H&Hj@ & %+5+5T{)?@$$[+%[ 0/%_ __ ?32?9//]3/]201"5>32#".=!.2>7!#oO&P]oCٓKIЇz7b7d0M}Z6c#Kw),  l髮hgRzGfA~xuDH^'I@+"H)#H#PP Q?22?9//^]q3/]q2102#".=!.#"5>267!-wƏOHolx@8aYT,+SW`d Bg^J҇֔OGnq  %DqP,T{+&jR@ .&04%+55+55H&j@ ,&.2%+55+55+&jR& %+55+55&j&%+55+55/+&jR(&*. %+55+55&j%&'+%+55+55B K@)WF[ [ "  _a` ?32?9/2/]3/9/3/01]]#"&'532654&+5!5!JsGC͉nU+`cc.Ϻ{=;6df`t@"-$ Ѧ;J$F@& J$$J F&!  N!P"P ?32?9/2/]39/]3/01#"&'732>54.+5!5!HhNL{z>!Tbo;M\3;l[w=@rlnK$"0YNV{P%}횅F&SR@ &%+5+5-o&S@ & %+5+5F+&jR@ &%+55+55-&j@ & %+55+55T{+&2jR@ &%+55+55sX&Rj& %+55+55T{sX^T{+&jR@ .&04 %+55+55sX&j#&%) %+55+55DL+&jR&"%+55+55%&j&Ǵ! %+55+55&SR@ &%+5+5Ryo&\S@ & %+5+5+&jR&"%+55+55Ry&\j@ &! %+55+55s&YRR@ &R#%+55+55Ry!&\Y^@ &^" %+55+55F+&jR@ &%+55+55%&j@ &%+55+55+d 8@# Z 0_ _?3/?/]q2/10!3##d#J .@ FGPP?3/?/]2/01!!!3##ˠJ}`m+&jR@ & %+55+55qZ&j@ &%+55+55mdH@& Z___` /??9/32//322/9/]01!!!3#"&'5326=##53dPn}'?:"/1#ل 11mJH@% I GP O  P Q??9/32/32/322//9/01!#53!!!!3#"&'5326=#n~&?;".2ل 115m&; %+]55`mwJ&[^P 6^ %++]555 @ H  &   H  ) @ H& H )   @ @ _  ?3?39/3322/833/83/8399//3/83933333]+]+]+]+01 # #!5!3 3!KNL{`/`jJ·@$ H   H H@ HI  H  F@7H       O ?3?39/3322/]33/3/]33/393333399//01]+]]+]+_]+]+]+]!3 3!!# #!)"#-rs{f1L*@Z [_` ??9//]2014>;3!".#";7Ϙ~=][.WqBhJ=p_;332>5#"32>5CmO\m"#za1hpRAD,XPB^<N^0<# PTe7WWO]gr<hrg3S<CkM#@!(F%22F?;F8P&-P ?322?9/?2/]9/3901%2653#"&'##"4>323&'.53!2>754.#"XB;"DeCn"+3232653#".*H8S[XV<^5RAgQyO'8P19T8/!B;(MmEEpO+MmF!}|s!)u696aOItU: 3SyTJgAs-ka-&^+^\9G@%%F -F00;P.*Q5N?32?9/9/3/3]9/33201.+532654&#"'>3232653#". )F8S[KWBq?=AeQxO'8P15Q8-!B;(LnEEkL+8P3VPRJ$ $&*Id97V@+8U=6K/s5ka-Eu'u1P@+Z..1'[""1/P//`'a ._00?3/?9/923/3/3/]2/23/10!#4.+532>54.#"'>323#Ż8g]\a2%D_:nK\&btHmp93[}KW^2DcA 'He=6S:C6}6)6aOIxX9  9YwHP\^/N@)$FG++/F,10P$P0--+P?3/?39/]923/3/32/3/201!4.+532>54&#"'>323#>fK>dH'/RPP-?]scq=3G+6T:+/I1'@-MM '%$HjF5Q;) ,B[>}0S@. 0 00 #&&2 _+$$_` ?32/?9/?/]99//]9901##"'532>7>7!32653#".5-  0N>3';BD9*NmDCnP,tQgn: <]q6;9сww-ib.,`lJ)I@(IF))) F+ P O$ ?3323?9//]99//]10##"&'532>7!32653#".5- &0:E)1%=0% 7HA:$InJGqO*ՑY'uo=}{5ib.%WhyH@*8   G__???39/3/]]2]]9/30132653#".5!#3!3>EE:%JoKKnH$ꦦww-ib.,`l-Vh{{JP@1IGW IHXIP P?2?9/?/]2]]9/]301!332653#".=!#"7H?:#FiGClL(ޢJ9=5ib.%WhJuo(I@*(( 'Z*[  _(_/_@H"_??39/+]2/]2/39/01!#".54>32.#"32>5!4oyҍHP؈sKH:^Vd7-YWRmBIii,*"2QډٚU7osq\^(A@#(( ?'G*H  N(P"N??39/2/]3/]39/01!#".54>32.#"32>5!{2qȄAGЊoM=<[[\/%S^QnBJDȉGOӄҔP%'-:mb]p>-PqC@@&Z  0Z0__??9/2/]]/]]0132653#".5!5!!qR\\R2]QP_5^_ww-ib.']s)oJ<@# GG PP?2?9//]]/]015!!32653#".5)51P;i_/_`[f7AbA 5ib..bi5D;I@'1'' =Z [116a&#`', ` ?32?329/]9/]3/22/9/014>32.#";#"3267#".54>75.& 8@() 0p ?9/]]10#77yA$ C@1) 0p /?/]]9/]]10%#77yG$ (@&o?9/]]10#'7(<|5 J@2&/ &    ?329/]]3/]]10'63!'636{>&{6{>& \@A )  /   )@Pp  ?329/]]]]3/]]10#7!#7)7yA$7yA$   ]@@ )  ?  )@Pp  /?/]]329/]]]]3/]]10%#7!#77yGq3}G$$ /@   ??229/]332210%#53%87778L_7@   ?22?229/33322210%%#553%%K77L//L77K/y"x{R *@P`_o@ /]]]102#"&5fmo|N_@=4%4%4 %     ?33229/]]]]3/]]]3/]]]1072#"54!2#"54!2#"54 #/9E@vC3338-'""o"""""=88G :$@*5p0 ??399//]]33222/]3/3]99//]]]3]]10"&532'2654&#"' "&532'2654&#""&532'2654&#"r~q?*/:;/+ F)r}q?*/:;/+Ps}p?),<9T5#f} dF3}+<v@G!!2+# G')%)))>:H+) O&##$7P ,P N ?2?]2?9/32?/]3/]2/2222229/01!5!##".54>323&'.=!5!533##%2>754.#"/h=Nb>aq>>qa=bO= {OmC DoTK"=.F̆΋G,: !7+,YZ'af4`j'j@ ") Z  @/_%_ _??99//]3232/333223/329310!!!!!27# #53'7#5332&#"BI(zA^'ۿOzx>:; &x\J#+" H @ H H Hf****!@EH@Hi&&&&!- P  f($  ?33???/]]2]99//++33]10++++&#"327#"&54632#"&54632'254#" RDgIJlcQ'!k!!k% JBl!j@>n  pp?? "# v vu?3/?9/33229///]]]]3/32103!"&=56746323264#"urVkHyn~g53Ly(yQk&*@$$++ @(Ht V f 7 G 0H{Yi8H'$ @o*@H*, @1!K[@ H(V(f(v((a'D T  H ?33+]3]]?3+]399//]/22+99//]2210]]]+]]]+]]]]!###3353"&532'2654&#"5! C1rrx?00?@00u/d\Zysqrmnqptuk@?   z  ?333/33392/]3]]]]99//]222210##5!###33#47#/ { ell%/VWxJRwH<@ / ?  www H ?3+?9//]322210!327#"532'&#"w{Gaۗ3,y|{){D1Qwu'{&EtVgT@7  d T D  P@]]]]]5]]]]]5]]]]555?555 'u&EtjgL@1(((((((!!!!!!]]5]]]]]5]]]]]555?555'q&EtjgP@4"""""""]]]5]]]]]5]]]]]555?555's&EtjgP@4 k [ K 4 $  ]]5]]]]]]5]]]]]555?555yR9@F !HN PP ?3?9/22/]29/1076&#"563 ! 432.#"32 BLŻ^(T>{Ui2J ȵ H H@D H& H)  HH X *    _o @6HG W %    P` _H[)9I?3]]]+?99/]3]]]+3/]3]]]+9=/3]3]10]]]+]]]]+]++73!&'!Jw;"-+qEoȆX1@Z Z@ H_?2?/+]]10!#!^J z@R7 &   7&8)  @ H_ _?9?9=/39/+33329/310]]]]]]]]]5 5!! !JGMs+r 3@ ?3/]105!.@ //]9//2/33/39/3310##5!3d( iF'_ H@2 H H H #)&   ?/]323/3992/]910++++#"&54632632#"&#"32732654&#"bvwwltvqRmAPPChVkAPT@gmծլBkOQemNOg)@  ?3?39/]3210&#"#"'5325!28:N7<8JX׮'b{3%#H@) %$" ?  P/]]33/]3223/]32105632327#"'&#"5632327#"'&#"bbJmvadIpscdGlwcdFlm@7yl?7l?8yl?83n@A     pO_o  P/]]]323/]]]323/]3299//393910#5!!5!3!!!'=yJi{;93 e@?gwhxv  @? /]]33/]]]]]29333/3229]10]]%5 5!3e5efà3 c@>hxgwy   @? /]]33/]]]]]39333/3329]10]] 55!6e}VV=f=ݖ}P D@    /3?39=/3333/]329=/333/3310 # 3 P;L>L 11+"R@+ G $GS O!P  ?3?3?3329/]/3/3229/9210###5754632&#"32#"54#3Ùad/O@\@!j?+kŷ?KD`%erhr:9srJ1B@" GGOP ?3?3?32?/3/329/910###5754632&#"3#3Ùad/O@\@{?KD`%erhB)'4c@7)'')& 6(  P  R( &/ N ?33?32?3322/]3333/]9/33333910!######5754>32>32.#")3547.#")ˣͤdd(MpH1W"&f?4[%)E%&7$o!-#5#55A>RjT#  4W@hfsN4W@B)'4a@6,))&6( PR( &/ N?32?33?3322/]3333/]9/33339910#####5754>32>323#.#"3!3547.#"Hͤdd(MpH1W"&f?0.&7$-#5#55A>RjT#  4W@hfsN4W@7%9EKQW]aeimquy}@.bze}z}L]?E %!_!o!!!%*7O _ % %`%%@dH@7P77 %77% FUUvrn]Fkg_Lthp`xlh`ll`hLG)99&~~ H`%%%&o&&&4-<B--XSXzLScG/33/3399//33/]333/]]9/33/]39/+39339///333/2222/33339///]+]]33/]3333333/3993310#".54>3232+!##"&'5326=#32654&#"%!#335!#55353#35!#3#3#3#3#35!32654&#'32654&+4N66O33O66N4XX%#WK HXE+ ''^l58933985/oo0mmoo9oooommmmmmIu;&*73%!%/X@##@X67Y?##?Y75B(6&AH4MPLR),SSJKSSK0o/mom-oohi;mmz" P)9N@&))*q2P2`222****7-))--/3/33/3/3/3/33/]3/3/]]3/310 54>7>54&#">3232>54.#"fe##5##HFAB7f-52 &+ A2)  )2AVW+"!"!9>G.|!)5*($%36;$7A:/ "/ 8 -@  _/]23/3/]10!"&'3327ì Tw”fUVJ/@G  PN ??3/]9/]91053265%5!#"u\ZΤ7're9{A @  ?3/3/107673# T=`ktN_;@  /]3/3/10673#>`CcVR!@  _/]3/3/10#54673?[IbY99 "@ 0 ??/3/]10"&5!2%2#"d+ќ97FD% V@4_ hx H    ??9/]93329/]332+]23/]310##5!533#547TyT((Vb RZI:PD\@9 @H O_p   ??39/39/]]3/]99//+3331053254#"'!!632#"Pfi4I>#=v|D'}nm998@0   ?2?9/]2/3/]92103632#"&54#"326-4 =p͓Jb]KDSmn\G~zc> IaYMDUH};b~ͺcW8P{^-h0@@@  HO_/]99///+2/]10467#"&>73#-xz<9$2.;D5 08>RNsL.%'F%KOQ$ MPQ%D@#?Oo @ /22/33/39333/]3/01#.'#5>73'>73#+d3l46j3e3t00t3N -j7e"T00T";EE;,.4!73#.'#7#.'533t00t3d3j65k3dNe7k-!;EE;"T00T"+g<!4.,)_@4$$$$@ H$$ !''@ /322/9/3/33/39333/+]3/]9/01#.'#5>73#'>54.#"5632Le3k56i3e3t00t3#-V 8A%' ;cd"T00T";EE;v+Q %RE#,f@$'("(  ((/(((''@$  /322//2//3/33/]3/39339910>73#.'#".#"#>3232673-3t00t3e3j64l3d$HE?(*\0B)&JE>(*\0B;EE;"T00T"Z"*20Q;!"+10Q;!9 -@  @  /22//3/]01>73#%#"&'332>7% -j8dn,LnGm0D+$B3",.5!7e8j-!,LnGm0D+$B3",g<!5.,7'#'>54&#"5>32,LnGm0D+$B3"+#-V 8A9+' &cd7'".#"#>3232673,LnGm0C,$A3"/$HE?(*\0B)&JE>(*\0B4j '( f   2 . .:*  h   N P q  ( 8 \O \ Ti Digitized data copyright 2007, Google Corporation.Digitized data copyright 2007, Google Corporation.ArdourMonoArdourMonoRegularRegularFontForge 2.0 : Ardour Mono : 29-1-2013FontForge 2.0 : Ardour Mono : 29-1-2013ArdourMonoArdourMonoVersion 1.00Version 1.00ArdourMonoArdourMonoAscender CorporationAscender Corporationhttp://www.ascendercorp.com/http://www.ascendercorp.com/http://www.ascendercorp.com/typedesigners.htmlhttp://www.ascendercorp.com/typedesigners.htmlLicensed under the Apache License, Version 2.0Licensed under the Apache License, Version 2.0http://www.apache.org/licenses/LICENSE-2.0http://www.apache.org/licenses/LICENSE-2.0Apache MonoApache Monoff  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjikmlnoqprsutvwxzy{}|~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~uni00AD overscoreAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflexCdotcdotDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflexGdotgdot Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflex Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsOhornohornUhornuhornuni01F0 Aringacute aringacuteAEacuteaeacute Oslashacute oslashacute Scommaaccent scommaaccentuni02BCuni02F3uni0300uni0301uni0303hookuni030Fdotbelowtonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9 IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosuni03D1uni03D2uni03D6uni0400 afii10023 afii10051 afii10052 afii10053 afii10054 afii10055 afii10056 afii10057 afii10058 afii10059 afii10060 afii10061uni040D afii10062 afii10145 afii10017 afii10018 afii10019 afii10020 afii10021 afii10022 afii10024 afii10025 afii10026 afii10027 afii10028 afii10029 afii10030 afii10031 afii10032 afii10033 afii10034 afii10035 afii10036 afii10037 afii10038 afii10039 afii10040 afii10041 afii10042 afii10043 afii10044 afii10045 afii10046 afii10047 afii10048 afii10049 afii10065 afii10066 afii10067 afii10068 afii10069 afii10070 afii10072 afii10073 afii10074 afii10075 afii10076 afii10077 afii10078 afii10079 afii10080 afii10081 afii10082 afii10083 afii10084 afii10085 afii10086 afii10087 afii10088 afii10089 afii10090 afii10091 afii10092 afii10093 afii10094 afii10095 afii10096 afii10097uni0450 afii10071 afii10099 afii10100 afii10101 afii10102 afii10103 afii10104 afii10105 afii10106 afii10107 afii10108 afii10109uni045D afii10110 afii10193uni0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048F afii10050 afii10098uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni1E00uni1E01uni1E3Euni1E3FWgravewgraveWacutewacute Wdieresis wdieresisuni1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni1F4Duni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200B afii00208 underscoredbl quotereversedminutesecond exclamdbl nsuperior afii08941pesetauni20ABEuro afii61248 afii61289 afii61352 estimated oneeighth threeeighths fiveeighths seveneighthsuniFB01uniFB02uniFB03uniFB04uniFEFFuniFFFCuniFFFD cyrillicbrevedotlessjcaroncommaaccent commaaccentcommaaccentrotate zerosuperior foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperior dasiaoxiacircumflexacutecombcircumflexgravecombcircumflexhookcombcircumflextildecombbreveacutecombbrevegravecomb brevehookcombbrevetildecombcyrillichookleftcyrillicbighookUCcyrillicbighookLCɉo1T/ xjadeo-0.8.10/src/xjadeo/display.c0000644000175000017500000006376213747774274013711 00000000000000/* xjadeo - video output abstraction and common display functions * * (C) 2006-2014 Robin Gareus * (C) 2006-2011 Luis Garrido * * 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. */ #include "xjadeo.h" #include "display.h" #include #include // needed for PIX_FMT #include #ifndef MIN #define MIN(A,B) (((A)<(B)) ? (A) : (B)) #endif #ifndef MAX #define MAX(A,B) (((A)>(B)) ? (A) : (B)) #endif extern char *smpte_offset; extern int64_t ts_offset; // display on screen extern int64_t frames; extern int64_t dispFrame; extern int want_nosplash; extern double framerate; extern float index_progress; extern uint8_t splashed ; uint8_t osd_seeking = 0; /******************************************************************************* * NULL Video Output */ static int open_window_null (void) { return (1); } static void close_window_null (void) { ; } static void render_null (uint8_t *mybuffer) { ; } static void handle_X_events_null (void) { ; } static void newsrc_null (void) { ; } static void resize_null (unsigned int x, unsigned int y) { ; } static void getsize_null (unsigned int *x, unsigned int *y) { if (x) *x = 1; if (y) *y = 1; } static void position_null (int x, int y) { ; } static void getpos_null (int *x, int *y) { if(x)*x=1; if (y) *y = 1; } static void fullscreen_null (int a) { ; } static void mousepointer_null (int a) { ; } static void ontop_null (int a) { ; } static int getfullscreen_null () { return (0); } static int getontop_null () { return(0); } static void letterbox_change_null () { ; } /******************************************************************************* * strided memcopy - convert pitches of video buffer */ void stride_memcpy(void * dst, const void * src, int width, int height, int dstStride, int srcStride) { int i; if(dstStride == srcStride) memcpy(dst, src, srcStride*height); else for(i=0; i> 1) + (val >> 1)); mybuffer[yoff+3] = 0xff - ((mybuffer[yoff+3] >> 1) + (val >> 1)); } static void _overlay_YUV (uint8_t *mybuffer, rendervars *rv, const int dx, const int dy, const uint8_t val) { const int yoff = (dx + movie_width * dy); mybuffer[yoff] = 0xff - ((mybuffer[yoff] >> 1) + (val >> 1)); } static void _overlay_RGB (uint8_t *mybuffer, rendervars *rv, const int dx, const int dy, const uint8_t val) { const int pos = rv->bpp * (dx + movie_width * dy); mybuffer[pos] = 0xff - ((mybuffer[pos] >> 1) + (val >> 1)); mybuffer[pos+1]= 0xff - ((mybuffer[pos+1] >> 1) + (val >> 1)); mybuffer[pos+2]= 0xff - ((mybuffer[pos+2] >> 1) + (val >> 1)); } static void _render_YUV422 (uint8_t *mybuffer, rendervars *rv, const int dx, const int dy, const uint8_t val) { const int yoff = 2 * dx + movie_width * dy * 2; mybuffer[yoff+0] = 0x80; mybuffer[yoff+1] = val; mybuffer[yoff+2] = 0x80; mybuffer[yoff+3] = val; } static void _render_YUV (uint8_t *mybuffer, rendervars *rv, const int dx, const int dy, const uint8_t val) { const int yoff = (dx + movie_width * dy); const int uvoff = (dx / 2) + movie_width / 2 * (dy / 2); mybuffer[yoff] = val; mybuffer[rv->Uoff+uvoff] = 0x80; mybuffer[rv->Voff+uvoff] = 0x80; } static void _render_RGB (uint8_t *mybuffer, rendervars *rv, const int dx, const int dy, const uint8_t val) { const int pos = rv->bpp * (dx + movie_width * dy); mybuffer[pos] = val; mybuffer[pos+1] = val; mybuffer[pos+2] = val; } static void _red_render_YUV422 (uint8_t *mybuffer, rendervars *rv, const int dx, const int dy, const uint8_t val) { const int yoff = 2 * (dx&~1) + movie_width * dy * 2; if (val > 0x10) { mybuffer[yoff+0] = 0x40; mybuffer[yoff+2] = 0xb0; } if (dx%2) mybuffer[yoff+3] = val >> 1; else mybuffer[yoff+1] = val >> 1; } static void _red_render_YUV (uint8_t *mybuffer, rendervars *rv, const int dx, const int dy, const uint8_t val) { const int yoff = (dx + movie_width * dy); const int uvoff = (dx / 2) + movie_width / 2 * (dy / 2); mybuffer[yoff] = val > 0x90 ? 0x90 : val; mybuffer[rv->Uoff+uvoff] = val > 0x10 ? 0x50 : 0x80; mybuffer[rv->Voff+uvoff] = val > 0x10 ? 0xc0 : 0x80; } static void _red_render_RGB (uint8_t *mybuffer, rendervars *rv, const int dx, const int dy, const uint8_t val) { const int pos = rv->bpp * (dx + movie_width * dy); mybuffer[pos] = val>>2; mybuffer[pos+1] = val>>2; mybuffer[pos+2] = val; } /******************************************************************************* * colorspace utils (slow) - used for old imlib big/little endian compat */ void rgb2argb (uint8_t *rgbabuffer, uint8_t *rgbbuffer, int width, int height) { int x, y, p3, p4; for (x = 0; x < width; ++x) for (y = 0; y < height; ++y) { p3 = 3 * (x + movie_width * y); p4 = 4 * (x + movie_width * y); rgbabuffer[p4+0] = 255; rgbabuffer[p4+1] = rgbbuffer[p3]; rgbabuffer[p4+2] = rgbbuffer[p3+1]; rgbabuffer[p4+3] = rgbbuffer[p3+2]; } } void rgb2abgr (uint8_t *rgbabuffer, uint8_t *rgbbuffer, int width, int height) { int x, y, p3, p4; for (x = 0; x < width; ++x) for (y = 0; y < height; ++y) { p3 = 3 * (x + movie_width * y); p4 = 4 * (x + movie_width * y); rgbabuffer[p4+3] = 255; rgbabuffer[p4+2] = rgbbuffer[p3]; rgbabuffer[p4+1] = rgbbuffer[p3+1]; rgbabuffer[p4+0] = rgbbuffer[p3+2]; } } /******************************************************************************* * xjadeo displays engine definitions */ #define NULLOUTPUT &render_null, &open_window_null, &close_window_null, &handle_X_events_null, &newsrc_null, &resize_null, &getsize_null, &position_null, &getpos_null, &fullscreen_null, &ontop_null, &mousepointer_null, &getfullscreen_null, &getontop_null, &letterbox_change_null // see xjadeo.h VideoModes const vidout VO[] = { { AV_PIX_FMT_RGB24, 1, "NULL", NULLOUTPUT}, // NULL is --vo 0 -> autodetect { AV_PIX_FMT_BGRA32, SUP_OPENGL, "OpenGL", #ifdef HAVE_GL &gl_render, &gl_open_window, & gl_close_window, &gl_handle_events, &gl_newsrc, &gl_resize, &gl_get_window_size, &gl_position, &gl_get_window_pos, &gl_set_fullscreen, &gl_set_ontop, &gl_mousepointer, &gl_get_fullscreen, &gl_get_ontop, &gl_letterbox_change #else NULLOUTPUT #endif }, { AV_PIX_FMT_YUV420P, SUP_LIBXV, "XV - X11 video extension", #if HAVE_LIBXV &render_xv, &open_window_xv, &close_window_xv, &handle_X_events_xv, &newsrc_xv, &resize_xv, &get_window_size_xv, &position_xv, get_window_pos_xv, &xj_set_fullscreen, &xj_set_ontop, &xj_mousepointer, &xj_get_fullscreen, &xj_get_ontop, &xj_letterbox #else NULLOUTPUT #endif }, { AV_PIX_FMT_YUV420P, SUP_SDL, "SDL", #ifdef HAVE_SDL &render_sdl, &open_window_sdl, &close_window_sdl, &handle_X_events_sdl, &newsrc_sdl, &resize_sdl, &getsize_sdl, &position_sdl, &get_window_pos_sdl, &sdl_toggle_fullscreen, &sdl_set_ontop, &mousecursor_sdl, &sdl_get_fullscreen, &sdl_get_ontop, &sdl_letterbox_change #else NULLOUTPUT #endif }, { #ifdef IMLIB2RGBA AV_PIX_FMT_BGRA32, SUP_IMLIB2, "ImLib2/x11 (RGBA32)", #else AV_PIX_FMT_RGB24, SUP_IMLIB2, "ImLib2/x11 (RGB24)", #endif #if HAVE_IMLIB2 &render_imlib2, &open_window_imlib2, &close_window_imlib2, &handle_X_events_imlib2, &newsrc_imlib2, &resize_imlib2, &get_window_size_imlib2, &position_imlib2, &get_window_pos_imlib2, &xj_set_fullscreen, &xj_set_ontop, &xj_mousepointer, &getfullscreen_null, &getontop_null, &xj_letterbox #else NULLOUTPUT #endif }, { AV_PIX_FMT_UYVY422, SUP_MACOSX, "Mac OSX - quartz", #if defined PLATFORM_OSX && (defined __i386 || defined __ppc__) &render_mac, &open_window_mac, &close_window_mac, &handle_X_events_mac, &newsrc_mac, &resize_mac, &getsize_mac, &position_mac, &getpos_mac, &fullscreen_mac, &ontop_mac, &mousepointer_null, &get_fullscreen_mac, &get_ontop_mac, &mac_letterbox_change #else NULLOUTPUT #endif }, {-1, -1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL} // the end. }; static int VOutput = 0; int parsevidoutname (char *arg) { int i = 0; int s0 = strlen(arg); if (s0 == 0) return (0); if (!strncasecmp("list", arg, s0 > 4 ? 4 : s0)) return -1; for(i = 0; i < sizeof(VO) / sizeof (vidout); ++i) { if (VO[i].supported >= 0) { int s1 = strlen(VO[i].name); if (!strncasecmp(VO[i].name, arg, s0 > s1 ? s1 : s0)) return i; } } return(0); } const char * vidoutname (int i) { return (VO[i].name); } int vidoutsupported (int i) { return(VO[i].supported); } void dump_vopts (void) { int i = 0; fprintf (stdout, "Video Output Modes: \n"); fprintf (stdout, " --vo 0 # autodetect (default)\n"); while (VO[++i].supported >= 0) { fprintf (stdout, " --vo %i # %s %s\n", i, VO[i].name, VO[i].supported ? "(supported by this xjadeo)" : "(NOT compiled in this xjadeo)"); } } int try_next_vidoutmode(int user_req) { int i = 0; // check available modes.. while (VO[++i].supported >= 0); if (user_req >= i || user_req < 0 ) return (-1); if (user_req < i && user_req > 0 && VO[user_req].supported) return(1); return (0); } int vidoutmode(int user_req) { int i = 0; if (user_req < 0) { dump_vopts(); exit (0); } VOutput = 0; // check available modes.. while (VO[++i].supported >= 0) { if (VO[i].supported && VOutput == 0) { VOutput = i; } } if (user_req < i && user_req > 0) if (VO[user_req].supported) VOutput = user_req; return VO[VOutput].render_fmt; } /******************************************************************************* * On Screen Display */ extern unsigned char ST_image[][ST_WIDTH]; extern int ST_rightend; extern int ST_height; extern int ST_top; #define PB_W (movie_width - 2 * PB_X) #define SET_RFMT(FORMAT, POINTER, VARS, FUNC) \ if ((FORMAT) == AV_PIX_FMT_YUV420P) \ (POINTER) = &_##FUNC##_YUV; \ else if ((FORMAT) == AV_PIX_FMT_UYVY422) \ (POINTER) = &_##FUNC##_YUV422; \ else if ((FORMAT) == AV_PIX_FMT_RGB24) { \ (POINTER) = &_##FUNC##_RGB; \ VARS.bpp = 3; \ } else if ((FORMAT) == AV_PIX_FMT_RGBA32) { \ (POINTER) = &_##FUNC##_RGB; \ VARS.bpp = 4; \ } else if ((FORMAT) == AV_PIX_FMT_BGRA32) { \ (POINTER) = &_##FUNC##_RGB; \ VARS.bpp = 4; \ } else return ; #if (HAVE_LIBXV || HAVE_IMLIB2) static void OSD_bitmap(int rfmt, uint8_t *mybuffer, int yperc, int xoff, int w, int h, uint8_t *src, uint8_t *mask) { int x, y, xalign, yalign; rendervars rv; void (*_render)(uint8_t *mybuffer, rendervars *rv, const int dx, const int dy, const uint8_t val); rv.Uoff = movie_width * movie_height; rv.Voff = rv.Uoff + movie_width * movie_height/4; rv.bpp = 0; xalign = (movie_width - w) / 2; yalign = (movie_height - h) * yperc / 100.0; if (xalign < 0) xalign = 0; if (yalign < 0) yalign = 0; SET_RFMT(rfmt, _render, rv, render); // TODO once per window, and rather make _render fn's inline, include LOOP in fn pointer. for (x = 0; x < w && (x + xalign) < movie_width; ++x) { for (y = 0; y < h && (y + yalign) < movie_height; ++y) { int byte = ((y * w + x) >> 3); // PIXMAP width must be mult. of 8 ! int val = src[byte] & (1 << (x % 8)); if (!mask || mask[byte] & (1 << (x % 8))) _render (mybuffer, &rv, (x + xalign), (y + yalign), val ? 0xee : 0x11); } } } #endif static void OSD_cmap(int rfmt, uint8_t *mybuffer, int yperc, int xoff, const int w, const int h, uint8_t const * const img, uint8_t const * const map) { int x, y, xalign, yalign; rendervars rv; void (*_render)(uint8_t *mybuffer, rendervars *rv, const int dx, const int dy, const uint8_t val); rv.Uoff = movie_width * movie_height; rv.Voff = rv.Uoff + movie_width * movie_height / 4; rv.bpp = 0; xalign = (movie_width - w) / 2; yalign = (movie_height - h) * yperc / 100.0; if (xalign < 0) xalign = 0; if (yalign < 0) yalign = 0; SET_RFMT(rfmt, _render, rv, render); // TODO once per window, and rather make _render fn's inline, include LOOP in fn pointer. for (y = 0; y < h && (y + yalign) < movie_height; ++y) { const int y0 = w * y; for (x = 0; x < w && (x + xalign) < movie_width; ++x) { const int pos = y0 + x; uint8_t val = map[(uint8_t)img[pos]]; _render (mybuffer, &rv, (x+xalign), (y+yalign), val); } } } /* background, black box */ #define ST_BG ((OSD_mode&OSD_BOX)?0:1) static void OSD_bar (int rfmt, uint8_t *mybuffer, int yperc, double min, double max, double val, double tara) { int x, y, xalign, yalign; rendervars rv; void (*_render)(uint8_t *mybuffer, rendervars *rv, const int dx, const int dy, const uint8_t val); if (movie_width < 4 * PB_X || movie_height < 6 * PB_H) return; rv.Uoff = movie_width * movie_height; rv.Voff = rv.Uoff + movie_width * movie_height/4; rv.bpp = 0; xalign = PB_X; yalign = (movie_height - PB_H) * yperc / 100.0; int pb_val = (int) (PB_W * (val-min) / (max - min)); int pb_not = (int) (PB_W * (tara-min) / (max - min)); SET_RFMT(rfmt, _render, rv, overlay); // TODO once per window instance, inline _render. for (x = 0; x < pb_val && (x + xalign) < movie_width; ++x) { for (y = 3; y < PB_H && (y + yalign) < movie_height; ++y) { _render (mybuffer, &rv, x + xalign, y + yalign, (x % 9 && y != 3) ? 0xf0 : 0x20); } if ((x % 9) == 5) x += 3; // bars'n'stripes } if (tara >= min) { /* zero notch */ for (x = pb_not - 1; x < pb_not + 2 && (x + xalign) < movie_width; ++x) { for (y = 0; x >= 0 && y < 3 && (y + yalign) < movie_height; ++y) _render (mybuffer, &rv, x + xalign, y + yalign, 0); for (y = PB_H; x >= 0 && y < PB_H + 3 && (y + yalign) < movie_height; ++y) _render (mybuffer, &rv, x + xalign, y + yalign, 0); } } else if (tara < min - 1) { /* border */ const uint8_t bcol = tara < min - 2 ? 0x10 : 0xf0; for (x = -2; x < PB_W + 1 && (x + xalign) < movie_width; ++x) { if (yalign >= 0 && yalign < movie_height) _render (mybuffer, &rv, x + xalign, yalign, bcol); if (yalign + PB_H + 3 >= 0 && yalign + PB_H + 3 < movie_height) _render (mybuffer, &rv, x + xalign, yalign + PB_H + 3, bcol); } for (y = 1; y < PB_H + 3 && (y + yalign) < movie_height; ++y) { _render (mybuffer, &rv, PB_X - 3 , y + yalign, bcol); _render (mybuffer, &rv, PB_X + PB_W + 1, y + yalign, bcol); } } } enum MinWHVariant { MINW__TC = -1, MINWH_NONE = 0, MINWH_SYNCTC, MINWH_FRAMEN, }; static void OSD_render (int rfmt, uint8_t *mybuffer, char *text, int xpos, int yperc, enum MinWHVariant minwh) { static int OSD_movieheight = -1; static int OSD_fonty0 = -1; static int OSD_fonty1 = -1; static int OSD_fontsize = -1; static int OSD_monospace = 0; static int minw_frame = 0; static int minw_smpte = 0; int x, y, xalign, yalign; rendervars rv; void (*_render)(uint8_t *mybuffer, rendervars *rv, const int dx, const int dy, const uint8_t val); if (strlen(text) == 0) return; rv.Uoff = movie_width * movie_height; rv.Voff = rv.Uoff + movie_width * movie_height/4; rv.bpp = 0; if ((!strncmp(text, "++ ", 3) || !strncmp(text, "-- ", 3)) && strstr(text, " EOF")) { SET_RFMT(rfmt, _render, rv, red_render); } else { SET_RFMT(rfmt, _render, rv, render); } if (OSD_movieheight != movie_height) { OSD_movieheight = movie_height; OSD_fontsize = MIN(MAX(13, movie_height / 18), 56); render_font(OSD_fontfile, "+1234567890:.", OSD_fontsize, 0); OSD_fonty0 = ST_top; OSD_fonty1 = ST_height; minw_smpte = 0; render_font(OSD_fontfile, "000000000000000", OSD_fontsize, 0); minw_smpte = MAX(minw_smpte, ST_rightend); render_font(OSD_fontfile, "00000000000", OSD_fontsize, 0); minw_frame = ST_rightend; render_font(OSD_fontfile, "0", OSD_fontsize, 0); OSD_monospace = ST_rightend; if (want_verbose) printf("Set Fontsize to %d\n", OSD_fontsize); } int minw = 0; switch (minwh) { case MINW__TC: minw = -1; break; case MINWH_NONE: minw = 0; break; case MINWH_SYNCTC: minw = minw_smpte; break; case MINWH_FRAMEN: minw = minw_frame; break; } if (render_font(OSD_fontfile, text, OSD_fontsize, minw > 0 ? OSD_monospace : 0)) return; ST_rightend = MAX(minw, ST_rightend); if (xpos == OSD_LEFT) xalign = ST_PADDING; // left else if (xpos == OSD_RIGHT) xalign = movie_width - ST_PADDING - ST_rightend; // right else xalign = (movie_width - ST_rightend) / 2; // center const int fh = 1 + (minw != 0 ? OSD_fonty1 : ST_height); const int fo = ST_HEIGHT - 9 - (minw != 0 ? OSD_fonty0 : ST_top); assert(fo > 0); assert(fh + fo < ST_HEIGHT); yalign = (movie_height - fh) * yperc / 100.0; if (!ST_BG) { for (y = 0; y < fh && (y + yalign) < movie_height; ++y) { for (x = -4; x < 0; ++x) { if (x + xalign >= 0) _render (mybuffer, &rv, x + xalign, y +yalign, 0); if (ST_rightend + xalign - x - 1 < movie_width) _render (mybuffer, &rv, ST_rightend + xalign - x - 1, y + yalign, 0); } } for (x = xalign - 4; x < xalign + ST_rightend + 4; ++x) { if (x < 0 || x >= movie_width) continue; for (y = 0; y < 4; ++y) { if (yalign - 1 - y >= 0 && yalign - y < movie_height) _render (mybuffer, &rv, x, yalign - y, 0); if (yalign + fh + y >= 0 && yalign + fh + y < movie_height) _render (mybuffer, &rv, x, y + fh + yalign, 0); } } } for (y = 0; y < fh && (y + yalign) < movie_height; ++y) { for (x = 0; x < ST_rightend && (x + xalign) < movie_width; ++x) { if (ST_image[y + fo][x] >= ST_BG) { if (x + xalign >= 0) _render (mybuffer, &rv, x + xalign, y + yalign, ST_image[y + fo][x]); } } } } #include "icons/xjadeoH.h" void splash (uint8_t *mybuffer) { if (want_nosplash) return; if (movie_width >= xjadeo_splash_height && movie_height >= xjadeo_splash_width) OSD_cmap (VO[VOutput].render_fmt, mybuffer, 50, 0, xjadeo_splash_width, xjadeo_splash_height, xjadeo_splash, xjadeo_splash_cmap); } static void update_smptestring () { if (smpte_offset) free (smpte_offset); smpte_offset = calloc(15, sizeof(char)); frame_to_smptestring (smpte_offset, ts_offset, 0); } /******************************************************************************* * * display wrapper functions */ #if (defined HAVE_LIBXV || defined HAVE_IMLIB2) #include "icons/osd_bitmaps.h" #endif #define OBM(NAME, YPOS) \ OSD_bitmap(VO[VOutput].render_fmt, mybuffer, YPOS, 0, osd_##NAME##_width, osd_##NAME##_height, osd_##NAME##_bits, osd_##NAME##_mask_bits); void render_buffer (uint8_t *mybuffer) { if (!mybuffer) return; // render OSD on buffer if (OSD_mode & (OSD_FRAME | OSD_VTC)) OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_frame, OSD_fx, OSD_fy, MINWH_FRAMEN); if (OSD_mode & OSD_SMPTE) OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_smpte, OSD_sx, OSD_sy, MINWH_SYNCTC); if (!splashed) { ; // keep center free } #if (HAVE_LIBXV || HAVE_IMLIB2) else if (OSD_mode & OSD_EQ) { int v0, v1, v2, v3, v4; if (xj_get_eq("brightness", &v0)) v0 = 0; if (xj_get_eq("contrast", &v1)) v1 = 0; if (xj_get_eq("gamma", &v2)) v2 = 0; if (xj_get_eq("saturation", &v3)) v3 = 0; if (xj_get_eq("hue", &v4)) v4 = 0; OBM(brightness, 3); OBM(contrast, 23); OBM(gamma, 43); OBM(saturation, 63); OSD_bar (VO[VOutput].render_fmt, mybuffer, 10, -1000.0, 1000.0, v0, 0.0); OSD_bar (VO[VOutput].render_fmt, mybuffer, 30, -1000.0, 1000.0, v1, (VOutput == VO_XV) ? -500.0 : 0.0); OSD_bar (VO[VOutput].render_fmt, mybuffer, 50, -1000.0, 1000.0, v2, 0.0); OSD_bar (VO[VOutput].render_fmt, mybuffer, 70, -1000.0, 1000.0, v3, 0.0); OSD_bar (VO[VOutput].render_fmt, mybuffer, 90, -1000.0, 1000.0, v4, 0.0); } else #endif { if (OSD_mode & OSD_TEXT) OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_text, OSD_tx, OSD_ty, MINWH_NONE); if (OSD_mode & OSD_MSG) OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_msg, 50, 85, MINWH_NONE); if (index_progress >= 0 && index_progress <= 100 && movie_height >= OSD_MIN_NFO_HEIGHT) { OSD_bar (VO[VOutput].render_fmt, mybuffer, 91, 0, 100.0, index_progress, -1); } if (OSD_mode & OSD_OFFF) { char tempoff[30]; snprintf(tempoff, 30, "O: %"PRId64, ts_offset); OSD_render (VO[VOutput].render_fmt, mybuffer, tempoff, OSD_CENTER, 50, MINW__TC); } else if (OSD_mode&OSD_OFFS) { char tempsmpte[30]; strcpy(tempsmpte, "O: "); if (frame_to_smptestring(tempsmpte+3, ts_offset, 1)) { strcat(tempsmpte, " +d"); } OSD_render (VO[VOutput].render_fmt, mybuffer, tempsmpte, OSD_CENTER, 50, MINWH_SYNCTC); } else if (OSD_mode & (OSD_NFO | OSD_IDXNFO) && movie_height >= OSD_MIN_NFO_HEIGHT) { OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_nfo_tme[0], OSD_CENTER, 31, MINWH_NONE); OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_nfo_tme[1], OSD_CENTER, 41, MINW__TC); OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_nfo_tme[2], OSD_CENTER, 50, MINWH_SYNCTC); OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_nfo_tme[3], OSD_CENTER, 59, MINWH_SYNCTC); OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_nfo_tme[4], OSD_CENTER, 68, MINWH_SYNCTC); } else if (OSD_mode & (OSD_GEO) && movie_height >= OSD_MIN_NFO_HEIGHT) { OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_nfo_geo[0], OSD_CENTER, 31, MINWH_NONE); OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_nfo_geo[1], OSD_CENTER, 41, MINWH_NONE); OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_nfo_geo[2], OSD_CENTER, 50, MINWH_NONE); OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_nfo_geo[3], OSD_CENTER, 59, MINWH_NONE); OSD_render (VO[VOutput].render_fmt, mybuffer, OSD_nfo_geo[4], OSD_CENTER, 68, MINWH_NONE); } } if (OSD_mode & OSD_POS && index_progress < 0 && frames > 1 && movie_height >= OSD_MIN_NFO_HEIGHT) { int sbox = osd_seeking ? -3 : -2; if (ui_syncsource() != SYNC_NONE || (interaction_override&OVR_MENUSYNC)) { sbox = -1; } OSD_bar (VO[VOutput].render_fmt, mybuffer, 100. * BAR_Y, 0, frames - 1, dispFrame, sbox); } VO[VOutput].render(buffer); // buffer = mybuffer (so far no share mem or sth) } void open_window(void) { if (want_verbose) printf("Video output: %s\n", VO[VOutput].name); if (VO[VOutput].open() ) { if (!want_quiet) fprintf(stderr, "Could not open video output.\n"); VOutput = 0; loop_run = 0; } else loop_run = 1; } void close_window(void) { int vmode = VOutput; VOutput = 0; loop_run = 0; VO[vmode].close(); } void handle_X_events (void) { VO[VOutput].eventhandler(); } void newsourcebuffer (void) { VO[VOutput].newsrc(); } int getvidmode (void) { return(VOutput); } void Xgetpos (int *x, int *y) { VO[VOutput].getpos(x, y); } void Xgetsize (unsigned int *x, unsigned int *y) { VO[VOutput].getsize(x, y); } void Xresize (unsigned int x, unsigned int y) { VO[VOutput].resize(x, y); } void Xontop (int a) { VO[VOutput].ontop(a); } int Xgetontop (void) { return (VO[VOutput].getontop()); } int Xgetfullscreen (void) { return (VO[VOutput].getfullscreen()); } void Xmousepointer (int a) { VO[VOutput].mousepointer(a); } int Xgetmousepointer (void) { return hide_mouse; } int Xgetletterbox (void) { return want_letterbox; } void Xletterbox (int action) { if (action == 2) want_letterbox = !want_letterbox; else want_letterbox = action ? 1 : 0; VO[VOutput].letterbox_change(); } void Xfullscreen (int a) { VO[VOutput].fullscreen(a); } void Xposition (int x, int y) { VO[VOutput].position(x, y); } void XCresize_percent (float p) { const int w = rintf (ffctv_width * p / 100.f); const int h = rintf (ffctv_height * p / 100.f); Xresize(w, h); } void XCresize_aspect (int scale) { const float asp_src = movie_aspect ? movie_aspect : (float)movie_width/(float)movie_height; unsigned int w, h; Xgetsize (&w, &h); if (scale < 0 && w > 32 && h > 32) { const float step = sqrtf ((float)h); w -= floorf (step * asp_src); h -= step; } else if (scale > 0) { const float step = sqrtf ((float)h); w += floorf (step * asp_src); h += step; } if (asp_src < ((float)w / (float)h)) w = rintf ((float)h * asp_src); else h = rintf((float)w / asp_src); Xresize(w, h); } void XCresize_scale (int up) { const float asp_src = movie_aspect ? movie_aspect : (float)movie_width/(float)movie_height; unsigned int w, h; Xgetsize (&w, &h); const float step = (float)up * 0.17 * h; w += floorf (step * asp_src); h += step; if (w > 32 && h > 32) { Xresize(w, h); } } void XCtimeoffset (int mode, unsigned int charcode) { if ((interaction_override&OVR_AVOFFSET) != 0 ) { if (charcode != 0) remote_notify(NTY_KEYBOARD, 310, "keypress=%d", charcode); return; } int64_t off = ts_offset; switch(mode) { case -1: --ts_offset; break; case 1: ++ts_offset; break; case -4: if (framerate > 0) { // TODO drop-frame ?? ts_offset -= framerate ; } else { ts_offset -= 25; } break; case 4: if (framerate > 0) { // TODO drop-frame ?? ts_offset += framerate ; } else { ts_offset += 25; } break; case -2: if (framerate > 0) { // TODO drop-frame ?? ts_offset -= framerate * 60; } else { ts_offset -= 25*60; } break; case 2: if (framerate > 0) { // TODO drop-frame ?? ts_offset += framerate * 60; } else { ts_offset += 25*60; } break; case -3: if (framerate > 0) { // TODO drop-frame ?? ts_offset -= framerate * 3600; } else { ts_offset -= 25*3600; } break; case 3: if (framerate > 0) { // TODO drop-frame ?? ts_offset += framerate * 3600; } else { ts_offset += 25*3600; } break; default: ts_offset = 0; break; } if (off != ts_offset) { force_redraw = 1; update_smptestring (); } } xjadeo-0.8.10/src/xjadeo/freetype.c0000644000175000017500000001260012620454615014027 00000000000000/* xjadeo - freetype support for On Screen Display * * (C) 2006-2014 Robin Gareus * (C) 2006-2011 Luis Garrido * * 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. */ #include "xjadeo.h" #ifdef HAVE_FT #include #include FT_FREETYPE_H /* origin is the upper left corner */ unsigned char ST_image[ST_HEIGHT][ST_WIDTH]; int ST_rightend=0; int ST_height=0; int ST_top = 0; #ifdef WITH_EMBEDDED_FONT // osdfont.o, embedded .ttf #ifdef PLATFORM_OSX #include #define EXTLD(NAME) \ extern const unsigned char _section$__DATA__ ## NAME []; #define LDVAR(NAME) _section$__DATA__ ## NAME #define LDLEN(NAME) (getsectbyname("__DATA", "__" #NAME)->size) #elif defined PLATFORM_WINDOWS /* mingw */ #define EXTLD(NAME) \ extern const unsigned char binary_ ## NAME ## _start[]; \ extern const unsigned char binary_ ## NAME ## _end[]; #define LDVAR(NAME) \ binary_ ## NAME ## _start #define LDLEN(NAME) \ ((binary_ ## NAME ## _end) - (binary_ ## NAME ## _start)) #else /* gnu ld */ #define EXTLD(NAME) \ extern const unsigned char _binary_ ## NAME ## _start[]; \ extern const unsigned char _binary_ ## NAME ## _end[]; #define LDVAR(NAME) \ _binary_ ## NAME ## _start #define LDLEN(NAME) \ ((_binary_ ## NAME ## _end) - (_binary_ ## NAME ## _start)) #endif EXTLD(fonts_ArdourMono_ttf) #endif // embedded font file static void draw_bitmap(FT_Bitmap* bitmap, FT_Int x, FT_Int y) { FT_Int i, j, p, q; FT_Int x_max = x + bitmap->width; FT_Int y_max = y + bitmap->rows; for (i = x, p = 0; i < x_max; i++, p++) { for (j = y, q = 0; j < y_max; j++, q++) { if (i >= ST_WIDTH || j >= ST_HEIGHT || i < 0 || j < 0) continue; ST_image[j][i] |= bitmap->buffer[q * bitmap->width + p]; } } } static char *ff = NULL; static int initialized = 0; static FT_Library library; static FT_Face face; int render_font (char *fontfile, char *text, int px, int dx) { static int pxx = 0; FT_GlyphSlot slot; FT_Matrix matrix; /* transformation matrix */ FT_Vector pen; /* untransformed origin */ FT_Error error; int target_height; int n, num_chars; /* set up matrix */ matrix.xx = (FT_Fixed)(0x10000L); matrix.xy = (FT_Fixed)(0x0L); matrix.yx = (FT_Fixed)(0x0L); matrix.yy = (FT_Fixed)(0x10000L); if (!ff || strcmp(fontfile, ff) || pxx != px || !initialized) { #ifndef WITH_EMBEDDED_FONT if (strlen(fontfile) == 0) return -1; #endif pxx = px; free(ff); ff = strdup(fontfile); if (initialized) { FT_Done_Face (face); FT_Done_FreeType(library); initialized = 0; } error = FT_Init_FreeType(&library); /* initialize library */ if (error) return(-1); /* create face object */ #ifdef WITH_EMBEDDED_FONT if (strlen(fontfile) == 0) error = FT_New_Memory_Face(library, LDVAR(fonts_ArdourMono_ttf), LDLEN(fonts_ArdourMono_ttf), 0, &face); else #endif error = FT_New_Face(library, fontfile, 0, &face); if (error) { FT_Done_FreeType(library); return(-1); } error = FT_Set_Char_Size(face, 0, px * 64, 0, 72); /* set character size */ if (error) { FT_Done_Face (face); FT_Done_FreeType(library); return(-1); } initialized = 1; } /* the pen position incartesian space coordinates; */ pen.x = 1 * 64; pen.y = 10 * 64; num_chars = strlen(text); target_height = ST_HEIGHT - 8; slot = face->glyph; memset(&(ST_image[0][0]),0,ST_WIDTH*ST_HEIGHT); ST_rightend=0; ST_height = 0; ST_top = 0; for (n = 0; n < num_chars; n++) { /* set transformation */ FT_Set_Transform(face, &matrix, &pen); /* load glyph image into the slot (erase previous one) */ error = FT_Load_Char(face, text[n], FT_LOAD_RENDER); if (error) continue; /* ignore errors */ /* now, draw to our target surface (convert position) */ draw_bitmap(&slot->bitmap, slot->bitmap_left, target_height - slot->bitmap_top); if (slot->bitmap.rows > 0) { const int bottom = slot->bitmap_top - slot->bitmap.rows; if (slot->bitmap_top > ST_top) ST_top = slot->bitmap_top; if (bottom < ST_top - ST_height) ST_height = ST_top - bottom; } if ((slot->bitmap_left + slot->bitmap.width) > ST_WIDTH) break; /* increment pen position */ pen.x += dx > 0 ? dx *64 : slot->advance.x; pen.y += slot->advance.y; ST_rightend=pen.x/64; } ST_rightend+=1; return 0; } void free_freetype () { free(ff); ff = NULL; if (initialized) { FT_Done_Face (face); FT_Done_FreeType(library); } initialized = 0; } #else /* No freetype */ unsigned char ST_image[1][1]; int ST_rightend = 0; int ST_height = 0; int ST_top = 0; int render_font (char *fontfile, char *text, int px, int dx) {return -1;} void free_freetype () { ; } #endif /* HAVE_FT*/ xjadeo-0.8.10/src/xjadeo/configfile.c0000644000175000017500000003320313717242733014317 00000000000000/* xjadeo - config file support * * (C) 2006-2014 Robin Gareus * * 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. */ #include #include #include #include #include #define XJADEORC "xjadeorc" #define MAX_LINE_LEN 256 #ifndef PATH_MAX #define PATH_MAX 1024 #endif #include #include #include #include #include "paths.h" #ifdef SYSCONFDIR # define SYSCFGDIR SYSCONFDIR #else # define SYSCFGDIR "/etc/" #endif /* test if file exists and is a regular file - returns 1 if ok */ int testfile (char *filename) { struct stat s; int result= stat(filename, &s); if (result != 0) return 0; /* stat() failed */ if (S_ISREG(s.st_mode)) return 1; /* is a regular file - ok */ return(0); } extern char OSD_fontfile[1024]; extern double delay; extern int videomode; extern int want_quiet; extern int want_verbose; extern int want_letterbox; extern int want_nosplash; extern int mq_en; extern char *ipc_queue; extern int remote_en; extern char *midi_driver; extern int use_jack; extern int interaction_override; extern int keyframe_interval_limit; #ifdef HAVE_LTC extern int use_ltc; #endif #ifdef HAVE_MIDI extern char midiid[128]; extern int midi_clkconvert; /* --midifps [0:MTC|1:VIDEO|2:RESAMPLE] */ extern int midi_clkadj; /* 0|1 */ #endif extern int64_t userFrame; extern char *smpte_offset; extern char *load_movie; extern int osc_port; extern int want_dropframes; extern int want_autodrop; extern int want_genpts; extern int want_ignstart; extern int OSD_mode; extern char OSD_text[128]; extern int OSD_fx, OSD_tx, OSD_sx, OSD_fy, OSD_sy, OSD_ty; extern int start_ontop; extern int start_fullscreen; extern char *current_file; #ifdef JACK_SESSION extern int jack_session_restore; extern int js_winx; extern int js_winy; extern int js_winw; extern int js_winh; #endif #define YES_OK(VAR) \ if (!strncasecmp(value,"yes",3)){ \ VAR = 1; rv=1; \ } else if (!strncasecmp(value,"no",3)) {\ rv=1; \ } #define YES_NO(VAR) \ if (!strncasecmp(value,"yes",3)){ \ VAR = 1; rv=1; \ } else if (!strncasecmp(value,"no",3)) {\ VAR = 0; rv=1; \ } int parseoption (char *item, char *value) { int rv =0; if (!strncasecmp(item,"VIDEOMODE",9)) { int vmode; vmode=parsevidoutname(value); if (vmode==0 ) vmode = atoi(value); if (vmode >=0) { videomode = vmode; rv=1; } } else if (!strncasecmp(item,"FPS",3)) { if (atof(value) > 0) { delay = 1.0 / atof(value); } else delay = -1 ; // use file-framerate rv=1; } else if (!strncasecmp(item,"MIDICLK",7)) { rv=1; #ifdef HAVE_MIDI YES_NO(midi_clkadj) #endif } else if (!strncasecmp(item,"MIDIID",6)) { rv=1; #ifdef HAVE_MIDI strncpy(midiid,value,32); midiid[31]=0; #endif } else if (!strncasecmp(item,"MIDISMPTE",9)) { rv=1; #ifdef HAVE_MIDI midi_clkconvert=atoi(value); #endif } else if (!strncasecmp(item,"MIDIDRIVER",10)) { #ifdef HAVE_MIDI if (midi_driver) free(midi_driver); if (!strcmp(value, "(null)")) midi_driver = NULL; else midi_driver = strdup(value); #endif rv=1; } else if (!strncasecmp(item,"SYNCSOURCE",10)) { use_jack=1; #ifdef HAVE_LTC use_ltc=0; #endif switch (atoi(value)) { case 3: #ifdef HAVE_LTC use_ltc=1; #endif #ifdef HAVE_MIDI snprintf(midiid,128,"-2"); // no-MTC #endif rv=1; break; case 2: // assert (atoi(midiid >= -1); rv=1; break; case 1: #ifdef HAVE_MIDI snprintf(midiid,128,"-2"); // no-MTC #endif rv=1; break; case 0: #ifdef HAVE_MIDI snprintf(midiid,128,"-2"); // no-MTC #endif use_jack=0; // // none/userFrame rv=1; break; default: break; } } else if (!strncasecmp(item,"REMOTECTL",9)) { YES_NO(remote_en) } else if (!strncasecmp(item,"MQ",2)) { YES_NO(mq_en) } else if (!strncasecmp(item,"IPC",3)) { rv=1; if (ipc_queue) free(ipc_queue); if (!strcmp(value, "(null)")) ipc_queue = NULL; else ipc_queue = strdup(value); } else if (!strncasecmp(item,"QUIET",5)) { YES_OK (want_quiet); } else if (!strncasecmp(item,"VERBOSE",7)) { YES_OK (want_verbose); } else if (!strncasecmp(item,"NOSPLASH",8)) { YES_OK (want_nosplash); } else if (!strncasecmp(item,"SEEK",4)) { rv=1; // legacy -- ignore } else if (!strncasecmp(item,"LETTERBOX",9)) { YES_OK(want_letterbox) } else if (!strncasecmp(item,"LASH",4)) { rv=1; // legacy -- ignore } else if (!strncasecmp(item,"FONTFILE",8)) { strncpy(OSD_fontfile,value,1023);rv=1; OSD_fontfile[1023]=0; // just to be sure. #ifdef JACK_SESSION } else if (!strncasecmp(item,"MOVIEFILE",9)) { if (load_movie) free(load_movie); load_movie = strdup(value); rv=1; } else if (!strncasecmp(item,"WINPOS",6)) { jack_session_restore=1; rv=1; js_winx=atoi(value)>>16; js_winy=atoi(value)&0xffff; } else if (!strncasecmp(item,"WINPOSX",7)) { jack_session_restore=1; rv=1; js_winx=atoi(value); } else if (!strncasecmp(item,"WINPOSY",7)) { jack_session_restore=1; rv=1; js_winy=atoi(value); } else if (!strncasecmp(item,"WINSIZE",7)) { jack_session_restore=1; rv=1; js_winw=atoi(value)>>16; js_winh=atoi(value)&0xffff; } else if (!strncasecmp(item,"WINSIZEW",8)) { jack_session_restore=1; rv=1; js_winw=atoi(value); } else if (!strncasecmp(item,"WINSIZEH",8)) { jack_session_restore=1; rv=1; js_winh=atoi(value); } else if (!strncasecmp(item,"WINONTOP",8)) { YES_OK(start_ontop) } else if (!strncasecmp(item,"WINFULLSCREEN",13)) { YES_OK(start_fullscreen) } else if (!strncasecmp(item,"GENPTS",6)) { YES_OK(want_genpts) } else if (!strncasecmp(item,"IGNORESTART",11)) { YES_OK(want_ignstart) } else if (!strncasecmp(item,"DROPFRAMES",10)) { YES_OK(want_dropframes) } else if (!strncasecmp(item,"AUTODF",6)) { YES_OK(want_autodrop) } else if (!strncasecmp(item,"IAOVERRIDE",10)) { interaction_override=atoi(value); rv=1; } else if (!strncasecmp(item,"KEYFRAMELIMIT",13)) { keyframe_interval_limit=atoi(value); rv=1; } else if (!strncasecmp(item,"SMPTEOFFSET",11)) { smpte_offset=strdup(value); rv=1; /*ts_offset is set from smpte_offset */ } else if (!strncasecmp(item,"USERFRAME",9)) { userFrame=atoll(value); rv=1; } else if (!strncasecmp(item,"FILEFPS",7)) { rv=1; // legacy -- ignore } else if (!strncasecmp(item,"OSCPORT",7)) { osc_port=atoi(value); rv=1; } else if (!strncasecmp(item,"OSDMODE",7)) { OSD_mode=atoi(value); rv=1; } else if (!strncasecmp(item,"OSDSX",5)) { OSD_sx=atoi(value); rv=1; } else if (!strncasecmp(item,"OSDSY",5)) { OSD_sy=atoi(value); rv=1; } else if (!strncasecmp(item,"OSDFX",5)) { OSD_fx=atoi(value); rv=1; } else if (!strncasecmp(item,"OSDFY",5)) { OSD_fy=atoi(value); rv=1; } else if (!strncasecmp(item,"OSDTX",5)) { OSD_tx=atoi(value); rv=1; } else if (!strncasecmp(item,"OSDTY",5)) { OSD_ty=atoi(value); rv=1; } else if (!strncasecmp(item,"OSDTEXT",7)) { snprintf(OSD_text,128,"%s",value); rv=1; #endif } return (rv); } int readconfig (char *fn) { FILE* config_fp; char line[MAX_LINE_LEN]; char* token, *item,*value; int lineno=0; if (!(config_fp = fopen(fn, "r"))) { fprintf(stderr,"configfile failed: %s (%s)\n",fn,strerror(errno)); return (-1); } #if 0 fprintf(stdout,"INFO: parsing configfile: %s\n",fn); #endif while( fgets( line, MAX_LINE_LEN-1, config_fp ) != NULL ) { lineno++; line[MAX_LINE_LEN-1]=0; token = strtok( line, "\t =\n\r" ); if( token != NULL && token[0] != '#' && token[0] != ';') { item=strdup(token); token = strtok( NULL, "\t =\n\r" ); if (!token) { free(item); #ifdef CFG_WARN_ONLY printf("WARNING: ignored line in config file. %s:%d\n",fn,lineno); continue; #else printf("ERROR parsing config file. %s:%d\n",fn,lineno); exit(1); #endif } value=strdup(token); if (!parseoption(item,value)) { #ifdef CFG_WARN_ONLY printf("WARNING: ignored error in config file. %s:%d\n",fn,lineno); #else printf("ERROR parsing config file. %s:%d\n",fn,lineno); exit(1); #endif } free(item); free(value); } } fclose(config_fp); return 0; } #ifdef PLATFORM_WINDOWS #define PATHSEP "\\" #else #define PATHSEP "/" #endif void xjadeorc (void) { char filename[PATH_MAX]; // system-wide first if ((strlen(SYSCFGDIR) + strlen(XJADEORC) + 1) < PATH_MAX) { sprintf(filename, "%s" PATHSEP "%s", SYSCFGDIR, XJADEORC); if (testfile(filename)) readconfig(filename); } // $HOME/.xjadeorc -- legcacy const char * home = getenv("HOME"); if (home && (strlen(home) + strlen(XJADEORC) + 2) < PATH_MAX) { sprintf(filename, "%s" PATHSEP ".%s", home, XJADEORC); if (testfile(filename)) readconfig(filename); } #ifdef PLATFORM_WINDOWS // out of luck with CSIDL_LOCAL_APPDATA const char * homedrive = getenv("HOMEDRIVE"); const char * homepath = getenv("HOMEPATH"); if (homedrive && homepath && (strlen(homedrive) + strlen(homepath) + strlen(XJADEORC) + 25) < PATH_MAX) { sprintf(filename, "%s%s" PATHSEP "Local Settings" PATHSEP "xjadeo" PATHSEP "%s", homedrive, homepath, XJADEORC); if (testfile(filename)) readconfig(filename); } if (homedrive && homepath && (strlen(homedrive) + strlen(homepath) + strlen(XJADEORC) + 16) < PATH_MAX) { sprintf(filename, "%s%s" PATHSEP "Local Settings" PATHSEP "%s", homedrive, homepath, XJADEORC); if (testfile(filename)) readconfig(filename); } if (homedrive && homepath && (strlen(homedrive) + strlen(homepath) + strlen(XJADEORC) + 1) < PATH_MAX) { sprintf(filename, "%s%s" PATHSEP "%s", homedrive, homepath, XJADEORC); if (testfile(filename)) readconfig(filename); } #else // unices - use XDG_CONFIG_HOME const char *xdg = getenv("XDG_CONFIG_HOME"); if (xdg && (strlen(xdg) + strlen(XJADEORC) + 8) < PATH_MAX) { sprintf(filename, "%s" PATHSEP "xjadeo" PATHSEP "%s", xdg, XJADEORC); if (testfile(filename)) readconfig(filename); } // fall back if XDG_CONFIG_HOME is unset #ifdef PLATFORM_OSX if (!xdg && home && (strlen(home) + strlen(XJADEORC) + 28) < PATH_MAX) { sprintf(filename, "%s" PATHSEP "Library/Preferences/xjadeo/%s", home, XJADEORC); if (testfile(filename)) readconfig(filename); } #else if (!xdg && home && (strlen(home) + strlen(XJADEORC) + 16) < PATH_MAX) { sprintf(filename, "%s" PATHSEP ".config" PATHSEP "xjadeo" PATHSEP "%s", xdg, XJADEORC); if (testfile(filename)) readconfig(filename); } #endif #endif // current pwd if (strlen(XJADEORC) < PATH_MAX) { sprintf(filename, "%s", XJADEORC); if (testfile(filename)) readconfig(filename); } } #define BOOL(VAR) ((VAR)?"yes":"no") int saveconfig (const char *fn) { FILE* fp; if (!(fp = fopen(fn, "w"))) { if (!want_quiet) fprintf(stderr,"writing configfile failed: %s (%s)\n",fn,strerror(errno)); return -1; } fprintf(fp, "# config file for xjadeo\n#\n# lines beginning with '#' or ';' are ignored.\n#\n"); fprintf(fp, "\n## Settings ##\n"); fprintf(fp, "MOVIEFILE=%s\n", current_file); fprintf(fp, "LETTERBOX=%s\n", BOOL(want_letterbox)); fprintf(fp, "VIDEOMODE=%i\n", videomode); // XXX fprintf(fp, "FPS=%f\n", delay<1?-1:1.0/delay); fprintf(fp, "OSCPORT=%i\n", osc_port); fprintf(fp, "MQ=%s\n", BOOL(mq_en)); fprintf(fp, "IPC=%s\n", ipc_queue?ipc_queue:"(null)"); fprintf(fp, "REMOTECTL=%s\n", BOOL(remote_en)); fprintf(fp, "NOSPLASH=%s\n", BOOL(want_nosplash)); fprintf(fp, "VERBOSE=%s\n", BOOL(want_verbose)); fprintf(fp, "QUIET=%s\n", BOOL(want_quiet)); fprintf(fp, "IAOVERRIDE=%i\n", interaction_override); fprintf(fp, "KEYFRAMELIMIT=%i\n", keyframe_interval_limit); fprintf(fp, "\n## Sync settings ##\n"); #ifdef HAVE_MIDI fprintf(fp, "MIDISMPTE=%i\n", midi_clkconvert); fprintf(fp, "MIDIDRIVER=%s\n", midi_driver?midi_driver:"(null)"); fprintf(fp, "MIDIID=%s\n", midiid); fprintf(fp, "MIDICLK=%s\n", BOOL(midi_clkadj)); #endif fprintf(fp, "USERFRAME=%"PRId64"\n", userFrame); fprintf(fp, "SMPTEOFFSET=%s\n", smpte_offset?smpte_offset:"0"); // use current setting and connection -- not commandline int ss =0; #ifdef HAVE_LTC if (ltcjack_connected()) ss=3; else #endif #ifdef HAVE_MIDI if (midi_connected()) ss=2; else #endif if (jack_connected()) ss=1; fprintf(fp, "SYNCSOURCE=%i\n", ss); fprintf(fp, "\n## Decoder settings ##\n"); fprintf(fp, "GENPTS=%s\n", BOOL(want_genpts)); fprintf(fp, "IGNORESTART=%s\n", BOOL(want_ignstart)); fprintf(fp, "DROPFRAMES=%s\n", BOOL(want_dropframes)); fprintf(fp, "AUTODF=%s\n", BOOL(want_autodrop)); fprintf(fp, "\n## OSD ##\n"); fprintf(fp, "OSDMODE=%i\n", OSD_mode); fprintf(fp, "OSDSX=%i\n", OSD_sx); fprintf(fp, "OSDSY=%i\n", OSD_sy); fprintf(fp, "OSDFX=%i\n", OSD_fx); fprintf(fp, "OSDFY=%i\n", OSD_fy); fprintf(fp, "OSDTX=%i\n", OSD_tx); fprintf(fp, "OSDTY=%i\n", OSD_ty); fprintf(fp, "OSDTEXT=%s\n", OSD_text); fprintf(fp, "FONTFILE=%s\n", OSD_fontfile); fprintf(fp, "\n## WINDOW POSITION/SIZE ##\n"); unsigned int w,h; int x,y; Xgetpos(&x,&y); Xgetsize(&w,&h); fprintf(fp, "WINPOSX=%i\n", x); fprintf(fp, "WINPOSY=%i\n", y); fprintf(fp, "WINSIZEW=%i\n", w); fprintf(fp, "WINSIZEH=%i\n", h); fprintf(fp, "WINONTOP=%s\n", BOOL(Xgetontop())); fprintf(fp, "WINFULLSCREEN=%s\n", BOOL(Xgetfullscreen())); fclose(fp); if (!want_quiet) fprintf(stderr,"written config: %s\n",fn); return 0; } xjadeo-0.8.10/src/xjadeo/windows.rc0000644000175000017500000000007412620454615014062 00000000000000IDI_ICON1 ICON DISCARDABLE "icons/xjadeoH.ico" xjadeo-0.8.10/src/xjadeo/Makefile.am0000644000175000017500000000541513400026011014060 00000000000000#TODO: use a dedicated script for 'git desc' - this is "non-POSIX" way: REV = $(shell test -d ../../.git && git describe --always --tags HEAD 2>/dev/null) bin_PROGRAMS=xjadeo xjremote xjadeo_DATA=fonts/ArdourMono.ttf xjadeodir=$(datadir)/xjadeo xjadeo_SOURCES=main.c ../../aclocal.m4 ../../config.h \ xjadeo.c xjadeo.h ffcompat.h \ remote.c remote.h mqueue.c xjosc.c \ configfile.c common.c common_jack.c \ jack.c ltc-jack.c \ midi.c freetype.c smpte.c \ display.c display.h \ display_x_dnd.c display_x_dialog.c libsofd.c \ display_mac.c display_x11.c display_sdl.c \ display_gl_common.h \ weak_libjack.c weak_libjack.h \ gtime.c gtime.h xjadeo_LDADD = @MQ_LIBS@ @FFMPEG_LIBS@ @XV_LIBS@ @MIDI_LIBS@ @FREETYPE_LIBS@ @IMLIB2_LIBS@ @XPM_LIBS@ @LIBLO_LIBS@ @SDL_LIBS@ @LTC_LIBS@ @GL_LIBS@ -lm xjadeo_CFLAGS = -Wall -g -O3 -pthread \ @FFMPEG_CFLAGS@ @XV_CFLAGS@ @MIDI_CFLAGS@ @FREETYPE_CFLAGS@ @IMLIB2_CFLAGS@ @XPM_CFLAGS@ @LIBLO_CFLAGS@ @SDL_CFLAGS@ @LTC_CFLAGS@ @GL_CFLAGS@ @JACK_CFLAGS@ "-DSUBVERSION=\"$(REV)\"" "-DSHAREDIR=\"$(datadir)\"" xjadeo_OBJCFLAGS = -Wall -g -O3 -pthread \ @FFMPEG_CFLAGS@ @XV_CFLAGS@ @MIDI_CFLAGS@ @FREETYPE_CFLAGS@ @IMLIB2_CFLAGS@ @XPM_CFLAGS@ @LIBLO_CFLAGS@ @SDL_CFLAGS@ @LTC_CFLAGS@ @GL_CFLAGS@ @JACK_CFLAGS@ "-DSUBVERSION=\"$(REV)\"" if TARGET_LINUX xjadeo_SOURCES+=display_glx.c xjadeo_LDADD+=@JACK_LIBS@ endif if TARGET_NETBSD xjadeo_SOURCES+=display_glx.c xjadeo_LDADD+=@JACK_LIBS@ endif if TARGET_WIN32 xjadeo_SOURCES+=display_gl_win.c windows.rc xjadeo_CFLAGS+=-DUSE_WEAK_JACK xjadeo_LDADD+=-lws2_32 -lwinmm -lcomdlg32 -lpthread xjadeo_LDFLAGS=-mwindows endif if TARGET_OSX xjadeo_SOURCES+=display_gl_osx.m xjadeo_CFLAGS+=-DUSE_WEAK_JACK xjadeo_LDADD+=-ldl endif xjremote_SOURCES = xjremote.c xjremote_CFLAGS = -pthread "-DSUBVERSION=\"$(REV)\"" xjremote_LDADD = @MQ_LIBS@ MAINTAINERCLEANFILES = Makefile.in CLEANFILES = paths.h BUILT_SOURCES = paths.h xjadeo_DEPENDENCIES= \ icons/brightness.bitmap icons/gamma.bitmap icons/osd_bitmaps.h \ icons/brightness_mask.xbm icons/gamma_mask.xbm \ icons/contrast.bitmap icons/hue.bitmap icons/xjadeo8_ico.h \ icons/contrast_mask.xbm icons/hue_mask.xbm icons/xjadeo8.ico \ icons/saturation_mask.xbm icons/xjadeo8.xpm \ icons/saturation_mask.xbm icons/xjadeoH.ico \ fonts/ArdourMono.ttf paths.h icons/xjadeoH.h if EMBED_FONT xjadeo_LDADD+=osdfont.o xjadeo_CFLAGS+=-DWITH_EMBEDDED_FONT xjadeo_DEPENDENCIES+=osdfont.o endif xjremote_DEPENDENCIES= \ paths.h paths.h: Makefile @echo '#define BINDIR "$(DESTDIR)/$(bindir)/"' >$@ @echo '#define SYSCONFDIR "$(DESTDIR)/$(sysconfdir)/"' >>$@ osdfont.o: fonts/ArdourMono.ttf $(LD) -r -b binary -o osdfont.o fonts/ArdourMono.ttf .rc.o: $(WINDRES) -o $@ $< xjadeo-0.8.10/src/xjadeo/xjosc.c0000644000175000017500000003265713667467320013361 00000000000000/* xjadeo - OSC remote control * * Copyright (C) 2007,2009 Robin Gareus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation; * * 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #define OSC_DOC_ALL /* extract doc for website, doc/pages/osc.html table: * * xjadeo --osc-doc \ * | grep -ve '^#' \ * | sed 's% %%;s% %%;s%^%%;s%$%%' * */ #ifdef HAVE_LIBLO #include #include #include "xjadeo.h" extern int want_verbose; extern int want_quiet; extern int loop_flag; extern int loop_run; extern int force_redraw; extern int movie_width; extern int64_t userFrame; extern int64_t dispFrame; extern double delay; extern int64_t ts_offset; #ifdef HAVE_MIDI extern int midi_clkconvert; extern int midi_clkadj; extern char midiid[128]; #endif #ifdef TIMEMAP extern int64_t timeoffset; extern double timescale; extern int wraparound; #endif #ifdef CROPIMG extern int xoffset; #endif extern double delay; extern double framerate; // OSD extern char OSD_fontfile[1024]; extern int OSD_mode; static int oscb_seek (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ if (want_verbose) fprintf(stderr, "OSC: %s <- i:%i\n", path, argv[0]->i); userFrame=argv[0]->i; return(0); } static int oscb_fps (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ if (want_verbose) fprintf(stderr, "OSC: %s <- f:%f\n", path, argv[0]->f); if (argv[0]->f>0) delay= 1.0 / argv[0]->f; else delay = -1; // use file-framerate return(0); } static int oscb_offset (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ if (want_verbose) fprintf(stderr, "OSC: %s <- i:%i\n", path, argv[0]->i); ts_offset = argv[0]->i; return(0); } static int oscb_offsetsmpte (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ if (want_verbose) fprintf(stderr, "OSC: %s <- s:%s\n", path, &argv[0]->s); ts_offset = smptestring_to_frame((char*)&argv[0]->s); return(0); } static int oscb_jackconnect (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ open_jack(); return(0); } static int oscb_jackdisconnect (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ close_jack(); return(0); } #if defined HAVE_LTC || defined OSC_DOC_ALL static int oscb_ltcconnect (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ open_ltcjack(NULL); return(0); } static int oscb_ltcdisconnect (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ close_ltcjack(); return(0); } #endif #if defined HAVE_MIDI || defined OSC_DOC_ALL static int oscb_midiconnect (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ #ifdef HAVE_MIDI char *mp; if (&argv[0]->s && strlen(&argv[0]->s)>0) mp=&argv[0]->s; else mp="-1"; midi_open(mp); if (midi_connected()) { strncpy(midiid,mp,32); // XXX we need a better idea for 'xapi_reopen_midi() midiid[31]=0; } #endif return(0); } static int oscb_mididisconnect (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ #ifdef HAVE_MIDI midi_close(); #endif return(0); } #endif #if defined TIMEMAP || defined OSC_DOC_ALL static int oscb_timescale (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ #ifdef TIMEMAP if (want_verbose) fprintf(stderr, "OSC: %s <- f:%f\n", path, argv[0]->f); timescale=argv[0]->f; force_redraw=1; #endif return(0); } static int oscb_timescale2 (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ #ifdef TIMEMAP if (want_verbose) fprintf(stderr, "OSC: %s <- f:%f i:%i\n", path, argv[0]->f, argv[1]->i); timescale=argv[0]->f; timeoffset=argv[1]->i; force_redraw=1; #endif return(0); } static int oscb_loop (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ #ifdef TIMEMAP if (want_verbose) fprintf(stderr, "OSC: %s <- i:%i\n", path, argv[0]->i); wraparound = argv[0]->i?1:0; return(0); #endif } static int oscb_reverse (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ #ifdef TIMEMAP if (want_verbose) fprintf(stderr, "OSC: %s\n", path); timescale *= -1.0; if (timescale<0) timeoffset = (-2.0*timescale) * dispFrame; // TODO: check file-offset and ts_offset. -> also in remote.c else timeoffset = 0; // TODO - applt diff dispFrame <> transport src #endif return(0); } #endif #if defined CROPIMG || defined OSC_DOC_ALL static int oscb_pan (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ #ifdef CROPIMG if (want_verbose) fprintf(stderr, "OSC: %s <- i:%i\n", path, argv[0]->i); xoffset=argv[0]->i; if (xoffset<0) xoffset=0; if (xoffset>movie_width) xoffset=movie_width; force_redraw=1; #endif return(0); } #endif static int oscb_load (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ if (want_verbose) fprintf(stderr, "OSC: %s <- s:%s\n", path, &argv[0]->s); open_movie(&argv[0]->s); init_moviebuffer(); newsourcebuffer(); force_redraw=1; return(0); } static int oscb_osdfont (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ if (want_verbose) fprintf(stderr, "OSC: %s <- s:%s\n", path, &argv[0]->s); snprintf(OSD_fontfile,1024,"%s",(char*) &argv[0]->s); return(0); } static int oscb_osdframe (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ if (want_verbose) fprintf(stderr, "OSC: %s <- i:%i\n", path, argv[0]->i); if (argv[0]->i) OSD_mode|=OSD_FRAME; else OSD_mode&=~OSD_FRAME; force_redraw=1; return(0); } static int oscb_osdsmtpe (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ if (want_verbose) fprintf(stderr, "OSC: %s <- i:%i\n", path, argv[0]->i); if (argv[0]->i) OSD_mode|=OSD_SMPTE; else OSD_mode&=~OSD_SMPTE; force_redraw=1; return(0); } static int oscb_osdbox (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ if (want_verbose) fprintf(stderr, "OSC: %s <- i:%i\n", path, argv[0]->i); if (argv[0]->i) OSD_mode|=OSD_BOX; else OSD_mode&=~OSD_BOX; force_redraw=1; return(0); } static int oscb_remotecmd (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ if (want_verbose) fprintf(stderr, "OSC: %s <- s:%s\n", path, &argv[0]->s); exec_remote_cmd (&argv[0]->s); return(0); } // X11 options #if 0 static int oscb_fullscreen (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ if (want_verbose) fprintf(stderr, "OSC: %s <- i:%i\n", path, argv[0]->i); int action=_NET_WM_STATE_TOGGLE; if (!strcmp(d,"on") || atoi(d)==1) action=_NET_WM_STATE_ADD; else if (!strcmp(d,"off")) action=_NET_WM_STATE_REMOVE; remote_printf(100,"ok."); Xfullscreen(action); return(0); } static int oscb_mousepointer (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ if (want_verbose) fprintf(stderr, "OSC: %s <- i:%i\n", path, argv[0]->i); int action=2; if (!strcmp(d,"on") || atoi(d)==1) action=1; else if (!strcmp(d,"off")) action=0; Xmousepointer (action); remote_printf(100,"ok."); return(0); } #endif // general static int oscb_quit (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data){ fprintf(stderr, "OSC 'quit' command recv.\n"); loop_flag=0; return(0); } static void oscb_error (int num, const char *m, const char *path) { fprintf(stderr, "liblo server error %d in path %s: %s\n", num, path, m); } ////////////////////////////////////////////////////////////////////////////// struct osc_command { const char *path; const char *typespec; lo_method_handler handler; const char *documentation; }; static struct osc_command OSCC[] = { {"/jadeo/quit", "", &oscb_quit, "Terminate xjadeo."}, {"/jadeo/load", "s", &oscb_load, "Load a video file, replacing any previous one (load )"}, {"/jadeo/seek", "i", &oscb_seek, "Seek to given frame-number (seek ) - Xjadeo needs to be disconnected from a sync-source"}, {"/jadeo/cmd", "s", &oscb_remotecmd, "Call a remote control command"}, {"/jadeo/fps", "f", &oscb_fps, "Set the screen update frequency (-f, set fps)"}, {"/jadeo/offset", "i", &oscb_offset, "Set time-offset as frame-number (-o, set offset)"}, {"/jadeo/offset", "s", &oscb_offsetsmpte, "Set time-offset as timecode (-o, set offset)"}, {"/jadeo/osd/font", "s", &oscb_osdfont, "Specify a TrueType Font file to be used for rendering On-Screen-Display text (osd font)"}, {"/jadeo/osd/timecode", "i", &oscb_osdsmtpe, "If set to 1: render timecode on screen; set to 0 to disable (-i, osd smpte)"}, {"/jadeo/osd/framenumber", "i", &oscb_osdframe, "If set to 1: render frame-number on screen, set to 0 to disable (-i, osd frame)"}, {"/jadeo/osd/box", "i", &oscb_osdbox, "If set to 1: draw a black backround around OSD elements, set to 0 to disable (osd box, osd nobox)"}, {"/jadeo/jack/connect", "", &oscb_jackconnect, "Connect to JACK and sync to JACK-transport (jack connect)"}, {"/jadeo/jack/disconnect", "", &oscb_jackdisconnect, "Stop synchronization with JACK-transport (jack disconnect)"}, #if defined HAVE_LTC || defined OSC_DOC_ALL {"/jadeo/ltc/connect", "", &oscb_ltcconnect, "Synchronize to LTC from jack-audio port (ltc connect)"}, {"/jadeo/ltc/disconnect", "", &oscb_ltcdisconnect, "Close LTC/JACK client (ltc disconnect)"}, #endif #if defined HAVE_MIDI || defined OSC_DOC_ALL // HAVE_MIDI {"/jadeo/midi/connect", "s", &oscb_midiconnect, "Get sync from MTC (MIDI Time Code). The parameter specifies the midi-port to connect to. (-m, -d, midi connect)"}, {"/jadeo/midi/disconnect", "", &oscb_mididisconnect, "Close the MIDI device (midi disconnect)"}, #endif #if defined CROPIMG || defined OSC_DOC_ALL {"/jadeo/art/pan", "i", &oscb_pan, "Set the x-offset to the value given in pixels. 0 ≤ val ≤ movie-width"}, #endif #if defined TIMEMAP || defined OSC_DOC_ALL {"/jadeo/art/timescale", "f", &oscb_timescale, "Set time-multiplier; default value: 1.0"}, {"/jadeo/art/timescale", "fi", &oscb_timescale2, "Set both time-multiplier and offset. default: 1.0, 0"}, {"/jadeo/art/loop", "i", &oscb_loop, "Enable wrap-around/loop video. If set to 1, multiples of the movie-length are added/subtracted if the current time-stamp is outside the file duration."}, {"/jadeo/art/reverse", "", &oscb_reverse, "Trigger reverse. This action multiplies the current time-scale with -1.0 and sets a time-offset so that the currently displayed frame is retained."}, #endif }; ////////////////////////////////////////////////////////////////////////////// static lo_server osc_server = NULL; int xjosc_initialize (int osc_port) { char tmp[8]; uint32_t port = (osc_port>100 && osc_port< 60000)?osc_port:7000; snprintf(tmp, sizeof(tmp), "%d", port); fprintf(stderr, "OSC trying port:%i\n",port); osc_server = lo_server_new (tmp, oscb_error); //fprintf (stderr,"OSC port %i is in use.\n", port); if (!osc_server) { if(!want_quiet) fprintf(stderr, "OSC start failed."); return(1); } if(!want_quiet) { char *urlstr; urlstr = lo_server_get_url (osc_server); fprintf(stderr, "OSC server name: %s\n",urlstr); free (urlstr); } int i; for (i = 0; i < sizeof(OSCC) / sizeof(struct osc_command); ++i) { lo_server_add_method(osc_server, OSCC[i].path, OSCC[i].typespec, OSCC[i].handler, NULL); } if(want_verbose) fprintf(stderr, "OSC server started on port %i\n",port); return (0); } int xjosc_process (void) { int rv = 0; if (!osc_server) return 0; while (lo_server_recv_noblock(osc_server, 0) > 0) { rv++; } return rv; } void xjosc_shutdown (void) { if (!osc_server) return; lo_server_free(osc_server); if(!want_verbose) fprintf(stderr, "OSC server shut down.\n"); } void xjosc_documentation (void) { printf("# Xjadeo OSC methods. Format:\n"); printf("# Path Typespec Documentation \n"); printf("#######################################################\n"); int i; for (i = 0; i < sizeof(OSCC) / sizeof(struct osc_command); ++i) { printf("%s %s %s\n", OSCC[i].path, OSCC[i].typespec, OSCC[i].documentation); } } #else int xjosc_initialize(int osc_port) {return(1);} void xjosc_shutdown(void) {;} int xjosc_process(void) {return(0);} void xjosc_documentation (void) { printf("# This version of xjadeo is compiled without OSC support.\n"); } #endif /* vi:set ts=8 sts=2 sw=2: */ xjadeo-0.8.10/src/xjadeo/mqueue.c0000644000175000017500000001117413305576763013524 00000000000000/* xjadeo - remote control, POSIX message queue * * Copyright (C) 2006,2014 Robin Gareus * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "xjadeo.h" #ifdef HAVE_MQ #include #include #include #include #include #include #include extern int errno; extern int loop_run; // display active extern int loop_flag;// program active extern int want_quiet; extern int want_verbose; /* see xjremote.c for information on this one */ typedef struct { int cmd; char m[MQLEN]; } mqmsg; /* some static globals */ static mqd_t mqfd_r = -1; static mqd_t mqfd_s = -1; static size_t mq_msgsize_r; static char *msg_buffer; static int priority_of_msg = 20; int mymq_init(char *id) { struct mq_attr mqat; // TODO use session ID in path. // implement session authenticaion? - allow user to specify umask. char qname[64]; snprintf(qname,64,"/xjadeo-request%s%s", id?"-":"", id?(char*)id:""); mqfd_r = mq_open(qname, O_RDONLY | O_CREAT | O_EXCL | O_NONBLOCK, S_IRWXU , NULL); if (mqfd_r == -1) { perror("mq_open failure:"); if (errno == EEXIST) fprintf(stderr,"note: use `xjremote -u` to unlink old queues\n"); return(1); } if (mq_getattr(mqfd_r, &mqat) == -1) { perror("mq_getattr error:"); return(1); } mq_msgsize_r = mqat.mq_msgsize; msg_buffer = malloc(mq_msgsize_r); snprintf(qname,64,"/xjadeo-reply%s%s", id?"-":"", id?(char*)id:""); mqfd_s = mq_open(qname, O_WRONLY | O_CREAT | O_EXCL | O_NONBLOCK, S_IRWXU , NULL); if (mqfd_s == -1) { perror("mq_open failure:"); if (errno == EEXIST) fprintf(stderr,"note: use `xjremote -u` to unlink old queues\n"); mq_close(mqfd_r); snprintf(qname,64,"/xjadeo-request%s%s", id?"-":"", id?(char*)id:""); mq_unlink(qname); return(1); } while (mq_receive(mqfd_r, msg_buffer, mq_msgsize_r, 0) > 0) ; #if 0 { // FLUSH the output Queue mqd_t mqfd_sx = mq_open(qname, O_RDONLY | O_NONBLOCK, S_IRWXU , NULL); while (mq_receive(mqfd_sx, msg_buffer, mq_msgsize_r, 0) > 0) ; mq_close(mqfd_sx); } #endif if (!want_quiet) printf("activated remote interface. mqID:%s\n",id?id:"[default]"); return(0); } void mymq_close(void) { if(mqfd_s == -1 || mqfd_r==-1) { return; } if (mq_close(mqfd_r) == -1) perror("mq_close failure on mqfd_r"); if (mq_close(mqfd_s) == -1) perror("mq_close failure on mqfd_s"); //FIXME : use mqID // snprintf(qname,64,"/xjadeo-request%s%s", id?"-":"", id?(char*)id:""); if (mq_unlink("/xjadeo-request") == -1) perror("mq_unlink failure"); if (mq_unlink("/xjadeo-reply") == -1) perror("mq_unlink failure"); if (!want_quiet) printf("closed MQ remote control.\n"); mqfd_s=mqfd_r=-1; } /* read message from queue and store it in data. * data needs to be 'NULL' (ignore msg) or point to a valid char[MQLEN]. * return values 0: no message in queue * -1: error * >0: data bytes in message. */ int mymq_read(char *data) { mqmsg *mymsg; int num_bytes_received = mq_receive(mqfd_r, msg_buffer, mq_msgsize_r, 0); if (num_bytes_received == -1 && errno==EAGAIN) return (0); if (num_bytes_received == -1) { perror("mq_receive failure on mqfd"); usleep(40000); return (-1); } if (num_bytes_received != sizeof(mqmsg) ) { fprintf(stderr,"MQ: received garbage message\n"); return (-1); } mymsg = (mqmsg*) &msg_buffer[0]; if (data) { strncpy(data, mymsg->m, MQLEN); data[MQLEN-1] = 0; return strlen(data); } else { return strlen(mymsg->m); } } void mymq_reply(int rv, char *str) { int retry=5; static int retry_warn=1; mqmsg myrpy = {1, "" }; if (mqfd_s== -1) return; myrpy.cmd= rv; snprintf(myrpy.m,MQLEN,"%s\n",str); // until we implement threads we should not waste time trying to re-send.. // mq_timedsend() might be an alternative.. while (retry > 0) { int rv=mq_send(mqfd_s, (char*) &myrpy, sizeof(mqmsg), priority_of_msg); if(!rv) break; retry--; usleep(20); } if (retry==0 && retry_warn) { fprintf(stderr,"DROPPED REMOTE MESSAGE\n"); retry_warn=0; } } #endif /* HAVE_MQ */ xjadeo-0.8.10/src/xjadeo/icons/0000755000175000017500000000000013775353060013240 500000000000000xjadeo-0.8.10/src/xjadeo/icons/osd_bitmaps.h0000644000175000017500000000051512620454615015632 00000000000000#ifndef OSD_BITMAPS #define OSD_BITMAPS #include "brightness.bitmap" #include "brightness_mask.xbm" #include "contrast.bitmap" #include "contrast_mask.xbm" #include "gamma.bitmap" #include "gamma_mask.xbm" // UNUSED //#include "hue.bitmap" //#include "hue_mask.xbm" #include "saturation.bitmap" #include "saturation_mask.xbm" #endif xjadeo-0.8.10/src/xjadeo/icons/saturation_mask.xbm0000644000175000017500000000110312620454615017063 00000000000000#define osd_saturation_mask_width 24 #define osd_saturation_mask_height 24 static unsigned char osd_saturation_mask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xfe, 0xff, 0x7f, 0x02, 0x01, 0x40, 0xfa, 0xff, 0x5f, 0xfa, 0xff, 0x5f, 0xfa, 0xff, 0x5f, 0xfa, 0xff, 0x5f, 0xfa, 0xff, 0x5f, 0xfa, 0xff, 0x5f, 0x02, 0x01, 0x40, 0xfe, 0xff, 0x7f, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; xjadeo-0.8.10/src/xjadeo/icons/contrast_mask.xbm0000644000175000017500000000107512620454615016537 00000000000000#define osd_contrast_mask_width 24 #define osd_contrast_mask_height 24 static unsigned char osd_contrast_mask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0xc0, 0xc3, 0x03, 0x60, 0x00, 0x06, 0x30, 0x00, 0x0c, 0x18, 0x3c, 0x18, 0x0c, 0xff, 0x30, 0x84, 0xff, 0x21, 0xc4, 0xff, 0x23, 0xc6, 0xff, 0x63, 0xe2, 0xff, 0x47, 0xe2, 0xff, 0x47, 0xe2, 0xff, 0x47, 0xe2, 0xff, 0x47, 0xc6, 0xff, 0x63, 0xc4, 0xff, 0x23, 0x84, 0xff, 0x21, 0x0c, 0xff, 0x30, 0x18, 0x3c, 0x18, 0x30, 0x00, 0x0c, 0x60, 0x00, 0x06, 0xc0, 0xc3, 0x03, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 }; xjadeo-0.8.10/src/xjadeo/icons/brightness_mask.xbm0000644000175000017500000000110312620454615017042 00000000000000#define osd_brightness_mask_width 24 #define osd_brightness_mask_height 24 static unsigned char osd_brightness_mask_bits[] = { 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x3c, 0x1e, 0xf8, 0x3c, 0x1f, 0xf8, 0x00, 0x1f, 0xf8, 0x7e, 0x1f, 0xf0, 0xff, 0x0f, 0x80, 0xff, 0x01, 0xc0, 0xff, 0x03, 0xdf, 0xc3, 0xfb, 0xdf, 0xc3, 0xfb, 0xdf, 0xc3, 0xfb, 0xdf, 0xc3, 0xfb, 0xc0, 0xff, 0x03, 0x80, 0xff, 0x01, 0xf0, 0xff, 0x0f, 0xf8, 0x7e, 0x1f, 0xf8, 0x00, 0x1f, 0xf8, 0x3c, 0x1f, 0x78, 0x3c, 0x1e, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00 }; xjadeo-0.8.10/src/xjadeo/icons/xjadeoH128.png0000644000175000017500000002677412620454615015517 00000000000000PNG  IHDR>asRGB IDATx}{՝>gy`1/@%aɁ" k<{ FEq5aAFGfa]uAW~̓|ϙ3]oݪ~{ ....钿8!ߴ4tP -b/ݯ~+!Rk3f`/pNS)%8q䭭ٓI)i[ڦSNX`A/֮]+HNu}ѢE, QFePWPPՙyyyE`'!$s3m;Se ˲Zcg5M;P !srroF( ׯ_G2#E)͢*z]J*RJb !tBH @ʋ'RrJsRʯ!5&Xm"R6w}F+J)f>|pSӴ,˲I)sK (BBRJ G0$DRR0cBR!Di'4M;N*t]4޲͛7,X`BD [ne'O֏?mllPlYVKkYVJic,RR8!J)RJI4 #E@El*ٜmMR54X0߹?^t"@>}Z7n?;;;DQJi_ !zrsYsOt&pAH)!B.7IzwʩB !$\ !-F)elrr(??-[8"+I`0ٳ}Ru]J)%F1 !c[Ec$NBS]I.hD"RJsO8dY~M>/,,<}6;; @J1 Jp*++r/`MӆBJ)Ŕ\ƘW)#R1F!ptT"3 tƘ&(>JC_}վσpV)\VVf]ng_F ic`sssY8 JioJiԤjtd`&TDIض"Zʫʋp8|P)777w_ee5M;;t~cJ*++{OAAAQϞ=t]s~5?YON+[!ۋ)9w !eY+ٶDsrrBg:RKy/!ȶRp`!DMrky(:0C!d%2m T6R)f_э12R"={XٗR?w\o=SJBRRJgQBs΍sc=܋$2T|"PSiK,+KӴ,R 6쒓uRoR˲+ضM"9p5ISStZ" x۶MH)B,kYOJXR>#.oE4@/xJ4r5] 0$!_7ӗή'3VH]*AObHJ)/c,% إG2Ɗ@)[eJ)(^۶)8%4!0ƸiF _m}{֘d;1I:gB(mۦK),Ji`R|˶mGRH|RJ"sSJ J6yL5$D;&ɴCtRGH)m_2ЎÆ =z$߶m,,PpX !l!DE1L/d׋(o/^4b6Ķg<=z(ٰaCyW(,,K,15772Ɔ'?qkas? t&#wߖb"U' I'RJB)",h3fLp۶m֙3ge'СCɪUtBH~8 K)ٶ]JD=!B`:3ƘiA$Sw2g $񙂞 GDFZ$+ig̘(//%o/;v`;wm B+BQ*<(m!%9*dRӿ }H'9D:@!D zy-;vcǎ3>ګW/\*J)#l&T~|0'DxЯ5C& 1ƸRڶݨzg}^]NeBW !z۶l&X B()BXPB&OkzZ2g.Z-8v^q*0 ym@7!ĀP(4Úz,[̃vuDj5B)^iBu0bRHp`@ m!BuMӺBc A႟̌\R@)i]_F8>޿j( * o8Xdɷ3E+ ^W/zSNdr;3bŊ3:'Hx… 3:?Q=۶s]a۶L !2;@u00B:z.t4 Rʶmۖ4puҝߚtu:C2h?j8~gK%RJ%eٖe]/޻ka9-[UYY٪0qGs4a&4MqT`Y BPkHDZmwe8юxk1mz.xm鐴-sλz8m"4ι{|)`ɒ%2e[v7c= 2Gnwߍ7|O>$L3=*ެYpB9i~cxQ\\ /KMoѹ C SO=nݺeib֬Y(,,tn6h혷z+6n܈ڭקO,Zcƌi4M|>~躎"~}x>lۆa(**rcߏ|a ߏ˭wAOqQ\Z ĉݲ1G}snyy9ƍSjx嗱o><)f̚5=뮻p;[n:kxݞyI:t ---~޽{g 3U55558}K3uUUU asGYYYBuu5rssz@mm-vڅaÆ܋wܹsؾ};暘z/rss?:Ν;~.A~1{н{w|'شiN xwP]].i @8׋ybrp *޽%ɓ;θ4M7wٵ^}iG?ƌիWwL:ݻwǺupyh2tUUU8p`РABEE,%S6`cʀ]vA)kÆ ;#cǎO>$~?ykq7͛ iOflݺmcȐ!0`6o!߸q#0w\>,Μ9\<hnnƪUH2"sԿaH%_BhnnF0m)\D1cƠGhii2㠂wϝ;۶i QUUcǎ%$#PRR_ N,Xߏgbɘ3gxb8qa`ر4 >,c=o՘={6N> 6`hhh}ǃիWSLA}}=&M"@/7nDII VZb_/FKK ѧO>|sCu9rPcBt{1444wӧۇ'NYYY曡:: |nic<@nzeYm~8wkw򐛛Cvv6K.Mzȑ#[cȓɨѣٳ' HYɓLjkkQPPpQ(#FoGP(>:NUuք4M7#տ\RJQTT˲C0ѣGhjjԩS1j(x饗 pu᷿-ߏ}nàAuVzx1a,_<pG^y@}}=Mhudee'O?ڵkq-$|X3goJ_DL0/"***sN^]w]s*׿G}?ҥK1`Chm;=|>Za᭷BII pĉR4M/  0f477Z[M 6M۷oGNNN}Q1)`YGysI+SOŔ͚5+&=^ϟpn!܌DZ5aڒd`ʔ)!K.E^^rrrsϹ- jov{ Gƴiܬ?W:>|&M7ߌCdGKii M0n8L4 ۷o̙3C q8ѣG㡇B(<ߟ7 0qDB!'NĄ ЧO@ss3&L_|+V뿰vZ444`˭݋=zUUU{0o<ѣ3gK<~:,Y⎈fΜ!gOH!fZZZPYYAaܹ.,8}4n喘r#''SNȑ#qM7GgHMM +555-΂׋&9cǎ={6m/~ pW+u 2gHG~3wC~ āpf ڵkp{L*x.3DΟ?ׯ;"$჻]_F0c,&5ڑ?PTT=zƞ={&}҂&4557x#&NAwjr>}yݝS :hΤixב۶^z ^7dG>@nn.V\ oն;wh\X6b` իWW\}O>1VKgϞ(,,s,_K.!s뮻٘:u*,X;պ i zEo0g=annf#G4M{|8uL@ 2>^7aoq륔Ð!C`Y!o~0@r7:t'1{3gyB!455! &3+D=8zSLu5Múu0w\wa6,ѭ[7wƍS.E BxPPP|x<;wӟpw_ر>Šb\ٳ\X P\\ ׋Çc޼yׯ;rXlY5lقSNGFCC>S,ZV街c(MPSS7|Oea$|qJ f*ؙ-**s=޽{>bw"!a>@NN1sL| KlF0tɶψ+sGNN@뮻h*!i3\mp@@p8%ҎH`ɒ%hhhѣG1i$\{ );}{hhh@nfvIav,ްjM:]uuu7M(0aCaʕxw;$.pww>-c0 Uv)4ζ4aanH8^v؁ٳg4:{;d{Z|AfΜ`„ ?~;;vl'Fw֋.>~I:u >[,ĿGC К;Slق3f{nw`߾}8r䈛yxwbz{g{=ω_ĉQ^^ 6Ą׮]e]yyy͒¦=O[qe֕9N;+WtP;|0fΜ:vލ'x/wX|9: #GŋQXX_EE _~eu=F9oV̶s#F+k9o&7O[Ν;k߯_?=zU<:xcǎرc锷;KBxe,AѣG.o IDAT 7ΉT֭sx饗pM7Uioȸqm۶MQQQ#F@Ӵ?wG$Ik;%m85k}Yc߾}عs'Ξ=:t1vPbY~?> >%ň#P]] |uDR[[c>[!p;%m ͕c(,, :t(>;e{޽{]_{?c8FII{̙3b , {ߢ"澲W_}5fHXRR~aʕnM㗵pQ^3fp3ǍÇǼGG30l0?~ƍsGp---?>oݧOݡܑ%K_,Gƶmoi[njJ6ͽ:p؍ \mdRؼysLɓ1p@B!5-{p!%{ƤI0}t(77xvϟ~;w??yԨQiiiA8FMMM=B\RB!|{]w݅ӧB`-[dlNac RhmU t]L΋3ۂ=oM8;GDksKq˲ey{nab4@mF&mǧQJ)|91BR%I/ssD6>&8z0Rr΃۶a?oh~~\NNΗaf}k'|9/|0ƈiT40 .=.Q}ԵL$"Yߖةsq:?f3lƧ999~|[ r9eʔ cB0s9Wi~RRJ!h1IFDG&DHuO4cԟ~8g2eJ3u߯Ǝ+~= a_pkcA vI(4M9cD9NdMt%#BޝN3Dha|`=Ǝk| veP̙3(//W7p]PP` !d(x(:+c$륑w MӸi^眛soӈvz}&}]}$o IFk*Ƙ6R6M܊z`[~ih .\RPPpP |Mӈi,5]cDx-IzNR~ޘ'H9Kgc@#*dzviAA 6Gkș3gPXX?W_ض-<RQJ)9g>xR]JI)$7~&5uOiD)R*(*]w|`wcccܹsk;$xǻ$uK)=H܁QZF ^zYyc\4lJ-&" tu%"cjEWܞ9wBTP;sΥsl4M3Mzd1!I6xOt=<۹Jr"!t/{JP_q΅pD`޽^޽{K8qBN)e&PJB4|~0sGgEq4dGMRzn2J#8DHT')J RZin~P(_8$޽{C[ZZZcn8$R9u{^4Ma>JF"L"`ӑ 7Oe*4iI)(WEzݧOz. H@)RTJ8”RLuLud1.zU$醎G8y KJnM>x~(JiC= ;N1 z;v,[j駟f3MF]ׯbuy2IA*՜(,N31 I̊<2 1ɓ={vG}$!`9\ mtMM~;pxm'-jm;NI4,*l>"٤Laeƕc 4 3MQJ}ܹ2dHcSS_ Mӌ?lnn.4mbMɣ mvfS9h&(SK)䜟B0Mm{~>ԟγe:S_1"}~s߲i#RJ2ƼNH` ^͞ d5; !SRJI !M(' !B>m_n5|@ohhg,kiCcb!&!Dcq˲cD@ t$thvGK)mBE RJR'c~yaaM„+b/+.{s֭q%pR:HӴR*8\J" \ҪQ`1!BH-l6J)8lB)u0CUuuuglT]]^t uV6yd<`,H)90qaFT2If.P1)/TlXж&BHRFJcDzl>Ε~++Ѧa͚5|ᦦiYeuRv眗Q,)9/॔RJSJ;IP2Lif!T@Qi MNJ*]׫5M,q W Y\h |4(YBT/]׻K)REJ^ c #EBB8B8", ", c #CA3F3F", "' c #BD0F0F", ") c #F1CDCD", "! c #C11D1D", "~ c #C11F1F", "{ c #EFC4C4", "] c #07BB07", "^ c #05BA05", "/ c #CCF1CC", "( c #0505BA", "_ c #0606BA", ": c #C12020", "< c #F1CECE", "[ c #E5A0A0", "} c #D36060", "| c #202020", "1 c #B7B7B7", "2 c #ACE8AC", "3 c #C0EDC0", "4 c #2BC42B", "5 c #A9E7A9", "6 c #B1E9B1", "7 c #98E298", "8 c #D1F2D1", "9 c #979797", "0 c #B2B2E9", "a c #BFBFED", "b c #5555D0", "c c #A2A2E5", "d c #B3B3EA", "e c #C4C4EF", "f c #4040CA", "g c #E09090", "h c #F2CFCF", "i c #16BF16", "j c #4ECE4E", "k c #9AE39A", "l c #52CF52", "m c #8DDF8D", "n c #27C327", "o c #E3F7E3", "p c #555555", "q c #969696", "r c #0808BB", "s c #CCCCF1", "t c #5252CF", "u c #9494E1", "v c #1C1CC0", "w c #CDCDF1", "x c #C22121", "y c #F0CACA", "z c #ECBABA", "A c #CA4141", "B c #2D2D2D", "C c #C3C3C3", "D c #95E295", "E c #97E297", "F c #B4EAB4", "G c #79DA79", "H c #5DD25D", "I c #D3F3D3", "J c #7F7F7F", "K c #C7C7C7", "L c #A3A3E5", "M c #B7B7EB", "N c #8181DC", "O c #6161D3", "P c #DADAF4", "Q c #C93C3C", "R c #BC0C0C", "S c #727272", "T c #6F6F6F", "U c #4CCE4C", "V c #B5EAB5", "W c #59D159", "X c #82DC82", "Y c #1CC01C", "Z c #E2F7E2", "` c #5C5C5C", " . c #5858D1", ".. c #8A8ADF", "+. c #1414BE", "@. c #D1D1F2", "#. c #D56868", "$. c #E08E8E", "%. c #EEC1C1", "&. c #373737", "*. c #D0D0D0", "=. c #9FE49F", "-. c #09BB09", ";. c #BAECBA", ">. c #9EE49E", ",. c #A0E5A0", "'. c #A2A2A2", "). c #AFAFE9", "!. c #9D9DE4", "~. c #A4A4E6", "{. c #C5C5EF", "]. c #4C4CCE", "^. c #CF5151", "/. c #171717", "(. c #12BE12", "_. c #15BE15", ":. c #0E0EBC", "<. c #1717BF", "[. c #0707BB", "}. c #D15A5A", "|. c #E9AFAF", "1. c #C32525", "2. c #2C2C2C", "3. c #2B2B2B", "4. c #29292A", "5. c #272827", "6. c #262627", "7. c #252525", "8. c #232323", "9. c #222221", "0. c #212020", "a. c #1F1E1F", "b. c #1D1D1D", "c. c #1B1C1C", "d. c #1A1A1A", "e. c #181918", "f. c #151515", "g. c #141414", "h. c #131312", "i. c #0F100F", "j. c #0E0F0E", "k. c #0C0C0C", "l. c #0B0B0B", "m. c #0A090A", "n. c #080808", "o. c #060707", "p. c #050505", "q. c #030303", "r. c #030202", "s. c #010101", "t. c #000000", "u. c #2D2D2C", "v. c #292A2A", "w. c #00A000", "x. c #232222", "y. c #202121", "z. c #1F1F1F", "A. c #1E1D1D", "B. c #1B1B1B", "C. c #191919", "D. c #151514", "E. c #131313", "F. c #121111", "G. c #101010", "H. c #0F0E0F", "I. c #0A0A0A", "J. c #080909", "K. c #2B2C2C", "L. c #2A2B2A", "M. c #292929", "N. c #272727", "O. c #262625", "P. c #212121", "Q. c #201F1F", "R. c #181818", "S. c #161717", "T. c #131314", "U. c #121212", "V. c #111010", "W. c #0D0D0E", "X. c #090909", "Y. c #070707", "Z. c #060606", "`. c #040405", " + c #020102", ".+ c #2E2D2D", "++ c #2B2B2A", "@+ c #282728", "#+ c #242524", "$+ c #1E1F1F", "%+ c #1B1B1C", "&+ c #181919", "*+ c #0F1010", "=+ c #0E0E0E", "-+ c #0C0D0D", ";+ c #0A0909", ">+ c #030304", ",+ c #020202", "'+ c #000001", ")+ c #2E2E2E", "!+ c #2A2A29", "~+ c #272627", "{+ c #242525", "]+ c #232423", "^+ c #222222", "/+ c #1C1C1C", "(+ c #141515", "_+ c #121112", ":+ c #0B0C0C", "<+ c #080809", "[+ c #070706", "}+ c #030203", "|+ c #010100", "1+ c #2E2E2F", "2+ c #2A2A2A", "3+ c #262727", "4+ c #252625", "5+ c #242424", "6+ c #212021", "7+ c #20201F", "8+ c #151415", "9+ c #141313", "0+ c #111212", "a+ c #111110", "b+ c #0D0D0D", "c+ c #0A0A0B", "d+ c #060506", "e+ c #020101", "f+ c #2F2F2F", "g+ c #2D2E2D", "h+ c #2C2B2B", "i+ c #282727", "j+ c #262626", "k+ c #212122", "l+ c #1F201F", "m+ c #1C1B1B", "n+ c #121313", "o+ c #040504", "p+ c #040304", "q+ c #010000", "r+ c #2E2D2E", "s+ c #2D2C2C", "t+ c #232424", "u+ c #1B1A1B", "v+ c #181718", "w+ c #161516", "x+ c #111112", "y+ c #100F0F", "z+ c #0D0C0D", "A+ c #0B0B0C", "B+ c #030403", "C+ c #030302", " ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", " . . . . . . . . . . . . . . . . . ", " . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . + + + + + + + + . . @ @ @ @ @ @ @ @ . . # # # # # # # # . . ", ". . + + + + + + + + . . @ @ @ @ @ @ @ @ . . # # # # # # # # . . ", ". . + + + + + + + + . . @ @ @ @ @ @ @ @ . . # # # # # # # # . . ", ". . $ % + + & * = - . . @ @ @ @ @ @ @ ; . . # # # # # # # # . . ", ". . + > , ' ) ! ~ { . . ] @ @ @ @ ^ @ / . . ( # # # # _ # # . . ", ". . + : < [ } + ~ { | 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 w . . ", ". . + x y z A + ~ { B C D E F G H @ @ I J K c L M N O # # P . . ", ". . + > Q x ) R ~ { S T @ U V W X @ Y Z ` 9 # # # ...# +.@.. . ", ". . #.$.+ + % g x %.&.*.E =.V -.;.>.,.I . '.).!.~.r d ~.{.].. . ", ". . + + + + + + ^.[ . /.(.@ @ @ @ _.@ @ . . :.<.# # # +.[.# . . ", ". . + + + + + }.|.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.t.", "u.3.v.w.w.w.w.x.y.z.A.w.B.C.w.w.D.E.F.G.H.w.w.I.J.w.w.w.w.s.t.t.", "B K.L.M.N.O.w.x.P.Q.w.w.B.w.R.S.w.T.U.V.w.W.k.w.X.Y.Z.`.w. +t.t.", ".+2.++M.@+w.#+8.w.| $+w.%+w.&+/.w.g.w.. *+=+-+w.;+n.o.w.>+,+'+t.", ")+2.++!+w.~+{+]+^+| a.w./+w.C./.w.(+E._+G.=+w.:+I.<+[+p.w.}+|+t.", "1+B 2.2+w.3+4+5+x.6+7+w./+w.C.R.w.8+9+0+a+w.b+k.c+w.Y.d+w.q.e+t.", "f+g+h+2+w.i+j+5+w.k+l+w.b.m+w.w./.f.w.n+w.w.w.w.I.;+w.w.o+p+ +q+", "f+r+s+3.!+@+j+{+t+k+| $+b./+u+&+v+w+g.E.x+y+=+z+A+I.n.[+p.B+C+q+", " ", " "}; xjadeo-0.8.10/src/xjadeo/icons/xjadeoH.ico0000644000175000017500000000727612620454615015246 0000000000000000(0`       !! !!! !!!"!!!"""""""#####$#$$#$$$$%$%%$%%%%&%%&&&&&'&&'&'''&'''''(('('(')))*))**))******+**+++++++,,,+,,,,,-,-------..-.-.-.../..///111333999;;;<<<???@@@FFFHHHOOOPPPVVVYYYZZZ^^^```bbbdddeeejjjssstttvvvwww{{{|||~~~}yupjfc]XSPOJGDA<92+($! zvojd]VPMC@7 |vmhd`ZWOHE=;50&# |xulfb_XROHC>94.(" |xrpeaXSLGC<1-(% {wrni`\UKEB:6/'#~yt`[TQKH?93.)|ysqkga^YRPNIFC@<81,*#  nTۖ#·߯ߧj퍲 秎ճn|C 幸ߪߥ혿a&O````````````````````````xjadeo-0.8.10/src/xjadeo/icons/gamma_mask.xbm0000644000175000017500000000106412620454615015762 00000000000000#define osd_gamma_mask_width 24 #define osd_gamma_mask_height 24 static unsigned char osd_gamma_mask_bits[] = { 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x3f, 0x07, 0x00, 0x3e, 0x0f, 0xfe, 0x1c, 0xc7, 0xff, 0x0c, 0xfa, 0x07, 0x0c, 0xfc, 0x00, 0x0c, 0x3e, 0x00, 0x0c, 0x4f, 0x01, 0x8c, 0x87, 0x03, 0xcc, 0xc1, 0x03, 0xec, 0x80, 0x03, 0xfc, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x00, 0x08, 0x1c, 0x00, 0x38, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x1c, 0x00, 0x78 }; xjadeo-0.8.10/src/xjadeo/icons/contrast.bitmap0000644000175000017500000000105612620454615016211 00000000000000#define osd_contrast_width 24 #define osd_contrast_height 24 static unsigned char osd_contrast_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0xc0, 0xc3, 0x03, 0x60, 0x00, 0x06, 0x30, 0x00, 0x0c, 0x18, 0x0c, 0x18, 0x0c, 0x0f, 0x30, 0x84, 0x0f, 0x20, 0xc4, 0x0f, 0x20, 0xc6, 0x0f, 0x60, 0xe2, 0x0f, 0x40, 0xe2, 0x0f, 0x40, 0xe2, 0x0f, 0x40, 0xe2, 0x0f, 0x40, 0xc6, 0x0f, 0x60, 0xc4, 0x0f, 0x20, 0x84, 0x0f, 0x20, 0x0c, 0x0f, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x0c, 0x60, 0x00, 0x06, 0xc0, 0xc3, 0x03, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 }; xjadeo-0.8.10/src/xjadeo/icons/saturation.bitmap0000644000175000017500000000106412620454615016544 00000000000000#define osd_saturation_width 24 #define osd_saturation_height 24 static unsigned char osd_saturation_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xfe, 0xff, 0x7f, 0x02, 0x01, 0x40, 0xfa, 0xee, 0x40, 0x7a, 0x13, 0x45, 0xaa, 0x9a, 0x40, 0xfa, 0xae, 0x42, 0xba, 0x23, 0x48, 0xfa, 0xae, 0x40, 0x02, 0x01, 0x40, 0xfe, 0xff, 0x7f, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; xjadeo-0.8.10/src/xjadeo/icons/xjadeo_win.ico0000644000175000017500000001356612620454615016012 00000000000000 &00( @        !! !!! !!!"!!!"""""""#####$#$$#$$$$%$%%$%%%%&%%&&&&&'&&'&'''&'''''(('('(')))*))**))******+**+++++++,,,+,,,,,-,-------..-.-.-.../../// 777 ""&&''@@UUULL;;<<RR\\\??UUAAXXaaRRooorrrZZ``gghhpp݂ ߋ''++└䝝墢壣椤LLOORRZZ]]鯯걱겲뷷yy݃}wqmib]XUTNKHD>91*'#  ~vqjb[UQGC7 ~tojf_\TLI?<5/%" }smhe]WTLG@94-'! zwlg]XPKG>0,'$ zupfaZOIF;6.&"|f`YVOLB93-({xrngd^WUSMJGC>80+)" 0000000000000000000000000000000000000000000000000000000000000000000000222222220000ϗ00002222222200000G00Rk222cA20000ڑ0Eٛ0000ҝ珔ݧԯ2222c0000բ݈ɯβ22000000د2Eߞ2y0000Ǫ]0ѡ:י0000Ҡ瓔0000:2222=220000000022222222000000002222222200000000222222220000000022222222000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÇÇ(0`       !! !!! !!!"!!!"""""""#####$#$$#$$$$%$%%$%%%%&%%&&&&&'&&'&'''&'''''(('('(')))*))**))******+**+++++++,,,+,,,,,-,-------..-.-.-.../..///111333999;;;<<<???@@@FFFHHHOOOPPPVVVYYYZZZ^^^```bbbdddeeejjjssstttvvvwww{{{|||~~~}yupjfc]XSPOJGDA<92+($! zvojd]VPMC@7 |vmhd`ZWOHE=;50&# |xulfb_XROHC>94.(" |xrpeaXSLGC<1-(% {wrni`\UKEB:6/'#~yt`[TQKH?93.)|ysqkga^YRPNIFC@<81,*#  nTۖ#·߯ߧj퍲 秎ճn|C 幸ߪߥ혿a&O````````````````````````xjadeo-0.8.10/src/xjadeo/icons/hue_mask.xbm0000644000175000017500000000105612620454615015462 00000000000000#define osd_hue_mask_width 24 #define osd_hue_mask_height 24 static unsigned char osd_hue_mask_bits[] = { 0x00, 0x7e, 0x00, 0x80, 0xff, 0x01, 0xc0, 0xff, 0x03, 0xe0, 0xff, 0x07, 0xe0, 0xff, 0x07, 0xf0, 0xff, 0x0f, 0xf0, 0xff, 0x0f, 0xf0, 0xff, 0x0f, 0xf8, 0xff, 0x1f, 0xfc, 0xff, 0x3f, 0xfe, 0xe7, 0x6f, 0xfe, 0xc3, 0x47, 0xff, 0xc3, 0xc7, 0xff, 0x81, 0x83, 0xff, 0xc3, 0x81, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0xff, 0xff, 0xc0, 0xfe, 0x7f, 0x40, 0xfe, 0x7f, 0x60, 0xfc, 0x3f, 0x30, 0xf8, 0x3f, 0x1c, 0xe0, 0xe7, 0x07, 0x00, 0x00, 0x00 }; xjadeo-0.8.10/src/xjadeo/icons/gamma.bitmap0000644000175000017500000000104512620454615015434 00000000000000#define osd_gamma_width 24 #define osd_gamma_height 24 static unsigned char osd_gamma_bits[] = { 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x07, 0x00, 0x04, 0x03, 0xfe, 0x04, 0xc5, 0x03, 0x04, 0x38, 0x00, 0x04, 0x1c, 0x00, 0x04, 0x26, 0x00, 0x04, 0x41, 0x01, 0x84, 0x80, 0x01, 0x44, 0xc0, 0x01, 0x24, 0x00, 0x00, 0x34, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x04, 0x00, 0x38, 0xff, 0xff, 0xff, 0x04, 0x00, 0x38, 0x04, 0x00, 0x08 }; xjadeo-0.8.10/src/xjadeo/icons/xjadeo8.ico0000644000175000017500000000427612620454615015223 00000000000000 ( @        !! !!! !!!"!!!"""""""#####$#$$#$$$$%$%%$%%%%&%%&&&&&'&&'&'''&'''''(('('(')))*))**))******+**+++++++,,,+,,,,,-,-------..-.-.-.../../// 777 ""&&''@@UUULL;;<<RR\\\??UUAAXXaaRRooorrrZZ``gghhpp݂ ߋ''++└䝝墢壣椤LLOORRZZ]]鯯걱겲뷷yy݃}wqmib]XUTNKHD>91*'#  ~vqjb[UQGC7 ~tojf_\TLI?<5/%" }smhe]WTLG@94-'! zwlg]XPKG>0,'$ zupfaZOIF;6.&"|f`YVOLB93-({xrngd^WUSMJGC>80+)" 0000000000000000000000000000000000000000000000000000000000000000000000222222220000ϗ00002222222200000G00Rk222cA20000ڑ0Eٛ0000ҝ珔ݧԯ2222c0000բ݈ɯβ22000000د2Eߞ2y0000Ǫ]0ѡ:י0000Ҡ瓔0000:2222=220000000022222222000000002222222200000000222222220000000022222222000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÇÇxjadeo-0.8.10/src/xjadeo/icons/xjadeo8_ico.h0000644000175000017500000003303412620454615015524 00000000000000static const unsigned char xjadeo_win_ico[] = { 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x20, 0x20, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0xa8, 0x08, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x03, 0x00, 0x03, 0x02, 0x03, 0x00, 0x02, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x00, 0x04, 0x03, 0x03, 0x00, 0x04, 0x03, 0x04, 0x00, 0x03, 0x04, 0x03, 0x00, 0x05, 0x04, 0x04, 0x00, 0x04, 0x05, 0x04, 0x00, 0x05, 0x05, 0x05, 0x00, 0x06, 0x05, 0x06, 0x00, 0x06, 0x06, 0x06, 0x00, 0x07, 0x07, 0x06, 0x00, 0x06, 0x07, 0x07, 0x00, 0x07, 0x07, 0x07, 0x00, 0x08, 0x08, 0x08, 0x00, 0x09, 0x08, 0x08, 0x00, 0x09, 0x09, 0x08, 0x00, 0x09, 0x09, 0x09, 0x00, 0x09, 0x09, 0x0a, 0x00, 0x0a, 0x09, 0x0a, 0x00, 0x0a, 0x0a, 0x0a, 0x00, 0x0b, 0x0a, 0x0a, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0c, 0x0b, 0x0b, 0x00, 0x0c, 0x0c, 0x0b, 0x00, 0x0c, 0x0c, 0x0c, 0x00, 0x0d, 0x0c, 0x0d, 0x00, 0x0d, 0x0d, 0x0c, 0x00, 0x0d, 0x0d, 0x0d, 0x00, 0x0e, 0x0d, 0x0d, 0x00, 0x0e, 0x0e, 0x0e, 0x00, 0x0f, 0x0e, 0x0f, 0x00, 0x0e, 0x0f, 0x0e, 0x00, 0x0f, 0x0f, 0x10, 0x00, 0x0f, 0x10, 0x0f, 0x00, 0x10, 0x10, 0x0f, 0x00, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x11, 0x00, 0x10, 0x11, 0x11, 0x00, 0x11, 0x11, 0x11, 0x00, 0x12, 0x11, 0x11, 0x00, 0xba, 0x04, 0x04, 0x00, 0x11, 0x11, 0x12, 0x00, 0x12, 0x11, 0x12, 0x00, 0x12, 0x12, 0x11, 0x00, 0x12, 0x12, 0x12, 0x00, 0x13, 0x13, 0x12, 0x00, 0x12, 0x13, 0x13, 0x00, 0x13, 0x13, 0x13, 0x00, 0xbb, 0x06, 0x06, 0x00, 0x14, 0x13, 0x13, 0x00, 0x13, 0x13, 0x14, 0x00, 0xbb, 0x07, 0x07, 0x00, 0x14, 0x14, 0x14, 0x00, 0x15, 0x14, 0x15, 0x00, 0x15, 0x15, 0x14, 0x00, 0xbb, 0x08, 0x08, 0x00, 0x14, 0x15, 0x15, 0x00, 0x15, 0x15, 0x15, 0x00, 0x16, 0x15, 0x16, 0x00, 0xbb, 0x09, 0x09, 0x00, 0x17, 0x17, 0x16, 0x00, 0x17, 0x17, 0x17, 0x00, 0x18, 0x17, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x19, 0x18, 0x00, 0x19, 0x19, 0x18, 0x00, 0x19, 0x19, 0x19, 0x00, 0x1a, 0x1a, 0x1a, 0x00, 0x1b, 0x1a, 0x1b, 0x00, 0x1b, 0x1b, 0x1b, 0x00, 0x1c, 0x1b, 0x1b, 0x00, 0x1b, 0x1b, 0x1c, 0x00, 0xbd, 0x0f, 0x0f, 0x00, 0x1c, 0x1c, 0x1b, 0x00, 0x1c, 0x1c, 0x1c, 0x00, 0x1d, 0x1d, 0x1d, 0x00, 0x1d, 0x1d, 0x1e, 0x00, 0x1f, 0x1e, 0x1f, 0x00, 0x1f, 0x1f, 0x1e, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x1f, 0x1f, 0x20, 0x00, 0x1f, 0x20, 0x1f, 0x00, 0x1f, 0x20, 0x20, 0x00, 0x20, 0x20, 0x20, 0x00, 0x20, 0x20, 0x21, 0x00, 0x21, 0x20, 0x21, 0x00, 0x21, 0x21, 0x20, 0x00, 0x21, 0x21, 0x21, 0x00, 0x22, 0x21, 0x21, 0x00, 0xbf, 0x15, 0x15, 0x00, 0x21, 0x22, 0x22, 0x00, 0x22, 0x22, 0x22, 0x00, 0x22, 0x22, 0x23, 0x00, 0x23, 0x23, 0x23, 0x00, 0x23, 0x24, 0x23, 0x00, 0x24, 0x24, 0x23, 0x00, 0x24, 0x24, 0x24, 0x00, 0xc0, 0x18, 0x18, 0x00, 0x24, 0x25, 0x24, 0x00, 0x25, 0x25, 0x24, 0x00, 0x25, 0x25, 0x25, 0x00, 0x25, 0x26, 0x25, 0x00, 0x25, 0x26, 0x26, 0x00, 0x26, 0x26, 0x26, 0x00, 0x27, 0x26, 0x26, 0x00, 0x27, 0x26, 0x27, 0x00, 0x27, 0x27, 0x26, 0x00, 0x27, 0x27, 0x27, 0x00, 0x27, 0x27, 0x28, 0x00, 0x28, 0x27, 0x28, 0x00, 0x27, 0x28, 0x27, 0x00, 0xc1, 0x1c, 0x1c, 0x00, 0x29, 0x29, 0x29, 0x00, 0x2a, 0x29, 0x29, 0x00, 0x2a, 0x2a, 0x29, 0x00, 0x29, 0x2a, 0x2a, 0x00, 0x2a, 0x2a, 0x2a, 0x00, 0x04, 0x04, 0xba, 0x00, 0x2a, 0x2b, 0x2a, 0x00, 0x2a, 0x2b, 0x2b, 0x00, 0x2b, 0x2b, 0x2b, 0x00, 0x2b, 0x2b, 0x2c, 0x00, 0x2c, 0x2c, 0x2b, 0x00, 0x2c, 0x2c, 0x2c, 0x00, 0x2c, 0x2c, 0x2d, 0x00, 0x2c, 0x2d, 0x2d, 0x00, 0x2d, 0x2d, 0x2d, 0x00, 0x2d, 0x2d, 0x2e, 0x00, 0x2e, 0x2d, 0x2e, 0x00, 0x2d, 0x2e, 0x2d, 0x00, 0x2e, 0x2e, 0x2e, 0x00, 0x2f, 0x2e, 0x2e, 0x00, 0x2f, 0x2f, 0x2f, 0x00, 0x0d, 0x0d, 0xbd, 0x00, 0x10, 0x10, 0xbd, 0x00, 0x37, 0x37, 0x37, 0x00, 0x13, 0x13, 0xbe, 0x00, 0x1e, 0x1e, 0xc1, 0x00, 0x1f, 0x1f, 0xc2, 0x00, 0x20, 0x20, 0xc2, 0x00, 0x22, 0x22, 0xc3, 0x00, 0x26, 0x26, 0xc4, 0x00, 0x27, 0x27, 0xc4, 0x00, 0xca, 0x40, 0x40, 0x00, 0x55, 0x55, 0x55, 0x00, 0xce, 0x4c, 0x4c, 0x00, 0x3b, 0x3b, 0xc9, 0x00, 0x3c, 0x3c, 0xc9, 0x00, 0xd0, 0x52, 0x52, 0x00, 0x5c, 0x5c, 0x5c, 0x00, 0x3f, 0x3f, 0xca, 0x00, 0xd1, 0x55, 0x55, 0x00, 0x41, 0x41, 0xcb, 0x00, 0xd2, 0x58, 0x58, 0x00, 0xd4, 0x61, 0x61, 0x00, 0x52, 0x52, 0xd0, 0x00, 0x6f, 0x6f, 0x6f, 0x00, 0x72, 0x72, 0x72, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x5a, 0x5a, 0xd2, 0x00, 0x60, 0x60, 0xd4, 0x00, 0x67, 0x67, 0xd5, 0x00, 0x7f, 0x7f, 0x7f, 0x00, 0x68, 0x68, 0xd5, 0x00, 0x70, 0x70, 0xd7, 0x00, 0x04, 0xba, 0x04, 0x00, 0x06, 0xbb, 0x06, 0x00, 0x08, 0xbb, 0x08, 0x00, 0xdd, 0x82, 0x82, 0x00, 0x0a, 0xbc, 0x0a, 0x00, 0x13, 0xbe, 0x13, 0x00, 0x16, 0xbf, 0x16, 0x00, 0xdf, 0x8b, 0x8b, 0x00, 0x1c, 0xc1, 0x1c, 0x00, 0x96, 0x96, 0x96, 0x00, 0x97, 0x97, 0x97, 0x00, 0x27, 0xc4, 0x27, 0x00, 0x2b, 0xc5, 0x2b, 0x00, 0xe2, 0x94, 0x94, 0x00, 0x8e, 0x8e, 0xe0, 0x00, 0x90, 0x90, 0xe1, 0x00, 0xa2, 0xa2, 0xa2, 0x00, 0xe4, 0x9d, 0x9d, 0x00, 0xe5, 0xa2, 0xa2, 0x00, 0xe5, 0xa3, 0xa3, 0x00, 0xe6, 0xa4, 0xa4, 0x00, 0x4c, 0xce, 0x4c, 0x00, 0x4f, 0xcf, 0x4f, 0x00, 0x52, 0xd0, 0x52, 0x00, 0xa0, 0xa0, 0xe5, 0x00, 0x5a, 0xd2, 0x5a, 0x00, 0x5d, 0xd3, 0x5d, 0x00, 0xe9, 0xaf, 0xaf, 0x00, 0xea, 0xb1, 0xb1, 0x00, 0xea, 0xb2, 0xb2, 0x00, 0xb7, 0xb7, 0xb7, 0x00, 0xeb, 0xb7, 0xb7, 0x00, 0xaf, 0xaf, 0xe9, 0x00, 0x79, 0xda, 0x79, 0x00, 0xed, 0xbe, 0xbe, 0x00, 0xb8, 0xb8, 0xeb, 0x00, 0xc3, 0xc3, 0xc3, 0x00, 0x83, 0xdd, 0x83, 0x00, 0xb9, 0xb9, 0xec, 0x00, 0xc7, 0xc7, 0xc7, 0x00, 0xef, 0xc5, 0xc5, 0x00, 0x8d, 0xe0, 0x8d, 0x00, 0xef, 0xc6, 0xc6, 0x00, 0xc1, 0xc1, 0xee, 0x00, 0x95, 0xe2, 0x95, 0x00, 0x98, 0xe3, 0x98, 0x00, 0xc5, 0xc5, 0xef, 0x00, 0x9a, 0xe3, 0x9a, 0x00, 0xf1, 0xcc, 0xcc, 0x00, 0xf1, 0xcd, 0xcd, 0x00, 0xd0, 0xd0, 0xd0, 0x00, 0x9e, 0xe4, 0x9e, 0x00, 0x9f, 0xe4, 0x9f, 0x00, 0xa0, 0xe5, 0xa0, 0x00, 0xca, 0xca, 0xf1, 0x00, 0xf2, 0xd1, 0xd1, 0x00, 0xcd, 0xcd, 0xf1, 0x00, 0xa9, 0xe7, 0xa9, 0x00, 0xce, 0xce, 0xf1, 0x00, 0xcf, 0xcf, 0xf1, 0x00, 0xab, 0xe8, 0xab, 0x00, 0xac, 0xe8, 0xac, 0x00, 0xb1, 0xe9, 0xb1, 0x00, 0xb3, 0xea, 0xb3, 0x00, 0xf4, 0xd9, 0xd9, 0x00, 0xb5, 0xeb, 0xb5, 0x00, 0xb9, 0xec, 0xb9, 0x00, 0xc0, 0xee, 0xc0, 0x00, 0xcc, 0xf1, 0xcc, 0x00, 0xd1, 0xf2, 0xd1, 0x00, 0xd3, 0xf2, 0xd3, 0x00, 0xe2, 0xf7, 0xe2, 0x00, 0xe3, 0xf7, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x8a, 0x86, 0x82, 0x7d, 0x77, 0x71, 0x6d, 0x69, 0x62, 0x5d, 0x58, 0x55, 0x54, 0x4e, 0x4b, 0x48, 0x44, 0x3e, 0x39, 0x31, 0x2a, 0x27, 0x23, 0x20, 0x1d, 0x17, 0x15, 0x11, 0x0e, 0x0a, 0x02, 0x8e, 0x8b, 0x83, 0x7e, 0xa8, 0x76, 0x71, 0x6a, 0xa8, 0x62, 0x5b, 0xa8, 0x55, 0x51, 0xa8, 0xa8, 0x47, 0x43, 0xa8, 0x37, 0xa8, 0xa8, 0xa8, 0xa8, 0x1d, 0x1b, 0xa8, 0xa8, 0x10, 0x0d, 0x06, 0x02, 0x8d, 0x88, 0x85, 0x7e, 0xa8, 0x74, 0x6f, 0x6a, 0x66, 0x5f, 0x5c, 0xa8, 0x54, 0xa8, 0x4c, 0x49, 0xa8, 0x3f, 0x3c, 0x35, 0x2f, 0xa8, 0x25, 0x22, 0x1e, 0xa8, 0x16, 0x12, 0xa8, 0x0b, 0x05, 0x00, 0x8c, 0x85, 0x81, 0x7d, 0xa8, 0x73, 0x6d, 0x68, 0x65, 0x5d, 0x57, 0xa8, 0x54, 0xa8, 0x4c, 0x47, 0xa8, 0x40, 0x39, 0x34, 0x2d, 0x27, 0xa8, 0x21, 0x1d, 0x18, 0x15, 0x11, 0xa8, 0x09, 0x03, 0x00, 0x89, 0x85, 0x81, 0x7a, 0x77, 0xa8, 0x6c, 0x67, 0xa8, 0x5d, 0x58, 0xa8, 0x50, 0xa8, 0x4b, 0x47, 0xa8, 0x3e, 0xa8, 0x30, 0x2c, 0x27, 0x24, 0xa8, 0x1b, 0x17, 0x14, 0xa8, 0x0c, 0x07, 0x01, 0x00, 0x88, 0x84, 0x80, 0x7a, 0x75, 0x70, 0xa8, 0x66, 0x61, 0x5a, 0xa8, 0xa8, 0x4f, 0xa8, 0x49, 0x46, 0xa8, 0x3b, 0x36, 0x2e, 0xa8, 0x26, 0x22, 0xa8, 0x1a, 0x16, 0x13, 0x0f, 0xa8, 0x06, 0x00, 0x00, 0x87, 0x82, 0x7c, 0xa8, 0xa8, 0xa8, 0xa8, 0x66, 0x60, 0x59, 0x56, 0xa8, 0x4f, 0x4c, 0xa8, 0xa8, 0x42, 0x39, 0x33, 0x2d, 0x28, 0xa8, 0xa8, 0x1d, 0x19, 0xa8, 0xa8, 0xa8, 0xa8, 0x04, 0x00, 0x00, 0x85, 0x82, 0x7b, 0x78, 0x72, 0x6e, 0x67, 0x64, 0x5e, 0x57, 0x55, 0x53, 0x4d, 0x4a, 0x47, 0x43, 0x3e, 0x38, 0x30, 0x2b, 0x29, 0x22, 0x1f, 0x1c, 0x17, 0x14, 0x11, 0x0b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x30, 0x30, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0x30, 0x30, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xa9, 0xcf, 0x97, 0x30, 0x30, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0x30, 0x30, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xa5, 0xc7, 0x30, 0x47, 0xb4, 0xaf, 0xaf, 0xaf, 0xaf, 0xb5, 0xaf, 0xaf, 0x30, 0x30, 0x52, 0x6b, 0x32, 0x32, 0x32, 0x63, 0x41, 0x32, 0x30, 0x30, 0x30, 0x30, 0xad, 0xbd, 0x7f, 0x7f, 0xab, 0xbe, 0x96, 0xda, 0x91, 0xe1, 0xdc, 0xe3, 0xf0, 0xb3, 0xf1, 0xe2, 0xe4, 0xf5, 0x30, 0xbf, 0xca, 0xc0, 0xc3, 0x45, 0xcc, 0xc3, 0xd9, 0x9b, 0x30, 0x30, 0x30, 0x30, 0x7f, 0xd2, 0x9d, 0x96, 0xe7, 0x8f, 0x94, 0xdd, 0xa7, 0xa6, 0xaf, 0xc4, 0xf0, 0xc8, 0xd4, 0xaf, 0xb7, 0xf6, 0x9f, 0xb9, 0x32, 0x32, 0x32, 0xa3, 0xb6, 0x32, 0x63, 0xe6, 0x30, 0x30, 0x30, 0x30, 0x7f, 0x96, 0xe5, 0xd5, 0xa2, 0x7f, 0x94, 0xdd, 0x88, 0xd3, 0xdb, 0xdc, 0xee, 0xd0, 0xc9, 0xaf, 0xaf, 0xf5, 0xac, 0xd6, 0xc1, 0xc2, 0xce, 0xb2, 0xa4, 0x32, 0x32, 0xef, 0x30, 0x30, 0x30, 0x30, 0x7f, 0x7f, 0xbe, 0xea, 0x7f, 0x7f, 0x94, 0xdd, 0x30, 0x30, 0xb5, 0xc5, 0xde, 0xc6, 0xd8, 0xaf, 0xba, 0xf7, 0x9a, 0xb8, 0x32, 0x45, 0xdf, 0x9e, 0xbc, 0x32, 0x79, 0xe0, 0x30, 0x30, 0x30, 0x30, 0x7f, 0x95, 0xe9, 0xc7, 0xaa, 0x7f, 0x94, 0xdd, 0x5d, 0xcd, 0xeb, 0xf2, 0xbb, 0xb0, 0xe8, 0xed, 0xdc, 0xf4, 0x30, 0xb9, 0xcb, 0xd1, 0xa1, 0x3a, 0xc1, 0xcc, 0xd7, 0x99, 0x30, 0x30, 0x30, 0x30, 0x7f, 0xd2, 0xa0, 0x90, 0xe7, 0x93, 0x94, 0xdd, 0x30, 0x30, 0xb1, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xaf, 0xf3, 0x30, 0x30, 0x3a, 0x32, 0x32, 0x32, 0x32, 0x3d, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x98, 0xab, 0x7f, 0x7f, 0x9c, 0xa5, 0x92, 0xae, 0x30, 0x30, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xec, 0x30, 0x30, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x30, 0x30, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0x30, 0x30, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x30, 0x30, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0x30, 0x30, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x30, 0x30, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0x30, 0x30, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0xc3, 0x87, 0x0e, 0xe1, 0xc3, 0x87, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff }; xjadeo-0.8.10/src/xjadeo/icons/hue.bitmap0000644000175000017500000000103712620454615015134 00000000000000#define osd_hue_width 24 #define osd_hue_height 24 static unsigned char osd_hue_bits[] = { 0x00, 0x7e, 0x00, 0x80, 0xff, 0x01, 0xc0, 0xff, 0x03, 0xe0, 0xff, 0x07, 0xe0, 0xff, 0x07, 0xf0, 0xff, 0x0f, 0xf0, 0xff, 0x0f, 0x10, 0xf8, 0x0f, 0xc8, 0x23, 0x1c, 0xf4, 0x0b, 0x38, 0xf6, 0x61, 0x68, 0xe2, 0x41, 0x44, 0xe3, 0xc0, 0xc4, 0xc1, 0x80, 0x82, 0x81, 0xc2, 0x81, 0x01, 0xfe, 0x80, 0x01, 0x81, 0x80, 0x03, 0xc3, 0xc0, 0x02, 0x42, 0x40, 0x06, 0x66, 0x60, 0x0c, 0x3c, 0x30, 0x38, 0x3c, 0x1c, 0xe0, 0xe7, 0x07, 0x00, 0x00, 0x00 }; xjadeo-0.8.10/src/xjadeo/gtime.h0000644000175000017500000000166612620454615013330 00000000000000#ifndef XJ_GTIME_H #define XJ_GTIME_H #ifdef HAVE_CONFIG_H # include #endif #ifdef PLATFORM_WINDOWS #if (!defined __uint32_t_defined && !defined _STDINT_H) typedef long long int int64_t; typedef long long unsigned int uint64_t; typedef int uint32_t; #endif #ifndef INT_MAX #define INT_MAX 2147483647 #endif #else #include #endif /** * xj_get_monotonic_time: * * Queries the system monotonic time. * * The monotonic clock will always increase and doesn't suffer * discontinuities when the user (or NTP) changes the system time. It * may or may not continue to tick during times where the machine is * suspended. * * We try to use the clock that corresponds as closely as possible to * the passage of time as measured by system calls such as poll() but it * may not always be possible to do this. * * Returns: the monotonic time, in microseconds **/ int64_t xj_get_monotonic_time (void); #endif // XJ_GTIME_H xjadeo-0.8.10/src/xjadeo/display_gl_osx.m0000644000175000017500000010547213775350756015265 00000000000000/* xjadeo - jack video monitor * * Copyright (C) 2014-2021 Robin Gareus * * 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. */ #include "display_gl_common.h" #if (defined HAVE_GL && defined PLATFORM_OSX) void xapi_open (void *d); void xapi_close (void *d); extern double framerate; #import #include #include static pthread_mutex_t osx_vbuf_lock = PTHREAD_MUTEX_INITIALIZER; static size_t osx_vbuf_size = 0; static uint8_t *osx_vbuf = NULL; static int osxgui_status = -1000; static NSAutoreleasePool *pool = nil; static pthread_mutex_t osxgui_sync = PTHREAD_MUTEX_INITIALIZER; static volatile uint8_t sync_sem; static void gl_sync_lock () { if (osxgui_status > 0) { sync_sem = 1; pthread_mutex_lock (&osxgui_sync); }} static void gl_sync_unlock () { if (osxgui_status > 0) { sync_sem = 0; pthread_mutex_unlock (&osxgui_sync); }} static void gl_newsrc_sync () ; static bool _newsrc = false; #define PTLL gl_sync_lock() #define PTUL gl_sync_unlock() //forward declaration, need for 64bit apps on 10.5 OSErr UpdateSystemActivity (UInt8 d); @interface MenuDLG : NSObject { int menuID; } - (void)setMenuId:(int)id; @end __attribute__ ((visibility ("hidden"))) @interface XjadeoWindow : NSWindow { @public } - (id) initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag; - (BOOL) windowShouldClose:(id)sender; - (void) becomeKeyWindow:(id)sender; - (BOOL) canBecomeKeyWindow:(id)sender; - (void) miniaturize:(id)sender; - (void) deminiaturize:(id)sender; @end @implementation XjadeoWindow - (id) initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag { @try { NSWindow* w = [super initWithContentRect:contentRect styleMask:(NSClosableWindowMask | NSTitledWindowMask | NSMiniaturizableWindowMask) backing:NSBackingStoreBuffered defer:NO]; [w setAcceptsMouseMovedEvents:YES]; [w setLevel:NSNormalWindowLevel]; return w; } @catch ( NSException *e ) { return nil; } return nil; } - (BOOL) windowShouldClose:(id)sender { if ((interaction_override&OVR_QUIT_WMG) == 0) { loop_flag = 0; return YES; } return NO; } - (void) becomeKeyWindow:(id)sender { } - (BOOL) canBecomeKeyWindow:(id)sender{ return YES; } - (void) miniaturize:(id)sender { loop_run = 0; [super miniaturize:sender]; } - (void) deminiaturize:(id)sender { loop_run = 1; [super deminiaturize:sender]; } @end __attribute__ ((visibility ("hidden"))) @interface XjadeoOpenGLView : NSOpenGLView { int colorBits; int depthBits; BOOL resizing; @public NSTrackingArea* trackingArea; } - (id) initWithFrame:(NSRect)frame colorBits:(int)numColorBits depthBits:(int)numDepthBits; - (void) reshape; - (void) drawRect:(NSRect)rect; - (void) setFullScreen:(int)onoff; @end @implementation XjadeoOpenGLView - (id) initWithFrame:(NSRect)frame colorBits:(int)numColorBits depthBits:(int)numDepthBits { colorBits = numColorBits; depthBits = numDepthBits; resizing = FALSE; NSOpenGLPixelFormatAttribute pixelAttribs[16] = { NSOpenGLPFADoubleBuffer, NSOpenGLPFAAccelerated, NSOpenGLPFAColorSize, colorBits, NSOpenGLPFADepthSize, depthBits, 0 }; NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:pixelAttribs]; if (pixelFormat) { self = [super initWithFrame:frame pixelFormat:pixelFormat]; [pixelFormat release]; if (self) { [[self openGLContext] makeCurrentContext]; [self reshape]; } } else { self = nil; } return self; } - (void) reshape { [[self openGLContext] update]; NSRect bounds = [self bounds]; gl_reshape(bounds.size.width, bounds.size.height); } - (void) drawRect:(NSRect)rect { pthread_mutex_lock(&osx_vbuf_lock); if (_newsrc) { gl_newsrc_sync(); } xjglExpose(osx_vbuf); pthread_mutex_unlock(&osx_vbuf_lock); } -(void) updateTrackingAreas { if (trackingArea != nil) { [self removeTrackingArea:trackingArea]; [trackingArea release]; } const int opts = (NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveAlways); trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] options:opts owner:self userInfo:nil]; [self addTrackingArea:trackingArea]; } - (void) mouseEntered:(NSEvent*)theEvent { [self updateTrackingAreas]; gl_mousepointer (hide_mouse); } - (void) mouseExited:(NSEvent*)theEvent { CGDisplayShowCursor (kCGDirectMainDisplay); } - (void) mouseDragged:(NSEvent*)event { NSRect frame = [[self window] frame]; NSPoint mp = [self convertPoint:[event locationInWindow] fromView:self]; if (!resizing && osd_seeking && ui_syncsource() == SYNC_NONE && OSD_mode & OSD_POS) { const float sk = calc_slider (mp.x, _gl_height - mp.y); if (sk >= 0) { // no lock, userFrame is queried atomically // and transport is disconnected when osd_seeking is set ui_sync_manual (sk); } } else if (resizing || !(mp.y > 16 || frame.size.width - mp.x > 16)) { resizing = TRUE; // TODO use absolute mouse position, clamp to window edge CGFloat originY = frame.origin.y; CGFloat deltaY = [event deltaY]; frame.origin.y = (originY + frame.size.height) - (frame.size.height + deltaY); frame.size.width += [event deltaX]; frame.size.height += deltaY; if (frame.size.width < 80) frame.size.width = 80; if (frame.size.height < 60) { frame.size.height = 60; frame.origin.y = originY; } [[self window] setFrame:frame display:YES animate:NO]; } } - (void) mouseDown:(NSEvent*)event { if (ui_syncsource() == SYNC_NONE && OSD_mode & OSD_POS) { NSPoint mp = [self convertPoint:[event locationInWindow] fromView:self]; const float sk = calc_slider (mp.x, _gl_height - mp.y); if (sk >= 0) { PTLL; ui_sync_manual (sk); osd_seeking = 1; force_redraw = 1; PTUL; } } } - (void) mouseUp:(NSEvent*)event { if (resizing || osd_seeking) { if (osd_seeking) { PTLL; osd_seeking = 0; force_redraw = 1; PTUL; } resizing = FALSE; } else { xjglButton(1); } } - (void) rightMouseUp:(NSEvent*)event { xjglButton(3); } - (void) scrollWheel:(NSEvent*)event { const double dy = [event deltaY]; if (dy > 0) { xjglButton(4); } else if (dy < 0) { xjglButton(5); } [self updateTrackingAreas]; } - (void) keyDown:(NSEvent*)event { NSString* chars = [event characters]; char buf[2] = {[chars characterAtIndex:0], 0}; xjglKeyPress([chars characterAtIndex:0], buf); } - (void) setFullScreen:(int)onoff { if([self isInFullScreenMode] && !onoff) { [self exitFullScreenModeWithOptions:nil]; } else if (![self isInFullScreenMode] && onoff) { NSDictionary *opts = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:NO], NSFullScreenModeAllScreens, nil]; [self enterFullScreenMode:[NSScreen mainScreen] withOptions:opts]; } } @end static XjadeoOpenGLView* osx_glview; static id osx_window; // Menus static NSMenuItem *mFileOpen; static NSMenuItem *mFileClose; static NSMenuItem *mFileRecent; static NSMenuItem *mJackTransport; static NSMenuItem *mSyncJACK; #ifdef HAVE_LTC static NSMenuItem *mSyncLTC; #endif #ifdef HAVE_JACKMIDI static NSMenuItem *mSyncMTCJ; // jack #endif #ifdef HAVE_PORTMIDI static NSMenuItem *mSyncMTCP; // portmidi #endif static NSMenuItem *mSyncNone; static NSMenuItem *mOsdTC; static NSMenuItem *mOsdVtcOff; static NSMenuItem *mOsdVtcTc; static NSMenuItem *mOsdVtcFn; static NSMenuItem *mOsdOffOff; static NSMenuItem *mOsdOffTc; static NSMenuItem *mOsdOffFn; static NSMenuItem *mOsdBox; static NSMenuItem *mOsdTNfo; static NSMenuItem *mOsdGNfo; static NSMenuItem *mOsdGeo; static NSMenuItem *mDpyLetterbox; static NSMenuItem *mDpyOnTop; static NSMenuItem *mDpyFullscreen; static NSMenuItem *mDpyMouseCursor; static void update_sync_menu() { switch(ui_syncsource()) { case SYNC_JACK: [mJackTransport setEnabled:YES]; [mSyncNone setState:NSOffState]; [mSyncJACK setState:NSOnState]; #ifdef HAVE_LTC [mSyncLTC setState:NSOffState]; #endif #ifdef HAVE_JACKMIDI [mSyncMTCJ setState:NSOffState]; #endif #ifdef HAVE_PORTMIDI [mSyncMTCP setState:NSOffState]; #endif break; case SYNC_LTC: [mJackTransport setEnabled:NO]; [mSyncNone setState:NSOffState]; [mSyncJACK setState:NSOffState]; #ifdef HAVE_LTC [mSyncLTC setState:NSOnState]; #endif #ifdef HAVE_JACKMIDI [mSyncMTCJ setState:NSOffState]; #endif #ifdef HAVE_PORTMIDI [mSyncMTCP setState:NSOffState]; #endif break; case SYNC_MTC_PORTMIDI: [mJackTransport setEnabled:NO]; [mSyncNone setState:NSOffState]; [mSyncJACK setState:NSOffState]; #ifdef HAVE_LTC [mSyncLTC setState:NSOffState]; #endif #ifdef HAVE_JACKMIDI [mSyncMTCJ setState:NSOffState]; #endif #ifdef HAVE_PORTMIDI [mSyncMTCP setState:NSOnState]; #endif break; case SYNC_MTC_JACK: [mJackTransport setEnabled:NO]; [mSyncNone setState:NSOffState]; [mSyncJACK setState:NSOffState]; #ifdef HAVE_LTC [mSyncLTC setState:NSOffState]; #endif #ifdef HAVE_JACKMIDI [mSyncMTCJ setState:NSOnState]; #endif #ifdef HAVE_PORTMIDI [mSyncMTCP setState:NSOffState]; #endif break; default: [mJackTransport setEnabled:NO]; [mSyncNone setState:NSOnState]; [mSyncJACK setState:NSOffState]; #ifdef HAVE_LTC [mSyncLTC setState:NSOffState]; #endif #ifdef HAVE_JACKMIDI [mSyncMTCJ setState:NSOffState]; #endif #ifdef HAVE_PORTMIDI [mSyncMTCP setState:NSOffState]; #endif break; } if (interaction_override&OVR_MENUSYNC) { [mJackTransport setEnabled:NO]; [mSyncNone setEnabled:NO]; [mSyncJACK setEnabled:NO]; #ifdef HAVE_LTC [mSyncLTC setEnabled:NO]; #endif #ifdef HAVE_JACKMIDI [mSyncMTCJ setEnabled:NO]; #endif #ifdef HAVE_PORTMIDI [mSyncMTCP setEnabled:NO]; #endif } else { [mSyncNone setEnabled:YES]; [mSyncJACK setEnabled:YES]; #ifdef HAVE_LTC [mSyncLTC setEnabled:YES]; #endif #ifdef HAVE_JACKMIDI [mSyncMTCJ setEnabled:YES]; #endif #ifdef HAVE_PORTMIDI [mSyncMTCP setEnabled:YES]; #endif } } static void update_osd_menu () { [mOsdTC setState:(OSD_mode & OSD_SMPTE) ? NSOnState : NSOffState]; [mOsdVtcOff setState:(OSD_mode & (OSD_SMPTE|OSD_VTC)) ? NSOffState : NSOnState]; [mOsdVtcTc setState:(OSD_mode & OSD_FRAME) ? NSOnState : NSOffState]; [mOsdVtcFn setState:(OSD_mode & OSD_VTC) ? NSOnState : NSOffState]; [mOsdOffOff setState:(OSD_mode & (OSD_OFFF|OSD_OFFS)) ? NSOffState : NSOnState]; [mOsdOffTc setState:(OSD_mode & OSD_OFFS) ? NSOnState : NSOffState]; [mOsdOffFn setState:(OSD_mode & OSD_OFFF) ? NSOnState : NSOffState]; [mOsdBox setState:(OSD_mode & OSD_BOX) ? NSOnState : NSOffState]; [mOsdTNfo setState:(OSD_mode & OSD_NFO) ? NSOnState : NSOffState]; [mOsdGNfo setState:(OSD_mode & OSD_GEO) ? NSOnState : NSOffState]; [mOsdTNfo setEnabled:(movie_height < OSD_MIN_NFO_HEIGHT) ? NO : YES]; [mOsdGNfo setEnabled:(movie_height < OSD_MIN_NFO_HEIGHT) ? NO : YES]; [mOsdGeo setState:(OSD_mode & OSD_GEO) ? NSOnState : NSOffState]; [mOsdGeo setEnabled:(movie_height < OSD_MIN_NFO_HEIGHT) ? NO : YES]; } static void update_dpy_menu () { [mDpyLetterbox setState:Xgetletterbox() ? NSOnState : NSOffState]; [mDpyOnTop setState:Xgetontop() ? NSOnState : NSOffState]; [mDpyFullscreen setState:Xgetfullscreen() ? NSOnState : NSOffState]; [mDpyMouseCursor setState:Xgetmousepointer() ? NSOnState : NSOffState]; } @implementation MenuDLG - (void)setMenuId: (int)id { menuID = id; } - (void) menuWillOpen: (NSMenu *)menu { switch (menuID) { case 1: if (interaction_override&OVR_LOADFILE) { [mFileOpen setEnabled:NO]; [mFileClose setEnabled:NO]; [mFileRecent setEnabled:NO]; } else { unsigned int i, recent = x_fib_recent_count(); [mFileOpen setEnabled:YES]; [mFileClose setEnabled: have_open_file() ? YES : NO]; [mFileRecent setEnabled: recent > 0 ? YES : NO]; NSMenu *recentMenu = [[NSMenu alloc] initWithTitle:@"Recently Used"]; for (i = 0; i < recent && i < 8; ++i) { if (!x_fib_recent_at (i)) break; char *tmp = strdup (x_fib_recent_at (i)); char *base = basename(tmp); if (base) { NSString *name = [NSString stringWithUTF8String:base]; NSMenuItem *mi = [recentMenu addItemWithTitle:name action:@selector(openRecent:) keyEquivalent:@""]; [mi setRepresentedObject: [NSNumber numberWithInt:i]]; } free(tmp); } [mFileRecent setSubmenu:recentMenu]; [recentMenu release]; } break; case 2: update_sync_menu(); break; case 3: update_osd_menu(); break; case 4: update_dpy_menu(); break; default: break; } } @end @interface NSApplication (XJ) @end @implementation NSApplication (XJ) /* Invoked from the Quit menu item */ - (void) terminate: (id)sender { if ((interaction_override&OVR_QUIT_OSX) == 0) { loop_flag = 0; } } - (void) showAbout: (id)sender { NSAttributedString *credits = [[NSAttributedString alloc] initWithString:@"(C) 2006-2021\nRobin Gareus & Luis Garrido" ]; NSDictionary *aboutDict = [NSDictionary dictionaryWithObjectsAndKeys: credits, @"Credits", @"GNU General Public Licence Version 2", @"Copyright", @"XJadeo", @"ApplicationName", @VERSION, @"Version", nil]; [NSApp orderFrontStandardAboutPanelWithOptions:aboutDict]; [credits release]; } - (void) openVideo: (id)sender { if (interaction_override&OVR_LOADFILE) return; NSOpenPanel *panel = [NSOpenPanel openPanel]; [panel setCanChooseFiles:YES]; [panel setCanChooseDirectories:NO]; [panel setAllowsMultipleSelection:NO]; NSInteger clicked = [panel runModal]; if (clicked == NSFileHandlingPanelOKButton) { for (NSURL *url in [panel URLs]) { if (![url isFileURL]) continue; //NSLog(@"%@", url.path); const char *fn= [url.path UTF8String]; PTLL; xapi_open ((void*)fn); PTUL; break; } } if (osx_window) { [osx_window makeKeyAndOrderFront:osx_window]; } } - (void) closeVideo: (id)sender { if (interaction_override&OVR_LOADFILE) return; PTLL; xapi_close (NULL); PTUL; } - (void) openRecent: (id)sender { if (interaction_override&OVR_LOADFILE) return; int selectedItem = [[sender representedObject] intValue]; const char *fn = x_fib_recent_at (selectedItem); if (fn) { PTLL; xapi_open ((void*)fn); PTUL; } } - (void) syncJack: (id)sender { PTLL; ui_sync_to_jack(); PTUL; } - (void) syncLTC: (id)sender { PTLL; ui_sync_to_ltc(); PTUL; } - (void) syncMTCJ: (id)sender { PTLL; ui_sync_to_mtc_jack(); PTUL; } - (void) syncMTCP: (id)sender { PTLL; ui_sync_to_mtc_portmidi(); PTUL; } - (void) syncNone: (id)sender { PTLL; ui_sync_none(); PTUL; } - (void) osdVtcNone: (id)sender { PTLL; ui_osd_vtc_off(); PTUL; } - (void) osdVtcTc: (id)sender { PTLL; ui_osd_vtc_tc(); PTUL; } - (void) osdVtcFn: (id)sender { PTLL; ui_osd_vtc_fn(); PTUL; } - (void) osdTc: (id)sender { PTLL; ui_osd_tc(); PTUL; } - (void) osdPos: (id)sender { PTLL; ui_osd_permute(); PTUL; } - (void) osdOffNone: (id)sender { PTLL; ui_osd_offset_none(); PTUL; } - (void) osdOffFn: (id)sender { PTLL; ui_osd_offset_fn(); PTUL; } - (void) osdOffTc: (id)sender { PTLL; ui_osd_offset_tc(); PTUL; } - (void) osdBox: (id)sender { PTLL; ui_osd_box(); PTUL; } - (void) osdNfo: (id)sender { PTLL; ui_osd_fileinfo(); PTUL; } - (void) osdGeo: (id)sender { PTLL; ui_osd_geo(); PTUL; } - (void) osdClear: (id)sender { PTLL; ui_osd_clear(); PTUL; } - (void) dpySize50: (id)sender { XCresize_percent(50); } - (void) dpySize100: (id)sender { XCresize_percent(100); } - (void) dpySize150: (id)sender { XCresize_percent(150); } - (void) dpySizeDec: (id)sender { XCresize_scale(-1); } - (void) dpySizeInc: (id)sender { XCresize_scale( 1); } - (void) dpyAspect: (id)sender { XCresize_aspect(0); } - (void) dpyLetterbox: (id)sender { Xletterbox(2); } - (void) dpyOnTop: (id)sender { Xontop(2); } - (void) dpyFullscreen: (id)sender { Xfullscreen(2); } - (void) dpyMouseCursor: (id)sender { hide_mouse^=1; } - (void) offZero: (id)sender { PTLL; XCtimeoffset( 0, 0); PTUL; } - (void) offPF: (id)sender { PTLL; XCtimeoffset( 1, 0); PTUL; } - (void) offMF: (id)sender { PTLL; XCtimeoffset(-1, 0); PTUL; } - (void) offPM: (id)sender { PTLL; XCtimeoffset( 2, 0); PTUL; } - (void) offMM: (id)sender { PTLL; XCtimeoffset(-2, 0); PTUL; } - (void) offPH: (id)sender { PTLL; XCtimeoffset( 3, 0); PTUL; } - (void) offMH: (id)sender { PTLL; XCtimeoffset(-3, 0); PTUL; } - (void) offPS: (id)sender { PTLL; XCtimeoffset( 4, 0); PTUL; } - (void) offMS: (id)sender { PTLL; XCtimeoffset(-4, 0); PTUL; } - (void) jackPlayPause: (id)sender { jackt_toggle(); } - (void) jackPlay: (id)sender { jackt_start(); } - (void) jackStop: (id)sender { jackt_stop(); } - (void) jackRewind: (id)sender { jackt_rewind(); } @end static void gl_make_current () { NSOpenGLContext* context = [osx_glview openGLContext]; [context makeCurrentContext]; } static void gl_clear_current () { [NSOpenGLContext clearCurrentContext]; } static void gl_swap_buffers () { glSwapAPPLE (); } void gl_newsrc () { pthread_mutex_lock (&osx_vbuf_lock); _newsrc = true; pthread_mutex_unlock (&osx_vbuf_lock); } static void gl_newsrc_sync () { free (osx_vbuf); osx_vbuf_size = video_buffer_size (); if (osx_vbuf_size > 0) { osx_vbuf = (uint8_t*)malloc (osx_vbuf_size * sizeof(uint8_t)); gl_reallocate_texture (movie_width, movie_height); } _newsrc = false; } static void makeAppMenu (void) { NSMenuItem *menuItem; id menubar = [[NSMenu new] autorelease]; id appMenuItem = [[NSMenuItem new] autorelease]; [menubar addItem:appMenuItem]; [NSApp setMainMenu:menubar]; /* Main Application Menu */ id appMenu = [[NSMenu new] autorelease]; NSString *appName = @"xjadeo"; NSString *title; #if 1 title = [@"About " stringByAppendingString:appName]; [appMenu addItemWithTitle:title action:@selector(showAbout:) keyEquivalent:@""]; [appMenu addItem:[NSMenuItem separatorItem]]; #endif title = [@"Hide " stringByAppendingString:appName]; [appMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"]; menuItem = (NSMenuItem *)[appMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"]; [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)]; [appMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""]; [appMenu addItem:[NSMenuItem separatorItem]]; title = [@"Quit " stringByAppendingString:appName]; [appMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"]; [appMenuItem setSubmenu:appMenu]; /* Create the file menu */ NSMenu *fileMenu; NSMenuItem *fileMenuItem; fileMenu = [[NSMenu alloc] initWithTitle:@"File"]; [fileMenu setAutoenablesItems:NO]; MenuDLG *filedlg = [[MenuDLG new] autorelease]; [filedlg setMenuId:1]; [fileMenu setDelegate:filedlg]; mFileOpen = [fileMenu addItemWithTitle:@"Open" action:@selector(openVideo:) keyEquivalent:@"o"]; mFileClose = [fileMenu addItemWithTitle:@"Close" action:@selector(closeVideo:) keyEquivalent:@"w"]; mFileRecent = [[NSMenuItem alloc] initWithTitle:@"Recent" action:nil keyEquivalent:@""]; [fileMenu addItem:[NSMenuItem separatorItem]]; [fileMenu addItem:mFileRecent]; fileMenuItem = [[NSMenuItem alloc] initWithTitle:@"File" action:nil keyEquivalent:@""]; [fileMenuItem setSubmenu:fileMenu]; [[NSApp mainMenu] addItem:fileMenuItem]; [fileMenu release]; [fileMenuItem release]; /* Create the sync menu */ NSMenu *syncMenu; NSMenuItem *syncMenuItem; syncMenu = [[NSMenu alloc] initWithTitle:@"Sync"]; [syncMenu setAutoenablesItems:NO]; MenuDLG *syncdlg = [[MenuDLG new] autorelease]; [syncdlg setMenuId:2]; [syncMenu setDelegate:syncdlg]; mSyncJACK = [syncMenu addItemWithTitle:@"JACK" action:@selector(syncJack:) keyEquivalent:@"j"]; #ifdef HAVE_LTC mSyncLTC = [syncMenu addItemWithTitle:@"LTC" action:@selector(syncLTC:) keyEquivalent:@"l"]; #endif #ifdef HAVE_JACKMIDI mSyncMTCJ = [syncMenu addItemWithTitle:@"MTC (jackmidi)" action:@selector(syncMTCJ:) keyEquivalent:@"m"]; #endif #ifdef HAVE_PORTMIDI mSyncMTCP = [syncMenu addItemWithTitle:@"MTC (portmidi)" action:@selector(syncMTCP:) keyEquivalent:@"p"]; #endif mSyncNone = [syncMenu addItemWithTitle:@"None" action:@selector(syncNone:) keyEquivalent:@""]; [mSyncNone setEnabled:NO]; [syncMenu addItem:[NSMenuItem separatorItem]]; NSMenu *jackMenu; jackMenu = [[NSMenu alloc] initWithTitle:@"JACK Transport"]; menuItem = [jackMenu addItemWithTitle:@"Play/Pause" action:@selector(jackPlayPause:) keyEquivalent:@" "]; [menuItem setKeyEquivalentModifierMask:0]; [jackMenu addItemWithTitle:@"Play" action:@selector(jackPlay:) keyEquivalent:@""]; [jackMenu addItemWithTitle:@"Stop" action:@selector(jackStop:) keyEquivalent:@""]; menuItem = [jackMenu addItemWithTitle:@"Rewind" action:@selector(jackRewind:) keyEquivalent:@"\010"]; [menuItem setKeyEquivalentModifierMask:0]; mJackTransport = [[NSMenuItem alloc] initWithTitle:@"JACK Transport" action:nil keyEquivalent:@""]; [mJackTransport setSubmenu:jackMenu]; [syncMenu addItem:mJackTransport]; [jackMenu release]; syncMenuItem = [[NSMenuItem alloc] initWithTitle:@"Sync" action:nil keyEquivalent:@""]; [syncMenuItem setSubmenu:syncMenu]; [[NSApp mainMenu] addItem:syncMenuItem]; [syncMenu release]; [syncMenuItem release]; /* Create the OSD menu */ NSMenu *osdMenu; NSMenuItem *osdMenuItem; osdMenu = [[NSMenu alloc] initWithTitle:@"OSD"]; [osdMenu setAutoenablesItems:NO]; MenuDLG *osddlg = [[MenuDLG new] autorelease]; [osddlg setMenuId:3]; [osdMenu setDelegate:osddlg]; mOsdTC = [osdMenu addItemWithTitle:@"External Timecode" action:@selector(osdTc:) keyEquivalent:@"s"]; [osdMenu addItem:[NSMenuItem separatorItem]]; mOsdVtcOff = [osdMenu addItemWithTitle:@"VTC Off" action:@selector(osdVtcNone:) keyEquivalent:@"v"]; mOsdVtcTc = [osdMenu addItemWithTitle:@"VTC Timecode" action:@selector(osdVtcTc:) keyEquivalent:@""]; mOsdVtcFn = [osdMenu addItemWithTitle:@"VTC Frame Number" action:@selector(osdVtcFn:) keyEquivalent:@""]; [osdMenu addItem:[NSMenuItem separatorItem]]; mOsdOffOff = [osdMenu addItemWithTitle:@"Offset Off" action:@selector(osdOffNone:) keyEquivalent:@"o"]; mOsdOffTc = [osdMenu addItemWithTitle:@"Offset Timecode" action:@selector(osdOffTc:) keyEquivalent:@""]; mOsdOffFn = [osdMenu addItemWithTitle:@"Offset Frame Number" action:@selector(osdOffFn:) keyEquivalent:@""]; [osdMenu addItem:[NSMenuItem separatorItem]]; mOsdTNfo = [osdMenu addItemWithTitle:@"Time Info" action:@selector(osdNfo:) keyEquivalent:@"i"]; mOsdGNfo = [osdMenu addItemWithTitle:@"Geometry" action:@selector(osdGeo:) keyEquivalent:@"g"]; [osdMenu addItem:[NSMenuItem separatorItem]]; mOsdBox = [osdMenu addItemWithTitle:@"Background" action:@selector(osdBox:) keyEquivalent:@"b"]; menuItem = [osdMenu addItemWithTitle:@"Swap Position" action:@selector(osdPos:) keyEquivalent:@"p"]; [menuItem setKeyEquivalentModifierMask:0]; [osdMenu addItem:[NSMenuItem separatorItem]]; menuItem = [osdMenu addItemWithTitle:@"Clear All" action:@selector(osdClear:) keyEquivalent:@"C"]; [menuItem setKeyEquivalentModifierMask:NSShiftKeyMask]; [menuItem setKeyEquivalentModifierMask:0]; [mOsdVtcOff setKeyEquivalentModifierMask:0]; [mOsdOffOff setKeyEquivalentModifierMask:0]; [mOsdGNfo setKeyEquivalentModifierMask:0]; [mOsdTNfo setKeyEquivalentModifierMask:0]; [mOsdGeo setKeyEquivalentModifierMask:0]; [mOsdBox setKeyEquivalentModifierMask:0]; [mOsdTC setKeyEquivalentModifierMask:0]; osdMenuItem = [[NSMenuItem alloc] initWithTitle:@"OSD" action:nil keyEquivalent:@""]; [osdMenuItem setSubmenu:osdMenu]; [[NSApp mainMenu] addItem:osdMenuItem]; [osdMenu release]; [osdMenuItem release]; /* Create the Display menu */ NSMenu *dpyMenu; NSMenuItem *dpyMenuItem; dpyMenu = [[NSMenu alloc] initWithTitle:@"Display"]; [dpyMenu setAutoenablesItems:NO]; MenuDLG *dpydlg = [[MenuDLG new] autorelease]; [dpydlg setMenuId:4]; [dpyMenu setDelegate:dpydlg]; [dpyMenu addItemWithTitle:@"50%" action:@selector(dpySize50:) keyEquivalent:@""]; menuItem = [dpyMenu addItemWithTitle:@"100%" action:@selector(dpySize100:) keyEquivalent:@"."]; [dpyMenu addItemWithTitle:@"150%" action:@selector(dpySize150:) keyEquivalent:@""]; [menuItem setKeyEquivalentModifierMask:0]; [dpyMenu addItem:[NSMenuItem separatorItem]]; menuItem = [dpyMenu addItemWithTitle:@"\u2013 20%" action:@selector(dpySizeDec:) keyEquivalent:@"<"]; [menuItem setKeyEquivalentModifierMask:NSShiftKeyMask]; menuItem = [dpyMenu addItemWithTitle:@"+20%" action:@selector(dpySizeInc:) keyEquivalent:@">"]; [menuItem setKeyEquivalentModifierMask:NSShiftKeyMask]; [dpyMenu addItem:[NSMenuItem separatorItem]]; menuItem = [dpyMenu addItemWithTitle:@"Reset Aspect" action:@selector(dpyAspect:) keyEquivalent:@","]; [menuItem setKeyEquivalentModifierMask:0]; mDpyLetterbox = [dpyMenu addItemWithTitle:@"Retain Aspect" action:@selector(dpyLetterbox:) keyEquivalent:@"l"]; [dpyMenu addItem:[NSMenuItem separatorItem]]; mDpyOnTop = [dpyMenu addItemWithTitle:@"Window On Top" action:@selector(dpyOnTop:) keyEquivalent:@"a"]; mDpyFullscreen = [dpyMenu addItemWithTitle:@"Fullscreen" action:@selector(dpyFullscreen:) keyEquivalent:@"f"]; [dpyMenu addItem:[NSMenuItem separatorItem]]; mDpyMouseCursor = [dpyMenu addItemWithTitle:@"Mouse Cursor" action:@selector(dpyMouseCursor:) keyEquivalent:@"m"]; [mDpyLetterbox setKeyEquivalentModifierMask:0]; [mDpyOnTop setKeyEquivalentModifierMask:0]; [mDpyFullscreen setKeyEquivalentModifierMask:0]; [mDpyMouseCursor setKeyEquivalentModifierMask:0]; dpyMenuItem = [[NSMenuItem alloc] initWithTitle:@"Display" action:nil keyEquivalent:@""]; [dpyMenuItem setSubmenu:dpyMenu]; [[NSApp mainMenu] addItem:dpyMenuItem]; [dpyMenu release]; [dpyMenuItem release]; /* Create the Offset menu */ NSMenu *offMenu; NSMenuItem *offMenuItem; offMenu = [[NSMenu alloc] initWithTitle:@"Offset"]; [offMenu setAutoenablesItems:NO]; menuItem = [offMenu addItemWithTitle:@"Reset" action:@selector(offZero:) keyEquivalent:@"\\"]; [menuItem setKeyEquivalentModifierMask:0]; menuItem = [offMenu addItemWithTitle:@"+1 Frame" action:@selector(offPF:) keyEquivalent:@"="]; [menuItem setKeyEquivalentModifierMask:0]; menuItem = [offMenu addItemWithTitle:@" \u20131 Frame" action:@selector(offMF:) keyEquivalent:@"-"]; [menuItem setKeyEquivalentModifierMask:0]; menuItem = [offMenu addItemWithTitle:@"+1 Second" action:@selector(offPS:) keyEquivalent:@"+"]; [menuItem setKeyEquivalentModifierMask:0]; menuItem = [offMenu addItemWithTitle:@" \u20131 Second" action:@selector(offMS:) keyEquivalent:@"_"]; [menuItem setKeyEquivalentModifierMask:0]; menuItem = [offMenu addItemWithTitle:@"+1 Minute" action:@selector(offPM:) keyEquivalent:@"{"]; [menuItem setKeyEquivalentModifierMask:0]; menuItem = [offMenu addItemWithTitle:@" \u20131 Minute" action:@selector(offMM:) keyEquivalent:@"}"]; [menuItem setKeyEquivalentModifierMask:0]; [offMenu addItemWithTitle:@"+1 Hour" action:@selector(offPH:) keyEquivalent:@""]; [offMenu addItemWithTitle:@" \u20131 Hour" action:@selector(offMH:) keyEquivalent:@""]; offMenuItem = [[NSMenuItem alloc] initWithTitle:@"Offset" action:nil keyEquivalent:@""]; [offMenuItem setSubmenu:offMenu]; [[NSApp mainMenu] addItem:offMenuItem]; [offMenu release]; [offMenuItem release]; /* Create the window menu */ NSMenu *windowMenu; NSMenuItem *windowMenuItem; windowMenu = [[NSMenu alloc] initWithTitle:@"Window"]; menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [windowMenu addItem:menuItem]; [menuItem release]; windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""]; [windowMenuItem setSubmenu:windowMenu]; [[NSApp mainMenu] addItem:windowMenuItem]; [NSApp setWindowsMenu:windowMenu]; [windowMenu release]; [windowMenuItem release]; } static void osx_close_window () { [NSApp removeWindowsItem:osx_window]; [osx_window setIsVisible:NO]; [osx_window close]; [osx_glview release]; [osx_window release]; osx_window = nil; } static int osx_open_window () { const char *title = "xjadeo"; NSString* titleString = [[NSString alloc] initWithBytes:title length:strlen(title) encoding:NSUTF8StringEncoding]; id window = [[XjadeoWindow new]retain]; if (window == nil) { return -1; } [window setTitle:titleString]; osx_glview = [XjadeoOpenGLView new]; if (!osx_glview) { [window release]; return -1; } osx_window = window; [window setContentView:osx_glview]; [NSApp activateIgnoringOtherApps:YES]; [window makeFirstResponder:osx_glview]; [window makeKeyAndOrderFront:window]; gl_make_current(); gl_init (); gl_resize (ffctv_width, ffctv_height); if (gl_reallocate_texture (movie_width, movie_height)) { osx_close_window (); return -1; } pthread_mutex_lock (&osx_vbuf_lock); gl_newsrc_sync (); pthread_mutex_unlock (&osx_vbuf_lock); [window setIsVisible:YES]; if (start_fullscreen) { gl_set_fullscreen (1); } if (start_ontop) { gl_set_ontop (1); } return 0; } static void osx_post_event (int data1, int data2) { NSEvent* event = [NSEvent otherEventWithType:NSApplicationDefined location:NSMakePoint (0,0) modifierFlags:0 timestamp:0.0 windowNumber:0 context:nil subtype:0 data1:data1 data2:data2]; [NSApp postEvent:event atStart:NO]; } int gl_open_window () { while (osxgui_status == -1000) { usleep (10000); } if (!pool) pool = [[NSAutoreleasePool alloc] init]; if (osxgui_status > 0) return 0; // already open osx_post_event (1, 0); while (osxgui_status == 0) { usleep (10000); } return osxgui_status > 0 ? 0 : -1; } void osx_shutdown () { if (pool && osxgui_status != -1000) { osx_post_event (0, 0); } if (pool) { [pool release]; pool = NULL; } } void gl_close_window () { if (osxgui_status <= 0) { return; } osx_post_event (2, 0); while (osxgui_status) { usleep (10000); } free (osx_vbuf); osx_vbuf = NULL; osx_vbuf_size = 0; } void gl_handle_events () { pthread_mutex_unlock (&osxgui_sync); // XXX TODO first-time lock while (sync_sem) { sched_yield (); } pthread_mutex_lock (&osxgui_sync); osx_post_event (0, 0); // TODO only on remote msg or similar event } void osx_main () { [NSAutoreleasePool new]; [NSApplication sharedApplication]; [NSApp setDelegate:[NSApplication sharedApplication]]; makeAppMenu (); [NSApp finishLaunching]; osxgui_status = 0; while (loop_flag) { NSEvent * event; do { event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantFuture] inMode:NSDefaultRunLoopMode dequeue:YES]; if (event.type == NSApplicationDefined) { switch(event.data1) { case 1: if (osxgui_status == 0) { if (osx_open_window ()) { osxgui_status = -1; } else { osxgui_status = 1; } } break; case 2: if (osxgui_status > 0) { osx_close_window (); osxgui_status = 0; } break; case 3: pthread_mutex_lock (&osx_vbuf_lock); if (_newsrc) { gl_newsrc_sync(); } force_redraw = 1; xjglExpose (osx_vbuf); pthread_mutex_unlock (&osx_vbuf_lock); [osx_glview setNeedsDisplay:YES]; break; case 4: [osx_glview setNeedsDisplay:YES]; break; case 5: if (_gl_ontop) { [osx_window setLevel:NSFloatingWindowLevel + 1]; } else { [osx_window setLevel:NSNormalWindowLevel]; } break; case 6: if (_gl_fullscreen) { [osx_glview setFullScreen:YES]; } else { [osx_glview setFullScreen:NO]; } if (osx_window) { [osx_window makeKeyAndOrderFront:osx_window]; [osx_window makeFirstResponder:osx_glview]; } break; case 7: { [osx_window setContentSize:NSMakeSize (event.data2 & 0xffff, event.data2 >> 16) ]; [osx_glview reshape]; } break; case 8: { NSRect frame = [osx_window frame]; frame.origin.x = event.data2 & 0xffff; frame.origin.y = event.data2 >> 16; [osx_window setFrame:frame display:YES animate:YES]; } break; default: break; } break; } [NSApp sendEvent:event]; } while (event != nil && loop_flag); // TODO: use a timer, and callbacks, // currently triggered by osx_post_event() from gl_handle_events() static int periodic_sync = 5; if (--periodic_sync == 0) { periodic_sync = framerate * 50; UpdateSystemActivity (1 /*UsrActivity*/); // TODO use a one time call // IOPMAssertionCreateWithName() NoDisplaySleepAssertion etc. } } if (osxgui_status > 0) { osx_close_window (); osxgui_status = 0; } [NSAutoreleasePool release]; osxgui_status = -1000; } void gl_render (uint8_t *buffer) { if (!osx_vbuf) return; pthread_mutex_lock (&osx_vbuf_lock); if (_newsrc) { osx_post_event (1, 0); } else { memcpy (osx_vbuf, buffer, osx_vbuf_size * sizeof(uint8_t)); } pthread_mutex_unlock (&osx_vbuf_lock); osx_post_event (4, 0); } void gl_resize (unsigned int x, unsigned int y) { int xy = (y & 0xffff) << 16 | (x & 0xffff); osx_post_event (7, xy); } void gl_get_window_size (unsigned int *w, unsigned int *h) { *w = _gl_width; *h = _gl_height; } void gl_position (int x, int y) { int xy = (y & 0xffff) << 16 | (x & 0xffff); osx_post_event (8, xy); } void gl_get_window_pos (int *x, int *y) { NSRect frame = [osx_window frame]; *x = frame.origin.x; *y = frame.origin.y; } void gl_set_ontop (int action) { if (action==2) _gl_ontop ^= 1; else _gl_ontop = action ? 1 : 0; osx_post_event (5, 0); } void gl_set_fullscreen (int action) { // TODO check if we need performSelectorOnMainThread if (action==2) _gl_fullscreen^=1; else _gl_fullscreen = action ? 1 : 0; osx_post_event (6, 0); } void gl_mousepointer (int action) { if (action==2) hide_mouse^=1; else hide_mouse = action ? 1 : 0; if (hide_mouse) { CGDisplayHideCursor (kCGDirectMainDisplay); } else { CGDisplayShowCursor (kCGDirectMainDisplay); } } int gl_get_ontop () { return _gl_ontop; } int gl_get_fullscreen () { return _gl_fullscreen; } #endif xjadeo-0.8.10/src/xjadeo/ffcompat.h0000644000175000017500000001006012624332774014013 00000000000000/* ffmpeg compatibility wrappers * * Copyright 2012-2014 Robin Gareus * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FFCOMPAT_H #define FFCOMPAT_H #include #include #include #ifndef AVCODEC_MAX_AUDIO_FRAME_SIZE #define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 #endif #if LIBAVUTIL_VERSION_INT < AV_VERSION_INT(50, 0, 0) #define AVMEDIA_TYPE_VIDEO CODEC_TYPE_VIDEO #define AVMEDIA_TYPE_DATA CODEC_TYPE_DATA #define AVMEDIA_TYPE_AUDIO CODEC_TYPE_AUDIO #endif #if LIBAVUTIL_VERSION_INT < AV_VERSION_INT(55, 7, 0) # ifndef AVUTIL_OLD_PIX_FMTS_H # define AV_PIX_FMT_ARGB PIX_FMT_ARGB # define AV_PIX_FMT_BGR24 PIX_FMT_BGR24 # define AV_PIX_FMT_BGRA PIX_FMT_BGRA # define AV_PIX_FMT_NONE PIX_FMT_NONE # define AV_PIX_FMT_RGB24 PIX_FMT_RGB24 # define AV_PIX_FMT_RGBA PIX_FMT_RGBA # define AV_PIX_FMT_UYVY422 PIX_FMT_UYVY422 # define AV_PIX_FMT_YUV420P PIX_FMT_YUV420P # define AV_PIX_FMT_YUV440P PIX_FMT_YUV440P # define AV_PIX_FMT_YUYV422 PIX_FMT_YUYV422 # endif #endif #if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 2, 0) static inline int avformat_open_input(AVFormatContext **ps, const char *filename, void *fmt, void **options) { return av_open_input_file(ps, filename, NULL, 0, NULL); } #endif /* avformat < 53.2.0 */ #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(53, 5, 0) static inline AVCodecContext * avcodec_alloc_context3(AVCodec *codec __attribute__((unused))) { return avcodec_alloc_context(); } static inline AVStream * avformat_new_stream(AVFormatContext *s, AVCodec *c) { return av_new_stream(s,0); } static inline int avcodec_get_context_defaults3(AVCodecContext *s, AVCodec *codec) { avcodec_get_context_defaults(s); return 0; } #endif /* avcodec < 53.5.0 */ #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(53, 7, 0) static inline int avcodec_open2(AVCodecContext *avctx, AVCodec *codec, void **options __attribute__((unused))) { return avcodec_open(avctx, codec); } #endif /* avcodec <= 53.7.0 */ #if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 2, 0) static inline int avformat_find_stream_info(AVFormatContext *ic, void **options) { return av_find_stream_info(ic); } #endif #if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 5, 0) static inline void avformat_close_input(AVFormatContext **s) { av_close_input_file(*s); } #endif /* avformat < 53.5.0 */ #if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(54, 92, 100) // since 7ecc2d40 static inline AVFrame *av_frame_alloc() { return avcodec_alloc_frame(); } #endif #endif /* FFCOMPAT_H */ xjadeo-0.8.10/src/xjadeo/xjremote.c0000644000175000017500000005112713775351010014045 00000000000000/* xjremote - remote control master * * Copyright (C) 2006,2014 Robin Gareus * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #define EXIT_FAILURE 1 /* we'll use mq_timedreceive */ #define _XOPEN_SOURCE 600 #include #include #include #include #include #include #include #include #ifdef HAVE_CONFIG_H # include #endif #include "paths.h" static void usage (int status); static void printversion (void); static char *program_name; static int want_quiet = 0; /*< --quiet, --silent */ static int want_verbose = 0; /*< --verbose */ static int want_ping = 1; /*< --noping */ static int want_unlink = 0; /*< --1:unlink mqueues on startup 2: and exit */ static int want_nofork = 0; /*< --nofork ; donT launch xjadeo */ static char *qid = NULL; /*< -I - name of the MQ */ static int want_create = 0; /*< unused - only xjadeo create queues */ static int no_initial_sync =0; /* --nosyncsource, -J */ static int xjr_mute = 1; /*< 1: mute all but '8xx' messages * 2: dont display any replies * 0: terminal mode */ static struct option const long_options[] = { {"nofork", no_argument, 0, 'f'}, {"help", no_argument, 0, 'h'}, {"id", required_argument, 0, 'I'}, {"no-initial-sync", no_argument, 0, 'J'}, {"no-ping", required_argument, 0, 'P'}, {"quiet", no_argument, 0, 'q'}, {"silent", no_argument, 0, 'q'}, {"unlinkonly", no_argument, 0, 'U'}, {"unlink", no_argument, 0, 'u'}, {"version", no_argument, 0, 'V'}, {"verbose", no_argument, 0, 'v'}, {NULL, 0, NULL, 0} }; static int decode_switches (int argc, char **argv) { int c; while ((c = getopt_long (argc, argv, "f" /* nofork */ "h" /* help */ "I:" /* queue id */ "J" /* no jack / no-initial sync */ "P" /* noping */ "Q" /* remote - arg for xjadeo compatibilty */ "q" /* quiet or silent */ "R" /* remote - arg for xjadeo compatibilty */ "U" /* unlinkonly */ "u" /* unlink */ "V" /* version */ "v" /* verbose */ "W:" /* remote - arg for xjadeo compatibilty */ , long_options, (int *) 0)) != EOF) { switch (c) { case 'f': want_nofork = 1; break; case 'h': usage (0); break; case 'I': if (qid) free(qid); qid = strdup(optarg); break; case 'J': no_initial_sync = 1; break; case 'P': want_ping = 0; break; case 'Q': break; case 'q': want_quiet = 1; want_verbose = 0; break; case 'R': break; case 'U': want_unlink = 2; break; case 'u': want_unlink = 1; break; case 'V': printversion(); exit(0); break; case 'v': want_verbose = 1; break; case 'W': break; default: usage (EXIT_FAILURE); break; } } /* while switch */ return optind; } static void usage (int status) { printf ("xjremote - jack video monitor remote control utility\n\n"); printf ("Usage: xjremote[ OPTIONS ]\n\n"); printf ("\n\n" "Xjremote opens a connection to a running instance of xjadeo or launches a new\n" "instance ready for remote-control.\n" "\n" "Interaction with xjremote takes place via standard input/output mechanism,\n" "while xjremote itself communicate with xjadeo out-of-band using platform\n" "specific operations (e.g. POSIX message queues, IPC or OSC).\n" "\n" /*-------------------------------------------------------------------------------|" */ "Options:\n" " -h, --help display this help and exit\n" " -V, --version print version information and exit\n" " -f, --nofork connect only to already running instances and\n" " do NOT launch a new xjadeo if none found.\n" " -P, --noping do not check if xjadeo is alive. just connect.\n" " -q, --quiet, --silent inhibit usual output\n" " -I, --id specify queue id.\n" " -J, --no-initial-sync passed on to xjadeo as option.\n" " -u, --unlink remove existing queues\n" " -U, --unlinkonly remove queues and exit\n" " active connections will not be affected by an\n" " unlink event.\n" "\n" "xjemote also accepts -R, -Q, and -W options to be compatible with xjadeo\n" "as a drop-in-replacement. Those options are ignored by xjremote.\n" "\n" "Report bugs to Robin Gareus \n" "Website: \n" "\n"); exit (status); } static void printversion (void) { printf ("xjremote version %s\n\n", VERSION); #ifdef SUBVERSION if (strlen(SUBVERSION)>0 && strcmp(SUBVERSION, "exported")) { printf (" built from: scm-%s\n", SUBVERSION); } #endif #ifdef HAVE_MQ printf (" configuration: [ POSIX-MQueue ]\n"); #elif HAVE_IPCMSG printf (" configuration: [ IPC-MSG ]\n"); #else printf (" configuration: [ stdio ]\n"); #endif printf ( "Copyright (C) GPL 2006-2021 Robin Gareus \n" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"); } /* check if file is executable */ static int testexec (char *filename) { struct stat s; if (!filename) return (0); int result= stat(filename, &s); if (result != 0) return 0; /* stat() failed */ #ifdef PLATFORM_WINDOWS return(1); #else if (!S_ISREG(s.st_mode) && !S_ISLNK(s.st_mode)) return 0; /* is not a regular file */ if (s.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)) return 1; /* is executable */ return(0); #endif } // flags: bit0 (1): close stdio // bit1 (2): fork xjadeo -R (otherwise '-Q' if bit2 is unset) // bit2 (4): fork xjadeo -W queuefile void execjadeo(int flags, char *queuefile) { char *xjadeo = getenv("XJADEO"); if (!testexec(xjadeo)) { printf("# xjadeo executable not found in : %s\n",xjadeo?xjadeo:"(?)"); xjadeo=NULL; } if (!xjadeo) xjadeo = BINDIR "xjadeo"; if (!testexec(xjadeo)) { printf("# xjadeo executable not found in : %s\n",xjadeo?xjadeo:"(?)"); xjadeo=NULL; } if (!xjadeo) xjadeo = "/Applications/Jadeo.app/Contents/MacOS/Jadeo"; // OSX if (!testexec(xjadeo)) { printf("# xjadeo executable not found in : %s\n",xjadeo?xjadeo:"(?)"); xjadeo=NULL; } if (!xjadeo) xjadeo = "./xjadeo"; // XXX DEVEL svn:trunk/src/xjadeo if (!testexec(xjadeo)) { printf("# xjadeo executable not found in : %s\n",xjadeo?xjadeo:"(?)"); xjadeo=NULL; } if (!xjadeo) xjadeo = "src/xjadeo/xjadeo"; // XXX DEVEL svn:trunk/ if (!testexec(xjadeo)) { printf("# xjadeo executable not found in : %s\n",xjadeo?xjadeo:"(?)"); xjadeo=NULL; } if (!xjadeo) xjadeo = "../xjadeo/xjadeo"; // XXX DEVEL svn:trunk/src/qt-qui if (!testexec(xjadeo)) { printf("# xjadeo executable not found in : %s\n",xjadeo?xjadeo:"(?)"); xjadeo=NULL; } if (!xjadeo) xjadeo = "./bin/xjadeo"; // XXX ~/ -> use env("HOME") if (!testexec(xjadeo)) { printf("# xjadeo executable not found in : %s\n",xjadeo?xjadeo:"(?)"); xjadeo=NULL; } if (xjadeo) { printf("# executing: %s\n",xjadeo); if (flags&1) { close(0); dup2(open("/dev/null", 0), 1); dup2(open("/dev/null", 0), 2); } if (no_initial_sync) { if (flags&4) execl(xjadeo,"xjadeo", "-J", "-q", "-W", queuefile, NULL); else if (flags&2) execl(xjadeo,"xjadeo", "-J", "-R", NULL); else execl(xjadeo,"xjadeo", "-J", "-Q", "-q", NULL); } else { if (flags&4) execl(xjadeo,"xjadeo", "-q", "-W", queuefile, NULL); else if (flags&2) execl(xjadeo,"xjadeo", "-R", NULL); else execl(xjadeo,"xjadeo", "-Q", "-q", NULL); } } else { printf("# no xjadeo executable found. try to set the XJADEO env. variable\n"); } } #ifdef PLATFORM_WINDOWS #else void forkjadeo (void) { // TODO create remote-mqID and set pass it to xjadeo. // check: is there a way to list mq's apart from mounting /dev/mqueue ?? printf("# launching a new xjadeo instance for you..\n"); pid_t pid = fork(); switch (pid) { case -1: fprintf(stderr,"fork failed\n"); exit(-1); case 0: execjadeo(1, NULL); fprintf(stdout,"# exec failed.\n"); exit(0); default: fprintf(stdout,"# connecting to xjadeo...\n"); } } #endif //-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# #include #include #include #ifdef PLATFORM_WINDOWS #include #else #include #endif #include #define REMOTE_RX fileno(stdin) int xjselect (int sec) { #ifdef PLATFORM_WINDOWS DWORD bytesAvail = 0; HANDLE h = GetStdHandle(STD_INPUT_HANDLE); PeekNamedPipe(h, 0, 0, 0, &bytesAvail, 0); if (bytesAvail > 0) return (1); return(0); #else fd_set fd; int max_fd=0; struct timeval tv = { 0, 0 }; tv.tv_sec = sec; tv.tv_usec = 0; FD_ZERO(&fd); FD_SET(REMOTE_RX,&fd); max_fd=(REMOTE_RX+1); if (select(max_fd, &fd, NULL, NULL, &tv)) return(1); return(0); #endif } //-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# #ifdef HAVE_MQ #include #include #include extern int errno; /* xjadeo mq message X-change format * * currently this acts a dumb stdio wrapper * with a maxmsg of 255 bytes. * * sooner or later remote.c commands will be parsed here * (readline) and xjadeo will drop the text-remote-ctl in favor of * fast message queues.. * */ typedef struct { int cmd; char m[MQLEN]; } mqmsg; // globals shared between threads int loop_flag = 1; int ping_st =0; int pong_st =0; struct timeval ping_time,pong_time; #define REMOTE_TX fileno(stdout) void *read_thread (void *d) { mqd_t mqfd; char *msg_buffer; int timeout_cnt = 0; struct mq_attr mqat; char qname[64]; snprintf(qname,64,"/xjadeo-reply%s%s", d?"-":"", d?(char*)d:""); printf("# STARTING reply receiver: mqID=%s\n",d?qname+13:"[default]"); mqfd = mq_open(qname, O_RDONLY | O_CREAT, S_IRWXU , NULL); if (mqfd == -1) { perror("mq_open failure:"); return(NULL); }; if (mq_getattr(mqfd, &mqat) == -1) { perror("mq_getattr error:"); return(NULL); }; msg_buffer = malloc(mqat.mq_msgsize); while (loop_flag) { int printit; struct timeval tv; struct timespec to; gettimeofday(&tv,NULL); to.tv_sec=tv.tv_sec + 2 ; to.tv_nsec= (long) tv.tv_usec * 1000L; #if 0 if (timeout_cnt == 25 ) { ping(.); } else if (timeout_cnt > 30 ) { timeout=0; fprintf(stdout,"# no live signs from xjadeo.\n"); } #endif int num_bytes_received = mq_timedreceive(mqfd, msg_buffer, mqat.mq_msgsize, 0, &to); if (num_bytes_received == -1 && errno==ETIMEDOUT) { timeout_cnt++; continue; } if (num_bytes_received == -1) { perror("mq_receive failure on mqfd"); #if 0 usleep(40000); continue; #else loop_flag = 0; break; #endif } if (num_bytes_received != sizeof(mqmsg) ) { if (!want_quiet) // display anyway ? warning ?? fprintf(stderr,"MQ: received garbage message\n"); continue; } timeout_cnt=0; printit = !xjr_mute; mqmsg *mymsg = (mqmsg*) &msg_buffer[0]; if ( xjr_mute==0 && mymsg->cmd == 100 && !strncmp(mymsg->m,"quit.",5)) { if (want_verbose) printf("# xjadeo terminated. we will follow.\n"); loop_flag=0; } else if ( mymsg->cmd == 100 && !strncmp(mymsg->m,"pong.",5) && ping_st && !pong_st) { printit=0; pong_st=1; gettimeofday(&pong_time,NULL); } else if ( mymsg->cmd/100 == 8 && xjr_mute<2) { printit=1; } if (printit) { #if 1 char tmp[8+MQLEN]; snprintf (tmp,(MQLEN+8),"@%d %s", mymsg->cmd, mymsg->m); // newline is part of data payload. (void) write(REMOTE_TX,tmp,strlen(tmp)); #else printf ("@%d %s", mymsg->cmd, mymsg->m); // newline is part of data payload. fflush(stdout); #endif } } if (want_verbose) printf ("# SHUTTING DOWN receiver thread.\n"); mq_close(mqfd); free(msg_buffer); return (NULL); } void unlink_queues (char *queueid) { char qname[64]; if (!want_quiet) printf("# unlinking queue mqID=%s\n",queueid?qname+15:"[default]"); snprintf(qname,64,"/xjadeo-request%s%s", queueid?"-":"", queueid?queueid:""); mq_unlink(qname); snprintf(qname,64,"/xjadeo-reply%s%s", queueid?"-":"", queueid?queueid:""); mq_unlink(qname); } void ping (mqd_t mqfd_tx) { if (ping_st) return; ping_st=1; pong_st=0; gettimeofday(&ping_time,NULL); // send 'ping' int num_bytes_to_send; int priority_of_msg = 20; mqmsg mymsg = {1, "ping\n" }; num_bytes_to_send = sizeof(mqmsg); if(mq_send(mqfd_tx, (char*) &mymsg, num_bytes_to_send, priority_of_msg) == -1) { perror("mq_send failure on mqfd_tx"); } } void dothework (mqd_t mqfd_tx) { int num_bytes_to_send; int priority_of_msg = 20; mqmsg mymsg = {1, "" }; num_bytes_to_send = sizeof(mqmsg); if (!want_quiet) { printf("# COMMAND INTERFACE ACTIVATED: use 'exit' or EOF to terminate this session.\n"); printf("# use 'quit' to terminate xjadeo and disconnect.\n"); printf("# type 'help' to query xjadeo commands.\n"); } char buf[MQLEN]; int offset =0; while (loop_flag) { int rx; char *end; if (!xjselect(1)) continue; if ((rx = read(REMOTE_RX, buf + offset, (MQLEN-1)-offset)) > 0) { offset += rx; buf[offset] = '\0'; } else if (rx < 0) { continue; } else { loop_flag=0; break; } while ((end = strchr(buf, '\n'))) { int retry = 10; *(end) = '\0'; if (!strncmp(buf,"exit",4)) { loop_flag=0; break; } snprintf(mymsg.m,MQLEN,"%s\n",buf); //strncpy(mymsg.m,buf,MQLEN-1); // add '\n' mymsg.m[MQLEN-1]=0; while (--retry && mq_send(mqfd_tx, (char*) &mymsg, num_bytes_to_send, priority_of_msg) == -1) { usleep(50000); } if (!retry) { perror("mq_send failure on mqfd_tx"); // ping ? } offset-=((++end)-buf); if (offset) memmove(buf,end,offset); } } } int main (int argc, char **argv) { int i; pthread_t xet; mqd_t mqfd_tx; char qname[64]; int did_fork = 0; int timeout; program_name = argv[0]; i = decode_switches (argc, argv); if ((i)!= argc) usage (EXIT_FAILURE); if (want_unlink) unlink_queues(qid); if (want_unlink&2) exit(0); restart: /* set up outgoing connection first */ loop_flag=1; timeout = 10; snprintf(qname,64,"/xjadeo-request%s%s", qid?"-":"", qid?qid:""); if (want_verbose) printf("# initializing mqID=%s\n",qid?qname+15:"[default]"); do { mqfd_tx = mq_open(qname, O_WRONLY | O_NONBLOCK | (want_create?O_CREAT|O_EXCL:0), S_IRWXU , NULL); if (mqfd_tx < 0) { if ( errno != ENOENT ) break; if (!want_quiet) printf("# could not connect to xjadeo. still trying.\n"); if (want_nofork) { if (!want_quiet) printf("# giving up. There's no running instance of xjadeo with MQ enabled.\n"); exit (0); } if (!did_fork) { forkjadeo(); did_fork=1;} sleep (1); } } while (mqfd_tx < 0 && timeout--); if (mqfd_tx == -1) { perror("mq_open failure."); exit(0); }; /* create incoming connection + handler */ pthread_create(&xet, NULL, read_thread, NULL); /* ping xjadeo - alive check */ if (want_ping) { if (!want_quiet) fprintf(stdout, "# pinging xjadeo...\n"); // TODO flush the queue before pinging ping(mqfd_tx); timeout=50; // 5 sec while(!pong_st && --timeout) { usleep(100000); } if (!timeout) { if (!want_quiet) fprintf(stdout, "# WARNING: queues exist, but xjadeo does not respond\n"); if (want_verbose) fprintf(stdout, "# deleting stale message queues.\n"); #if 1 if (!did_fork) { mq_close(mqfd_tx); loop_flag=0; // stop read thread. pthread_join(xet,NULL); ping_st=0;pong_st=0; unlink_queues(qid); goto restart; } else #endif unlink_queues(qid); if (!want_quiet) fprintf(stdout, "# please try again.\n"); exit(1); } } xjr_mute = 0; dothework(mqfd_tx); /* time to go */ loop_flag=0; // stop read thread. if (!want_quiet) printf("bye bye.\n"); pthread_join(xet,NULL); if (mq_close(mqfd_tx) == -1) perror("mq_close failure on mqfd_tx"); if (qid) free(qid); return (0); } #elif HAVE_IPCMSG #include #include #include #include #include struct msgbuf1 { long mtype; char mtext[BUFSIZ]; }; int loop_flag = 1; int unlink_queue_on_exit = 1; void *rx_thread (void *arg) { int i, rv, msqid; msqid = *((int*)arg); struct msgbuf1 rxbuf; while (loop_flag) { rv = msgrcv(msqid, (void*) &rxbuf, BUFSIZ, 1, 0); if(rv == -1) { fprintf(stderr, "\nCTL: Msgrcv failed., Error = %d: %s\n", errno, strerror(errno)); pthread_exit(0); return 0; } for(i = 0; i 0) { offset += rx; buf[offset] = '\0'; } else if (rx < 0) { continue; } else { if (loop_flag) unlink_queue_on_exit=0; loop_flag=0; break; } while ((end = strchr(buf, '\n'))) { int retry = 10; *(end) = '\0'; if (!strncmp(buf,"exit",4)) { unlink_queue_on_exit=0; loop_flag=0; break; } snprintf(txbuf.mtext,BUFSIZ,"%s\n",buf); //strncpy(txbuf.mtext,buf,BUFSIZ-1); // add '\n' and '\0' txbuf.mtext[BUFSIZ-1]=0; while (--retry && msgsnd(msqid, (const void*) &txbuf, strlen(txbuf.mtext), IPC_NOWAIT) == -1) { usleep(50000); } if (!retry) { fprintf(stderr, "CTL: msgsnd failed. Error = %d: %s\n", errno, strerror(errno)); } offset-=((++end)-buf); if (offset) memmove(buf,end,offset); } } } int main (int argc, char **argv) { int msqrx, msqtx; pthread_t xet; char *queuename = NULL; program_name = argv[0]; int i = decode_switches (argc, argv); if ((i)!= argc) usage (EXIT_FAILURE); if (qid) queuename = strdup(qid); else queuename = tempnam("/tmp", "xjremote"); if (want_unlink) unlink (queuename); if (want_unlink&2) exit(0); int fd = open (queuename, O_WRONLY | O_CREAT | O_NONBLOCK | O_NOCTTY, S_IRUSR | S_IWUSR); if (fd == -1) { fprintf(stderr, "\nCan not create queue. error = %d: %s\n", errno, strerror(errno)); return -1; } printf("@ IPC Queue name: %s\n", queuename); if (!want_nofork) { if (!want_quiet) printf("# launching a new xjadeo instance for you..\n"); pid_t pid = fork(); if (pid == -1) return -2; else if (pid == 0) { execjadeo(5, queuename); fprintf(stderr,"CTL: EXEC failed\n"); exit (1); } } key_t key_rx = ftok (queuename, 'a'); key_t key_tx = ftok (queuename, 'b'); msqrx = msgget(key_rx, IPC_CREAT| S_IRUSR | S_IWUSR); msqtx = msgget(key_tx, IPC_CREAT| S_IRUSR | S_IWUSR); if(msqrx == -1 || msqtx == -1) { printf("CTL: getKey failed. Error = %d: %s\n", errno, strerror(errno)); return -1; } // TODO: try ping ?! loop_flag=1; pthread_create(&xet, NULL, rx_thread, (void*) &msqrx); if (!want_quiet) { printf("# COMMAND INTERFACE ACTIVATED: use 'exit' or EOF to terminate this session.\n"); printf("# use 'quit' to terminate xjadeo and disconnect.\n"); printf("# type 'help' to query xjadeo commands.\n"); } tx_loop(msqtx); loop_flag=0; // stop read thread. if (!want_quiet) printf("bye bye.\n"); pthread_cancel(xet); pthread_join(xet,NULL); if (unlink_queue_on_exit) { msgctl(msqtx, IPC_RMID, NULL); msgctl(msqrx, IPC_RMID, NULL); unlink (queuename); } else if (!want_quiet) printf("# keeping IPC queue: '%s'\n# resume with %s -f -I %s\n", queuename, program_name, queuename); free(queuename); if (qid) free(qid); return 0; } #else int main(int argc, char **argv) { program_name = argv[0]; decode_switches (argc, argv); printf("# This xjadeo was compiled without POSIX-mqueue and IPC messages.\n"); if (want_nofork) exit (0); printf("# -> stdio remote terminal.\n"); execjadeo(2, NULL); exit(1); } #endif xjadeo-0.8.10/src/xjadeo/display.h0000644000175000017500000001553012620454615013663 00000000000000/* xjadeo - video output abstraction and common display functions */ #ifndef XJADEO_DISPLAY_H extern int movie_width, movie_height; extern int ffctv_width, ffctv_height; extern float movie_aspect; extern int loop_flag, loop_run; extern uint8_t *buffer; extern int want_quiet; extern int want_debug; extern int want_verbose; extern int start_ontop; extern int start_fullscreen; extern int want_letterbox; extern int hide_mouse; extern int remote_en; extern int force_redraw; extern int interaction_override; extern char OSD_fontfile[1024]; extern char OSD_text[128]; extern char OSD_frame[48]; extern char OSD_smpte[20]; extern char OSD_msg[128]; extern char OSD_nfo_tme[5][48]; extern char OSD_nfo_geo[5][48]; extern int OSD_mode; extern int OSD_fx, OSD_fy; extern int OSD_sx, OSD_sy; extern int OSD_tx, OSD_ty; extern uint8_t osd_seeking; #define PB_H (20) #define PB_X (10) #define BAR_Y ((OSD_mode & OSD_SMPTE && OSD_sy > 80) || (OSD_mode & (OSD_FRAME | OSD_VTC) && OSD_fy > 80) ? .89 : .95) #define OSD_MIN_NFO_HEIGHT (160) /* prototypes in display.c */ void stride_memcpy(void * dst, const void * src, int width, int height, int dstStride, int srcStride); void rgb2argb (uint8_t *rgbabuffer, uint8_t *rgbbuffer, int width, int height); void rgb2abgr (uint8_t *rgbabuffer, uint8_t *rgbbuffer, int width, int height); typedef struct { int render_fmt; // the format ffmpeg should write to the shared buffer int supported; // 1: format compiled in -- 0: not supported const char *name; // void (*render)(uint8_t *mybuffer); int (*open)(void); void (*close)(void); void (*eventhandler)(void); void (*newsrc)(void); void (*resize)(unsigned int x, unsigned int y); void (*getsize)(unsigned int *x, unsigned int *y); void (*position)(int x, int y); void (*getpos)(int *x, int *y); void (*fullscreen)(int action); void (*ontop)(int action); void (*mousepointer)(int action); int (*getfullscreen)(void); int (*getontop)(void); void (*letterbox_change)(void); } vidout; /******************************************************************************* * SDL */ #ifdef HAVE_SDL #include #include #define SUP_SDL 1 void get_window_pos_sdl (int *rx, int *ry); int sdl_get_fullscreen (); void sdl_toggle_fullscreen(int action); void mousecursor_sdl(int action); void sdl_set_ontop (int action); int sdl_get_ontop (); void close_window_sdl(void); int open_window_sdl (void); void resize_sdl (unsigned int x, unsigned int y) ; void getsize_sdl (unsigned int *x, unsigned int *y); void position_sdl(int x, int y); void render_sdl (uint8_t *mybuffer); void newsrc_sdl (void) ; void handle_X_events_sdl (void) ; void sdl_letterbox_change (void); #else #define SUP_SDL 0 #endif /******************************************************************************* * Shared X11 functions */ #if (defined HAVE_LIBXV || defined HAVE_IMLIB2) void xj_set_fullscreen (int action); void xj_mousepointer (int action); void xj_set_ontop (int action); void xj_position (int x, int y); void xj_resize (unsigned int x, unsigned int y); void xj_get_window_size (unsigned int *my_Width, unsigned int *my_Height); void xj_get_window_pos (int *x, int *y); int xj_get_ontop (); int xj_get_fullscreen (); void xj_letterbox(); int xj_get_eq(char *prop, int *value); #endif #if (defined HAVE_LIBXV || defined HAVE_IMLIB2 || (defined HAVE_GL && !defined PLATFORM_WINDOWS && !defined PLATFORM_OSX)) #ifdef DND #include #include void init_dnd (Display *dpy, Window win); void disable_dnd (Display *dpy, Window win); int handle_dnd_event (Display *dpy, Window win, XEvent *event); #endif // DND #ifdef XDLG #include int show_x_dialog(Display *dpy, Window parent, int x, int y); void close_x_dialog(Display *dpy); int handle_xdlg_event (Display *dpy, XEvent *event); #endif #ifdef XFIB int x_fib_show (Display *dpy, Window parent, int x, int y); void x_fib_close (Display *dpy); int x_fib_handle_events (Display *dpy, XEvent *event); int x_fib_status (); char *x_fib_filename (); int x_fib_cfg_filter_callback (int (*cb)(const char*)); int fib_filter_movie_filename (const char *name); #endif #endif /******************************************************************************* * XV !!! */ #if HAVE_LIBXV # include # include # include # include # include # include # include # include # define SUP_LIBXV 1 #else # define SUP_LIBXV 0 #endif /* HAVE_LIBXV */ void get_window_size_xv (unsigned int *my_Width, unsigned int *my_Height); void get_window_pos_xv (int *x, int *y); void resize_xv (unsigned int x, unsigned int y); void position_xv (int x, int y); void render_xv (uint8_t *mybuffer); void handle_X_events_xv (void); void newsrc_xv (void); int open_window_xv (void); void close_window_xv(void); /******************************************************************************* * * X11 / ImLib2 */ #if HAVE_IMLIB2 # include # include # include # include # include # define SUP_IMLIB2 1 #else # define SUP_IMLIB2 0 #endif void get_window_size_imlib2 (unsigned int *my_Width, unsigned int *my_Height); void get_window_pos_imlib2 (int *x, int *y); int open_window_imlib2 (void); void close_window_imlib2(void); void render_imlib2 (uint8_t *mybuffer); void newsrc_imlib2 (void) ; void handle_X_events_imlib2 (void); void resize_imlib2 (unsigned int x, unsigned int y); void position_imlib2 (int x, int y); /******************************************************************************* * * Max Osx - quartz */ #if defined PLATFORM_OSX && (defined __i386 || defined __ppc__) # define SUP_MACOSX 1 #else # define SUP_MACOSX 0 #endif void get_window_size_mac (unsigned int *my_Width, unsigned int *my_Height); void getpos_mac (int *x, int *y); int open_window_mac (void); void close_window_mac(void); void render_mac (uint8_t *mybuffer); void newsrc_mac (void) ; void handle_X_events_mac (void); void resize_mac (unsigned int x, unsigned int y); void position_mac (int x, int y); void getsize_mac (unsigned int *x, unsigned int *y); void fullscreen_mac (int a); void ontop_mac (int a); int get_fullscreen_mac(); int get_ontop_mac(); void window_resized_mac(); void mac_letterbox_change(); #ifdef HAVE_GL # define SUP_OPENGL 1 void gl_render (uint8_t *mybuffer); int gl_open_window (); void gl_close_window(); void gl_handle_events (); void gl_newsrc (); void gl_resize (unsigned int x, unsigned int y); void gl_get_window_size (unsigned int *w, unsigned int *h); void gl_position (int x, int y); void gl_get_window_pos (int *x, int *y); void gl_set_ontop (int action); void gl_set_fullscreen (int action); void gl_mousepointer (int action); int gl_get_ontop (); int gl_get_fullscreen (); void gl_letterbox_change (); #else # define SUP_OPENGL 0 #endif #endif // XJADEO_DISPLAY_H xjadeo-0.8.10/src/xjadeo/display_gl_win.c0000644000175000017500000007432213747776031015233 00000000000000/* xjadeo - openGL display for Windows * * Copyright (C) 2014 Robin Gareus * * 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. */ #include "display_gl_common.h" #if (defined HAVE_GL && defined PLATFORM_WINDOWS) #include #include #include "icons/xjadeo8_ico.h" #ifndef WM_MOUSEWHEEL # define WM_MOUSEWHEEL 0x020A #endif #ifndef TPM_NOANIMATION static const UINT TPM_NOANIMATION = 0x4000L; #endif #define XJ_CLOSE_MSG (WM_USER + 50) #define XJ_CLOSE_WIN (WM_USER + 49) #define XJ_FULLSCREEN (WM_USER + 10) static pthread_t wingui_thread; static pthread_mutex_t wingui_sync = PTHREAD_MUTEX_INITIALIZER; volatile int wingui_thread_status = 0; static pthread_mutex_t win_vbuf_lock = PTHREAD_MUTEX_INITIALIZER; static size_t win_vbuf_size = 0; static uint8_t *win_vbuf = NULL; void xapi_open(void *d); void xapi_close (void *d); static HWND _gl_hwnd; static HDC _gl_hdc; static HGLRC _gl_hglrc; static WNDCLASSEX _gl_wc; static HCURSOR hCurs_dflt = NULL; static HCURSOR hCurs_none = NULL; static RECT fs_rect = {0, 0, 320, 240}; static HICON xjadeo_icon = NULL; static int winFlags; static void gl_make_current() { ; //wglMakeCurrent(_gl_hdc, _gl_hglrc); } static void gl_clear_current () { ; //wglMakeCurrent(NULL, NULL); } static void gl_swap_buffers() { SwapBuffers(_gl_hdc); } void gl_newsrc () { pthread_mutex_lock(&win_vbuf_lock); free(win_vbuf); win_vbuf_size = video_buffer_size(); if (win_vbuf_size > 0) { win_vbuf = malloc(win_vbuf_size * sizeof(uint8_t)); gl_reallocate_texture(movie_width, movie_height); } pthread_mutex_unlock(&win_vbuf_lock); } static volatile uint8_t sync_sem; static void gl_sync_lock() { sync_sem = 1; pthread_mutex_lock(&wingui_sync); } static void gl_sync_unlock() { sync_sem = 0; pthread_mutex_unlock(&wingui_sync); } #define PTLL gl_sync_lock() #define PTUL gl_sync_unlock(); static uint8_t context_menu_visible = 0; #ifdef WINMENU enum wMenuId { mLoad = 1, mClose, mQuit, mSyncJack, mSyncLTC, mSyncMTCJACK, mSyncMTCPort, mSyncNone, mSize50, mSize100, mSize150, mSizeInc, mSizeDec, mSizeAspect, mSizeLetterbox, mWinOnTop, mWinFullScreen, mWinMouseVisible, mOsdTC, mOsdVtcNone, mOsdVtcTc, mOsdVtcFn, mOsdPosition, mOsdOffsetNone, mOsdOffsetFN, mOsdOffsetTC, mOsdBox, mOsdFileInfo, mOsdGeometry, mOsdClear, mOffsetZero, mOffsetPF, mOffsetMF, mOffsetPS, mOffsetMS, mOffsetPM, mOffsetMM, mOffsetPH, mOffsetMH, mJackPlayPause, mJackPlay, mJackStop, mJackRewind, mRecent, }; static const char *win_basename(const char *fn) { if (!fn) return NULL; size_t l = strlen(fn); if (l < 1) return fn; if (fn[l] == '/' || fn[l] == '\\') --l; while (l > 0 && fn[l] != '/' && fn[l] != '\\') --l; return &fn[++l]; } static void open_context_menu(HWND hwnd, int x, int y) { HMENU hMenu = CreatePopupMenu(); HMENU hSubMenuFile = CreatePopupMenu(); HMENU hSubMenuSync = CreatePopupMenu(); HMENU hSubMenuSize = CreatePopupMenu(); HMENU hSubMenuOSD = CreatePopupMenu(); HMENU hSubMenuOffs = CreatePopupMenu(); HMENU hSubMenuJack = CreatePopupMenu(); HMENU hSubRecent = CreatePopupMenu(); AppendMenu(hSubMenuSync, MF_STRING, mSyncJack, "JACK"); AppendMenu(hSubMenuSync, MF_STRING, mSyncLTC, "LTC"); AppendMenu(hSubMenuSync, MF_STRING, mSyncMTCJACK, "MTC (JACK)"); AppendMenu(hSubMenuSync, MF_STRING, mSyncMTCPort, "MTC (PortMidi)"); AppendMenu(hSubMenuSync, MF_STRING, mSyncNone, "None"); AppendMenu(hSubMenuSize, MF_STRING, mSize50, "50%"); AppendMenu(hSubMenuSize, MF_STRING, mSize100, "100%\t ."); AppendMenu(hSubMenuSize, MF_STRING, mSize150, "150%"); AppendMenu(hSubMenuSize, MF_SEPARATOR, 0, NULL); AppendMenu(hSubMenuSize, MF_STRING, mSizeDec, "-20%\t<"); AppendMenu(hSubMenuSize, MF_STRING, mSizeInc, "+20%\t>"); AppendMenu(hSubMenuSize, MF_SEPARATOR, 0, NULL); AppendMenu(hSubMenuSize, MF_STRING, mSizeAspect, "Reset Aspect\t ,"); AppendMenu(hSubMenuSize, MF_STRING, mSizeLetterbox, "Retain Aspect (Letterbox)\t L"); AppendMenu(hSubMenuSize, MF_SEPARATOR, 0, NULL); AppendMenu(hSubMenuSize, MF_STRING, mWinOnTop, "On Top\t A"); AppendMenu(hSubMenuSize, MF_STRING, mWinFullScreen, "Full Screen\t F"); AppendMenu(hSubMenuSize, MF_SEPARATOR, 0, NULL); AppendMenu(hSubMenuSize, MF_STRING, mWinMouseVisible, "Mouse Cursor\t M"); unsigned int nfo_flags = 0; if (movie_height < OSD_MIN_NFO_HEIGHT) { nfo_flags |= MF_DISABLED | MF_GRAYED; } AppendMenu(hSubMenuOSD, MF_STRING, mOsdTC, "External Timecode\t S"); AppendMenu(hSubMenuOSD, MF_SEPARATOR, 0, NULL); AppendMenu(hSubMenuOSD, MF_STRING, mOsdVtcNone, "VTC Off\t V"); AppendMenu(hSubMenuOSD, MF_STRING, mOsdVtcTc, "VTC Timecode"); AppendMenu(hSubMenuOSD, MF_STRING, mOsdVtcFn, "VTC Frame Number"); AppendMenu(hSubMenuOSD, MF_SEPARATOR, 0, NULL); AppendMenu(hSubMenuOSD, MF_STRING, mOsdOffsetNone, "Offset Off\t O"); AppendMenu(hSubMenuOSD, MF_STRING, mOsdOffsetTC, "Offset Timecode"); AppendMenu(hSubMenuOSD, MF_STRING, mOsdOffsetFN, "Offset Frame Number"); AppendMenu(hSubMenuOSD, MF_SEPARATOR, 0, NULL); AppendMenu(hSubMenuOSD, MF_STRING | nfo_flags, mOsdFileInfo, "Time Info\t I"); AppendMenu(hSubMenuOSD, MF_STRING | nfo_flags, mOsdGeometry, "Geometry\t G"); AppendMenu(hSubMenuOSD, MF_SEPARATOR, 0, NULL); AppendMenu(hSubMenuOSD, MF_STRING, mOsdBox, "Background\t B"); AppendMenu(hSubMenuOSD, MF_STRING, mOsdPosition, "Swap Position\t P"); AppendMenu(hSubMenuOSD, MF_STRING, mOsdClear, "CLear All\t Shift+C"); AppendMenu(hSubMenuOffs, MF_STRING, mOffsetZero, "Reset\t \\"); AppendMenu(hSubMenuOffs, MF_STRING, mOffsetPF, "+1 Frame\t ="); AppendMenu(hSubMenuOffs, MF_STRING, mOffsetMF, "-1 Frame\t -"); AppendMenu(hSubMenuOffs, MF_STRING, mOffsetPS, "+1 Second\t +"); AppendMenu(hSubMenuOffs, MF_STRING, mOffsetMS, "-1 Second\t _"); AppendMenu(hSubMenuOffs, MF_STRING, mOffsetPM, "+1 Minute\t }"); AppendMenu(hSubMenuOffs, MF_STRING, mOffsetMM, "-1 Minute\t {"); AppendMenu(hSubMenuOffs, MF_STRING, mOffsetPH, "+1 Hour"); AppendMenu(hSubMenuOffs, MF_STRING, mOffsetMH, "-1 Hour"); AppendMenu(hSubMenuJack, MF_STRING, mJackPlayPause, "Play/Pause\t Space"); AppendMenu(hSubMenuJack, MF_STRING, mJackPlay, "Play"); AppendMenu(hSubMenuJack, MF_STRING, mJackStop, "Stop"); AppendMenu(hSubMenuJack, MF_STRING, mJackRewind, "Rewind\t Backspace"); /* update menu items */ switch (ui_syncsource()) { case SYNC_JACK: CheckMenuItem(hSubMenuSync, mSyncJack, MF_CHECKED | MF_BYCOMMAND); break; case SYNC_LTC: CheckMenuItem(hSubMenuSync, mSyncLTC, MF_CHECKED | MF_BYCOMMAND); break; case SYNC_MTC_JACK: CheckMenuItem(hSubMenuSync, mSyncMTCJACK, MF_CHECKED | MF_BYCOMMAND); break; case SYNC_MTC_PORTMIDI: CheckMenuItem(hSubMenuSync, mSyncMTCPort, MF_CHECKED | MF_BYCOMMAND); break; default: CheckMenuItem(hSubMenuSync, mSyncNone, MF_CHECKED | MF_BYCOMMAND); break; } if (OSD_mode&OSD_SMPTE) { CheckMenuItem(hSubMenuOSD, mOsdTC, MF_CHECKED | MF_BYCOMMAND); } if (OSD_mode&OSD_FRAME) { CheckMenuItem(hSubMenuOSD, mOsdVtcFn, MF_CHECKED | MF_BYCOMMAND); } if (OSD_mode&OSD_VTC) { CheckMenuItem(hSubMenuOSD, mOsdVtcTc, MF_CHECKED | MF_BYCOMMAND); } if (!(OSD_mode&(OSD_FRAME|OSD_VTC))) { CheckMenuItem(hSubMenuOSD, mOsdVtcNone, MF_CHECKED | MF_BYCOMMAND); } if (!(OSD_mode&(OSD_OFFF|OSD_OFFS))) { CheckMenuItem(hSubMenuOSD, mOsdOffsetNone, MF_CHECKED | MF_BYCOMMAND); } if (OSD_mode&OSD_OFFF) { CheckMenuItem(hSubMenuOSD, mOsdOffsetFN, MF_CHECKED | MF_BYCOMMAND); } if (OSD_mode&OSD_OFFS) { CheckMenuItem(hSubMenuOSD, mOsdOffsetTC, MF_CHECKED | MF_BYCOMMAND); } if (OSD_mode&OSD_BOX) { CheckMenuItem(hSubMenuOSD, mOsdBox, MF_CHECKED | MF_BYCOMMAND); } if (OSD_mode&OSD_NFO) { CheckMenuItem(hSubMenuOSD, mOsdFileInfo, MF_CHECKED | MF_BYCOMMAND); } if (OSD_mode&OSD_GEO) { CheckMenuItem(hSubMenuOSD, mOsdGeometry, MF_CHECKED | MF_BYCOMMAND); } if (Xgetletterbox()) { CheckMenuItem(hSubMenuSize, mSizeLetterbox, MF_CHECKED | MF_BYCOMMAND); } if (Xgetontop()) { CheckMenuItem(hSubMenuSize, mWinOnTop, MF_CHECKED | MF_BYCOMMAND); } if (Xgetfullscreen()) { CheckMenuItem(hSubMenuSize, mWinFullScreen, MF_CHECKED | MF_BYCOMMAND); } if (!Xgetmousepointer()) { CheckMenuItem(hSubMenuSize, mWinMouseVisible, MF_CHECKED | MF_BYCOMMAND); } // built top-level w/o ModifyMenu unsigned int flags_open = 0; unsigned int flags_close = 0; unsigned int flags_quit = 0; unsigned int flags_sync = 0; unsigned int flags_offs = 0; unsigned int flags_jack = 0; unsigned int flags_recent = 0; unsigned int recent_cnt = x_fib_recent_count (); if (!have_open_file()) { flags_close = MF_DISABLED | MF_GRAYED; } if (ui_syncsource() != SYNC_JACK || (interaction_override&OVR_JCONTROL)) { flags_jack = MF_DISABLED | MF_GRAYED; } if (interaction_override & OVR_MENUSYNC) { flags_sync = MF_DISABLED | MF_GRAYED; } if (interaction_override & OVR_LOADFILE) { flags_open = MF_DISABLED | MF_GRAYED; flags_close = MF_DISABLED | MF_GRAYED; flags_recent = MF_DISABLED | MF_GRAYED; } if ((interaction_override&OVR_AVOFFSET) != 0 ) { flags_offs = MF_DISABLED | MF_GRAYED; } if ((interaction_override&OVR_QUIT_KEY) != 0 ) { flags_quit = MF_DISABLED | MF_GRAYED; } if (recent_cnt == 0) { flags_recent = MF_DISABLED | MF_GRAYED; } AppendMenu(hSubMenuFile, MF_STRING | flags_open, mLoad, "Open\t Ctrl+O"); AppendMenu(hSubMenuFile, MF_STRING | flags_close, mClose, "Close\t Ctrl+W"); AppendMenu(hSubMenuFile, MF_SEPARATOR, 0, NULL); AppendMenu(hSubMenuFile, MF_STRING | MF_POPUP | flags_recent, (UINT_PTR)hSubRecent, "Recent"); AppendMenu(hSubMenuFile, MF_SEPARATOR, 0, NULL); AppendMenu(hSubMenuFile, MF_STRING | flags_quit, mQuit, "Quit\t Ctrl+Q"); AppendMenu(hMenu, MF_STRING | MF_DISABLED, 0, "XJadeo " VERSION); AppendMenu(hMenu, MF_SEPARATOR, 0, NULL); if (!(flags_open && flags_quit)) AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hSubMenuFile, "File"); AppendMenu(hMenu, MF_STRING | MF_POPUP | flags_sync, (UINT_PTR)hSubMenuSync, "Sync"); AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hSubMenuSize, "Display"); AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hSubMenuOSD, "OSD"); AppendMenu(hMenu, MF_STRING | MF_POPUP | flags_offs, (UINT_PTR)hSubMenuOffs, "Offset"); AppendMenu(hMenu, MF_STRING | MF_POPUP | flags_jack, (UINT_PTR)hSubMenuJack, "Transport"); /* recently used*/ int i; for (i = 0; i < recent_cnt && i < 8; ++i) { if (!x_fib_recent_at (i)) break; char *tmp = strdup (x_fib_recent_at (i)); AppendMenu(hSubRecent, MF_STRING , mRecent + i, win_basename (tmp)); free(tmp); } /* and go */ context_menu_visible = 1; TrackPopupMenuEx(hMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON | TPM_NOANIMATION, x, y, hwnd, NULL); context_menu_visible = 0; DestroyMenu (hSubMenuOSD); DestroyMenu (hSubMenuJack); DestroyMenu (hSubMenuSize); DestroyMenu (hSubMenuSync); DestroyMenu (hMenu); } static void win_load_file (HWND hwnd) { if (interaction_override & OVR_LOADFILE) return; char fn[1024] = ""; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hwnd; ofn.lpstrFile = fn; ofn.nMaxFile = 1024; ofn.lpstrTitle = "xjadeo - Load Video File"; ofn.lpstrFilter = "Video Files\0" "*.avi;*.mov;*.mkv;*.mpg;*.vob;*.ogg;*.ogv;*.mp4;*.mpeg;*.webm;*.flv;*.asf;*.avs;*.dts;*.m4v;*.dv;*.dirac;*.h264;" "*.wmv;*.mtsC;*.ts;*.264\0" "All\0*.*\0"; ofn.nFilterIndex = 1; ofn.Flags = OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_NONETWORKBUTTON | OFN_HIDEREADONLY | OFN_READONLY; //ofn.lpstrInitialDir = ; if (GetOpenFileName (&ofn)) { #if 0 printf("Load: '%s'\n", fn); #endif PTLL; xapi_open(fn); PTUL; } } static void win_close_video () { if (interaction_override & OVR_LOADFILE) return; PTLL; xapi_close(NULL); PTUL; } static void win_quit_xjadeo () { if (interaction_override & OVR_QUIT_KEY) return; loop_flag=0; } static void win_handle_menu(HWND hwnd, enum wMenuId id) { switch(id) { case mLoad: win_load_file(hwnd); break; case mClose: win_close_video(); break; case mQuit: win_quit_xjadeo(); break; case mSyncJack: PTLL; ui_sync_to_jack(); PTUL; break; case mSyncLTC: PTLL; ui_sync_to_ltc(); PTUL; break; case mSyncMTCJACK: PTLL; ui_sync_to_mtc_jack(); PTUL; break; case mSyncMTCPort: PTLL; ui_sync_to_mtc_portmidi(); PTUL; break; case mSyncNone: PTLL; ui_sync_none(); PTUL; break; case mSize50: XCresize_percent(50); break; case mSize100: XCresize_percent(100); break; case mSize150: XCresize_percent(150); break; case mSizeInc: XCresize_scale( 1); break; case mSizeDec: XCresize_scale(-1); break; case mSizeAspect: XCresize_aspect(0); break; case mSizeLetterbox: Xletterbox(2); break; case mWinOnTop: Xontop(2); break; case mWinFullScreen: Xfullscreen(2); break; case mWinMouseVisible: Xmousepointer(2); break; case mOsdVtcNone: PTLL; ui_osd_vtc_off(); PTUL; break; case mOsdVtcTc: PTLL; ui_osd_vtc_tc(); PTUL; break; case mOsdVtcFn: PTLL; ui_osd_vtc_fn(); PTUL; break; case mOsdTC: PTLL; ui_osd_tc(); PTUL; break; case mOsdPosition: PTLL; ui_osd_permute(); PTUL; break; case mOsdOffsetNone: PTLL; ui_osd_offset_none(); PTUL; break; case mOsdOffsetFN: PTLL; ui_osd_offset_fn(); PTUL; break; case mOsdOffsetTC: PTLL; ui_osd_offset_tc(); PTUL; break; case mOsdBox: PTLL; ui_osd_box(); PTUL; break; case mOsdFileInfo: PTLL; ui_osd_fileinfo(); PTUL; break; case mOsdGeometry: PTLL; ui_osd_geo(); PTUL; break; case mOsdClear: PTLL; ui_osd_clear(); PTUL; break; case mOffsetZero: PTLL; XCtimeoffset( 0, 0); PTUL; break; case mOffsetPF: PTLL; XCtimeoffset( 1, 0); PTUL; break; case mOffsetMF: PTLL; XCtimeoffset(-1, 0); PTUL; break; case mOffsetPS: PTLL; XCtimeoffset( 4, 0); PTUL; break; case mOffsetMS: PTLL; XCtimeoffset(-4, 0); PTUL; break; case mOffsetPM: PTLL; XCtimeoffset( 2, 0); PTUL; break; case mOffsetMM: PTLL; XCtimeoffset(-2, 0); PTUL; break; case mOffsetPH: PTLL; XCtimeoffset( 3, 0); PTUL; break; case mOffsetMH: PTLL; XCtimeoffset(-3, 0); PTUL; break; case mJackPlayPause: jackt_toggle(); break; case mJackPlay: jackt_start(); break; case mJackStop: jackt_stop(); break; case mJackRewind: jackt_rewind(); break; default: if (id >= mRecent && !(interaction_override & OVR_LOADFILE)) { const char *fn = x_fib_recent_at (id - mRecent); if (fn) { PTLL; xapi_open((void*) fn); PTUL; } } } } #endif static void win_set_fullscreen () { if (_gl_fullscreen) { MONITORINFO mi = { sizeof(mi) }; GetWindowRect(_gl_hwnd, &fs_rect); #if 0 printf("GR %d %d %d %d: %dx%d\n", fs_rect.top, fs_rect.left, fs_rect.bottom, fs_rect.right, fs_rect.bottom - fs_rect.top, fs_rect.right - fs_rect.left); #endif winFlags = WS_SYSMENU | WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE; SetWindowLongPtr(_gl_hwnd, GWL_STYLE, winFlags); if (GetMonitorInfo(MonitorFromWindow(_gl_hwnd, MONITOR_DEFAULTTOPRIMARY), &mi)) { SetWindowPos (_gl_hwnd, HWND_TOPMOST, mi.rcMonitor.left, mi.rcMonitor.top, mi.rcMonitor.right - mi.rcMonitor.left, mi.rcMonitor.bottom - mi.rcMonitor.top, SWP_ASYNCWINDOWPOS | SWP_FRAMECHANGED); if (mi.dwFlags & MONITORINFOF_PRIMARY) { ChangeDisplaySettings(NULL, CDS_FULLSCREEN); } } else { SetWindowPos (_gl_hwnd, HWND_TOPMOST, 0, 0, GetSystemMetrics(SM_CXSCREEN /*SM_CXFULLSCREEN*/), GetSystemMetrics(SM_CYSCREEN /*SM_CYFULLSCREEN*/), SWP_ASYNCWINDOWPOS | SWP_FRAMECHANGED); ChangeDisplaySettings(NULL, CDS_FULLSCREEN); } } else { winFlags = WS_OVERLAPPEDWINDOW | WS_VISIBLE; SetWindowPos (_gl_hwnd, _gl_ontop ? HWND_TOPMOST : HWND_NOTOPMOST, fs_rect.left, fs_rect.top, 0, 0, SWP_ASYNCWINDOWPOS | SWP_NOACTIVATE | SWP_NOSENDCHANGING | SWP_NOSIZE | SWP_NOREDRAW | SWP_NOCOPYBITS); SetWindowLongPtr(_gl_hwnd, GWL_STYLE, winFlags); SetWindowPos (_gl_hwnd, _gl_ontop ? HWND_TOPMOST : HWND_NOTOPMOST, fs_rect.left, fs_rect.top, fs_rect.right - fs_rect.left, fs_rect.bottom - fs_rect.top, SWP_ASYNCWINDOWPOS | SWP_FRAMECHANGED); ChangeDisplaySettings(NULL, CDS_RESET); } ShowWindow (_gl_hwnd, SW_SHOW); force_redraw = 1; } #if 0 static int check_wgl_extention(const char *ext) { if (!ext || strchr(ext, ' ') || *ext == '\0') { return 0; } const char *exts = (const char*) glGetString(GL_EXTENSIONS); if (!exts) { return 0; } const char *start = exts; while (1) { const char *tmp = strstr(start, ext); if (!tmp) break; const char *end = tmp + strlen(ext); if (tmp == start || *(tmp - 1) == ' ') if (*end == ' ' || *end == '\0') return 1; start = end; } return 0; } static void *win_glGetProcAddress(const char* proc) { void * func = NULL; static int initialized = 0; static HMODULE handle; static void * (*wgl_getProcAddress)(const char *proc); if (!initialized) { initialized = 1; handle = GetModuleHandle("OPENGL32.DLL"); wgl_getProcAddress = (void* (*)(const char*)) GetProcAddress(handle, "wglGetProcAddress"); } if (wgl_getProcAddress) { func = wgl_getProcAddress(proc); } if (!func) { func = GetProcAddress(NULL, proc); } return func; } #endif static LRESULT handleMessage(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { #if 0 if (message != 0x0200 && message != 0x0113 && message != 0x0020 && message != 0x0084 && message != 0x0121) printf("MSG: %04X @ %p\n", message, (void*)hwnd); #endif switch (message) { case WM_CREATE: case WM_SHOWWINDOW: case WM_SIZE: if (hwnd == _gl_hwnd) { RECT rect; GetClientRect(_gl_hwnd, &rect); gl_reshape (rect.right - rect.left, rect.bottom - rect.top); InvalidateRect(_gl_hwnd, NULL, 0); } case WM_SIZING: xjglExpose(win_vbuf); break; case WM_PAINT: if (hwnd != _gl_hwnd) return DefWindowProc(hwnd, message, wParam, lParam); else { pthread_mutex_lock(&win_vbuf_lock); xjglExpose(win_vbuf); pthread_mutex_unlock(&win_vbuf_lock); } ValidateRect(hwnd, NULL); break; #if 0 case WM_ERASEBKGND: if (hwnd != _gl_hwnd) return DefWindowProc(hwnd, message, wParam, lParam); break; #endif case WM_MOUSEMOVE: if (osd_seeking && ui_syncsource() == SYNC_NONE && OSD_mode & OSD_POS) { const float sk = calc_slider (GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)); if (sk >= 0) { // no lock, userFrame is queried atomically // and transport is disconnected when osd_seeking is set ui_sync_manual (sk); } } break; case WM_LBUTTONDOWN: if (ui_syncsource() == SYNC_NONE && OSD_mode & OSD_POS) { const float sk = calc_slider (GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)); if (sk >= 0) { PTLL; ui_sync_manual (sk); osd_seeking = 1; force_redraw = 1; PTUL; } } break; case WM_LBUTTONUP: if (osd_seeking) { PTLL; osd_seeking = 0; force_redraw = 1; PTUL; } else xjglButton(1); break; case WM_MBUTTONUP: xjglButton(2); break; case WM_RBUTTONUP: #ifdef WINMENU if (1) { POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; ClientToScreen(hwnd, &pt); open_context_menu(hwnd, pt.x, pt.y); } else #endif xjglButton(3); break; #ifdef WINMENU case WM_CONTEXTMENU: { int x0, y0; gl_get_window_pos(&x0, &y0); open_context_menu(hwnd, x0 + _gl_width * .25, y0 + _gl_height * .25); } break; case WM_COMMAND: win_handle_menu(hwnd, LOWORD(wParam)); break; #endif case WM_MOUSEWHEEL: gl_sync_lock(); xjglButton((short)HIWORD(wParam) > 0 ? 4 : 5); gl_sync_unlock(); break; case WM_KEYDOWN: { static BYTE kbs[256]; if (GetKeyboardState(kbs) != FALSE) { char lb[2]; UINT scanCode = (lParam >> 8) & 0xFFFFFF00; if ( 1 == ToAscii(wParam, scanCode, kbs, (LPWORD)lb, 0)) { const char buf [2] = {(char)lb[0] , 0}; if ((GetKeyState(VK_CONTROL) & GetKeyState('O') & 0x8000) && (interaction_override & OVR_LOADFILE) == 0) { win_load_file (hwnd); } else if ((GetKeyState(VK_CONTROL) & GetKeyState('W') & 0x8000) && (interaction_override & OVR_LOADFILE) == 0) { win_close_video (); } else if ((GetKeyState(VK_CONTROL) & GetKeyState('Q') & 0x8000) && (interaction_override&OVR_QUIT_KEY) == 0) { win_quit_xjadeo (); } else if (!strcmp(buf, "f")) { // direct fullscreen handling _gl_fullscreen^=1; win_set_fullscreen (); } else { xjglKeyPress ((char)lb[0], buf); } } } } break; case XJ_FULLSCREEN: win_set_fullscreen(); break; case WM_KEYUP: break; case WM_QUIT: case XJ_CLOSE_MSG: gl_sync_lock(); if ((interaction_override&OVR_QUIT_WMG) == 0) { loop_flag = 0; } gl_sync_unlock(); break; case WM_ENTERIDLE: if (context_menu_visible) xjglExpose(win_vbuf); return DefWindowProc(hwnd, message, wParam, lParam); break; case WM_EXITSIZEMOVE: force_redraw = 1; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; } static LRESULT CALLBACK wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: PostMessage(hwnd, WM_SHOWWINDOW, TRUE, 0); return 0; case WM_CLOSE: PostMessage(hwnd, XJ_CLOSE_MSG, wParam, lParam); return 0; case WM_DESTROY: return 0; default: return handleMessage(hwnd, message, wParam, lParam); } } void win_close_window() { wglMakeCurrent(NULL, NULL); wglDeleteContext(_gl_hglrc); ReleaseDC(_gl_hwnd, _gl_hdc); DestroyWindow(_gl_hwnd); DestroyCursor(hCurs_none); UnregisterClass(_gl_wc.lpszClassName, NULL); DestroyIcon(xjadeo_icon); } static void *win_open_window (void *arg) { LPCTSTR MainWndClass = TEXT("xjadeo"); int offset = LookupIconIdFromDirectory ((BYTE*)xjadeo_win_ico, TRUE); if (offset > 0) { BITMAPINFOHEADER *img = (BITMAPINFOHEADER *)(xjadeo_win_ico + offset ); xjadeo_icon = CreateIconFromResource ( (BYTE*)img, img->biSize, TRUE, 0x00030000); } else { xjadeo_icon = LoadImage(NULL, "xjadeo.ico", IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE | LR_LOADFROMFILE) ; } hCurs_dflt = LoadCursor(NULL, IDC_ARROW); ZeroMemory(&_gl_wc, sizeof(WNDCLASSEX)); _gl_wc.cbSize = sizeof(WNDCLASSEX); _gl_wc.style = 0; _gl_wc.lpfnWndProc = (WNDPROC)&wndProc; _gl_wc.cbClsExtra = 0; _gl_wc.cbWndExtra = 0; _gl_wc.hInstance = NULL; _gl_wc.hIcon = xjadeo_icon ? xjadeo_icon : LoadIcon(NULL, IDI_APPLICATION); _gl_wc.hCursor = hCurs_dflt; _gl_wc.hbrBackground = NULL; // (HBRUSH)GetStockObject(BLACK_BRUSH); _gl_wc.lpszMenuName = NULL; _gl_wc.lpszClassName = MainWndClass; _gl_wc.hIconSm = 0; // 16x16 if (!RegisterClassEx(&_gl_wc)) { fprintf(stderr, "cannot regiser window class\n"); MessageBox(NULL, TEXT("Error registering window class."), TEXT("Error"), MB_ICONERROR | MB_OK); wingui_thread_status = -1; pthread_exit (NULL); return (NULL); } _gl_width = ffctv_width; _gl_height = ffctv_height; winFlags = start_fullscreen ? (WS_POPUP | WS_CLIPCHILDREN) : WS_OVERLAPPEDWINDOW; RECT wr = { 0, 0, (long)_gl_width, (long)_gl_height }; AdjustWindowRectEx(&wr, winFlags, FALSE, WS_EX_TOPMOST); SystemParametersInfo(SPI_SETDROPSHADOW, 0, FALSE, 0); SystemParametersInfo(SPI_SETMENUFADE, 0, FALSE, 0); SystemParametersInfo(SPI_SETMENUANIMATION, 0, FALSE, 0); _gl_hwnd = CreateWindowEx ( 0, MainWndClass, MainWndClass, winFlags, CW_USEDEFAULT, CW_USEDEFAULT, wr.right - wr.left, wr.bottom - wr.top, NULL, NULL, NULL, NULL); if (!_gl_hwnd) { fprintf(stderr, "cannot open window\n"); MessageBox(NULL, TEXT("Error creating main window."), TEXT("Error"), MB_ICONERROR | MB_OK); UnregisterClass(_gl_wc.lpszClassName, NULL); DestroyIcon(xjadeo_icon); wingui_thread_status = -1; pthread_exit (NULL); return (NULL); } _gl_hdc = GetDC(_gl_hwnd); if (!_gl_hdc) { DestroyWindow(_gl_hwnd); UnregisterClass(_gl_wc.lpszClassName, NULL); DestroyIcon(xjadeo_icon); wingui_thread_status = -1; pthread_exit (NULL); return (NULL); } PIXELFORMATDESCRIPTOR pfd; ZeroMemory(&pfd, sizeof(pfd)); pfd.nSize = sizeof(pfd); pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 24; pfd.cDepthBits = 16; pfd.iLayerType = PFD_MAIN_PLANE; int format = ChoosePixelFormat(_gl_hdc, &pfd); if (format == 0) { fprintf(stderr, "Pixel Format is not supported.\n"); ReleaseDC(_gl_hwnd, _gl_hdc); DestroyWindow(_gl_hwnd); UnregisterClass(_gl_wc.lpszClassName, NULL); DestroyIcon(xjadeo_icon); wingui_thread_status = -1; pthread_exit (NULL); return (NULL); } SetPixelFormat(_gl_hdc, format, &pfd); _gl_hglrc = wglCreateContext(_gl_hdc); if (!_gl_hglrc) { fprintf(stderr, "Cannot create openGL context.\n"); ReleaseDC(_gl_hwnd, _gl_hdc); DestroyWindow(_gl_hwnd); UnregisterClass(_gl_wc.lpszClassName, NULL); DestroyIcon(xjadeo_icon); wingui_thread_status = -1; pthread_exit (NULL); return (NULL); } wglMakeCurrent(_gl_hdc, _gl_hglrc); if (start_ontop) { gl_set_ontop(1); } if (start_fullscreen) { _gl_fullscreen = 1; win_set_fullscreen(); } BYTE ANDmaskCursor[16]; BYTE XORmaskCursor[16]; memset(ANDmaskCursor, 0xff, sizeof(ANDmaskCursor)); memset(XORmaskCursor, 0, sizeof(ANDmaskCursor)); hCurs_none = CreateCursor ( (HINSTANCE)GetWindowLongPtr(_gl_hwnd, GWLP_HINSTANCE), 2, 2, 4, 4, ANDmaskCursor, XORmaskCursor); gl_init(); if (gl_reallocate_texture(movie_width, movie_height)) { win_close_window (); wingui_thread_status = -1; pthread_exit (NULL); return (NULL); } gl_newsrc(); #if 0 // check for VBlank sync if (check_wgl_extention("WGL_EXT_swap_control")) { printf("WGL: have WGL_EXT_swap_control\n"); BOOL (*wglSwapIntervalEXT)(int interval) = (BOOL (*)(int)) win_glGetProcAddress("wglSwapIntervalEXT"); if (wglSwapIntervalEXT) { wglSwapIntervalEXT(1); if (want_verbose) printf("WGL: use Vblank \n"); } } #endif // disable screensaver SetThreadExecutionState (ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED | ES_CONTINUOUS); //ShowWindow(_gl_hwnd, SW_HIDE); //ShowWindow(_gl_hwnd, SW_SHOW); ShowWindow(_gl_hwnd, WS_VISIBLE); ShowWindow(_gl_hwnd, SW_RESTORE); UpdateWindow(_gl_hwnd); wingui_thread_status = 1; MSG msg; while (wingui_thread_status) { if(GetMessage (&msg, 0, 0, 0) < 0) { break; // error } handleMessage(_gl_hwnd, msg.message, msg.wParam, msg.lParam); if (_gl_reexpose) { pthread_mutex_lock(&win_vbuf_lock); _gl_reexpose = false; xjglExpose(win_vbuf); pthread_mutex_unlock(&win_vbuf_lock); } } if (wingui_thread_status) { // This can't really happen, can it? MessageBox(NULL, TEXT("The Windows application event loop was terminated unexpectedly."), TEXT("Error"), MB_ICONERROR | MB_OK); loop_flag = 0; // Irregular exit } win_close_window(); pthread_exit (NULL); return (NULL); } int gl_open_window () { // use a dedicated thread for the windows UI // to work around blocking behaviour on window // resize and context-menu access. if (wingui_thread_status) return -1; if (pthread_create (&wingui_thread, NULL, win_open_window, NULL)) { return -1; } while (wingui_thread_status == 0) { Sleep(1); } if (wingui_thread_status < 0) { wingui_thread_status = 0; pthread_join (wingui_thread, NULL); } return wingui_thread_status > 0 ? 0 : -1; } void gl_close_window() { if (wingui_thread_status == 0) return; wingui_thread_status = 0; PostMessage(_gl_hwnd, XJ_CLOSE_WIN, 0, 0); // wake up GetMessage pthread_join (wingui_thread, NULL); free(win_vbuf); win_vbuf = NULL; win_vbuf_size = 0; } void gl_handle_events () { pthread_mutex_unlock(&wingui_sync); // XXX TODO first-time lock while (sync_sem) { sched_yield(); } // TODO explicitly wake up potential lock-holders pthread_mutex_lock(&wingui_sync); } void gl_render (uint8_t *buffer) { if (!win_vbuf) return; pthread_mutex_lock(&win_vbuf_lock); memcpy(win_vbuf, buffer, win_vbuf_size * sizeof(uint8_t)); pthread_mutex_unlock(&win_vbuf_lock); InvalidateRect(_gl_hwnd, NULL, 0); } void gl_resize (unsigned int x, unsigned int y) { if (_gl_fullscreen) { return; } RECT wr = { 0, 0, (long)x, (long)y }; AdjustWindowRectEx(&wr, winFlags, FALSE, WS_EX_TOPMOST); SetWindowPos (_gl_hwnd, _gl_ontop ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, wr.right - wr.left, wr.bottom - wr.top, SWP_ASYNCWINDOWPOS | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER | SWP_NOREPOSITION); UpdateWindow(_gl_hwnd); // calls gl_reshape() } void gl_get_window_size (unsigned int *w, unsigned int *h) { *w = _gl_width; *h = _gl_height; } void gl_position (int x, int y) { SetWindowPos (_gl_hwnd, _gl_ontop ? HWND_TOPMOST : HWND_NOTOPMOST, x, y, 0, 0, SWP_ASYNCWINDOWPOS | SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOOWNERZORDER | SWP_NOZORDER); } void gl_get_window_pos (int *rx, int *ry) { RECT rect; GetWindowRect(_gl_hwnd, &rect); *rx = rect.left; *ry = rect.top; } void gl_set_ontop (int action) { if (action==2) _gl_ontop ^= 1; else _gl_ontop = action ? 1 : 0; SetWindowPos (_gl_hwnd, _gl_ontop ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, (_gl_ontop ? 0 : SWP_NOACTIVATE) | SWP_ASYNCWINDOWPOS | SWP_NOMOVE | SWP_NOSIZE); } void gl_set_fullscreen (int action) { if (action==2) _gl_fullscreen^=1; else _gl_fullscreen = action ? 1 : 0; PostMessage(_gl_hwnd, XJ_FULLSCREEN, 0, 0); } void gl_mousepointer (int action) { if (action==2) hide_mouse ^= 1; else hide_mouse = action ? 1 : 0; if (hide_mouse) { SetClassLong(_gl_hwnd, GCLP_HCURSOR, (LONG)hCurs_none); SetCursor(hCurs_none); } else { SetClassLong(_gl_hwnd, GCLP_HCURSOR, (LONG)hCurs_dflt); SetCursor(hCurs_dflt); } } int gl_get_ontop () { return _gl_ontop; } int gl_get_fullscreen () { return _gl_fullscreen; } #endif xjadeo-0.8.10/src/xjadeo/display_glx.c0000644000175000017500000003126113747774271014545 00000000000000/* xjadeo - openGL display for X11 * * Copyright (C) 2014 Robin Gareus * * 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. */ #include "display_gl_common.h" #if (defined HAVE_GL && !defined PLATFORM_WINDOWS && !defined PLATFORM_OSX) #include #include #include #include #include "icons/xjadeo8.xpm" void xapi_open (void *d); void xapi_close (void *d); static Display* _gl_display; static int _gl_screen; static Window _gl_win; static GLXContext _gl_ctx; extern double framerate; // used for screensaver static void gl_sync_lock() { } static void gl_sync_unlock() { } static void gl_make_current() { glXMakeCurrent(_gl_display, _gl_win, _gl_ctx); } static void gl_clear_current() { glXMakeCurrent(_gl_display, None, NULL); } static void gl_swap_buffers() { glXSwapBuffers(_gl_display, _gl_win); } void gl_newsrc () { gl_reallocate_texture(movie_width, movie_height); } static void glx_netwm(const char *atom, const int onoff) { const int set = onoff ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE; Atom type = XInternAtom(_gl_display,"_NET_WM_STATE", 0); if (type == None) return; Atom property = XInternAtom(_gl_display, atom, 0); if (property == None) return; XEvent xev; xev.type = ClientMessage; xev.xclient.type = ClientMessage; xev.xclient.window = _gl_win; xev.xclient.message_type = type; xev.xclient.format = 32; xev.xclient.data.l[0] = set; xev.xclient.data.l[1] = property; xev.xclient.data.l[2] = 0; if (!XSendEvent(_gl_display, DefaultRootWindow(_gl_display), False, SubstructureRedirectMask|SubstructureNotifyMask, &xev)) { fprintf(stderr,"error changing X11 property\n"); } } static void setup_window_hints_and_icon(Display* dpy, Window win, Window parent, const int maxsize) { XTextProperty x_wname, x_iname; XSizeHints hints; XWMHints wmhints; char *w_name ="xjadeo"; char *i_name ="xjadeo"; /* default settings which allow arbitraray resizing of the window */ hints.flags = PSize | PMaxSize | PMinSize; hints.min_width = 32; hints.min_height = 18; hints.max_width = maxsize; hints.max_height = maxsize; wmhints.input = True; XpmCreatePixmapFromData(dpy, parent, xjadeo8_xpm, &wmhints.icon_pixmap, &wmhints.icon_mask, NULL); wmhints.flags = InputHint | IconPixmapHint | IconMaskHint; if (XStringListToTextProperty (&w_name, 1, &x_wname) && XStringListToTextProperty (&i_name, 1, &x_iname)) { XSetWMProperties (dpy, win, &x_wname, &x_iname, NULL, 0, &hints, &wmhints, NULL); XFree (x_wname.value); XFree (x_iname.value); } } static int check_glx_extention(const char *ext) { if (!ext || strchr(ext, ' ') || *ext == '\0') { return 0; } const char *exts = glXQueryExtensionsString(_gl_display, _gl_screen); if (!exts) { return 0; } const char *start = exts; while (1) { const char *tmp = strstr(start, ext); if (!tmp) break; const char *end = tmp + strlen(ext); if (tmp == start || *(tmp - 1) == ' ') if (*end == ' ' || *end == '\0') return 1; start = end; } return 0; } int gl_open_window () { _gl_display = XOpenDisplay(0); if (!_gl_display) { fprintf( stderr, "Cannot connect to X server\n"); return 1; } _gl_screen = DefaultScreen(_gl_display); int attrList[] = { GLX_RGBA, GLX_DOUBLEBUFFER, GLX_RED_SIZE, 4, GLX_GREEN_SIZE, 4, GLX_BLUE_SIZE, 4, GLX_DEPTH_SIZE, 16, GLX_ARB_multisample, 1, None }; XVisualInfo* vi = glXChooseVisual(_gl_display, _gl_screen, attrList); if (!vi) { fprintf(stderr, "GLX visual is not supported\n"); XCloseDisplay(_gl_display); return 1; } int glxMajor, glxMinor; glXQueryVersion(_gl_display, &glxMajor, &glxMinor); if (want_verbose) { printf("GLX-Version : %d.%d\n", glxMajor, glxMinor); } Window xParent = RootWindow(_gl_display, _gl_screen); Colormap cmap = XCreateColormap( _gl_display, xParent, vi->visual, AllocNone); XSetWindowAttributes attr; memset(&attr, 0, sizeof(XSetWindowAttributes)); attr.colormap = cmap; attr.border_pixel = 0; _gl_width = ffctv_width; _gl_height = ffctv_height; attr.event_mask = ExposureMask | KeyPressMask | Button1MotionMask | ButtonPressMask | ButtonReleaseMask | StructureNotifyMask; _gl_win = XCreateWindow( _gl_display, xParent, 0, 0, _gl_width, _gl_height, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel | CWColormap | CWEventMask, &attr); if (!_gl_win) { XCloseDisplay(_gl_display); return 1; } XStoreName(_gl_display, _gl_win, "xjadeo"); Atom wmDelete = XInternAtom(_gl_display, "WM_DELETE_WINDOW", True); XSetWMProtocols(_gl_display, _gl_win, &wmDelete, 1); setup_window_hints_and_icon(_gl_display, _gl_win, xParent, 4096 /*TODO query max texture size*/); _gl_ctx = glXCreateContext(_gl_display, vi, 0, GL_TRUE); if (!_gl_ctx) { XDestroyWindow(_gl_display, _gl_win); XCloseDisplay(_gl_display); return 1; } #ifdef DND init_dnd(_gl_display, _gl_win); #endif XMapRaised(_gl_display, _gl_win); if (want_verbose) { if (glXIsDirect(_gl_display, _gl_ctx)) { printf("GLX: DRI enabled\n"); } else { printf("GLX: No DRI available\n"); } } XFree(vi); if (start_fullscreen) { gl_set_fullscreen(1); } if (start_ontop) { gl_set_ontop(1); } glXMakeCurrent(_gl_display, _gl_win, _gl_ctx); gl_init(); if (gl_reallocate_texture(movie_width, movie_height)) { gl_close_window (); return 1; } #if 1 // check for VBlank sync /* https://www.opengl.org/wiki/Swap_Interval ; -1 for adaptive */ int (*glXSwapIntervalSGI)(int interval) = (int (*)(int)) glXGetProcAddress((const GLubyte *)"glXSwapIntervalSGI"); GLint (*glXSwapIntervalMESA) (unsigned interval) = (GLint (*)(unsigned)) glXGetProcAddress((const GLubyte *)"glXSwapIntervalMESA"); int (*glXSwapIntervalEXT)(Display *dpy, GLXDrawable drw, int interval) = (int (*)(Display*, GLXDrawable, int)) glXGetProcAddress((const GLubyte *)"glXSwapIntervalEXT"); int vblank = -1; if (glXSwapIntervalSGI && check_glx_extention("GLX_SGI_swap_control")) { vblank = glXSwapIntervalSGI(1); if (want_verbose) printf("GLX: use SGI Vblank\n"); } else if (glXSwapIntervalMESA && check_glx_extention("GLX_MESA_swap_control")) { vblank = glXSwapIntervalMESA(1); if (want_verbose) printf("GLX: use MESA Vblank\n"); } else if (glXSwapIntervalEXT && check_glx_extention("GLX_EXT_swap_control")) { GLXDrawable drawable = glXGetCurrentDrawable(); if (drawable) { vblank = glXSwapIntervalEXT(_gl_display, drawable, 1); if (want_verbose) printf("GLX: use EXT Vblank\n"); } } else { if (!want_quiet) { fprintf(stderr, "openGL VBlank not synced\n"); } } // https://www.opengl.org/wiki/Swap_Interval#GPU_vs_CPU_synchronization //_gl_vblank_sync = (vblank == 0) ? 1 : 0; #endif return 0; } void gl_close_window() { #ifdef XDLG close_x_dialog(_gl_display); #endif #ifdef XFIB x_fib_close (_gl_display); #endif glXDestroyContext(_gl_display, _gl_ctx); XDestroyWindow(_gl_display, _gl_win); XCloseDisplay(_gl_display); } void gl_handle_events () { XEvent event; while (XPending(_gl_display) > 0) { XNextEvent(_gl_display, &event); #ifdef XDLG if (handle_xdlg_event(_gl_display, &event)) continue; #endif #ifdef XFIB if (x_fib_handle_events (_gl_display, &event)) { if (x_fib_status () > 0) { char *fn = x_fib_filename (); xapi_open (fn); free (fn); } } #endif if (event.xany.window != _gl_win) { continue; } #ifdef DND if (handle_dnd_event(_gl_display, _gl_win, &event)) continue; #endif switch (event.type) { case MapNotify: loop_run=1; break; case UnmapNotify: loop_run=0; break; case ConfigureNotify: if ( (event.xconfigure.width > 1 && event.xconfigure.height > 1) && (event.xconfigure.width != _gl_width || event.xconfigure.height != _gl_height) ) { gl_reshape(event.xconfigure.width, event.xconfigure.height); } break; case Expose: if (event.xexpose.count != 0) { break; } _gl_reexpose = true; break; case MotionNotify: if (osd_seeking && ui_syncsource() == SYNC_NONE && OSD_mode & OSD_POS) { const float sk = calc_slider (event.xmotion.x, event.xmotion.y); if (sk >= 0) ui_sync_manual (sk); } break; case ButtonPress: if (event.xbutton.button == 1 && ui_syncsource() == SYNC_NONE && OSD_mode & OSD_POS) { const float sk = calc_slider (event.xbutton.x, event.xbutton.y); if (sk >= 0) { ui_sync_manual (sk); osd_seeking = 1; force_redraw = 1; } } break; case ButtonRelease: if (osd_seeking) { osd_seeking = 0; force_redraw = 1; } else #ifdef XDLG if (event.xbutton.button == 3) { if (event.xbutton.x >= 0 && event.xbutton.x < _gl_width && event.xbutton.y >= 0 && event.xbutton.y < _gl_height) show_x_dialog(_gl_display, _gl_win, event.xbutton.x_root, event.xbutton.y_root ); } else #endif xjglButton(event.xbutton.button); break; case ReparentNotify: break; case KeyPress: { KeySym sym; char buf[6] = {0,0,0,0,0,0}; static XComposeStatus stat; int n = XLookupString(&event.xkey, buf, sizeof(buf), &sym, &stat); if (event.xkey.state & ControlMask && n == 1 && sym == XK_o) { #ifdef XFIB if (!(interaction_override & OVR_LOADFILE)) { x_fib_cfg_filter_callback(fib_filter_movie_filename); x_fib_show (_gl_display, _gl_win, 0, 0); } #endif } else if (event.xkey.state & ControlMask && n == 1 && sym == XK_w) { if (!(interaction_override & OVR_LOADFILE)) xapi_close (NULL); } else if (event.xkey.state & ControlMask && n == 1 && sym == XK_q) { if (!(interaction_override&OVR_QUIT_WMG)) loop_flag = 0; } else if (n == 1) { xjglKeyPress(sym, buf); } } break; case ClientMessage: if (!strcmp(XGetAtomName(_gl_display, event.xclient.message_type), "WM_PROTOCOLS")) { if ((interaction_override&OVR_QUIT_WMG) == 0) loop_flag=0; } break; default: break; } } if (_gl_reexpose) { _gl_reexpose = false; force_redraw = true; } static int periodic = 10; if (--periodic == 0) { periodic = 50 * framerate; // we should use 1/delay if delay > 0 XResetScreenSaver(_gl_display); // ..or spawn `xdg-screensaver` } } void gl_render (uint8_t *mybuffer) { xjglExpose(NULL); } void gl_resize (unsigned int x, unsigned int y) { XResizeWindow(_gl_display, _gl_win, x, y); XFlush(_gl_display); } void gl_position (int x, int y) { XMoveWindow(_gl_display, _gl_win, x, y); } void gl_get_window_size (unsigned int *w, unsigned int *h) { *w = _gl_width; *h = _gl_height; } void gl_get_window_pos (int *rx, int *ry) { Window dummy; XTranslateCoordinates (_gl_display, _gl_win, DefaultRootWindow(_gl_display), 0, 0, rx, ry, &dummy); while (dummy !=None) { int x = 0; int y = 0; XTranslateCoordinates (_gl_display, _gl_win, dummy, 0, 0, &x, &y, &dummy); if (dummy!=None) { (*rx)-=x; (*ry)-=y; } else { (*rx)+=x; (*ry)+=y; } } } void gl_set_ontop (int action) { if (action==2) _gl_ontop ^= 1; else _gl_ontop = action ? 1 : 0; glx_netwm("_NET_WM_STATE_ABOVE", _gl_ontop); } int gl_get_ontop () { return _gl_ontop; } void gl_set_fullscreen (int action) { if (action==2) _gl_fullscreen^=1; else _gl_fullscreen = action ? 1 : 0; glx_netwm("_NET_WM_STATE_FULLSCREEN", _gl_fullscreen); } int gl_get_fullscreen () { return _gl_fullscreen; } void gl_mousepointer (int action) { if (action==2) hide_mouse ^= 1; else hide_mouse = action ? 1 : 0; if (hide_mouse) { /* hide */ Cursor no_ptr; Pixmap bm_no; XColor black, dummy; Colormap colormap; static char bm_no_data[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; colormap = DefaultColormap (_gl_display, _gl_screen); if (!XAllocNamedColor (_gl_display, colormap, "black", &black, &dummy) ) return; bm_no = XCreateBitmapFromData (_gl_display, _gl_win, bm_no_data, 8, 8); no_ptr = XCreatePixmapCursor (_gl_display, bm_no, bm_no, &black, &black, 0, 0); XDefineCursor (_gl_display, _gl_win, no_ptr); XFreeCursor (_gl_display, no_ptr); if (bm_no != None) XFreePixmap (_gl_display, bm_no); XFreeColors (_gl_display,colormap, &black.pixel, 1, 0); } else { /* show */ XDefineCursor(_gl_display, _gl_win, 0); } } #endif xjadeo-0.8.10/src/xjadeo/display_x11.c0000644000175000017500000011512613747774274014372 00000000000000/* xjadeo - X11/XVideo display * * (C) 2006-2014 Robin Gareus * (C) 2006-2011 Luis Garrido * * 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. */ #include "xjadeo.h" #include "display.h" #define IMC // cache imlib2 image #undef IM_CUSTOM_COLORTABLE #ifdef CROPIMG int xoffset = 0; #endif #if (HAVE_LIBXV || HAVE_IMLIB2) #include #include "icons/xjadeo8.xpm" void xapi_open (void *d); void xapi_close (void *d); extern const vidout VO[]; extern int OSD_mode; // change via keystroke static Display *xj_dpy = NULL; static Window xj_rwin, xj_win; static int xj_screen; static GC xj_gc; static Atom xj_del_atom; static int xj_ontop = 0; static int xj_fullscreen = 0; static int xj_dwidth, xj_dheight; // cache window size for rendering currently only Xv static int xj_box[4]; // letterbox site - currently only Xv & imlib2 /******************************************************************************* * common X11 code */ static void net_wm_set_property(char *atom, int state) { XEvent xev; int set = _NET_WM_STATE_ADD; Atom type, property; if (state == _NET_WM_STATE_TOGGLE) set = _NET_WM_STATE_TOGGLE; else if (!state) set = _NET_WM_STATE_REMOVE; type = XInternAtom(xj_dpy,"_NET_WM_STATE", True); // was ,0); if (type == None) return; property = XInternAtom(xj_dpy,atom, 0); if (property == None) return; xev.type = ClientMessage; xev.xclient.type = ClientMessage; xev.xclient.window = xj_win; xev.xclient.message_type = type; xev.xclient.format = 32; xev.xclient.data.l[0] = set; xev.xclient.data.l[1] = property; xev.xclient.data.l[2] = 0; if (!XSendEvent(xj_dpy, DefaultRootWindow(xj_dpy), False, SubstructureRedirectMask|SubstructureNotifyMask, &xev)) { fprintf(stderr,"error changing X11 property\n"); } } static void xj_set_hints (void) { XTextProperty x_wname, x_iname; XSizeHints hints; XWMHints wmhints; char *w_name ="xjadeo"; char *i_name ="xjadeo"; /* default settings which allow arbitraray resizing of the window */ hints.flags = PSize | PMaxSize | PMinSize; hints.min_width = movie_width / 16; hints.min_height = movie_height / 16; /* maximum dimensions for Xv support are about 2048x2048 */ hints.max_width = 2048; hints.max_height = 2048; wmhints.input = True; XpmCreatePixmapFromData(xj_dpy, xj_rwin, xjadeo8_xpm, &wmhints.icon_pixmap, &wmhints.icon_mask, NULL); wmhints.flags = InputHint | IconPixmapHint | IconMaskHint ;// | StateHint if (XStringListToTextProperty (&w_name, 1, &x_wname) && XStringListToTextProperty (&i_name, 1 ,&x_iname)) { XSetWMProperties (xj_dpy, xj_win, &x_wname, &x_iname, NULL, 0, &hints, &wmhints, NULL); XFree (x_wname.value); XFree (x_iname.value); } } void xj_set_ontop (int action) { if (action==2) xj_ontop^=1; else xj_ontop=action; net_wm_set_property("_NET_WM_STATE_ABOVE", action); } int xj_get_ontop () { return xj_ontop; } void xj_set_fullscreen (int action) { if (action==2) xj_fullscreen^=1; else xj_fullscreen=action; net_wm_set_property("_NET_WM_STATE_FULLSCREEN", action); } int xj_get_fullscreen () { return (xj_fullscreen); } static void xj_hidecursor (void) { Cursor no_ptr; Pixmap bm_no; XColor black, dummy; const char bm_no_data[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; Colormap colormap = DefaultColormap (xj_dpy, xj_screen); if (!XAllocNamedColor (xj_dpy, colormap, "black", &black, &dummy)) return; bm_no = XCreateBitmapFromData (xj_dpy, xj_win, bm_no_data, 8, 8); no_ptr = XCreatePixmapCursor (xj_dpy, bm_no, bm_no, &black, &black, 0, 0); XDefineCursor (xj_dpy, xj_win, no_ptr); XFreeCursor (xj_dpy, no_ptr); if (bm_no != None) XFreePixmap(xj_dpy, bm_no); XFreeColors (xj_dpy, colormap, &black.pixel, 1, 0); } static void xj_showcursor (void) { XDefineCursor(xj_dpy,xj_win, 0); } void xj_mousepointer (int action) { if (action==2) hide_mouse ^= 1; else hide_mouse = action ? 1 : 0; if (hide_mouse) xj_hidecursor(); else xj_showcursor(); } void xj_get_window_pos (int *rx, int *ry) { Window dummy; XTranslateCoordinates( xj_dpy, xj_win, xj_rwin, 0, 0, rx, ry, &dummy); while (dummy !=None) { int x = 0; int y = 0; XTranslateCoordinates( xj_dpy, xj_win, dummy, 0, 0, &x, &y, &dummy); if (dummy!=None) { (*rx)-=x; (*ry)-=y; } else { (*rx)+=x; (*ry)+=y; } } } void xj_get_window_size (unsigned int *my_Width, unsigned int *my_Height) { int dummyX,dummyY; unsigned int dummy_u0, dummy_u1; Window dummy_w; XGetGeometry(xj_dpy, xj_win, &dummy_w, &dummyX,&dummyY,my_Width,my_Height,&dummy_u0,&dummy_u1); } void xj_resize (unsigned int x, unsigned int y) { XResizeWindow(xj_dpy, xj_win, x, y); } void xj_position (int x, int y) { XMoveWindow(xj_dpy, xj_win,x,y); } void xj_letterbox () { if (!want_letterbox) { /* scale */ xj_box[0]=xj_box[1]=0; xj_box[2]=xj_dwidth; xj_box[3]=xj_dheight; } else { /* letterbox; */ const float asp_src = movie_aspect?movie_aspect:(float)movie_width/(float)movie_height; const float asp_dst = (float)xj_dwidth / (float)xj_dheight; if (asp_dst > asp_src ) { xj_box[3]=xj_dheight; xj_box[2]=xj_box[3]*asp_src; } else { xj_box[2]=xj_dwidth; xj_box[3]=xj_box[2]/asp_src; } xj_box[0]=(xj_dwidth-xj_box[2])/2; xj_box[1]=(xj_dheight-xj_box[3])/2; } force_redraw=1; } #define EQCLAMP(var) if((var)<-999) { var=-1000;} if((var)>999) { var=1000;} #define EQMOD(PROP,STEP) if(!xj_get_eq(PROP,&value)){value+=(STEP); EQCLAMP(value); xj_set_eq(PROP,value); force_redraw=1;} // EQ prototypes #ifdef HAVE_LIBXV static int xv_set_eq(char *name, int value); static int xv_get_eq(char *name, int *value); #endif #ifdef HAVE_IMLIB2 static int im2_get_eq(char *name, int *value); static int im2_set_eq(char *name, int value); #endif static inline void xj_render () { VO[getvidmode()].render(buffer); } int xj_get_eq(char *prop, int *value) { #ifdef COLOREQ # ifdef HAVE_LIBXV if (getvidmode() == VO_XV) return (xv_get_eq(prop,value)); # endif # ifdef HAVE_IMLIB2 if (getvidmode() == VO_X11) return (im2_get_eq(prop,value)); # endif #endif if (value) *value=0; return (1); // error } static float calc_slider(int x, int y) { if (interaction_override&OVR_MENUSYNC) return -1; const int bar_x0 = xj_box[0] + (PB_X * xj_box[2] / (float)movie_width); const int bar_xw = xj_box[2] - 2 * PB_X; const int bar_y1 = xj_box[1] + xj_box[3] * BAR_Y; const int bar_y0 = bar_y1 - (PB_H - 4) * xj_box[3] / (float)movie_height; if (y > bar_y0 && y < bar_y1 && x >= bar_x0 && x <= bar_x0 + bar_xw) { return (100.f * (x - bar_x0) / (float)(bar_xw)); } return -1; } static void xj_set_eq (char *prop, int value) { #ifdef COLOREQ # ifdef HAVE_LIBXV if (getvidmode() == VO_XV) xv_set_eq(prop,value); # endif # ifdef HAVE_IMLIB2 if (getvidmode() == VO_X11) im2_set_eq(prop,value); # endif #endif } static void xj_handle_X_events (void) { XEvent event; int value = 0; // used for color-eq while(XPending(xj_dpy)) { XNextEvent(xj_dpy, &event); #ifdef XDLG if (handle_xdlg_event(xj_dpy, &event)) continue; #endif #ifdef XFIB if (x_fib_handle_events (xj_dpy, &event)) { if (x_fib_status () > 0) { char *fn = x_fib_filename (); xapi_open (fn); free (fn); } } #endif if (event.xany.window != xj_win) { continue; } #ifdef DND if (handle_dnd_event(xj_dpy, xj_win, &event)) continue; #endif switch (event.type) { case Expose: xj_render(); break; case ClientMessage: if (event.xclient.data.l[0] == xj_del_atom) { if ((interaction_override&OVR_QUIT_WMG) == 0) loop_flag=0; } break; case ConfigureNotify: if (event.xconfigure.width > 1 && event.xconfigure.height > 1) { unsigned int my_Width,my_Height; xj_get_window_size(&my_Width,&my_Height); xj_dwidth= my_Width; xj_dheight= my_Height; xj_letterbox(); } if (getvidmode() == VO_XV) xj_render(); break; case MapNotify: loop_run=1; break; case UnmapNotify: loop_run=0; break; case MotionNotify: if (osd_seeking && ui_syncsource() == SYNC_NONE && OSD_mode & OSD_POS) { const float sk = calc_slider (event.xmotion.x, event.xmotion.y); if (sk >= 0) ui_sync_manual (sk); } break; case ButtonPress: if (event.xbutton.button == 1 && ui_syncsource() == SYNC_NONE && OSD_mode & OSD_POS) { const float sk = calc_slider (event.xbutton.x, event.xbutton.y); if (sk >= 0) { ui_sync_manual (sk); osd_seeking = 1; force_redraw = 1; } } break; case ButtonRelease: if (osd_seeking) { osd_seeking = 0; force_redraw = 1; } else #ifdef XDLG if (event.xbutton.button == 3) { if (event.xbutton.x >= 0 && event.xbutton.x < xj_dwidth && event.xbutton.y >= 0 && event.xbutton.y < xj_dheight) show_x_dialog(xj_dpy, xj_win, event.xbutton.x_root, event.xbutton.y_root ); } else #endif { switch (event.xbutton.button) { case 2: XCresize_aspect(0); break; case 5: XCresize_aspect(-1); break; case 4: XCresize_aspect(1); break; default: break; } } break; case KeyPress: { KeySym key; char buf[100]; static XComposeStatus stat; int n = XLookupString(&event.xkey, buf, sizeof(buf), &key, &stat); if (event.xkey.state & ControlMask && n == 1 && key == XK_o) { #ifdef XFIB if (!(interaction_override & OVR_LOADFILE)) { x_fib_cfg_filter_callback(fib_filter_movie_filename); x_fib_show (xj_dpy, xj_win, 0, 0); } #endif } else if (event.xkey.state & ControlMask && n == 1 && key == XK_w) { if (!(interaction_override & OVR_LOADFILE)) xapi_close (NULL); } else if (event.xkey.state & ControlMask && n == 1 && key == XK_q) { if (!(interaction_override&OVR_QUIT_WMG)) loop_flag = 0; } else if (key == XK_Escape) { // 'Esc' if ((interaction_override&OVR_QUIT_KEY) == 0) { loop_flag=0; } else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_a ) //'a' // always-on-top xj_set_ontop(xj_ontop^=1); else if (key == XK_f ) //'f' // fullscreen xj_set_fullscreen(xj_fullscreen^=1); else if (key == XK_e ) {//'e' // toggle OSD EQ config OSD_mode^=OSD_EQ; if (xj_get_eq("brightness", &value) && xj_get_eq("contrast", &value)) { OSD_mode&=~OSD_EQ; // disable if not supported } force_redraw=1; } else if (key == XK_o ) { //'o' // OSD - offset in frames ui_osd_offset_cycle(); } else if (key == XK_p ) { //'p' // OSD - position toggle ui_osd_permute(); } else if (key == XK_s ) { //'s' // OSD - current smpte ui_osd_tc(); } else if (key == XK_l ) { //'l' // OSD - letterbox want_letterbox=!want_letterbox; xj_letterbox(); } else if (key == XK_v ) { //'v' // OSD - current video frame ui_osd_fn(); } else if (key == XK_b ) { //'b' // OSD - black box ui_osd_box(); } else if (key == XK_i ) { //'i' // Time Into ui_osd_fileinfo(); } else if (key == XK_g ) { //'g' // Geometry Into ui_osd_geo(); } else if (key == XK_r ) { //'r' // OSD - out of range ui_osd_outofrange(); } else if (key == XK_x ) { //'x' // OSD - seek position ui_osd_pos(); } else if (key == XK_C ) { //'C' // OSD - clear all ui_osd_clear(); } else if (key == XK_exclam ) { //'Shift-1' // EQMOD("brightness",-8) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_quotedbl || key == XK_at) { //'Shift-2' // EQMOD("brightness",+8) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_numbersign || key == XK_section) { //'Shift-3' // EQMOD("contrast",-8) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_dollar ) { //'Shift-4' // EQMOD("contrast",+8) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_1 ) { //'1' // EQMOD("brightness",-50) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_2 ) { //'2' // EQMOD("brightness",+50) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_3 ) { //'3' // EQMOD("contrast",-50) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_4 ) { //'4' // EQMOD("contrast",+50) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_5 ) { //'5' // EQMOD("gamma",-8) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_6 ) { //'6' // EQMOD("gamma",+8) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_7 ) { //'7' // EQMOD("saturation",-50) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_8 ) { //'8' // EQMOD("saturation",+100) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_9 ) { //'9' // EQMOD("hue",-5) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_0 ) { //'0' // EQMOD("hue",+5) else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); } } else if (key == XK_E ) { //'E' // if (getvidmode() == VO_XV) xj_set_eq("contrast",-500); // xvinfo default:64 (0..255) else xj_set_eq("contrast",0); xj_set_eq("brightness",0); xj_set_eq("saturation",0); xj_set_eq("hue",0); xj_set_eq("gamma",0); force_redraw=1; } else if (key == XK_period ) { //'.' // resize 100% XCresize_percent(100); } else if (key == XK_comma ) { //',' // resize to aspect ratio XCresize_aspect(0); } else if (key == XK_less ) { //'<' // resize *.83 XCresize_scale(-1); } else if (key == XK_greater ) { //'>' // resize *1.2 XCresize_scale(1); } else if (key == XK_backslash ) { // '\' // A/V offset XCtimeoffset(0, (unsigned int) key); } else if (key == XK_equal ) { //'=' // A/V offset XCtimeoffset(1, (unsigned int) key); } else if (key == XK_minus ) { //'-' A/V offset XCtimeoffset(-1, (unsigned int) key); } else if (key == XK_plus ) { //'+' // A/V offset XCtimeoffset(4, (unsigned int) key); puts("click +"); } else if (key == XK_underscore ) { //'_' A/V offset XCtimeoffset(-4, (unsigned int) key); puts("click _"); } else if (key == XK_braceright ) { //'}' // A/V offset XCtimeoffset(2, (unsigned int) key); } else if (key == XK_braceleft) { //'{' A/V offset XCtimeoffset(-2, (unsigned int) key); } else if (key == XK_m ) { // 'm' // toggle mouse pointer xj_mousepointer(2); #ifdef CROPIMG } else if (key == XK_bracketleft ) { // '[' // xoffset-=2; if (xoffset<0) xoffset=0; force_redraw=1; } else if (key == XK_bracketright ) { // ']' // xoffset+=2; if (xoffset>movie_width) xoffset=movie_width; force_redraw=1; #endif } else if (key == XK_BackSpace ) { // BACKSPACE if ((interaction_override&OVR_JCONTROL) == 0) jackt_rewind(); remote_notify(NTY_KEYBOARD, 310, "keypress=%d # backspace", (unsigned int) key); } else if (key == XK_space ) { // ' ' // SPACE if ((interaction_override&OVR_JCONTROL) == 0) jackt_toggle(); remote_notify(NTY_KEYBOARD, 310, "keypress=%d # space", (unsigned int) key); #if 0 // TEST - save current config -- JACK-SESSION } else if (key == XK_z ) { // 'z' saveconfig("/tmp/xj.cfg"); #endif } else { remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key); if (want_debug) printf("unassigned key pressed: 0x%x\n", (unsigned int)key); } } break; case ReparentNotify: break; default: //printf("unhandled X event: type: %ld = 0x%x\n", (long) event.type, (int) event.type); break; } } } #endif /* HAVE any of xv, imlib* */ /******************************************************************************* * XV !!! */ #if HAVE_LIBXV // TODO: support other YUV Xv - ffmpeg combinations // (depending on hardware and X) Xv can do more than YV12 ... #define FOURCC_YV12 0x32315659 /* YV12 YUV420P */ #define FOURCC_I420 0x30323449 /* I420 Intel Indeo 4 */ //#define FOURCC_YUV2 0x32595559 /* YUV2 YUV422 */ //#define FOURCC_UYVY 0x59565955 /* YUV 4:2:2 */ static int xv_swidth; static int xv_sheight; static XvPortID xv_port; static XShmSegmentInfo xv_shminfo; static XvImage *xv_image; static char *xv_buffer; static size_t xv_len; static int xv_one_memcpy = 0; static int xv_pic_format = FOURCC_I420; static void allocate_xvimage (void) { // YV12 has 12 bits per pixel. 8bitY 2+2 UV xv_len = movie_width * movie_height * 3 / 2 ; /* shared memory allocation etc. */ xv_image = XvShmCreateImage(xj_dpy, xv_port, xv_pic_format, NULL, // FIXME: use xjadeo buffer directly xv_swidth, xv_sheight, //768, 486, //720, 576, &xv_shminfo); /* TODO: check that this does not break support for some VIC's * let's ship xjadeo w/ xv_one_memcpy=0; - slower(?) but safer(!) * (maybe the U/V planes are swapped, byte order or whatever...) */ #if 0 if (xv_len != xv_image->data_size) xv_one_memcpy =0; else xv_one_memcpy=1; #else xv_one_memcpy=0; #endif xv_len = xv_image->data_size; xv_shminfo.shmid = shmget(IPC_PRIVATE, xv_len, IPC_CREAT | 0777); xv_image->data = xv_buffer = xv_shminfo.shmaddr = shmat(xv_shminfo.shmid, 0, 0); XShmAttach(xj_dpy, &xv_shminfo); XSync(xj_dpy, False); if (xv_shminfo.shmid > 0) shmctl (xv_shminfo.shmid, IPC_RMID, 0); } static void deallocate_xvimage(void) { XShmDetach(xj_dpy, &xv_shminfo); shmdt(xv_shminfo.shmaddr); XFree(xv_image); XSync(xj_dpy, False); xv_buffer=NULL; } static inline void xv_draw_colorkey(void) { XSetForeground( xj_dpy, xj_gc, 0 ); if (xj_box[1] > 0 ) { XFillRectangle( xj_dpy, xj_win, xj_gc, 0, 0, xj_box[2], xj_box[1]); XFillRectangle( xj_dpy, xj_win, xj_gc, 0, xj_box[1]+xj_box[3], xj_box[2], xj_box[1]+xj_box[3]+xj_box[1]); } /* else */ if (xj_box[0] > 0 ) { XFillRectangle( xj_dpy, xj_win, xj_gc, 0, 0, xj_box[0], xj_box[3]); XFillRectangle( xj_dpy, xj_win, xj_gc, xj_box[0]+xj_box[2], 0, xj_box[0]+xj_box[2]+xj_box[0], xj_box[3]); } } void render_xv (uint8_t *mybuffer) { if (!xv_buffer || !mybuffer) return; xv_draw_colorkey(); // TODO: only redraw on resize ? size_t Ylen = movie_width * movie_height; size_t UVlen = movie_width * movie_height/4; size_t mw2 = movie_width /2; size_t mh2 = movie_height /2; #ifdef CROPIMG Ylen*=2; UVlen*=2; mw2*=2; size_t stride = xv_swidth*2; // XXX #else size_t stride = xv_swidth; #endif // decode ffmpeg - YUV uint8_t *Yptr=mybuffer; // Y uint8_t *Uptr=Yptr + Ylen; // U uint8_t *Vptr=Uptr + UVlen; // V #ifdef CROPIMG Yptr+= xoffset; Uptr+= xoffset/2; Vptr+= xoffset/2; #endif if (xv_pic_format == FOURCC_I420 && xv_one_memcpy) { // copy YUV420P memcpy(xv_buffer,mybuffer,Ylen+UVlen+UVlen); // Y+U+V } else if (xv_pic_format == FOURCC_I420) { // encode YV420P stride_memcpy(xv_buffer+xv_image->offsets[0], Yptr, xv_swidth, xv_sheight, xv_image->pitches[0], stride); stride_memcpy(xv_buffer+xv_image->offsets[1], Uptr, mw2, mh2, xv_image->pitches[1], mw2); stride_memcpy(xv_buffer+xv_image->offsets[2], Vptr, mw2, mh2, xv_image->pitches[2], mw2); } else { // encode YV12 stride_memcpy(xv_buffer+xv_image->offsets[0], Yptr, xv_swidth, xv_sheight, xv_image->pitches[0], stride); stride_memcpy(xv_buffer+xv_image->offsets[1], Vptr, mw2, mh2, xv_image->pitches[1], mw2); stride_memcpy(xv_buffer+xv_image->offsets[2], Uptr, mw2, mh2, xv_image->pitches[2], mw2); } XvShmPutImage(xj_dpy, xv_port, xj_win, xj_gc, xv_image, 0, 0, /* sx, sy */ xv_swidth, xv_sheight, /* sw, sh */ #if 1 // letterbox xj_box[0],xj_box[1],xj_box[2],xj_box[3], #else 0, 0, /* dx, dy */ xj_dwidth, xj_dheight, /* dw, dh */ #endif True); XFlush(xj_dpy); // XSync(xj_dpy,False); } void newsrc_xv (void) { unsigned int my_Width,my_Height; deallocate_xvimage(); xv_swidth = movie_width; xv_sheight = movie_height; xj_dwidth = ffctv_width; xj_dheight = ffctv_height; xj_letterbox(); allocate_xvimage(); #if 1 // keep current window size when loading a new file ?? -> TODO config option // and also other video modes.. xj_get_window_size(&my_Width,&my_Height); #else my_Width=movie_width; my_Height=movie_height; #endif // or just update xj_dwidth, xj_dheight xj_resize( my_Width, my_Height); } #ifdef COLOREQ static int xv_set_eq(char *name, int value) { XvAttribute *attributes; int i, howmany, xv_atom; /* get available attributes */ attributes = XvQueryPortAttributes(xj_dpy, xv_port, &howmany); for (i = 0; i < howmany && attributes; i++) if (attributes[i].flags & XvSettable) { xv_atom = XInternAtom(xj_dpy, attributes[i].name, True); if (xv_atom != None) { int hue = 0, port_value, port_min, port_max; if (!strcmp(attributes[i].name, "XV_BRIGHTNESS") && (!strcasecmp(name, "brightness"))) port_value = value; else if (!strcmp(attributes[i].name, "XV_CONTRAST") && (!strcasecmp(name, "contrast"))) port_value = value; else if (!strcmp(attributes[i].name, "XV_SATURATION") && (!strcasecmp(name, "saturation"))) port_value = value; else if (!strcmp(attributes[i].name, "XV_HUE") && (!strcasecmp(name, "hue"))) { port_value = value; hue = 1; } else /* Note: since 22.01.2002 GATOS supports these attrs for radeons (NK) */ if (!strcmp(attributes[i].name, "XV_RED_INTENSITY") && (!strcasecmp(name, "red_intensity"))) port_value = value; else if (!strcmp(attributes[i].name, "XV_GREEN_INTENSITY") && (!strcasecmp(name, "green_intensity"))) port_value = value; else if (!strcmp(attributes[i].name, "XV_BLUE_INTENSITY") && (!strcasecmp(name, "blue_intensity"))) port_value = value; else continue; port_min = attributes[i].min_value; port_max = attributes[i].max_value; /* nvidia hue workaround */ if (hue && port_min == 0 && port_max == 360) port_value = (port_value >= 0) ? (port_value - 1000) : (port_value + 1000); /* -1000 <= val <= 1000 */ port_value = (int) rint((port_value + 1000.0) * (port_max - port_min) / 2000.0) + port_min; // printf("SET port value:%i\n",port_value); XvSetPortAttribute(xj_dpy, xv_port, xv_atom, port_value); return (0); // OK } } return (1); // not found. } static int xv_get_eq(char *name, int *value) { XvAttribute *attributes; int i, howmany, xv_atom; /* get available attributes */ attributes = XvQueryPortAttributes(xj_dpy, xv_port, &howmany); for (i = 0; i < howmany && attributes; i++) if (attributes[i].flags & XvGettable) { xv_atom = XInternAtom(xj_dpy, attributes[i].name, True); if (xv_atom != None) { int val, port_value = 0, port_min, port_max; XvGetPortAttribute(xj_dpy, xv_port, xv_atom, &port_value); port_min = attributes[i].min_value; port_max = attributes[i].max_value; /* -1000 <= val <= 1000 */ val = (port_value - port_min)*2000.0/(port_max - port_min) - 1000; //printf("DEBUG: got port att:%s value:%i\n", attributes[i].name, port_value); if (!strcmp(attributes[i].name, "XV_BRIGHTNESS") && (!strcasecmp(name, "brightness"))) *value = val; else if (!strcmp(attributes[i].name, "XV_CONTRAST") && (!strcasecmp(name, "contrast"))) *value = val; else if (!strcmp(attributes[i].name, "XV_SATURATION") && (!strcasecmp(name, "saturation"))) *value = val; else if (!strcmp(attributes[i].name, "XV_HUE") && (!strcasecmp(name, "hue"))) { /* nasty nvidia detect */ if (port_min == 0 && port_max == 360) *value = (val >= 0) ? (val - 100) : (val + 100); else *value = val; } else if (!strcmp(attributes[i].name, "XV_RED_INTENSITY") && (!strcasecmp(name, "red_intensity"))) *value = val; else if (!strcmp(attributes[i].name, "XV_GREEN_INTENSITY") && (!strcasecmp(name, "green_intensity"))) *value = val; else if (!strcmp(attributes[i].name, "XV_BLUE_INTENSITY") && (!strcasecmp(name, "blue_intensity"))) *value = val; else continue; return (0); // all right } } return (1); //error. } #endif int open_window_xv (void) { unsigned int ad_cnt; int fmt_cnt, got_port, i, k; int xv_have_YV12, xv_have_I420; long ev_mask; XGCValues values; XvAdaptorInfo *ad_info; XvImageFormatValues *fmt_info; if ( (xj_dpy=XOpenDisplay(NULL)) == NULL ) { fprintf( stderr, "Cannot connect to X server\n"); return (1); } xj_rwin = DefaultRootWindow(xj_dpy); xj_screen = DefaultScreen(xj_dpy); if (!XShmQueryExtension(xj_dpy)) return 1; /* So let's first check for an available adaptor and port */ if(Success != XvQueryAdaptors(xj_dpy, xj_rwin, &ad_cnt, &ad_info)) { /* Xv extension probably not present */ return (1); } for(i = 0, got_port = False; i < ad_cnt; ++i) { xv_port = ad_info[i].base_id; if (!want_quiet) fprintf(stdout, "Xv: %s: ports %ld - %ld\n", ad_info[i].name, ad_info[i].base_id, ad_info[i].base_id + ad_info[i].num_ports - 1); if (!(ad_info[i].type & XvImageMask)) { if (want_verbose) fprintf(stdout, "Xv: %s: XvImage NOT in capabilty list (%s%s%s%s%s )\n", ad_info[i].name, (ad_info[i].type & XvInputMask) ? " XvInput" : "", (ad_info[i]. type & XvOutputMask) ? " XvOutput" : "", (ad_info[i]. type & XvVideoMask) ? " XvVideo" : "", (ad_info[i]. type & XvStillMask) ? " XvStill" : "", (ad_info[i]. type & XvImageMask) ? " XvImage" : ""); continue; } fmt_info = XvListImageFormats(xj_dpy, ad_info[i].base_id,&fmt_cnt); if (!fmt_info || fmt_cnt == 0) { fprintf(stderr, "Xv: %s: NO supported formats\n", ad_info[i].name); continue; } for(xv_have_YV12=0, xv_have_I420=0, k=0; k < fmt_cnt; ++k) { if (want_debug) { fprintf(stderr, "INFO: Xvideo port %d: 0x%#08x (%c%c%c%c) %s", (int)xv_port, fmt_info[k].id, (fmt_info[k].id) & 0xff, (fmt_info[k].id > 8) & 0xff, (fmt_info[k].id > 16) & 0xff, (fmt_info[k].id > 24) & 0xff, (fmt_info[k].format == XvPacked) ? "packed" : "planar"); fprintf (stderr, " [%s]\n", fmt_info[k].guid); } if (FOURCC_YV12 == fmt_info[k].id) xv_have_YV12 = 1; if (FOURCC_I420 == fmt_info[k].id) xv_have_I420 = 1; } if (xv_have_I420) { xv_pic_format = FOURCC_I420; if (!want_quiet) fprintf(stderr,"XV: using YUV420P + Xvideo extension (I420)\n"); } else if (xv_have_YV12) { xv_pic_format = FOURCC_YV12; if (!want_quiet) fprintf(stderr,"XV: using YUV420P + Xvideo extension (YV12)\n"); } else { fprintf(stderr, "Xv: %s: could not find a suitable colormodel in ( ", ad_info[i].name); for (k = 0; k < fmt_cnt; ++k) { fprintf (stderr, "%#08x[%s] ", fmt_info[k].id, fmt_info[k].guid); } fprintf(stderr, ")\n"); XFree(fmt_info); continue; } XFree(fmt_info); for(xv_port = ad_info[i].base_id, k = 0; k < ad_info[i].num_ports; ++k, ++(xv_port)) { if(!XvGrabPort(xj_dpy, xv_port, CurrentTime)) { if (want_verbose) fprintf(stdout, "Xv: grabbed port %ld\n", xv_port); got_port = True; break; } } // TODO allow to ovverride (e.g. 2nd port) if(got_port) break; } /* for */ XvFreeAdaptorInfo(ad_info); if(!ad_cnt) { fprintf(stderr, "Xv: (ERROR) no adaptor found!\n"); return 1; } if(!got_port) { fprintf(stderr, "Xv: (ERROR) could not grab any port!\n"); return 1; } /* * default settings: source, destination and logical widht/height * are set to our well known dimensions. */ xv_swidth = movie_width; xv_sheight = movie_height; xj_dwidth = ffctv_width; xj_dheight = ffctv_height; xj_letterbox(); xj_win = XCreateSimpleWindow(xj_dpy, xj_rwin, -1, -1, xj_dwidth, xj_dheight, 0, XWhitePixel(xj_dpy, xj_screen), XBlackPixel(xj_dpy, xj_screen)); xj_set_hints(); ev_mask = KeyPressMask | ButtonPressMask | ButtonReleaseMask | Button1MotionMask | ExposureMask | StructureNotifyMask; //| PropertyChangeMask | PointerMotionMask; XSelectInput(xj_dpy, xj_win, ev_mask); #ifdef DND init_dnd(xj_dpy, xj_win); #endif XMapRaised(xj_dpy, xj_win); if ((xj_del_atom = XInternAtom(xj_dpy, "WM_DELETE_WINDOW", True)) != None) XSetWMProtocols(xj_dpy, xj_win, &xj_del_atom, 1); xj_gc = XCreateGC(xj_dpy, xj_win, 0, &values); allocate_xvimage(); if (start_ontop) xj_ontop=1; if (start_fullscreen) xj_fullscreen=1; xj_set_fullscreen(xj_fullscreen); xj_set_ontop(xj_ontop); #if 0 // XV_BRIGHTNESS XV_CONTRAST, XV_SATURATION , XV_COLORKEY // broken with some gfx boards. /* 004:<:003e: 20: Request(16): InternAtom only-if-exists=true(0x01) name='XV_COLORKEY' * 004:>:0x003e:32: Reply to InternAtom: atom=0x59("XV_COLORKEY") * 004:<:003f: 12: XVideo-Request(141,14): unknown * 004:>:003f:32: unexpected reply * 004:<:0040: 52: XVideo-Request(141,19): unknown * 004:<:0041: 52: XVideo-Request(141,19): unknown */ int value=0; Atom xj_a_colorkey = XInternAtom (xj_dpy, "XV_COLORKEY", True); if (xj_a_colorkey!=None && Success == XvGetPortAttribute(xj_dpy, xv_port, xj_a_colorkey, &value)) { XvSetPortAttribute(xj_dpy, xv_port, xj_a_colorkey, 0x00000000); // AARRGGBB } #endif return 0; } void close_window_xv(void) { #ifdef XDLG close_x_dialog(xj_dpy); #endif #ifdef XFIB x_fib_close (xj_dpy); #endif XvStopVideo(xj_dpy, xv_port, xj_win); if(xv_shminfo.shmaddr) { XShmDetach(xj_dpy, &xv_shminfo); shmdt(xv_shminfo.shmaddr); } if(xv_image) XFree(xv_image); XSync(xj_dpy, False); XFreeGC(xj_dpy, xj_gc); #if 1 if (!loop_flag) XSetCloseDownMode(xj_dpy, DestroyAll); #endif XDestroyWindow(xj_dpy, xj_win); XCloseDisplay(xj_dpy); } #if 1 // LEGACY wrapper functions void handle_X_events_xv (void) { xj_handle_X_events(); } void get_window_size_xv (unsigned int *my_Width, unsigned int *my_Height) { xj_get_window_size(my_Width,my_Height); } void get_window_pos_xv (int *x, int *y) { xj_get_window_pos(x,y); } void resize_xv (unsigned int x, unsigned int y) { xj_resize(x, y); } void position_xv (int x, int y) { xj_position(x, y); } #endif #endif /* HAVE_LIBXV */ /******************************************************************************* * * X11 / ImLib2 */ #if HAVE_IMLIB2 static int im_depth; static Visual *im_vis; static Colormap im_cm; static Imlib_Image im_image = NULL; int open_window_imlib2 (void) { XGCValues values; long ev_mask; if ( (xj_dpy=XOpenDisplay(NULL)) == NULL ) { fprintf( stderr, "Cannot connect to X server\n"); return (1); } xj_screen = DefaultScreen(xj_dpy); xj_rwin = RootWindow(xj_dpy, xj_screen); im_depth = DefaultDepth(xj_dpy, xj_screen); im_vis = DefaultVisual(xj_dpy, xj_screen); im_cm = DefaultColormap(xj_dpy, xj_screen); xj_dwidth = ffctv_width; xj_dheight = ffctv_height; xj_letterbox(); xj_win = XCreateSimpleWindow( xj_dpy, xj_rwin, 0, // x 0, // y xj_dwidth, // width xj_dheight, // height 0, // border BlackPixel(xj_dpy, xj_screen), WhitePixel(xj_dpy, xj_screen) ); xj_set_hints(); ev_mask = KeyPressMask | ButtonPressMask | ButtonReleaseMask | Button1MotionMask | ExposureMask | StructureNotifyMask; XSelectInput(xj_dpy, xj_win, ev_mask); #ifdef DND init_dnd(xj_dpy, xj_win); #endif XMapRaised(xj_dpy, xj_win); imlib_set_cache_size(4096 * 1024); // check imlib_context_set_dither(0); /* express interest in WM killing this app */ if ((xj_del_atom = XInternAtom(xj_dpy, "WM_DELETE_WINDOW", True)) != None) XSetWMProtocols(xj_dpy, xj_win, &xj_del_atom, 1); xj_gc = XCreateGC(xj_dpy, xj_win, 0, &values); imlib_context_set_display(xj_dpy); imlib_context_set_visual(im_vis); imlib_context_set_colormap(im_cm); imlib_context_set_drawable(xj_win); if (start_ontop) xj_ontop=1; if (start_fullscreen) xj_fullscreen=1; xj_set_fullscreen(xj_fullscreen); xj_set_ontop(xj_ontop); return 0; } void close_window_imlib2(void) { if (im_image) { imlib_context_set_image(im_image); imlib_free_image(); im_image = NULL; } #if 1 // if (loop_flag) XSetCloseDownMode(xj_dpy, RetainPermanent); else XSetCloseDownMode(xj_dpy, DestroyAll); #endif XDestroyWindow(xj_dpy, xj_win); XFreeGC(xj_dpy, xj_gc); XSync(xj_dpy, False); #if 0 XCloseDisplay(xj_dpy); #endif } #ifdef COLOREQ static int im_gamma = 0; static int im_brightness = 0; static int im_contrast = 0; static int im_colormod = 0; static int im2_set_eq(char *name, int value) { if (!strcasecmp(name, "brightness")) im_brightness = value; else if (!strcasecmp(name, "contrast")) im_contrast = value; else if (!strcasecmp(name, "gamma")) im_gamma = value; else return -1; im_colormod = 1; // TODO: set to 0 if all values 'normal' return 0; // ok } static int im2_get_eq(char *name, int *value) { if (!value) return 1; if (!strcasecmp(name, "brightness")) *value = im_brightness; else if (!strcasecmp(name, "contrast")) *value = im_contrast; else if (!strcasecmp(name, "gamma")) *value = im_gamma; else return -1; return 0; // ok } #ifdef IM_CUSTOM_COLORTABLE #define N_CLAMP(VAR) if((VAR)<0){(VAR)=0;} if ((VAR)>1){(VAR) = 1;} static void im_set_equalizer(void) { DATA8 red_table[256], green_table[256], blue_table[256], alpha_table[256]; float gamma, brightness, contrast; float rf, gf, bf; int k; brightness = im_brightness / 1000.0; contrast = tan(0.00095 * (im_contrast + 1000) * M_PI / 4); gamma = pow(2, im_gamma / -500.0); rf = 1.0/255.0; gf = 1.0/255.0; bf = 1.0/255.0; for (k = 0; k < 256; k++) { float s; s = pow(rf * k, gamma); s = (s - 0.5) * contrast + 0.5; s += brightness; N_CLAMP(s) red_table[k] = (DATA8) (s * 255); s = pow(gf * k, gamma); s = (s - 0.5) * contrast + 0.5; s += brightness; N_CLAMP(s) green_table[k] = (DATA8) (s * 255); s = pow(bf * k, gamma); s = (s - 0.5) * contrast + 0.5; s += brightness; N_CLAMP(s) blue_table[k] = (DATA8) (s * 255); alpha_table[k] = 255; } imlib_set_color_modifier_tables(red_table, green_table, blue_table, alpha_table); } #endif #endif void render_imlib2 (uint8_t *mybuffer) { Imlib_Image im_scaled = NULL; if (!mybuffer) return; #ifdef IMC DATA32 *data; if (!im_image) { im_image = imlib_create_image(movie_width, movie_height); imlib_context_set_image(im_image); //imlib_image_set_has_alpha(1); // slows things down dramatically ! } imlib_context_set_image(im_image); data=imlib_image_get_data(); #endif /*IMC*/ #ifdef IMLIB2RGBA # ifndef IMC uint8_t * rgbabuf = mybuffer; # else memcpy(data,mybuffer,4*sizeof(uint8_t)*movie_width*movie_height); # endif #else /* rgb24 -> rgba32 */ # ifndef IMC uint8_t * rgbabuf = malloc(4*sizeof(uint8_t)*movie_width*movie_height); # endif # if defined(__BIG_ENDIAN__) # ifndef IMC rgb2argb( rgbabuf, mybuffer, movie_width, movie_height); # else rgb2argb( (uint8_t*) data, mybuffer, movie_width, movie_height); # endif # else /* LITTLE ENDIAN */ # ifndef IMC rgb2abgr( rgbabuf, mybuffer, movie_width, movie_height); # else rgb2abgr( (uint8_t*) data, mybuffer, movie_width, movie_height); # endif # endif #endif #ifdef IMC imlib_image_put_back_data(data); #else //im_image = imlib_create_image_using_data(movie_width, movie_height, (DATA32*)rgbabuf); im_image = imlib_create_image_using_copied_data(movie_width, movie_height, (DATA32*)rgbabuf); //imlib_image_set_has_alpha(1); // beware. SLOW. #endif #ifdef COLOREQ if (im_colormod) { Imlib_Color_Modifier imcm; imcm = imlib_create_color_modifier(); imlib_context_set_color_modifier(imcm); #ifdef IM_CUSTOM_COLORTABLE im_set_equalizer(); #else imlib_modify_color_modifier_brightness(im_brightness/1000.0); // -1.0 .. 1.0 imlib_modify_color_modifier_contrast(im_contrast/1000.0+1.0); // 0.0 .. 2.0 imlib_modify_color_modifier_gamma(im_gamma/1000.0+1.0); // 0.0 .. 2.0 #endif imlib_apply_color_modifier(); imlib_free_color_modifier(); } #endif if (im_image) { imlib_context_set_image(im_image); if (xj_box[2] == movie_width && xj_box[3]== movie_height && xj_box[0] == 0 && xj_box[1]== 0) { imlib_render_image_on_drawable(xj_box[0], xj_box[1]); } else { #if 1 // draw black letter box bars Imlib_Image im_letterbox = NULL; int bw,bh,ox,oy; if (xj_box[0]0 && bh > 0) { im_letterbox=imlib_create_image(bw, bh); imlib_context_set_image(im_letterbox); imlib_context_set_color(0, 0, 0, 255); imlib_image_fill_rectangle(0, 0, bw, bh); imlib_render_image_on_drawable(0,0); imlib_render_image_on_drawable(ox,oy); imlib_free_image(); } #endif imlib_context_set_image(im_image); im_scaled=imlib_create_cropped_scaled_image(0,0,movie_width, movie_height,xj_box[2],xj_box[3]); imlib_context_set_image(im_scaled); //imlib_image_set_has_alpha(0); // beware. imlib_render_image_on_drawable(xj_box[0], xj_box[1]); imlib_free_image(); } #ifndef IMC imlib_context_set_image(im_image); imlib_free_image(); #endif } #ifndef IMLIB2RGBA # ifndef IMC free(rgbabuf); # endif #endif } void newsrc_imlib2 (void) { unsigned int my_Width,my_Height; #ifdef IMC if (im_image) { imlib_context_set_image(im_image); imlib_free_image(); im_image = NULL; } #endif xj_get_window_size(&my_Width,&my_Height); xj_dwidth = ffctv_width; xj_dheight = ffctv_height; xj_letterbox(); xj_resize( my_Width, my_Height); } #if 1 // LEGACY void handle_X_events_imlib2 (void) { xj_handle_X_events(); } void get_window_size_imlib2 (unsigned int *my_Width, unsigned int *my_Height) { xj_get_window_size(my_Width,my_Height); } void get_window_pos_imlib2 (int *x, int *y) { xj_get_window_pos(x,y); } void resize_imlib2 (unsigned int x, unsigned int y) { xj_resize(x, y); } void position_imlib2 (int x, int y) { xj_position(x, y); } #endif #endif xjadeo-0.8.10/src/xjadeo/weak_libjack.h0000644000175000017500000001167212620454615014627 00000000000000/* xjadeo - weak dynamic JACK linking * * (C) 2014 Robin Gareus * * 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. */ #ifndef XJADEO_WEAK_JACK_H #define XJADEO_WEAK_JACK_H #ifdef HAVE_CONFIG_H # include #endif #include #include #ifdef HAVE_JACKMIDI #include #endif #ifdef JACK_SESSION #include #endif #ifndef USE_WEAK_JACK #define WJACK_client_open1 jack_client_open #define WJACK_client_open2 jack_client_open #define WJACK_client_close jack_client_close #define WJACK_get_client_name jack_get_client_name #define WJACK_get_sample_rate jack_get_sample_rate #define WJACK_frames_since_cycle_start jack_frames_since_cycle_start #define WJACK_set_process_callback jack_set_process_callback #define WJACK_set_graph_order_callback jack_set_graph_order_callback #define WJACK_on_shutdown jack_on_shutdown #define WJACK_activate jack_activate #define WJACK_deactivate jack_deactivate #define WJACK_port_get_total_latency jack_port_get_total_latency #define WJACK_port_get_latency_range jack_port_get_latency_range #define WJACK_port_get_buffer jack_port_get_buffer #define WJACK_port_name jack_port_name #define WJACK_get_ports jack_get_ports #define WJACK_port_register jack_port_register #define WJACK_connect jack_connect #define WJACK_free jack_free #define WJACK_transport_locate jack_transport_locate #define WJACK_transport_start jack_transport_start #define WJACK_transport_stop jack_transport_stop #define WJACK_transport_query jack_transport_query #define WJACK_midi_get_event_count jack_midi_get_event_count #define WJACK_midi_event_get jack_midi_event_get #define WJACK_set_session_callback jack_set_session_callback #define WJACK_session_reply jack_session_reply #define WJACK_session_event_free jack_session_event_free #else /* */ jack_client_t * WJACK_client_open2 (const char *client_name, jack_options_t options, jack_status_t *status, char *uuid); jack_client_t * WJACK_client_open1 (const char *client_name, jack_options_t options, jack_status_t *status); int WJACK_client_close (jack_client_t *client); char * WJACK_get_client_name (jack_client_t *client); jack_nframes_t WJACK_get_sample_rate (jack_client_t *client); jack_nframes_t WJACK_frames_since_cycle_start (const jack_client_t *client); int WJACK_set_graph_order_callback (jack_client_t *client, JackGraphOrderCallback graph_callback, void *arg); int WJACK_set_process_callback (jack_client_t *client, JackProcessCallback process_callback, void *arg); void WJACK_on_shutdown (jack_client_t *client, JackShutdownCallback shutdown_callback, void *arg); int WJACK_activate (jack_client_t *client); int WJACK_deactivate (jack_client_t *client); #ifndef NEW_JACK_LATENCY_API jack_nframes_t WJACK_port_get_total_latency (jack_client_t *client, jack_port_t *port); #else void WJACK_port_get_latency_range (jack_port_t *port, jack_latency_callback_mode_t mode, jack_latency_range_t *range); #endif void * WJACK_port_get_buffer (jack_port_t *port, jack_nframes_t unused); const char * WJACK_port_name (const jack_port_t *port); const char ** WJACK_get_ports (jack_client_t *client, const char *port_name_pattern, const char *type_name_pattern, unsigned long flags); jack_port_t * WJACK_port_register (jack_client_t *client, const char *port_name, const char *port_type, unsigned long flags, unsigned long buffer_size); int WJACK_connect (jack_client_t *client, const char *source_port, const char *destination_port); void WJACK_free (void *ptr); /* */ int WJACK_transport_locate (jack_client_t *client, jack_nframes_t frame); void WJACK_transport_start (jack_client_t *client); void WJACK_transport_stop (jack_client_t *client); jack_transport_state_t WJACK_transport_query (const jack_client_t *client, jack_position_t *pos); #ifdef HAVE_JACKMIDI /* */ uint32_t WJACK_midi_get_event_count(void* port_buffer); int WJACK_midi_event_get(jack_midi_event_t *event, void *port_buffer, uint32_t event_index); #endif #ifdef JACK_SESSION /* */ int WJACK_set_session_callback (jack_client_t *client, JackSessionCallback session_callback, void *arg); int WJACK_session_reply (jack_client_t *client, jack_session_event_t *event); void WJACK_session_event_free (jack_session_event_t *event); #endif #endif // USE_WEAK_JACK #endif // XJADEO_WEAK_JACK_H xjadeo-0.8.10/src/xjadeo/libsofd.c0000644000175000017500000021354112620454615013635 00000000000000/* libSOFD - Simple Open File Dialog [for X11 without toolkit] * * Copyright (C) 2014 Robin Gareus * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* Test and example: * gcc -Wall -D XFIB_TEST -g -o sofd libsofd.c -lX11 * * public API documentation and example code at the bottom of this file * * This small lib may one day include openGL rendering and * wayland window support, but not today. Today we celebrate * 30 years of X11. */ #ifndef XFIB_TEST #include "xjadeo.h" #else #define XFIB #define HAVE_LIBXV #endif #include #include #include #include #include #include #include #include #include #include // shared 'recently used' implementation // sadly, xbel does not qualify as simple. // hence we use a simple format alike the // gtk-bookmark list (one file per line) #define MAX_RECENT_ENTRIES 24 #define MAX_RECENT_AGE (15552000) // 180 days (in sec) typedef struct { char path[1024]; time_t atime; } FibRecentFile; static FibRecentFile *_recentlist = NULL; static unsigned int _recentcnt = 0; static uint8_t _recentlock = 0; static int fib_isxdigit (const char x) { if ( (x >= '0' && x <= '9') || (x >= 'a' && x <= 'f') || (x >= 'A' && x <= 'F') ) return 1; return 0; } static void decode_3986 (char *str) { int len = strlen (str); int idx = 0; while (idx + 2 < len) { char *in = &str[idx]; if (('%' == *in) && fib_isxdigit (in[1]) && fib_isxdigit (in[2])) { char hexstr[3]; hexstr[0] = in[1]; hexstr[1] = in[2]; hexstr[2] = 0; long hex = strtol (hexstr, NULL, 16); *in = hex; memmove (&str[idx+1], &str[idx + 3], len - idx - 2); len -= 2; } ++idx; } } static char *encode_3986 (const char *str) { size_t alloc, newlen; char *ns = NULL; unsigned char in; size_t i = 0; size_t length; if (!str) return strdup (""); alloc = strlen (str) + 1; newlen = alloc; ns = (char*) malloc (alloc); length = alloc; while (--length) { in = *str; switch (in) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': case '~': case '.': case '-': case '/': case ',': // XXX not in RFC3986 ns[i++] = in; break; default: newlen += 2; /* this'll become a %XX */ if (newlen > alloc) { alloc *= 2; ns = (char*) realloc (ns, alloc); } snprintf (&ns[i], 4, "%%%02X", in); i += 3; break; } ++str; } ns[i] = 0; return ns; } void x_fib_free_recent () { free (_recentlist); _recentlist = NULL; _recentcnt = 0; } static int cmp_recent (const void *p1, const void *p2) { FibRecentFile *a = (FibRecentFile*) p1; FibRecentFile *b = (FibRecentFile*) p2; if (a->atime == b->atime) return 0; return a->atime < b->atime; } int x_fib_add_recent (const char *path, time_t atime) { int i; struct stat fs; if (_recentlock) { return -1; } if (access (path, R_OK)) { return -1; } if (stat (path, &fs)) { return -1; } if (!S_ISREG (fs.st_mode)) { return -1; } if (atime == 0) atime = time (NULL); if (MAX_RECENT_AGE > 0 && atime + MAX_RECENT_AGE < time (NULL)) { return -1; } for (i = 0; i < _recentcnt; ++i) { if (!strcmp (_recentlist[i].path, path)) { if (_recentlist[i].atime < atime) { _recentlist[i].atime = atime; } qsort (_recentlist, _recentcnt, sizeof(FibRecentFile), cmp_recent); return _recentcnt; } } _recentlist = realloc (_recentlist, (_recentcnt + 1) * sizeof(FibRecentFile)); _recentlist[_recentcnt].atime = atime; strcpy (_recentlist[_recentcnt].path, path); qsort (_recentlist, _recentcnt + 1, sizeof(FibRecentFile), cmp_recent); if (_recentcnt >= MAX_RECENT_ENTRIES) { return (_recentcnt); } return (++_recentcnt); } #ifdef PATHSEP #undef PATHSEP #endif #ifdef PLATFORM_WINDOWS #define DIRSEP '\\' #else #define DIRSEP '/' #endif static void mkpath(const char *dir) { char tmp[1024]; char *p; size_t len; snprintf (tmp, sizeof(tmp), "%s", dir); len = strlen(tmp); if (tmp[len - 1] == '/') tmp[len - 1] = 0; for (p = tmp + 1; *p; ++p) if(*p == DIRSEP) { *p = 0; #ifdef PLATFORM_WINDOWS mkdir(tmp); #else mkdir(tmp, 0755); #endif *p = DIRSEP; } #ifdef PLATFORM_WINDOWS mkdir(tmp); #else mkdir(tmp, 0755); #endif } int x_fib_save_recent (const char *fn) { if (_recentlock) { return -1; } if (!fn) { return -1; } if (_recentcnt < 1 || !_recentlist) { return -1; } int i; char *dn = strdup (fn); mkpath (dirname (dn)); free (dn); FILE *rf = fopen (fn, "w"); if (!rf) return -1; qsort (_recentlist, _recentcnt, sizeof(FibRecentFile), cmp_recent); for (i = 0; i < _recentcnt; ++i) { char *n = encode_3986 (_recentlist[i].path); fprintf (rf, "%s %lu\n", n, _recentlist[i].atime); free (n); } fclose (rf); return 0; } int x_fib_load_recent (const char *fn) { char tmp[1024]; if (_recentlock) { return -1; } if (!fn) { return -1; } x_fib_free_recent (); if (access (fn, R_OK)) { return -1; } FILE *rf = fopen (fn, "r"); if (!rf) return -1; while (fgets (tmp, sizeof(tmp), rf) && strlen (tmp) > 1 && strlen (tmp) < sizeof(tmp)) { char *s; tmp[strlen (tmp) - 1] = '\0'; // strip newline if (!(s = strchr (tmp, ' '))) { // find name <> atime sep continue; } *s = '\0'; time_t t = atol (++s); decode_3986 (tmp); x_fib_add_recent (tmp, t); } fclose (rf); return 0; } unsigned int x_fib_recent_count () { return _recentcnt; } const char *x_fib_recent_at (unsigned int i) { if (i >= _recentcnt) return NULL; return _recentlist[i].path; } #ifdef PLATFORM_WINDOWS #define PATHSEP "\\" #else #define PATHSEP "/" #endif const char *x_fib_recent_file(const char *appname) { static char recent_file[1024]; assert(!strchr(appname, '/')); const char *xdg = getenv("XDG_DATA_HOME"); if (xdg && (strlen(xdg) + strlen(appname) + 10) < sizeof(recent_file)) { sprintf(recent_file, "%s" PATHSEP "%s" PATHSEP "recent", xdg, appname); return recent_file; } #ifdef PLATFORM_WINDOWS const char * homedrive = getenv("HOMEDRIVE"); const char * homepath = getenv("HOMEPATH"); if (homedrive && homepath && (strlen(homedrive) + strlen(homepath) + strlen(appname) + 29) < PATH_MAX) { sprintf(recent_file, "%s%s" PATHSEP "Application Data" PATHSEP "%s" PATHSEP "recent.txt", homedrive, homepath, appname); return recent_file; } #elif defined PLATFORM_OSX const char *home = getenv("HOME"); if (home && (strlen(home) + strlen(appname) + 29) < sizeof(recent_file)) { sprintf(recent_file, "%s/Library/Preferences/%s/recent", home, appname); return recent_file; } #else const char *home = getenv("HOME"); if (home && (strlen(home) + strlen(appname) + 22) < sizeof(recent_file)) { sprintf(recent_file, "%s/.local/share/%s/recent", home, appname); return recent_file; } #endif return NULL; } #ifdef XFIB #if (defined HAVE_LIBXV || defined HAVE_IMLIB2 || (defined HAVE_GL && !defined PLATFORM_WINDOWS && !defined PLATFORM_OSX)) #include #include #include #include #include #include #include #ifndef MIN #define MIN(A,B) ( (A) < (B) ? (A) : (B) ) #endif #ifndef MAX #define MAX(A,B) ( (A) < (B) ? (B) : (A) ) #endif static Window _fib_win = 0; static GC _fib_gc = 0; static XColor _c_gray0, _c_gray1, _c_gray2, _c_gray3, _c_gray4, _c_gray5, _c_gray6; static Font _fibfont = 0; static Pixmap _pixbuffer = None; static int _fib_width = 100; static int _fib_height = 100; static int _btn_w = 0; static int _btn_span = 0; static int _fib_font_height = 0; static int _fib_dir_indent = 0; static int _fib_spc_norm = 0; static int _fib_font_ascent = 0; static int _fib_font_vsep = 0; static int _fib_font_size_width = 0; static int _fib_font_time_width = 0; static int _fib_place_width = 0; static int _scrl_f = 0; static int _scrl_y0 = -1; static int _scrl_y1 = -1; static int _scrl_my = -1; static int _scrl_mf = -1; static int _view_p = -1; static int _fsel = -1; static int _hov_b = -1; static int _hov_f = -1; static int _hov_p = -1; static int _hov_h = -1; static int _hov_l = -1; static int _hov_s = -1; static int _sort = 0; static int _columns = 0; static int _fib_filter_fn = 1; static int _fib_hidden_fn = 0; static int _fib_show_places = 0; static uint8_t _fib_mapped = 0; static uint8_t _fib_resized = 0; static unsigned long _dblclk = 0; static int _status = -2; static char _rv_open[1024] = ""; static char _fib_cfg_custom_places[1024] = ""; static char _fib_cfg_custom_font[256] = ""; static char _fib_cfg_title[128] = "xjadeo - Open Video File"; typedef struct { char name[256]; int x0; int xw; } FibPathButton; typedef struct { char name[256]; char strtime[32]; char strsize[32]; int ssizew; off_t size; time_t mtime; uint8_t flags; // 2: selected, 4: isdir 8: recent-entry FibRecentFile *rfp; } FibFileEntry; typedef struct { char text[24]; uint8_t flags; // 2: selected, 4: toggle, 8 disable int x0; int tw; int xw; void (*callback)(Display*); } FibButton; typedef struct { char name[256]; char path[1024]; uint8_t flags; // 1: hover, 2: selected, 4:add sep } FibPlace; static char _cur_path[1024] = ""; static FibFileEntry *_dirlist = NULL; static FibPathButton *_pathbtn = NULL; static FibPlace *_placelist = NULL; static int _dircount = 0; static int _pathparts = 0; static int _placecnt = 0; static FibButton _btn_ok; static FibButton _btn_cancel; static FibButton _btn_filter; static FibButton _btn_places; static FibButton _btn_hidden; static FibButton *_btns[] = {&_btn_places, &_btn_filter, &_btn_hidden, &_btn_cancel, &_btn_ok}; static int (*_fib_filter_function)(const char *filename); /* hardcoded layout */ #define DSEP 6 // px; horiz space beween elements, also l+r margin for file-list #define PSEP 4 // px; horiz space beween paths #define FILECOLUMN (17 * _fib_dir_indent) //px; min width of file-column #define LISTTOP 2.7 //em; top of the file-browser list #define LISTBOT 4.75 //em; bottom of the file-browers list #define BTNBTMMARGIN 0.75 //em; height/margin of the button row #define BTNPADDING 2 // px - only used for open/cancel buttons #define SCROLLBARW (3 + (_fib_spc_norm&~1)) //px; - should be SCROLLBARW = (N * 2 + 3) #define SCROLLBOXH 10 //px; arrow box top+bottom #define PLACESW _fib_place_width //px; #define PLACESWMAX (15 *_fib_spc_norm) //px; #define PATHBTNTOP _fib_font_vsep //px; offset by (_fib_font_ascent); #define FAREAMRGB 3 //px; base L+R margin #define FAREAMRGR (FAREAMRGB + 1) //px; right margin of file-area + 1 (line width) #define FAREAMRGL (_fib_show_places ? PLACESW + FAREAMRGB : FAREAMRGB) //px; left margin of file-area #define TEXTSEP 4 //px; #define FAREATEXTL (FAREAMRGL + TEXTSEP) //px; filename text-left FAREAMRGL + TEXTSEP #define SORTBTNOFF -10 //px; #define DBLCLKTME 200 //msec; double click time #define DRAW_OUTLINE #define DOUBLE_BUFFER static int query_font_geometry (Display *dpy, GC gc, const char *txt, int *w, int *h, int *a, int *d) { XCharStruct text_structure; int font_direction, font_ascent, font_descent; XFontStruct *fontinfo = XQueryFont (dpy, XGContextFromGC (gc)); if (!fontinfo) { return -1; } XTextExtents (fontinfo, txt, strlen (txt), &font_direction, &font_ascent, &font_descent, &text_structure); if (w) *w = XTextWidth (fontinfo, txt, strlen (txt)); if (h) *h = text_structure.ascent + text_structure.descent; if (a) *a = text_structure.ascent; if (d) *d = text_structure.descent; XFreeFontInfo (NULL, fontinfo, 1); return 0; } static void VDrawRectangle (Display *dpy, Drawable d, GC gc, int x, int y, unsigned int w, unsigned int h) { const unsigned long blackColor = BlackPixel (dpy, DefaultScreen (dpy)); #ifdef DRAW_OUTLINE XSetForeground (dpy, gc, _c_gray5.pixel); XDrawLine (dpy, d, gc, x + 1, y + h, x + w, y + h); XDrawLine (dpy, d, gc, x + w, y + 1, x + w, y + h); XSetForeground (dpy, gc, blackColor); XDrawLine (dpy, d, gc, x + 1, y, x + w, y); XDrawLine (dpy, d, gc, x, y + 1, x, y + h); #else XSetForeground (dpy, _fib_gc, blackColor); XDrawRectangle (dpy, d, gc, x, y, w, h); #endif } static void fib_expose (Display *dpy, Window realwin) { int i; XID win; const unsigned long whiteColor = WhitePixel (dpy, DefaultScreen (dpy)); const unsigned long blackColor = BlackPixel (dpy, DefaultScreen (dpy)); if (!_fib_mapped) return; if (_fib_resized #ifdef DOUBLE_BUFFER || !_pixbuffer #endif ) { #ifdef DOUBLE_BUFFER unsigned int w = 0, h = 0; if (_pixbuffer != None) { Window ignored_w; int ignored_i; unsigned int ignored_u; XGetGeometry(dpy, _pixbuffer, &ignored_w, &ignored_i, &ignored_i, &w, &h, &ignored_u, &ignored_u); if (w != _fib_width || h != _fib_height) { XFreePixmap (dpy, _pixbuffer); _pixbuffer = None; } } if (_pixbuffer == None) { XWindowAttributes wa; XGetWindowAttributes (dpy, realwin, &wa); _pixbuffer = XCreatePixmap (dpy, realwin, _fib_width, _fib_height, wa.depth); } #endif if (_pixbuffer != None) { XSetForeground (dpy, _fib_gc, _c_gray1.pixel); XFillRectangle (dpy, _pixbuffer, _fib_gc, 0, 0, _fib_width, _fib_height); } else { XSetForeground (dpy, _fib_gc, _c_gray1.pixel); XFillRectangle (dpy, realwin, _fib_gc, 0, 0, _fib_width, _fib_height); } _fib_resized = 0; } if (_pixbuffer == None) { win = realwin; } else { win = _pixbuffer; } // Top Row: dirs and up navigation int ppw = 0; int ppx = FAREAMRGB; for (i = _pathparts - 1; i >= 0; --i) { ppw += _pathbtn[i].xw + PSEP; if (ppw >= _fib_width - PSEP - _pathbtn[0].xw - FAREAMRGB) break; // XXX, first change is from "/" to "<", NOOP } ++i; // border-less "<" parent/up, IFF space is limited if (i > 0) { if (0 == _hov_p || (_hov_p > 0 && _hov_p < _pathparts - 1)) { XSetForeground (dpy, _fib_gc, _c_gray4.pixel); } else { XSetForeground (dpy, _fib_gc, blackColor); } XDrawString (dpy, win, _fib_gc, ppx, PATHBTNTOP, "<", 1); ppx += _pathbtn[0].xw + PSEP; if (i == _pathparts) --i; } _view_p = i; while (i < _pathparts) { if (i == _hov_p) { XSetForeground (dpy, _fib_gc, _c_gray0.pixel); } else { XSetForeground (dpy, _fib_gc, _c_gray2.pixel); } XFillRectangle (dpy, win, _fib_gc, ppx + 1, PATHBTNTOP - _fib_font_ascent, _pathbtn[i].xw - 1, _fib_font_height); VDrawRectangle (dpy, win, _fib_gc, ppx, PATHBTNTOP - _fib_font_ascent, _pathbtn[i].xw, _fib_font_height); XDrawString (dpy, win, _fib_gc, ppx + 1 + BTNPADDING, PATHBTNTOP, _pathbtn[i].name, strlen (_pathbtn[i].name)); _pathbtn[i].x0 = ppx; // current position ppx += _pathbtn[i].xw + PSEP; ++i; } // middle, scroll list of file names const int ltop = LISTTOP * _fib_font_vsep; const int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; const int fsel_height = 4 + llen * _fib_font_vsep; const int fsel_width = _fib_width - FAREAMRGL - FAREAMRGR - (llen < _dircount ? SCROLLBARW : 0); const int t_x = FAREATEXTL; int t_s = FAREATEXTL + fsel_width; int t_t = FAREATEXTL + fsel_width; // check which colums can be visible // depending on available width of window. _columns = 0; if (fsel_width > FILECOLUMN + _fib_font_size_width + _fib_font_time_width) { _columns |= 2; t_s = FAREAMRGL + fsel_width - _fib_font_time_width - TEXTSEP; } if (fsel_width > FILECOLUMN + _fib_font_size_width) { _columns |= 1; t_t = t_s - _fib_font_size_width - TEXTSEP; } int fstop = _scrl_f; // first entry in scroll position const int ttop = ltop - _fib_font_height + _fib_font_ascent; if (fstop > 0 && fstop + llen > _dircount) { fstop = MAX (0, _dircount - llen); _scrl_f = fstop; } // list header XSetForeground (dpy, _fib_gc, _c_gray3.pixel); XFillRectangle (dpy, win, _fib_gc, FAREAMRGL, ltop - _fib_font_vsep, fsel_width, _fib_font_vsep); // draw background of file list XSetForeground (dpy, _fib_gc, _c_gray2.pixel); XFillRectangle (dpy, win, _fib_gc, FAREAMRGL, ltop, fsel_width, fsel_height); #ifdef DRAW_OUTLINE VDrawRectangle (dpy, win, _fib_gc, FAREAMRGL, ltop - _fib_font_vsep -1, _fib_width - FAREAMRGL - FAREAMRGR, fsel_height + _fib_font_vsep + 1); #endif switch (_hov_h) { case 1: XSetForeground (dpy, _fib_gc, _c_gray0.pixel); XFillRectangle (dpy, win, _fib_gc, t_x + _fib_dir_indent - TEXTSEP + 1, ltop - _fib_font_vsep, t_t - t_x - _fib_dir_indent - 1, _fib_font_vsep); break; case 2: XSetForeground (dpy, _fib_gc, _c_gray0.pixel); XFillRectangle (dpy, win, _fib_gc, t_t - TEXTSEP + 1, ltop - _fib_font_vsep, _fib_font_size_width + TEXTSEP - 1, _fib_font_vsep); break; case 3: XSetForeground (dpy, _fib_gc, _c_gray0.pixel); XFillRectangle (dpy, win, _fib_gc, t_s - TEXTSEP + 1, ltop - _fib_font_vsep, TEXTSEP + TEXTSEP + _fib_font_time_width - 1, _fib_font_vsep); break; default: break; } // column headings and sort order int arp = MAX (2, _fib_font_height / 5); // arrow scale const int trioff = _fib_font_height - _fib_font_ascent - arp + 1; XPoint ptri[4] = { {0, ttop - trioff }, {arp, -arp - arp - 1}, {-arp - arp, 0}, {arp, arp + arp + 1}}; if (_sort & 1) { ptri[0].y = ttop -arp - arp - 1; ptri[1].y *= -1; ptri[3].y *= -1; } switch (_sort) { case 0: case 1: ptri[0].x = t_t + SORTBTNOFF + 2 - arp; XSetForeground (dpy, _fib_gc, _c_gray6.pixel); XFillPolygon (dpy, win, _fib_gc, ptri, 3, Convex, CoordModePrevious); XDrawLines (dpy, win, _fib_gc, ptri, 4, CoordModePrevious); break; case 2: case 3: if (_columns & 1) { ptri[0].x = t_s + SORTBTNOFF + 2 - arp; XSetForeground (dpy, _fib_gc, _c_gray6.pixel); XFillPolygon (dpy, win, _fib_gc, ptri, 3, Convex, CoordModePrevious); XDrawLines (dpy, win, _fib_gc, ptri, 4, CoordModePrevious); } break; case 4: case 5: if (_columns & 2) { ptri[0].x = FAREATEXTL + fsel_width + SORTBTNOFF + 2 - arp; XSetForeground (dpy, _fib_gc, _c_gray6.pixel); XFillPolygon (dpy, win, _fib_gc, ptri, 3, Convex, CoordModePrevious); XDrawLines (dpy, win, _fib_gc, ptri, 4, CoordModePrevious); } break; } #if 0 // bottom header bottom border XSetForeground (dpy, _fib_gc, _c_gray5.pixel); XSetLineAttributes (dpy, _fib_gc, 1, LineOnOffDash, CapButt, JoinMiter); XDrawLine (dpy, win, _fib_gc, FAREAMRGL + 1, ltop, FAREAMRGL + fsel_width, ltop); XSetLineAttributes (dpy, _fib_gc, 1, LineSolid, CapButt, JoinMiter); #endif XSetForeground (dpy, _fib_gc, _c_gray4.pixel); XDrawLine (dpy, win, _fib_gc, t_x + _fib_dir_indent - TEXTSEP, ltop - _fib_font_vsep + 3, t_x + _fib_dir_indent - TEXTSEP, ltop - 3); XSetForeground (dpy, _fib_gc, blackColor); XDrawString (dpy, win, _fib_gc, t_x + _fib_dir_indent, ttop, "Name", 4); if (_columns & 1) { XSetForeground (dpy, _fib_gc, _c_gray4.pixel); XDrawLine (dpy, win, _fib_gc, t_t - TEXTSEP, ltop - _fib_font_vsep + 3, t_t - TEXTSEP, ltop - 3); XSetForeground (dpy, _fib_gc, blackColor); XDrawString (dpy, win, _fib_gc, t_t, ttop, "Size", 4); } if (_columns & 2) { XSetForeground (dpy, _fib_gc, _c_gray4.pixel); XDrawLine (dpy, win, _fib_gc, t_s - TEXTSEP, ltop - _fib_font_vsep + 3, t_s - TEXTSEP, ltop - 3); XSetForeground (dpy, _fib_gc, blackColor); if (_pathparts > 0) XDrawString (dpy, win, _fib_gc, t_s, ttop, "Last Modified", 13); else XDrawString (dpy, win, _fib_gc, t_s, ttop, "Last Used", 9); } // scrollbar sep if (llen < _dircount) { const int sx0 = _fib_width - SCROLLBARW - FAREAMRGR; XSetForeground (dpy, _fib_gc, _c_gray4.pixel); XDrawLine (dpy, win, _fib_gc, sx0 - 1, ltop - _fib_font_vsep, #ifdef DRAW_OUTLINE sx0 - 1, ltop + fsel_height #else sx0 - 1, ltop - 1 #endif ); } // clip area for file-name XRectangle clp = {FAREAMRGL + 1, ltop, t_t - FAREAMRGL - TEXTSEP - TEXTSEP - 1, fsel_height}; // list files in view for (i = 0; i < llen; ++i) { const int j = i + fstop; if (j >= _dircount) break; const int t_y = ltop + (i+1) * _fib_font_vsep - 4; XSetForeground (dpy, _fib_gc, blackColor); if (_dirlist[j].flags & 2) { XSetForeground (dpy, _fib_gc, blackColor); XFillRectangle (dpy, win, _fib_gc, FAREAMRGL, t_y - _fib_font_ascent, fsel_width, _fib_font_height); XSetForeground (dpy, _fib_gc, whiteColor); } if (_hov_f == j && !(_dirlist[j].flags & 2)) { XSetForeground (dpy, _fib_gc, _c_gray4.pixel); } if (_dirlist[j].flags & 4) { XDrawString (dpy, win, _fib_gc, t_x, t_y, "D", 1); } XSetClipRectangles (dpy, _fib_gc, 0, 0, &clp, 1, Unsorted); XDrawString (dpy, win, _fib_gc, t_x + _fib_dir_indent, t_y, _dirlist[j].name, strlen (_dirlist[j].name)); XSetClipMask (dpy, _fib_gc, None); if (_columns & 1) // right-aligned 'size' XDrawString (dpy, win, _fib_gc, t_s - TEXTSEP - 2 - _dirlist[j].ssizew, t_y, _dirlist[j].strsize, strlen (_dirlist[j].strsize)); if (_columns & 2) XDrawString (dpy, win, _fib_gc, t_s, t_y, _dirlist[j].strtime, strlen (_dirlist[j].strtime)); } // scrollbar if (llen < _dircount) { float sl = (fsel_height + _fib_font_vsep - (SCROLLBOXH + SCROLLBOXH)) / (float) _dircount; sl = MAX ((8. / llen), sl); // 8px min height of scroller const int sy1 = llen * sl; const float mx = (fsel_height + _fib_font_vsep - (SCROLLBOXH + SCROLLBOXH) - sy1) / (float)(_dircount - llen); const int sy0 = fstop * mx; const int sx0 = _fib_width - SCROLLBARW - FAREAMRGR; const int stop = ltop - _fib_font_vsep; _scrl_y0 = stop + SCROLLBOXH + sy0; _scrl_y1 = _scrl_y0 + sy1; assert (fstop + llen <= _dircount); // scroll-bar background XSetForeground (dpy, _fib_gc, _c_gray3.pixel); XFillRectangle (dpy, win, _fib_gc, sx0, stop, SCROLLBARW, fsel_height + _fib_font_vsep); // scroller if (_hov_s == 0) { XSetForeground (dpy, _fib_gc, _c_gray0.pixel); } else { XSetForeground (dpy, _fib_gc, _c_gray1.pixel); } XFillRectangle (dpy, win, _fib_gc, sx0 + 1, stop + SCROLLBOXH + sy0, SCROLLBARW - 2, sy1); int scrw = (SCROLLBARW -3) / 2; // arrows top and bottom if (_hov_s == 1) { XSetForeground (dpy, _fib_gc, _c_gray0.pixel); } else { XSetForeground (dpy, _fib_gc, _c_gray1.pixel); } XPoint ptst[4] = { {sx0 + 1, stop + 8}, {scrw, -7}, {scrw, 7}, {-2 * scrw, 0}}; XFillPolygon (dpy, win, _fib_gc, ptst, 3, Convex, CoordModePrevious); XDrawLines (dpy, win, _fib_gc, ptst, 4, CoordModePrevious); if (_hov_s == 2) { XSetForeground (dpy, _fib_gc, _c_gray0.pixel); } else { XSetForeground (dpy, _fib_gc, _c_gray1.pixel); } XPoint ptsb[4] = { {sx0 + 1, ltop + fsel_height - 9}, {2*scrw, 0}, {-scrw, 7}, {-scrw, -7}}; XFillPolygon (dpy, win, _fib_gc, ptsb, 3, Convex, CoordModePrevious); XDrawLines (dpy, win, _fib_gc, ptsb, 4, CoordModePrevious); } else { _scrl_y0 = _scrl_y1 = -1; } if (_fib_show_places) { assert (_placecnt > 0); // heading XSetForeground (dpy, _fib_gc, _c_gray3.pixel); XFillRectangle (dpy, win, _fib_gc, FAREAMRGB, ltop - _fib_font_vsep, PLACESW - TEXTSEP, _fib_font_vsep); // body XSetForeground (dpy, _fib_gc, _c_gray2.pixel); XFillRectangle (dpy, win, _fib_gc, FAREAMRGB, ltop, PLACESW - TEXTSEP, fsel_height); #ifdef DRAW_OUTLINE VDrawRectangle (dpy, win, _fib_gc, FAREAMRGB, ltop - _fib_font_vsep -1, PLACESW - TEXTSEP, fsel_height + _fib_font_vsep + 1); #endif XSetForeground (dpy, _fib_gc, blackColor); XDrawString (dpy, win, _fib_gc, FAREAMRGB + TEXTSEP, ttop, "Places", 6); XRectangle pclip = {FAREAMRGB + 1, ltop, PLACESW - TEXTSEP -1, fsel_height}; XSetClipRectangles (dpy, _fib_gc, 0, 0, &pclip, 1, Unsorted); const int plx = FAREAMRGB + TEXTSEP; for (i = 0; i < llen && i < _placecnt; ++i) { const int ply = ltop + (i+1) * _fib_font_vsep - 4; if (i == _hov_l) { XSetForeground (dpy, _fib_gc, _c_gray4.pixel); } else { XSetForeground (dpy, _fib_gc, blackColor); } XDrawString (dpy, win, _fib_gc, plx, ply, _placelist[i].name, strlen (_placelist[i].name)); if (_placelist[i].flags & 4) { XSetForeground (dpy, _fib_gc, _c_gray3.pixel); const int plly = ply - _fib_font_ascent + _fib_font_height; const int pllx0 = FAREAMRGB; const int pllx1 = FAREAMRGB + (PLACESW - TEXTSEP); XDrawLine (dpy, win, _fib_gc, pllx0, plly, pllx1, plly); } } XSetClipMask (dpy, _fib_gc, None); if (_placecnt > llen) { const int plly = ltop + fsel_height - _fib_font_height + _fib_font_ascent; const int pllx0 = FAREAMRGB + (PLACESW - TEXTSEP) * .75; const int pllx1 = FAREAMRGB + (PLACESW - TEXTSEP - TEXTSEP); XSetForeground (dpy, _fib_gc, blackColor); XSetLineAttributes (dpy, _fib_gc, 1, LineOnOffDash, CapButt, JoinMiter); XDrawLine (dpy, win, _fib_gc, pllx0, plly, pllx1, plly); XSetLineAttributes (dpy, _fib_gc, 1, LineSolid, CapButt, JoinMiter); } } // Bottom Buttons const int numb = sizeof(_btns) / sizeof(FibButton*); int xtra = _fib_width - _btn_span; const int cbox = _fib_font_ascent - 2; const int bbase = _fib_height - BTNBTMMARGIN * _fib_font_vsep - BTNPADDING; const int cblw = cbox > 20 ? 5 : ( cbox > 9 ? 3 : 1); int bx = FAREAMRGB; for (i = 0; i < numb; ++i) { if (_btns[i]->flags & 8) { continue; } if (_btns[i]->flags & 4) { // checkbutton const int cby0 = bbase - cbox + 1 + BTNPADDING; if (i == _hov_b) { XSetForeground (dpy, _fib_gc, _c_gray4.pixel); } else { XSetForeground (dpy, _fib_gc, blackColor); } XDrawRectangle (dpy, win, _fib_gc, bx, cby0 - 1, cbox + 1, cbox + 1); if (i == _hov_b) { XSetForeground (dpy, _fib_gc, _c_gray5.pixel); } else { XSetForeground (dpy, _fib_gc, blackColor); } XDrawString (dpy, win, _fib_gc, BTNPADDING + bx + _fib_font_ascent, 1 + bbase + BTNPADDING, _btns[i]->text, strlen (_btns[i]->text)); if (i == _hov_b) { XSetForeground (dpy, _fib_gc, _c_gray0.pixel); } else { if (_btns[i]->flags & 2) { XSetForeground (dpy, _fib_gc, _c_gray1.pixel); } else { XSetForeground (dpy, _fib_gc, _c_gray2.pixel); } } XFillRectangle (dpy, win, _fib_gc, bx+1, cby0, cbox, cbox); if (_btns[i]->flags & 2) { XSetLineAttributes (dpy, _fib_gc, cblw, LineSolid, CapRound, JoinMiter); XSetForeground (dpy, _fib_gc, _c_gray6.pixel); XDrawLine (dpy, win, _fib_gc, bx + 2, cby0 + 1, bx + cbox - 1, cby0 + cbox - 2); XDrawLine (dpy, win, _fib_gc, bx + cbox - 1, cby0 + 1, bx + 2, cby0 + cbox - 2); XSetLineAttributes (dpy, _fib_gc, 1, LineSolid, CapButt, JoinMiter); } } else { if (xtra > 0) { bx += xtra; xtra = 0; } // pushbutton uint8_t can_hover = 1; // special case if (_btns[i] == &_btn_ok) { if (_fsel < 0 || _fsel >= _dircount) { can_hover = 0; } } if (can_hover && i == _hov_b) { XSetForeground (dpy, _fib_gc, _c_gray0.pixel); } else { XSetForeground (dpy, _fib_gc, _c_gray2.pixel); } XFillRectangle (dpy, win, _fib_gc, bx + 1, bbase - _fib_font_ascent, _btn_w - 1, _fib_font_height + BTNPADDING + BTNPADDING); VDrawRectangle (dpy, win, _fib_gc, bx, bbase - _fib_font_ascent, _btn_w, _fib_font_height + BTNPADDING + BTNPADDING); XDrawString (dpy, win, _fib_gc, bx + (_btn_w - _btns[i]->tw) * .5, 1 + bbase + BTNPADDING, _btns[i]->text, strlen (_btns[i]->text)); } _btns[i]->x0 = bx; bx += _btns[i]->xw + DSEP; } if (_pixbuffer != None) { XCopyArea(dpy, _pixbuffer, realwin, _fib_gc, 0, 0, _fib_width, _fib_height, 0, 0); } XFlush (dpy); } static void fib_reset () { _hov_p = _hov_f = _hov_h = _hov_l = -1; _scrl_f = 0; _fib_resized = 1; } static int cmp_n_up (const void *p1, const void *p2) { FibFileEntry *a = (FibFileEntry*) p1; FibFileEntry *b = (FibFileEntry*) p2; if ((a->flags & 4) && !(b->flags & 4)) return -1; if (!(a->flags & 4) && (b->flags & 4)) return 1; return strcmp (a->name, b->name); } static int cmp_n_down (const void *p1, const void *p2) { FibFileEntry *a = (FibFileEntry*) p1; FibFileEntry *b = (FibFileEntry*) p2; if ((a->flags & 4) && !(b->flags & 4)) return -1; if (!(a->flags & 4) && (b->flags & 4)) return 1; return strcmp (b->name, a->name); } static int cmp_t_up (const void *p1, const void *p2) { FibFileEntry *a = (FibFileEntry*) p1; FibFileEntry *b = (FibFileEntry*) p2; if ((a->flags & 4) && !(b->flags & 4)) return -1; if (!(a->flags & 4) && (b->flags & 4)) return 1; if (a->mtime == b->mtime) return 0; return a->mtime > b->mtime ? -1 : 1; } static int cmp_t_down (const void *p1, const void *p2) { FibFileEntry *a = (FibFileEntry*) p1; FibFileEntry *b = (FibFileEntry*) p2; if ((a->flags & 4) && !(b->flags & 4)) return -1; if (!(a->flags & 4) && (b->flags & 4)) return 1; if (a->mtime == b->mtime) return 0; return a->mtime > b->mtime ? 1 : -1; } static int cmp_s_up (const void *p1, const void *p2) { FibFileEntry *a = (FibFileEntry*) p1; FibFileEntry *b = (FibFileEntry*) p2; if ((a->flags & 4) && (b->flags & 4)) return 0; // dir, no size, retain order if ((a->flags & 4) && !(b->flags & 4)) return -1; if (!(a->flags & 4) && (b->flags & 4)) return 1; if (a->size == b->size) return 0; return a->size > b->size ? -1 : 1; } static int cmp_s_down (const void *p1, const void *p2) { FibFileEntry *a = (FibFileEntry*) p1; FibFileEntry *b = (FibFileEntry*) p2; if ((a->flags & 4) && (b->flags & 4)) return 0; // dir, no size, retain order if ((a->flags & 4) && !(b->flags & 4)) return -1; if (!(a->flags & 4) && (b->flags & 4)) return 1; if (a->size == b->size) return 0; return a->size > b->size ? 1 : -1; } static void fmt_size (Display *dpy, FibFileEntry *f) { if (f->size > 10995116277760) { sprintf (f->strsize, "%.0f TB", f->size / 1099511627776.f); } if (f->size > 1099511627776) { sprintf (f->strsize, "%.1f TB", f->size / 1099511627776.f); } else if (f->size > 10737418240) { sprintf (f->strsize, "%.0f GB", f->size / 1073741824.f); } else if (f->size > 1073741824) { sprintf (f->strsize, "%.1f GB", f->size / 1073741824.f); } else if (f->size > 10485760) { sprintf (f->strsize, "%.0f MB", f->size / 1048576.f); } else if (f->size > 1048576) { sprintf (f->strsize, "%.1f MB", f->size / 1048576.f); } else if (f->size > 10240) { sprintf (f->strsize, "%.0f KB", f->size / 1024.f); } else if (f->size >= 1000) { sprintf (f->strsize, "%.1f KB", f->size / 1024.f); } else { sprintf (f->strsize, "%.0f B", f->size / 1.f); } int sw = 0; query_font_geometry (dpy, _fib_gc, f->strsize, &sw, NULL, NULL, NULL); if (sw > _fib_font_size_width) { _fib_font_size_width = sw; } f->ssizew = sw; } static void fmt_time (Display *dpy, FibFileEntry *f) { struct tm *tmp; tmp = localtime (&f->mtime); if (!tmp) { return; } strftime (f->strtime, sizeof(f->strtime), "%F %H:%M", tmp); int tw = 0; query_font_geometry (dpy, _fib_gc, f->strtime, &tw, NULL, NULL, NULL); if (tw > _fib_font_time_width) { _fib_font_time_width = tw; } } static void fib_resort (const char * sel) { if (_dircount < 1) { return; } int (*sortfn)(const void *p1, const void *p2); switch (_sort) { case 1: sortfn = &cmp_n_down; break; case 2: sortfn = &cmp_s_down; break; case 3: sortfn = &cmp_s_up; break; case 4: sortfn = &cmp_t_down; break; case 5: sortfn = &cmp_t_up; break; default: sortfn = &cmp_n_up; break; } qsort (_dirlist, _dircount, sizeof(_dirlist[0]), sortfn); int i; for (i = 0; i < _dircount && sel; ++i) { if (!strcmp (_dirlist[i].name, sel)) { _fsel = i; break; } } } static void fib_select (Display *dpy, int item) { if (_fsel >= 0) { _dirlist[_fsel].flags &= ~2; } _fsel = item; if (_fsel >= 0 && _fsel < _dircount) { _dirlist[_fsel].flags |= 2; const int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; if (_fsel < _scrl_f) { _scrl_f = _fsel; } else if (_fsel >= _scrl_f + llen) { _scrl_f = 1 + _fsel - llen; } } else { _fsel = -1; } fib_expose (dpy, _fib_win); } int fib_filter_movie_filename (const char *name) { if (!_fib_filter_fn) return 1; const int l3 = strlen (name) - 3; const int l4 = l3 - 1; const int l5 = l4 - 1; const int l6 = l5 - 1; const int l9 = l6 - 3; if ( (l4 > 0 && ( !strcasecmp (&name[l4], ".avi") || !strcasecmp (&name[l4], ".mov") || !strcasecmp (&name[l4], ".ogg") || !strcasecmp (&name[l4], ".ogv") || !strcasecmp (&name[l4], ".mpg") || !strcasecmp (&name[l4], ".mov") || !strcasecmp (&name[l4], ".mp4") || !strcasecmp (&name[l4], ".mkv") || !strcasecmp (&name[l4], ".vob") || !strcasecmp (&name[l4], ".asf") || !strcasecmp (&name[l4], ".avs") || !strcasecmp (&name[l4], ".dts") || !strcasecmp (&name[l4], ".flv") || !strcasecmp (&name[l4], ".m4v") )) || (l5 > 0 && ( !strcasecmp (&name[l5], ".h264") || !strcasecmp (&name[l5], ".webm") )) || (l6 > 0 && ( !strcasecmp (&name[l6], ".dirac") )) || (l9 > 0 && ( !strcasecmp (&name[l9], ".matroska") )) || (l3 > 0 && ( !strcasecmp (&name[l3], ".dv") || !strcasecmp (&name[l3], ".ts") )) ) { return 1; } return 0; } static inline int fib_filter (const char *name) { if (_fib_filter_function) { return _fib_filter_function (name); } else { return 0; } } static void fib_pre_opendir (Display *dpy) { if (_dirlist) free (_dirlist); if (_pathbtn) free (_pathbtn); _dirlist = NULL; _pathbtn = NULL; _dircount = 0; _pathparts = 0; query_font_geometry (dpy, _fib_gc, "Size ", &_fib_font_size_width, NULL, NULL, NULL); fib_reset (); _fsel = -1; } static void fib_post_opendir (Display *dpy, const char *sel) { if (_dircount > 0) _fsel = 0; // select first else _fsel = -1; fib_resort (sel); if (_dircount > 0 && _fsel >= 0) { fib_select (dpy, _fsel); } else { fib_expose (dpy, _fib_win); } } static int fib_dirlistadd (Display *dpy, const int i, const char* path, const char *name, time_t mtime) { char tp[1024]; struct stat fs; if (!_fib_hidden_fn && name[0] == '.') return -1; if (!strcmp (name, ".")) return -1; if (!strcmp (name, "..")) return -1; strcpy (tp, path); strcat (tp, name); if (access (tp, R_OK)) { return -1; } if (stat (tp, &fs)) { return -1; } assert (i < _dircount); // could happen if dir changes while we're reading. if (i >= _dircount) return -1; if (S_ISDIR (fs.st_mode)) { _dirlist[i].flags |= 4; } else if (S_ISREG (fs.st_mode)) { if (!fib_filter (name)) return -1; } #if 0 // only needed with lstat() else if (S_ISLNK (fs.st_mode)) { if (!fib_filter (name)) return -1; } #endif else { return -1; } strcpy (_dirlist[i].name, name); _dirlist[i].mtime = mtime > 0 ? mtime : fs.st_mtime; _dirlist[i].size = fs.st_size; if (!(_dirlist[i].flags & 4)) fmt_size (dpy, &_dirlist[i]); fmt_time (dpy, &_dirlist[i]); return 0; } static int fib_openrecent (Display *dpy, const char *sel) { int i, j; assert (_recentcnt > 0); fib_pre_opendir (dpy); query_font_geometry (dpy, _fib_gc, "Last Used", &_fib_font_time_width, NULL, NULL, NULL); _dirlist = calloc (_recentcnt, sizeof(FibFileEntry)); _dircount = _recentcnt; for (j = 0, i = 0; j < _recentcnt; ++j) { char base[1024]; char *s = strrchr (_recentlist[j].path, '/'); if (!s || !*++s) continue; size_t len = (s - _recentlist[j].path); strncpy (base, _recentlist[j].path, len); base[len] = '\0'; if (!fib_dirlistadd (dpy, i, base, s, _recentlist[j].atime)) { _dirlist[i].rfp = &_recentlist[j]; _dirlist[i].flags |= 8; ++i; } } _dircount = i; fib_post_opendir (dpy, sel); return _dircount; } static int fib_opendir (Display *dpy, const char* path, const char *sel) { char *t0, *t1; int i; assert (path); if (strlen (path) == 0 && _recentcnt > 0) { // XXX we should use a better indication for this strcpy (_cur_path, ""); return fib_openrecent (dpy, sel); } assert (strlen (path) < sizeof(_cur_path) -1); assert (strlen (path) > 0); assert (strstr (path, "//") == NULL); assert (path[0] == '/'); fib_pre_opendir (dpy); query_font_geometry (dpy, _fib_gc, "Last Modified", &_fib_font_time_width, NULL, NULL, NULL); DIR *dir = opendir (path); if (!dir) { strcpy (_cur_path, "/"); } else { int i; struct dirent *de; strcpy (_cur_path, path); if (_cur_path[strlen (_cur_path) -1] != '/') strcat (_cur_path, "/"); while ((de = readdir (dir))) { if (!_fib_hidden_fn && de->d_name[0] == '.') continue; ++_dircount; } if (_dircount > 0) _dirlist = calloc (_dircount, sizeof(FibFileEntry)); rewinddir (dir); i = 0; while ((de = readdir (dir))) { if (!fib_dirlistadd (dpy, i, _cur_path, de->d_name, 0)) ++i; } _dircount = i; closedir (dir); } t0 = _cur_path; while (*t0 && (t0 = strchr (t0, '/'))) { ++_pathparts; ++t0; } assert (_pathparts > 0); _pathbtn = calloc (_pathparts + 1, sizeof(FibPathButton)); t1 = _cur_path; i = 0; while (*t1 && (t0 = strchr (t1, '/'))) { if (i == 0) { strcpy (_pathbtn[i].name, "/"); } else { *t0 = 0; strcpy (_pathbtn[i].name, t1); } query_font_geometry (dpy, _fib_gc, _pathbtn[i].name, &_pathbtn[i].xw, NULL, NULL, NULL); _pathbtn[i].xw += BTNPADDING + BTNPADDING; *t0 = '/'; t1 = t0 + 1; ++i; } fib_post_opendir (dpy, sel); return _dircount; } static int fib_open (Display *dpy, int item) { char tp[1024]; if (_dirlist[item].flags & 8) { assert (_dirlist[item].rfp); strcpy (_rv_open, _dirlist[item].rfp->path); _status = 1; return 0; } strcpy (tp, _cur_path); strcat (tp, _dirlist[item].name); if (_dirlist[item].flags & 4) { fib_opendir (dpy, tp, NULL); return 0; } else { _status = 1; strcpy (_rv_open, tp); } return 0; } static void cb_cancel (Display *dpy) { _status = -1; } static void cb_open (Display *dpy) { if (_fsel >= 0 && _fsel < _dircount) { fib_open (dpy, _fsel); } } static void sync_button_states () { if (_fib_show_places) _btn_places.flags |= 2; else _btn_places.flags &= ~2; if (_fib_filter_fn) // inverse -> show all _btn_filter.flags &= ~2; else _btn_filter.flags |= 2; if (_fib_hidden_fn) _btn_hidden.flags |= 2; else _btn_hidden.flags &= ~2; } static void cb_places (Display *dpy) { _fib_show_places = ! _fib_show_places; if (_placecnt < 1) _fib_show_places = 0; sync_button_states (); _fib_resized = 1; fib_expose (dpy, _fib_win); } static void cb_filter (Display *dpy) { _fib_filter_fn = ! _fib_filter_fn; sync_button_states (); char *sel = _fsel >= 0 ? strdup (_dirlist[_fsel].name) : NULL; fib_opendir (dpy, _cur_path, sel); free (sel); } static void cb_hidden (Display *dpy) { _fib_hidden_fn = ! _fib_hidden_fn; sync_button_states (); char *sel = _fsel >= 0 ? strdup (_dirlist[_fsel].name) : NULL; fib_opendir (dpy, _cur_path, sel); free (sel); } static int fib_widget_at_pos (Display *dpy, int x, int y, int *it) { const int btop = _fib_height - BTNBTMMARGIN * _fib_font_vsep - _fib_font_ascent - BTNPADDING; const int bbot = btop + _fib_font_height + BTNPADDING + BTNPADDING; const int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; const int ltop = LISTTOP * _fib_font_vsep; const int fbot = ltop + 4 + llen * _fib_font_vsep; const int ptop = PATHBTNTOP - _fib_font_ascent; assert (it); // paths at top if (y > ptop && y < ptop + _fib_font_height && _view_p >= 0 && _pathparts > 0) { int i = _view_p; *it = -1; if (i > 0) { // special case '<' if (x > FAREAMRGB && x <= FAREAMRGB + _pathbtn[0].xw) { *it = _view_p - 1; i = _pathparts; } } while (i < _pathparts) { if (x >= _pathbtn[i].x0 && x <= _pathbtn[i].x0 + _pathbtn[i].xw) { *it = i; break; } ++i; } assert (*it < _pathparts); if (*it >= 0) return 1; else return 0; } // buttons at bottom if (y > btop && y < bbot) { int i; *it = -1; for (i = 0; i < sizeof(_btns) / sizeof(FibButton*); ++i) { const int bx = _btns[i]->x0; if (_btns[i]->flags & 8) { continue; } if (x > bx && x < bx + _btns[i]->xw) { *it = i; } } if (*it >= 0) return 3; else return 0; } // main file area if (y >= ltop - _fib_font_vsep && y < fbot && x > FAREAMRGL && x < _fib_width - FAREAMRGR) { // scrollbar if (_scrl_y0 > 0 && x >= _fib_width - (FAREAMRGR + SCROLLBARW) && x <= _fib_width - FAREAMRGR) { if (y >= _scrl_y0 && y < _scrl_y1) { *it = 0; } else if (y >= _scrl_y1) { *it = 2; } else { *it = 1; } return 4; } // file-list else if (y >= ltop) { const int item = (y - ltop) / _fib_font_vsep + _scrl_f; *it = -1; if (item >= 0 && item < _dircount) { *it = item; } if (*it >= 0) return 2; else return 0; } else { *it = -1; const int fsel_width = _fib_width - FAREAMRGL - FAREAMRGR - (llen < _dircount ? SCROLLBARW : 0); const int t_s = FAREAMRGL + fsel_width - _fib_font_time_width - TEXTSEP - TEXTSEP; const int t_t = FAREAMRGL + fsel_width - TEXTSEP - _fib_font_size_width - ((_columns & 2) ? ( _fib_font_time_width + TEXTSEP + TEXTSEP) : 0); if (x >= fsel_width + FAREAMRGL) ; else if ((_columns & 2) && x >= t_s) *it = 3; else if ((_columns & 1) && x >= t_t) *it = 2; else if (x >= FAREATEXTL + _fib_dir_indent - TEXTSEP) *it = 1; if (*it >= 0) return 5; else return 0; } } // places list if (_fib_show_places && y >= ltop && y < fbot && x > FAREAMRGB && x < FAREAMRGL - FAREAMRGB) { const int item = (y - ltop) / _fib_font_vsep; *it = -1; if (item >= 0 && item < _placecnt) { *it = item; } if (*it >= 0) return 6; else return 0; } return 0; } static void fib_update_hover (Display *dpy, int need_expose, const int type, const int item) { int hov_p = -1; int hov_b = -1; int hov_h = -1; int hov_s = -1; #ifdef LIST_ENTRY_HOVER int hov_f = -1; int hov_l = -1; #endif switch (type) { case 1: hov_p = item; break; case 3: hov_b = item; break; case 4: hov_s = item; break; case 5: hov_h = item; break; #ifdef LIST_ENTRY_HOVER case 6: hov_l = item; break; case 2: hov_f = item; break; #endif default: break; } #ifdef LIST_ENTRY_HOVER if (hov_f != _hov_f) { _hov_f = hov_f; need_expose = 1; } if (hov_l != _hov_l) { _hov_l = hov_l; need_expose = 1; } #endif if (hov_b != _hov_b) { _hov_b = hov_b; need_expose = 1; } if (hov_p != _hov_p) { _hov_p = hov_p; need_expose = 1; } if (hov_h != _hov_h) { _hov_h = hov_h; need_expose = 1; } if (hov_s != _hov_s) { _hov_s = hov_s; need_expose = 1; } if (need_expose) { fib_expose (dpy, _fib_win); } } static void fib_motion (Display *dpy, int x, int y) { int it = -1; if (_scrl_my >= 0) { const int sdiff = y - _scrl_my; const int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; const int fsel_height = 4 + llen * _fib_font_vsep; const float sl = (fsel_height + _fib_font_vsep - (SCROLLBOXH + SCROLLBOXH)) / (float) _dircount; int news = _scrl_mf + sdiff / sl; if (news < 0) news = 0; if (news >= (_dircount - llen)) news = _dircount - llen; if (news != _scrl_f) { _scrl_f = news; fib_expose (dpy, _fib_win); } return; } const int type = fib_widget_at_pos (dpy, x, y, &it); fib_update_hover (dpy, 0, type, it); } static void fib_mousedown (Display *dpy, int x, int y, int btn, unsigned long time) { int it; switch (fib_widget_at_pos (dpy, x, y, &it)) { case 4: // scrollbar if (btn == 1) { _dblclk = 0; if (it == 0) { _scrl_my = y; _scrl_mf = _scrl_f; } else { int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; if (llen < 2) llen = 2; int news = _scrl_f; if (it == 1) { news -= llen - 1; } else { news += llen - 1; } if (news < 0) news = 0; if (news >= (_dircount - llen)) news = _dircount - llen; if (news != _scrl_f && _scrl_y0 >= 0) { assert (news >=0); _scrl_f = news; fib_update_hover (dpy, 1, 4, it); } } } break; case 2: // file-list if (btn == 4 || btn == 5) { const int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; int news = _scrl_f + ((btn == 4) ? - 1 : 1); if (news < 0) news = 0; if (news >= (_dircount - llen)) news = _dircount - llen; if (news != _scrl_f && _scrl_y0 >= 0) { assert (news >=0); _scrl_f = news; fib_update_hover (dpy, 1, 0, 0); } _dblclk = 0; } else if (btn == 1 && it >= 0 && it < _dircount) { if (_fsel == it) { if (time - _dblclk < DBLCLKTME) { fib_open (dpy, it); _dblclk = 0; } _dblclk = time; } else { fib_select (dpy, it); _dblclk = time; } if (_fsel >= 0) { if (!(_dirlist[_fsel].flags & 4)); } } break; case 1: // paths assert (_fsel < _dircount); assert (it >= 0 && it < _pathparts); { int i = 0; char path[1024] = "/"; while (++i <= it) { strcat (path, _pathbtn[i].name); strcat (path, "/"); } char *sel = NULL; if (i < _pathparts) sel = strdup (_pathbtn[i].name); else if (i == _pathparts && _fsel >= 0) sel = strdup (_dirlist[_fsel].name); fib_opendir (dpy, path, sel); free (sel); } break; case 3: // btn if (btn == 1 && _btns[it]->callback) { _btns[it]->callback (dpy); } break; case 5: // sort if (btn == 1) { switch (it) { case 1: if (_sort == 0) _sort = 1; else _sort = 0; break; case 2: if (_sort == 2) _sort = 3; else _sort = 2; break; case 3: if (_sort == 4) _sort = 5; else _sort = 4; break; } if (_fsel >= 0) { assert (_dirlist && _dircount >= _fsel); _dirlist[_fsel].flags &= ~2; char *sel = strdup (_dirlist[_fsel].name); fib_resort (sel); free (sel); } else { fib_resort (NULL); _fsel = -1; } fib_reset (); _hov_h = it; fib_select (dpy, _fsel); } break; case 6: if (btn == 1 && it >= 0 && it < _placecnt) { fib_opendir (dpy, _placelist[it].path, NULL); } break; default: break; } } static void fib_mouseup (Display *dpy, int x, int y, int btn, unsigned long time) { _scrl_my = -1; } static void add_place_raw (Display *dpy, const char *name, const char *path) { _placelist = realloc (_placelist, (_placecnt + 1) * sizeof(FibPlace)); strcpy (_placelist[_placecnt].path, path); strcpy (_placelist[_placecnt].name, name); _placelist[_placecnt].flags = 0; int sw = 0; query_font_geometry (dpy, _fib_gc, name, &sw, NULL, NULL, NULL); if (sw > _fib_place_width) { _fib_place_width = sw; } ++_placecnt; } static int add_place_places (Display *dpy, const char *name, const char *url) { char const * path; struct stat fs; int i; if (!url || strlen (url) < 1) return -1; if (!name || strlen (name) < 1) return -1; if (url[0] == '/') { path = url; } else if (!strncmp (url, "file:///", 8)) { path = &url[7]; } else { return -1; } if (access (path, R_OK)) { return -1; } if (stat (path, &fs)) { return -1; } if (!S_ISDIR (fs.st_mode)) { return -1; } for (i = 0; i < _placecnt; ++i) { if (!strcmp (path, _placelist[i].path)) { return -1; } } add_place_raw (dpy, name, path); return 0; } static int parse_gtk_bookmarks (Display *dpy, const char *fn) { char tmp[1024]; if (access (fn, R_OK)) { return -1; } FILE *bm = fopen (fn, "r"); if (!bm) return -1; int found = 0; while (fgets (tmp, sizeof(tmp), bm) && strlen (tmp) > 1 && strlen (tmp) < sizeof(tmp)) { char *s, *n; tmp[strlen (tmp) - 1] = '\0'; // strip newline if ((s = strchr (tmp, ' '))) { *s = '\0'; n = strdup (++s); decode_3986 (tmp); if (!add_place_places (dpy, n, tmp)) { ++found; } free (n); } else if ((s = strrchr (tmp, '/'))) { n = strdup (++s); decode_3986 (tmp); if (!add_place_places (dpy, n, tmp)) { ++found; } free (n); } } fclose (bm); return found; } static const char *ignore_mountpoints[] = { "/bin", "/boot", "/dev", "/etc", "/lib", "/live", "/mnt", "/opt", "/root", "/sbin", "/srv", "/tmp", "/usr", "/var", "/proc", "/sbin", "/net", "/sys" }; static const char *ignore_fs[] = { "auto", "autofs", "debugfs", "devfs", "devpts", "ecryptfs", "fusectl", "kernfs", "linprocfs", "proc", "ptyfs", "rootfs", "selinuxfs", "sysfs", "tmpfs", "usbfs", "nfsd", "rpc_pipefs", }; static const char *ignore_devices[] = { "binfmt_", "devpts", "gvfs", "none", "nfsd", "sunrpc", "/dev/loop", "/dev/vn" }; static int check_mount (const char *mountpoint, const char *fs, const char *device) { int i; if (!mountpoint || !fs || !device) return -1; //printf("%s %s %s\n", mountpoint, fs, device); for (i = 0 ; i < sizeof(ignore_mountpoints) / sizeof(char*); ++i) { if (!strncmp (mountpoint, ignore_mountpoints[i], strlen (ignore_mountpoints[i]))) { return 1; } } if (!strncmp (mountpoint, "/home", 5)) { return 1; } for (i = 0 ; i < sizeof(ignore_fs) / sizeof(char*); ++i) { if (!strncmp (fs, ignore_fs[i], strlen (ignore_fs[i]))) { return 1; } } for (i = 0 ; i < sizeof(ignore_devices) / sizeof(char*); ++i) { if (!strncmp (device, ignore_devices[i], strlen (ignore_devices[i]))) { return 1; } } return 0; } static int read_mtab (Display *dpy, char *mtab) { FILE *mt = fopen (mtab, "r"); if (!mt) return -1; int found = 0; struct mntent *mntent; while ((mntent = getmntent (mt)) != NULL) { char *s; if (check_mount (mntent->mnt_dir, mntent->mnt_type, mntent->mnt_fsname)) continue; if ((s = strrchr (mntent->mnt_dir, '/'))) { ++s; } else { s = mntent->mnt_dir; } if (!add_place_places (dpy, s, mntent->mnt_dir)) { ++found; } } fclose (mt); return found; } static void populate_places (Display *dpy) { char tmp[1024]; int spacer = -1; if (_placecnt > 0) return; _fib_place_width = 0; if (_recentcnt > 0) { add_place_raw (dpy, "Recently Used", ""); _placelist[0].flags |= 4; } add_place_places (dpy, "Home", getenv ("HOME")); if (getenv ("HOME")) { strcpy (tmp, getenv ("HOME")); strcat (tmp, "/Desktop"); add_place_places (dpy, "Desktop", tmp); } add_place_places (dpy, "Filesystem", "/"); if (_placecnt > 0) spacer = _placecnt -1; if (strlen (_fib_cfg_custom_places) > 0) { parse_gtk_bookmarks (dpy, _fib_cfg_custom_places); } if (read_mtab (dpy, "/proc/mounts") < 1) { read_mtab (dpy, "/etc/mtab"); } int parsed_bookmarks = 0; if (!parsed_bookmarks && getenv ("HOME")) { strcpy (tmp, getenv ("HOME")); strcat (tmp, "/.gtk-bookmarks"); if (parse_gtk_bookmarks (dpy, tmp) > 0) { parsed_bookmarks = 1; } } if (!parsed_bookmarks && getenv ("XDG_CONFIG_HOME")) { strcpy (tmp, getenv ("XDG_CONFIG_HOME")); strcat (tmp, "/gtk-3.0/bookmarks"); if (parse_gtk_bookmarks (dpy, tmp) > 0) { parsed_bookmarks = 1; } } if (!parsed_bookmarks && getenv ("HOME")) { strcpy (tmp, getenv ("HOME")); strcat (tmp, "/.config/gtk-3.0/bookmarks"); if (parse_gtk_bookmarks (dpy, tmp) > 0) { parsed_bookmarks = 1; } } if (_fib_place_width > 0) { _fib_place_width = MIN (_fib_place_width + TEXTSEP + _fib_dir_indent /*extra*/ , PLACESWMAX); } if (spacer > 0 && spacer < _placecnt -1) { _placelist[ spacer ].flags |= 4; } } static uint8_t font_err = 0; static int x_error_handler (Display *d, XErrorEvent *e) { font_err = 1; return 0; } int x_fib_show (Display *dpy, Window parent, int x, int y) { if (_fib_win) { XSetInputFocus (dpy, _fib_win, RevertToParent, CurrentTime); return -1; } _status = 0; _rv_open[0] = '\0'; Colormap colormap = DefaultColormap (dpy, DefaultScreen (dpy)); _c_gray1.flags= DoRed | DoGreen | DoBlue; _c_gray0.red = _c_gray0.green = _c_gray0.blue = 61710; // 95% hover prelight _c_gray1.red = _c_gray1.green = _c_gray1.blue = 60416; // 93% window bg, scrollbar-fg _c_gray2.red = _c_gray2.green = _c_gray2.blue = 54016; // 83% button & list bg _c_gray3.red = _c_gray3.green = _c_gray3.blue = 48640; // 75% heading + scrollbar-bg _c_gray4.red = _c_gray4.green = _c_gray4.blue = 26112; // 40% prelight text, sep lines _c_gray5.red = _c_gray5.green = _c_gray5.blue = 12800; // 20% 3D border _c_gray6.red = _c_gray6.green = _c_gray6.blue = 6400; // 10% checkbox cross, sort triangles if (!XAllocColor (dpy, colormap, &_c_gray0)) return -1; if (!XAllocColor (dpy, colormap, &_c_gray1)) return -1; if (!XAllocColor (dpy, colormap, &_c_gray2)) return -1; if (!XAllocColor (dpy, colormap, &_c_gray3)) return -1; if (!XAllocColor (dpy, colormap, &_c_gray4)) return -1; if (!XAllocColor (dpy, colormap, &_c_gray5)) return -1; if (!XAllocColor (dpy, colormap, &_c_gray6)) return -1; XSetWindowAttributes attr; memset (&attr, 0, sizeof(XSetWindowAttributes)); attr.border_pixel = _c_gray2.pixel; attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask | ConfigureNotify | StructureNotifyMask | PointerMotionMask | LeaveWindowMask; _fib_win = XCreateWindow ( dpy, DefaultRootWindow (dpy), x, y, _fib_width, _fib_height, 1, CopyFromParent, InputOutput, CopyFromParent, CWEventMask | CWBorderPixel, &attr); if (!_fib_win) { return 1; } if (parent) XSetTransientForHint (dpy, _fib_win, parent); XStoreName (dpy, _fib_win, "Select File"); Atom wmDelete = XInternAtom (dpy, "WM_DELETE_WINDOW", True); XSetWMProtocols (dpy, _fib_win, &wmDelete, 1); _fib_gc = XCreateGC (dpy, _fib_win, 0, NULL); XSetLineAttributes (dpy, _fib_gc, 1, LineSolid, CapButt, JoinMiter); const char dl[1] = {1}; XSetDashes (dpy, _fib_gc, 0, dl, 1); int (*handler)(Display *, XErrorEvent *) = XSetErrorHandler (&x_error_handler); #define _XTESTFONT(FN) \ { \ font_err = 0; \ _fibfont = XLoadFont (dpy, FN); \ XSetFont (dpy, _fib_gc, _fibfont); \ XSync (dpy, False); \ } font_err = 1; if (getenv ("XJFONT")) _XTESTFONT (getenv ("XJFONT")); if (font_err && strlen (_fib_cfg_custom_font) > 0) _XTESTFONT (_fib_cfg_custom_font); if (font_err) _XTESTFONT ("-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*"); if (font_err) _XTESTFONT ("-*-verdana-medium-r-normal-*-12-*-*-*-*-*-*-*"); if (font_err) _XTESTFONT ("-misc-fixed-medium-r-normal-*-13-*-*-*-*-*-*-*"); if (font_err) _XTESTFONT ("-misc-fixed-medium-r-normal-*-12-*-*-*-*-*-*-*"); if (font_err) _fibfont = None; XSync (dpy, False); XSetErrorHandler (handler); if (_fib_font_height == 0) { // 1st time only query_font_geometry (dpy, _fib_gc, "D ", &_fib_dir_indent, NULL, NULL, NULL); query_font_geometry (dpy, _fib_gc, "_", &_fib_spc_norm, NULL, NULL, NULL); if (query_font_geometry (dpy, _fib_gc, "|0Yy", NULL, &_fib_font_height, &_fib_font_ascent, NULL)) { XFreeGC (dpy, _fib_gc); XDestroyWindow (dpy, _fib_win); _fib_win = 0; return -1; } _fib_font_height += 3; _fib_font_ascent += 2; _fib_font_vsep = _fib_font_height + 2; } populate_places (dpy); strcpy (_btn_ok.text, "Open"); strcpy (_btn_cancel.text, "Cancel"); strcpy (_btn_filter.text, "List All Files"); strcpy (_btn_places.text, "Show Places"); strcpy (_btn_hidden.text, "Show Hidden"); _btn_ok.callback = &cb_open; _btn_cancel.callback = &cb_cancel; _btn_filter.callback = &cb_filter; _btn_places.callback = &cb_places; _btn_hidden.callback = &cb_hidden; _btn_filter.flags |= 4; _btn_places.flags |= 4; _btn_hidden.flags |= 4; if (!_fib_filter_function) { _btn_filter.flags |= 8; } int i; int btncnt = 0; _btn_w = 0; _btn_span = 0; for (i = 0; i < sizeof(_btns) / sizeof(FibButton*); ++i) { if (_btns[i]->flags & 8) { continue; } query_font_geometry (dpy, _fib_gc, _btns[i]->text, &_btns[i]->tw, NULL, NULL, NULL); if (_btns[i]->flags & 4) { _btn_span += _btns[i]->tw + _fib_font_ascent + TEXTSEP; } else { ++btncnt; if (_btns[i]->tw > _btn_w) _btn_w = _btns[i]->tw; } } _btn_w += BTNPADDING + BTNPADDING + TEXTSEP + TEXTSEP + TEXTSEP; _btn_span += _btn_w * btncnt + DSEP * (i - 1) + FAREAMRGR + FAREAMRGB; for (i = 0; i < sizeof(_btns) / sizeof(FibButton*); ++i) { if (_btns[i]->flags & 8) { continue; } if (_btns[i]->flags & 4) { _btns[i]->xw = _btns[i]->tw + _fib_font_ascent + TEXTSEP; } else { _btns[i]->xw = _btn_w; } } sync_button_states () ; _fib_height = _fib_font_vsep * (15.8); _fib_width = MAX (_btn_span, 440); XResizeWindow (dpy, _fib_win, _fib_width, _fib_height); XTextProperty x_wname, x_iname; XSizeHints hints; XWMHints wmhints; hints.flags = PSize | PMinSize; hints.min_width = _btn_span; hints.min_height = 8 * _fib_font_vsep; char *w_name = & _fib_cfg_title[0]; wmhints.input = True; wmhints.flags = InputHint; if (XStringListToTextProperty (&w_name, 1, &x_wname) && XStringListToTextProperty (&w_name, 1, &x_iname)) { XSetWMProperties (dpy, _fib_win, &x_wname, &x_iname, NULL, 0, &hints, &wmhints, NULL); XFree (x_wname.value); XFree (x_iname.value); } XSetWindowBackground (dpy, _fib_win, _c_gray1.pixel); _fib_mapped = 0; XMapRaised (dpy, _fib_win); if (!strlen (_cur_path) || !fib_opendir (dpy, _cur_path, NULL)) { fib_opendir (dpy, getenv ("HOME") ? getenv ("HOME") : "/", NULL); } #if 0 XGrabPointer (dpy, _fib_win, True, ButtonReleaseMask | ButtonPressMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | StructureNotifyMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime); XGrabKeyboard (dpy, _fib_win, True, GrabModeAsync, GrabModeAsync, CurrentTime); //XSetInputFocus (dpy, parent, RevertToNone, CurrentTime); #endif _recentlock = 1; return 0; } void x_fib_close (Display *dpy) { if (!_fib_win) return; XFreeGC (dpy, _fib_gc); XDestroyWindow (dpy, _fib_win); _fib_win = 0; free (_dirlist); _dirlist = NULL; free (_pathbtn); _pathbtn = NULL; if (_fibfont != None) XUnloadFont (dpy, _fibfont); _fibfont = None; free (_placelist); _placelist = NULL; _dircount = 0; _pathparts = 0; _placecnt = 0; if (_pixbuffer != None) XFreePixmap (dpy, _pixbuffer); _pixbuffer = None; Colormap colormap = DefaultColormap (dpy, DefaultScreen (dpy)); XFreeColors (dpy, colormap, &_c_gray0.pixel, 1, 0); XFreeColors (dpy, colormap, &_c_gray1.pixel, 1, 0); XFreeColors (dpy, colormap, &_c_gray2.pixel, 1, 0); XFreeColors (dpy, colormap, &_c_gray3.pixel, 1, 0); XFreeColors (dpy, colormap, &_c_gray4.pixel, 1, 0); XFreeColors (dpy, colormap, &_c_gray5.pixel, 1, 0); XFreeColors (dpy, colormap, &_c_gray6.pixel, 1, 0); _recentlock = 0; } int x_fib_handle_events (Display *dpy, XEvent *event) { if (!_fib_win) return 0; if (_status) return 0; if (event->xany.window != _fib_win) { return 0; } switch (event->type) { case MapNotify: _fib_mapped = 1; break; case UnmapNotify: _fib_mapped = 0; break; case LeaveNotify: fib_update_hover (dpy, 1, 0, 0); break; case ClientMessage: if (!strcmp (XGetAtomName (dpy, event->xclient.message_type), "WM_PROTOCOLS")) { _status = -1; } case ConfigureNotify: if ( (event->xconfigure.width > 1 && event->xconfigure.height > 1) && (event->xconfigure.width != _fib_width || event->xconfigure.height != _fib_height) ) { _fib_width = event->xconfigure.width; _fib_height = event->xconfigure.height; _fib_resized = 1; } break; case Expose: if (event->xexpose.count == 0) { fib_expose (dpy, event->xany.window); } break; case MotionNotify: fib_motion (dpy, event->xmotion.x, event->xmotion.y); if (event->xmotion.is_hint == NotifyHint) { XGetMotionEvents (dpy, event->xany.window, CurrentTime, CurrentTime, NULL); } break; case ButtonPress: fib_mousedown (dpy, event->xbutton.x, event->xbutton.y, event->xbutton.button, event->xbutton.time); break; case ButtonRelease: fib_mouseup (dpy, event->xbutton.x, event->xbutton.y, event->xbutton.button, event->xbutton.time); break; case KeyRelease: break; case KeyPress: { KeySym key; char buf[100]; static XComposeStatus stat; XLookupString (&event->xkey, buf, sizeof(buf), &key, &stat); switch (key) { case XK_Escape: _status = -1; break; case XK_Up: if (_fsel > 0) { fib_select (dpy, _fsel - 1); } break; case XK_Down: if (_fsel < _dircount -1) { fib_select ( dpy, _fsel + 1); } break; case XK_Page_Up: if (_fsel > 0) { int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; if (llen < 1) llen = 1; else --llen; int fs = MAX (0, _fsel - llen); fib_select ( dpy, fs); } break; case XK_Page_Down: if (_fsel < _dircount) { int llen = (_fib_height - LISTBOT * _fib_font_vsep) / _fib_font_vsep; if (llen < 1) llen = 1; else --llen; int fs = MIN (_dircount - 1, _fsel + llen); fib_select ( dpy, fs); } break; case XK_Left: if (_pathparts > 1) { int i = 0; char path[1024] = "/"; while (++i < _pathparts - 1) { strcat (path, _pathbtn[i].name); strcat (path, "/"); } char *sel = strdup (_pathbtn[_pathparts-1].name); fib_opendir (dpy, path, sel); free (sel); } break; case XK_Right: if (_fsel >= 0 && _fsel < _dircount) { if (_dirlist[_fsel].flags & 4) { cb_open (dpy); } } break; case XK_Return: cb_open (dpy); break; default: if ((key >= XK_a && key <= XK_z) || (key >= XK_0 && key <= XK_9)) { int i; for (i = 0; i < _dircount; ++i) { int j = (_fsel + i + 1) % _dircount; char kcmp = _dirlist[j].name[0]; if (kcmp > 0x40 && kcmp <= 0x5A) kcmp |= 0x20; if (kcmp == key) { fib_select ( dpy, j); break; } } } break; } } break; } if (_status) { x_fib_close (dpy); } return _status; } int x_fib_status () { return _status; } int x_fib_configure (int k, const char *v) { if (_fib_win) { return -1; } switch (k) { case 0: if (strlen (v) >= sizeof(_cur_path) -1) return -2; if (strlen (v) < 1) return -2; if (v[0] != '/') return -2; if (strstr (v, "//")) return -2; strncpy (_cur_path, v, sizeof(_cur_path)); break; case 1: if (strlen (v) >= sizeof(_fib_cfg_title) -1) return -2; strncpy (_fib_cfg_title, v, sizeof(_fib_cfg_title)); break; case 2: if (strlen (v) >= sizeof(_fib_cfg_custom_font) -1) return -2; strncpy (_fib_cfg_custom_font, v, sizeof(_fib_cfg_custom_font)); break; case 3: if (strlen (v) >= sizeof(_fib_cfg_custom_places) -1) return -2; strncpy (_fib_cfg_custom_places, v, sizeof(_fib_cfg_custom_places)); break; default: return -2; } return 0; } int x_fib_cfg_buttons (int k, int v) { if (_fib_win) { return -1; } switch (k) { case 1: if (v < 0) { _btn_hidden.flags |= 8; } else { _btn_hidden.flags &= ~8; } if (v == 1) { _btn_hidden.flags |= 2; _fib_hidden_fn = 1; } else if (v == 0) { _btn_hidden.flags &= 2; _fib_hidden_fn = 0; } break; case 2: if (v < 0) { _btn_places.flags |= 8; } else { _btn_places.flags &= ~8; } if (v == 1) { _btn_places.flags |= 2; _fib_show_places = 1; } else if (v == 0) { _btn_places.flags &= ~2; _fib_show_places = 0; } break; case 3: // NB. filter button is automatically hidden // IFF the filter-function is NULL. if (v < 0) { _btn_filter.flags |= 8; } else { _btn_filter.flags &= ~8; } if (v == 1) { _btn_filter.flags &= ~2; // inverse - 'show all' = !filter _fib_filter_fn = 1; } else if (v == 0) { _btn_filter.flags |= 2; _fib_filter_fn = 0; } default: return -2; } return 0; } int x_fib_cfg_filter_callback (int (*cb)(const char*)) { if (_fib_win) { return -1; } _fib_filter_function = cb; return 0; } char *x_fib_filename () { if (_status > 0 && !_fib_win) return strdup (_rv_open); else return NULL; } #endif // platform #endif // XDLG /////////////////////////////////////////////////////////////////////////////// /* public API */ #ifdef HAVE_X11 /** open a file select dialog * @param dpy X Display connection * @param parent (optional) if not NULL, become transient for given window * @param x if >0 set explict initial width of the window * @param y if >0 set explict initial height of the window * @return 0 on success */ int x_fib_show (Display *dpy, Window parent, int x, int y); /** force close the dialog. * This is normally not needed, the dialog closes itself * when a file is selected or the user cancels selection. * @param dpy X Display connection */ void x_fib_close (Display *dpy); /** non-blocking X11 event handler. * It is safe to run this function even if the dialog is * closed or was not initialized. * * @param dpy X Display connection * @param event the XEvent to process * @return status * 0: the event was not for this window, or file-dialog still * active, or the dialog window is not displayed. * >0: file was selected, dialog closed * <0: file selection was cancelled. */ int x_fib_handle_events (Display *dpy, XEvent *event); /** last status of the dialog * @return >0: file was selected, <0: canceled or inactive. 0: active */ int x_fib_status (); /** query the selected filename * @return NULL if none set, or allocated string to be free()ed by the called */ char *x_fib_filename (); /** customize/configure the dialog before calling \ref x_fib_show * changes only have any effect if the dialog is not visible. * @param k key to change * 0: set current dir to display (must end with slash) * 1: set title of dialog window * 2: specify a custom X11 font to use * 3: specify a custom 'places' file to include * (following gtk-bookmark convention) * @param v value * @return 0 on success. */ int x_fib_configure (int k, const char *v); /** customize/configure the dialog before calling \ref x_fib_show * changes only have any effect if the dialog is not visible. * * @param k button to change: * 1: show hidden files * 2: show places * 3: show filter/list all (automatically hidden if there is no * filter function) * @param v <0 to hide the button >=0 show button, * 0: set button-state to not-checked * 1: set button-state to checked * >1: retain current state * @return 0 on success. */ int x_fib_cfg_buttons (int k, int v); /** set custom callback to filter file-names. * NULL will disable the filter and hide the 'show all' button. * changes only have any effect if the dialog is not visible. * * @param cb callback function to check file * the callback function is called with the file name (basename only) * and is expected to return 1 if the file passes the filter * and 0 if the file should not be listed by default. * @return 0 on success. */ int x_fib_cfg_filter_callback (int (*cb)(const char*)); #endif /* 'recently used' API. x-platform * NOTE: all functions use a static cache and are not reentrant. * It is expected that none of these functions are called in * parallel from different threads. */ /** release static resources of 'recently used files' */ void x_fib_free_recent (); /** add an entry to the recently used list * * The dialog does not add files automatically on open, * if the application succeeds to open a selected file, * this function should be called. * * @param path complete path to file * @param atime time of last use, 0: NOW * @return -1 on error, number of current entries otherwise */ int x_fib_add_recent (const char *path, time_t atime); /** get a platform specific path to a good location for * saving the recently used file list. * (follows XDG_DATA_HOME on Unix, and CSIDL_LOCAL_APPDATA spec) * * @param application-name to use to include in file * @return pointer to static path or NULL */ const char *x_fib_recent_file(const char *appname); /** save the current list of recently used files to the given filename * (the format is one file per line, filename URL encoded and space separated * with last-used timestamp) * * This function tries to creates the containing directory if it does * not exist. * * @param fn file to save the list to * @return 0: on success */ int x_fib_save_recent (const char *fn); /** load a recently used file list. * * @param fn file to load the list from * @return 0: on success */ int x_fib_load_recent (const char *fn); /** get number of entries in the current list * @return number of entries in the recently used list */ unsigned int x_fib_recent_count (); /** get recently used entry at given position * * @param i entry to query * @return pointer to static string */ const char *x_fib_recent_at (unsigned int i); /* end public API */ /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /* example usage * gcc -Wall -D XFIB_TEST -g -o sofd libsofd.c -lX11 */ #ifdef XFIB_TEST int main (int argc, char **argv) { Display* dpy = XOpenDisplay (0); if (!dpy) return -1; x_fib_cfg_filter_callback (fib_filter_movie_filename); x_fib_configure (1, "Open File"); x_fib_load_recent ("/tmp/sofd.recent"); x_fib_show (dpy, 0, 300, 300); while (1) { XEvent event; while (XPending (dpy) > 0) { XNextEvent (dpy, &event); if (x_fib_handle_events (dpy, &event)) { if (x_fib_status () > 0) { char *fn = x_fib_filename (); printf ("OPEN '%s'\n", fn); x_fib_add_recent (fn, time (NULL)); free (fn); } } } if (x_fib_status ()) { break; } usleep (80000); } x_fib_close (dpy); x_fib_save_recent ("/tmp/sofd.recent"); x_fib_free_recent (); XCloseDisplay (dpy); return 0; } #endif xjadeo-0.8.10/src/xjadeo/xjadeo.c0000644000175000017500000013573113661635631013476 00000000000000/* xjadeo - jack video monitor, decoder and main event loop * * (C) 2006-2014 Robin Gareus * (C) 2006-2011 Luis Garrido * * 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. * */ #include "xjadeo.h" #include "ffcompat.h" #include #include #include #include "remote.h" #include "gtime.h" #ifndef MIN #define MIN(A,B) (((A)<(B)) ? (A) : (B)) #endif #ifndef MAX #define MAX(A,B) (((A)>(B)) ? (A) : (B)) #endif //#define USE_DUP_PACKET // needed for some codecs with old ffmpeg //------------------------------------------------ // extern Globals (main.c) //------------------------------------------------ extern int loop_flag; extern int loop_run; extern int movie_width; extern int movie_height; extern int ffctv_width; extern int ffctv_height; extern float movie_aspect; extern AVFormatContext *pFormatCtx; extern int videoStream; extern AVCodecContext *pCodecCtx; extern AVFrame *pFrame; extern AVFrame *pFrameFMT; extern uint8_t *buffer; struct SwsContext *pSWSCtx; // needs to be set before calling movie_open extern int render_fmt; /* Video File Info */ extern double duration; extern double framerate; extern int64_t frames; extern int64_t file_frame_offset; extern int have_dropframes; /* Option flags and variables */ extern char *current_file; extern int64_t ts_offset; extern char *smpte_offset; extern int64_t userFrame; extern int64_t dispFrame; extern int force_redraw; extern int want_quiet; extern int want_debug; extern int want_verbose; extern int want_avverbose; extern int want_nosplash; extern int want_genpts; extern int want_ignstart; extern int remote_en; extern int remote_mode; extern int mq_en; extern char *ipc_queue; extern double delay; extern int keyframe_interval_limit; extern int want_noindex; #ifdef HAVE_LTC extern int use_ltc; #endif // On screen display extern char OSD_frame[48]; extern char OSD_smpte[20]; extern int OSD_mode; extern char OSD_msg[128]; extern char OSD_nfo_tme[5][48]; extern char OSD_nfo_geo[5][48]; uint64_t osd_smpte_ts; uint64_t osd_vtc_oob; //------------------------------------------------ // globals //------------------------------------------------ #ifdef TIMEMAP int64_t timeoffset = 0; double timescale = 1.0; int wraparound = 0; #endif struct FrameIndex { int64_t pkt_pts; int64_t pkt_pos; int64_t frame_pts; int64_t frame_pos; int64_t timestamp; //< corresponds to array's [i] //int64_t frame_num; //< corresponds to frame_pts; int64_t seekpts; int64_t seekpos; uint8_t key; }; static struct FrameIndex *fidx = NULL; static int64_t last_decoded_pts = -1; static int64_t last_decoded_frameno = -1; static int64_t fcnt = 0; static int seek_threshold = 8; static uint8_t abort_indexing = 0; static uint8_t scan_complete = 0; static uint8_t thread_active = 0; static uint8_t byte_seek = 0; static uint8_t pts_warn = 0; static pthread_t index_thread; static AVRational fr_Q = { 1, 1 }; static int64_t one_frame; static int fFirstTime=1; static uint8_t syncnidx = 0; static const char syncname[4][5] = { "CTL ", "JCK ", "LTC ", "MTC " }; #ifdef JACK_SESSION extern int jack_session_restore; extern int js_winx; extern int js_winy; extern int js_winw; extern int js_winh; #endif static void js_apply () { #ifdef JACK_SESSION if (jack_session_restore) { jack_session_restore = 0; if (js_winx > 0 && js_winy > 0) Xposition (js_winx, js_winy); if (js_winw > 0 && js_winh > 0) Xresize (js_winw,js_winh); } #endif } static int select_sleep (const long usec) { int remote_activity = 0; #ifndef PLATFORM_WINDOWS fd_set fd; int max_fd = 0; struct timeval tv = { 0, 0 }; if (usec > 500) { tv.tv_sec = usec / 1000000L; tv.tv_usec = (usec % 1000000L); } FD_ZERO(&fd); if (remote_en) { max_fd = remote_fd_set (&fd); } #endif #if defined HAVE_MQ if (mq_en) { if (!remote_read_mq()) remote_activity=1; } #elif defined HAVE_IPCMSG if (ipc_queue) { if (!remote_read_ipc()) remote_activity=1; } #endif #ifdef HAVE_LIBLO remote_activity |= xjosc_process (); #endif #ifndef PLATFORM_WINDOWS if (remote_activity) { tv.tv_sec = 0; tv.tv_usec = 1; } #endif #ifdef PLATFORM_WINDOWS if ((!remote_en || remote_read_h()) && usec > 1000) { Sleep ((usec + 999) / 1000); // XXX not nearly good enough. } #else if (select (max_fd, &fd, NULL, NULL, &tv)) { remote_read_io(); return 1; } #endif return remote_activity; } //-------------------------------------------- // main event loop //-------------------------------------------- static void cancel_index_thread (void); uint8_t splashed = 0; void event_loop (void) { double elapsed_time; int64_t clock1, clock2; int64_t newFrame, offFrame; float nominal_delay; int64_t splash_timeout; uint8_t prev_syncidx = 0xff; splashed = want_nosplash; force_redraw = 1; if (want_verbose) printf("\nentering video update loop @%.2f fps.\n",delay>0?(1.0/delay):framerate); clock1 = xj_get_monotonic_time(); splash_timeout = clock1 + 2500000; // 2.5 sec; while (loop_flag) { /* MAIN LOOP */ uint8_t we_know_transport_is_not_rolling = 0; if (loop_run == 0) { /* video offline - (eg. window minimized) * do not update frame */ select_sleep (2e5L); handle_X_events(); js_apply(); continue; } #ifdef HAVE_MIDI if (midi_connected()) { newFrame = midi_poll_frame(); syncnidx = 3; } else #endif #ifdef HAVE_LTC if (ltcjack_connected()) { newFrame = ltc_poll_frame(); syncnidx = 2; } else #endif { uint8_t jack_rolling = 1; newFrame = jack_poll_frame(&jack_rolling); syncnidx = 1; if (!jack_rolling) we_know_transport_is_not_rolling = 1; } if (newFrame < 0) { syncnidx = 0; newFrame = userFrame; } if (prev_syncidx != syncnidx) { force_redraw = 1; osd_smpte_ts = -1; osd_vtc_oob = -1; prev_syncidx = syncnidx; } #if 0 // experimental PLL static uint8_t dll_initialized = 0; static double dll_e2, dll_e0; static double dll_t0, dll_t1; static double dll_b, dll_c; static double dll_frameno; static int64_t prevFrame = 0; if (!scan_complete) dll_initialized = 0; if (syncnidx != 3) { // USE DLL to smooth over large jack cycles // with jack -> we know transport rolling state -> use it // this still jitters on start/stop,:( more work is needed. if (newFrame < prevFrame || newFrame > prevFrame + 4 || we_know_transport_is_not_rolling || !dll_initialized) { // reset DLL dll_initialized = 1; dll_e0 = dll_t0 = 0; dll_e2 = (delay > 0) ? (.5 * framerate * (float)delay) : .2; dll_t1 = newFrame + dll_e2; const double omega = 2. * M_PI / framerate; dll_b = 1.4142135623730950488 * omega; // sqrt(2) dll_c = omega * omega; if (!want_quiet && !we_know_transport_is_not_rolling) printf("RE-INIT DLL %g %lld <> %lld\n", dll_e2, prevFrame, newFrame); prevFrame = newFrame; } else { double expect = prevFrame + (xj_get_monotonic_time() - clock1) * framerate / 1000000.f; dll_e0 = expect - dll_t1; dll_t0 = dll_t1; dll_t1 += dll_b * dll_e0 + dll_e2; dll_e2 += dll_c * dll_e0; //printf("%.1f %+7.4f %lld %s\n", dll_t1, dll_e0, newFrame, floor(dll_t1) != newFrame ? "!":""); prevFrame = newFrame; newFrame = floor(dll_t1); } } #endif #if 0 // DEBUG static int64_t oldFrame = 0; if (oldFrame != newFrame) { if (oldFrame +1 != newFrame) { printf("\ndiscontinuity %"PRId64" -> %"PRId64"\n", oldFrame, newFrame); } oldFrame = newFrame; } #endif #ifdef TIMEMAP newFrame = floor ((double)newFrame * timescale) + timeoffset; // TODO: calc newFrames/frames instead of while-loop while (newFrame > frames && wraparound && frames != 0) newFrame -= frames; while (newFrame < 0 && wraparound && frames != 0) newFrame += frames; #endif offFrame = newFrame + ts_offset; int64_t curFrame = dispFrame; const int fd = force_redraw; force_redraw = 0; display_frame (offFrame, fd); if ((remote_en||mq_en||ipc_queue) && ( (remote_mode&NTY_FRAMELOOP) || ((remote_mode&NTY_FRAMECHANGE) && curFrame != dispFrame)) ) { /*call xapi_pposition ?? -> rv:200 * dispFrame is the currently displayed frame * = SMPTE + offset */ remote_printf(301,"position=%"PRId64, dispFrame); } nominal_delay = delay > 0 ? delay : (1.0/framerate); if (!splashed) { if (splash_timeout <= clock1) { splashed = 1; force_redraw = 1; } } if (want_verbose) { #if 0 fprintf(stdout, "frame: smpte:%"PRId64" \r", newFrame); #else char tempsmpte[15]; frame_to_smptestring (tempsmpte, newFrame, 1); fprintf(stdout, "smpte: %s f:%"PRId64"\r", tempsmpte, newFrame); #endif fflush (stdout); } handle_X_events(); js_apply(); clock2 = xj_get_monotonic_time(); nominal_delay *= 1000000.f; elapsed_time = (clock2 - clock1); if (elapsed_time < nominal_delay) { long microsecdelay = (long) floorf (nominal_delay - elapsed_time); #if 0 // debug timing printf(" %7.1f ms, [%"PRId64"]\n", microsecdelay / 1e3, offFrame); #endif #if 1 // poll 5 times per frame, unless -f delay is given explicitly const long pollinterval = ceilf (nominal_delay * .2f); if (microsecdelay > pollinterval && delay <= 0) microsecdelay = pollinterval; #endif if (!select_sleep (microsecdelay)) { ; // remote event occured } if (curFrame != dispFrame) { clock1 = clock2; } } else { clock1 = clock2; #if 0 // debug timing printf("@@ %7.1f ms [%"PRId64"]\n", (nominal_delay - elapsed_time) / 1e3, offFrame); #endif } } if ((remote_en||mq_en||ipc_queue) && (remote_mode&4)) { // send current settings xapi_pfullscreen (NULL); xapi_pontop (NULL); xapi_posd (NULL); xapi_pletterbox (NULL); xapi_pwinpos (NULL); xapi_pwinsize (NULL); xapi_poffset (NULL); } cancel_index_thread(); } //-------------------------------------------- // Video file, rendering and ffmpeg inteface //-------------------------------------------- static void render_empty_frame (int blit, int splashagain); static uint8_t displaying_valid_frame = 0; static int vbufsize = 0; size_t video_buffer_size() { return vbufsize; } void init_moviebuffer (void) { if (buffer) free (buffer); if (want_debug) printf("DEBUG: init_moviebuffer - render_fmt: %i\n",render_fmt); /* Determine required buffer size and allocate buffer */ #ifdef CROPIMG vbufsize = avpicture_get_size (render_fmt, movie_width*2, movie_height); #else vbufsize = avpicture_get_size (render_fmt, movie_width, movie_height); #endif buffer = (uint8_t *)calloc (1, vbufsize); // Assign appropriate parts of buffer to image planes in pFrameFMT if (pFrameFMT) { avpicture_fill ((AVPicture *)pFrameFMT, buffer, render_fmt, movie_width, movie_height); pSWSCtx = sws_getContext (pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt, movie_width, movie_height, render_fmt, SWS_BICUBIC, NULL, NULL, NULL); } render_empty_frame (0, 0); } void avinit (void) { av_register_all (); #if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 20, 0) avcodec_init (); #endif avcodec_register_all (); if (!want_avverbose) av_log_set_level (AV_LOG_QUIET); } static void reset_index () { last_decoded_pts = -1; last_decoded_frameno = -1; fcnt = 0; seek_threshold = 8; abort_indexing = 0; scan_complete = 0; byte_seek = 0; } static uint64_t parse_pts_from_frame (AVFrame *f) { uint64_t pts = AV_NOPTS_VALUE; pts = AV_NOPTS_VALUE; #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51, 49, 100) if (pts == AV_NOPTS_VALUE) { pts = av_frame_get_best_effort_timestamp (f); if (pts != AV_NOPTS_VALUE) { if (!(pts_warn & 1) && !want_quiet) fprintf(stderr, "PTS: Best effort.\n"); pts_warn |= 1; } } #else #warning building with libavutil < 51.49.100 is highly discouraged #endif if (pts == AV_NOPTS_VALUE) { pts = f->pkt_pts; if (pts != AV_NOPTS_VALUE) { if (!(pts_warn & 2) && !want_quiet) fprintf(stderr, "Used PTS from packet instead frame's PTS.\n"); pts_warn |= 2; } } if (pts == AV_NOPTS_VALUE) { pts = f->pts; // sadly bogus with many codecs :( if (pts != AV_NOPTS_VALUE) { if (!(pts_warn & 8) && !want_quiet) fprintf(stderr, "Used AVFrame assigned pts (instead frame PTS).\n"); pts_warn |= 8; } } if (pts == AV_NOPTS_VALUE) { pts = f->pkt_dts; if (pts != AV_NOPTS_VALUE) { if (!(pts_warn & 4) && !want_quiet) fprintf(stderr, "Used decode-timestamp from packet (instead frame PTS).\n"); pts_warn |= 4; } } return pts; } static int seek_frame (AVPacket *packet, int64_t framenumber) { if (!scan_complete) return -1; if (videoStream < 0) return -1; if (want_ignstart) { framenumber += file_frame_offset; } if (framenumber < 0 || framenumber >= fcnt) { return -1; } const int64_t timestamp = fidx[framenumber].timestamp; if (timestamp < 0 || framenumber >= frames) { return -1; } if (last_decoded_pts == timestamp) { assert(last_decoded_frameno == framenumber); return 0; } int need_seek = 0; if (last_decoded_pts < 0 || last_decoded_frameno < 0) { need_seek = 1; assert(last_decoded_pts < 0); assert(last_decoded_frameno < 0); } else if (last_decoded_pts > timestamp) { assert(last_decoded_frameno > framenumber); need_seek = 1; } else if ((framenumber - last_decoded_frameno) == 1) { ; // don't seek for consecutive frames } else if (fidx[framenumber].seekpts != fidx[last_decoded_frameno].seekpts) { need_seek = 1; } last_decoded_pts = -1; last_decoded_frameno = -1; if (need_seek) { int seek; if (byte_seek && fidx[framenumber].seekpos > 0) { #if 0 // DEBUG printf("Seek to POS: %"PRId64"\n", fidx[framenumber].seekpos); #endif seek = av_seek_frame (pFormatCtx, videoStream, fidx[framenumber].seekpos, AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_BYTE); } else { #if 0 // DEBUG printf("Seek to PTS: %"PRId64"\n", fidx[framenumber].seekpts); #endif seek = av_seek_frame (pFormatCtx, videoStream, fidx[framenumber].seekpts, AVSEEK_FLAG_BACKWARD); } if (pCodecCtx->codec->flush) { avcodec_flush_buffers (pCodecCtx); } if (seek < 0) { if (!want_quiet) fprintf(stderr, "SEEK FAILED\n"); return -3; // ERR } } int bailout = 2 * seek_threshold; while (bailout > 0) { int err; if ((err = av_read_frame (pFormatCtx, packet)) < 0) { if (err != AVERROR_EOF) { if (!want_quiet) fprintf(stderr, "Read failed (during seek)\n"); av_free_packet (packet); return -1; } else { --bailout; } } if (packet->stream_index != videoStream) { av_free_packet (packet); continue; } #ifdef USE_DUP_PACKET if (av_dup_packet (&packet) < 0) { if (!want_quiet) fprintf(stderr, "Error: Cannot allocate video packet.\n"); break; } #endif #if 0 // DEBUG const int key = (packet->flags & AV_PKT_FLAG_KEY) ? 1 : 0; #endif int frameFinished = 0; #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(52, 21, 0) err = avcodec_decode_video (pCodecCtx, pFrame, &frameFinished, packet->data, packet->size); #else err = avcodec_decode_video2 (pCodecCtx, pFrame, &frameFinished, packet); #endif av_free_packet (packet); if (err < 0) { if (!want_quiet) fprintf(stderr, "Decompression failed.\n"); return -10; } if (!frameFinished) { --bailout; continue; } int64_t pts = parse_pts_from_frame (pFrame); #if 0 // DEBUG printf("DECODE: WANT %"PRId64", GOT: %"PRId64" KEY %s\n", timestamp, pts, key ? "Y" : "N"); #endif if (pts == AV_NOPTS_VALUE) { if (!want_quiet) fprintf(stderr, "No presentation timestamp (PTS) for video frame.\n"); return -7; } const int64_t prefuzz = one_frame > 10 ? 1 : 0; if (pts + prefuzz >= timestamp) { #if 0 // DEBUG if (want_debug && pts != timestamp) { printf("PTS mismatch WANT: %"PRId64" <> GOT: %"PRId64" KEY %s\n", timestamp, pts, key ? "Y" : "N"); } #endif // fuzzy match if (pts - timestamp < one_frame) { last_decoded_pts = timestamp; last_decoded_frameno = framenumber; return 0; // OK } if (!want_quiet) { fprintf(stderr, "Cannot reliably seek to target frame:\n"); fprintf(stderr, " PTS mismatch want: %"PRId64" got: %"PRId64" %s\n", timestamp, pts, need_seek ?"did-seek":"no-seek"); } return -2; } #if 0 // DEBUG if (want_debug) { printf("DECODE >> WANT: %"PRId64" <> GOT: %"PRId64" KEY %s\n", timestamp, pts, key ? "Y" : "N"); } #endif --bailout; } if (!want_quiet) fprintf(stderr, "Index-seek: bail out. frame-distance too large.\n"); return -5; } float index_progress = 0; static void report_idx_progress (const char *msg, float percent) { static int lastval = 0; if (!(OSD_mode & OSD_MSG)) return; if (floorf (percent) == lastval) return; // also check msg? lastval = floorf (percent); index_progress = percent; sprintf(OSD_msg, "%s%3.0f%%", msg, percent); force_redraw = 1; } static int add_idx (int64_t ts, int64_t pos, uint8_t key, int _duration, AVRational tb) { if (fcnt >= frames) { ++fcnt; if (!want_quiet) fprintf(stderr, "Index table Overflow: %"PRId64" / %"PRId64" frames.\n", fcnt, frames); fidx = realloc (fidx, fcnt * sizeof(struct FrameIndex)); return -1; } report_idx_progress ("Pass 1: Scanning File:", 100.f * fcnt / frames); fidx[fcnt].pkt_pts = ts; fidx[fcnt].pkt_pos = pos; fidx[fcnt].timestamp = av_rescale_q (fcnt, fr_Q, tb); fidx[fcnt].key = key; fidx[fcnt].frame_pts = -1; fidx[fcnt].frame_pos = -1; fidx[fcnt].seekpts = 0; fidx[fcnt].seekpos = 0; #if 0 // DEBUG if (fcnt < 50 || key) printf("IDX %"PRId64" PKT-PTS %"PRId64" TS %"PRId64"\n", fcnt, fidx[fcnt].pkt_pts, fidx[fcnt].timestamp); #endif ++fcnt; return 0; } static int64_t keyframe_lookup_helper (const int64_t last, const int64_t ts) { int64_t i; assert(last < fcnt); for (i = last; i >= 0; --i) { if (!fidx[i].key) continue; if (fidx[i].pkt_pts == AV_NOPTS_VALUE || fidx[i].frame_pts == AV_NOPTS_VALUE) { continue; } if (fidx[i].frame_pts <= ts) { return i; } } return -1; } static int index_frames () { AVPacket packet; int use_dts = 0; int error = 0; #ifndef HAVE_AV_INIT_PACKET memset (&packet, 0, sizeof(AVPacket)); #else av_init_packet (&packet); #endif packet.data = NULL; packet.size = 0; int max_keyframe_interval = 0; int keyframe_interval = 0; int64_t keyframe_byte_pos = 0; int64_t keyframe_byte_distance = 0; AVRational const tb = pFormatCtx->streams[videoStream]->time_base; if (!want_noindex && want_verbose) { printf("Indexing Video...\n"); } pts_warn = 0; /* pass 1: read all packets * -> find keyframes * -> check if file is complete * -> discover max. keyframe distance * -> get PTS/DTS of every *packet* */ while (!want_noindex && av_read_frame (pFormatCtx, &packet) >= 0) { if (abort_indexing) { if (!want_quiet) fprintf(stderr, "Indexing aborted.\n"); av_free_packet (&packet); return -1; } #ifdef USE_DUP_PACKET if (av_dup_packet (&packet) < 0) { if (!want_quiet) fprintf(stderr, "Error: Cannot allocate video packet.\n"); break; } #endif if (packet.stream_index != videoStream) { av_free_packet (&packet); continue; } int64_t ts = AV_NOPTS_VALUE; if (!use_dts && packet.pts != AV_NOPTS_VALUE) ts = packet.pts; if (ts == AV_NOPTS_VALUE) { if (!use_dts && want_verbose) { printf("Index: switch to DTS @ %"PRId64"\n", fcnt); } use_dts = 1; } if (use_dts && packet.dts != AV_NOPTS_VALUE) ts = packet.dts; if (ts == AV_NOPTS_VALUE) { if (!want_quiet) fprintf(stderr, "Index error: no PTS, nor DTS.\n"); av_free_packet (&packet); error |= 1; break; } const uint8_t key = (packet.flags & AV_PKT_FLAG_KEY) ? 1 : 0; if (add_idx (ts, packet.pos, key, packet.duration, tb)) { av_free_packet (&packet); break; } if (key) { int byte_distance = packet.pos - keyframe_byte_pos; keyframe_byte_pos = packet.pos; if (keyframe_byte_distance < byte_distance) { keyframe_byte_distance = byte_distance; } } av_free_packet (&packet); if (++keyframe_interval > max_keyframe_interval) { max_keyframe_interval = keyframe_interval; } if (max_keyframe_interval > keyframe_interval_limit && (keyframe_byte_distance > 0 && keyframe_byte_distance > 5242880 /* 5 MB */) ) { error |=4; break; } #if 1 if ((fcnt == 500 || fcnt == frames) && max_keyframe_interval == 1 && file_frame_offset == av_rescale_q (fidx[0].pkt_pts, tb, fr_Q) ) { if (want_verbose) printf("First 500 frames are all keyframes. Index disabled. Direkt seek mode enabled.\n"); break; } #endif if (key) { keyframe_interval = 0; } } pts_warn = 0; int64_t i; int64_t keyframecount = 0; // debug, info only. if (want_noindex || ( (fcnt == 500 || fcnt == frames) && max_keyframe_interval == 1 && file_frame_offset == av_rescale_q (fidx[0].pkt_pts, tb, fr_Q) ) ) { const int64_t pts_offset = fidx[0].pkt_pts; for (i = 0; i < frames; ++i) { fidx[i].key = 1; fidx[i].pkt_pts = fidx[i].frame_pts = pts_offset + av_rescale_q (i, fr_Q, tb); fidx[i].frame_pos = -1; fidx[i].timestamp = av_rescale_q (file_frame_offset + i, fr_Q, tb); } fcnt = frames; keyframecount = frames; } else /* pass 2: verify keyframes * seek to [all] keyframe, decode one frame after * the keyframe and check *frame* PTS */ // TODO: Check if one could skip this process in part // for [long] files where a pattern (constant offset) is detected. for (i = 0; i < fcnt; ++i) { if (abort_indexing) { if (!want_quiet) fprintf(stderr, "Indexing aborted.\n"); return -1; } if (!fidx[i].key) continue; report_idx_progress ("Pass 2: Indexing Frames:", 100.f * i / fcnt); int got_pic = 0; int64_t pts = AV_NOPTS_VALUE; if (av_seek_frame (pFormatCtx, videoStream, fidx[i].pkt_pts, AVSEEK_FLAG_BACKWARD)) { fprintf(stderr, "IDX2: Seek failed.\n"); error |= 16; break; } if (pCodecCtx->codec->flush) { avcodec_flush_buffers (pCodecCtx); } int err = 0; int bailout = 100; while (!got_pic && --bailout) { if ((err = av_read_frame (pFormatCtx, &packet)) < 0) { if (err == AVERROR_EOF) { fprintf(stderr, "IDX2: Read/Seek compensate for premature EOF\n"); fidx[i].key = 0; av_free_packet (&packet); break; } fprintf(stderr, "IDX2: Read failed @ %"PRId64" / %"PRId64".\n", i, fcnt); error |= 32; break; } #ifdef USE_DUP_PACKET if (av_dup_packet (&packet) < 0) { if (!want_quiet) fprintf(stderr, "Error: Cannot allocate video packet.\n"); break; } #endif if (packet.stream_index==videoStream) { #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(52, 21, 0) err = avcodec_decode_video (pCodecCtx, pFrame, &got_pic, packet.data, packet.size); #else err = avcodec_decode_video2 (pCodecCtx, pFrame, &got_pic, &packet); #endif } av_free_packet (&packet); if (err < 0) { break; } if (!got_pic) { continue; } pts = parse_pts_from_frame (pFrame); if (pts == AV_NOPTS_VALUE) { err = -1; if (!want_quiet) fprintf(stderr, "No presentation timestamp (PTS) for video frame.\n"); break; } } if (err < 0 || !bailout) continue; fidx[i].frame_pts = pts; fidx[i].frame_pos = av_frame_get_pkt_pos (pFrame); if (pts != AV_NOPTS_VALUE) { #if 0 // DEBUG printf("FN %"PRId64", PKT-PTS %"PRId64" FRM-PTS: %"PRId64"\n", i, fidx[i].pkt_pts, fidx[i].frame_pts); #endif ++keyframecount; } } if (!want_quiet) { const int64_t ppts_offset = fidx[0].pkt_pts; const int64_t fpts_offset = fidx[0].frame_pts; if (file_frame_offset != av_rescale_q (ppts_offset, tb, fr_Q)) { fprintf(stderr, "FILE OFFSET MISMATCH %"PRId64" vs PKT-PTS: %"PRId64"\n", file_frame_offset, av_rescale_q (ppts_offset, tb, fr_Q)); } if (file_frame_offset != av_rescale_q (fpts_offset, tb, fr_Q)) { fprintf(stderr, "FILE OFFSET MISMATCH %"PRId64" vs FRM-PTS: %"PRId64"\n", file_frame_offset, av_rescale_q (fpts_offset, tb, fr_Q)); } } if (want_verbose) fprintf(stdout, "Good Keyframes %"PRId64"\n", keyframecount); /* pass 3: Create Seek-Table * -> assign seek-[key]frame to every frame */ for (i = 0; i < fcnt; ++i) { if (abort_indexing) { if (!want_quiet) fprintf(stderr, "Indexing aborted.\n"); return -1; } report_idx_progress ("Pass 3: Creating Index:", 100.f * i / fcnt); int64_t kfi = keyframe_lookup_helper (MIN(fcnt - 1, i + 2 + max_keyframe_interval), fidx[i].timestamp); if (kfi < 0) { if (!want_quiet) fprintf(stderr, "Cannot find keyframe for %"PRId64" %"PRId64"\n", i, fidx[i].timestamp); fidx[i].seekpts = 0; fidx[i].seekpos = 0; } else { //fprintf(stderr, "using keyframe %"PRId64" for %"PRId64"\n", kfi, fidx[i].timestamp); fidx[i].seekpts = fidx[kfi].pkt_pts; fidx[i].seekpos = fidx[kfi].frame_pos; } } #if 0 // DEBUG, TESTING // check if byte-seeking is OK byte_seek = 1; srandom (time (NULL)); for (i = 0; i < 10 && byte_seek; ++i) { int got_pic = 0; int64_t n = random () % fcnt; // pick some random frames if (fidx[n].seekpos < 0) { byte_seek = 0; printf("NOBYTE 1\n"); break; } if (av_seek_frame (pFormatCtx, videoStream, fidx[n].seekpos, AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_BYTE) < 0) { byte_seek = 0; printf("NOBYTE 2\n"); break; } if (pCodecCtx->codec->flush) { avcodec_flush_buffers (pCodecCtx); } int64_t pts = AV_NOPTS_VALUE; while (!got_pic) { if (av_read_frame (pFormatCtx, &packet) < 0) { byte_seek = 0; printf("NOBYTE 3\n"); av_free_packet (&packet); break; } #ifdef USE_DUP_PACKET if (av_dup_packet (&packet) < 0) { if (!want_quiet) fprintf(stderr, "Error: Cannot allocate video packet.\n"); break; } #endif int err = 0; if (packet.stream_index==videoStream) { #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(52, 21, 0) err = avcodec_decode_video (pCodecCtx, pFrame, &got_pic, packet.data, packet.size); #else err = avcodec_decode_video2 (pCodecCtx, pFrame, &got_pic, &packet); #endif } av_free_packet (&packet); if (err < 0) { byte_seek = 0; printf("NOBYTE 4\n"); break; } if (!got_pic) { //--bailout; continue; } pts = parse_pts_from_frame (pFrame); } if (fidx[n].timestamp < pts || pts == AV_NOPTS_VALUE) { printf("NOBYTE 5\n"); byte_seek = 0; break; } if (fidx[n].seekpts > pts) { printf("NOBYTE 6\n"); byte_seek = 0; break; } } #endif #if 0 // VERIFY -- DEBUG, TESTING for (i = 0; i < fcnt; ++i) { int got_pic = 0; printf("\t\t %"PRId64" / %"PRId64" %s \r",i, fcnt, fidx[i].seekpos > 0 ? "B" : "P"); fflush (stdout); int64_t pts = AV_NOPTS_VALUE; if (byte_seek && fidx[i].seekpos > 0) { av_seek_frame (pFormatCtx, videoStream, fidx[i].seekpos, AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_BYTE); } else { av_seek_frame (pFormatCtx, videoStream, fidx[i].seekpts, AVSEEK_FLAG_BACKWARD); } if (pCodecCtx->codec->flush) { avcodec_flush_buffers (pCodecCtx); } while (!got_pic) { if (av_read_frame (pFormatCtx, &packet) < 0) { fprintf(stderr, "IDX2: Read failed.\n"); av_free_packet (&packet); break; } #ifdef USE_DUP_PACKET if (av_dup_packet (&packet) < 0) { if (!want_quiet) fprintf(stderr, "Error: Cannot allocate video packet.\n"); break; } #endif if (packet.stream_index==videoStream) { #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(52, 21, 0) avcodec_decode_video (pCodecCtx, pFrame, &got_pic, packet.data, packet.size); #else avcodec_decode_video2 (pCodecCtx, pFrame, &got_pic, &packet); #endif } av_free_packet (&packet); if (!got_pic) { //--bailout; continue; } pts = parse_pts_from_frame (pFrame); if (pts == AV_NOPTS_VALUE) { if (!want_quiet) fprintf(stderr, "No presentation timestamp (PTS) for video frame.\n"); break; } } if (fidx[i].timestamp < pts) { printf("FAIL! fn:%d want: %"PRId64", seek: %"PRId64" got:%"PRId64"\n", i, fidx[i].timestamp, fidx[i].seekpts, pts); } } #endif if (want_noindex) { max_keyframe_interval = keyframe_interval_limit; } seek_threshold = MAX(2, max_keyframe_interval - 1); if (seek_threshold >= keyframe_interval_limit && // TODO: relax the filter to use 'current' // byte distance instead of global max // may be appropriate (for most files) keyframe_byte_distance > 5242880 /* 5 MB */ ) { error |= 4; if (!want_quiet) fprintf(stderr, "WARNING: Keyframe distance is very large (>%d frames).\n" "The file is not unsuitable. Please transcode.\n", keyframe_interval_limit); seek_threshold = keyframe_interval_limit; } if (want_verbose) { printf("Scan complete err: %d use-dts: %s\n", error, use_dts ? "yes" : "no"); printf("scanned %"PRId64" of %"PRId64" frames, key-int: %d seek-thresh: %d\n", fcnt, frames, max_keyframe_interval, seek_threshold); printf("max keyframe distance: %.1f kBytes\n", keyframe_byte_distance / 1024.f); printf("Seek by %s\n", byte_seek ? "Byte" : "PTS"); } av_seek_frame (pFormatCtx, videoStream, 0, AVSEEK_FLAG_BACKWARD); if (pCodecCtx->codec->flush) { avcodec_flush_buffers (pCodecCtx); } if (!error) { scan_complete = 1; } return error; } static void *index_run (void *arg) { OSD_mode |= OSD_MSG | OSD_IDXNFO; OSD_mode &= ~(OSD_EQ | OSD_OFFF | OSD_OFFS); sprintf(OSD_msg, "Indexing. Please wait."); OSD_frame[0] = '\0'; OSD_smpte[0] = '\0'; osd_smpte_ts = -1; osd_vtc_oob = -1; index_progress = 0; force_redraw = 1; if (!index_frames()) { OSD_mode &= ~OSD_MSG; } else { OSD_mode |= OSD_BOX; sprintf(OSD_msg, "Index Error. File is not suitable."); } OSD_mode &= ~OSD_IDXNFO; index_progress = -1; force_redraw = 1; pthread_exit (NULL); return (NULL); } static void cancel_index_thread (void) { if (!thread_active) return; abort_indexing = 1; pthread_join (index_thread, NULL); abort_indexing = 0; OSD_mode &= ~OSD_MSG; thread_active = 0; index_progress = -1; force_redraw = 1; } static int start_index_thread (void) { if (thread_active) { if (!want_quiet) fprintf(stderr, "Indexing thread is still active. Forcing Re-start.\n"); cancel_index_thread (); } if (pthread_create (&index_thread, NULL, index_run, NULL)) { if (!want_quiet) fprintf(stderr, "Cannot launch index thread.\n"); return -1; } thread_active = 1; return 0; } int have_open_file () { if (current_file && pFrameFMT) return 1; else return 0; } static void clear_info () { strcpy(OSD_nfo_tme[0], "-/- No File Open -\\-"); OSD_nfo_tme[1][0] = '\0'; OSD_nfo_tme[2][0] = '\0'; OSD_nfo_tme[3][0] = '\0'; OSD_nfo_tme[4][0] = '\0'; strcpy(OSD_nfo_geo[0], "-/- No File Open -\\-"); OSD_nfo_geo[1][0] = '\0'; OSD_nfo_geo[2][0] = '\0'; OSD_nfo_geo[3][0] = '\0'; OSD_nfo_geo[4][0] = '\0'; force_redraw = 1; } int open_movie (char* file_name) { int i; AVCodec *pCodec; AVStream *av_stream; if (pFrameFMT) { close_movie (); } OSD_mode &= ~OSD_MSG; reset_index (); /* set some defaults, in case open fails, the main-loop * will still get some consistent data */ fFirstTime = 1; pFrameFMT = NULL; pFormatCtx = NULL; movie_width = ffctv_width = 640; movie_height = ffctv_height = 320; movie_aspect = (float)movie_width / (float) movie_height; duration = 1; frames = 1; framerate = 10; one_frame = 1; videoStream = -1; file_frame_offset = 0; clear_info(); // recalc offset with default framerate if (smpte_offset) { ts_offset = smptestring_to_frame (smpte_offset); } if (strlen (file_name) == 0) { return -1; } /* Open video file */ #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(53, 7, 0) if (av_open_input_file (&pFormatCtx, file_name, NULL, 0, NULL)!=0) #else if (avformat_open_input (&pFormatCtx, file_name, NULL, NULL)!=0) #endif { if (!remote_en && !mq_en && !ipc_queue) if (!want_quiet) fprintf(stderr, "Cannot open video file '%s'\n", file_name); pFormatCtx=NULL; return (-1); } /* Retrieve stream information */ if (avformat_find_stream_info (pFormatCtx, NULL) < 0) { if (!want_quiet) fprintf(stderr, "Cannot find stream information in file %s\n", file_name); avformat_close_input (&pFormatCtx); pFormatCtx=NULL; return (-1); } /* dump video information */ if (!want_quiet) { #if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 2, 0) dump_format (pFormatCtx, 0, file_name, 0); #else av_dump_format (pFormatCtx, 0, file_name, 0); #endif } /* Find the first video stream */ for (i = 0; i < pFormatCtx->nb_streams; ++i) if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) { videoStream = i; break; } if (videoStream == -1) { if (!want_quiet) fprintf(stderr, "Cannot find a video stream in file %s\n", file_name); avformat_close_input (&pFormatCtx); pFormatCtx=NULL; return -1; } av_stream = pFormatCtx->streams[videoStream]; /* framerate. * Note: frame-accurate seek scales by v_stream->time_base * hence here AVRational fractions are inverse. */ framerate = 0; #if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(55, 0, 100) // 9cf788eca8ba (merge a75f01d7e0) { AVRational fr = av_stream->r_frame_rate; if (fr.den > 0 && fr.num > 0) { framerate = av_q2d (av_stream->r_frame_rate); fr_Q.den = fr.num; fr_Q.num = fr.den; } } #else { AVRational fr = av_stream_get_r_frame_rate (av_stream); if (fr.den > 0 && fr.num > 0) { framerate = av_q2d (fr); fr_Q.den = fr.num; fr_Q.num = fr.den; } } #endif if (framerate < 1 || framerate > 1000) { AVRational fr = av_stream->avg_frame_rate; if (fr.den > 0 && fr.num > 0) { framerate = av_q2d (fr); fr_Q.den = fr.num; fr_Q.num = fr.den; } } if (framerate < 1 || framerate > 1000) { AVRational fr = av_stream->time_base; if (fr.den > 0 && fr.num > 0) { framerate = 1.0 / av_q2d (fr); fr_Q.den = fr.den; fr_Q.num = fr.num; } } if (framerate < 1 || framerate > 1000) { if (!want_quiet) fprintf(stderr, "WARNING: cannot determine video-frame rate, using 25fps.\n"); framerate = 25; fr_Q.den = 25; fr_Q.num = 1; } // detect drop frame timecode if (fabs (framerate - 30000.0 / 1001.0) < 0.01) { have_dropframes=1; if (!want_quiet) fprintf(stdout, "enabled drop-frame-timecode (use -n to override).\n"); } if (av_stream->nb_frames > 0) { frames = av_stream->nb_frames; duration = frames * av_q2d (fr_Q); } else { duration = pFormatCtx->duration / (double)AV_TIME_BASE; frames = pFormatCtx->duration * framerate / (double)AV_TIME_BASE; } one_frame = av_rescale_q (1, fr_Q, av_stream->time_base); if (pFormatCtx->start_time != AV_NOPTS_VALUE) { file_frame_offset = (int64_t) rint (framerate * (double) pFormatCtx->start_time / (double) AV_TIME_BASE); } fidx = malloc (frames * sizeof(struct FrameIndex)); for (i = 0; i < frames; ++i) { fidx[i].pkt_pts = -1; fidx[i].pkt_pos = -1; fidx[i].key = 0; } // recalc offset with new framerate if (smpte_offset) { ts_offset = smptestring_to_frame (smpte_offset); } // Get a pointer to the codec context for the video stream pCodecCtx=pFormatCtx->streams[videoStream]->codec; if (!want_quiet) { fprintf(stdout, "frame rate: %g\n", framerate); fprintf(stdout, "duration in seconds: %g\n", duration); fprintf(stdout, "total frames: %"PRId64"\n", frames); fprintf(stdout, "file start offset: %" PRId64 " video-frames\n", file_frame_offset); fprintf(stderr, "image size: %ix%i px\n", pCodecCtx->width, pCodecCtx->height); } #ifdef CROPIMG movie_width = (pCodecCtx->width / 2); // TODO allow configuration movie_height = pCodecCtx->height; #else movie_width = pCodecCtx->width; movie_height = pCodecCtx->height; #endif /* sample aspect ratio, display aspect ratio */ float sample_aspect = 1.0; if (av_stream->sample_aspect_ratio.num) sample_aspect = av_q2d (av_stream->sample_aspect_ratio); else if (av_stream->codec->sample_aspect_ratio.num) sample_aspect = av_q2d (av_stream->codec->sample_aspect_ratio); else sample_aspect = 1.0; movie_aspect = sample_aspect * (float)pCodecCtx->width / (float) pCodecCtx->height; /* calculate effective width, height */ ffctv_height = movie_height; ffctv_width = ((int)rint (pCodecCtx->height * movie_aspect)); if (ffctv_width > pCodecCtx->width) { ffctv_width = movie_width; ffctv_height = ((int)rint (pCodecCtx->width / movie_aspect)); } if (render_fmt == AV_PIX_FMT_RGB24 || render_fmt == AV_PIX_FMT_BGRA32) { ; } else { // YV12 needs 2x2 area for color movie_width = movie_width & ~1; movie_height = movie_height & ~1; ffctv_width = ffctv_width & ~1; ffctv_height = ffctv_height & ~1; } #ifdef AVFMT_FLAG_GENPTS if (want_genpts) pFormatCtx->flags |= AVFMT_FLAG_GENPTS; #endif if (!want_quiet) { fprintf(stderr, "display size: %ix%i px\n", movie_width, movie_height); } // Find the decoder for the video stream pCodec=avcodec_find_decoder (pCodecCtx->codec_id); if (pCodec==NULL) { if (!want_quiet) fprintf(stderr, "Cannot find a codec for file: %s\n", file_name); avformat_close_input (&pFormatCtx); pFormatCtx = NULL; pCodecCtx = NULL; return -1; } // Open codec if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0) { if (!want_quiet) fprintf(stderr, "Cannot open the codec for file %s\n", file_name); avformat_close_input (&pFormatCtx); pFormatCtx = NULL; pCodecCtx = NULL; return -1; } pFrame=av_frame_alloc(); if (pFrame == NULL) { if (!want_quiet) fprintf(stderr, "Cannot allocate video frame buffer\n"); avcodec_close (pCodecCtx); avformat_close_input (&pFormatCtx); pFormatCtx = NULL; pCodecCtx = NULL; return -1; } pFrameFMT=av_frame_alloc(); if (pFrameFMT == NULL) { if (!want_quiet) fprintf(stderr, "Cannot allocate display frame buffer\n"); av_free (pFrame); avcodec_close (pCodecCtx); avformat_close_input (&pFormatCtx); pFormatCtx = NULL; pCodecCtx = NULL; return -1; } char *tmp; if (have_dropframes) sprintf(OSD_nfo_tme[1], "FPS: %.2f df", framerate); else sprintf(OSD_nfo_tme[1], "FPS: %.3f", framerate); strcat(OSD_nfo_tme[2], "S: "); strcat(OSD_nfo_tme[3], "E: "); strcat(OSD_nfo_tme[4], "L: "); frame_to_smptestring(&OSD_nfo_tme[2][3], file_frame_offset, 1); frame_to_smptestring(&OSD_nfo_tme[3][3], file_frame_offset + frames - 1, 1); frame_to_smptestring(&OSD_nfo_tme[4][3], frames, 1); sprintf(OSD_nfo_geo[1], "PRESCALE: %d x %d", movie_width, movie_height); sprintf(OSD_nfo_geo[3], "GEOMETRY: %d x %d", ffctv_width, ffctv_height); if (av_stream->sample_aspect_ratio.num) sprintf(OSD_nfo_geo[2], "SAR: %d : %d", av_stream->sample_aspect_ratio.num, av_stream->sample_aspect_ratio.den); else if (av_stream->codec->sample_aspect_ratio.num) sprintf(OSD_nfo_geo[2], "SAR: %d : %d", av_stream->codec->sample_aspect_ratio.num, av_stream->codec->sample_aspect_ratio.den); else sprintf(OSD_nfo_geo[2], "SAR: unknown (1 : 1)"); AVRational dar; av_reduce(&dar.num, &dar.den, ffctv_width, ffctv_height, 1024 * 1024); sprintf(OSD_nfo_geo[4], "DAR: %d : %d", dar.num, dar.den); #ifdef PLATFORM_WINDOWS if ((tmp = strrchr(file_name, '\\')) && *++tmp) #else if ((tmp = strrchr(file_name, '/')) && *++tmp) #endif { strncpy(OSD_nfo_tme[0], tmp, sizeof(OSD_nfo_tme[3]) - 1); strncpy(OSD_nfo_geo[0], tmp, sizeof(OSD_nfo_tme[3]) - 1); } else { strncpy(OSD_nfo_tme[0], file_name, sizeof(OSD_nfo_tme[3]) - 1); strncpy(OSD_nfo_geo[0], file_name, sizeof(OSD_nfo_tme[3]) - 1); } OSD_nfo_tme[0][sizeof(OSD_nfo_tme[0]) - 3] = '.'; OSD_nfo_tme[0][sizeof(OSD_nfo_tme[0]) - 2] = '.'; OSD_nfo_tme[0][sizeof(OSD_nfo_tme[0]) - 1] = '\0'; OSD_nfo_geo[0][sizeof(OSD_nfo_tme[0]) - 3] = '.'; OSD_nfo_geo[0][sizeof(OSD_nfo_tme[0]) - 2] = '.'; OSD_nfo_geo[0][sizeof(OSD_nfo_tme[0]) - 1] = '\0'; current_file = strdup (file_name); x_fib_add_recent (current_file, time (NULL)); start_index_thread(); return 0; } static void render_empty_frame (int blit, int splashagain) { if (!buffer) return; // clear image (black / or YUV green) if (render_fmt == AV_PIX_FMT_UYVY422) { int i; for (i=0;i= frames) { OSD_frame[0] = '\0'; int need_redisplay = force_update || displaying_valid_frame; if (OSD_mode&OSD_SMPTE) { if (osd_smpte_ts != timestamp - ts_offset) need_redisplay = 1; osd_smpte_ts = timestamp - ts_offset; strcpy(OSD_smpte, syncname[syncnidx]); frame_to_smptestring (&OSD_smpte[4], osd_smpte_ts, 0); } if ((OSD_mode & (OSD_VTC | OSD_VTCOOR)) == (OSD_VTC | OSD_VTCOOR)) { int64_t oob = timestamp; if (want_ignstart) { oob += file_frame_offset; } if (timestamp < 0) { strcpy(OSD_frame, "-- "); oob -= file_frame_offset; } else { strcpy(OSD_frame, "++ "); oob -= frames; } if (osd_vtc_oob != oob) { need_redisplay = 1; } osd_vtc_oob = oob; frame_to_smptestring (&OSD_frame[3], oob, 1); strcat(OSD_frame, " EOF"); } if (need_redisplay) { render_empty_frame (1, 0); } displaying_valid_frame = 0; return; } if (!force_update && dispFrame == timestamp) return; if (want_verbose) fprintf(stdout, "\t\t\t\tdisplay:%07"PRId64" \r", timestamp); dispFrame = timestamp; if (OSD_mode & (OSD_FRAME | OSD_VTC)) { int64_t dfn; if (want_ignstart) { dfn = dispFrame + file_frame_offset; } else { dfn = dispFrame; } if (OSD_mode&OSD_VTC) { frame_to_smptestring (&OSD_frame[0], dfn, 0); } else { snprintf(OSD_frame, 48, "F:%8"PRId64" ", dfn); } } if (OSD_mode&OSD_SMPTE) { strcpy(OSD_smpte, syncname[syncnidx]); osd_smpte_ts = dispFrame - ts_offset; frame_to_smptestring (&OSD_smpte[4], dispFrame - ts_offset, 0); } if (fFirstTime) { fFirstTime=0; #ifndef HAVE_AV_INIT_PACKET memset (&packet, 0, sizeof(AVPacket)); #else av_init_packet (&packet); packet.data = NULL; packet.size = 0; #endif } if (pFrameFMT && !seek_frame (&packet, timestamp)) { /* Convert the image from its native format to FMT */ // TODO: this can be done once per Video output. int dstStride[8] = {0,0,0,0,0,0,0,0}; switch (render_fmt) { case AV_PIX_FMT_RGBA32: case AV_PIX_FMT_BGRA32: dstStride[0] = movie_width*4; break; case AV_PIX_FMT_BGR24: dstStride[0] = movie_width*3; break; case AV_PIX_FMT_UYVY422: dstStride[0] = movie_width*2; break; case AV_PIX_FMT_YUV420P: default: dstStride[0] = movie_width; dstStride[1] = movie_width/2; dstStride[2] = movie_width/2; } sws_scale (pSWSCtx, (const uint8_t * const*)pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameFMT->data, dstStride); displaying_valid_frame = 1; if (!splashed) { splash(buffer); } render_buffer (buffer); } else { // seek failed of no format if (pFrameFMT && want_debug) printf("DEBUG: frame seek unsucessful.\n"); render_empty_frame (force_update || displaying_valid_frame, 0); displaying_valid_frame = 0; last_decoded_pts = -1; last_decoded_frameno = -1; } } int close_movie () { if (current_file) free (current_file); current_file=NULL; cancel_index_thread(); free (fidx); fidx = NULL; if (!pFrameFMT) return -1; // Free the software scaler sws_freeContext (pSWSCtx); // Free the formatted image if (buffer) free (buffer); buffer=NULL; if (pFrameFMT) av_free (pFrameFMT); pFrameFMT=NULL; //Free the YUV frame if (pFrame) av_free (pFrame); pFrame=NULL; //Close the codec avcodec_close (pCodecCtx); //Close the video file avformat_close_input (&pFormatCtx); duration = frames = 1; pCodecCtx = NULL; pFormatCtx = NULL; movie_width = ffctv_width = 640; movie_height = ffctv_height = 320; movie_aspect = (float)movie_width / (float) movie_height; framerate = 5; OSD_frame[0] = '\0'; OSD_smpte[0] = '\0'; osd_smpte_ts = -1; osd_vtc_oob = -1; clear_info(); Xletterbox (Xgetletterbox()); return (0); } xjadeo-0.8.10/src/xjadeo/weak_libjack.c0000644000175000017500000001626612620454615014626 00000000000000/* xjadeo - weak dynamic JACK linking * * (C) 2014 Robin Gareus * * 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. */ #include "weak_libjack.h" #ifndef USE_WEAK_JACK int init_weak_jack() { return 0; } #else #include #include #ifdef PLATFORM_WINDOWS #include #else #include #endif extern int want_quiet; extern int want_debug; static void* lib_open(const char* const so) { #ifdef PLATFORM_WINDOWS return (void*) LoadLibraryA(so); #else return dlopen(so, RTLD_NOW|RTLD_LOCAL); #endif } static void* lib_symbol(void* const lib, const char* const sym) { #ifdef PLATFORM_WINDOWS return (void*) GetProcAddress((HMODULE)lib, sym); #else return dlsym(lib, sym); #endif } static struct WeakJack { void * _client_open; void * _client_close; void * _get_client_name; void * _get_sample_rate; void * _frames_since_cycle_start; void * _set_graph_order_callback; void * _set_process_callback; void * _on_shutdown; void * _activate; void * _deactivate; void * _port_get_total_latency; void * _port_get_latency_range; void * _port_get_buffer; void * _port_name; void * _get_ports; void * _port_register; void * _connect; void * _free; void * _transport_locate; void * _transport_start; void * _transport_stop; void * _transport_query; #ifdef HAVE_JACKMIDI void * _midi_get_event_count; void * _midi_event_get; #endif #ifdef JACK_SESSION void * _set_session_callback; void * _session_reply; void * _session_event_free; #endif } _j; int init_weak_jack() { void* lib; memset(&_j, 0, sizeof(_j)); #ifdef PLATFORM_OSX lib = lib_open("libjack.dylib"); #elif (defined PLATFORM_WINDOWS) lib = lib_open("libjack.dll"); #else lib = lib_open("libjack.so.0"); #endif if (!lib) { return -1; } #define MAPSYM(SYM, FAIL) _j._ ## SYM = lib_symbol(lib, "jack_" # SYM); \ if (!_j._ ## SYM) err |= FAIL;\ if (!_j._ ## SYM && !want_quiet) fprintf(stderr, "JACK symbol '%s' was not found.\n", "" #SYM); \ if (_j._ ## SYM && want_debug) fprintf(stderr, "mapped JACK symbol '%s'.\n", "" #SYM); int err = 0; MAPSYM(client_open, 2) MAPSYM(client_close, 1) MAPSYM(get_client_name, 1) MAPSYM(get_sample_rate, 1) MAPSYM(frames_since_cycle_start, 1) MAPSYM(set_graph_order_callback, 1) MAPSYM(set_process_callback, 1) MAPSYM(on_shutdown,0) MAPSYM(activate, 1) MAPSYM(deactivate, 1) MAPSYM(port_get_total_latency, 0) MAPSYM(port_get_latency_range, 0) MAPSYM(port_get_buffer, 1) MAPSYM(port_name, 1) MAPSYM(get_ports, 1) MAPSYM(port_register, 1) MAPSYM(connect, 1) MAPSYM(free, 0) MAPSYM(transport_locate, 1) MAPSYM(transport_start, 1) MAPSYM(transport_stop, 1) MAPSYM(transport_query, 1) #ifdef HAVE_JACKMIDI MAPSYM(midi_get_event_count, 1) MAPSYM(midi_event_get, 1) #endif #ifdef JACK_SESSION MAPSYM(set_session_callback, 0) MAPSYM(session_reply, 0) MAPSYM(session_event_free, 0) #endif /* if some required symbol is not found, disable JACK completly */ if (err) { _j._client_open = NULL; } return err; } /* abstraction for jack_client functions */ #define JCFUN(RTYPE, NAME, RVAL) \ RTYPE WJACK_ ## NAME (jack_client_t *client) { \ if (_j._ ## NAME) { \ return ((RTYPE (*)(jack_client_t *client)) _j._ ## NAME)(client); \ } else { \ return RVAL; \ } \ } /* abstraction for NOOP functions */ #define JPFUN(RTYPE, NAME, DEF, ARGS, RVAL) \ RTYPE WJACK_ ## NAME DEF { \ if (_j._ ## NAME) { \ return ((RTYPE (*)DEF) _j._ ## NAME) ARGS; \ } else { \ return RVAL; \ } \ } /* abstraction for functions with return-value-pointer args */ #define JXFUN(RTYPE, NAME, DEF, ARGS, CODE) \ RTYPE WJACK_ ## NAME DEF { \ if (_j._ ## NAME) { \ return ((RTYPE (*)DEF) _j._ ## NAME) ARGS; \ } else { \ CODE \ } \ } /* */ /* expand ellipsis for jack-session */ jack_client_t * WJACK_client_open2 (const char *client_name, jack_options_t options, jack_status_t *status, char *uuid) { if (_j._client_open) { return ((jack_client_t* (*)(const char *client_name, jack_options_t options, jack_status_t *status, ...))_j._client_open)(client_name, options, status, uuid); } else { if (status) *status = 0; return NULL; } } jack_client_t * WJACK_client_open1 (const char *client_name, jack_options_t options, jack_status_t *status) { if (_j._client_open) { return ((jack_client_t* (*)(const char *client_name, jack_options_t options, jack_status_t *status, ...))_j._client_open)(client_name, options, status); } else { if (status) *status = 0; return NULL; } } JCFUN(int, client_close, 0); JCFUN(char*, get_client_name, NULL); JCFUN(jack_nframes_t, get_sample_rate, 0); JPFUN(jack_nframes_t, frames_since_cycle_start, (const jack_client_t *c), (c), 0); JPFUN(int, set_graph_order_callback, (jack_client_t *c, JackGraphOrderCallback g, void *a), (c,g,a), -1); JPFUN(int, set_process_callback, (jack_client_t *c, JackProcessCallback p, void *a), (c,p,a), -1); JPFUN(void, on_shutdown, (jack_client_t *c, JackShutdownCallback s, void *a), (c,s,a), ); JCFUN(int, activate, -1); JCFUN(int, deactivate, -1); JPFUN(jack_nframes_t, port_get_total_latency, (jack_client_t *c, jack_port_t *p), (c,p), 0); JXFUN(void, port_get_latency_range, (jack_port_t *p, jack_latency_callback_mode_t m, jack_latency_range_t *r), (p,m,r), if (r) {r->min = r->max = 0;}); JPFUN(void*, port_get_buffer, (jack_port_t *p, jack_nframes_t n), (p,n), NULL); JPFUN(const char*, port_name, (const jack_port_t *p), (p), NULL); JPFUN(const char**, get_ports,(jack_client_t *c, const char *p, const char *t, unsigned long f), (c,p,t,f), NULL); JPFUN(jack_port_t*, port_register, (jack_client_t *c, const char *n, const char *t, unsigned long f, unsigned long b), (c,n,t,f,b), NULL); JPFUN(int, connect, (jack_client_t *c, const char *s, const char *d), (c,s,d), -1); JXFUN(void, free, (void *p), (p), free(p);); JPFUN(int, transport_locate, (jack_client_t *c, jack_nframes_t f), (c,f), 0); JCFUN(void, transport_start, ); JCFUN(void, transport_stop, ); JXFUN(jack_transport_state_t, transport_query, (const jack_client_t *c, jack_position_t *p), (c,p), memset(p, 0, sizeof(jack_position_t)); return 0;); #ifdef HAVE_JACKMIDI /* */ JPFUN(uint32_t, midi_get_event_count, (void* p), (p), 0); JPFUN(int, midi_event_get, (jack_midi_event_t *e, void *p, uint32_t i), (e,p,i), -1); #endif #ifdef JACK_SESSION /* */ JPFUN(int, set_session_callback, (jack_client_t *c, JackSessionCallback s, void *a), (c,s,a), -1); JPFUN(int, session_reply, (jack_client_t *c, jack_session_event_t *e), (c,e), -1); JPFUN(void, session_event_free, (jack_session_event_t *e), (e), ); #endif #endif xjadeo-0.8.10/src/xjadeo/display_x_dialog.c0000644000175000017500000005276613747776247015563 00000000000000/* xjadeo - simple X11 context menu * * Copyright (C) 2014 Robin Gareus * * 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. */ #include "xjadeo.h" #include "display.h" #include #ifdef XDLG #if (defined HAVE_LIBXV || defined HAVE_IMLIB2 || (defined HAVE_GL && !defined PLATFORM_WINDOWS && !defined PLATFORM_OSX)) void xapi_close (void *d); #include #include static XContext _dlg_ctx = 0; static int _dlg_font_height = 0; static int _dlg_font_ascent = 0; static XColor _c_gray1, _c_gray2; static Font _dlgfont = 0; static Window _dlg_mwin = 0; static Window _dlg_swin = 0; static Window _parent = 0; struct XjxMenuItem { const char *text; const char *key; struct XjxMenuItem *submenu; void (*callback)(void); int enabled; // TODO use a callback ?! int sensitive; }; struct XJDialog { GC gc; int x0; int y0; int width; int height; int menu_hover; int menu_count; struct XjxMenuItem *menu_items; }; static int show_submenu(Display *dpy, struct XjxMenuItem *sm, int x, int y, int pw); static void hide_submenu(Display *dpy); /////////////////////////////////////////////////////////////////////////////// //static void cb_none () { printf("TEST CALLBACK\n"); } static void ui_scale50() { XCresize_percent(50); } static void ui_scale100() { XCresize_percent(100); } static void ui_scale150() { XCresize_percent(150); } static void ui_scale_inc() { XCresize_scale( 1); } static void ui_scale_dec() { XCresize_scale(-1); } static void ui_aspect() { XCresize_aspect(0); } static void ui_ontop() { Xontop(2); } static void ui_letterbox() { Xletterbox(2); } static void ui_fullscreen() { Xfullscreen(2); } static void ui_mousetoggle(){ Xmousepointer(2); } static void ui_offset_rst() { XCtimeoffset( 0, 0); } static void ui_offset_pf() { XCtimeoffset( 1, 0); } static void ui_offset_mf() { XCtimeoffset(-1, 0); } static void ui_offset_pm() { XCtimeoffset( 2, 0); } static void ui_offset_mm() { XCtimeoffset(-2, 0); } static void ui_offset_ph() { XCtimeoffset( 3, 0); } static void ui_offset_mh() { XCtimeoffset(-3, 0); } static void ui_offset_ps() { XCtimeoffset( 4, 0); } static void ui_offset_ms() { XCtimeoffset(-4, 0); } static void ui_quit() { loop_flag=0; } static void ui_open_file() { ; } static void ui_close_file() { if (interaction_override&OVR_LOADFILE) return; xapi_close(NULL); } /* unlisted key-shorcuts * - Esc (quit) * - e, E, 0-9 , Shift + 1-4 (color EQ for xv/imlib) * - [, ] (pan/crop -- ifdef'ed) */ static struct XjxMenuItem submenu_sync[] = { {"JACK", "", NULL, &ui_sync_to_jack, 0, 1}, {"LTC", "", NULL, &ui_sync_to_ltc, 0, 1}, {"MTC (JACK)", "", NULL, &ui_sync_to_mtc_jack, 0, 1}, {"MTC (PortMidi)", "", NULL, &ui_sync_to_mtc_portmidi, 0, 1}, {"MTC (ALSA Seq)", "", NULL, &ui_sync_to_mtc_alsaseq, 0, 1}, {"MTC (ALSA Raw)", "", NULL, &ui_sync_to_mtc_alsaraw, 0, 1}, {"None", "", NULL, &ui_sync_none, 0, 1}, {NULL, NULL, NULL, NULL, 0, 0}, }; static struct XjxMenuItem submenu_size[] = { {"50%", "", NULL, &ui_scale50, 0, 1}, {"100%", ".", NULL, &ui_scale100, 0, 1}, {"150%", "", NULL, &ui_scale150, 0, 1}, {"", "", NULL, NULL, 0, 0}, {"-20%", "<", NULL, &ui_scale_dec, 0, 1}, {"+20%", ">", NULL, &ui_scale_inc, 0, 1}, {"", "", NULL, NULL, 0, 0}, {"Reset Aspect", ",", NULL, &ui_aspect, 0, 1}, {"Retain Aspect (Letterbox)", "L", NULL, &ui_letterbox, 0, 1}, {"", "", NULL, NULL, 0, 0}, {"Window On Top", "A", NULL, &ui_ontop, 0, 1}, {"Fullscreen", "F", NULL, &ui_fullscreen, 0, 1}, {"", "", NULL, NULL, 0, 0}, {"Mouse Cursor", "M", NULL, &ui_mousetoggle, 0, 1}, {NULL, NULL, NULL, NULL, 0, 0}, }; static struct XjxMenuItem submenu_osd[] = { {"External Timecode", "S", NULL, &ui_osd_tc, 0, 1}, {"", "", NULL, NULL, 0, 0}, {"VTC Off", "V", NULL, &ui_osd_vtc_off, 0, 1}, {"VTC Timecode", "", NULL, &ui_osd_vtc_tc, 0, 1}, {"VTC Frame Number", "", NULL, &ui_osd_vtc_fn, 0, 1}, {"", "", NULL, NULL, 0, 0}, {"Offset Off", "O", NULL, &ui_osd_offset_none, 0, 1}, {"Offset Timecode", "", NULL, &ui_osd_offset_tc, 0, 1}, {"Offset Frame Number", "", NULL, &ui_osd_offset_fn, 0, 1}, {"", "", NULL, NULL, 0, 0}, {"Time Info", "I", NULL, &ui_osd_fileinfo, 0, 1}, {"Geometry", "G", NULL, &ui_osd_geo, 0, 1}, {"", "", NULL, NULL, 0, 0}, {"Background", "B", NULL, &ui_osd_box, 0, 1}, {"Swap Position", "P", NULL, &ui_osd_permute, 0, 1}, {"", "", NULL, NULL, 0, 0}, {"Clear All", "Shift+C", NULL, &ui_osd_clear, 0, 1}, {NULL, NULL, NULL, NULL, 0, 0}, }; static struct XjxMenuItem submenu_offs[] = { {"Reset", "\\", NULL, &ui_offset_rst, 0, 1}, {"+ 1 Frame", "=", NULL, &ui_offset_pf, 0, 1}, {"- 1 Frame", "-", NULL, &ui_offset_mf, 0, 1}, {"+ 1 Second", "+", NULL, &ui_offset_ps, 0, 1}, {"- 1 Second", "_", NULL, &ui_offset_ms, 0, 1}, {"+ 1 Minute", "{", NULL, &ui_offset_pm, 0, 1}, {"- 1 Minute", "}", NULL, &ui_offset_mm, 0, 1}, {"+ 1 Hour", "", NULL, &ui_offset_ph, 0, 1}, {"- 1 Hour", "", NULL, &ui_offset_mh, 0, 1}, {NULL, NULL, NULL, NULL, 0, 0}, }; static struct XjxMenuItem submenu_jack[] = { {"Play/Pause", "Space", NULL, &jackt_toggle, 0, 1}, {"Play", "", NULL, &jackt_start, 0, 1}, {"Stop", "", NULL, &jackt_stop, 0, 1}, {"Rewind", "Backspace", NULL, &jackt_rewind, 0, 1}, {NULL, NULL, NULL, NULL, 0, 0}, }; static struct XjxMenuItem submenu_file[] = { {"Open Video", "Ctrl+O", NULL, &ui_open_file, 0, 1}, {"Close Video", "Ctrl+W", NULL, &ui_close_file, 0, 1}, {"", "", NULL, NULL, 0, 0}, {"(Drag&Drop File on", "", NULL, NULL, 0, 1}, {" Window to Load)", "", NULL, NULL, 0, 1}, {"", "", NULL, NULL, 0, 0}, {"Quit", "Ctrl+Q", NULL, &ui_quit, 0, 1}, }; static struct XjxMenuItem mainmenu[] = { {"XJadeo " VERSION, "", NULL, NULL, 0, 1}, {"", "", NULL, NULL, 0, 0}, {"File", "", submenu_file, NULL, 0, 1}, {"Sync", "", submenu_sync, NULL, 0, 1}, {"Display", "", submenu_size, NULL, 0, 1}, {"OSD", "", submenu_osd, NULL, 0, 1}, {"Offset" , "", submenu_offs, NULL, 0, 1}, {"Transport", "", submenu_jack, NULL, 0, 1}, {NULL, NULL, NULL, NULL, 0, 0}, }; #define CLEARMENU(mnu) \ for (i = 0; mnu[i].text; ++i) { mnu[i].enabled = 0; } static void update_menus () { int i; CLEARMENU(mainmenu); CLEARMENU(submenu_sync); CLEARMENU(submenu_size); CLEARMENU(submenu_osd); CLEARMENU(submenu_jack); #ifdef HAVE_LTC submenu_sync[1].sensitive = 1; #else submenu_sync[1].sensitive = 0; #endif #ifdef HAVE_JACKMIDI submenu_sync[2].sensitive = 1; #else submenu_sync[2].sensitive = 0; #endif #ifdef HAVE_PORTMIDI submenu_sync[3].sensitive = 1; #else submenu_sync[3].sensitive = 0; #endif #ifdef ALSA_SEQ_MIDI submenu_sync[4].sensitive = 1; #else submenu_sync[4].sensitive = 0; #endif #ifdef ALSA_RAW_MIDI submenu_sync[5].sensitive = 1; #else submenu_sync[5].sensitive = 0; #endif submenu_sync[ui_syncsource()].enabled = 1; if (OSD_mode&OSD_SMPTE) { submenu_osd[0].enabled = 1; } if (!(OSD_mode&(OSD_FRAME|OSD_VTC))) { submenu_osd[2].enabled = 1; } if (OSD_mode&OSD_VTC) { submenu_osd[3].enabled = 1; } if (OSD_mode&OSD_FRAME) { submenu_osd[4].enabled = 1; } if (!(OSD_mode&(OSD_OFFF|OSD_OFFS))) { submenu_osd[6].enabled = 1; } if (OSD_mode&OSD_OFFS) { submenu_osd[7].enabled = 1; } if (OSD_mode&OSD_OFFF) { submenu_osd[8].enabled = 1; } if (OSD_mode&OSD_NFO) { submenu_osd[10].enabled = 1; } if (OSD_mode&OSD_GEO) { submenu_osd[11].enabled = 1; } if (movie_height < OSD_MIN_NFO_HEIGHT) { submenu_osd[10].sensitive = 0; submenu_osd[11].sensitive = 0; } else { submenu_osd[10].sensitive = 1; submenu_osd[11].sensitive = 1; } if (OSD_mode&OSD_BOX) { submenu_osd[13].enabled = 1; } if (Xgetletterbox()) { submenu_size[8].enabled = 1; } if (Xgetontop()) { submenu_size[10].enabled = 1; } if (Xgetfullscreen()) { submenu_size[11].enabled = 1; } if (!Xgetmousepointer()) { submenu_size[13].enabled = 1; } if ((interaction_override&OVR_AVOFFSET) != 0 ) { mainmenu[6].sensitive = 0; } else { mainmenu[6].sensitive = 1; } if (ui_syncsource() == SYNC_JACK && !(interaction_override&OVR_JCONTROL)) { mainmenu[7].sensitive = 1; } else { mainmenu[7].sensitive = 0; } if (interaction_override & OVR_MENUSYNC) { mainmenu[3].sensitive = 0; } else { mainmenu[3].sensitive = 1; } if (interaction_override & OVR_LOADFILE) { submenu_file[0].sensitive = 0; submenu_file[1].sensitive = 0; submenu_file[3].sensitive = 0; submenu_file[4].sensitive = 0; } else { submenu_file[0].sensitive = 1; submenu_file[1].sensitive = have_open_file() ? 1 : 0; submenu_file[3].sensitive = 1; submenu_file[4].sensitive = 1; } #ifndef XFIB submenu_file[0].sensitive = 0; #endif if (interaction_override & OVR_QUIT_WMG) { submenu_file[6].sensitive = 0; } else { submenu_file[6].sensitive = 1; } } /////////////////////////////////////////////////////////////////////////////// static int query_font_geometry (Display *dpy, GC gc, const char *txt, int *w, int *h, int *a, int *d) { XCharStruct text_structure; int font_direction, font_ascent, font_descent; XFontStruct *fontinfo = XQueryFont (dpy, XGContextFromGC (gc)); if (!fontinfo) { return -1; } XTextExtents (fontinfo, txt, strlen (txt), &font_direction, &font_ascent, &font_descent, &text_structure); if (w) *w = XTextWidth (fontinfo, txt, strlen (txt)); if (h) *h = text_structure.ascent + text_structure.descent; if (a) *a = text_structure.ascent; if (d) *d = text_structure.descent; XFreeFontInfo (NULL, fontinfo, 1); return 0; } static void close_x_dialog_win (Display *dpy, Window *win) { struct XJDialog *dlg = NULL; if (!win || !*win) return; XFindContext (dpy, *win, _dlg_ctx, (XPointer*)&dlg); if (dlg) { XDeleteContext (dpy, *win, _dlg_ctx); XFreeGC (dpy, dlg->gc); free(dlg); } XDestroyWindow (dpy, *win); *win = 0; } static uint8_t font_err = 0; static int x_error_handler(Display *d, XErrorEvent *e) { font_err = 1; return 0; } static int open_x_dialog_win ( Display *dpy, Window *win, int x, int y, int pw, struct XjxMenuItem *menu, const int m_items ) { if (!dpy) return -1; if (!win) return -1; if (*win) return -1; XSetWindowAttributes attr; memset (&attr, 0, sizeof(XSetWindowAttributes)); attr.override_redirect = True; attr.save_under = True; attr.border_pixel = _c_gray2.pixel; attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask | ConfigureNotify | StructureNotifyMask | PointerMotionMask | LeaveWindowMask; int dlg_width = 100; int dlg_height = 100; *win = XCreateWindow ( dpy, DefaultRootWindow (dpy), x, y, dlg_width, dlg_height, 1, CopyFromParent, InputOutput, CopyFromParent, CWOverrideRedirect | CWSaveUnder | CWEventMask | CWBorderPixel, &attr); if (!*win) { return 1; } GC dlg_gc = XCreateGC (dpy, *win, 0, NULL); int (*handler)(Display *, XErrorEvent *) = XSetErrorHandler(&x_error_handler); #define _XTESTFONT(FN) \ { \ font_err = 0; \ _dlgfont = XLoadFont(dpy, FN); \ XSetFont(dpy, dlg_gc, _dlgfont); \ XSync (dpy, False); \ } font_err = 1; if (getenv("XJFONT")) _XTESTFONT (getenv("XJFONT")); if (font_err) _XTESTFONT ("-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*"); if (font_err) _XTESTFONT ("-*-verdana-medium-r-normal-*-12-*-*-*-*-*-*-*"); if (font_err) _XTESTFONT ("-misc-fixed-medium-r-normal-*-13-*-*-*-*-*-*-*"); if (font_err) _XTESTFONT ("-misc-fixed-medium-r-normal-*-12-*-*-*-*-*-*-*"); if (font_err) _dlgfont = None; XSync (dpy, False); XSetErrorHandler(handler); if (_dlg_font_height == 0) { // 1st time only if (query_font_geometry (dpy, dlg_gc, "|0Yy", NULL, &_dlg_font_height, &_dlg_font_ascent, NULL)) { XFreeGC (dpy, dlg_gc); XDestroyWindow (dpy, *win); *win = 0; return -1; } _dlg_font_height +=2; _dlg_font_ascent +=1; } dlg_height = (_dlg_font_height + 2) * (m_items + .5); int i; int max_w = 80; for(i = 0; i < m_items; ++i) { int cw; if (!query_font_geometry(dpy, dlg_gc, menu[i].text, &cw, NULL, NULL, NULL)) { cw += 4; if (menu[i].key && strlen(menu[i].key) > 0) { int ks = 0; query_font_geometry(dpy, dlg_gc, menu[i].key, &ks, NULL, NULL, NULL); cw += ks + 10; } else if (menu[i].submenu) { cw += 10; } if (cw > max_w) max_w = cw; } } dlg_width = max_w + 20; XResizeWindow (dpy, *win, dlg_width, dlg_height); XWindowAttributes wa; XGetWindowAttributes (dpy, *win, &wa); if (wa.screen) { int sc_w = WidthOfScreen (wa.screen) - dlg_width - 5; int sc_h = HeightOfScreen (wa.screen) - dlg_height - 5; if (x > sc_w) x = sc_w - pw; if (y > sc_h) y = y + _dlg_font_height - 2 - dlg_height; XMoveWindow (dpy, *win, x, y); } //NB. this is free()ed on close by XFindContext() reference. struct XJDialog *dlg = malloc(sizeof(struct XJDialog)); dlg->gc = dlg_gc; dlg->x0 = x; dlg->y0 = y; dlg->width = dlg_width; dlg->height = dlg_height; dlg->menu_hover = -1; dlg->menu_count = m_items; dlg->menu_items = menu; XSaveContext(dpy, *win, _dlg_ctx, (XPointer)dlg); XMapRaised (dpy, *win); return 0; } /////////////////////////////////////////////////////////////////////////////// static void dialog_expose (Display *dpy, Window win) { struct XJDialog *dlg = NULL; XFindContext (dpy, win, _dlg_ctx, (XPointer*)&dlg); if (!dlg) return; const unsigned long whiteColor = WhitePixel (dpy, DefaultScreen (dpy)); const unsigned long blackColor = BlackPixel (dpy, DefaultScreen (dpy)); XSetForeground (dpy, dlg->gc, _c_gray1.pixel); XFillRectangle (dpy, win, dlg->gc, 0, 0, dlg->width, dlg->height); int i; for (i=0; i < dlg->menu_count; ++i) { int t_x = 15; int t_y = (i+1) * (_dlg_font_height + 2); if (strlen (dlg->menu_items[i].text) == 0) { t_y -= _dlg_font_ascent * .5; XSetForeground (dpy, dlg->gc, _c_gray2.pixel); XDrawLine (dpy, win, dlg->gc, 5, t_y, dlg->width - 6, t_y); continue; // separator } if (!dlg->menu_items[i].callback && !dlg->menu_items[i].submenu) { // center align headings int t_w = 0; query_font_geometry (dpy, dlg->gc, dlg->menu_items[i].text, &t_w, NULL, NULL, NULL); t_x = (dlg->width - t_w) * .5; } if (dlg->menu_hover == i && dlg->menu_items[i].sensitive && (dlg->menu_items[i].callback || dlg->menu_items[i].submenu)) { XSetForeground (dpy, dlg->gc, blackColor); XFillRectangle (dpy, win, dlg->gc, 2, t_y - _dlg_font_ascent, dlg->width - 4, _dlg_font_height); XSetForeground (dpy, dlg->gc, whiteColor); } else if (!dlg->menu_items[i].sensitive) { XSetForeground (dpy, dlg->gc, _c_gray2.pixel); } else { XSetForeground (dpy, dlg->gc, blackColor); } XDrawString (dpy, win, dlg->gc, t_x, t_y, dlg->menu_items[i].text, strlen (dlg->menu_items[i].text)); if (dlg->menu_items[i].key && strlen(dlg->menu_items[i].key) > 0) { int ks = 10; if (strlen(dlg->menu_items[i].key) > 0) { query_font_geometry(dpy, dlg->gc, dlg->menu_items[i].key, &ks, NULL, NULL, NULL); ks += 5; } XDrawString (dpy, win, dlg->gc, dlg->width - ks, t_y, dlg->menu_items[i].key, strlen (dlg->menu_items[i].key)); } if (dlg->menu_items[i].enabled) { XFillArc (dpy, win, dlg->gc, 5, t_y - _dlg_font_ascent * .5 - 3, 7, 7, 0, 360*64); } if (dlg->menu_items[i].submenu) { XPoint pts[3] = { {dlg->width - 5, t_y - _dlg_font_ascent * .5 + 1}, {-4, -4}, {0, 8}}; XFillPolygon (dpy, win, dlg->gc, pts, 3, Convex, CoordModePrevious); } } XFlush (dpy); } static void dialog_motion (Display *dpy, Window win, int x, int y) { struct XJDialog *dlg = NULL; XFindContext (dpy, win, _dlg_ctx, (XPointer*)&dlg); if (!dlg) return; x -= dlg->x0; y -= dlg->y0; int am; if (x <= 0 || y <= 0 || x >= dlg->width || y >= dlg->height) { am = -1; } else { am = y / (_dlg_font_height + 2); // TODO skip hidden if (am < 0 || am >= dlg->menu_count || !(dlg->menu_items[am].callback || dlg->menu_items[am].submenu) || !(dlg->menu_items[am].sensitive) ) { am = -1; } } #define HAS_SUBMENU(i) (i >= 0 && i <= dlg->menu_count && dlg->menu_items[i].submenu) if (am != dlg->menu_hover) { if (am == -1 && HAS_SUBMENU(dlg->menu_hover)) { ; // keep submenu } else { dlg->menu_hover = am; if (win == _dlg_mwin) { // TOP LEVEL ONLY, not self if (HAS_SUBMENU(dlg->menu_hover)) { show_submenu(dpy, dlg->menu_items[dlg->menu_hover].submenu, dlg->x0, dlg->y0 + (am + .5) * (_dlg_font_height + 2), dlg->width - 1); } else { hide_submenu(dpy); } } dialog_expose (dpy, win); } } } static int dialog_click (Display *dpy, Window win, int x, int y, int b) { struct XJDialog *dlg = NULL; XFindContext (dpy, win, _dlg_ctx, (XPointer*)&dlg); if (!dlg) return -1; x -= dlg->x0; y -= dlg->y0; if (x <= 0 || y <= 0 || x >= dlg->width || y >= dlg->height) { return -1; } if (b != 1) return 0; if (dlg->menu_hover >= 0 && dlg->menu_hover < dlg->menu_count) { if (dlg->menu_items[dlg->menu_hover].callback && dlg->menu_items[dlg->menu_hover].sensitive) { dlg->menu_items[dlg->menu_hover].callback(); close_x_dialog(dpy); #ifdef XFIB if (dlg->menu_items[dlg->menu_hover].callback == &ui_open_file) { if (!(interaction_override&OVR_LOADFILE)) { x_fib_cfg_filter_callback(fib_filter_movie_filename); x_fib_show (dpy, _parent, 0, 0); } } #endif } } return 0; } /////////////////////////////////////////////////////////////////////////////// static int show_submenu(Display *dpy, struct XjxMenuItem *sm, int x, int y, int pw) { assert(_dlg_mwin); close_x_dialog_win(dpy, &_dlg_swin); x += pw; int items; for (items = 0; sm[items].text; ++items); return open_x_dialog_win(dpy, &_dlg_swin, x, y, pw, sm, items); } static void hide_submenu(Display *dpy) { assert(_dlg_mwin); close_x_dialog_win(dpy, &_dlg_swin); } int show_x_dialog (Display *dpy, Window parent, int x, int y) { if (_dlg_mwin) return -1; if (!_dlg_ctx) { _dlg_ctx = XUniqueContext(); } _parent = parent; XColor dummy; Colormap colormap = DefaultColormap (dpy, DefaultScreen (dpy)); if (!XAllocNamedColor (dpy, colormap, "LightGray", &_c_gray1, &dummy)) return -1; if (!XAllocNamedColor (dpy, colormap, "DarkGray", &_c_gray2, &dummy)) return -1; update_menus(); int items; for (items = 0; mainmenu[items].text; ++items); if (open_x_dialog_win(dpy, &_dlg_mwin, x, y, 0, mainmenu, items)) { return -1; } #if 1 XGrabPointer (dpy, _dlg_mwin, True, ButtonReleaseMask | ButtonPressMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | StructureNotifyMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime); XGrabKeyboard (dpy, _dlg_mwin, True, GrabModeAsync, GrabModeAsync, CurrentTime); //XSetInputFocus (dpy, parent, RevertToNone, CurrentTime); #endif return 0; } void close_x_dialog (Display *dpy) { if (!_dlg_mwin) { assert(!_dlg_swin); return; } XUngrabPointer (dpy, CurrentTime); XUngrabKeyboard (dpy, CurrentTime); XSync (dpy, False); close_x_dialog_win(dpy, &_dlg_mwin); close_x_dialog_win(dpy, &_dlg_swin); Colormap colormap = DefaultColormap (dpy, DefaultScreen (dpy)); XFreeColors (dpy, colormap, &_c_gray1.pixel, 1, 0); XFreeColors (dpy, colormap, &_c_gray2.pixel, 1, 0); if (_dlgfont != None) XUnloadFont(dpy, _dlgfont); _dlgfont = None; force_redraw = 1; } int handle_xdlg_event (Display *dpy, XEvent *event) { if (!_dlg_mwin) return 0; assert(event->xany.window); if (event->xany.window != _dlg_mwin && event->xany.window != _dlg_swin) { switch (event->type) { case ButtonRelease: case KeyRelease: close_x_dialog (dpy); break; default: break; } return 0; } switch (event->type) { case ConfigureNotify: //printf("DLG ConfigureNotify %dx%d\n", event->xconfigure.width, event->xconfigure.height); break; case LeaveNotify: { struct XJDialog *dlg = NULL; XFindContext (dpy, event->xany.window, _dlg_ctx, (XPointer*)&dlg); if (dlg && dlg->menu_hover >= 0 && dlg->menu_hover < dlg->menu_count && !dlg->menu_items[dlg->menu_hover].submenu) { dlg->menu_hover = -1; dialog_expose (dpy, event->xany.window); } } break; case Expose: if (event->xexpose.count == 0) { dialog_expose (dpy, event->xany.window); } break; case MotionNotify: dialog_motion (dpy, event->xany.window, event->xmotion.x_root, event->xmotion.y_root); if (event->xmotion.is_hint == NotifyHint) { XGetMotionEvents (dpy, event->xany.window, CurrentTime, CurrentTime, NULL); } break; case ButtonPress: break; case ButtonRelease: if (dialog_click(dpy, event->xany.window, event->xbutton.x_root, event->xbutton.y_root, event->xbutton.button)) { close_x_dialog (dpy); } break; case KeyRelease: close_x_dialog (dpy); break; } return 1; } #endif // platform #endif // XDLG xjadeo-0.8.10/src/xjadeo/ltc-jack.c0000644000175000017500000001072712620454615013704 00000000000000/* xjadeo - Linear Time Code Sync - libltc interface * * (C) 2010-2014 Robin Gareus * * 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. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_LTC #include #include #include #include "xjadeo.h" #include "weak_libjack.h" extern int want_quiet; extern double framerate; void close_ltcjack(void); static jack_nframes_t j_samplerate = 48000; static jack_port_t *j_input_port = NULL; static jack_default_audio_sample_t *j_in; static jack_nframes_t j_latency = 0; static jack_client_t *j_client = NULL; static double ltc_position = 0; static uint64_t monotonic_fcnt = 0; static LTCDecoder *ltc_decoder = NULL; static int myProcess(LTCDecoder *d, double *jt) { LTCFrameExt frame; int rv=0; while (ltc_decoder_read(d,&frame)) { SMPTETimecode stime; ltc_frame_to_time(&stime, &frame.ltc, 0); #ifdef DEBUG printf( "%02d:%02d:%02d%c%02d | %8lld %8lld%s \n", stime.hours, stime.mins, stime.secs, (frame.ltc.dfbit) ? '.' : ':', stime.frame, frame.off_start, frame.off_end, frame.reverse ? " R" : " " ); #endif if (jt) { *jt = (double) ( ((stime.hours*60+stime.mins)*60 +stime.secs) * j_samplerate + ((double)stime.frame*(double)j_samplerate / framerate) + frame.off_end - monotonic_fcnt ); } ++rv; } return rv; } #ifdef NEW_JACK_LATENCY_API static int jack_latency_cb(void *arg) { jack_latency_range_t jlty; WJACK_port_get_latency_range(j_input_port, JackCaptureLatency, &jlty); j_latency = jlty.max; return 0; } #endif /** * jack audio process callback */ static int process (jack_nframes_t nframes, void *arg) { unsigned char sound[8192]; size_t i; j_in = WJACK_port_get_buffer (j_input_port, nframes); #ifndef NEW_JACK_LATENCY_API j_latency = WJACK_port_get_total_latency(j_client,j_input_port); #endif if (nframes > 8192) return 0; for (i = 0; i < nframes; i++) { const int snd=(int)rint((127.0*j_in[i])+128.0); sound[i] = (unsigned char) (snd&0xff); } ltc_decoder_write(ltc_decoder, sound, nframes, monotonic_fcnt - j_latency); myProcess(ltc_decoder, <c_position); monotonic_fcnt += nframes; return 0; } /** * JACK calls this shutdown_callback if the server ever shuts down or * decides to disconnect the client. */ static void ltcjack_shutdown (void *arg) { j_client = NULL; xj_shutdown_jack(); close_ltcjack(); if (!want_quiet) fprintf (stderr, "jack server shutdown\n"); } static int jack_portsetup(void) { ltc_decoder = ltc_decoder_create(j_samplerate * 25, 8); if (!ltc_decoder) return -1; if ((j_input_port = WJACK_port_register (j_client, "ltc-input", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0)) == 0) { fprintf (stderr, "cannot register input port \"ltc-input\"!\n"); return -1; } #ifdef NEW_JACK_LATENCY_API WJACK_set_graph_order_callback (j_client, jack_latency_cb, NULL); jack_latency_cb(NULL); #endif return 0; } /* API */ int64_t ltc_poll_frame (void) { return (int64_t) rint(ltc_position * framerate / (double)j_samplerate); } void open_ltcjack(char *autoconnect) { if (xj_init_jack (&j_client, "xjadeo")) { return; } WJACK_set_process_callback (j_client, process, 0); #ifndef PLATFORM_WINDOWS WJACK_on_shutdown (j_client, ltcjack_shutdown, 0); #endif j_samplerate=WJACK_get_sample_rate (j_client); if (jack_portsetup()) { close_ltcjack(); return; } if (WJACK_activate (j_client)) { close_ltcjack(); return; } } int ltcjack_connected(void) { if (j_client) return 1; return 0; } void close_ltcjack(void) { xj_close_jack(&j_client); if (ltc_decoder) { ltc_decoder_free(ltc_decoder); } j_client=NULL; ltc_decoder=NULL; return; } #else #include int64_t ltc_poll_frame (void) { return 0;} void open_ltcjack(char *autoconnect) { ; } void close_ltcjack(void) { ; } int ltcjack_connected(void) { return 0;} #endif xjadeo-0.8.10/src/xjadeo/remote.c0000644000175000017500000010734013667475574013530 00000000000000/* xjadeo - remote control abstraction and command parser * * (C) 2006-2014 Robin Gareus * * 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. */ /** * * XAPI return values: * 1xx: command succeeded * 2xx: query variable succeeded: * 3xx: async messages (initiated by xjadeo) * 4xx: error * 8xx: info message (eg. help) * * more detailed: * 100: * 101: var= * 124: vmode= : (list of avail video modes) * * 201: var= // long int * 202: var= * 210: var=x * 220: var= * 228: var= * * 301: frame changed * 310: key press * * suggestions, TODO: * 5xx: command succeeded, but status is negative. * eg. 510 midi not connected, but available * which is currenlty 199. * * grep "void xapi" remote.c | sed 's/ {/;/ '> remote.h */ #include "xjadeo.h" #include // needed for PIX_FMT #include #include #include #include //------------------------------------------------ // extern Globals (main.c) //------------------------------------------------ extern int loop_flag; extern int movie_width; extern int movie_height; extern int ffctv_width; extern int ffctv_height; extern float movie_aspect; extern AVFrame *pFrameFMT; extern uint8_t *buffer; // needs to be set before calling movie_open extern int render_fmt; /* Video File Info */ extern double duration; extern double framerate; extern int64_t frames; extern AVFormatContext *pFormatCtx; extern int videoStream; extern int force_redraw; // tell the main event loop that some cfg has changed /* Option flags and variables */ extern char *current_file; extern int64_t ts_offset; extern char *smpte_offset; extern int64_t userFrame; extern int64_t dispFrame; extern int want_quiet; extern int want_verbose; extern int want_letterbox; extern int remote_en; extern int mq_en; extern char *ipc_queue; extern int remote_mode; #ifdef HAVE_MIDI extern int midi_clkconvert; extern int midi_clkadj; extern char midiid[128]; #endif #ifdef TIMEMAP extern int64_t timeoffset; extern double timescale; extern int wraparound; #endif extern double delay; extern int videomode; extern int interaction_override; // On screen display extern char OSD_fontfile[1024]; extern char OSD_text[128]; extern int OSD_mode; extern int OSD_fx, OSD_tx, OSD_sx, OSD_fy, OSD_sy, OSD_ty; #define REMOTE_RX (fileno(stdin)) #define REMOTE_TX (fileno(stdout)) #define REMOTEBUFSIZ 4096 void remote_printf(int val, const char *format, ...); //-------------------------------------------- // API commands //-------------------------------------------- void xapi_printversion(void *d) { remote_printf(220, "version=%s", VERSION); } void xapi_versiondetails(void *d) { remote_printf(290, "version=%s", VERSION); #ifdef SUBVERSION if (strlen(SUBVERSION) > 0 && strcmp(SUBVERSION, "exported")) { remote_printf (291, "scm=%s", SUBVERSION); } else #endif remote_printf (291, "scm=unknown"); remote_printf(292, "av=0x%x 0x%x 0x%x", LIBAVFORMAT_VERSION_INT, LIBAVCODEC_VERSION_INT, LIBAVUTIL_VERSION_INT); remote_printf (293, "configuration=%s", cfg_features); remote_printf (294, "MTC/MIDI=%s", cfg_midi); remote_printf (295, "display=%s", cfg_displays); remote_printf (296, "compat=%s", cfg_compat); } void xapi_open(void *d) { char *fn= (char*)d; //printf("open file: '%s'\n",fn); if ( open_movie(fn)) remote_printf(403, "failed to open file '%s'",fn); else remote_printf(129, "opened file: '%s'",fn); init_moviebuffer(); newsourcebuffer(); Xletterbox(Xgetletterbox()); force_redraw=1; } void xapi_close(void *d) { if (!close_movie()) { remote_printf(100, "closed video buffer."); init_moviebuffer(); newsourcebuffer(); } else remote_printf(404, "no video buffer to close."); } void xapi_close_window(void *d) { close_window(); remote_printf(100, "window closed."); } void xapi_set_videomode(void *d) { int vmode; if (getvidmode() != VO_AUTO) { remote_printf(413, "cannot change videomode while window is open."); return; } vmode=parsevidoutname(d); if (vmode==0 ) vmode = atoi((char*)d); if (vmode <0) { remote_printf(414, "video mode needs to be a positive integer or 0 for autodetect."); return; } render_fmt = vidoutmode(vmode); remote_printf(100, "setting video mode to %i", getvidmode()); open_window(); // required here; else VOutout callback fn will fail. if (pFrameFMT && current_file) { // reinit buffer with new format char *fn=strdup(current_file); open_movie(fn); free(fn); } else { if(buffer) free(buffer); buffer=NULL; // set videomode to 0 or loop_flag=0? } init_moviebuffer(); force_redraw=1; } void xapi_open_window(void *d) { if (getvidmode() != VO_AUTO) { remote_printf(412, "window already open."); return; } xapi_set_videomode("0"); } void xapi_pvideomode(void *d) { remote_printf(201,"videomode=%i", getvidmode()); } void xapi_lvideomodes(void *d) { int i=0; remote_printf(100,"list video modes."); while (vidoutsupported(++i)>=0) { if (vidoutsupported(i)) remote_printf(124,"vmode=%i : %s",i,vidoutname(i)); else remote_printf(800,"n/a=%i : %s",i,vidoutname(i)); } } void xapi_pletterbox(void *d) { if (want_letterbox) remote_printf(201,"letterbox=1 # fixed aspect ratio"); else remote_printf(201,"letterbox=0 # free scaling"); } void xapi_sletterbox(void *d) { int action=2; if (!strcmp(d,"on") || atoi(d)==1) action=1; else if (!strcmp(d,"off")) action=0; Xletterbox (action); xapi_pletterbox(NULL); } void xapi_pwinpos(void *d) { int x,y; Xgetpos(&x,&y); remote_printf(210,"windowpos=%ix%i",x,y); } void xapi_pwinsize(void *d) { unsigned int x,y; Xgetsize(&x,&y); remote_printf(210,"windowsize=%ux%u",x,y); } void xapi_saspect (void *d) { unsigned int my_Width,my_Height; Xgetsize(&my_Width,&my_Height); // resize to match movie aspect ratio // dup code in display_x11.c (!) if( movie_aspect < ((float)my_Width/(float)my_Height) ) my_Width=floor((float)my_Height * movie_aspect); else my_Height=floor((float)my_Width / movie_aspect); remote_printf(100,"resizing window to %ux%u",my_Width, my_Height); Xresize(my_Width, my_Height); } void xapi_swinsize(void *d) { unsigned int w,h; char *size= (char*)d; char *tmp; h=ffctv_height; w=ffctv_width; if ((tmp=strchr(size,'x')) && ++tmp) { w=atoi(size); h=atoi(tmp); } else { int percent=atoi(size); if (percent > 0 && percent <= 500) { w*= percent; w/=100; h*= percent; h/=100; } } remote_printf(100,"resizing window to %ux%u",w,h); Xresize(w,h); } void xapi_ontop(void *d) { int action=_NET_WM_STATE_TOGGLE; if (!strcmp(d,"on") || atoi(d)==1) action=_NET_WM_STATE_ADD; else if (!strcmp(d,"toggle")) action=_NET_WM_STATE_TOGGLE; else if (!strcmp(d,"off") || atoi(d)==0) action=_NET_WM_STATE_REMOVE; remote_printf(100,"ok."); Xontop(action); } void xapi_fullscreen(void *d) { int action=_NET_WM_STATE_TOGGLE; if (!strcmp(d,"on") || atoi(d)==1) action=_NET_WM_STATE_ADD; else if (!strcmp(d,"toggle")) action=_NET_WM_STATE_TOGGLE; else if (!strcmp(d,"off") || atoi(d)==0) action=_NET_WM_STATE_REMOVE; remote_printf(100,"ok."); Xfullscreen(action); } void xapi_pontop(void *d) { if (Xgetontop()) remote_printf(201,"windowontop=1 # always on top"); else remote_printf(201,"windowontop=0 # normal window stack"); } void xapi_pfullscreen(void *d) { if (Xgetfullscreen()) remote_printf(201,"fullscreen=1 # full-screen"); else remote_printf(201,"fullscreen=0 # windowed"); } void xapi_mousepointer(void *d) { int action=2; if (!strcmp(d,"on") || atoi(d)==1) action=1; else if (!strcmp(d,"off")) action=0; Xmousepointer (action); remote_printf(100,"ok."); } void xapi_poverride(void *d) { remote_printf(201,"override=%i", interaction_override); } void xapi_soverride(void *d) { interaction_override=atoi(d); //remote_printf(100,"ok."); xapi_poverride(NULL); } void xapi_swinpos(void *d) { char *t0= (char*)d; char *t1; if ((t1=strchr(t0,'x')) && ++t1) { int x,y; x=atoi(t0); y=atoi(t1); remote_printf(100,"positioning window to %ix%i",x,y); Xposition(x,y); } else { remote_printf(421,"invalid position argument (example 200x100)"); } } void xapi_exit(void *d) { remote_printf(489,"exit is not a xjadeo command - use 'quit' to terminate this session."); } void xapi_quit(void *d) { remote_printf(100,"quit."); loop_flag=0; } void xapi_pfilename(void *d) { if (current_file) remote_printf(220, "filename=%s", current_file); else remote_printf(410, "no open video file"); } void xapi_pduration(void *d) { remote_printf(202, "duration=%g", duration); } void xapi_pframerate(void *d) { remote_printf(202, "framerate=%g", framerate); } void xapi_pframes(void *d) { remote_printf(201, "frames=%"PRId64, frames); } void xapi_poffset(void *d) { remote_printf(201,"offset=%"PRId64, ts_offset); } void xapi_ptimescale(void *d) { #ifdef TIMEMAP remote_printf(202,"timescale=%g", timescale); remote_printf(201,"timeoffset=%"PRId64, timeoffset); #else remote_printf(499,"timescale is not available."); #endif } void xapi_ploop(void *d) { #ifdef TIMEMAP remote_printf(201,"loop=%d", wraparound); #else remote_printf(499,"looping is not available."); #endif } void xapi_pseekmode (void *d) { remote_printf(899,"seekmode is deprecated."); } void xapi_sseekmode (void *d) { xapi_pseekmode(NULL); } void xapi_pmwidth(void *d) { remote_printf(201,"movie_width=%i", movie_width); } void xapi_pmheight(void *d) { remote_printf(201,"movie_height=%i", movie_height); } void xapi_soffset(void *d) { ts_offset = smptestring_to_frame((char*)d); remote_printf(101,"offset=%"PRId64, ts_offset); } void xapi_stimescale(void *d) { #ifdef TIMEMAP char *t1; timescale = atof((char*)d); if ((t1=strchr((char*)d,' ')) && ++t1) { timeoffset = atol(t1); } xapi_ptimescale(NULL); force_redraw=1; #else remote_printf(499,"timescale is not available."); #endif } void xapi_sloop(void *d) { #ifdef TIMEMAP wraparound = atoi((char*)d)?1:0; #else remote_printf(499,"timescale is not available."); #endif } void xapi_sreverse(void *d) { #ifdef TIMEMAP timescale *= -1.0; if (timescale<0) timeoffset = (-2.0*timescale) *dispFrame; // TODO: check file-offset and ts_offset. else timeoffset = 0; // TODO - applt diff dispFrame <> transport src #endif } void xapi_pposition(void *d) { remote_printf(201,"position=%"PRId64, dispFrame); } void xapi_psmpte(void *d) { char smptestr[13]; frame_to_smptestring(smptestr, dispFrame, 0); remote_printf(228,"smpte=%s",smptestr, 0); } void xapi_seek(void *d) { userFrame = smptestring_to_frame((char*)d); remote_printf(101,"defaultseek=%"PRId64, userFrame); } void xapi_pfps(void *d) { remote_printf(201,"updatefps=%i",(int) rint(1/delay)); } void xapi_sfps(void *d) { char *off= (char*)d; if(atof(off)>0) delay = 1.0 / atof(off); else delay = -1; // use file-framerate remote_printf(101,"updatefps=%i",(int) rint(1/delay)); } static void xapi_sframerate(void *d) { remote_printf(899,"file framerate is deprecated."); } static void xapi_jack_status(void *d) { if (jack_connected()) remote_printf(220,"jackclient=%s", xj_jack_client_name()); else remote_printf(100,"not connected to jack server"); } void xapi_ltc_status(void *d) { if (ltcjack_connected()) remote_printf(220,"jackclient=%s", xj_jack_client_name()); else remote_printf(100,"no open LTC JACK source"); } void xapi_open_ltc(void *d) { INT_sync_to_ltc((char *) d, 1); } void xapi_close_ltc(void *d) { #ifdef HAVE_LTC close_ltcjack(); remote_printf(100,"closed ltc-jack connection"); #else remote_printf(499,"LTC-jack is not available."); #endif } void xapi_open_jack(void *d) { INT_sync_to_jack(1); } void xapi_close_jack(void *d) { close_jack(); remote_printf(100,"closed jack connection"); } void xapi_osd_smpte(void *d) { int y = atoi((char*)d); if (y<0){ OSD_mode&=~OSD_SMPTE; remote_printf(100,"hiding smpte OSD"); } else if (y<=100) { OSD_mode|=OSD_SMPTE; OSD_sy=y; remote_printf(100,"rendering smpte on position y:%i%%",y); } else remote_printf(422,"invalid argument (range -1..100)"); force_redraw=1; //display_frame((int64_t)(dispFrame),1); // update OSD } void xapi_osd_frame(void *d) { int y = atoi((char*)d); if (y<0){ OSD_mode&=~OSD_FRAME; remote_printf(100,"hiding frame OSD"); } else if (y<=100) { OSD_mode|=OSD_FRAME; OSD_fy=y; remote_printf(100,"rendering frame on position y:%i%%",y); } else remote_printf(422,"invalid argument (range -1..100)"); force_redraw=1; //display_frame((int64_t)(dispFrame),1); // update OSD } void xapi_osd_off(void *d) { OSD_mode&=~OSD_TEXT; remote_printf(100,"hiding OSD"); force_redraw=1; //display_frame((int64_t)(dispFrame),1); // update OSD } void xapi_osd_on(void *d) { OSD_mode|=OSD_TEXT; remote_printf(100,"rendering OSD"); force_redraw=1; //display_frame((int64_t)(dispFrame),1); // update OSD } void xapi_osd_text(void *d) { snprintf(OSD_text,128,"%s",(char*)d); force_redraw=1; //display_frame((int64_t)(dispFrame),1,1); // update OSD xapi_osd_on(NULL); } void xapi_osd_font(void *d) { snprintf(OSD_fontfile,1024,"%s",(char*)d); xapi_osd_on(NULL); } void xapi_osd_nobox(void *d) { OSD_mode&=~OSD_BOX; remote_printf(100,"OSD transparent background"); force_redraw=1; //display_frame((int64_t)(dispFrame),1); // update OSD } void xapi_osd_box(void *d) { OSD_mode|=OSD_BOX; remote_printf(100,"OSD black box background"); force_redraw=1; //display_frame((int64_t)(dispFrame),1); // update OSD } void xapi_osd_avail(void *d) { #ifdef HAVE_FT remote_printf(100,"rendering OSD is supported"); #else remote_printf(490,"this feature is not compiled"); #endif } void xapi_osd_mode(void *d) { int m = atoi((char*)d); if (m&1) OSD_mode|=OSD_FRAME; else OSD_mode&=~OSD_FRAME; if (m&2) OSD_mode|=OSD_SMPTE; else OSD_mode&=~OSD_SMPTE; if (m&4) OSD_mode|=OSD_TEXT; else OSD_mode&=~OSD_TEXT; if (m&8) OSD_mode|=OSD_BOX; else OSD_mode&=~OSD_BOX; if (m&16) OSD_mode|=OSD_VTC; else OSD_mode&=~OSD_VTC; remote_printf(100,"set osdmode=%i", (OSD_mode&OSD_FRAME ?1:0) |(OSD_mode&OSD_SMPTE ?2:0) |(OSD_mode&OSD_TEXT ?4:0) |(OSD_mode&OSD_BOX ?8:0) |(OSD_mode&OSD_VTC ?16:0) ); force_redraw=1; } void xapi_posd(void *d) { #ifdef HAVE_FT remote_printf(201,"osdmode=%i", (OSD_mode&OSD_FRAME ?1:0) |(OSD_mode&OSD_SMPTE ?2:0) |(OSD_mode&OSD_TEXT ?4:0) |(OSD_mode&OSD_BOX ?8:0) |(OSD_mode&OSD_VTC ?16:0) ); remote_printf(220,"osdfont=%s", OSD_fontfile); remote_printf(220,"osdtext=%s", OSD_text); #else remote_printf(490,"this feature is not compiled"); #endif } void xapi_psync(void *d) { int ss =0; #ifdef HAVE_LTC if (ltcjack_connected()) ss=3; else #endif #ifdef HAVE_MIDI if (midi_connected()) ss=2; else #endif if (jack_connected()) ss=1; remote_printf(201,"syncsource=%i",ss); } void xapi_osd_pos(void *d) { char *t0= (char*)d; char *t1; if ((t1=strchr(t0,' ')) && ++t1) { OSD_tx=atoi(t0); OSD_ty=atoi(t1); if (OSD_tx > OSD_RIGHT) OSD_tx=OSD_RIGHT; if (OSD_tx < OSD_LEFT) OSD_tx=OSD_LEFT; if (OSD_ty > 100) OSD_ty=100; if (OSD_ty < 0) OSD_ty=0; remote_printf(100,"realigning OSD"); } else { remote_printf(421,"invalid argument (example 1 95)"); } force_redraw=1; //display_frame((int64_t)(dispFrame),1); // update OSD } void xapi_midi_status(void *d) { #ifdef HAVE_MIDI // FIXME: we shall return "200,midiid=XXX" // and "100 not connected" ?? as in jack connected // BUT: // midiid can be (portmidi) or string (alsa midi) if (midi_connected()) remote_printf(100,"midi connected."); else remote_printf(199,"midi not connected."); #else remote_printf(499,"midi not available."); #endif } void xapi_smididriver(void *d) { #ifdef HAVE_MIDI char *mp = NULL; if (d && strlen(d)>0) mp=d; if (midi_choose_driver(mp)>0) { remote_printf(100,"ok."); } else { remote_printf(440,"chosen MIDI driver is not supported."); } #else remote_printf(499,"midi not available."); #endif } void xapi_open_midi(void *d) { if (jack_connected()) close_jack(); #ifdef HAVE_LTC if (ltcjack_connected()) close_ltcjack(); #endif #ifdef HAVE_MIDI char *mp; if (d && strlen(d)>0) mp=d; else mp="-1"; // midiid ? if (midi_connected()) remote_printf(441,"MIDI port already connected."); midi_open(mp); if (midi_connected()) { remote_printf(100,"MIDI connected."); strncpy(midiid,mp,32); midiid[31]=0; } else remote_printf(440,"MIDI open failed."); #else remote_printf(499,"midi not available."); #endif } void xapi_reopen_midi(void *d) { #ifdef HAVE_MIDI midi_close(); xapi_open_midi(midiid); #endif } void xapi_close_midi(void *d) { #ifdef HAVE_MIDI midi_close(); remote_printf(100,"midi close."); #else remote_printf(499,"midi not available."); #endif } void xapi_detect_midi(void *d) { #ifdef HAVE_MIDI midi_open("-1"); if (midi_connected()) remote_printf(100,"MIDI connected."); else remote_printf(440,"MIDI open failed."); #else remote_printf(499,"midi not available."); #endif } void xapi_pmidilibrary (void *d) { #ifdef HAVE_MIDI remote_printf(220,"mididrv=%s", midi_driver_name()); #else remote_printf(499,"midi not available."); #endif } void xapi_pmidiclk(void *d) { #ifdef HAVE_MIDI remote_printf(201,"midiclk=%i", midi_clkadj); #else remote_printf(499,"midi not available."); #endif } void xapi_smidiclk(void *d) { #ifdef HAVE_MIDI midi_clkadj = atoi((char*)d)?1:0; remote_printf(101,"midiclk=%i", midi_clkadj); #else remote_printf(499,"midi not available."); #endif } void xapi_pmidisync(void *d) { #ifdef HAVE_MIDI remote_printf(201,"midisync=%i", midi_clkconvert); #else remote_printf(499,"midi not available."); #endif } void xapi_smidisync(void *d) { #ifdef HAVE_MIDI midi_clkconvert = atoi((char*)d); remote_printf(101,"midisync=%i", midi_clkconvert); #else remote_printf(499,"midi not available."); #endif } void xapi_bidir_alloff(void *d) { remote_printf(100,"disabled frame notification."); remote_mode=0; } void xapi_bidir_loop(void *d) { remote_printf(100,"enabled frame notify."); remote_mode|=NTY_FRAMELOOP; } void xapi_bidir_noloop(void *d) { remote_printf(100,"disabled frame notification."); remote_mode&=~NTY_FRAMELOOP; } void xapi_bidir_frame(void *d) { remote_printf(100,"enabled frame notify."); remote_mode|=NTY_FRAMECHANGE; } void xapi_bidir_noframe(void *d) { remote_printf(100,"disabled frame notification."); remote_mode&=~NTY_FRAMECHANGE; } void xapi_bidir_settings(void *d) { remote_printf(100,"enabled settings notify."); remote_mode|=NTY_SETTINGS; } void xapi_bidir_nosettings(void *d) { remote_printf(100,"disabled frame notification."); remote_mode&=~NTY_SETTINGS; } void xapi_bidir_keyboard(void *d) { remote_printf(100,"enabled keypress notify."); remote_mode|=NTY_KEYBOARD; } void xapi_bidir_nokeyboard(void *d) { remote_printf(100,"disabled frame notification."); remote_mode&=~NTY_KEYBOARD; } void xapi_ping(void *d) { remote_printf(100,"pong."); } void xapi_null(void *d) { remote_printf(402,"command not implemented."); } static void api_help(void *d); //-------------------------------------------- // cmd interpreter //-------------------------------------------- typedef void myfunction (void *); typedef struct _command { const char *name; const char *help; struct _command *children; myfunction *func; int sticky; // unused } Dcommand; static Dcommand cmd_midi[] = { /* {"autoconnect", ": discover and connect to midi time source", NULL, xapi_detect_midi, 0 }, */ {"connect ", ": connect to midi time source (-1: discover)", NULL, xapi_open_midi, 0 }, {"disconnect", ": close midi device", NULL, xapi_close_midi, 0 }, {"reconnect", ": connect to last specified midi port", NULL, xapi_reopen_midi, 0 }, {"status", ": display status of midi connection", NULL, xapi_midi_status, 0 }, {"driver ", ": select midi driver", NULL, xapi_smididriver, 0 }, {"driver", ": display the used midi driver", NULL, xapi_pmidilibrary, 0 }, {"library", ": alias for 'midi driver' (deprecated)", NULL, xapi_pmidilibrary, 0 }, {"sync ", ": set MTC smpte conversion. 0:MTC 2:Video 3:resample", NULL, xapi_smidisync, 0 }, {"clk ", "[1|0]: use MTC quarter frames", NULL, xapi_smidiclk, 0 }, {NULL, NULL, NULL , NULL, 0} }; static Dcommand cmd_jack[] = { {"connect", ": connect and sync to jack server", NULL, xapi_open_jack , 0 }, {"disconnect", ": disconnect from jack server", NULL, xapi_close_jack , 0 }, {"status", ": get status of jack connection", NULL, xapi_jack_status , 0 }, {NULL, NULL, NULL , NULL, 0} }; static Dcommand cmd_ltc[] = { {"connect", ": connect and sync to LTC server", NULL, xapi_open_ltc , 0 }, {"disconnect", ": disconnect from LTC", NULL, xapi_close_ltc , 0 }, {"status", ": get status of jack connection", NULL, xapi_ltc_status , 0 }, {NULL, NULL, NULL , NULL, 0} }; static Dcommand cmd_osd[] = { {"frame " , ": render current frame number. y=0..100 (negative integer: disable)", NULL, xapi_osd_frame, 0 }, {"smpte " , ": render sync timecode. y=0..100 (negative integer: disable)", NULL, xapi_osd_smpte, 0 }, {"text " , ": render on screen", NULL, xapi_osd_text, 0 }, {"text" , ": display prev. OSD text", NULL, xapi_osd_on, 0 }, {"notext" , ": clear text OSD", NULL, xapi_osd_off, 0 }, {"off" , ": same as 'osd notext'", NULL, xapi_osd_off, 0 }, {"on" , ": same as 'osd text'", NULL, xapi_osd_on, 0 }, {"pos " , " : xalign=0..2 (L,C,R) ypos=0..100", NULL, xapi_osd_pos, 0 }, {"available" , ": return 100 if freetype OSD is available", NULL, xapi_osd_avail, 0 }, {"font " , ": use this TTF font file", NULL, xapi_osd_font, 0 }, {"box" , ": forces a black box around the OSD", NULL, xapi_osd_box, 0 }, {"nobox" , ": transparent OSD background", NULL, xapi_osd_nobox, 0 }, {"mode" , ": restore OSD as returned by 'get osdcfg'", NULL, xapi_osd_mode, 0 }, {NULL, NULL, NULL , NULL, 0} }; static Dcommand cmd_get[] = { {"position", ": return current frame position", NULL, xapi_pposition , 0 }, {"smpte", ": return current frame position", NULL, xapi_psmpte , 0 }, {"fps", ": display current update frequency", NULL, xapi_pfps , 0 }, {"offset", ": show current frame offset", NULL, xapi_poffset , 0 }, {"timescale", ": show scale/offset", NULL, xapi_ptimescale , 0 }, {"loop", ": show loop/wrap-around setting", NULL, xapi_ploop , 0 }, {"file", ": print filename of current video buffer", NULL, xapi_pfilename , 0 }, {"duration", ": query length of video buffer in seconds", NULL, xapi_pduration , 0 }, {"frames", ": show length of video buffer in frames", NULL, xapi_pframes , 0 }, {"framerate", ": show frame rate of video file", NULL, xapi_pframerate , 0 }, {"width", ": query width of video source buffer", NULL, xapi_pmwidth , 0 }, {"height", ": query width of video source buffer", NULL, xapi_pmheight , 0 }, {"seekmode", ": deprecated - no return value", NULL, xapi_pseekmode, 0 }, {"windowsize" , ": show current window size", NULL, xapi_pwinsize, 0 }, {"windowpos" , ": show current window position", NULL, xapi_pwinpos, 0 }, {"videomode" , ": display current video mode", NULL, xapi_pvideomode, 0 }, {"midisync", ": display midi SMPTE conversion mode", NULL, xapi_pmidisync, 0 }, {"midiclk", ": MTC quarter frame precision", NULL, xapi_pmidiclk, 0 }, {"osdcfg", ": display status on screen display", NULL, xapi_posd, 0 }, {"syncsource", ": display currently used sync source", NULL, xapi_psync, 0 }, {"letterbox" , ": query video scaling mode", NULL, xapi_pletterbox, 0 }, {"fullscreen" , ": is xjadeo displayed on full screen", NULL, xapi_pfullscreen, 0 }, {"ontop" , ": query window on top mode", NULL, xapi_pontop, 0 }, {"override", ": query disabled window events", NULL, xapi_poverride , 0 }, {"version", ": query xjadeo version", NULL, xapi_printversion , 0 }, {"appinfo", ": query version details", NULL, xapi_versiondetails , 0 }, {NULL, NULL, NULL , NULL, 0} }; static Dcommand cmd_notify[] = { {"disable" , ": disable async messages", NULL, xapi_bidir_alloff, 0 }, {"off" , ": alias for 'disable'", NULL, xapi_bidir_alloff, 0 }, {"frame" , ": subscribe to async frame-update messages", NULL, xapi_bidir_frame, 0 }, {"keyboard" , ": subscribe to async key-press notifications", NULL, xapi_bidir_keyboard, 0 }, {"loop" , ": enable continuous frame position messages", NULL, xapi_bidir_loop, 0 }, {"settings" , ": receive a dump of current settings when xjadeo shuts down", NULL, xapi_bidir_settings, 0 }, {"noframe" , ": stop frame-update message subscription", NULL, xapi_bidir_noframe, 0 }, {"noloop" , ": disable continuous frame position messages", NULL, xapi_bidir_noloop, 0 }, {"nokeyboard" , ": disable async key-press notification messages", NULL, xapi_bidir_nokeyboard, 0 }, {"nosettings" , ": disable async settings dump on shutdown", NULL, xapi_bidir_nosettings, 0 }, {NULL, NULL, NULL , NULL, 0} }; static Dcommand cmd_window[] = { {"close", ": close window", NULL, xapi_close_window, 0 }, {"open", ": open window", NULL, xapi_open_window, 0 }, {"mode " , ": change video mode and open window", NULL, xapi_set_videomode, 0 }, {"resize " , "|x: resize window (percent of movie or absolute size)", NULL, xapi_swinsize, 0 }, {"size " , "|x: alias for resize", NULL, xapi_swinsize, 0 }, {"position " , "x: move window to given position (top-left coordinates)", NULL, xapi_swinpos, 0 }, {"pos " , "x: alias for 'window position'", NULL, xapi_swinpos, 0 }, {"xy " , "x: alias for 'window position'", NULL, xapi_swinpos, 0 }, {"fullscreen " , "[on|off|toggle]: en/disable full screen", NULL, xapi_fullscreen, 0 }, {"zoom " , "[on|off|toggle]: alias for 'window full screen'", NULL, xapi_fullscreen, 0 }, {"letterbox " , "[on|off|toggle]: don't break aspect ratio", NULL, xapi_sletterbox, 0 }, {"mouse " , "[on|off|toggle]: en/disable mouse cursor display", NULL, xapi_mousepointer, 0 }, {"ontop " , "[on|off|toggle]: en/disable 'on top'", NULL, xapi_ontop, 0 }, {"fixaspect" , ": scale window to match aspect ration", NULL, xapi_saspect, 0 }, {NULL, NULL, NULL , NULL, 0} }; static Dcommand cmd_set[] = { {"offset ", ": set timecode offset in frames", NULL, xapi_soffset , 0 }, {"fps ", ": set screen update frequency", NULL, xapi_sfps , 0 }, {"framerate ", ": deprecated - no operation", NULL, xapi_sframerate , 0 }, {"override ", ": disable user-interaction (bitmask)", NULL, xapi_soverride , 0 }, {"seekmode ", ": deprecated - no operation", NULL, xapi_sseekmode, 0 }, {"timescale ", " : set timescale and offset (*)", NULL, xapi_stimescale , 0 }, {"loop ", ": 0: normal, 1:wrap around (*)", NULL, xapi_sloop , 0 }, {NULL, NULL, NULL , NULL, 0} }; static Dcommand cmd_root[] = { // note: keep 'seek' on top of the list - if an external app wants seek a lot, xjadeo will // not spend time comparing command strings - OTOH I/O takes much longer than this anyway :X {"seek ", ": seek to this frame - if jack and midi are offline", NULL, xapi_seek , 0 }, {"load ", ": replace current video file", NULL , xapi_open, 0 }, {"unload", ": close video file", NULL , xapi_close, 0 }, {"window", " .. : monitor window functions", cmd_window, NULL, 0 }, {"osd", " .. : on screen display commands", cmd_osd, NULL, 0 }, {"jack", " .. : jack sync commands", cmd_jack, NULL, 0 }, {"midi", " .. : midi sync commands", cmd_midi, NULL, 0 }, {"ltc", " .. : LTC sync commands", cmd_ltc, NULL, 0 }, {"notify", " .. : async remote info messages", cmd_notify, NULL, 0 }, {"get", " .. : query xjadeo variables or state", cmd_get, NULL, 0 }, {"set", " .. : set xjadeo variables", cmd_set, NULL, 0 }, {"reverse", ": set timescale to reverse playback (*)", NULL , xapi_sreverse, 0 }, {"list videomodes" , ": displays a list of available video modes", NULL, xapi_lvideomodes, 0 }, {"ping", ": claim a pong", NULL , xapi_ping, 0 }, {"help", ": generate this remote-control API documentation", NULL , api_help, 0 }, {"exit", ": close remote-session (keep xjadeo running, with MQ and IPC)", NULL , xapi_exit, 0 }, {"quit", ": terminate xjadeo", NULL , xapi_quit, 0 }, {NULL, NULL, NULL , NULL, 0}, }; // TODO new commands: // - welcome message. (on reconnect) // - query OSD status (qjadeo - reconnect) // - query midi settings (xapi_midi_status) static void api_help_recursive(Dcommand *r, const char *prefix) { int i=0; while (r[i].name) { if (r[i].children) { int len = 2+strlen(prefix)+ strlen(r[i].name); char *tmp= malloc(len*sizeof(char)); snprintf(tmp,len,"%s%s ",prefix,r[i].name); //remote_printf(800,"# %s%s%s",prefix,r[i].name,r[i].help); api_help_recursive(r[i].children, tmp); free(tmp); } else { remote_printf(800,"+ %s%s%s",prefix,r[i].name,r[i].help); } i++; } } static void api_help(void *d) { remote_printf(100, "print help"); remote_printf(800, "+ xjadeo remote control commands:"); api_help_recursive(cmd_root,""); } static void exec_remote_cmd_recursive (Dcommand *leave, char *cmd) { int i=0; while (*cmd==' ') ++cmd; // fprintf(stderr,"DEBUG: %s\n",cmd); while (leave[i].name) { if (strncmp(cmd,leave[i].name,strlen(leave[i].name))==0) break; i++; } if (!leave[i].name) { remote_printf(400,"unknown command."); return; // no cmd found } if (leave[i].children) exec_remote_cmd_recursive(leave[i].children,cmd+strlen(leave[i].name)); else if (leave[i].func) { char *arg= cmd+strlen(leave[i].name); strtok(arg, "\r\n"); leave[i].func(arg); } else remote_printf(401,"command not implemented."); } //-------------------------------------------- // remote control - STDIO //-------------------------------------------- typedef struct { char buf[REMOTEBUFSIZ]; int offset; }remotebuffer; remotebuffer *inbuf; int remote_read_io(void) { int rx; char *start, *end; if ((rx = read(REMOTE_RX, inbuf->buf + inbuf->offset, (REMOTEBUFSIZ-1)-inbuf->offset)) > 0) { inbuf->offset+=rx; inbuf->buf[inbuf->offset] = '\0'; } start=inbuf->buf; while ((end = strchr(start, '\n'))) { *(end) = '\0'; //if (strlen(start) > 0) exec_remote_cmd_recursive(cmd_root,start); inbuf->offset-=((++end)-start); if (inbuf->offset) memmove(inbuf->buf,end,inbuf->offset); } return(rx>0?0:-1); } void exec_remote_cmd (char *cmd) { exec_remote_cmd_recursive(cmd_root, cmd); } #ifdef PLATFORM_WINDOWS int remote_read_h(void) { int rv=-1; char buf[BUFSIZ]; DWORD bytesAvail = 0; HANDLE h = GetStdHandle(STD_INPUT_HANDLE); do { bytesAvail = 0; PeekNamedPipe(h, 0, 0, 0, &bytesAvail, 0); DWORD sr=0; if (bytesAvail > 0 && ReadFile(h, buf, BUFSIZ, &sr, NULL) && sr > 0) { buf[sr]=0; char *start, *end; start = buf; while (*start && (end = strchr(start, '\n'))) { *(end) = '\0'; strtok(start, "\r"); //if (strlen(start) > 0) exec_remote_cmd_recursive(cmd_root,start); start=end+1; } rv=0; } } while (bytesAvail>0); return rv; } #endif #ifdef HAVE_MQ # define LOGLEN MQLEN #elif defined(HAVE_IPCMSG) # define LOGLEN BUFSIZ #else # define LOGLEN 1023 #endif static void remote_printf_io(int rv, const char *format, ...) { va_list arglist; char text[LOGLEN]; char msg[LOGLEN]; va_start(arglist, format); vsnprintf(text, LOGLEN, format, arglist); va_end(arglist); text[LOGLEN -1] =0; // just to be safe :) snprintf(msg, LOGLEN, "@%i %s\n",rv,text); msg[LOGLEN -1] =0; (void) write(REMOTE_TX,msg,strlen(msg)); } void open_remote_ctrl (void) { inbuf=malloc(sizeof(remotebuffer)); inbuf->offset=0; remote_printf_io(800, "xjadeo - remote control (type 'help' for info)"); } void close_remote_ctrl (void) { free(inbuf); } int remote_fd_set(fd_set *fd) { FD_SET(REMOTE_RX,fd); return( REMOTE_RX+1); } //-------------------------------------------- // POSIX message queeue //-------------------------------------------- #ifdef HAVE_MQ // prototypes in mqueue.c int mymq_read(char *data); void mymq_reply(int rv, char *str); void mymq_close(void); int mymq_init(char *id); /* MQ replacement for remote_printf() */ static void remote_printf_mq(int rv, const char *format, ...) { va_list arglist; char text[MQLEN]; va_start(arglist, format); vsnprintf(text, MQLEN, format, arglist); va_end(arglist); text[MQLEN -1] =0; // just to be safe :) mymq_reply(rv,text); } int remote_read_mq(void) { int rx; char data[MQLEN]; char *t; int rv = -1; while ((rx=mymq_read(data)) > 0 ) { if ((t = strchr(data, '\n'))) *t='\0'; //if (strlen(data) < 1) continue; exec_remote_cmd_recursive(cmd_root,data); rv=0; } return(rv); } void open_mq_ctrl (void) { if(mymq_init(NULL)) mq_en=0; else remote_printf_mq(800, "xjadeo - remote control (type 'help' for info)"); } void close_mq_ctrl (void) { remote_printf(100, "quit."); mymq_close(); } #elif defined HAVE_IPCMSG #include #include #include #include #include #include #include #include #include struct msgbuf1 { long mtype; char mtext[BUFSIZ]; }; int msqtx = 0; int msqrx = 0; int myipc_reply(int id, char *msg){ struct msgbuf1 txbuf; txbuf.mtype=1; snprintf(txbuf.mtext, BUFSIZ, "@%i %s\n", id, msg); // XXX if (msgsnd(msqtx, (const void*) &txbuf, strlen(txbuf.mtext), IPC_NOWAIT) == -1) { fprintf(stderr, "msgsnd failed., Error = %d: %s\n", errno, strerror(errno)); return -1; } return 0; } int remote_read_ipc () { int rv; struct msgbuf1 rxbuf; rv = msgrcv(msqrx, (void*) &rxbuf, BUFSIZ, 1, IPC_NOWAIT); if(rv < 0 ) { if (errno != EAGAIN && errno != ENOMSG) { fprintf(stderr, "Msgrcv failed., Error = %d: %s\n", errno, strerror(errno)); close_ipcmsg_ctrl(); free(ipc_queue); ipc_queue = NULL; } return (-1); } char *t, *s; s=rxbuf.mtext; // TODO remember end of long messages.. while (s && *s && (t = strchr(s, '\n'))) { *t='\0'; if (strlen(s) < 1) continue; exec_remote_cmd_recursive(cmd_root,s); s=t+1; } remote_read_ipc(); // read all queued messages.. return(0); } int open_ipcmsg_ctrl (const char *queuename) { key_t key_tx = ftok (queuename, 'a'); key_t key_rx = ftok (queuename, 'b'); msqrx = msgget(key_rx, IPC_CREAT| S_IRUSR | S_IWUSR); msqtx = msgget(key_tx, IPC_CREAT| S_IRUSR | S_IWUSR); if(msqrx == -1 || msqtx == -1) { printf("\ngetKey failed., Error = %d: %s\n", errno, strerror(errno)); return -1; } return 0; } void close_ipcmsg_ctrl () { remote_printf(100, "quit."); #if 0 msgctl(msqtx, IPC_RMID, NULL); msgctl(msqrx, IPC_RMID, NULL); #endif } #endif //-------------------------------------------- // REMOTE + MQ wrapper //-------------------------------------------- static void remote_printf_argslist(int rv, const char *format, va_list arglist) { char text[LOGLEN]; char msg[LOGLEN]; vsnprintf(text, MQLEN, format, arglist); text[LOGLEN -1] =0; #ifdef HAVE_MQ /* remote_printf_mq(...) */ mymq_reply(rv,text); #elif HAVE_IPCMSG /* remote_printf_ipc(...) */ if (ipc_queue) myipc_reply(rv,text); #endif /* remote_printf_io(...) */ if (remote_en) { snprintf(msg, LOGLEN, "@%i %s\n",rv,text); msg[LOGLEN -1] =0; (void) write(REMOTE_TX,msg,strlen(msg)); } } void remote_printf(int rv, const char *format, ...) { va_list arglist; va_start(arglist, format); remote_printf_argslist(rv, format, arglist); va_end(arglist); } void remote_notify(int mode, int rv, const char *format, ...) { if (!(remote_en||mq_en||ipc_queue) || !(remote_mode & mode)) return; va_list arglist; va_start(arglist, format); remote_printf_argslist(rv, format, arglist); va_end(arglist); } xjadeo-0.8.10/src/xjadeo/common.c0000644000175000017500000001332112620454615013475 00000000000000/* xjadeo - common access functions * * Copyright (C) 2014 Robin Gareus * * 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. */ #include "xjadeo.h" /// here ?? extern int64_t frames; extern int64_t userFrame; extern int interaction_override; extern int force_redraw; extern int OSD_mode; // change via keystroke extern int OSD_fx, OSD_fy; extern int OSD_sx, OSD_sy; extern int OSD_tx, OSD_ty; void INT_sync_to_jack (int remote_msg) { #ifdef HAVE_MIDI if (midi_connected()) midi_close(); #endif #ifdef HAVE_LTC if (ltcjack_connected()) close_ltcjack(); #endif open_jack(); if (remote_msg) { if (jack_connected()) remote_printf (100,"connected to jack server."); else remote_printf (405,"failed to connect to jack server"); } } void INT_sync_to_ltc (char *port, int remote_msg) { if (jack_connected()) close_jack(); #ifdef HAVE_MIDI if (midi_connected()) midi_close(); #endif #ifdef HAVE_LTC if (!ltcjack_connected()) { open_ltcjack (port); } if (remote_msg) { if (ltcjack_connected()) remote_printf (100,"opened LTC jack port."); else remote_printf (405,"failed to connect to jack server"); } #else if (remote_msg) remote_printf (499,"LTC-jack is not available."); #endif } void ui_sync_none () { if (interaction_override&OVR_MENUSYNC) return; if (jack_connected()) close_jack(); #ifdef HAVE_MIDI if (midi_connected()) midi_close(); #endif #ifdef HAVE_LTC if (ltcjack_connected()) close_ltcjack(); #endif } void ui_sync_manual (float percent) { if (interaction_override&OVR_MENUSYNC) return; if (frames < 1) return; ui_sync_none(); if (percent <= 0.f) percent = 0.f; if (percent >= 100.f) percent = 100.f; userFrame = rint((frames - 1.f) * percent / 100.f); } void ui_sync_to_jack () { if (interaction_override&OVR_MENUSYNC) return; INT_sync_to_jack (0); } void ui_sync_to_ltc () { if (interaction_override&OVR_MENUSYNC) return; INT_sync_to_ltc (NULL, 0); } static void ui_sync_to_mtc (const char *driver) { if (interaction_override&OVR_MENUSYNC) return; if (jack_connected()) close_jack(); #ifdef HAVE_LTC if (ltcjack_connected()) close_ltcjack(); #endif #ifdef HAVE_MIDI if (midi_connected() && strcmp (midi_driver_name(), driver)) { midi_close(); } if (!midi_connected()) { midi_choose_driver (driver); midi_open ("-1"); } #endif } void ui_sync_to_mtc_jack () { ui_sync_to_mtc ("JACK-MIDI"); } void ui_sync_to_mtc_portmidi () { ui_sync_to_mtc ("PORTMIDI"); } void ui_sync_to_mtc_alsaraw () { ui_sync_to_mtc ("ALSA-RAW-MIDI"); } void ui_sync_to_mtc_alsaseq () { ui_sync_to_mtc ("ALSA-Sequencer"); } enum SyncSource ui_syncsource() { if (jack_connected()) { return SYNC_JACK; } #ifdef HAVE_MIDI else if (ltcjack_connected()) { return SYNC_LTC; } #endif #ifdef HAVE_MIDI else if (midi_connected() && !strcmp (midi_driver_name(), "PORTMIDI")) { return SYNC_MTC_PORTMIDI; } else if (midi_connected() && !strcmp (midi_driver_name(), "JACK-MIDI")) { return SYNC_MTC_JACK; } else if (midi_connected() && !strcmp (midi_driver_name(), "ALSA-RAW-MIDI")) { return SYNC_MTC_ALSARAW; } else if (midi_connected() && !strcmp (midi_driver_name(), "ALSA-Sequencer")) { return SYNC_MTC_ALSASEQ; } #endif else { } return SYNC_NONE; } void ui_osd_clear () { OSD_mode = OSD_BOX; // XXX retain message when indexing or file closed? force_redraw = 1; } void ui_osd_offset_cycle () { OSD_mode &= ~(OSD_NFO | OSD_GEO); if (OSD_mode & OSD_OFFF) { OSD_mode &= ~(OSD_OFFF | OSD_OFFS); } else if (OSD_mode & OSD_OFFS) { OSD_mode &= ~OSD_OFFS; OSD_mode |= OSD_OFFF; } else { OSD_mode &= ~OSD_OFFF; OSD_mode |= OSD_OFFS; } force_redraw = 1; } void ui_osd_offset_tc () { OSD_mode &= ~(OSD_OFFF | OSD_NFO | OSD_GEO); OSD_mode |= OSD_OFFS; force_redraw = 1; } void ui_osd_offset_fn () { OSD_mode &= ~(OSD_OFFS | OSD_NFO | OSD_GEO); OSD_mode |= OSD_OFFF; force_redraw = 1; } void ui_osd_offset_none () { OSD_mode &= ~(OSD_OFFF | OSD_OFFS); force_redraw = 1; } void ui_osd_tc () { OSD_mode ^= OSD_SMPTE; force_redraw = 1; } void ui_osd_fn () { if (OSD_mode & OSD_FRAME) { OSD_mode &= ~(OSD_VTC | OSD_FRAME); } else if (OSD_mode & OSD_VTC) { OSD_mode &= ~OSD_VTC; OSD_mode |= OSD_FRAME; } else { OSD_mode &= ~OSD_FRAME; OSD_mode |= OSD_VTC; } force_redraw = 1; } void ui_osd_vtc_fn () { OSD_mode &= ~OSD_VTC; OSD_mode |= OSD_FRAME; force_redraw = 1; } void ui_osd_vtc_tc () { OSD_mode &= ~OSD_FRAME; OSD_mode |= OSD_VTC; force_redraw = 1; } void ui_osd_vtc_off () { OSD_mode &= ~(OSD_VTC | OSD_FRAME); force_redraw = 1; } void ui_osd_box () { OSD_mode ^= OSD_BOX; force_redraw = 1; } void ui_osd_geo () { ui_osd_offset_none(); OSD_mode &= ~OSD_NFO; OSD_mode ^= OSD_GEO; force_redraw = 1; } void ui_osd_fileinfo () { ui_osd_offset_none(); OSD_mode &= ~OSD_GEO; OSD_mode ^= OSD_NFO; force_redraw = 1; } void ui_osd_pos () { OSD_mode ^= OSD_POS; force_redraw = 1; } void ui_osd_outofrange () { OSD_mode ^= OSD_VTCOOR; if (OSD_mode & OSD_VTCOOR) { OSD_mode |= OSD_VTC; OSD_mode &= ~OSD_FRAME; } force_redraw = 1; } void ui_osd_permute () { const int t1 = OSD_sy; OSD_sy = OSD_fy; OSD_fy = t1; force_redraw = 1; } xjadeo-0.8.10/src/xjadeo/smpte.c0000644000175000017500000001475412620454615013350 00000000000000/* xjadeo - simple timecode parser. * * (C) 2006 Robin Gareus * * 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. */ #include #include #include #include #ifdef PLATFORM_WINDOWS #if (!defined __uint32_t_defined && !defined _STDINT_H) typedef long long int int64_t; #endif #else #include #endif enum { SMPTE_FRAME = 0, SMPTE_SEC, SMPTE_MIN, SMPTE_HOUR, SMPTE_OVERFLOW, SMPTE_LAST }; /* binary coded decimal (BCD) digits * not to mix up with SMPTE struct (in midi.c) * HH:MM:SS:FF */ typedef struct { int v[(SMPTE_LAST)]; } bcd; #ifdef HAVE_CONFIG_H /* XJADEO include */ #include #endif extern double framerate; extern int want_dropframes; // force drop-frame TC (command-line arg) default: 0 extern int want_autodrop; // force disable drop-frame TC (command-line arg) default:1 extern int have_dropframes; #define FPS framerate #ifdef HAVE_MIDI extern int midi_clkconvert; #else static int midi_clkconvert =0; #endif #define FIX_SMPTE_OVERFLOW(THIS,NEXT,INC) \ if (s->v[(THIS)] >= (INC)) { int ov = (int) floor((double) s->v[(THIS)] / (INC)); s->v[(THIS)] -= ov*(INC); s->v[(NEXT)]+=ov;} \ if (s->v[(THIS)] < 0 ) { int ov= (int) floor((double) s->v[(THIS)] / (INC)); s->v[(THIS)] -= ov*(INC); s->v[(NEXT)]+=ov;} static void parse_int (bcd *s, int val) { int i; for (i=0;i < SMPTE_LAST;i++) s->v[i]=0; s->v[SMPTE_FRAME]= val; FIX_SMPTE_OVERFLOW(SMPTE_FRAME,SMPTE_SEC,ceil(FPS)); FIX_SMPTE_OVERFLOW(SMPTE_SEC,SMPTE_MIN,60); FIX_SMPTE_OVERFLOW(SMPTE_MIN,SMPTE_HOUR,60); FIX_SMPTE_OVERFLOW(SMPTE_HOUR,SMPTE_OVERFLOW,24); } // FORMAT [[[HH:]MM:]SS:]FF static void parse_string (bcd *s, char *val) { int i; char *buf = strdup(val); char *t; for (i = 0; i < SMPTE_LAST; ++i) s->v[i]=0; i=0; while (i < SMPTE_OVERFLOW && buf && (t=strrchr(buf,':'))) { char *tmp=t+1; s->v[i] = atoi(tmp); *t=0; i++; } if (i < SMPTE_OVERFLOW) s->v[i]= atoi(buf); free(buf); FIX_SMPTE_OVERFLOW(SMPTE_FRAME,SMPTE_SEC, ceil(FPS)); FIX_SMPTE_OVERFLOW(SMPTE_SEC,SMPTE_MIN,60); FIX_SMPTE_OVERFLOW(SMPTE_MIN,SMPTE_HOUR,60); FIX_SMPTE_OVERFLOW(SMPTE_HOUR,SMPTE_OVERFLOW,24); } /* legacy version of smpte_to_frame(...) * does not do any frame-dropping.. handy. */ static int to_frame(bcd *s) { int frame=0; int sec=0; #if 0 printf("%s %02i#%02i:%02i:%02i:%02i\n","DBG: ", s->v[SMPTE_OVERFLOW], s->v[SMPTE_HOUR], s->v[SMPTE_MIN], s->v[SMPTE_SEC], s->v[SMPTE_FRAME]); #endif sec=((((s->v[SMPTE_HOUR]*60)+s->v[SMPTE_MIN])*60)+s->v[SMPTE_SEC]); if (s->v[SMPTE_OVERFLOW]<0) { sec=86400-sec; sec*=-1; } // TODO: check if this behaves correctly for non integer FPS :-> //frame=(int) floor(sec*FPS)+s->v[SMPTE_FRAME]; frame=(int) floor(sec * ceil(FPS)) + s->v[SMPTE_FRAME]; return (frame); } /* * Insert two frame numbers at the * start of every minute except the tenth. */ static int64_t insert_drop_frames (int64_t frames) { int64_t minutes = (frames / 17982L) * 10L; ///< 17982 frames in 10 mins base. int64_t off_f = frames % 17982L; int64_t off_adj =0; if (off_f >= 1800L) { // nothing to do in the first minute off_adj = 2 + 2 * (int64_t) floor(((off_f-1800L) / 1798L)); } return ( 1800L * minutes + off_f + off_adj); } /*-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+*/ int64_t smpte_to_frame(int type, int f, int s, int m, int h, int overflow); /* * used for parsing user input '-o' 'set offset', etc * basically the same as smpte_to_frame(...) */ int64_t smptestring_to_frame (char *str) { // TODO int64 bcd s; int64_t frame; // TODO handle negative prefix parse_string (&s,str); if ((strchr(str, ':') && have_dropframes && want_autodrop)||want_dropframes) { frame= smpte_to_frame ( 2 /*29.97fps */, s.v[SMPTE_FRAME], s.v[SMPTE_SEC], s.v[SMPTE_MIN], s.v[SMPTE_HOUR], 0); if (s.v[SMPTE_OVERFLOW]<0) { frame=30*86400-frame; frame*=-1; } } else frame = (int64_t)to_frame(&s); return (frame); } /* any smpte output (verbose and OSD) */ int frame_to_smptestring(char *smptestring, int64_t frame, uint8_t add_sign) { bcd s; if (!smptestring) return 0; int64_t frames = frame; char sep = ':'; if ((have_dropframes && want_autodrop)||want_dropframes) { frames = insert_drop_frames(frames); sep = ';'; } if (add_sign && frames < 0) { parse_int(&s, (int) -frames); } else { parse_int(&s, (int) frames); } if (add_sign) { snprintf(smptestring,14,"%c%02i:%02i:%02i%c%02i", (frames < 0) ? '-' : ' ', s.v[SMPTE_HOUR], s.v[SMPTE_MIN], s.v[SMPTE_SEC], sep, s.v[SMPTE_FRAME]); } else { snprintf(smptestring,13,"%02i:%02i:%02i%c%02i", s.v[SMPTE_HOUR], s.v[SMPTE_MIN], s.v[SMPTE_SEC], sep, s.v[SMPTE_FRAME]); } return s.v[SMPTE_OVERFLOW]; } int64_t smpte_to_frame(int type, const int f, const int s, const int m, const int h, const int overflow) { int64_t frame = 0; double fps = FPS; switch(type) { case 0: fps=24.0; break; case 1: fps=25.0; break; case 2: fps=30.0*1000.0/1001.0; break; case 3: fps=30.0; break; } if (type==2 || want_dropframes) { /* * Drop frame numbers (not frames) 00:00 and 00:01 at the * start of every minute except the tenth. * * dropframes are not required or permitted when operating at * 24, 25, or 30 frames per second. * */ int64_t base_time = (int64_t)((h*3600) + ((m/10) * 10 * 60)) * fps; int64_t off_m = m % 10; int64_t off_s = (off_m * 60) + s; int64_t off_f = (30 * off_s) + f - (2 * off_m); frame = base_time + off_f; fps=30; have_dropframes = 1; } else { frame = f + fps * (int64_t)(s + 60*m + 3600*h); have_dropframes = 0; } switch (midi_clkconvert) { case 1: // force video fps frame = f + (int64_t) floor(FPS * ( s + 60*m+ 3600*h)); break; case 2: // 'convert' FPS. frame = (int64_t) rint(frame * FPS / fps); break; default: // use MTC fps info ; break; } return(frame); } xjadeo-0.8.10/src/xjadeo/Makefile.in0000644000175000017500000023424213775353051014121 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ 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@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = xjadeo$(EXEEXT) xjremote$(EXEEXT) @TARGET_LINUX_TRUE@am__append_1 = display_glx.c @TARGET_LINUX_TRUE@am__append_2 = @JACK_LIBS@ @TARGET_NETBSD_TRUE@am__append_3 = display_glx.c @TARGET_NETBSD_TRUE@am__append_4 = @JACK_LIBS@ @TARGET_WIN32_TRUE@am__append_5 = display_gl_win.c windows.rc @TARGET_WIN32_TRUE@am__append_6 = -DUSE_WEAK_JACK @TARGET_WIN32_TRUE@am__append_7 = -lws2_32 -lwinmm -lcomdlg32 -lpthread @TARGET_OSX_TRUE@am__append_8 = display_gl_osx.m @TARGET_OSX_TRUE@am__append_9 = -DUSE_WEAK_JACK @TARGET_OSX_TRUE@am__append_10 = -ldl @EMBED_FONT_TRUE@am__append_11 = osdfont.o @EMBED_FONT_TRUE@am__append_12 = -DWITH_EMBEDDED_FONT @EMBED_FONT_TRUE@am__append_13 = osdfont.o subdir = src/xjadeo 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)" "$(DESTDIR)$(xjadeodir)" PROGRAMS = $(bin_PROGRAMS) am__xjadeo_SOURCES_DIST = main.c ../../aclocal.m4 ../../config.h \ xjadeo.c xjadeo.h ffcompat.h remote.c remote.h mqueue.c \ xjosc.c configfile.c common.c common_jack.c jack.c ltc-jack.c \ midi.c freetype.c smpte.c display.c display.h display_x_dnd.c \ display_x_dialog.c libsofd.c display_mac.c display_x11.c \ display_sdl.c display_gl_common.h weak_libjack.c \ weak_libjack.h gtime.c gtime.h display_glx.c display_gl_win.c \ windows.rc display_gl_osx.m @TARGET_LINUX_TRUE@am__objects_1 = xjadeo-display_glx.$(OBJEXT) @TARGET_NETBSD_TRUE@am__objects_2 = xjadeo-display_glx.$(OBJEXT) @TARGET_WIN32_TRUE@am__objects_3 = xjadeo-display_gl_win.$(OBJEXT) \ @TARGET_WIN32_TRUE@ windows.$(OBJEXT) @TARGET_OSX_TRUE@am__objects_4 = xjadeo-display_gl_osx.$(OBJEXT) am_xjadeo_OBJECTS = xjadeo-main.$(OBJEXT) xjadeo-xjadeo.$(OBJEXT) \ xjadeo-remote.$(OBJEXT) xjadeo-mqueue.$(OBJEXT) \ xjadeo-xjosc.$(OBJEXT) xjadeo-configfile.$(OBJEXT) \ xjadeo-common.$(OBJEXT) xjadeo-common_jack.$(OBJEXT) \ xjadeo-jack.$(OBJEXT) xjadeo-ltc-jack.$(OBJEXT) \ xjadeo-midi.$(OBJEXT) xjadeo-freetype.$(OBJEXT) \ xjadeo-smpte.$(OBJEXT) xjadeo-display.$(OBJEXT) \ xjadeo-display_x_dnd.$(OBJEXT) \ xjadeo-display_x_dialog.$(OBJEXT) xjadeo-libsofd.$(OBJEXT) \ xjadeo-display_mac.$(OBJEXT) xjadeo-display_x11.$(OBJEXT) \ xjadeo-display_sdl.$(OBJEXT) xjadeo-weak_libjack.$(OBJEXT) \ xjadeo-gtime.$(OBJEXT) $(am__objects_1) $(am__objects_2) \ $(am__objects_3) $(am__objects_4) xjadeo_OBJECTS = $(am_xjadeo_OBJECTS) am__DEPENDENCIES_1 = xjadeo_LINK = $(OBJCLD) $(xjadeo_OBJCFLAGS) $(OBJCFLAGS) \ $(xjadeo_LDFLAGS) $(LDFLAGS) -o $@ am_xjremote_OBJECTS = xjremote-xjremote.$(OBJEXT) xjremote_OBJECTS = $(am_xjremote_OBJECTS) xjremote_LINK = $(CCLD) $(xjremote_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ 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__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/xjadeo-common.Po \ ./$(DEPDIR)/xjadeo-common_jack.Po \ ./$(DEPDIR)/xjadeo-configfile.Po ./$(DEPDIR)/xjadeo-display.Po \ ./$(DEPDIR)/xjadeo-display_gl_osx.Po \ ./$(DEPDIR)/xjadeo-display_gl_win.Po \ ./$(DEPDIR)/xjadeo-display_glx.Po \ ./$(DEPDIR)/xjadeo-display_mac.Po \ ./$(DEPDIR)/xjadeo-display_sdl.Po \ ./$(DEPDIR)/xjadeo-display_x11.Po \ ./$(DEPDIR)/xjadeo-display_x_dialog.Po \ ./$(DEPDIR)/xjadeo-display_x_dnd.Po \ ./$(DEPDIR)/xjadeo-freetype.Po ./$(DEPDIR)/xjadeo-gtime.Po \ ./$(DEPDIR)/xjadeo-jack.Po ./$(DEPDIR)/xjadeo-libsofd.Po \ ./$(DEPDIR)/xjadeo-ltc-jack.Po ./$(DEPDIR)/xjadeo-main.Po \ ./$(DEPDIR)/xjadeo-midi.Po ./$(DEPDIR)/xjadeo-mqueue.Po \ ./$(DEPDIR)/xjadeo-remote.Po ./$(DEPDIR)/xjadeo-smpte.Po \ ./$(DEPDIR)/xjadeo-weak_libjack.Po \ ./$(DEPDIR)/xjadeo-xjadeo.Po ./$(DEPDIR)/xjadeo-xjosc.Po \ ./$(DEPDIR)/xjremote-xjremote.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = 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 = OBJCCOMPILE = $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) AM_V_OBJC = $(am__v_OBJC_@AM_V@) am__v_OBJC_ = $(am__v_OBJC_@AM_DEFAULT_V@) am__v_OBJC_0 = @echo " OBJC " $@; am__v_OBJC_1 = OBJCLD = $(OBJC) OBJCLINK = $(OBJCLD) $(AM_OBJCFLAGS) $(OBJCFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_OBJCLD = $(am__v_OBJCLD_@AM_V@) am__v_OBJCLD_ = $(am__v_OBJCLD_@AM_DEFAULT_V@) am__v_OBJCLD_0 = @echo " OBJCLD " $@; am__v_OBJCLD_1 = SOURCES = $(xjadeo_SOURCES) $(xjremote_SOURCES) DIST_SOURCES = $(am__xjadeo_SOURCES_DIST) $(xjremote_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac 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; }; \ } DATA = $(xjadeo_DATA) 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@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMLIB2_CFLAGS = @IMLIB2_CFLAGS@ IMLIB2_LIBS = @IMLIB2_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JACK_CFLAGS = @JACK_CFLAGS@ JACK_LIBS = @JACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBLO_CFLAGS = @LIBLO_CFLAGS@ LIBLO_LIBS = @LIBLO_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTC_CFLAGS = @LTC_CFLAGS@ LTC_LIBS = @LTC_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MIDI_CFLAGS = @MIDI_CFLAGS@ MIDI_LIBS = @MIDI_LIBS@ MKDIR_P = @MKDIR_P@ MQ_LIBS = @MQ_LIBS@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ 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@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ XPM_CFLAGS = @XPM_CFLAGS@ XPM_LIBS = @XPM_LIBS@ XV_CFLAGS = @XV_CFLAGS@ XV_LIBS = @XV_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_contrib_dir = @ac_contrib_dir@ ac_ct_CC = @ac_ct_CC@ ac_ct_OBJC = @ac_ct_OBJC@ ac_lrelease = @ac_lrelease@ ac_qmake = @ac_qmake@ ac_qmake_args = @ac_qmake_args@ ac_qtgui_dir = @ac_qtgui_dir@ 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@ 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@ 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@ #TODO: use a dedicated script for 'git desc' - this is "non-POSIX" way: REV = $(shell test -d ../../.git && git describe --always --tags HEAD 2>/dev/null) xjadeo_DATA = fonts/ArdourMono.ttf xjadeodir = $(datadir)/xjadeo xjadeo_SOURCES = main.c ../../aclocal.m4 ../../config.h xjadeo.c \ xjadeo.h ffcompat.h remote.c remote.h mqueue.c xjosc.c \ configfile.c common.c common_jack.c jack.c ltc-jack.c midi.c \ freetype.c smpte.c display.c display.h display_x_dnd.c \ display_x_dialog.c libsofd.c display_mac.c display_x11.c \ display_sdl.c display_gl_common.h weak_libjack.c \ weak_libjack.h gtime.c gtime.h $(am__append_1) $(am__append_3) \ $(am__append_5) $(am__append_8) xjadeo_LDADD = @MQ_LIBS@ @FFMPEG_LIBS@ @XV_LIBS@ @MIDI_LIBS@ \ @FREETYPE_LIBS@ @IMLIB2_LIBS@ @XPM_LIBS@ @LIBLO_LIBS@ \ @SDL_LIBS@ @LTC_LIBS@ @GL_LIBS@ -lm $(am__append_2) \ $(am__append_4) $(am__append_7) $(am__append_10) \ $(am__append_11) xjadeo_CFLAGS = -Wall -g -O3 -pthread @FFMPEG_CFLAGS@ @XV_CFLAGS@ \ @MIDI_CFLAGS@ @FREETYPE_CFLAGS@ @IMLIB2_CFLAGS@ @XPM_CFLAGS@ \ @LIBLO_CFLAGS@ @SDL_CFLAGS@ @LTC_CFLAGS@ @GL_CFLAGS@ \ @JACK_CFLAGS@ "-DSUBVERSION=\"$(REV)\"" \ "-DSHAREDIR=\"$(datadir)\"" $(am__append_6) $(am__append_9) \ $(am__append_12) xjadeo_OBJCFLAGS = -Wall -g -O3 -pthread \ @FFMPEG_CFLAGS@ @XV_CFLAGS@ @MIDI_CFLAGS@ @FREETYPE_CFLAGS@ @IMLIB2_CFLAGS@ @XPM_CFLAGS@ @LIBLO_CFLAGS@ @SDL_CFLAGS@ @LTC_CFLAGS@ @GL_CFLAGS@ @JACK_CFLAGS@ "-DSUBVERSION=\"$(REV)\"" @TARGET_WIN32_TRUE@xjadeo_LDFLAGS = -mwindows xjremote_SOURCES = xjremote.c xjremote_CFLAGS = -pthread "-DSUBVERSION=\"$(REV)\"" xjremote_LDADD = @MQ_LIBS@ MAINTAINERCLEANFILES = Makefile.in CLEANFILES = paths.h BUILT_SOURCES = paths.h xjadeo_DEPENDENCIES = icons/brightness.bitmap icons/gamma.bitmap \ icons/osd_bitmaps.h icons/brightness_mask.xbm \ icons/gamma_mask.xbm icons/contrast.bitmap icons/hue.bitmap \ icons/xjadeo8_ico.h icons/contrast_mask.xbm icons/hue_mask.xbm \ icons/xjadeo8.ico icons/saturation_mask.xbm icons/xjadeo8.xpm \ icons/saturation_mask.xbm icons/xjadeoH.ico \ fonts/ArdourMono.ttf paths.h icons/xjadeoH.h $(am__append_13) xjremote_DEPENDENCIES = \ paths.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .m .o .obj .rc $(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 src/xjadeo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/xjadeo/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ 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) @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)'; 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) xjadeo$(EXEEXT): $(xjadeo_OBJECTS) $(xjadeo_DEPENDENCIES) $(EXTRA_xjadeo_DEPENDENCIES) @rm -f xjadeo$(EXEEXT) $(AM_V_OBJCLD)$(xjadeo_LINK) $(xjadeo_OBJECTS) $(xjadeo_LDADD) $(LIBS) xjremote$(EXEEXT): $(xjremote_OBJECTS) $(xjremote_DEPENDENCIES) $(EXTRA_xjremote_DEPENDENCIES) @rm -f xjremote$(EXEEXT) $(AM_V_CCLD)$(xjremote_LINK) $(xjremote_OBJECTS) $(xjremote_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-common.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-common_jack.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-configfile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-display.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-display_gl_osx.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-display_gl_win.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-display_glx.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-display_mac.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-display_sdl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-display_x11.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-display_x_dialog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-display_x_dnd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-freetype.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-gtime.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-jack.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-libsofd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-ltc-jack.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-midi.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-mqueue.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-remote.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-smpte.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-weak_libjack.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-xjadeo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjadeo-xjosc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xjremote-xjremote.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @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@ $(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) '$<'` xjadeo-main.o: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-main.o -MD -MP -MF $(DEPDIR)/xjadeo-main.Tpo -c -o xjadeo-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-main.Tpo $(DEPDIR)/xjadeo-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='xjadeo-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c xjadeo-main.obj: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-main.obj -MD -MP -MF $(DEPDIR)/xjadeo-main.Tpo -c -o xjadeo-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-main.Tpo $(DEPDIR)/xjadeo-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='xjadeo-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` xjadeo-xjadeo.o: xjadeo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-xjadeo.o -MD -MP -MF $(DEPDIR)/xjadeo-xjadeo.Tpo -c -o xjadeo-xjadeo.o `test -f 'xjadeo.c' || echo '$(srcdir)/'`xjadeo.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-xjadeo.Tpo $(DEPDIR)/xjadeo-xjadeo.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xjadeo.c' object='xjadeo-xjadeo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-xjadeo.o `test -f 'xjadeo.c' || echo '$(srcdir)/'`xjadeo.c xjadeo-xjadeo.obj: xjadeo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-xjadeo.obj -MD -MP -MF $(DEPDIR)/xjadeo-xjadeo.Tpo -c -o xjadeo-xjadeo.obj `if test -f 'xjadeo.c'; then $(CYGPATH_W) 'xjadeo.c'; else $(CYGPATH_W) '$(srcdir)/xjadeo.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-xjadeo.Tpo $(DEPDIR)/xjadeo-xjadeo.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xjadeo.c' object='xjadeo-xjadeo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-xjadeo.obj `if test -f 'xjadeo.c'; then $(CYGPATH_W) 'xjadeo.c'; else $(CYGPATH_W) '$(srcdir)/xjadeo.c'; fi` xjadeo-remote.o: remote.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-remote.o -MD -MP -MF $(DEPDIR)/xjadeo-remote.Tpo -c -o xjadeo-remote.o `test -f 'remote.c' || echo '$(srcdir)/'`remote.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-remote.Tpo $(DEPDIR)/xjadeo-remote.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='remote.c' object='xjadeo-remote.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-remote.o `test -f 'remote.c' || echo '$(srcdir)/'`remote.c xjadeo-remote.obj: remote.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-remote.obj -MD -MP -MF $(DEPDIR)/xjadeo-remote.Tpo -c -o xjadeo-remote.obj `if test -f 'remote.c'; then $(CYGPATH_W) 'remote.c'; else $(CYGPATH_W) '$(srcdir)/remote.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-remote.Tpo $(DEPDIR)/xjadeo-remote.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='remote.c' object='xjadeo-remote.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-remote.obj `if test -f 'remote.c'; then $(CYGPATH_W) 'remote.c'; else $(CYGPATH_W) '$(srcdir)/remote.c'; fi` xjadeo-mqueue.o: mqueue.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-mqueue.o -MD -MP -MF $(DEPDIR)/xjadeo-mqueue.Tpo -c -o xjadeo-mqueue.o `test -f 'mqueue.c' || echo '$(srcdir)/'`mqueue.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-mqueue.Tpo $(DEPDIR)/xjadeo-mqueue.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mqueue.c' object='xjadeo-mqueue.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-mqueue.o `test -f 'mqueue.c' || echo '$(srcdir)/'`mqueue.c xjadeo-mqueue.obj: mqueue.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-mqueue.obj -MD -MP -MF $(DEPDIR)/xjadeo-mqueue.Tpo -c -o xjadeo-mqueue.obj `if test -f 'mqueue.c'; then $(CYGPATH_W) 'mqueue.c'; else $(CYGPATH_W) '$(srcdir)/mqueue.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-mqueue.Tpo $(DEPDIR)/xjadeo-mqueue.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mqueue.c' object='xjadeo-mqueue.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-mqueue.obj `if test -f 'mqueue.c'; then $(CYGPATH_W) 'mqueue.c'; else $(CYGPATH_W) '$(srcdir)/mqueue.c'; fi` xjadeo-xjosc.o: xjosc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-xjosc.o -MD -MP -MF $(DEPDIR)/xjadeo-xjosc.Tpo -c -o xjadeo-xjosc.o `test -f 'xjosc.c' || echo '$(srcdir)/'`xjosc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-xjosc.Tpo $(DEPDIR)/xjadeo-xjosc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xjosc.c' object='xjadeo-xjosc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-xjosc.o `test -f 'xjosc.c' || echo '$(srcdir)/'`xjosc.c xjadeo-xjosc.obj: xjosc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-xjosc.obj -MD -MP -MF $(DEPDIR)/xjadeo-xjosc.Tpo -c -o xjadeo-xjosc.obj `if test -f 'xjosc.c'; then $(CYGPATH_W) 'xjosc.c'; else $(CYGPATH_W) '$(srcdir)/xjosc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-xjosc.Tpo $(DEPDIR)/xjadeo-xjosc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xjosc.c' object='xjadeo-xjosc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-xjosc.obj `if test -f 'xjosc.c'; then $(CYGPATH_W) 'xjosc.c'; else $(CYGPATH_W) '$(srcdir)/xjosc.c'; fi` xjadeo-configfile.o: configfile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-configfile.o -MD -MP -MF $(DEPDIR)/xjadeo-configfile.Tpo -c -o xjadeo-configfile.o `test -f 'configfile.c' || echo '$(srcdir)/'`configfile.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-configfile.Tpo $(DEPDIR)/xjadeo-configfile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='configfile.c' object='xjadeo-configfile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-configfile.o `test -f 'configfile.c' || echo '$(srcdir)/'`configfile.c xjadeo-configfile.obj: configfile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-configfile.obj -MD -MP -MF $(DEPDIR)/xjadeo-configfile.Tpo -c -o xjadeo-configfile.obj `if test -f 'configfile.c'; then $(CYGPATH_W) 'configfile.c'; else $(CYGPATH_W) '$(srcdir)/configfile.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-configfile.Tpo $(DEPDIR)/xjadeo-configfile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='configfile.c' object='xjadeo-configfile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-configfile.obj `if test -f 'configfile.c'; then $(CYGPATH_W) 'configfile.c'; else $(CYGPATH_W) '$(srcdir)/configfile.c'; fi` xjadeo-common.o: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-common.o -MD -MP -MF $(DEPDIR)/xjadeo-common.Tpo -c -o xjadeo-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-common.Tpo $(DEPDIR)/xjadeo-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='xjadeo-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c xjadeo-common.obj: common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-common.obj -MD -MP -MF $(DEPDIR)/xjadeo-common.Tpo -c -o xjadeo-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-common.Tpo $(DEPDIR)/xjadeo-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common.c' object='xjadeo-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` xjadeo-common_jack.o: common_jack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-common_jack.o -MD -MP -MF $(DEPDIR)/xjadeo-common_jack.Tpo -c -o xjadeo-common_jack.o `test -f 'common_jack.c' || echo '$(srcdir)/'`common_jack.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-common_jack.Tpo $(DEPDIR)/xjadeo-common_jack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common_jack.c' object='xjadeo-common_jack.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-common_jack.o `test -f 'common_jack.c' || echo '$(srcdir)/'`common_jack.c xjadeo-common_jack.obj: common_jack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-common_jack.obj -MD -MP -MF $(DEPDIR)/xjadeo-common_jack.Tpo -c -o xjadeo-common_jack.obj `if test -f 'common_jack.c'; then $(CYGPATH_W) 'common_jack.c'; else $(CYGPATH_W) '$(srcdir)/common_jack.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-common_jack.Tpo $(DEPDIR)/xjadeo-common_jack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common_jack.c' object='xjadeo-common_jack.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-common_jack.obj `if test -f 'common_jack.c'; then $(CYGPATH_W) 'common_jack.c'; else $(CYGPATH_W) '$(srcdir)/common_jack.c'; fi` xjadeo-jack.o: jack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-jack.o -MD -MP -MF $(DEPDIR)/xjadeo-jack.Tpo -c -o xjadeo-jack.o `test -f 'jack.c' || echo '$(srcdir)/'`jack.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-jack.Tpo $(DEPDIR)/xjadeo-jack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jack.c' object='xjadeo-jack.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-jack.o `test -f 'jack.c' || echo '$(srcdir)/'`jack.c xjadeo-jack.obj: jack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-jack.obj -MD -MP -MF $(DEPDIR)/xjadeo-jack.Tpo -c -o xjadeo-jack.obj `if test -f 'jack.c'; then $(CYGPATH_W) 'jack.c'; else $(CYGPATH_W) '$(srcdir)/jack.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-jack.Tpo $(DEPDIR)/xjadeo-jack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jack.c' object='xjadeo-jack.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-jack.obj `if test -f 'jack.c'; then $(CYGPATH_W) 'jack.c'; else $(CYGPATH_W) '$(srcdir)/jack.c'; fi` xjadeo-ltc-jack.o: ltc-jack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-ltc-jack.o -MD -MP -MF $(DEPDIR)/xjadeo-ltc-jack.Tpo -c -o xjadeo-ltc-jack.o `test -f 'ltc-jack.c' || echo '$(srcdir)/'`ltc-jack.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-ltc-jack.Tpo $(DEPDIR)/xjadeo-ltc-jack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ltc-jack.c' object='xjadeo-ltc-jack.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-ltc-jack.o `test -f 'ltc-jack.c' || echo '$(srcdir)/'`ltc-jack.c xjadeo-ltc-jack.obj: ltc-jack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-ltc-jack.obj -MD -MP -MF $(DEPDIR)/xjadeo-ltc-jack.Tpo -c -o xjadeo-ltc-jack.obj `if test -f 'ltc-jack.c'; then $(CYGPATH_W) 'ltc-jack.c'; else $(CYGPATH_W) '$(srcdir)/ltc-jack.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-ltc-jack.Tpo $(DEPDIR)/xjadeo-ltc-jack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ltc-jack.c' object='xjadeo-ltc-jack.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-ltc-jack.obj `if test -f 'ltc-jack.c'; then $(CYGPATH_W) 'ltc-jack.c'; else $(CYGPATH_W) '$(srcdir)/ltc-jack.c'; fi` xjadeo-midi.o: midi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-midi.o -MD -MP -MF $(DEPDIR)/xjadeo-midi.Tpo -c -o xjadeo-midi.o `test -f 'midi.c' || echo '$(srcdir)/'`midi.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-midi.Tpo $(DEPDIR)/xjadeo-midi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='midi.c' object='xjadeo-midi.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-midi.o `test -f 'midi.c' || echo '$(srcdir)/'`midi.c xjadeo-midi.obj: midi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-midi.obj -MD -MP -MF $(DEPDIR)/xjadeo-midi.Tpo -c -o xjadeo-midi.obj `if test -f 'midi.c'; then $(CYGPATH_W) 'midi.c'; else $(CYGPATH_W) '$(srcdir)/midi.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-midi.Tpo $(DEPDIR)/xjadeo-midi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='midi.c' object='xjadeo-midi.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-midi.obj `if test -f 'midi.c'; then $(CYGPATH_W) 'midi.c'; else $(CYGPATH_W) '$(srcdir)/midi.c'; fi` xjadeo-freetype.o: freetype.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-freetype.o -MD -MP -MF $(DEPDIR)/xjadeo-freetype.Tpo -c -o xjadeo-freetype.o `test -f 'freetype.c' || echo '$(srcdir)/'`freetype.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-freetype.Tpo $(DEPDIR)/xjadeo-freetype.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='freetype.c' object='xjadeo-freetype.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-freetype.o `test -f 'freetype.c' || echo '$(srcdir)/'`freetype.c xjadeo-freetype.obj: freetype.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-freetype.obj -MD -MP -MF $(DEPDIR)/xjadeo-freetype.Tpo -c -o xjadeo-freetype.obj `if test -f 'freetype.c'; then $(CYGPATH_W) 'freetype.c'; else $(CYGPATH_W) '$(srcdir)/freetype.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-freetype.Tpo $(DEPDIR)/xjadeo-freetype.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='freetype.c' object='xjadeo-freetype.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-freetype.obj `if test -f 'freetype.c'; then $(CYGPATH_W) 'freetype.c'; else $(CYGPATH_W) '$(srcdir)/freetype.c'; fi` xjadeo-smpte.o: smpte.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-smpte.o -MD -MP -MF $(DEPDIR)/xjadeo-smpte.Tpo -c -o xjadeo-smpte.o `test -f 'smpte.c' || echo '$(srcdir)/'`smpte.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-smpte.Tpo $(DEPDIR)/xjadeo-smpte.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='smpte.c' object='xjadeo-smpte.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-smpte.o `test -f 'smpte.c' || echo '$(srcdir)/'`smpte.c xjadeo-smpte.obj: smpte.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-smpte.obj -MD -MP -MF $(DEPDIR)/xjadeo-smpte.Tpo -c -o xjadeo-smpte.obj `if test -f 'smpte.c'; then $(CYGPATH_W) 'smpte.c'; else $(CYGPATH_W) '$(srcdir)/smpte.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-smpte.Tpo $(DEPDIR)/xjadeo-smpte.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='smpte.c' object='xjadeo-smpte.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-smpte.obj `if test -f 'smpte.c'; then $(CYGPATH_W) 'smpte.c'; else $(CYGPATH_W) '$(srcdir)/smpte.c'; fi` xjadeo-display.o: display.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display.o -MD -MP -MF $(DEPDIR)/xjadeo-display.Tpo -c -o xjadeo-display.o `test -f 'display.c' || echo '$(srcdir)/'`display.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display.Tpo $(DEPDIR)/xjadeo-display.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display.c' object='xjadeo-display.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display.o `test -f 'display.c' || echo '$(srcdir)/'`display.c xjadeo-display.obj: display.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display.obj -MD -MP -MF $(DEPDIR)/xjadeo-display.Tpo -c -o xjadeo-display.obj `if test -f 'display.c'; then $(CYGPATH_W) 'display.c'; else $(CYGPATH_W) '$(srcdir)/display.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display.Tpo $(DEPDIR)/xjadeo-display.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display.c' object='xjadeo-display.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display.obj `if test -f 'display.c'; then $(CYGPATH_W) 'display.c'; else $(CYGPATH_W) '$(srcdir)/display.c'; fi` xjadeo-display_x_dnd.o: display_x_dnd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_x_dnd.o -MD -MP -MF $(DEPDIR)/xjadeo-display_x_dnd.Tpo -c -o xjadeo-display_x_dnd.o `test -f 'display_x_dnd.c' || echo '$(srcdir)/'`display_x_dnd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_x_dnd.Tpo $(DEPDIR)/xjadeo-display_x_dnd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_x_dnd.c' object='xjadeo-display_x_dnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_x_dnd.o `test -f 'display_x_dnd.c' || echo '$(srcdir)/'`display_x_dnd.c xjadeo-display_x_dnd.obj: display_x_dnd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_x_dnd.obj -MD -MP -MF $(DEPDIR)/xjadeo-display_x_dnd.Tpo -c -o xjadeo-display_x_dnd.obj `if test -f 'display_x_dnd.c'; then $(CYGPATH_W) 'display_x_dnd.c'; else $(CYGPATH_W) '$(srcdir)/display_x_dnd.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_x_dnd.Tpo $(DEPDIR)/xjadeo-display_x_dnd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_x_dnd.c' object='xjadeo-display_x_dnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_x_dnd.obj `if test -f 'display_x_dnd.c'; then $(CYGPATH_W) 'display_x_dnd.c'; else $(CYGPATH_W) '$(srcdir)/display_x_dnd.c'; fi` xjadeo-display_x_dialog.o: display_x_dialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_x_dialog.o -MD -MP -MF $(DEPDIR)/xjadeo-display_x_dialog.Tpo -c -o xjadeo-display_x_dialog.o `test -f 'display_x_dialog.c' || echo '$(srcdir)/'`display_x_dialog.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_x_dialog.Tpo $(DEPDIR)/xjadeo-display_x_dialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_x_dialog.c' object='xjadeo-display_x_dialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_x_dialog.o `test -f 'display_x_dialog.c' || echo '$(srcdir)/'`display_x_dialog.c xjadeo-display_x_dialog.obj: display_x_dialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_x_dialog.obj -MD -MP -MF $(DEPDIR)/xjadeo-display_x_dialog.Tpo -c -o xjadeo-display_x_dialog.obj `if test -f 'display_x_dialog.c'; then $(CYGPATH_W) 'display_x_dialog.c'; else $(CYGPATH_W) '$(srcdir)/display_x_dialog.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_x_dialog.Tpo $(DEPDIR)/xjadeo-display_x_dialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_x_dialog.c' object='xjadeo-display_x_dialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_x_dialog.obj `if test -f 'display_x_dialog.c'; then $(CYGPATH_W) 'display_x_dialog.c'; else $(CYGPATH_W) '$(srcdir)/display_x_dialog.c'; fi` xjadeo-libsofd.o: libsofd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-libsofd.o -MD -MP -MF $(DEPDIR)/xjadeo-libsofd.Tpo -c -o xjadeo-libsofd.o `test -f 'libsofd.c' || echo '$(srcdir)/'`libsofd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-libsofd.Tpo $(DEPDIR)/xjadeo-libsofd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libsofd.c' object='xjadeo-libsofd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-libsofd.o `test -f 'libsofd.c' || echo '$(srcdir)/'`libsofd.c xjadeo-libsofd.obj: libsofd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-libsofd.obj -MD -MP -MF $(DEPDIR)/xjadeo-libsofd.Tpo -c -o xjadeo-libsofd.obj `if test -f 'libsofd.c'; then $(CYGPATH_W) 'libsofd.c'; else $(CYGPATH_W) '$(srcdir)/libsofd.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-libsofd.Tpo $(DEPDIR)/xjadeo-libsofd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libsofd.c' object='xjadeo-libsofd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-libsofd.obj `if test -f 'libsofd.c'; then $(CYGPATH_W) 'libsofd.c'; else $(CYGPATH_W) '$(srcdir)/libsofd.c'; fi` xjadeo-display_mac.o: display_mac.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_mac.o -MD -MP -MF $(DEPDIR)/xjadeo-display_mac.Tpo -c -o xjadeo-display_mac.o `test -f 'display_mac.c' || echo '$(srcdir)/'`display_mac.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_mac.Tpo $(DEPDIR)/xjadeo-display_mac.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_mac.c' object='xjadeo-display_mac.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_mac.o `test -f 'display_mac.c' || echo '$(srcdir)/'`display_mac.c xjadeo-display_mac.obj: display_mac.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_mac.obj -MD -MP -MF $(DEPDIR)/xjadeo-display_mac.Tpo -c -o xjadeo-display_mac.obj `if test -f 'display_mac.c'; then $(CYGPATH_W) 'display_mac.c'; else $(CYGPATH_W) '$(srcdir)/display_mac.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_mac.Tpo $(DEPDIR)/xjadeo-display_mac.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_mac.c' object='xjadeo-display_mac.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_mac.obj `if test -f 'display_mac.c'; then $(CYGPATH_W) 'display_mac.c'; else $(CYGPATH_W) '$(srcdir)/display_mac.c'; fi` xjadeo-display_x11.o: display_x11.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_x11.o -MD -MP -MF $(DEPDIR)/xjadeo-display_x11.Tpo -c -o xjadeo-display_x11.o `test -f 'display_x11.c' || echo '$(srcdir)/'`display_x11.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_x11.Tpo $(DEPDIR)/xjadeo-display_x11.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_x11.c' object='xjadeo-display_x11.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_x11.o `test -f 'display_x11.c' || echo '$(srcdir)/'`display_x11.c xjadeo-display_x11.obj: display_x11.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_x11.obj -MD -MP -MF $(DEPDIR)/xjadeo-display_x11.Tpo -c -o xjadeo-display_x11.obj `if test -f 'display_x11.c'; then $(CYGPATH_W) 'display_x11.c'; else $(CYGPATH_W) '$(srcdir)/display_x11.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_x11.Tpo $(DEPDIR)/xjadeo-display_x11.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_x11.c' object='xjadeo-display_x11.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_x11.obj `if test -f 'display_x11.c'; then $(CYGPATH_W) 'display_x11.c'; else $(CYGPATH_W) '$(srcdir)/display_x11.c'; fi` xjadeo-display_sdl.o: display_sdl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_sdl.o -MD -MP -MF $(DEPDIR)/xjadeo-display_sdl.Tpo -c -o xjadeo-display_sdl.o `test -f 'display_sdl.c' || echo '$(srcdir)/'`display_sdl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_sdl.Tpo $(DEPDIR)/xjadeo-display_sdl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_sdl.c' object='xjadeo-display_sdl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_sdl.o `test -f 'display_sdl.c' || echo '$(srcdir)/'`display_sdl.c xjadeo-display_sdl.obj: display_sdl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_sdl.obj -MD -MP -MF $(DEPDIR)/xjadeo-display_sdl.Tpo -c -o xjadeo-display_sdl.obj `if test -f 'display_sdl.c'; then $(CYGPATH_W) 'display_sdl.c'; else $(CYGPATH_W) '$(srcdir)/display_sdl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_sdl.Tpo $(DEPDIR)/xjadeo-display_sdl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_sdl.c' object='xjadeo-display_sdl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_sdl.obj `if test -f 'display_sdl.c'; then $(CYGPATH_W) 'display_sdl.c'; else $(CYGPATH_W) '$(srcdir)/display_sdl.c'; fi` xjadeo-weak_libjack.o: weak_libjack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-weak_libjack.o -MD -MP -MF $(DEPDIR)/xjadeo-weak_libjack.Tpo -c -o xjadeo-weak_libjack.o `test -f 'weak_libjack.c' || echo '$(srcdir)/'`weak_libjack.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-weak_libjack.Tpo $(DEPDIR)/xjadeo-weak_libjack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='weak_libjack.c' object='xjadeo-weak_libjack.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-weak_libjack.o `test -f 'weak_libjack.c' || echo '$(srcdir)/'`weak_libjack.c xjadeo-weak_libjack.obj: weak_libjack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-weak_libjack.obj -MD -MP -MF $(DEPDIR)/xjadeo-weak_libjack.Tpo -c -o xjadeo-weak_libjack.obj `if test -f 'weak_libjack.c'; then $(CYGPATH_W) 'weak_libjack.c'; else $(CYGPATH_W) '$(srcdir)/weak_libjack.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-weak_libjack.Tpo $(DEPDIR)/xjadeo-weak_libjack.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='weak_libjack.c' object='xjadeo-weak_libjack.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-weak_libjack.obj `if test -f 'weak_libjack.c'; then $(CYGPATH_W) 'weak_libjack.c'; else $(CYGPATH_W) '$(srcdir)/weak_libjack.c'; fi` xjadeo-gtime.o: gtime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-gtime.o -MD -MP -MF $(DEPDIR)/xjadeo-gtime.Tpo -c -o xjadeo-gtime.o `test -f 'gtime.c' || echo '$(srcdir)/'`gtime.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-gtime.Tpo $(DEPDIR)/xjadeo-gtime.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gtime.c' object='xjadeo-gtime.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-gtime.o `test -f 'gtime.c' || echo '$(srcdir)/'`gtime.c xjadeo-gtime.obj: gtime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-gtime.obj -MD -MP -MF $(DEPDIR)/xjadeo-gtime.Tpo -c -o xjadeo-gtime.obj `if test -f 'gtime.c'; then $(CYGPATH_W) 'gtime.c'; else $(CYGPATH_W) '$(srcdir)/gtime.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-gtime.Tpo $(DEPDIR)/xjadeo-gtime.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gtime.c' object='xjadeo-gtime.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-gtime.obj `if test -f 'gtime.c'; then $(CYGPATH_W) 'gtime.c'; else $(CYGPATH_W) '$(srcdir)/gtime.c'; fi` xjadeo-display_glx.o: display_glx.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_glx.o -MD -MP -MF $(DEPDIR)/xjadeo-display_glx.Tpo -c -o xjadeo-display_glx.o `test -f 'display_glx.c' || echo '$(srcdir)/'`display_glx.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_glx.Tpo $(DEPDIR)/xjadeo-display_glx.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_glx.c' object='xjadeo-display_glx.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_glx.o `test -f 'display_glx.c' || echo '$(srcdir)/'`display_glx.c xjadeo-display_glx.obj: display_glx.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_glx.obj -MD -MP -MF $(DEPDIR)/xjadeo-display_glx.Tpo -c -o xjadeo-display_glx.obj `if test -f 'display_glx.c'; then $(CYGPATH_W) 'display_glx.c'; else $(CYGPATH_W) '$(srcdir)/display_glx.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_glx.Tpo $(DEPDIR)/xjadeo-display_glx.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_glx.c' object='xjadeo-display_glx.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_glx.obj `if test -f 'display_glx.c'; then $(CYGPATH_W) 'display_glx.c'; else $(CYGPATH_W) '$(srcdir)/display_glx.c'; fi` xjadeo-display_gl_win.o: display_gl_win.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_gl_win.o -MD -MP -MF $(DEPDIR)/xjadeo-display_gl_win.Tpo -c -o xjadeo-display_gl_win.o `test -f 'display_gl_win.c' || echo '$(srcdir)/'`display_gl_win.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_gl_win.Tpo $(DEPDIR)/xjadeo-display_gl_win.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_gl_win.c' object='xjadeo-display_gl_win.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_gl_win.o `test -f 'display_gl_win.c' || echo '$(srcdir)/'`display_gl_win.c xjadeo-display_gl_win.obj: display_gl_win.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -MT xjadeo-display_gl_win.obj -MD -MP -MF $(DEPDIR)/xjadeo-display_gl_win.Tpo -c -o xjadeo-display_gl_win.obj `if test -f 'display_gl_win.c'; then $(CYGPATH_W) 'display_gl_win.c'; else $(CYGPATH_W) '$(srcdir)/display_gl_win.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_gl_win.Tpo $(DEPDIR)/xjadeo-display_gl_win.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='display_gl_win.c' object='xjadeo-display_gl_win.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_CFLAGS) $(CFLAGS) -c -o xjadeo-display_gl_win.obj `if test -f 'display_gl_win.c'; then $(CYGPATH_W) 'display_gl_win.c'; else $(CYGPATH_W) '$(srcdir)/display_gl_win.c'; fi` xjremote-xjremote.o: xjremote.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjremote_CFLAGS) $(CFLAGS) -MT xjremote-xjremote.o -MD -MP -MF $(DEPDIR)/xjremote-xjremote.Tpo -c -o xjremote-xjremote.o `test -f 'xjremote.c' || echo '$(srcdir)/'`xjremote.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjremote-xjremote.Tpo $(DEPDIR)/xjremote-xjremote.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xjremote.c' object='xjremote-xjremote.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjremote_CFLAGS) $(CFLAGS) -c -o xjremote-xjremote.o `test -f 'xjremote.c' || echo '$(srcdir)/'`xjremote.c xjremote-xjremote.obj: xjremote.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjremote_CFLAGS) $(CFLAGS) -MT xjremote-xjremote.obj -MD -MP -MF $(DEPDIR)/xjremote-xjremote.Tpo -c -o xjremote-xjremote.obj `if test -f 'xjremote.c'; then $(CYGPATH_W) 'xjremote.c'; else $(CYGPATH_W) '$(srcdir)/xjremote.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjremote-xjremote.Tpo $(DEPDIR)/xjremote-xjremote.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xjremote.c' object='xjremote-xjremote.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjremote_CFLAGS) $(CFLAGS) -c -o xjremote-xjremote.obj `if test -f 'xjremote.c'; then $(CYGPATH_W) 'xjremote.c'; else $(CYGPATH_W) '$(srcdir)/xjremote.c'; fi` .m.o: @am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJCCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJCCOMPILE) -c -o $@ $< .m.obj: @am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJCCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` xjadeo-display_gl_osx.o: display_gl_osx.m @am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_OBJCFLAGS) $(OBJCFLAGS) -MT xjadeo-display_gl_osx.o -MD -MP -MF $(DEPDIR)/xjadeo-display_gl_osx.Tpo -c -o xjadeo-display_gl_osx.o `test -f 'display_gl_osx.m' || echo '$(srcdir)/'`display_gl_osx.m @am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_gl_osx.Tpo $(DEPDIR)/xjadeo-display_gl_osx.Po @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='display_gl_osx.m' object='xjadeo-display_gl_osx.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_OBJCFLAGS) $(OBJCFLAGS) -c -o xjadeo-display_gl_osx.o `test -f 'display_gl_osx.m' || echo '$(srcdir)/'`display_gl_osx.m xjadeo-display_gl_osx.obj: display_gl_osx.m @am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_OBJCFLAGS) $(OBJCFLAGS) -MT xjadeo-display_gl_osx.obj -MD -MP -MF $(DEPDIR)/xjadeo-display_gl_osx.Tpo -c -o xjadeo-display_gl_osx.obj `if test -f 'display_gl_osx.m'; then $(CYGPATH_W) 'display_gl_osx.m'; else $(CYGPATH_W) '$(srcdir)/display_gl_osx.m'; fi` @am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xjadeo-display_gl_osx.Tpo $(DEPDIR)/xjadeo-display_gl_osx.Po @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ $(AM_V_OBJC)source='display_gl_osx.m' object='xjadeo-display_gl_osx.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepOBJC_FALSE@ $(AM_V_OBJC@am__nodep@)$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xjadeo_OBJCFLAGS) $(OBJCFLAGS) -c -o xjadeo-display_gl_osx.obj `if test -f 'display_gl_osx.m'; then $(CYGPATH_W) 'display_gl_osx.m'; else $(CYGPATH_W) '$(srcdir)/display_gl_osx.m'; fi` install-xjadeoDATA: $(xjadeo_DATA) @$(NORMAL_INSTALL) @list='$(xjadeo_DATA)'; test -n "$(xjadeodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(xjadeodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(xjadeodir)" || 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)$(xjadeodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(xjadeodir)" || exit $$?; \ done uninstall-xjadeoDATA: @$(NORMAL_UNINSTALL) @list='$(xjadeo_DATA)'; test -n "$(xjadeodir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(xjadeodir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(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 distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @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; \ 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 -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(xjadeodir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: 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: -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." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/xjadeo-common.Po -rm -f ./$(DEPDIR)/xjadeo-common_jack.Po -rm -f ./$(DEPDIR)/xjadeo-configfile.Po -rm -f ./$(DEPDIR)/xjadeo-display.Po -rm -f ./$(DEPDIR)/xjadeo-display_gl_osx.Po -rm -f ./$(DEPDIR)/xjadeo-display_gl_win.Po -rm -f ./$(DEPDIR)/xjadeo-display_glx.Po -rm -f ./$(DEPDIR)/xjadeo-display_mac.Po -rm -f ./$(DEPDIR)/xjadeo-display_sdl.Po -rm -f ./$(DEPDIR)/xjadeo-display_x11.Po -rm -f ./$(DEPDIR)/xjadeo-display_x_dialog.Po -rm -f ./$(DEPDIR)/xjadeo-display_x_dnd.Po -rm -f ./$(DEPDIR)/xjadeo-freetype.Po -rm -f ./$(DEPDIR)/xjadeo-gtime.Po -rm -f ./$(DEPDIR)/xjadeo-jack.Po -rm -f ./$(DEPDIR)/xjadeo-libsofd.Po -rm -f ./$(DEPDIR)/xjadeo-ltc-jack.Po -rm -f ./$(DEPDIR)/xjadeo-main.Po -rm -f ./$(DEPDIR)/xjadeo-midi.Po -rm -f ./$(DEPDIR)/xjadeo-mqueue.Po -rm -f ./$(DEPDIR)/xjadeo-remote.Po -rm -f ./$(DEPDIR)/xjadeo-smpte.Po -rm -f ./$(DEPDIR)/xjadeo-weak_libjack.Po -rm -f ./$(DEPDIR)/xjadeo-xjadeo.Po -rm -f ./$(DEPDIR)/xjadeo-xjosc.Po -rm -f ./$(DEPDIR)/xjremote-xjremote.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-xjadeoDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS 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 -rm -f ./$(DEPDIR)/xjadeo-common.Po -rm -f ./$(DEPDIR)/xjadeo-common_jack.Po -rm -f ./$(DEPDIR)/xjadeo-configfile.Po -rm -f ./$(DEPDIR)/xjadeo-display.Po -rm -f ./$(DEPDIR)/xjadeo-display_gl_osx.Po -rm -f ./$(DEPDIR)/xjadeo-display_gl_win.Po -rm -f ./$(DEPDIR)/xjadeo-display_glx.Po -rm -f ./$(DEPDIR)/xjadeo-display_mac.Po -rm -f ./$(DEPDIR)/xjadeo-display_sdl.Po -rm -f ./$(DEPDIR)/xjadeo-display_x11.Po -rm -f ./$(DEPDIR)/xjadeo-display_x_dialog.Po -rm -f ./$(DEPDIR)/xjadeo-display_x_dnd.Po -rm -f ./$(DEPDIR)/xjadeo-freetype.Po -rm -f ./$(DEPDIR)/xjadeo-gtime.Po -rm -f ./$(DEPDIR)/xjadeo-jack.Po -rm -f ./$(DEPDIR)/xjadeo-libsofd.Po -rm -f ./$(DEPDIR)/xjadeo-ltc-jack.Po -rm -f ./$(DEPDIR)/xjadeo-main.Po -rm -f ./$(DEPDIR)/xjadeo-midi.Po -rm -f ./$(DEPDIR)/xjadeo-mqueue.Po -rm -f ./$(DEPDIR)/xjadeo-remote.Po -rm -f ./$(DEPDIR)/xjadeo-smpte.Po -rm -f ./$(DEPDIR)/xjadeo-weak_libjack.Po -rm -f ./$(DEPDIR)/xjadeo-xjadeo.Po -rm -f ./$(DEPDIR)/xjadeo-xjosc.Po -rm -f ./$(DEPDIR)/xjremote-xjremote.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-xjadeoDATA .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles 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-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip install-xjadeoDATA 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 uninstall-binPROGRAMS uninstall-xjadeoDATA .PRECIOUS: Makefile paths.h: Makefile @echo '#define BINDIR "$(DESTDIR)/$(bindir)/"' >$@ @echo '#define SYSCONFDIR "$(DESTDIR)/$(sysconfdir)/"' >>$@ osdfont.o: fonts/ArdourMono.ttf $(LD) -r -b binary -o osdfont.o fonts/ArdourMono.ttf .rc.o: $(WINDRES) -o $@ $< # 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: xjadeo-0.8.10/src/Makefile.am0000644000175000017500000000017712620454615012630 00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = xjadeo @ac_qtgui_dir@ MAINTAINERCLEANFILES = Makefile.in xjadeo-0.8.10/src/qt-gui/0000755000175000017500000000000013775353060012061 500000000000000xjadeo-0.8.10/src/qt-gui/importdialog.ui0000644000175000017500000003520312620454615015031 00000000000000 ImportDialog 0 0 303 389 Import - Convert Video File true Video File Source: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 0 0 32 32 :/images/fileopen.png:/images/fileopen.png 0 0 32 32 :/images/info.png:/images/info.png File Info: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false Destination: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 0 0 32 32 :/images/fileopen.png:/images/fileopen.png 1 0 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter false Encoder Settings Width: false Qt::Horizontal QSizePolicy::Expanding 215 20 false 2048 Scale Height: false Qt::Horizontal QSizePolicy::Expanding 67 20 false 2048 false Break Aspect Ratio FPS: false Qt::Horizontal QSizePolicy::Expanding 141 20 false 0 0 true 1 100 false 24 25 29.97 30 Resample extra mencoder options Qt::Vertical QSizePolicy::Expanding 20 30 &Cancel true Qt::Horizontal QSizePolicy::Expanding 216 20 &OK true true qPixmapFromMimeSource pushButton11 SourceLineEdit DestLineEdit pushButton11_2 widthSpinBox heightSpinBox buttonCancel buttonOk buttonOk clicked() ImportDialog accept() 20 20 20 20 buttonCancel clicked() ImportDialog reject() 20 20 20 20 pushButton11 clicked() ImportDialog importSrcSelect() 20 20 20 20 pushButton11_2 clicked() ImportDialog importDstSelect() 20 20 20 20 widthCheckBox toggled(bool) ImportDialog widthCheckBox_toggled(bool) 20 20 20 20 fpsCheckBox toggled(bool) ImportDialog fpsCheckBox_toggled(bool) 20 20 20 20 aspectCheckBox toggled(bool) ImportDialog aspectCheckBox_toggled(bool) 20 20 20 20 pushButton5 clicked() ImportDialog importAvInfo() 20 20 20 20 xjadeo-0.8.10/src/qt-gui/prefdialog.cpp0000644000175000017500000000212312620454615014613 00000000000000#include "prefdialog.h" #include #include #include /* * Constructs a PrefDialog as a child of 'parent', with the * name 'name' and widget flags set to 'f'. * * The dialog will by default be modeless, unless you set 'modal' to * true to construct a modal dialog. */ PrefDialog::PrefDialog(QWidget* parent) : QDialog(parent) { setupUi(this); retranslateUi(this); } /* * Destroys the object and frees any allocated resources */ PrefDialog::~PrefDialog() { // no need to delete child widgets, Qt does it all for us } /* * Sets the strings of the subwidgets using the current * language. void PrefDialog::languageChange() { retranslateUi(this); } */ //#include void PrefDialog::selPrefsDest() { #if 0 QString s = QFileDialog::getExistingDirectory(this, tr("Select default destination folder"), "", QFileDialog::ShowDirsOnly| QFileDialog::DontResolveSymlinks); } #endif } void PrefDialog::prefDirEnable(bool /*t*/) { #if 0 destDirLineEdit->setEnabled(t); selDestPushButton->setEnabled(t); #endif } xjadeo-0.8.10/src/qt-gui/qjadeo.cpp0000644000175000017500000004522112620454615013750 00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "qjadeo.h" #include "mydirs.h" #include // Global variables //QProcess xjadeo; /////////////////////////////////////////////////////// // QJadeo window /////////////////////////////////////////////////////// // Constructor QJadeo::QJadeo() { setupUi(this); retranslateUi(this); QSettings m_settings("rss", "jadeo"); int windowWidth = m_settings.value("WindowWidth", 460).toInt(); int windowHeight = m_settings.value("WindowHeight", 100).toInt(); int windowX = m_settings.value("WindowX", -1).toInt(); int windowY = m_settings.value("WindowY", -1).toInt(); resize(windowWidth, windowHeight); if(windowX != -1 || windowY != -1) move(windowX, windowY); for(int i = 0; i < MAX_RECENTFILES; ++i) { QString filename = m_settings.value("File" + QString::number(i + 1)).toString(); if(!filename.isEmpty()) m_recentFiles.push_back(filename); } m_alsamidiport = m_settings.value("ALSA MIDI port").toString(); m_jackmidiport = m_settings.value("JACK MIDI port").toString(); m_importdir = m_settings.value("Import Directory").toString(); m_importdestination = m_settings.value("Import Destination").toBool(); m_importcodec = m_settings.value("Import Codec").toString(); m_xjadeopath = m_settings.value("XJADEO Path").toString(); m_mencoderpath = m_settings.value("MENCODER Path").toString(); m_mencoderopts = m_settings.value("MENCODER Options").toString(); m_xjinfopath = m_settings.value("XJINFO Path").toString(); // TODO: detect portmidi / alsamidi default. 'midi library' if (m_alsamidiport.isEmpty()) m_alsamidiport = QString("24"); if (m_jackmidiport.isEmpty()) m_jackmidiport = QString(""); if (m_importcodec.isEmpty()) m_importcodec = QString("mpeg4"); if (m_mencoderpath.isEmpty()) m_mencoderpath = QString(MENCODER); if (m_xjadeopath.isEmpty()) m_xjadeopath = QString(BINDIR XJREMOTE); if (m_xjinfopath.isEmpty()) m_xjinfopath = QString(BINDIR XJINFO); m_osdfont = m_settings.value("OSD font").toString(); fileImportAction->setEnabled(testexec(m_mencoderpath)); for (int i = 0; i < MAX_RECENTFILES; ++i) { recentFileActs[i] = new QAction(this); recentFileActs[i]->setVisible(false); connect(recentFileActs[i], SIGNAL(triggered()), this, SLOT(fileOpenRecent())); fileMenu->addAction(recentFileActs[i]); } if(m_recentFiles.size()) updateRecentFilesMenu(); } void QJadeo::initialize () { if (!m_osdfont.isEmpty()) { xjadeo->write(QString("osd font " + m_osdfont + "\n").toUtf8()); } xjadeo->write(QByteArray("osd notext\n")); xjadeo->write(QByteArray("get width\n")); xjadeo->write(QByteArray("get height\n")); xjadeo->write(QByteArray("get frames\n")); xjadeo->write(QByteArray("get framerate\n")); xjadeo->write(QByteArray("get offset\n")); xjadeo->write(QByteArray("get osdcfg\n")); xjadeo->write(QByteArray("midi driver\n")); xjadeo->write(QByteArray("get syncsource\n")); xjadeo->write(QByteArray("get position\n")); xjadeo->write(QByteArray("get letterbox\n")); xjadeo->write(QByteArray("notify frame\n")); } /* search for external executable * returns true if file is found in env(PATH) * and is executable. */ bool QJadeo::testexec(QString exe) { return 1; //int timeout=10; QProcess testbin; /* FIXME: there MUST be a better way * than to simply try exeute it .. */ //testbin.setCommunication(0); testbin.start(exe,QStringList("-V")); if(!testbin.waitForStarted()) { testbin.kill(); return (0); } //while (testbin.state() && timeout--) usleep (10000); //if (timeout<1) testbin.kill(); //if (testbin.exitStatus() != 0) return(0); return(1); } // Recent files list void QJadeo::updateRecentFilesMenu() { int numRecentFiles = qMin(m_recentFiles.size(), MAX_RECENTFILES); for (int i = 0; i < numRecentFiles; ++i) { QString text = tr("&%1 %2").arg(i + 1).arg(QFileInfo(m_recentFiles[i]).fileName()); recentFileActs[i]->setText(text); recentFileActs[i]->setData(m_recentFiles[i]); recentFileActs[i]->setVisible(true); } for (int j = numRecentFiles; j < MAX_RECENTFILES; ++j) recentFileActs[j]->setVisible(false); //separatorAct->setVisible(numRecentFiles > 0); } void QJadeo::updateRecentFiles(const QString & filename) { m_recentFiles.removeAll(filename); m_recentFiles.prepend(filename); while (m_recentFiles.size() > MAX_RECENTFILES) m_recentFiles.removeLast(); updateRecentFilesMenu(); } void QJadeo::fileOpenRecent() { QAction *action = qobject_cast(sender()); if (action) fileLoad(action->data().toString()); } void QJadeo::saveOptions() { QSettings m_settings("rss", "jadeo"); m_settings.setValue("WindowWidth", width()); m_settings.setValue("WindowHeight", height()); m_settings.setValue("WindowX", x()); m_settings.setValue("WindowY", y()); for(int i = 0; i < int (m_recentFiles.size()); ++i) m_settings.setValue("File" + QString::number(i + 1), m_recentFiles[i]); m_settings.setValue("OSD font", m_osdfont); m_settings.setValue("JACK MIDI port", m_jackmidiport); m_settings.setValue("ALSA MIDI port", m_alsamidiport); m_settings.setValue("Import Codec", m_importcodec); m_settings.setValue("Import Directory", m_importdir); m_settings.setValue("Import Destination", m_importdestination); m_settings.setValue("XJADEO Path", m_xjadeopath); m_settings.setValue("XJINFO Path", m_xjinfopath); m_settings.setValue("MENCODER Path", m_mencoderpath); m_settings.setValue("MENCODER Options", m_mencoderopts); } void QJadeo::fileOpen() { QString s = QFileDialog::getOpenFileName(this, tr("Choose video file"), "", 0); if(!s.isNull()) { fileLoad(s); } } void QJadeo::fileDisconnect() { xjadeo->write(QByteArray("notify disable\n")); xjadeo->write(QByteArray("exit\n")); saveOptions(); // xjremote will exit and we'll go down with it // xjadeo will return a @489 error message //close(); } void QJadeo::fileExit() { xjadeo->write(QByteArray("quit\n")); xjadeo->write(QByteArray("exit\n")); saveOptions(); //close(); // we will terminate when xjadeo/xjremote does. } void QJadeo::filePreferences() { PrefDialog *pdialog = new PrefDialog(this); if (pdialog) { /* set values */ pdialog->prefLineJackMidi->setText(m_jackmidiport); pdialog->prefLineAlsaMidi->setText(m_alsamidiport); pdialog->prefLineXjadeo->setText(m_xjadeopath); /* exec dialog */ if( pdialog->exec()) { /* apply settings */ fileImportAction->setEnabled(testexec(m_mencoderpath)); if (!pdialog->prefLineXjadeo->text().isEmpty()) m_xjadeopath = pdialog->prefLineXjadeo->text(); if (!pdialog->prefLineAlsaMidi->text().isEmpty()) m_alsamidiport = pdialog->prefLineAlsaMidi->text(); if (!pdialog->prefLineJackMidi->text().isEmpty()) m_jackmidiport = pdialog->prefLineJackMidi->text(); /* and save */ saveOptions(); } delete pdialog; } } void QJadeo::fileImport() { #if 0 ImportDialog *idialog = new ImportDialog(this); if (idialog) { QString src, dst; QString fps = QString(""); QString xargs = QString(""); ImportProgress *iprog = NULL; int w,h; w=h=0; if (m_importdestination) idialog->dstDir = m_importdir; idialog->mcOptionsLineEdit->setText(m_mencoderopts); idialog->xjinfo = m_xjinfopath; /* get settings */ if(idialog->exec()) { src = idialog->SourceLineEdit->text(); dst = idialog->DestLineEdit->text(); xargs = idialog->mcOptionsLineEdit->text(); if (idialog->widthCheckBox->isChecked()) { w = idialog->widthSpinBox->value(); if (idialog->aspectCheckBox->isChecked()) h = idialog->heightSpinBox->value(); } if (idialog->fpsCheckBox->isChecked()) fps = idialog->fpsComboBox->currentText(); } /* start encoding */ if(!src.isEmpty() && !dst.isEmpty()) iprog = new ImportProgress(this); if(iprog) { if(!iprog->setEncoderFiles(src,dst)) { iprog->setEncoderArgs(m_importcodec,fps,w,h); iprog->setExtraArgs(xargs); iprog->mencode(m_mencoderpath); iprog->setModal(FALSE); iprog->show(); } else delete iprog; } delete idialog; } #endif } void QJadeo::helpAbout() { QMessageBox::about( this, "About qjadeo", "(c) 2006-2010 Robin Gareus & Luis Garrido\n" "http://xjadeo.sf.net" ); } void QJadeo::zoom50() { xjadeo->write(QByteArray("window resize 50\n")); } void QJadeo::zoom100() { xjadeo->write(QByteArray("window resize 100\n")); } void QJadeo::zoom200() { xjadeo->write(QByteArray("window resize 200\n")); } void QJadeo::zoomFullScreen() { QDesktopWidget *d = QApplication::desktop(); xjadeo->write(QByteArray("window position 0x0\n")); xjadeo->write(QString( "window resize " + QString::number(d->width()) + "x" + QString::number(d->height()) + "\n" ).toAscii()); } void QJadeo::zoomAspect() { xjadeo->write(QByteArray("window fixaspect\n")); } void QJadeo::zoomLetterbox(bool value) { if (value) { xjadeo->write(QByteArray("window letterbox on\n")); } else { xjadeo->write(QByteArray("window letterbox off\n")); } } void QJadeo::syncJack() { xjadeo->write(QByteArray("ltc disconnect\n")); xjadeo->write(QByteArray("midi disconnect\n")); xjadeo->write(QByteArray("jack connect\n")); xjadeo->write(QByteArray("midi driver\n")); xjadeo->write(QByteArray("get syncsource\n")); } void QJadeo::syncLTCJack() { xjadeo->write(QByteArray("midi disconnect\n")); xjadeo->write(QByteArray("jack disconnect\n")); xjadeo->write(QByteArray("ltc connect\n")); xjadeo->write(QByteArray("midi driver\n")); xjadeo->write(QByteArray("get syncsource\n")); } void QJadeo::syncMTCalsa() { xjadeo->write(QByteArray("ltc disconnect\n")); xjadeo->write(QByteArray("jack disconnect\n")); xjadeo->write(QByteArray("midi disconnect\n")); xjadeo->write(QByteArray("midi driver alsa-seq\n")); xjadeo->write(QString("midi connect "+ m_alsamidiport +"\n").toAscii()); xjadeo->write(QByteArray("midi driver\n")); xjadeo->write(QByteArray("get syncsource\n")); } void QJadeo::syncMTCjack() { xjadeo->write(QByteArray("ltc disconnect\n")); xjadeo->write(QByteArray("jack disconnect\n")); xjadeo->write(QByteArray("midi disconnect\n")); xjadeo->write(QByteArray("midi driver jack\n")); xjadeo->write(QString("midi connect "+ m_jackmidiport +"\n").toAscii()); xjadeo->write(QByteArray("midi driver\n")); xjadeo->write(QByteArray("get syncsource\n")); } void QJadeo::syncOff() { xjadeo->write(QByteArray("ltc disconnect\n")); xjadeo->write(QByteArray("jack disconnect\n")); xjadeo->write(QByteArray("midi disconnect\n")); xjadeo->write(QByteArray("midi driver\n")); xjadeo->write(QByteArray("get syncsource\n")); } void QJadeo::setFPS(const QString &fps) { xjadeo->write(QString("set fps " + fps + "\n").toAscii()); } void QJadeo::setOffset(const QString &offset) { xjadeo->write(QString("set offset " + offset + "\n").toAscii()); } void QJadeo::osdFrameToggled(bool value) { if(value) xjadeo->write(QByteArray("osd frame 0\n")); else xjadeo->write(QByteArray("osd frame -1\n")); } void QJadeo::osdSMPTEToggled(bool value) { if(value) xjadeo->write(QByteArray("osd smpte 100\n")); else xjadeo->write(QByteArray("osd smpte -1\n")); } void QJadeo::osdTextOff() { QJadeo::osdTextToggled(false); xjadeo->write(QByteArray("get osdcfg\n")); } void QJadeo::osdTextToggled(bool value) { if(value) xjadeo->write(QByteArray("osd text\n")); else xjadeo->write(QByteArray("osd notext\n")); } void QJadeo::osdBoxToggled(bool value) { if(value) xjadeo->write(QByteArray("osd box\n")); else xjadeo->write(QByteArray("osd nobox\n")); } void QJadeo::seekBarChanged( int value ) { int frame=0; QString Temp; if(m_frames > 0) { frame = value*m_frames/1000; } Temp.sprintf("seek %i\n",frame); xjadeo->write(Temp.toAscii()); } void QJadeo::osdFont() { QString s = QFileDialog::getOpenFileName(this, tr("Choose a font"), "", "TrueType fonts (*.ttf)"); if(!s.isNull()) { m_osdfont = s; xjadeo->write(QString("osd font " + s + "\n").toUtf8()); xjadeo->write(QByteArray("osd text \n")); } } // Called when xjadeo outputs to stdout void QJadeo::readFromStdout() { while(xjadeo->canReadLine()) { QString response = xjadeo->readLine(); //qDebug(QString("ResponseLine: '" + response+ "'").toAscii().data()); int status = response.mid(1, 3).toInt(); switch(status / 100) { case 4: { switch(status) { case 410: // get filename -> no open video file break; case 489: // -> tried "exit" on xjadeo (not xjremote) xjadeo->write(QByteArray("quit\n")); break; default: QMessageBox::critical( this, "qjadeo", "Error " + response, "&Close" ); } break; } case 2: case 3: { int equalsign = response.indexOf('='); int comment = response.indexOf('#'); if (comment > 0) response.truncate(comment); QString name = response.mid(5, equalsign - 5); QString value = response.right(response.length() - equalsign - 1).trimmed(); //qDebug(QString("Response: name='" + name + "' value='" +value +"'").toAscii().data()); if(name == "position") { if(m_frames > 0) { progressBar->setRange(0, m_frames); progressBar->setValue(value.toInt() + 1); } } else if(name == "filename") updateRecentFiles(QString::fromUtf8(value.toAscii().data(),-1)); else if(name == "movie_width") m_movie_width = value.toInt(); else if(name == "movie_height") m_movie_height = value.toInt(); else if(name == "mididrv") { m_mididrv = 0; if (value == "JACK-MIDI") m_mididrv = 1; } else if(name == "syncsource") { syncJackAction->setChecked(FALSE); syncLTCJackAction->setChecked(FALSE); syncMTCJackAction->setChecked(FALSE); syncMTCAlsaAction->setChecked(FALSE); syncOffAction->setChecked(FALSE); if (value.toInt()==0) { // off seekBar->setEnabled(TRUE); syncOffAction->setChecked(TRUE); } else if (value.toInt()==3) { // LTC syncLTCJackAction->setChecked(TRUE); } else if (value.toInt()==2) { // MIDI seekBar->setEnabled(FALSE); if (m_mididrv == 1) syncMTCJackAction->setChecked(TRUE); else syncMTCAlsaAction->setChecked(TRUE); } else { seekBar->setEnabled(FALSE); //JACK syncJackAction->setChecked(TRUE); } } else if(name == "osdfont") { ;// set default folder and file in // File selection dialog. } else if(name == "letterbox") { int v= value.toInt(); actionLetterbox->setChecked(v&1); } else if(name == "osdmode") { int v= value.toInt(); osdBoxAction->setChecked(v&8); osdTextAction->setChecked(v&4); osdSMPTEAction->setChecked(v&2); osdFrameAction->setChecked(v&1); } else if(name == "frames") { m_frames = value.toInt(); } else if(name == "offset") { m_offset = value.toInt(); offsetSpinBox->setValue(m_offset); } else if(name == "framerate") { m_framerate = (int)rint(value.toDouble()); // TODO: round value / allow fpsSpinBox->setValue(m_framerate); xjadeo->write(QString("set fps " + value + "\n").toAscii()); } else if(name == "updatefps") m_updatefps = value.toInt(); break; } case 1: if(status==129) { xjadeo->write(QByteArray("get filename\n")); xjadeo->write(QByteArray("get width\n")); xjadeo->write(QByteArray("get height\n")); xjadeo->write(QByteArray("get frames\n")); xjadeo->write(QByteArray("get framerate\n")); xjadeo->write(QByteArray("notify frame\n")); xjadeo->write(QByteArray("get offset\n")); xjadeo->write(QByteArray("get osdcfg\n")); xjadeo->write(QByteArray("midi driver\n")); xjadeo->write(QByteArray("get syncsource\n")); xjadeo->write(QByteArray("get position\n")); xjadeo->write(QByteArray("get letterbox\n")); } } } } void QJadeo::fileLoad(const QString & filename) { m_movie_width = 0; m_movie_height = 0; m_updatefps = 0; m_frames = 0; m_offset = 0; m_framerate = 0; m_mididrv = 0; bool showtext = osdTextAction->isChecked(); xjadeo->write(QString("load " + filename + "\n").toUtf8()); xjadeo->write(QString("osd text " + filename + "\n").toUtf8()); xjadeo->write(QByteArray("get filename\n")); if (!showtext) { QTimer::singleShot(3000, this, SLOT(osdTextOff())); } } int main(int argc, char **argv) { QApplication a(argc, argv); QString sLocale = QLocale::system().name(); QTranslator translator; if (sLocale != "C") { QString sLocName = "qjadeo_" + sLocale; if (!translator.load(sLocName, ".")) { QString sLocPath = CONFIG_PREFIX; if (!translator.load(sLocName, sLocPath)) { fprintf(stderr, "Warning: no locale found: %s/%s.qm\n", sLocPath.toAscii().data(), sLocName.toAscii().data()); } } a.installTranslator(&translator); } QJadeo w; QString xjadeoPath(getenv("XJREMOTE")); if(xjadeoPath.isEmpty()) xjadeoPath = w.m_xjadeopath; else w.m_xjadeopath = xjadeoPath; if(xjadeoPath.isEmpty()) xjadeoPath = BINDIR XJREMOTE; w.xjadeo = new QProcess(&w); w.xjadeo->start(xjadeoPath, QStringList("-R")); if(!w.xjadeo->waitForStarted()) { QMessageBox::QMessageBox::critical( &w, "qjadeo", "can not execute xjadeo/xjremote." ,"Exit", QString::null, QString::null, 0, -1); //qFatal("Could not start xjadeo executable: " + xjadeoPath); //qFatal("Try to set the XJREMOTE environment variable to point to xjadeo."); exit(1); } w.xjadeo->closeReadChannel(QProcess::StandardError); w.xjadeo->setReadChannel(QProcess::StandardOutput); w.connect(w.xjadeo, SIGNAL(readyReadStandardOutput()), &w, SLOT(readFromStdout())); w.connect(w.xjadeo, SIGNAL(finished(int, QProcess::ExitStatus)), &w, SLOT(close())); w.show(); a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit())); w.initialize(); a.exec(); if (w.xjadeo->state()){ qDebug("xjadeo is still running.\n"); w.xjadeo->write(QByteArray("notify disable\n")); w.xjadeo->write(QByteArray("exit\n")); QTest::qWait(1000); } while (w.xjadeo->state()){ qDebug("terminate xjadeo/xjremote process.\n"); w.xjadeo->close(); QTest::qWait(1000); w.xjadeo->kill(); } } /* vi:set ts=8 sts=2 sw=2: */ xjadeo-0.8.10/src/qt-gui/qjadeo.h0000644000175000017500000000317712620454615013421 00000000000000#ifndef QJADEO_H #define QJADEO_H #include "ui_mainwindow.h" #include #include "prefdialog.h" #include "importprogress.h" #include "importdialog.h" #define MAX_RECENTFILES 5 class QJadeo: public QMainWindow , public Ui::MainWindow { Q_OBJECT public: QJadeo(); void fileLoad(const QString & filename); void initialize(); QString m_xjadeopath; QProcess *xjadeo; private: QStringList m_recentFiles; int m_movie_width; int m_movie_height; int m_updatefps; int m_frames; int m_offset; int m_framerate; QString m_osdfont; QString m_alsamidiport; QString m_jackmidiport; QString m_importdir; bool m_importdestination; QString m_importcodec; QString m_mencoderpath; QString m_mencoderopts; QString m_xjinfopath; int m_mididrv; void updateRecentFilesMenu(); void updateRecentFiles(const QString & filename); void saveOptions(); bool testexec(QString exe); QAction *recentFileActs[MAX_RECENTFILES]; public slots: void fileOpen(); void fileExit(); void fileImport(); void filePreferences(); void fileDisconnect(); void helpAbout(); void zoom50(); void zoom100(); void zoom200(); void zoomFullScreen(); void zoomAspect(); void zoomLetterbox(bool); void syncJack(); void syncLTCJack(); void syncMTCalsa(); void syncMTCjack(); void syncOff(); void setFPS(const QString &); void setOffset(const QString &); void fileOpenRecent(); void readFromStdout (); void osdFrameToggled(bool); void osdSMPTEToggled(bool); void osdTextToggled(bool); void osdBoxToggled(bool); void osdFont(); void seekBarChanged( int ); void osdTextOff(); }; #endif xjadeo-0.8.10/src/qt-gui/prefdialog.ui0000644000175000017500000001636712620454615014465 00000000000000 PrefDialog 0 0 394 199 Preferences true General Settings Autoconnect ALSA Midi port (MTC): false Qt::Horizontal QSizePolicy::Expanding 90 20 0 0 60 0 16 Autoconnect JACK Midi port (MTC): false Qt::Horizontal QSizePolicy::Expanding 0 20 1 0 160 0 64 xjadeo/xjremote executable: false Qt::Horizontal QSizePolicy::Expanding 10 20 1 0 160 0 Qt::Vertical QSizePolicy::Expanding 20 40 &Cancel true Qt::Horizontal QSizePolicy::Expanding 164 20 &OK true true qPixmapFromMimeSource buttonCancel clicked() PrefDialog reject() 20 20 20 20 buttonOk clicked() PrefDialog accept() 20 20 20 20 xjadeo-0.8.10/src/qt-gui/images/0000755000175000017500000000000013775353060013326 500000000000000xjadeo-0.8.10/src/qt-gui/images/qjadeo.ico0000644000175000017500000001356612620454615015214 00000000000000 &00( @        !! !!! !!!"!!!"""""""#####$#$$#$$$$%$%%$%%%%&%%&&&&&'&&'&'''&'''''(('('(')))*))**))******+**+++++++,,,+,,,,,-,-------..-.-.-.../../// 777 ""&&''@@UUULL;;<<RR\\\??UUAAXXaaRRooorrrZZ``gghhpp݂ ߋ''++└䝝墢壣椤LLOORRZZ]]鯯걱겲뷷yy݃}wqmib]XUTNKHD>91*'#  ~vqjb[UQGC7 ~tojf_\TLI?<5/%" }smhe]WTLG@94-'! zwlg]XPKG>0,'$ zupfaZOIF;6.&"|f`YVOLB93-({xrngd^WUSMJGC>80+)" 0000000000000000000000000000000000000000000000000000000000000000000000222222220000ϗ00002222222200000G00Rk222cA20000ڑ0Eٛ0000ҝ珔ݧԯ2222c0000բ݈ɯβ22000000د2Eߞ2y0000Ǫ]0ѡ:י0000Ҡ瓔0000:2222=220000000022222222000000002222222200000000222222220000000022222222000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÇÇ(0`       !! !!! !!!"!!!"""""""#####$#$$#$$$$%$%%$%%%%&%%&&&&&'&&'&'''&'''''(('('(')))*))**))******+**+++++++,,,+,,,,,-,-------..-.-.-.../..///111333999;;;<<<???@@@FFFHHHOOOPPPVVVYYYZZZ^^^```bbbdddeeejjjssstttvvvwww{{{|||~~~}yupjfc]XSPOJGDA<92+($! zvojd]VPMC@7 |vmhd`ZWOHE=;50&# |xulfb_XROHC>94.(" |xrpeaXSLGC<1-(% {wrni`\UKEB:6/'#~yt`[TQKH?93.)|ysqkga^YRPNIFC@<81,*#  nTۖ#·߯ߧj퍲 秎ճn|C 幸ߪߥ혿a&O````````````````````````xjadeo-0.8.10/src/qt-gui/images/qjadeo.png0000644000175000017500000002373312620454615015223 00000000000000PNG  IHDR>asRGB IDATx]{xT93gf2gpQHEdkӊ>݊vnk-l}VV{A㊗P$bB w&\9gg$3 lǹ|s{/}aaaa?;/bfM6e˖%#J "S8J1buݖc4NSipl]U6mǏj(\.{0Tvg<)e3ۥEI>B)I)EBiiPii@ҋma8١z"0\"rpQ>3s9x }! Q+>" v0((J(|a`b޼ybĉ6)CRfK)=R!#(D @;[ቾG$yDEDEUV-R5kի0E)6͞!Uţz!3 !F(b|D FD6"3-|JFq@( ̝BVmD$\JyJQ3ܢ(JPyy0Uv{(%08"*aD4shDdP= (7я(t " 1s@+4 !8ID@-## 9 PUiJyM0p3Sacf NQC;'bDT(Q)eo|~?C4\r03UVV*'O@ & @d,!!dfhp@(uR"jaÇϟo\jg.(ǎBaI<9Q<м[})+ّ?f6 3wQ 1s0z)eKIIIw=.Y>A ufMRd)"1qonYBD`(yՊ|`F P.W^455e !&2l*E2HF|W[} $G"RAD(_J+tI)UEQt։gah֭j~~~~ Z%pDGht=0Pv0s ̬ !|' Wڨ뺷(x1I455qyyх>= f?5!姛bD#٘93brḋ 8ќsL¥3i"jPH(f #} JYЈ(7tF2c(o=zt%(!@&QX2` fQNDY̜OD9Bpgggg_pKqCCz3D,Ls_'dq*9!&1W!`pٳg3(f0|i5 vi٠(b2lNDY` .9pwwwXDt@+3mfꜥj*!0RDF^p\ra Mހl`t']+2f$" v|@08G!ڤdf&ґHbXRJ!. np'HE;їJf Ig c Og8TR; 0ss" @r;O0W<(iƹ?@vwwl6[@W$yT`cT=Aoss3(A]MMMaf d0@TU4 "2U:l]48a@7QḒ:3sx0`H@Ӵ]H);#?Uj/0F<))e{III1T_\\6Cu3 !"iaTHSIEU9D4A1CU2EQF80YSFfA48v!08Ò"!D(B @0D8FIUf"(PUv+;BuԸ 0 RJ03c///8V0iD`F?qee%`dAf'-`!@y2$M(f`!:"NiiiaUURn"$KIQ`JoҒwޔRLq8p8PUu_¨@uB!`F?48I!DN.G?tX Z7=-`zi~rO`V 7܀;w ~_cʕVߏw} 3g^~eL2:{5kpW4MÏcl6yWرcx'QXXhl2|ߌy~ӦMSO=cns=(..nvTTT wu}kؼysL:j(<#I94 . naȑpݖO auaĈ0vP( ۍl[9r?p8q\s՗gyƍ 7`9r`ĉ1޵kW̹;wٳczS jժ~/ﶾ|>|[ʕ+q7[uV lllDMMEii)K%LA9EQ)eL̖MRJh<8N8Ndff"33gΜAnn. \ڊ{,/P~ގ;v`֬Y1UTT 77{nhooǢE,?E㏱e{=9s7-hP(n1׃>I&cԨQ4 ;w_Ǿ},|_Ot:-*:8pu^{xgm6ҥKQXX?hmmi6m Q__O?PVVL۷`0qDǏ[mW^y%JJJPYYiRW^y%rssk.H)quס P\\'xn/6oތl-//lMӰl2_G8ƴi0a+iƍa 77<zzz3Ϡ@o7G =1 P>`a7Sx>Z9@RJ躞ԍv;*\.ۡ:l6<qĉ!)Cu7o'? ***o} ?0|͸[pk֬A}}=N':l6OB0ģ>;gΜm455&L}Ág}[ڊoE|>֬Yݎoi&7< JJJi&g?Cqq1Ftww#f vuuu|p8(//aiUىqaԨQFCC nUUUoFAAEadC8EQ:n7JJJnٝ<梠cǎEII 򐕕|+oCa̘1[1ydxrO< x'O|;vફ<> 6lm݆˿aXv-***PVVxװe\uUOɓ'wůk{&O_|1sL˙}饗/"''O= :v LtZ?ZLJǧVM>w_z_ˌz7of&0vbHutuuAuB}n6 &0~?BP_` Be6?`flBD_lX.d&d*Teh)?%Ê|Y -&` ':\54A PMGt&=4gL 5Y ]v!//o4MBr UUUV'͛7ɓ8yy LE|>TUEAA d!222GYe\fcOTS躎[o՚\nNgU77DVVt]ܹsA$:q RRGfYX__ϗ։acpN@% nCOO222vlī ŋtHnn._vѣGQ]]7MF?۷oGMM ^}՘*ݾ… ??8tߏ^zɪ'SLo~۷uuuؽ{7֮]+Ҁ$34Y(J=ݸ;pIH)v[o`\s ^oʣ?y̘1VΝ;UV矷?c0??׭[_1msV^oy衇/EaX3fW<y"|'A^^{9+Կl2KW̙3d;N̨4_[[ b,SZ߲e fϞ bǎέQ^~UWYonn1sL|{߳X~D:P_~̟?`#G 7܀yaԨQ\iǎúuxgֆO?@#z{ィѣGqy}χhllDmm-V\i9}+V|6/~aY}!-j a}ha}vl߾Xt)/cܹ#sHsssLԄfIsѣG!zeu]hkk;o#W^y?_6ѝۙ'~cBJÇcʕI]ƍÇGIx|FFy晘P9Ξ={_Jr̙]OϻGSSy4KV 4X׋¯~+(~:^-#\ H~k3Gtwwc֭mi%UGff&pw$OWWrssQTTs'pS\.{"I*i͆GV%UBdٳcZG,X`9u7nDww7TU)6e#FX x<I%%%Agg':;;qY̙3 , kBnK.>۷)?) D4 no:BPQQ,lzǽދ 6X+ps똡۬YPTT{ ]g>_'Nc{YZt:=z4cڵx'1rȘ0_=tRvCѩ 8pz)%|>50i$B!֯_okG܍!O=88?aLtCńv㭷ɫi233qF|߅P(`0K"''Zyf>(((@~~>;`Ŋhhh9~Ν$!v؁+V ##:::'?". x1vX+rxꩧbF믿3g`ȑʂ'|Gy֭;/c|(͆f/oOncMĚ~DnJjU(p8(**s=R+-BP_H͆'x\s U,3gC}݃*1?3=M@f ռ_bRᅬyaΜ9x+뮻J0JR[`Bbf&sS'N@}}59ϜB'Kf\i"+sm۶aVGɓ'mgСCرcGLw̘1عs5m{+a7tك-[qFtM={XyhƋy0P^:=%aXC uuu8rsSׯ`7 <m o><;>wڵkqhcǎpWfxI)߿ӧOǶm/CQZ/P?ϰl2~vL:7o=ڪƇ~1ocڵ;qwG?? zBI3@ HCwFFl65s8}tk@SO*L2555VJ6 ӧOfn=z4f„ Vjyԩ敕!##s3g`T|51j PUp/s=gϘ1a*CEEK,9zh7,ww\سgƌUU1c 8p n/^ "|駸q7bP+bOD b@u~ִ1pj۶mXvm [[nE{{;s͚5 Ǐ|K_Bss3`֬Y;vرc{n+LQo1 \M`]]b6^bŠB?S7 0 CEAyy9,ܻ;q} ܹsLs ={6}ӭ It! <12[R:IuPTPaUUqwcÆ V[NNsNsrrPSSlnop999k;:m=m4Xl؈*,Z)himm[mmm@4→)P'FSN=5pSNŁpq3c},1`V!]w݅uYP__Y8 ^{-&$0a&M[[lS@o [UUc?]./_9sXm1˗ Ǐٳ|ӪUp}n֭[-v0xcc#TUÇc_ª |ꩧ,f9s&}]Vowy'mR@GJyx^g8yȥ 0s?qDAk_/> ?O[pB~R⦛nYC߰g,_Y2r45U|ذ\Y,l u頠a s船9lWi~g>X ݘh֭h":Jhf_㽚5ٶ>unxNN&gf?ωh=UUwTijIDAT=Eet˩S"<)e>3Y= ⍌ޟxZ{ERsef֙J)?u0'6$MUL0<r@$2h0rRU|<`%7g*>gRClu=<LO4*__@H41Cdd̟K)?0{LFC.nx(3qS\#?,0d+ff>)凡PZU梢@d5xK)3Yafꭨx5Y':>hL%RiK` ]꥔0 `0ؐ -3q?B!"G#"(Xo:j dk/ ,3>!iV?bĈAD)e>rإC_G+*[ºT>gggUC038qB5 f.Rf1hL$s~CCC mlD4 <(On%}lF2q>.f6mP*HR={ 3:Y}$Yp#K^L"9^)IfKD뺾OӴ | vKB 0LED 3SdRɦS9.^?H)? N aW%"!ˤh+/N䙛Na @CD_JY Y&̋xyD%ImRʓDt^"Ш(7777@^ _R'Yuz#2N%ӗLׇ)(>fne;Rw}>16@DR>pY:::JEND3ShLpG"%,JIKShn6Ith!\CDՊ|0ϟQ?T@cǎeBBM0$",`T4HQj*K6tQ 3.3 FQkF;t|)ɝ7{&O2sX$"*efD4M~_SD$ "sķ2sCkQ!D#G%%%ƥR`hYzXht:5nM E)e <Q1|nfv !lddyř4&"DmNqfU娔|n|׍իWuuC `E)0&fID#9+:# !(h0NDEB#Dtlj褔1eddt{<`$Rk+:M l6{FFF"WQ\,flDd#";3"# p3^|gN!D+6"jR~NDTU=[E*//r¼yĉmRJ%̖RzBK)GQ&3;(+TʊM""/vf"Sܢj+]J)}B@iiix͚5rPe aӦMb񢸸fg ! %"W$Q13Qs^a 2@DDt*b}#"j7 ܅}P Bven,ݞ+GԳdBH!DHJЮ(7 4M5M JKKM=UVV҈#붜i6ob)t8@ *,,4G^JBK6nܨDJA)Qũaaaa_jVIENDB`xjadeo-0.8.10/src/qt-gui/qjadeo_ru.ts0000644000175000017500000004262412620454615014326 00000000000000 ImportDialog Import - Convert Video File Импорт — Конвертирование видеофайла Video File Видеофайл Source: Источник: File Info: Информация: Destination: Конечный файл: Encoder Settings Параметры кодировщика Width: Ширина: Scale Масштабировать Height: Высота: Break Aspect Ratio Без учёта соотношения сторон FPS: Кадров в секунду: 24 24 25 25 29.97 29.97 30 30 Resample Выполнять ресэмплинг extra mencoder options Дополнительные ключи mencoder &Cancel О&тменить &OK &OK select video file to convert Выберите конвертируемый видеофайл choose a destinaton filename Выберите имя конечного файла ImportProgress Transcoding Video File Выполняется конвертирование файла Cancel Отменить MainWindow qjadeo qjadeo screen updates per sec. Обновлений в секунду: time offset in video-frames: Смещение времени в видеокадрах: &File &Файл &Sync С&инхронизация &Zoom &Масштаб &OSD &OSD &Seek Пере&ход &Help &Справка &Open... &Открыть... Open Открыть Ctrl+O Ctrl+O &Close xjadeo and Exit &Закрыть xjadeo и выйти Exit Выход Ctrl+Q &About &О программе About О программе Frame number Номер кадра SMPTE SMPTE Filename Имя файла Box Рисовать фон Font... Шрифт... &Import &Импортировать Import Импортировать Convert video files. Сконвертировать видеофайлы &Configure qjadeo &Настроить qjadeo Configure qjadeo Настроить qjadeo Disconnect and &Exit Отсоединиться и в&ыйти Disconnect Отсоединиться Ctrl+W Letterbox Resize to aspect-ratio to any frame К любому кадру keyframes only Только по ключевым кадрам continuously Непрерывно JACK Transport Транспорт JACK LTC (JACK) LTC (JACK) MTC (JACK MIDI) MTC (JACK MIDI) MTC (ALSA SEQ) MTC (ALSA SEQ) off (slider) Выкл (ползунок) off Выкл 50% 50% 100% 100% 200% 200% Maximize Во весь экран PrefDialog Preferences Параметры General Settings Общие Autoconnect ALSA Midi port (MTC): Автосоединение с портом ALSA MIDI (MTC): Autoconnect JACK Midi port (MTC): Автосоединение с портом JACK MIDI (MTC): xjadeo/xjremote executable: Файл xjadeo/xjremote: xjinfo executable: Файл xjinfo: mencoder executable: Файл mencoder: Import Settings Импорт Import to Codec: Используемый кодек: mpeg4 mpeg4 mjpeg mjpeg msmpeg4 msmpeg4 mpeg1video mpeg1video mpeg2video mpeg2video mencoder options: Параметры mencoder: Default Import Destination Path: Каталог хранения импортированных файлов &Cancel О&тменить &OK &OK Select default destination folder Выберите папку для хранения импортированных файлов QJadeo &%1 %2 &%1 %2 Choose video file Choose a font xjadeo-0.8.10/src/qt-gui/Makefile.am0000644000175000017500000000460512620454615014036 00000000000000# quick hack - else make dist won't include these files. EXTRA_DIST= qjadeo.cpp qjadeo.pro.in mainwindow.ui qjadeo.h\ images/qjadeo.png images/qjadeo.ico\ importdialog.ui prefdialog.ui importprogress.ui \ importdialog.h importprogress.h prefdialog.h \ importdialog.cpp importprogress.cpp prefdialog.cpp \ qjadeo_fr.ts qjadeo_ru.ts qjadeo_el_GR.ts qjadeo_cs.ts \ Makefile.am qjadeo.qrc qjadeo.rc qmake = @ac_qmake@ lrelease = @ac_lrelease@ qmakeargs = @ac_qmake_args@ COPY = /bin/cp DEL_FILE = /bin/rm MKDIR = /bin/mkdir name = qjadeo headers = qjadeo.h \ importdialog.h importprogress.h prefdialog.h sources = qjadeo.cpp \ mainwindow.ui \ importdialog.cpp importprogress.cpp prefdialog.cpp \ importdialog.ui prefdialog.ui importprogress.ui TRANSLATIONS = qjadeo_fr.ts qjadeo_ru.ts qjadeo_el_GR.ts qjadeo_cs.ts all: $(name) $(name).mak: $(name).pro $(qmake) -o $(name).mak $(name).pro $(qmakeargs) $(lrelease) $(TRANSLATIONS) $(name): $(name).mak $(sources) $(headers) mydirs.h $(MAKE) -f $(name).mak install: $(name) $(INSTALL) $(name) $(DESTDIR)/$(bindir)/ mkdir -p $(DESTDIR)/$(datadir)/qjadeo/locale/ $(INSTALL) -m 644 -t $(DESTDIR)/$(datadir)/qjadeo/locale/ $(subst .ts,.qm,$(TRANSLATIONS)) uninstall: $(DESTDIR)/$(bindir)/$(name) $(DEL_FILE) -vf $(DESTDIR)/$(bindir)/$(name) cd $(DESTDIR)/$(datadir)/qjadeo/locale/ && $(DEL_FILE) -vf *.qm rmdir $(DESTDIR)/$(datadir)/qjadeo/locale/ .PHONY: clean clean: $(name).mak $(MAKE) -f $(name).mak clean if test -d qt3; then \ $(COPY) -f qt3/* .; \ $(DEL_FILE) -rf qt3; \ fi $(DEL_FILE) -f $(name) $(name).mak $(DEL_FILE) -rf *.cache *.log *.status $(DEL_FILE) -rf .ui $(DEL_FILE) -rf .obj $(DEL_FILE) -rf .moc $(DEL_FILE) -f portinglog.txt $(DEL_FILE) -rf .tmp $(DEL_FILE) -f mydirs.h mainwindow.h distclean: clean maintainer-clean: clean $(DEL_FILE) -f Makefile $(DEL_FILE) -f Makefile.in $(DEL_FILE) -f $(name).pro mydirs.h: Makefile echo '#ifdef WIN32' >$@ echo '#define MENCODER "mencoder.exe"' >>$@ echo '#define XJREMOTE "xjremote.bat"' >>$@ echo '#define XJINFO "xjinfo.exe"' >>$@ echo '#define BINDIR ""' >>$@ echo '#define CONFIG_PREFIX ""' >>$@ echo '#else' >>$@ echo '#define MENCODER "mencoder"' >>$@ echo '#define XJREMOTE "xjremote"' >>$@ echo '#define XJINFO "xjinfo"' >>$@ echo '#define BINDIR "$(bindir)/"' >>$@ echo '#define CONFIG_PREFIX "$(datadir)/qjadeo/locale"' >>$@ echo '#endif' >>$@ xjadeo-0.8.10/src/qt-gui/qjadeo.pro.in0000644000175000017500000000113612620454615014370 00000000000000TEMPLATE = app LANGUAGE = C++ TARGET = qjadeo CONFIG += qt warn_on release CONFIG += qtestlib RESOURCES += qjadeo.qrc HEADERS += qjadeo.h prefdialog.h importdialog.h importprogress.h SOURCES += qjadeo.cpp prefdialog.cpp importdialog.cpp importprogress.cpp FORMS = mainwindow.ui prefdialog.ui importdialog.ui importprogress.ui #QMAKE_CXXFLAGS_WARN_ON += -Wno-non-virtual-dtor QMAKE_LFLAGS += $(LDFLAGS) QMAKE_CXXFLAGS += $(CPPFLAGS) TRANSLATIONS = qjadeo_fr.ts qjadeo_ru.ts qjadeo_cs.ts DEFINES += QT_NO_DEBUG_OUTPUT #win32-x-g++:DEFINES += QT_NO_DEBUG_OUTPUT win32-x-g++:RC_FILE = qjadeo.rc xjadeo-0.8.10/src/qt-gui/importprogress.cpp0000644000175000017500000001004712620454615015602 00000000000000#include #include #include #include #include "qjadeo.h" #include "importprogress.h" ImportProgress::ImportProgress(QWidget* parent): QDialog(parent) { setupUi(this); retranslateUi(this); } void ImportProgress::ImportCancel() { encoder.terminate(); QTimer::singleShot(5000, &encoder, SLOT(kill())); //TODO: unlink file ?? close(); } int ImportProgress::mencode(QString commandpath) { QStringList argv; argv.append("-idx"); argv.append("-ovc"); argv.append("lavc"); argv.append("-lavcopts"); argv.append("vcodec="+enc_codec); if (!enc_fps.isEmpty()) { argv.append("-ofps"); argv.append(enc_fps); // qDebug("MENCODER OPTION: -ofps "+enc_fps); } argv.append("-nosound"); if (enc_w > 0 && enc_h == 0) { QString Temp; argv.append("-vf"); argv.append("scale"); argv.append("-zoom"); argv.append("-xy"); Temp.sprintf("%i",enc_w); argv.append(Temp); } else if (enc_w > 0 && enc_h > 0) { QString Temp; argv.append("-vf"); Temp.sprintf("scale=%i:%i",enc_w,enc_h); argv.append(Temp); // qDebug("MENCODER OPTION: -vf "+Temp); } { // split enc_xargs by space and add as arguments QStringList xargs = enc_xargs.simplified().split(" ",QString::SkipEmptyParts); for ( QStringList::Iterator it = xargs.begin(); it != xargs.end(); ++it ) { argv.append(*it); //qDebug("XOPTION: "+ *it); } } argv.append("-o"); argv.append(enc_dst); argv.append(enc_src); //encoder.setCommunication ( QProcess::Stdout|QProcess::Stderr ); //qDebug(argv.join(" ").toAscii().data()); encoder.start(commandpath, argv); if(!encoder.waitForStarted()) { QMessageBox::QMessageBox::warning( this, "Import Error","Could not launch encoder.","OK", QString::null, QString::null, 0, -1); return(1); } else { connect(&encoder, SIGNAL(readyReadStandardOutput ()), this, SLOT(readFromStdout())); connect(&encoder, SIGNAL(readyReadStandardError()), this, SLOT(readFromStderr())); connect(&encoder, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(encodeFinished(int, QProcess::ExitStatus))); return(0); } } void ImportProgress::readFromStderr() { //qDebug("mencoder:"+ encoder.readStderr()); encoder.setReadChannel(QProcess::StandardError); while(encoder.canReadLine()) { QString msg = encoder.readLine(); //qDebug(msg.toAscii().data()); } } void ImportProgress::readFromStdout() { encoder.setReadChannel(QProcess::StandardOutput); QString response = encoder.readLine(); QString output_text = response.simplified(); ushort indx = output_text.indexOf( '%'); indx = output_text.mid( indx - 2, 2 ).toInt(); if( indx > 99) indx = 100; importProgressBar->setRange(0,100 ); // XXX importProgressBar->setValue( indx ); } void ImportProgress::encodeFinished(int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/) { if (encoder.exitStatus() != 0) { QMessageBox::QMessageBox::warning(this, "Import failed", "Transcode failed.","mmh.",QString::null,QString::null,0,-1); } else if ( QMessageBox::QMessageBox::information(this, "Import Finished", "Transcoding video file completed.","OK", "Open it", QString::null, 0, 0) == 1 ) { QJadeo *qj = (QJadeo*) parent(); qj->fileLoad(enc_dst); } close(); } int ImportProgress::setEncoderFiles( QString src, QString dst ) { if (!QFile::exists(src)) { QMessageBox::QMessageBox::warning(this, "Import Error","Source file does not exist","OK", QString::null, QString::null, 0, -1); return(1); } QFileInfo qfi = QFileInfo(dst); if ( qfi.exists() && QMessageBox::question(this, "Overwrite File?", "File exists. Do you want to overwrite it?", "&Yes", "&No", QString::null, 1, 1 ) ) return (1); QDir d( qfi.path() ); if (!d.exists()) d.mkpath(qfi.path()); enc_src=src; enc_dst=dst; return(0); } void ImportProgress::setEncoderArgs( QString codec, QString fps, int w, int h ) { enc_fps=fps; enc_codec=codec; enc_w=w; enc_h=h; } void ImportProgress::setExtraArgs( QString args ) { enc_xargs=args; } /* vi:set ts=8 sts=2 sw=2: */ xjadeo-0.8.10/src/qt-gui/qjadeo_el_GR.ts0000644000175000017500000002721412620454615014666 00000000000000 ImportDialog Import - Convert Video File Εισαγωγή - Μετατροπή αρχείου Video File Αρχείο Video Source: Πηγή: File Info: Πληροφορίες αρχείου: Destination: Προορισμός: Encoder Settings Παράμετροι κωδικοποιητή Width: Πλάτος: Scale Κλίμακα Height: Ύψος: Break Aspect Ratio Διακοπή αναλογίας FPS: FPS: 24 24 25 25 29.97 29.97 30 30 Resample Αναδειγματοληψία extra mencoder options επιπλέον επιλογές mencoder &Cancel &Ακύρωση &OK &OK select video file to convert choose a destinaton filename ImportProgress Transcoding Video File Επανακωδικοποιήση video Cancel Ακύρωση MainWindow qjadeo qjadeo screen updates per sec. Ανανέωση ανά δευτερόλεπτο: time offset in video-frames: Διαφορά χρόνου σε καρέ: &File &Αρχείο &Sync &Συγχρονισμός &Zoom &Μεγέθυνση &OSD &OSD &Seek &Seek &Help &Βοήθεια Open Άνοιγμα &Open... &Άνοιγμα... Ctrl+O Ctrl+O Exit Έξοδος &Close xjadeo and Exit &Κλείσιμο xjadeo και έξοδος About Περί &About &Περί ActionGroup ActionGroup Sync Sync JACK Transport Μεταφορά JACK MTC (ALSA SEQ) MTC (ALSA SEQ) MTC (JACK MIDI) MTC (JACK MIDI) off απενεργοποίηση off (slider) Απενεργοποίηση (slider) Zoom Zoom 50% 50% 100% 100% 200% 200% Maximize Μεγιστοποίηση Frame number Αριθμός καρέ Box Περίμετρος SMPTE SMPTE Font... Γραμματοσειρά... Import Εισαγωγή &Import &Εισαγωγή Convert video files. Μετατροπή αρχείων. Configure qjadeo Ρύθμιση qjadeo &Configure qjadeo &Ρύθμιση qjadeo Disconnect Αποσύνδεση Disconnect and &Exit Αποσύνδεση και &Έξοδος to any frame σε οποιοδήποτε καρέ keyframes only μόνο καίρια καρέ continuously continuellement Ctrl+Q Filename Ctrl+W Letterbox Resize to aspect-ratio LTC (JACK) PrefDialog Preferences Προτιμήσεις General Settings Γενικές Ρυθμίσεις Autoconnect ALSA Midi port (MTC): Αυτόματη επανεσύνδεση ALSA Midi (MTC): Autoconnect JACK Midi port (MTC): Αυτόματη επανεσύνδεση JACK Midi (MTC): xjadeo/xjremote executable: Εκτελέσιμο xjadeo/xjremote: xjinfo executable: Εκτελέσιμο xjinfo: mencoder executable: Εκτελέσιμο mencoder: Import Settings Παράμετροι Εισαγωγής Import to Codec: Κωδικοποιητής: mpeg4 mpeg4 mjpeg mjpeg msmpeg4 msmpeg4 mpeg1video mpeg1video mpeg2video mpeg2video mencoder options: Επιλογές mencoder: Default Import Destination Path: Προεπιλεγμένος προορισμός για εισαγωγόμενα αρχεία: &Cancel &Ακύρωση &OK &OK Select default destination folder QJadeo &%1 %2 Choose video file Choose a font xjadeo-0.8.10/src/qt-gui/qjadeo_cs.ts0000644000175000017500000004113412620454615014300 00000000000000 ImportDialog Import - Convert Video File Zavedení - Převést videosoubor Video File Videosoubor Source: Zdroj: File Info: Informace o souboru: Destination: Cíl: Encoder Settings Nastavení kodéru Width: Šířka: Scale Měřítko Height: Výška: Break Aspect Ratio Rozbít poměr stran FPS: FPS: 24 24 25 25 29.97 29,97 30 30 Resample Převzorkovat extra mencoder options Další volby pro mencoder &Cancel &Zrušit &OK &OK select video file to convert Vybrat videosoubor k převedení choose a destinaton filename Vybrat cílový název souboru ImportProgress Transcoding Video File Překódování videosouboru Cancel Zrušit MainWindow qjadeo qjadeo screen updates per sec. Obnovení obrazovky za sekundu. time offset in video-frames: Časový posun ve snímcích videa: &File &Soubor &Sync S&eřízení &Zoom &Zvětšení &OSD Zo&brazení &Seek &Hledání &Help &Nápověda &Open... &Otevřít... Open Otevřít Ctrl+O Ctrl+O &Close xjadeo and Exit &Zavřít xjadeo a ukončit Exit Ukončit Ctrl+Q Ctrl+Q &About &O programu About O programu Frame number Číslo snímku SMPTE SMPTE Filename Název souboru Box Box Font... Písmo... &Import &Zavést Import Zavést Convert video files. Převést videosoubory. &Configure qjadeo &Nastavit qjadeo Configure qjadeo Nastavit qjadeo Disconnect and &Exit Odpojit a &ukončit Disconnect Odpojit Ctrl+W Ctrl+W Letterbox Širokoúhlý formát Resize to aspect-ratio Změnit velikost na poměr stran to any frame k jakémukoli snímku keyframes only pouze klíčové snímky continuously spojitě JACK Transport Transport JACK LTC (JACK) LTC (JACK) MTC (JACK MIDI) MTC (JACK MIDI) MTC (ALSA SEQ) MTC (ALSA SEQ) off (slider) Vypnuto (posuvník) off Vypnuto 50% 50% 100% 100% 200% 200% Maximize Zvětšit PrefDialog Preferences Nastavení General Settings Obecná nastavení Autoconnect ALSA Midi port (MTC): Automaticky spojit přípojku MIDI ALSA (MTC): Autoconnect JACK Midi port (MTC): Automaticky spojit přípojku MIDI JACK (MTC): xjadeo/xjremote executable: Spustitelný soubor xjadeo/xjremote: xjinfo executable: Spustitelný soubor xjinfo: mencoder executable: Spustitelný soubor mencoder: Import Settings Nastavení zavedení Import to Codec: Zavést ke kodeku: mpeg4 mpeg4 mjpeg mjpeg msmpeg4 msmpeg4 mpeg1video mpeg1video mpeg2video mpeg2video mencoder options: Volby pro mencoder: Default Import Destination Path: Výchozí cílová cesta pro zavedení: &Cancel &Zrušit &OK &OK Select default destination folder Vybrat výchozí cílovou složku QJadeo &%1 %2 &%1 %2 Choose video file Vybrat videosoubor Choose a font Vybrat písmo xjadeo-0.8.10/src/qt-gui/importprogress.h0000644000175000017500000000131712620454615015247 00000000000000#ifndef IMPORTPROGRESS_H #define IMPORTPROGRESS_H #include #include "ui_importprogress.h" class ImportProgress: public QDialog , public Ui::ImportProgress { Q_OBJECT public: ImportProgress(QWidget *parent = 0); public slots: int mencode(QString commandpath); int setEncoderFiles( QString src, QString dst); void setEncoderArgs( QString codec, QString fps, int w, int h ); void setExtraArgs( QString args ); void ImportCancel(); void readFromStderr(); void readFromStdout(); void encodeFinished(int, QProcess::ExitStatus); private: QProcess encoder; QString enc_codec; QString enc_xargs; QString enc_fps; int enc_w, enc_h; QString enc_dst; QString enc_src; }; #endif xjadeo-0.8.10/src/qt-gui/importdialog.h0000644000175000017500000000105012620454615014634 00000000000000#ifndef IMPORTDIALOG_H #define IMPORTDIALOG_H #include #include "ui_importdialog.h" class ImportDialog: public QDialog , public Ui::ImportDialog { Q_OBJECT public: ImportDialog(QWidget *parent = 0); QString xjinfo; QString dstDir; public slots: void importSrcSelect(); void importDstSelect(); void widthCheckBox_toggled( bool t); void fpsCheckBox_toggled( bool t ); void aspectCheckBox_toggled( bool t); void readFromStdout(); void importAvInfo(); void infoFinished(); private: QProcess *infoproc; }; #endif xjadeo-0.8.10/src/qt-gui/qjadeo_fr.ts0000644000175000017500000002564013036440273014303 00000000000000 ImportDialog Import - Convert Video File Importer - convertir un fichier vidéo Video File Fichier vidéo Source: Source : File Info: Info sur le fichier : Destination: Destination : Encoder Settings Paramètres de l'encodeur Width: Largeur : Scale Échelle Height: Hauteur : Break Aspect Ratio Casser le ratio d'aspect FPS: FPS : 24 24 25 25 29.97 29.97 30 30 Resample Ré-échantillonner extra mencoder options options supplémentaires mencoder &Cancel &Annuler &OK &OK select video file to convert choisir le fichier vidéo à convertir choose a destinaton filename choisir un nom de fichier de destination ImportProgress Transcoding Video File Transcodage du fichier vidéo Cancel Annuler MainWindow qjadeo qjadeo screen updates per sec. rafraîchissements de l'écran par sec. time offset in video-frames: décalage temporel dans les trames vidéo : &File &Fichier &Sync &Syncro &Zoom &Zoom &OSD &Affichage &Seek &Suivre &Help &Aide Open Ouvrir &Open... &Ouvrir... Ctrl+O Ctrl+O Exit Quitter &Close xjadeo and Exit &Fermer xjadeo et quitter About À propos &About &À propos JACK Transport Transport JACK MTC (ALSA SEQ) MTC (ALSA SEQ) MTC (JACK MIDI) MTC (JACK MIDI) off éteinte off (slider) éteinte (glissière) 50% 50% 100% 100% 200% 200% Maximize Maximiser Frame number Numéro de trame Box Cadre SMPTE SMPTE Font... Police... Import Importer &Import &Importer Convert video files. Converti des fichiers vidéo. Configure qjadeo Configurer qjadeo &Configure qjadeo &Configurer qjadeo Disconnect Déconnecter Disconnect and &Exit Déconnecter et &quitter to any frame à n'importe quelle trame keyframes only seulement aux images clef continuously continuellement Ctrl+Q Ctrl+Q Filename Nom de fichier Ctrl+W Ctrl+W Letterbox Boîte aux lettres Resize to aspect-ratio Redimensionner au ratio d'aspect LTC (JACK) LTC (JACK) PrefDialog Preferences Préférences General Settings Paramètres généraux Autoconnect ALSA Midi port (MTC): Se connecter automatiquement au port ALSA Midi (MTC) : Autoconnect JACK Midi port (MTC): Se connecter automatiquement au port JACK Midi (MTC) : xjadeo/xjremote executable: Exécutable xjadeo/xjremote : xjinfo executable: Exécutable xjinfo : mencoder executable: Exécutable mencoder : Import Settings Paramètres d'importation Import to Codec: Importer vers le codec : mpeg4 mpeg4 mjpeg mjpeg msmpeg4 msmpeg4 mpeg1video mpeg1video mpeg2video mpeg2video mencoder options: Options de mencoder : Default Import Destination Path: Chemin de destination par défaut : &Cancel &Annuler &OK &OK Select default destination folder Choisir le dossier de destination par défaut QJadeo &%1 %2 &%1 %2 Choose video file Choisir le fichier vidéo Choose a font Choisir une police xjadeo-0.8.10/src/qt-gui/prefdialog.h0000644000175000017500000000043012620454615014257 00000000000000#ifndef PREFDIALOG_H #define PREFDIALOG_H #include "ui_prefdialog.h" class PrefDialog: public QDialog , public Ui::PrefDialog { Q_OBJECT public: PrefDialog(QWidget *parent = 0); ~PrefDialog(); private slots: void selPrefsDest(); void prefDirEnable( bool t); }; #endif xjadeo-0.8.10/src/qt-gui/importdialog.cpp0000644000175000017500000000435712620454615015204 00000000000000#include #include #include #include #include #include "importdialog.h" ImportDialog::ImportDialog(QWidget* parent): QDialog(parent) { setupUi(this); retranslateUi(this); } void ImportDialog::importSrcSelect() { QString s = QFileDialog::getOpenFileName(this, tr("select video file to convert")); if(!s.isNull()) { SourceLineEdit->setText(s); if (DestLineEdit->text().isEmpty()) { QFileInfo qfi = QFileInfo(s); QString dstfolder; if (dstDir.isEmpty()) dstfolder = qfi.path(); else dstfolder = dstDir; DestLineEdit->setText(dstfolder+"/"+qfi.baseName()+"-xj.avi"); } } } void ImportDialog::importDstSelect() { QString s = QFileDialog::getSaveFileName(this, tr("choose a destinaton filename")); if(!s.isNull()) { DestLineEdit->setText(s); } } void ImportDialog::widthCheckBox_toggled( bool t) { widthSpinBox->setEnabled(t); if (!t)heightSpinBox->setEnabled(t); else if (aspectCheckBox->isChecked()) heightSpinBox->setEnabled(t); aspectCheckBox->setEnabled(t); } void ImportDialog::fpsCheckBox_toggled( bool t ) { fpsComboBox->setEnabled(t); } void ImportDialog::aspectCheckBox_toggled( bool t) { heightSpinBox->setEnabled(t); } void ImportDialog::readFromStdout() { avInfoLabel->setText( infoproc->readLine()); } void ImportDialog::importAvInfo() { infoproc = new QProcess( this ); QStringList argv; argv.append( "-v" ); argv.append( SourceLineEdit->text() ); infoproc->closeReadChannel(QProcess::StandardError); infoproc->setReadChannel(QProcess::StandardOutput); connect( infoproc, SIGNAL(readyReadStandardOutput ()), this, SLOT(readFromStdout()) ); connect( infoproc, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(infoFinished())); infoproc->start(xjinfo, argv); if (!infoproc->waitForStarted()) { QMessageBox::warning( 0, "Warning", "Could not start the xjinfo command.", "OK" ); } } void ImportDialog::infoFinished() { if (infoproc->exitStatus() != 0) { avInfoLabel->setText(" "); QMessageBox::QMessageBox::warning(this, "xjinfo failed", "Error occured while detecting file informtaion.","aha.",QString::null,QString::null,0,-1); } } /* vi:set ts=8 sts=2 sw=2: */ xjadeo-0.8.10/src/qt-gui/mainwindow.ui0000644000175000017500000005615012620454615014517 00000000000000 MainWindow 0 0 400 120 qjadeo :/images/qjadeo.png:/images/qjadeo.png 2 2 screen updates per sec. false 1 99 10 Qt::Horizontal QSizePolicy::Expanding 125 20 time offset in video-frames: false -999999999 999999999 0 Qt::Horizontal QSizePolicy::Expanding 2 6 5 0 0 4 32767 10 1000 false Qt::Horizontal QSizePolicy::Expanding 3 6 0 false 5 0 32767 14 1000 Qt::Horizontal Qt::Horizontal QSizePolicy::Expanding 1 6 0 0 400 20 &File &Sync &Zoom &OSD &Help &Open... Open Ctrl+O fileOpenAction &Close xjadeo and Exit Exit Ctrl+Q fileExitAction &About About helpAboutAction true Frame number Frame number osdFrameAction true SMPTE SMPTE osdSMPTEAction true Filename Filename osdTextAction true Box Box osdBoxAction Font... Font... osdFontAction &Import Import Convert video files. fileImportAction &Configure qjadeo Configure qjadeo filePreferencesAction Disconnect and &Exit Disconnect Ctrl+W fileDisconnectAction true Letterbox Resize to aspect-ratio true JACK Transport JACK Transport syncJackAction true LTC (JACK) LTC (JACK) syncLTCJackAction true MTC (JACK MIDI) MTC (JACK MIDI) syncMTCJackAction true MTC (ALSA SEQ) MTC (ALSA SEQ) syncMTCAlsaAction true off (slider) off syncOffAction syncAction 50% 50% zoom50Action 100% 100% zoom100Action 200% 200% zoom200Action Maximize Maximize zoomFullScreenAction zoomAction qPixmapFromMimeSource fileOpenAction activated() MainWindow fileOpen() -1 -1 20 20 fileExitAction activated() MainWindow fileExit() -1 -1 20 20 helpAboutAction activated() MainWindow helpAbout() -1 -1 20 20 zoom50Action activated() MainWindow zoom50() -1 -1 20 20 zoom100Action activated() MainWindow zoom100() -1 -1 20 20 zoom200Action activated() MainWindow zoom200() -1 -1 20 20 zoomFullScreenAction activated() MainWindow zoomFullScreen() -1 -1 20 20 actionResize_to_aspect_ratio activated() MainWindow zoomAspect() -1 -1 20 20 actionLetterbox toggled(bool) MainWindow zoomLetterbox(bool) -1 -1 20 20 syncOffAction activated() MainWindow syncOff() -1 -1 20 20 syncLTCJackAction activated() MainWindow syncLTCJack() -1 -1 20 20 syncMTCAlsaAction activated() MainWindow syncMTCalsa() -1 -1 20 20 syncMTCJackAction activated() MainWindow syncMTCjack() -1 -1 20 20 syncJackAction activated() MainWindow syncJack() -1 -1 20 20 offsetSpinBox valueChanged(QString) MainWindow setOffset(QString) 20 20 20 20 fpsSpinBox valueChanged(QString) MainWindow setFPS(QString) 20 20 20 20 osdTextAction toggled(bool) MainWindow osdTextToggled(bool) -1 -1 20 20 osdBoxAction toggled(bool) MainWindow osdBoxToggled(bool) -1 -1 20 20 osdSMPTEAction toggled(bool) MainWindow osdSMPTEToggled(bool) -1 -1 20 20 osdFrameAction toggled(bool) MainWindow osdFrameToggled(bool) -1 -1 20 20 osdFontAction activated() MainWindow osdFont() -1 -1 20 20 seekBar valueChanged(int) MainWindow seekBarChanged(int) 20 20 20 20 filePreferencesAction activated() MainWindow filePreferences() -1 -1 20 20 fileDisconnectAction activated() MainWindow fileDisconnect() -1 -1 20 20 fileImportAction activated() MainWindow fileImport() -1 -1 20 20 xjadeo-0.8.10/src/qt-gui/qjadeo.rc0000644000175000017500000000007412620454615013567 00000000000000IDI_ICON1 ICON DISCARDABLE "images/qjadeo.ico" xjadeo-0.8.10/src/qt-gui/qjadeo.qrc0000644000175000017500000000011512620454615013744 00000000000000 images/qjadeo.png xjadeo-0.8.10/src/qt-gui/importprogress.ui0000644000175000017500000000321312620454615015432 00000000000000 ImportProgress 0 0 347 54 Transcoding Video File 100 0 0 0 Cancel qPixmapFromMimeSource ImportCancelButton ImportCancelButton clicked() ImportProgress ImportCancel() 20 20 20 20 xjadeo-0.8.10/src/qt-gui/Makefile.in0000644000175000017500000003503113775353051014050 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ 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@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/qt-gui 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 = qjadeo.pro 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 $(srcdir)/qjadeo.pro.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMLIB2_CFLAGS = @IMLIB2_CFLAGS@ IMLIB2_LIBS = @IMLIB2_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JACK_CFLAGS = @JACK_CFLAGS@ JACK_LIBS = @JACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBLO_CFLAGS = @LIBLO_CFLAGS@ LIBLO_LIBS = @LIBLO_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTC_CFLAGS = @LTC_CFLAGS@ LTC_LIBS = @LTC_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MIDI_CFLAGS = @MIDI_CFLAGS@ MIDI_LIBS = @MIDI_LIBS@ MKDIR_P = @MKDIR_P@ MQ_LIBS = @MQ_LIBS@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ 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@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ XPM_CFLAGS = @XPM_CFLAGS@ XPM_LIBS = @XPM_LIBS@ XV_CFLAGS = @XV_CFLAGS@ XV_LIBS = @XV_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_contrib_dir = @ac_contrib_dir@ ac_ct_CC = @ac_ct_CC@ ac_ct_OBJC = @ac_ct_OBJC@ ac_lrelease = @ac_lrelease@ ac_qmake = @ac_qmake@ ac_qmake_args = @ac_qmake_args@ ac_qtgui_dir = @ac_qtgui_dir@ 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@ 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@ 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@ # quick hack - else make dist won't include these files. EXTRA_DIST = qjadeo.cpp qjadeo.pro.in mainwindow.ui qjadeo.h\ images/qjadeo.png images/qjadeo.ico\ importdialog.ui prefdialog.ui importprogress.ui \ importdialog.h importprogress.h prefdialog.h \ importdialog.cpp importprogress.cpp prefdialog.cpp \ qjadeo_fr.ts qjadeo_ru.ts qjadeo_el_GR.ts qjadeo_cs.ts \ Makefile.am qjadeo.qrc qjadeo.rc qmake = @ac_qmake@ lrelease = @ac_lrelease@ qmakeargs = @ac_qmake_args@ COPY = /bin/cp DEL_FILE = /bin/rm MKDIR = /bin/mkdir name = qjadeo headers = qjadeo.h \ importdialog.h importprogress.h prefdialog.h sources = qjadeo.cpp \ mainwindow.ui \ importdialog.cpp importprogress.cpp prefdialog.cpp \ importdialog.ui prefdialog.ui importprogress.ui TRANSLATIONS = qjadeo_fr.ts qjadeo_ru.ts qjadeo_el_GR.ts qjadeo_cs.ts all: all-am .SUFFIXES: $(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 src/qt-gui/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/qt-gui/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ 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): qjadeo.pro: $(top_builddir)/config.status $(srcdir)/qjadeo.pro.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @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; \ 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 -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install-exec: install-exec-am install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: 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: -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-am: clean-generic mostlyclean-am distclean-am: clean-am distclean-generic dvi: dvi-am 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-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am 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 all: $(name) $(name).mak: $(name).pro $(qmake) -o $(name).mak $(name).pro $(qmakeargs) $(lrelease) $(TRANSLATIONS) $(name): $(name).mak $(sources) $(headers) mydirs.h $(MAKE) -f $(name).mak install: $(name) $(INSTALL) $(name) $(DESTDIR)/$(bindir)/ mkdir -p $(DESTDIR)/$(datadir)/qjadeo/locale/ $(INSTALL) -m 644 -t $(DESTDIR)/$(datadir)/qjadeo/locale/ $(subst .ts,.qm,$(TRANSLATIONS)) uninstall: $(DESTDIR)/$(bindir)/$(name) $(DEL_FILE) -vf $(DESTDIR)/$(bindir)/$(name) cd $(DESTDIR)/$(datadir)/qjadeo/locale/ && $(DEL_FILE) -vf *.qm rmdir $(DESTDIR)/$(datadir)/qjadeo/locale/ .PHONY: clean clean: $(name).mak $(MAKE) -f $(name).mak clean if test -d qt3; then \ $(COPY) -f qt3/* .; \ $(DEL_FILE) -rf qt3; \ fi $(DEL_FILE) -f $(name) $(name).mak $(DEL_FILE) -rf *.cache *.log *.status $(DEL_FILE) -rf .ui $(DEL_FILE) -rf .obj $(DEL_FILE) -rf .moc $(DEL_FILE) -f portinglog.txt $(DEL_FILE) -rf .tmp $(DEL_FILE) -f mydirs.h mainwindow.h distclean: clean maintainer-clean: clean $(DEL_FILE) -f Makefile $(DEL_FILE) -f Makefile.in $(DEL_FILE) -f $(name).pro mydirs.h: Makefile echo '#ifdef WIN32' >$@ echo '#define MENCODER "mencoder.exe"' >>$@ echo '#define XJREMOTE "xjremote.bat"' >>$@ echo '#define XJINFO "xjinfo.exe"' >>$@ echo '#define BINDIR ""' >>$@ echo '#define CONFIG_PREFIX ""' >>$@ echo '#else' >>$@ echo '#define MENCODER "mencoder"' >>$@ echo '#define XJREMOTE "xjremote"' >>$@ echo '#define XJINFO "xjinfo"' >>$@ echo '#define BINDIR "$(bindir)/"' >>$@ echo '#define CONFIG_PREFIX "$(datadir)/qjadeo/locale"' >>$@ echo '#endif' >>$@ # 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: xjadeo-0.8.10/src/Makefile.in0000644000175000017500000004500013775353051012637 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ 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@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src 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 = 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 distdir-am 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 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@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMLIB2_CFLAGS = @IMLIB2_CFLAGS@ IMLIB2_LIBS = @IMLIB2_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JACK_CFLAGS = @JACK_CFLAGS@ JACK_LIBS = @JACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBLO_CFLAGS = @LIBLO_CFLAGS@ LIBLO_LIBS = @LIBLO_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTC_CFLAGS = @LTC_CFLAGS@ LTC_LIBS = @LTC_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MIDI_CFLAGS = @MIDI_CFLAGS@ MIDI_LIBS = @MIDI_LIBS@ MKDIR_P = @MKDIR_P@ MQ_LIBS = @MQ_LIBS@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ 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@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ XPM_CFLAGS = @XPM_CFLAGS@ XPM_LIBS = @XPM_LIBS@ XV_CFLAGS = @XV_CFLAGS@ XV_LIBS = @XV_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_contrib_dir = @ac_contrib_dir@ ac_ct_CC = @ac_ct_CC@ ac_ct_OBJC = @ac_ct_OBJC@ ac_lrelease = @ac_lrelease@ ac_qmake = @ac_qmake@ ac_qmake_args = @ac_qmake_args@ ac_qtgui_dir = @ac_qtgui_dir@ 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@ 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@ 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 = xjadeo @ac_qtgui_dir@ MAINTAINERCLEANFILES = Makefile.in all: all-recursive .SUFFIXES: $(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 src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ 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): # 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. $(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//`; \ 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; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ 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 || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(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) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(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 distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @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; \ 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 -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(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="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: 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: -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." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive 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-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 -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean 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 installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # 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: xjadeo-0.8.10/Makefile.in0000644000175000017500000007300313775353051012054 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ 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@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ 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) $(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 = xjadeo.lsm 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 = 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 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; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) 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 distdir-am 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 \ $(srcdir)/xjadeo.lsm.in AUTHORS COPYING ChangeLog INSTALL NEWS \ README compile config.guess 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@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ FREETYPE_CONFIG = @FREETYPE_CONFIG@ FREETYPE_LIBS = @FREETYPE_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMLIB2_CFLAGS = @IMLIB2_CFLAGS@ IMLIB2_LIBS = @IMLIB2_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JACK_CFLAGS = @JACK_CFLAGS@ JACK_LIBS = @JACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBLO_CFLAGS = @LIBLO_CFLAGS@ LIBLO_LIBS = @LIBLO_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTC_CFLAGS = @LTC_CFLAGS@ LTC_LIBS = @LTC_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MIDI_CFLAGS = @MIDI_CFLAGS@ MIDI_LIBS = @MIDI_LIBS@ MKDIR_P = @MKDIR_P@ MQ_LIBS = @MQ_LIBS@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ 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@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ XPM_CFLAGS = @XPM_CFLAGS@ XPM_LIBS = @XPM_LIBS@ XV_CFLAGS = @XV_CFLAGS@ XV_LIBS = @XV_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_contrib_dir = @ac_contrib_dir@ ac_ct_CC = @ac_ct_CC@ ac_ct_OBJC = @ac_ct_OBJC@ ac_lrelease = @ac_lrelease@ ac_qmake = @ac_qmake@ ac_qmake_args = @ac_qmake_args@ ac_qtgui_dir = @ac_qtgui_dir@ 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@ 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@ 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@ AC_AUX_DIR = m4 AC_MACRO_DIR = m4 SUBDIRS = src @ac_contrib_dir@ man_MANS = doc/xjadeo.1 doc/xjremote.1 EXTRA_DIST = \ xjadeo.lsm.in \ doc/xjadeorc \ doc/Makefile doc/xjadeo.1 doc/xjremote.1 \ \ src/xjadeo/icons/osd_bitmaps.h \ src/xjadeo/icons/brightness.bitmap src/xjadeo/icons/brightness_mask.xbm \ src/xjadeo/icons/contrast.bitmap src/xjadeo/icons/contrast_mask.xbm \ src/xjadeo/icons/gamma.bitmap src/xjadeo/icons/gamma_mask.xbm \ src/xjadeo/icons/hue.bitmap src/xjadeo/icons/hue_mask.xbm \ src/xjadeo/icons/saturation.bitmap src/xjadeo/icons/saturation_mask.xbm \ \ src/xjadeo/icons/xjadeo8.ico src/xjadeo/icons/xjadeo8_ico.h \ src/xjadeo/icons/xjadeoH.ico src/xjadeo/icons/xjadeoH.h \ src/xjadeo/icons/xjadeo8.xpm src/xjadeo/icons/xjadeoH128.png \ src/xjadeo/icons/xjadeo_win.ico \ src/xjadeo/fonts/ArdourMono.ttf \ \ contrib/cli-remote/jadeo.c \ contrib/cli-remote/Makefile.am \ contrib/cli-remote/README \ \ contrib/xjadeo-example.mp4 MAINTAINERCLEANFILES = \ Makefile.in \ aclocal.m4 \ compile \ config.guess \ config.h.in \ config.sub \ configure \ depcomp \ install-sh \ Makefile.in \ missing 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__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(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 @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: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 xjadeo.lsm: $(top_builddir)/config.status $(srcdir)/xjadeo.lsm.in cd $(top_builddir) && $(SHELL) ./config.status $@ 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) # 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. $(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//`; \ 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; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ 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 || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(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) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(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 -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) 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; \ 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 -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(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="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -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 $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_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) | eval GZIP= gzip $(GZIP_ENV) -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 case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -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*) \ eval GZIP= gzip $(GZIP_ENV) -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-$$$$/" \ && 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 \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (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 \ && 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: @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)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(MANS) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: 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: -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." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive 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: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-man 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-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-man1 \ 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-generic pdf pdf-am ps ps-am tags \ tags-am uninstall uninstall-am uninstall-man uninstall-man1 .PRECIOUS: Makefile # 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: xjadeo-0.8.10/install-sh0000755000175000017500000003601013544141530011777 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2018-03-11.20; # 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. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # 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 # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # 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= 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 # 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 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 fi 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 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 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 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. 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 dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac 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. ;; *) # Note that $RANDOM variable is not portable (e.g. dash); Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p' feature. 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 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=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_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 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: