diff options
Diffstat (limited to 'community-testing')
-rw-r--r-- | community-testing/dbmail/PKGBUILD | 51 | ||||
-rw-r--r-- | community-testing/dbmail/dbmail-2.2.10-pam-support.patch | 251 | ||||
-rw-r--r-- | community-testing/dbmail/dbmail.conf.d | 9 | ||||
-rw-r--r-- | community-testing/dbmail/dbmail.rc.d | 41 | ||||
-rw-r--r-- | community-testing/libzdb/PKGBUILD | 21 | ||||
-rw-r--r-- | community-testing/lilypond/PKGBUILD | 43 | ||||
-rw-r--r-- | community-testing/lilypond/lilypond.install | 48 | ||||
-rw-r--r-- | community-testing/lilypond/texlive-workaround.patch | 88 |
8 files changed, 552 insertions, 0 deletions
diff --git a/community-testing/dbmail/PKGBUILD b/community-testing/dbmail/PKGBUILD new file mode 100644 index 000000000..e7fd4b3ad --- /dev/null +++ b/community-testing/dbmail/PKGBUILD @@ -0,0 +1,51 @@ +# $Id: PKGBUILD 62080 2012-01-15 19:14:39Z spupykin $ +# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com> +# Contributor: Sebastian Faltoni <sebastian.faltoni@gmail.com> + +pkgname=dbmail +pkgver=3.0.0_rc3 +pkgrel=1 +pkgdesc="Fast and scalable sql based mail services" +arch=('i686' 'x86_64') +depends=('gmime' 'libzdb' 'mhash' 'libevent') +makedepends=('asciidoc' 'xmlto' 'docbook-xsl' 'docbook-xml' 'postgresql-libs>=8.4.1' + 'sqlite3' 'libmysqlclient' 'libldap>=2.4.18' 'libsieve') +optdepends=('postgresql-libs: for PostgreSQL storage backend' + 'sqlite3: for SQLite storage backend' + 'libmysqlclient: for MySQL storage backend' + 'libldap: for LDAP authentication' + 'libsieve: for dbmail-sieve') +url="http://www.dbmail.org" +license=('GPL') +options=('!libtool' 'zipman') +backup=(etc/conf.d/dbmail) +conflicts=('dbmail') +provides=('dbmail') +source=(http://www.dbmail.org/download/3.0/dbmail-${pkgver/_/-}.tar.gz + dbmail.conf.d + dbmail.rc.d) +md5sums=('52c3b9aad310efc90a6a2fff0552f73e' + 'e7f72bc360decdb2475266391ad12329' + '099225611da20ec194c092ac9befc33c') + +build() { + cd $srcdir/dbmail-${pkgver/_/-}/ + + [ -f Makefile ] || ./configure --prefix=/usr \ + --with-mysql --with-pgsql --with-sqlite --with-ldap --with-sieve + make +} + +package() { + cd $srcdir/dbmail-${pkgver/_/-}/ + make DESTDIR=$pkgdir install + (cd man && make && make install DESTDIR=$pkgdir) + + mkdir $pkgdir/etc + install -Dm644 dbmail.conf $pkgdir/etc/dbmail.conf.sample + install -Dm644 ../dbmail.conf.d $pkgdir/etc/conf.d/dbmail + install -Dm755 ../dbmail.rc.d $pkgdir/etc/rc.d/dbmail + mkdir $pkgdir/usr/share/dbmail + cp -r sql/* $pkgdir/usr/share/dbmail/ + cp dbmail.schema $pkgdir/usr/share/dbmail/ +} diff --git a/community-testing/dbmail/dbmail-2.2.10-pam-support.patch b/community-testing/dbmail/dbmail-2.2.10-pam-support.patch new file mode 100644 index 000000000..805a7f609 --- /dev/null +++ b/community-testing/dbmail/dbmail-2.2.10-pam-support.patch @@ -0,0 +1,251 @@ +diff -wbBur dbmail-2.2.10/configure.in dbmail-2.2.10.pam/configure.in +--- dbmail-2.2.10/configure.in 2008-03-24 17:49:33.000000000 +0300 ++++ dbmail-2.2.10.pam/configure.in 2008-09-18 16:43:04.000000000 +0400 +@@ -78,6 +78,13 @@ + + AC_SUBST(CRYPTLIB) + ++dnl Check for PAM ++AC_SUBST(PAMLIBS,"") ++AC_CHECK_HEADERS(security/pam_appl.h, ++ [AC_CHECK_LIB(pam,pam_start, ++ [AC_DEFINE(HAVE_PAM,1,[Define if you have PAN including devel headers]) ++ PAMLIBS="-lpam"],,)]) ++ + AC_SUBST(MYSQLLIB) + AC_SUBST(MYSQLALIB) + AC_SUBST(MYSQLLTLIB) +diff -wbBur dbmail-2.2.10/dbmail-user.c dbmail-2.2.10.pam/dbmail-user.c +--- dbmail-2.2.10/dbmail-user.c 2008-03-24 17:49:33.000000000 +0300 ++++ dbmail-2.2.10.pam/dbmail-user.c 2008-09-18 16:43:04.000000000 +0400 +@@ -157,7 +157,7 @@ + "md5", "md5-raw", "md5sum", "md5sum-raw", + "md5-hash", "md5-hash-raw", "md5-digest", "md5-digest-raw", + "md5-base64", "md5-base64-raw", "md5base64", "md5base64-raw", +- "shadow", "", NULL ++ "shadow", "pam", "", NULL + }; + + /* These must correspond to the easy text names. */ +@@ -166,7 +166,7 @@ + MD5_HASH, MD5_HASH_RAW, MD5_DIGEST, MD5_DIGEST_RAW, + MD5_HASH, MD5_HASH_RAW, MD5_DIGEST, MD5_DIGEST_RAW, + MD5_BASE64, MD5_BASE64_RAW, MD5_BASE64, MD5_BASE64_RAW, +- SHADOW, PLAINTEXT, PWTYPE_NULL ++ SHADOW, PWTYPE_PAM, PLAINTEXT, PWTYPE_NULL + }; + + memset(pw, 0, 50); +@@ -251,6 +251,12 @@ + *enctype = "crypt"; + } + break; ++#ifdef HAVE_PAM ++ case PWTYPE_PAM: ++ null_strncpy(pw, passwd, 49); ++ *enctype = "pam"; ++ break; ++#endif + default: + qerrorf("Error: password type not supported [%s].\n", + passwdtype); +diff -wbBur dbmail-2.2.10/dbmail-user.h dbmail-2.2.10.pam/dbmail-user.h +--- dbmail-2.2.10/dbmail-user.h 2008-03-24 17:49:33.000000000 +0300 ++++ dbmail-2.2.10.pam/dbmail-user.h 2008-09-18 16:43:04.000000000 +0400 +@@ -34,7 +34,7 @@ + typedef enum { + PLAINTEXT = 0, PLAINTEXT_RAW, CRYPT, CRYPT_RAW, + MD5_HASH, MD5_HASH_RAW, MD5_DIGEST, MD5_DIGEST_RAW, +- MD5_BASE64, MD5_BASE64_RAW, SHADOW, PWTYPE_NULL ++ MD5_BASE64, MD5_BASE64_RAW, SHADOW, PWTYPE_PAM, PWTYPE_NULL + } pwtype_t; + + int mkpassword(const char * const user, const char * const passwd, +diff -wbBur dbmail-2.2.10/modules/authsql.c dbmail-2.2.10.pam/modules/authsql.c +--- dbmail-2.2.10/modules/authsql.c 2008-03-24 17:49:33.000000000 +0300 ++++ dbmail-2.2.10.pam/modules/authsql.c 2008-09-18 16:43:04.000000000 +0400 +@@ -27,6 +27,19 @@ + #include "dbmail.h" + #define THIS_MODULE "auth" + ++#ifdef HAVE_PAM ++#include <security/pam_appl.h> ++ ++#ifndef DEFAULT_DBMAIL_PAM_SERVICE ++#define DEFAULT_DBMAIL_PAM_SERVICE "dbmail" ++#endif ++ ++#ifndef DEFAULT_DBMAIL_PAM_TTL ++#define DEFAULT_DBMAIL_PAM_TTL 60 ++#endif ++ ++#endif ++ + extern db_param_t _db_params; + #define DBPFX _db_params.pfx + +@@ -49,17 +62,80 @@ + */ + static int __auth_query(const char *thequery); + ++#ifdef HAVE_PAM ++ ++static char *pam_password = NULL; /* Workaround for Solaris 2.6 brokenness */ ++static pam_handle_t *pamh = NULL; ++static int pam_ttl = DEFAULT_DBMAIL_PAM_TTL; ++static char *pam_service = DEFAULT_DBMAIL_PAM_SERVICE; ++static time_t pamh_created = 0; ++/* ++ * A simple "conversation" function returning the supplied password. ++ * Has a bit to much error control, but this is my first PAM application ++ * so I'd rather check everything than make any mistakes. The function ++ * expects a single converstation message of type PAM_PROMPT_ECHO_OFF. ++ */ ++static int ++password_conversation(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) ++{ ++ if (num_msg != 1 || msg[0]->msg_style != PAM_PROMPT_ECHO_OFF) { ++ TRACE(TRACE_ERROR, "Unexpected PAM converstaion '%d/%s'", msg[0]->msg_style, msg[0]->msg); ++ return PAM_CONV_ERR; ++ } ++ if (!appdata_ptr) { ++ /* Workaround for Solaris 2.6 where the PAM library is broken ++ * and does not pass appdata_ptr to the conversation routine ++ */ ++ appdata_ptr = pam_password; ++ } ++ if (!appdata_ptr) { ++ TRACE(TRACE_ERROR, "ERROR: No password available to password_converstation!"); ++ return PAM_CONV_ERR; ++ } ++ *resp = calloc(num_msg, sizeof(struct pam_response)); ++ if (!*resp) { ++ TRACE(TRACE_ERROR, "Out of memory!"); ++ return PAM_CONV_ERR; ++ } ++ (*resp)[0].resp = strdup((char *) appdata_ptr); ++ (*resp)[0].resp_retcode = 0; ++ ++ return ((*resp)[0].resp ? PAM_SUCCESS : PAM_CONV_ERR); ++} ++ ++static struct pam_conv conv = ++{ ++ &password_conversation, ++ NULL ++}; ++ ++#endif ++ ++ + int auth_connect() + { + /* this function is only called after a connection has been made + * if, in the future this is not the case, db.h should export a + * function that enables checking for the database connection + */ ++#ifdef HAVE_PAM ++ ++#endif + return 0; + } + + int auth_disconnect() + { ++#ifdef HAVE_PAM ++ int retval=PAM_SUCCESS; ++ if (pamh) { ++ retval = pam_end(pamh, retval); ++ if (retval != PAM_SUCCESS) { ++ pamh = NULL; ++ TRACE(TRACE_ERROR, "failed to release PAM authenticator"); ++ } ++ } ++#endif + return 0; + } + +@@ -458,7 +534,71 @@ + is_validated = (strncmp(md5str, query_result, 32) == 0) ? 1 : 0; + g_free(md5str); + } ++#ifdef HAVE_PAM ++ else if (strcasecmp(query_result, "pam") == 0) { ++ int retval=0; ++ TRACE(TRACE_DEBUG, "validating using pam for user [%s] pass:[%s]",real_username,password); ++ conv.appdata_ptr = (char *) password; ++ pam_password= password; ++ if (pam_ttl == 0) { ++ /* Create PAM connection */ ++ retval = pam_start(pam_service, real_username, &conv, &pamh); ++ if (retval != PAM_SUCCESS) { ++ TRACE(TRACE_ERROR, "failed to create PAM authenticator"); ++ goto pam_error; ++ } ++ } else if (!pamh || (time(NULL) - pamh_created) >= pam_ttl || pamh_created > time(NULL)) { ++ /* Close previous PAM connection */ ++ if (pamh) { ++ retval = pam_end(pamh, retval); ++ if (retval != PAM_SUCCESS) { ++ TRACE(TRACE_WARNING, "failed to release PAM authenticator"); ++ } ++ pamh = NULL; ++ } ++ /* Initialize persistent PAM connection */ ++ retval = pam_start(pam_service, "dbmail@", &conv, &pamh); ++ if (retval != PAM_SUCCESS) { ++ TRACE(TRACE_ERROR, "failed to create PAM authenticator"); ++ goto pam_error; ++ } ++ pamh_created = time(NULL); ++ } ++ retval = PAM_SUCCESS; ++ if (pam_ttl != 0) { ++ if (retval == PAM_SUCCESS) ++ retval = pam_set_item(pamh, PAM_USER, real_username); ++ if (retval == PAM_SUCCESS) ++ retval = pam_set_item(pamh, PAM_CONV, &conv); ++ } ++ if (retval == PAM_SUCCESS) ++ retval = pam_authenticate(pamh, 0); ++ if (retval == PAM_SUCCESS ) //&& !no_acct_mgmt ++ retval = pam_acct_mgmt(pamh, 0); ++ if (retval == PAM_SUCCESS) { ++ is_validated=1; ++ } else { ++pam_error: ++ is_validated=0; ++ } ++ /* cleanup */ ++ retval = PAM_SUCCESS; ++#ifdef PAM_AUTHTOK ++ if (pam_ttl != 0) { ++ if (retval == PAM_SUCCESS) ++ retval = pam_set_item(pamh, PAM_AUTHTOK, NULL); ++ } ++#endif ++ if (pam_ttl == 0 || retval != PAM_SUCCESS) { ++ retval = pam_end(pamh, retval); ++ if (retval != PAM_SUCCESS) { ++ TRACE(TRACE_WARNING, "failed to release PAM authenticator\n"); ++ } ++ pamh = NULL; ++ } + ++ } ++#endif + if (is_validated) { + db_user_log_login(*user_idnr); + } else { +diff -wbBur dbmail-2.2.10/modules/Makefile.am dbmail-2.2.10.pam/modules/Makefile.am +--- dbmail-2.2.10/modules/Makefile.am 2008-03-24 17:49:33.000000000 +0300 ++++ dbmail-2.2.10.pam/modules/Makefile.am 2008-09-18 16:44:53.000000000 +0400 +@@ -60,7 +60,7 @@ + + # This one is always built. + libauth_sql_la_SOURCES = authsql.c +-libauth_sql_la_LIBADD = @CRYPTLIB@ ++libauth_sql_la_LIBADD = @CRYPTLIB@ @PAMLIBS@ + + if LDAP + libauth_ldap_la_SOURCES = authldap.c diff --git a/community-testing/dbmail/dbmail.conf.d b/community-testing/dbmail/dbmail.conf.d new file mode 100644 index 000000000..73309a4a2 --- /dev/null +++ b/community-testing/dbmail/dbmail.conf.d @@ -0,0 +1,9 @@ +# Parameters to be passed to dbmail +# +# +# Select the service you want started with dbmail +# +# Available options : +# dbmail-imapd dbmail-pop3d dbmail-lmtpd dbmail-timsieved +# +DBMAIL_DAEMONS="dbmail-imapd" diff --git a/community-testing/dbmail/dbmail.rc.d b/community-testing/dbmail/dbmail.rc.d new file mode 100644 index 000000000..92c34e5d2 --- /dev/null +++ b/community-testing/dbmail/dbmail.rc.d @@ -0,0 +1,41 @@ +#!/bin/bash + +[ -f /etc/conf.d/dbmail ] && . /etc/conf.d/dbmail + +. /etc/rc.conf +. /etc/rc.d/functions + +case "$1" in + start) + for daemon in $DBMAIL_DAEMONS; do + stat_busy "Starting DbMail ${daemon}" + /usr/sbin/${daemon} + if [ $? -gt 0 ]; then + stat_fail + else + stat_done + fi + done + add_daemon dbmail + ;; + stop) + for daemon in $DBMAIL_DAEMONS; do + stat_busy "Stopping DbMail ${daemon}" + pid=$(cat /var/run/${daemon}.pid) + kill $pid + sleep 4 + stat_done + done + rm_daemon dbmail + ;; + restart) + $0 stop + sleep 3 + $0 start + ;; + *) + echo "usage: $0 {start|stop|restart}" + ;; +esac + +exit 0 diff --git a/community-testing/libzdb/PKGBUILD b/community-testing/libzdb/PKGBUILD new file mode 100644 index 000000000..9e03c87cf --- /dev/null +++ b/community-testing/libzdb/PKGBUILD @@ -0,0 +1,21 @@ +# $Id: PKGBUILD 62082 2012-01-15 19:15:26Z spupykin $ +# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com> + +pkgname=libzdb +pkgver=2.10 +pkgrel=1 +pkgdesc="Zild Database Library" +arch=(i686 x86_64) +url="http://www.tildeslash.com/libzdb/" +license=('GPL') +depends=('postgresql-libs' 'sqlite3' 'libmysqlclient') +options=(!libtool) +source=(http://www.tildeslash.com/libzdb/dist/libzdb-$pkgver.tar.gz) +md5sums=('fdc04b4b7f33cdcdfc6b559ba9965825') + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr + make + make DESTDIR="$pkgdir/" install +} diff --git a/community-testing/lilypond/PKGBUILD b/community-testing/lilypond/PKGBUILD new file mode 100644 index 000000000..5742b97cd --- /dev/null +++ b/community-testing/lilypond/PKGBUILD @@ -0,0 +1,43 @@ +# $Id: PKGBUILD 62073 2012-01-15 17:13:34Z spupykin $ +# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com> +# Maintainer: Geoffroy Carrier <geoffroy@archlinux.org> +# Contributor: William Rea <sillywilly@gmail.com> +# Contributor: Robert Emil Berge <filoktetes@linuxophic.org> + +pkgname=lilypond +pkgver=2.14.2 +pkgrel=4 +pkgdesc="An automated music engraving system" +arch=('i686' 'x86_64') +url="http://lilypond.org" +license=('GPL') +depends=('guile' 'python2' 'texlive-core' 'ghostscript' 'pango' 'fontconfig') +makedepends=('flex' 'bison' 'gettext' 'mftrace' 'texinfo' 'fontforge' 't1utils' + 'gsfonts' 'texi2html') +options=('emptydirs') +install=lilypond.install +source=(http://download.linuxaudio.org/lilypond/sources/v2.14/$pkgname-$pkgver.tar.gz + texlive-workaround.patch) +md5sums=('4053a19e03181021893981280feb9aaa' + 'ff32863f3eed67ac744e50bc4fc67a87') + +build() { + cd "$srcdir/$pkgname-$pkgver" + + # python2 fix + for file in $(find . -name '*.py' -print); do + sed -i 's_^#!.*/usr/bin/python_#!/usr/bin/python2_' $file + sed -i 's_^#!.*/usr/bin/env.*python_#!/usr/bin/env python2_' $file + done + + rm -rf python/out/ + patch -p1 <$srcdir/texlive-workaround.patch + + PYTHON=/usr/bin/python2 ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install +} diff --git a/community-testing/lilypond/lilypond.install b/community-testing/lilypond/lilypond.install new file mode 100644 index 000000000..934e7b435 --- /dev/null +++ b/community-testing/lilypond/lilypond.install @@ -0,0 +1,48 @@ +infodir=usr/share/info +filelist=(music-glossary.info + lilypond-web.info + lilypond-contributor.info + lilypond-contributor.info-1 + lilypond-contributor.info-2 + lilypond-internals.info-1 + lilypond-internals.info-2 + lilypond-internals.info-3 + lilypond-internals.info-4 + lilypond-internals.info-5 + lilypond-notation.info-1 + lilypond-notation.info-2 + lilypond-notation.info-3 + lilypond-notation.info-4 + lilypond-notation.info-5 + lilypond-notation.info-6 + lilypond-usage.info + lilypond-learning.info + lilypond-web.info-1 + lilypond-web.info-2 + lilypond-internals.info + lilypond-essay.info + lilypond-notation.info + lilypond-learning.info-1 + lilypond-learning.info-2 + lilypond-extending.info + lilypond-changes.info) + +post_install() { + [[ -x usr/bin/install-info ]] || return 0 + for file in "${filelist[@]}"; do + install-info "$infodir/$file.gz" "$infodir/dir" 2> /dev/null + done +} + +post_upgrade() { + post_install "$1" +} + +pre_remove() { + [[ -x usr/bin/install-info ]] || return 0 + for file in "${filelist[@]}"; do + install-info --delete "$infodir/$file.gz" "$infodir/dir" 2> /dev/null + done +} + +# vim:set ts=2 sw=2 et: diff --git a/community-testing/lilypond/texlive-workaround.patch b/community-testing/lilypond/texlive-workaround.patch new file mode 100644 index 000000000..1eb262863 --- /dev/null +++ b/community-testing/lilypond/texlive-workaround.patch @@ -0,0 +1,88 @@ +diff --git a/mf/feta-autometric.mf b/mf/feta-autometric.mf +index d5cbb7f..b25c4bc 100644 +--- a/mf/feta-autometric.mf ++++ b/mf/feta-autometric.mf +@@ -149,7 +149,6 @@ def set_char_box (expr b_sharp, w_sharp, d_sharp, h_sharp) = + & to_bp (w) & " " + & to_bp (h); + special "% MF2PT1: font_size " & decimal designsize; +- special "% MF2PT1: font_slant " & decimal font_slant_; + + for fvar = "font_identifier", + "font_coding_scheme", +@@ -175,9 +174,6 @@ def set_char_box (expr b_sharp, w_sharp, d_sharp, h_sharp) = + fi; + endfor; + +- special "% MF2PT1: font_fixed_pitch " +- & (if font_fixed_pitch_: "1" else: "0" fi); +- + % this must come after the `font_size' special + special "% MF2PT1: charwd " & decimal charwd; + fi; +diff --git a/mf/mf2pt1.mp b/mf/mf2pt1.mp +index a8b45aa..c935628 100644 +--- a/mf/mf2pt1.mp ++++ b/mf/mf2pt1.mp +@@ -61,7 +61,6 @@ def beginchar(expr c,w_sharp,h_sharp,d_sharp) = + def to_bp (expr num) = decimal (ceiling (num*bp_per_pixel)) enddef; + special "% MF2PT1: glyph_dimensions 0 " & to_bp (-d) & " " & to_bp(w) & " " & to_bp(h); + special "% MF2PT1: font_size " & decimal designsize; +- special "% MF2PT1: font_slant " & decimal font_slant_; + special "% MF2PT1: charwd " & decimal charwd; % Must come after the |font_size| |special| + for fvar = "font_identifier", "font_coding_scheme", "font_version", + "font_comment", "font_family", "font_weight", "font_unique_id", +@@ -76,8 +75,6 @@ def beginchar(expr c,w_sharp,h_sharp,d_sharp) = + scantokens ("decimal " & fvar & "_"); + fi; + endfor; +- special "% MF2PT1: font_fixed_pitch " & +- (if font_fixed_pitch_: "1" else: "0" fi); + enddef; + + +@@ -91,19 +88,6 @@ enddef; + + + %% \begin{explaincode} +-%% Store the value of \mfcomment +-% |font_slant_|, so we can recall it at each |beginchar|. +-%% \end{explaincode} +- +-font_slant_ := 0; +- +-def font_slant expr x = +- font_slant_ := x; +- fontdimen 1: x +-enddef; +- +- +-%% \begin{explaincode} + %% Redefine \mfcomment + % |bpppix_|, the number of ``big'' points per pixel. \mfcomment + % This in turn redefines |mm|, |in|, |pt|, and other derived units. +@@ -141,11 +125,6 @@ forsuffixes fvar = font_underline_position, font_underline_thickness: + scantokens ("def " & str fvar & " expr x = " & str fvar & "_ := x enddef;"); + endfor; + +-boolean font_fixed_pitch_; +-font_fixed_pitch_ := false; +-def font_fixed_pitch expr x = font_fixed_pitch_ := x enddef; +- +- + %% \begin{explaincode} + %% We'd like to be able to use calligraphic pens. Normally, MetaPost's + %% output routine does all the work for us of converting these to filled +diff --git a/scripts/build/mf2pt1.pl b/scripts/build/mf2pt1.pl +index 95df0f8..20f410b 100644 +--- a/scripts/build/mf2pt1.pl ++++ b/scripts/build/mf2pt1.pl +@@ -427,7 +427,7 @@ ENDHEADER + sub get_bboxes ($) + { + execute_command 1, ("mpost", "-mem=mf2pt1", "-progname=mpost", +- "\\mode:=localfont; mag:=$mag; bpppix $bpppix; input $mffile"); ++ "\\mode:=localfont; mag:=$mag; bpppix:=$bpppix; input $mffile"); + opendir (CURDIR, ".") || die "${progname}: $! ($filedir)\n"; + @charfiles = sort + { ($a=~ /\.(\d+)$/)[0] <=> ($b=~ /\.(\d+)$/)[0] } |