diff options
| -rw-r--r-- | abs/core-testing/php/PKGBUILD | 14 | ||||
| -rw-r--r-- | abs/core-testing/php/__changelog | 2 | ||||
| -rw-r--r-- | abs/core-testing/php/php.ini | 2 | ||||
| -rw-r--r-- | abs/extra-testing/bash-completion/PKGBUILD | 34 | ||||
| -rw-r--r-- | abs/extra-testing/bash-completion/cowsay.bashcomp | 34 | ||||
| -rw-r--r-- | abs/extra-testing/dnsmasq/PKGBUILD | 40 | ||||
| -rwxr-xr-x | abs/extra-testing/dnsmasq/rc.dnsmasq | 36 | ||||
| -rw-r--r-- | abs/extra-testing/most/PKGBUILD | 20 | ||||
| -rw-r--r-- | abs/extra-testing/most/most-debian.patch | 1655 | ||||
| -rw-r--r-- | abs/extra-testing/numlockx/PKGBUILD | 26 | ||||
| -rw-r--r-- | abs/extra-testing/terminus-font/PKGBUILD | 20 | ||||
| -rw-r--r-- | abs/extra-testing/terminus-font/install.proto | 27 | ||||
| -rw-r--r-- | abs/extra-testing/terminus-font/terminus-font.install | 21 | 
13 files changed, 1929 insertions, 2 deletions
| diff --git a/abs/core-testing/php/PKGBUILD b/abs/core-testing/php/PKGBUILD index 975716a..65862a9 100644 --- a/abs/core-testing/php/PKGBUILD +++ b/abs/core-testing/php/PKGBUILD @@ -1,6 +1,6 @@  pkgname=php  pkgver=5.2.6 -pkgrel=23 +pkgrel=29  _suhosinver=0.9.6.2  pkgdesc='A high-level scripting language'  arch=('i686' 'x86_64') @@ -174,3 +174,15 @@ build() {  #	install -D -m644 libs/libphp5.so ${pkgdir}/usr/lib/httpd/modules/libphp5.so || return 1  #	install -D -m644 ${srcdir}/apache.conf ${pkgdir}/etc/httpd/conf/extra/php5_module.conf || return 1  } + + +md5sums=('7380ffecebd95c6edb317ef861229ebd' +         'f2ec986341a314c271259dbe4d940858' +         '0ba86d39163d577c195d57c9129149cd' +         '96ca078be6729b665be8a865535a97bf' +         '74e5ce5a02488ec91b1c59f539e42936') +md5sums=('7380ffecebd95c6edb317ef861229ebd' +         'f2ec986341a314c271259dbe4d940858' +         '13795526fe1a5da17c0aa46d5ea1a5d8' +         '96ca078be6729b665be8a865535a97bf' +         '74e5ce5a02488ec91b1c59f539e42936') diff --git a/abs/core-testing/php/__changelog b/abs/core-testing/php/__changelog index aac14ba..375545c 100644 --- a/abs/core-testing/php/__changelog +++ b/abs/core-testing/php/__changelog @@ -4,3 +4,5 @@ added /data/srv/tmp to basedir  added /usr/share/mythtv/mythweather/scripts/  send errors to stderr   change .install file, timezone is modified on install +php.ini -jm +	remove open_basedir diff --git a/abs/core-testing/php/php.ini b/abs/core-testing/php/php.ini index 8cbcd56..0d3a568 100644 --- a/abs/core-testing/php/php.ini +++ b/abs/core-testing/php/php.ini @@ -249,7 +249,7 @@ safe_mode_protected_env_vars = LD_LIBRARY_PATH  ; and below.  This directive makes most sense if used in a per-directory  ; or per-virtualhost web server configuration file. This directive is  ; *NOT* affected by whether Safe Mode is turned On or Off. -open_basedir = /data/srv/httpd/htdocs/:/home/:/tmp/:/usr/share/pear/:/data/srv/tmp:/usr/share/mythtv/mythweather/scripts/:/data/srv/httpd/htdocs/mythweb/data/video:/myth/ipodfeed:/data/srv/httpd/htdocs/archive:/etc +;open_basedir = /data/srv/httpd/htdocs/:/home/:/tmp/:/usr/share/pear/:/data/srv/tmp:/usr/share/mythtv/mythweather/scripts/:/data/srv/httpd/htdocs/mythweb/data/video:/myth/ipodfeed:/data/srv/httpd/htdocs/archive:/etc:/myth:/media  ; This directive allows you to disable certain functions for security reasons.  ; It receives a comma-delimited list of function names. This directive is diff --git a/abs/extra-testing/bash-completion/PKGBUILD b/abs/extra-testing/bash-completion/PKGBUILD new file mode 100644 index 0000000..a60a49a --- /dev/null +++ b/abs/extra-testing/bash-completion/PKGBUILD @@ -0,0 +1,34 @@ +# $Id: PKGBUILD 67318 2010-02-06 09:38:55Z eric $ +# Maintainer: Aaron Griffin <aaron@archlinux.org> +# Contributor: Aurelien Foret <orelien@chez.com> +# Contributor: Evangelos Foutras <foutrelis@gmail.com> + +pkgname=bash-completion +pkgver=1.1 +pkgrel=3 +pkgdesc="Programmable completion for the bash shell" +arch=(any) +url="http://bash-completion.alioth.debian.org/" +license=('GPL') +depends=('bash') +source=(http://bash-completion.alioth.debian.org/files/$pkgname-$pkgver.tar.gz cowsay.bashcomp) +md5sums=('593d3edcf287b9e9d735049bd4d3f229' 'e9766bdc391caf825cb24e704422987e') +sha1sums=('0e666ebda3d577571ab62bcecc16e1024922cd18' 'a8620aa1029d46bae92be8a6ea0eb62d737545ef') + +build() { +  cd "$srcdir/$pkgname-$pkgver" + +  # fixes for archlinux +  sed -i 's#/sbin/lsmod#/bin/lsmod#' bash_completion || return 1 + +  ./configure --prefix=/usr --sysconfdir=/etc +  make || return 1 +  make DESTDIR="$pkgdir" install +  install -D -m644 "$srcdir/cowsay.bashcomp" "$pkgdir/etc/bash_completion.d/cowsay" + +  # apache2ctl doesn't work, even when renamed to apachectl (and sed'd) +  rm "$pkgdir/etc/bash_completion.d/apache2ctl" +  # munin-node doesn't work, even i've updated munin to 1.4.0 +  rm "$pkgdir/etc/bash_completion.d/munin-node" +} +# vim:set ts=2 sw=2 et: diff --git a/abs/extra-testing/bash-completion/cowsay.bashcomp b/abs/extra-testing/bash-completion/cowsay.bashcomp new file mode 100644 index 0000000..77d8be9 --- /dev/null +++ b/abs/extra-testing/bash-completion/cowsay.bashcomp @@ -0,0 +1,34 @@ +# Copyright 1999-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/www/viewcvs.gentoo.org/raw_cvs/gentoo-x86/games-misc/cowsay/files/cowsay.bashcomp,v 1.1 2005/02/06 14:37:54 ka0ttic Exp $ + +# bash command-line completion for cowsay +# Author: Aaron Walker <ka0ttic@gentoo.org> +# Modified by: Michal Bentkowski <mr.ecik at gmail.com> + +_cowsay() { +    local cur prev opts x +    COMPREPLY=() +    cur="${COMP_WORDS[COMP_CWORD]}" +    prev="${COMP_WORDS[COMP_CWORD-1]}" +    opts="-e -f -h -l -n -T -W -b -d -g -p -s -t -w -y" + +    if [[ "${cur}" == -* || ${COMP_CWORD} -eq 1 ]] ; then +        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) +        return 0 +    fi + +    case "${prev}" in +        -f) +            COMPREPLY=( $( command ls /usr/share/cowsay| \ +                sed -ne 's/^\('$cur'.*\)\.cow$/\1/p') ) +            return 0 +            ;; +        -[eTW]) +            COMPREPLY=() +            ;; +    esac +} +complete -o filenames -F _cowsay cowsay cowthink + +# vim: set ft=sh tw=80 sw=4 et : diff --git a/abs/extra-testing/dnsmasq/PKGBUILD b/abs/extra-testing/dnsmasq/PKGBUILD new file mode 100644 index 0000000..a413df4 --- /dev/null +++ b/abs/extra-testing/dnsmasq/PKGBUILD @@ -0,0 +1,40 @@ +# $Id: PKGBUILD 66607 2010-02-01 01:42:17Z giovanni $ +# Maintainer: Paul Mattal <paul@archlinux.org> +# Contributor: Tom Newsom <Jeepster@gmx.co.uk> + +pkgname=dnsmasq +pkgver=2.52 +pkgrel=1 +pkgdesc="Lightweight, easy to configure DNS forwarder and DHCP server" +url="http://www.thekelleys.org.uk/dnsmasq/doc.html" +arch=('i686' 'x86_64') +license=('GPL') +depends=('glibc' 'bash') +makedepends=('libcap>=2.16') +backup=('etc/dnsmasq.conf') +install= +source=("http://www.thekelleys.org.uk/$pkgname/$pkgname-$pkgver.tar.gz"  +        'rc.dnsmasq') +md5sums=('1bb32fffdb4f977ead607802b5d701d0' 'e956eee1ec24212a3254d2b168187495') + +build() { +  cd $srcdir/$pkgname-$pkgver + +  # Build +  make || return 1 + +  # Install +  install -d $pkgdir/etc/rc.d || return 1 +  make PREFIX=/usr DESTDIR=$pkgdir install || return 1 + +  install -D -m755 \ +    $srcdir/rc.dnsmasq $pkgdir/etc/rc.d/dnsmasq || return 1 +  install -D -m644 \ +    dnsmasq.conf.example $pkgdir/etc/dnsmasq.conf || return 1 + +  # Make the Required Directories for DHCP Server Default Directories +  install -d $pkgdir/var/db || return 1 +  install -d $pkgdir/var/lib/misc || return 1 +} + +# vim: ts=2 sw=2 et ft=sh diff --git a/abs/extra-testing/dnsmasq/rc.dnsmasq b/abs/extra-testing/dnsmasq/rc.dnsmasq new file mode 100755 index 0000000..1676072 --- /dev/null +++ b/abs/extra-testing/dnsmasq/rc.dnsmasq @@ -0,0 +1,36 @@ +#!/bin/bash + +. /etc/rc.conf +. /etc/rc.d/functions + +PID=`pidof -o %PPID /usr/sbin/dnsmasq` +case "$1" in +  start) +    stat_busy "Starting DNS/DHCP daemon" +    [ -z "$PID" ] && /usr/sbin/dnsmasq +    if [ $? -gt 0 ] ; then +      stat_fail +    else +      add_daemon dnsmasq                     # create the 'state' dir +      stat_done  +    fi +    ;; +  stop) +    stat_busy "Stopping DNS/DHCP daemon" +    [ "$PID" ] && kill $PID &> /dev/null +    if [ $? -gt 0 ]; then +      stat_fail +    else +      rm_daemon dnsmasq                      # remove the 'state' dir +      stat_done +    fi +    ;; +  restart) +    $0 stop +    sleep 5 +    $0 start +    ;; +  *) +    echo "usage: $0 {start|stop|restart}" +esac +exit 0 diff --git a/abs/extra-testing/most/PKGBUILD b/abs/extra-testing/most/PKGBUILD new file mode 100644 index 0000000..b2d8624 --- /dev/null +++ b/abs/extra-testing/most/PKGBUILD @@ -0,0 +1,20 @@ +# $Id: PKGBUILD 57011 2009-10-31 08:09:42Z allan $ +# Maintainer: juergen <juergen@archlinux.org> +# Contributor: Tom Newsom <Jeepster@gmx.co.uk> + +pkgname=most +pkgver=5.0.0a +pkgrel=2 +pkgdesc="A terminal pager similar to 'more' and 'less'" +arch=('i686' 'x86_64') +depends=('slang') +license=('GPL') +url="ftp://space.mit.edu/pub/davis/most/" +source=(ftp://space.mit.edu/pub/davis/$pkgname/$pkgname-$pkgver.tar.gz) +md5sums=('30f2131b67f61716f6fe1f65205da48b') + +build() { +  cd $srcdir/$pkgname-$pkgver +  ./configure --prefix=/usr --sysconfdir=/etc || return 1 +  make DESTDIR=$pkgdir install || return 1 +} diff --git a/abs/extra-testing/most/most-debian.patch b/abs/extra-testing/most/most-debian.patch new file mode 100644 index 0000000..4387420 --- /dev/null +++ b/abs/extra-testing/most/most-debian.patch @@ -0,0 +1,1655 @@ +--- most-4.10.2.orig/most.1 ++++ most-4.10.2/most.1 +@@ -134,7 +134,7 @@ + Use this switch when you want to view files + containing 8 bit characters. + .I most +-will display the file 16 bytes per line in hexidecimal notation. ++will display the file 16 bytes per line in hexadecimal notation. + A typical line looks like: + .IP + .Ds +@@ -185,12 +185,13 @@ + This option is meaningful only when used with the + .B \-v + option. ++.TP + .BI + lineno + Start up at + .IR lineno . + .TP +-.B +c +-Make search case sensitive. ++.B -c ++Make searches case sensitive. + By default, they are not. + .TP + .B +d +@@ -482,7 +483,7 @@ + descriptors that represent the file name and line number, + respectively.  For example, if JED is your editor, then set + .B MOST_EDITOR  +-to 'jed %s -g %d'. ++to 'jed %s -g %d'. This will only work where the %s preceeds the %d. + .TP + .B MOST_HELP + This variable may be used to specify an alternate help file. +@@ -496,7 +497,7 @@ + .I most.rc + on other systems. + .SH CONFIGURATION FILE SYNTAX +-When most starts up, it tries to read a system confiuration file and ++When most starts up, it tries to read a system configuration file and + then a personal configuration file.  These files may be used to + specify keybindings and colors. + .PP +--- most-4.10.2.orig/src/buffer.c ++++ most-4.10.2/src/buffer.c +@@ -44,10 +44,10 @@ +  + Most_Buffer_Type *Most_Buf; +  +-int Most_Num_Lines; ++long long Most_Num_Lines; +  +-unsigned int Most_C_Offset; +-int Most_C_Line; ++unsigned long long Most_C_Offset; ++long long Most_C_Line; +  + static unsigned char *beg_of_line1(void) + { +@@ -61,24 +61,29 @@ +      { + 	if (*pos == '\n') + 	  { +-	     pos--; +-	     while ((pos > Most_Beg) +-		    && (*pos != '\n')) ++	     pos--; /* Skip back the new-line. */ ++	     /* This block is UTF-8 safe, because it only scans the ++		buffer for a new-line, and doesn't count ++		characters. */ ++	     while ((pos > Most_Beg) && (*pos != '\n')) + 	       pos--; +  +-	     if (*pos != '\n') return pos; ++	     if (*pos != '\n') return Most_Beg; ++	     /* from here on *pos == '\n' */ + 	     if (pos + 1 != cpos) + 	       return pos + 1; + 	  } +      } +-   else pos--; ++   else ++     pos = SLutf8_bskip_char(Most_Beg, pos); +  +    if (*pos != '\n') +      { +-	while ((pos > Most_Beg) +-	       && (*pos != '\n')) ++	/* This block is UTF-8 safe. See comment above. */ ++	while ((pos > Most_Beg) && (*pos != '\n')) + 	  pos--; + 	if (*pos != '\n') return Most_Beg; ++	/* from here on *pos == '\n' */ + 	return pos + 1; +      } +  +@@ -93,55 +98,6 @@ +    return pos; + } +  +- +-static unsigned char *forward_columns (unsigned char *b, unsigned char *e, unsigned int num_cols) +-{ +-   unsigned int col = 0; +- +-   while ((b < e) +-	  && (col < num_cols)) +-     { +-	unsigned char ch = *b++; +-	if (((ch >= ' ') && (ch < 0x7F)) +-	    || (ch >= SLsmg_Display_Eight_Bit)) +-	  { +-	     col++; +-	     continue; +-	  } +-	 +-	if ((ch == '\b') || (ch == '\t') || (ch == '\r')) +-	  switch (ch) +-	    { +-	     case '\b': +-	       if (Most_V_Opt == 0) +-		 { +-		    if (col > 0) col--; +-		 } +-	       else col += 2; +-	       break; +-	        +-	     case '\r': +-	       if (Most_V_Opt == 0) +-		 col = 0; +-	       else  +-		 col += 2; +-	       break; +-	        +-	     case '\t': +-	       if (Most_T_Opt == 0) +-		 col = Most_Tab_Width * (col/Most_Tab_Width + 1); +-	       else +-		 col += 2; +-	       break; +-	    } +-	else if (ch & 0x80) +-	  col += 3; +-	else +-	  col += 2; +-     } +-   return b; +-} +- + /* does not move point */ + static unsigned char *end_of_line1(void) + { +@@ -164,6 +120,9 @@ +  +    if (*pos != '\n') +      { ++	/* This block is UTF-8 safe, because it only scans the buffer ++	   for a new-line, and doesn't count characters. */ ++ + 	n = pmax - pos; + 	n2 = n % 8; + 	pmax = pos + (n - 8); +@@ -215,7 +174,7 @@ +    ncols = SLtt_Screen_Cols-1; +    while (1) +      { +-	unsigned char *next_b = forward_columns (b, e, ncols); ++	unsigned char *next_b = most_forward_columns (b, e, ncols, 1); + 	if ((next_b == e) || (next_b == b)) + 	  break; + 	 +@@ -237,11 +196,12 @@ +      return e; +  +    if (b == NULL) b = most_beg_of_line (); +-   b = forward_columns (b, e, SLtt_Screen_Cols-1); ++   b = most_forward_columns (b, e, SLtt_Screen_Cols-1, 1); +     +    /* Do not wrap the line if the last character falls on the last column  +     * of the display. +     */ ++   /* FIXME potential bug if dealing with multi-byte char. */ +    if ((b + 1 <= e)  +        && (b + 1 < Most_Eob)  +        && (b[1] == '\n')) +@@ -250,10 +210,10 @@ +    return b; + } +  +-int most_forward_line(int save) ++long long most_forward_line(long long save) + { +-   int m; +-   register int n = save; ++   long long m; ++   register long long n = save; +    unsigned char *p; +    unsigned char *pmax; +  +@@ -346,14 +306,14 @@ + } +  + /* Count lines in the region.  A half line counts as 1 */ +-int most_count_lines(unsigned char *beg, unsigned char *end) ++long long most_count_lines(unsigned char *beg, unsigned char *end) + { +-   int save_line, n; ++   long long save_line, n; +    unsigned char *save_beg, *save_eob; +-   unsigned int save_pos; ++   unsigned long long save_pos; +    int dn = 1000; +  +-   if (Most_B_Opt) return(1 + (int)(end - beg) / 16); ++   if (Most_B_Opt) return(1 + (long long)(end - beg) / 16); +  +    save_line = Most_C_Line; save_beg = Most_Beg; save_eob = Most_Eob; +    save_pos = Most_C_Offset; +@@ -371,9 +331,9 @@ +    return(n); + } +  +-void most_goto_line(int line) ++void most_goto_line(long long line) + { +-   int dif_c, dif_b,dif_t; ++   long long dif_c, dif_b,dif_t; +  +    if (line < 1) line = 1; +    most_read_to_line(line); +@@ -420,7 +380,7 @@ + } +  + /* return line the point is on without the final '\n's  */ +-int most_extract_line(unsigned char **beg, unsigned char **end) ++long long most_extract_line(unsigned char **beg, unsigned char **end) + { +    *beg = most_beg_of_line(); +    *end = end_of_line (*beg); +@@ -428,12 +388,12 @@ +    return 0; + } +  +-int most_what_line(unsigned char *pos) ++long long most_what_line(unsigned char *pos) + { +-   unsigned int save_pos; +-   int save_line, dir; +-   register int dif_c, dif_b,dif_t; +-   int ret; ++   unsigned long long save_pos; ++   long long save_line, dir; ++   register long long dif_c, dif_b,dif_t; ++   long long ret; +  +    if (Most_B_Opt) +      { +@@ -517,7 +477,7 @@ + } +  + /* given a buffer position, find the line and column */ +-void most_find_row_column(unsigned char *pos, int *r, int *c) ++void most_find_row_column(unsigned char *pos, long long *r, long long *c) + { +    unsigned char *beg; +    unsigned int save_offset; +@@ -545,7 +505,10 @@ +     /* Now we have found the line it is on so.... */ +    beg = most_beg_of_line(); +    *c = 1; +-   while (beg++ < pos) *c = *c + 1; ++   if (Most_UTF8_Mode) ++     while ((beg = SLutf8_skip_char(beg, pos)) < pos) *c = *c + 1; ++   else ++     while (beg++ < pos) *c = *c + 1; +    Most_C_Line = save_line; +    Most_C_Offset = save_offset; + } +--- most-4.10.2.orig/src/buffer.h ++++ most-4.10.2/src/buffer.h +@@ -23,12 +23,12 @@ +  + extern Most_Buffer_Type *Most_Buf; + extern unsigned char *Most_Beg, *Most_Eob; +-extern int Most_Num_Lines; ++extern long long Most_Num_Lines; +  + /* Offset of current position from beginning of buffer */ +-extern unsigned int Most_C_Offset; ++extern unsigned long long Most_C_Offset; +  +-extern int Most_C_Line; ++extern long long Most_C_Line; + /* +  *  Current line number.  If at the beginning of the buffer, it is 1.  If +  *  we are at the last point of the buffer it is the number of lines. +@@ -37,26 +37,26 @@ + /* This routine does not move the point */ + extern unsigned char *most_beg_of_line(void); +  +-extern int most_forward_line(int); ++extern long long most_forward_line(long long); + /* This routine moves the point forward n lines. n can be negative. +    It returns the number moved. */ +  +-extern void most_goto_line(int); ++extern void most_goto_line(long long); + /* Move the point somewhere on the nth line of the buffer returning +    C_POS */ +  +-extern int most_what_line(unsigned char *); ++extern long long most_what_line(unsigned char *); + /* return the line number of position 'argument'. Does not move point */ +  + /* count the number of lines in the region delimited by beg and end. +    Counts lines from beg up to end but does not count end. +    Does not move point. */ +-extern int most_count_lines(unsigned char *, unsigned char *); +-extern int most_extract_line(unsigned char **, unsigned char **); ++extern long long most_count_lines(unsigned char *, unsigned char *); ++extern long long most_extract_line(unsigned char **, unsigned char **); +  + extern Most_Buffer_Type *most_switch_to_buffer(Most_Buffer_Type *); + extern Most_Buffer_Type *most_create_buffer(char *); +-extern void most_find_row_column(unsigned char *, int *, int *); ++extern void most_find_row_column(unsigned char *, long long *, long long *); +  + #endif +  +--- most-4.10.2.orig/src/keym.c ++++ most-4.10.2/src/keym.c +@@ -228,7 +228,7 @@ + static void goto_percent_cmd(void) + { +    unsigned char *pos; +-   int n; ++   long long n; +  +    if (Most_Digit_Arg != (int *) NULL) n = *Most_Digit_Arg; +    else +@@ -282,7 +282,7 @@ +  + static void find_next_cmd(void) + { +-   int col, line, n = 1; ++   long long col, line, n = 1; +    unsigned long ofs; +  +    if (Most_Digit_Arg != NULL) n = *Most_Digit_Arg; +@@ -309,7 +309,7 @@ + #else + 				 "Search: ", + #endif +-				 Most_Search_Str, ++				 (char *) Most_Search_Str, + 				 MOST_SEARCH_BUF_LEN + 				 ) == -1) return; +    Most_Curs_Offset = Most_C_Offset; +@@ -325,7 +325,7 @@ + #else + 				 "Search Backwards: ", + #endif +-				 Most_Search_Str, ++				 (char *) Most_Search_Str, + 				 MOST_SEARCH_BUF_LEN) == -1) return; +    find_next_cmd(); + } +--- most-4.10.2.orig/src/line.c ++++ most-4.10.2/src/line.c +@@ -87,8 +87,7 @@ +    while (b < end) +      { +         ch = *b++; +-	if (((ch >= ' ') && (ch < 0x7F)) +-	    || (ch >= SLsmg_Display_Eight_Bit)) ++	if (most_isprint(ch)) + 	  { + 	     *s++ = ch; + 	     continue; +@@ -108,103 +107,156 @@ +  +    if (end > Most_Eob) end = Most_Eob; +  +-   sprintf (buf, "0x%08X: ", Most_C_Offset); ++   sprintf (buf, "0x%08llX: ", Most_C_Offset); +    ascii_format_line (beg, end, buf + 12); +    SLsmg_write_string (buf); +    SLsmg_erase_eol (); + } +  +-static int most_analyse_line(unsigned char *begg, unsigned char *endd,  +-			     char *out, char *attributes) ++int most_isprint(unsigned char ch) + { +-   unsigned char *beg, *end; +-   unsigned int min_col, max_col; +-   unsigned int i, i_max; ++   /* Can this be directly replaced with isprint? */ ++   return (ch >= ' ' && ch < 0x7F) || ch >= SLsmg_Display_Eight_Bit; ++} ++ ++static void most_analyse_line(unsigned char *beg, unsigned char *end, ++			      unsigned char *out, char *attributes) ++{ ++   unsigned char *pout; ++   char* pattributes; ++ ++   /* Holds the number of columns for the current character counting ++    * from the left margin (in contrast to the leftmost visible ++    * column). ++    */ ++   unsigned int col; ++ ++   /* Holds the number of the column up to which to apply the ++    * current/following formatting. Only meaningful when format_rlim > i. ++    */ ++   unsigned int format_rlim; +  +-   beg = begg; +-   end = endd; +-   i = i_max = 0; +-   min_col = Most_Column - 1; +-   max_col = min_col + SLtt_Screen_Cols; ++   beg = most_forward_columns(beg, end, Most_Column - 1, 0); ++   pout = out; ++   pattributes = attributes; ++   col = format_rlim = 0; +  +    while (beg < end) +      { + 	char attr = ' '; +-	unsigned char ch; ++	unsigned char ch = *beg++; +  +-	if ('\n' == (ch = *beg++)) ++	if ('\n' == ch) + 	  break; + 	 + 	if ((ch == '\r') && (Most_V_Opt == 0)) + 	  { +-	     if (i > i_max) i_max = i; +-	     i = 0; ++	     if (col > format_rlim) format_rlim = col; ++	     col = 0; + 	     continue; + 	  } + 	 + 	if ((ch == '\b') && (Most_V_Opt == 0)) + 	  { +-	     if (i > i_max) i_max = i; +-	     if (i > 0) +-	       i--; ++	     if (col > format_rlim) format_rlim = col; ++	     if (col > 0) ++	       { ++		  if (Most_UTF8_Mode) ++		    { ++		       SLwchar_Type wc; ++		       pout = SLutf8_bskip_char(out, pout); ++		       if (SLutf8_decode(pout, pout + SLUTF8_MAX_MBLEN, &wc, NULL)) ++			 { ++			    unsigned int char_len = SLwchar_wcwidth(wc); ++			    if (char_len > 1) ++			      col -= char_len - 1; ++			 } ++		    } ++		  else ++		    pout--; ++		  pattributes--; ++		  col--; ++	       } + 	     continue; + 	  } + 	 +-	if (i < i_max)		       /* overstrike */ ++	if (col < format_rlim)		       /* overstrike */ + 	  { + 	     attr = 'b'; +-	     if ((i >= min_col) && (i < max_col)) ++	     if (col < SLtt_Screen_Cols) + 	       { +-		  if (out[i-min_col] == '_') ++		  if (*pout == '_') + 		    attr = 'u'; + 		  else if (ch == '_') + 		    { + 		       attr = 'u'; +-		       ch = out[i - min_col]; ++		       ch = *pout; + 		    } + 	       } + 	     if (ch == ' ') + 	       { +-		  i++; ++		  col++; + 		  continue; + 	       } + 	     /* drop */ + 	  } +-	 +-	if ((ch >= ' ') && (ch < 0x7F)) +-	  { +-	     if ((i >= min_col) && (i < max_col)) ++ ++	if (Most_UTF8_Mode) { ++	   unsigned char *prev = --beg; ++	   SLwchar_Type wc; ++	   unsigned int len; ++ ++	   if (SLutf8_decode(beg, end, &wc, NULL)) ++	     { ++	        unsigned int char_len = SLwchar_wcwidth(wc); ++		if (char_len > 1) ++	          col += char_len - 1; ++	     } ++ ++	   beg = SLutf8_skip_char(beg, end); ++	   len = beg - prev; ++ ++	   if (len > 1) { ++	     /* Non-ASCII char, display it. */ ++	     if (col < SLtt_Screen_Cols) + 	       { +-		  out[i-min_col] = ch; +-		  attributes[i-min_col] = attr; ++		  memcpy(pout, prev, len); ++		  pout += len; ++		  *pattributes++ = attr; + 	       } +-	     i++; ++	     col++; + 	     continue; +-	  } +-	 +-	if (ch >= SLsmg_Display_Eight_Bit) ++	   } ++	} ++ ++	if (most_isprint(ch)) + 	  { +-	     if ((i >= min_col) && (i < max_col)) ++	     if (col < SLtt_Screen_Cols) + 	       { +-		  out[i-min_col] = ch; +-		  attributes[i-min_col] = attr; ++		  *pout++ = ch; ++		  *pattributes++ = attr; + 	       } +-	     i++; ++	     col++; + 	     continue; + 	  } +  + 	if ((ch == '\t') && (Most_T_Opt == 0) && (Most_Tab_Width)) + 	  { +- +-	     int nspaces = Most_Tab_Width * (i/Most_Tab_Width + 1) - i; ++	     /* Tab expansion must take into consideration the ++	      * leftmost visible column. However, variable col holds the ++	      * number of columns from the left margin and must be ++	      * corrected. ++	      */ ++	     int vis_col = col + Most_Column - 1; ++	     int nspaces = Most_Tab_Width - (vis_col % Most_Tab_Width); + 	     while (nspaces > 0) + 	       { +-		  if ((i >= min_col) && (i < max_col)) ++		  if (col < SLtt_Screen_Cols) + 		    { +-		       out[i-min_col] = ' '; +-		       attributes[i-min_col] = attr; ++		       *pout++ = ' '; ++		       *pattributes++ = attr; + 		    } +-		  i++; ++		  col++; + 		  nspaces--; + 	       } + 	     continue; +@@ -212,36 +264,36 @@ +  + 	if (ch & 0x80) + 	  { +-	     if ((i >= min_col) && (i < max_col)) ++	     if (col < SLtt_Screen_Cols) + 	       { +-		  out[i-min_col] = '~'; +-		  attributes[i-min_col] = attr; ++		  *pout++ = '~'; ++		  *pattributes++ = attr; + 	       } +-	     i++; ++	     col++; + 	     ch &= 0x7F; + 	     /* drop */ + 	  } + 	 +-	if ((i >= min_col) && (i < max_col)) ++	if (col < SLtt_Screen_Cols) + 	  { +-	     out[i-min_col] = '^'; +-	     attributes[i-min_col] = attr; ++	     *pout++ = '^'; ++	     *pattributes++ = attr; + 	  } +-	i++; ++	col++; + 	 + 	if (ch == 0x7F) ch = '?'; + 	else ch += '@'; + 	 +-	if ((i >= min_col) && (i < max_col)) ++	if (col < SLtt_Screen_Cols) + 	  { +-	     out[i-min_col] = ch; +-	     attributes[i-min_col] = attr; ++	     *pout++ = ch; ++	     *pattributes++ = attr; + 	  } +-	i++; ++	col++; +      } +  +-   if (i < i_max)  +-     i = i_max; ++   if (col < format_rlim)  ++     col = format_rlim; +  +    /* Now add "..." if selective display.  To do that, the next line needs to  +     * be dealt with to determine whether or not it will be hidden. +@@ -249,7 +301,7 @@ +    if (Most_Selective_Display  +        && (Most_W_Opt == 0) +        && (beg < Most_Eob) +-       && ((i >= min_col) && (i < max_col))) ++       && (col < SLtt_Screen_Cols)) +      { + 	if (*beg == '\n') beg++; +  +@@ -260,37 +312,29 @@ + 	if ((beg >= Most_Eob) || (*beg == '\n')  + 	    || (most_apparant_distance(beg) >= Most_Selective_Display)) + 	  { +-	     i_max = i + 3; +-	     while (i < i_max) ++	     /* Add an ellipsis, if they fit on the screen. */ ++	     int rlimit = col + 3; ++	     while (col < rlimit) + 	       { +-		  if (i < max_col) ++		  if (col < SLtt_Screen_Cols) + 		    { +-		       out[i] = '.'; +-		       attributes[i] = ' '; ++		       *pout++ = '.'; ++		       *pattributes++ = ' '; + 		    } +-		  i++; ++		  col++; + 	       } + 	  } +      } +-    +-   i_max = i; +  +-   if (i < min_col) +-     i = min_col; +-   else if (i >= max_col) +-     i = max_col; +- +-   i -= min_col; +- +-   out[i] = 0; +-   attributes[i] = 0; +-   return i_max; ++   *pout = 0; ++   *pattributes = 0; + } +  +-static void output_with_attr (unsigned char *out, unsigned char *attr) ++static void output_with_attr (unsigned char *out, char *attr) + { +-   unsigned char at, ch, lat; ++   unsigned char at, lat; +    unsigned char *p = out; ++   unsigned char *pmax = p + strlen((char *) p); +  +    if (Most_V_Opt)  +      { +@@ -299,7 +343,7 @@ +      } +  +    lat = ' '; +-   while ((ch = *p) != 0) ++   while (p < pmax) +      { + 	if (lat != *attr) + 	  { +@@ -321,7 +365,7 @@ + 	     else most_tt_normal_video (); + 	     lat = at; + 	  } +-	p++; ++	p = SLutf8_skip_char(p, pmax); + 	attr++; +      } +  +@@ -340,10 +384,11 @@ + void most_display_line (void) + { +    unsigned char *beg, *end; +-   unsigned int len; ++#if 0 +    unsigned char dollar; ++#endif +    static unsigned char *line; +-   static unsigned char *attr; ++   static char *attr; +    static unsigned int line_len; +  +    if (Most_B_Opt) +@@ -357,37 +402,43 @@ +    if (line_len < (unsigned int)(SLtt_Screen_Cols + 1) * SLUTF8_MAX_MBLEN) +      { + 	SLfree ((char *) line); +-	SLfree ((char *) attr); ++	SLfree (attr); + 	 + 	line_len = (SLtt_Screen_Cols + 1) * SLUTF8_MAX_MBLEN; + 	 + 	if ((NULL == (line = (unsigned char *) SLmalloc (line_len))) +-	    || (NULL == (attr = (unsigned char *) SLmalloc (line_len)))) ++	    || (NULL == (attr = SLmalloc (line_len)))) + 	  most_exit_error ("Out of memory"); +      } +  +    (void) most_extract_line (&beg, &end); +  +-   len = most_analyse_line(beg, end, (char *) line, (char *) attr); ++   most_analyse_line(beg, end, line, attr); +  ++#if 0 ++   /* Currently the dollar sign is not always being written at the ++      rightmost column when displaying multi-byte characters. */ +    dollar = 0; +    if (Most_W_Opt) +      { +-	if ((end < Most_Eob) +-	    && (*end != '\n')) +-	  dollar = '\\'; ++       if ((end < Most_Eob) ++           && (*end != '\n')) ++         dollar = '\\'; +      } +    else if (len > (unsigned int) SLtt_Screen_Cols + (Most_Column - 1)) +      dollar = '$'; +-    ++ +    if (dollar) +      { +-	line[SLtt_Screen_Cols-1] = dollar; +-	attr[SLtt_Screen_Cols-1] = ' '; +-	line[SLtt_Screen_Cols] = 0; +-	attr[SLtt_Screen_Cols] = 0; ++       unsigned char *pline = ++	 most_forward_columns(line, line + line_len, SLtt_Screen_Cols-1, 1); ++       *pline = dollar; ++       *(pline+1) = 0; ++       attr[SLtt_Screen_Cols-1] = ' '; ++       attr[SLtt_Screen_Cols] = 0; +      } +-    ++#endif ++ +    output_with_attr (line, attr); +    SLsmg_erase_eol (); + } +@@ -398,21 +449,34 @@ + int most_apparant_distance (unsigned char *pos) + { +    int i; +-   unsigned char *save_pos, ch; ++   unsigned char *save_pos, *beg, ch; +    unsigned int save_offset; +  +    save_offset = Most_C_Offset; +    save_pos = pos; +    Most_C_Offset = (unsigned int) (pos - Most_Beg); +-   pos = most_beg_of_line(); ++   beg = pos = most_beg_of_line(); +    Most_C_Offset = save_offset; +  +    i = 0; +    while (pos < save_pos) +      { +-	ch = *pos++; +-	if (((ch >= ' ') && (ch < 0x7F)) +-	    || (ch >= SLsmg_Display_Eight_Bit)) ++	ch = *pos; ++ ++	if (Most_UTF8_Mode) { ++	   unsigned char *prev = pos; ++	   int len; ++	   pos = SLutf8_skip_char(pos, save_pos); ++	   len = pos - prev; ++	   if (len > 1) { ++	     i++; ++	     continue; ++	   } ++	} else { ++	   pos++; ++	} ++ ++	if (most_isprint(ch)) + 	  { + 	     i++; + 	     continue; +@@ -420,7 +484,13 @@ +  + 	if (!Most_V_Opt && (ch == '\b')) + 	  { +-	     if (i > 0) i--; ++	     if (i > 0) ++	       { ++		  if (Most_UTF8_Mode) ++		    i -= pos - SLutf8_bskip_char(beg, pos); ++		  else ++		    i--; ++	       } + 	  } + 	else if (!Most_V_Opt && (ch == '\015')) /* ^M */ + 	  { +@@ -439,3 +509,95 @@ +      } +    return i; + } ++ ++/* ++ * Returns a pointer to the num_cols'th character after the one ++ * pointed at b. Invisible character runs are not counted toward this ++ * limit, i.e. strings that represent attributes, such as "_\b" for ++ * underlines. ++ * ++ * If multi_column is non-zero, characters spanning more than one ++ * column will add their extra width to the column count. ++ * ++ * If there the end of the buffer is reached, as delimited by argument ++ * e, then e is returned. ++ */ ++unsigned char *most_forward_columns (unsigned char *beg, unsigned char *e, unsigned int num_cols, int multi_column) ++{ ++   unsigned int col = 0; ++   unsigned int prev_width = 1; ++   unsigned char* b = beg; ++ ++   while ((b < e) ++	  && ((col < num_cols) ++	      || (*b == '\b') ++	      || (*b == '\r'))) ++     { ++	unsigned char ch = *b; ++ ++	if (Most_UTF8_Mode) ++	  { ++	     unsigned char *prev = b; ++	     int len; ++	     b = SLutf8_skip_char(b, e); ++	     len = b - prev; ++	     if (len > 1) ++	       { ++		  if (multi_column) ++		    { ++		        SLwchar_Type wc; ++			if (SLutf8_decode(prev, e, &wc, NULL)) ++			  col += prev_width = SLwchar_wcwidth(wc); ++		    } ++		  else ++		    col++; ++		  continue; ++	       } ++	  } ++	else ++	  b++; ++ ++	if (most_isprint(ch)) ++	  { ++	     col++; ++	     prev_width = 1; ++	     continue; ++	  } ++ ++	if ((ch == '\b') || (ch == '\t') || (ch == '\r')) ++	  switch (ch) ++	    { ++	     case '\b': ++	       if (Most_V_Opt == 0) ++		 { ++		    if (col > 0) col -= prev_width; ++		 } ++	       else col += 2; ++	       break; ++ ++	     case '\r': ++	       if (Most_V_Opt == 0) ++		 col = 0; ++	       else ++		 col += 2; ++	       break; ++ ++	     case '\t': ++	       if (Most_T_Opt == 0) ++		 col = Most_Tab_Width * (col/Most_Tab_Width + 1); ++	       else ++		 col += 2; /* ^I is two chars long. */ ++	       break; ++	    } ++	else if (ch & 0x80) ++	  col += 3; ++	else ++	  col += 2; ++     } ++ ++   /* Last character was too wide. Backstep it. */ ++   if (col > num_cols) ++     b = SLutf8_bskip_char(beg, b); ++ ++   return b; ++} +--- most-4.10.2.orig/src/line.h ++++ most-4.10.2/src/line.h +@@ -7,5 +7,7 @@ +  + extern void most_display_line(void); + extern int most_apparant_distance(unsigned char *); ++extern int most_isprint(unsigned char); ++extern unsigned char *most_forward_columns (unsigned char *, unsigned char *, unsigned int, int); + #endif +  +--- most-4.10.2.orig/src/most.c ++++ most-4.10.2/src/most.c +@@ -125,7 +125,7 @@ +    ch = *(++str); +    if ( ch == '/') +      { +-	strcpy (Most_Search_Str,++str); ++	strcpy ((char *) Most_Search_Str,++str); + 	return; +      } +  +@@ -329,7 +329,8 @@ +  + static void do_most (char *file, int start) + { +-   int piped, row, col; ++   int piped; ++   long long row, col; +  +    most_get_cdir(Most_C_Dir); +  +@@ -347,7 +348,7 @@ +    Most_Curs_Offset = Most_C_Offset; +  +    if (*Most_Search_Str +-       && ((row = most_search (Most_Beg + Most_C_Offset, 1, &col)) > 0)) ++       && ((row = most_search (Most_Beg + Most_C_Offset, 1LL, &col)) > 0)) +      most_goto_line(row); +    else +      { +@@ -455,13 +456,7 @@ +  +    SLtt_get_terminfo(); + #if SLANG_VERSION >= 20000 +-#if 0 +-   Most_UTF8_Mode = SLutf8_enable (1); +-   if (Most_UTF8_Mode) +-     { +-	fprintf (stderr, "UTF-8 Mode is in effect\n"); +-     } +-#endif ++   Most_UTF8_Mode = SLutf8_enable (-1); + #endif +    SLtt_Ignore_Beep = 1; +    if (No_Colors)  +--- most-4.10.2.orig/src/most.h ++++ most-4.10.2/src/most.h +@@ -1,4 +1,5 @@ + #include "config.h" ++#define SLANG_REGEXP + extern int Most_S_Opt; + extern int Most_A_Opt;             /* automatically choose -b if necessary */ + extern int Most_V_Opt;             /* display control chars */ +--- most-4.10.2.orig/src/search.c ++++ most-4.10.2/src/search.c +@@ -20,6 +20,7 @@ + */ + #include "config.h" +  ++#include <ctype.h> + #include <stdio.h> + #include <string.h> + #include <slang.h> +@@ -31,18 +32,18 @@ + #include "display.h" + #include "search.h" +  +-/* Note!!!  The regular expression searches may not work.  I have not +- * tested them. +- * FIXME!!! +- */ +- + int Most_Case_Sensitive = 0; +-char Most_Search_Str[256]; ++unsigned char Most_Search_Str[256]; + int Most_Search_Dir = 1; +  + #include "jdmacros.h" +  +-#define UPCASE(ch) ((!Most_Case_Sensitive && (ch <= 'z') && (ch >= 'a')) ? (ch - 32) : ch) ++#if SLANG_VERSION < 20000 ++# define NORM_CHAR(ch) ((!Most_Case_Sensitive) ? toupper(ch) : ch) ++# define UPCASE(ch) NORM_CHAR(ch) ++#else ++# define NORM_CHAR(ch) (ch) ++#endif +  + #if	defined(HAVE_V8_REGCOMP) || defined(SLANG_REGEXP) +  +@@ -78,7 +79,7 @@ +  * This function is called by the V8 regcomp to report +  * errors in regular expressions. +  */ +-static void regerror(char *s) ++static void regerror(const char *s) + { +    char	string[256]; +  +@@ -95,13 +96,17 @@ +  *	      0	 error +  * +  */ +-static int do_regcomp(unsigned char *key) ++static int do_regcomp(const unsigned char *key) + { +    static int old_Most_Case_Sensitive; +-   unsigned char UpCaseKey[sizeof(savepattern)]; + # ifndef HAVE_V8_REGCOMP +    int	posn;			/* reg exp error at this offset */ + # endif ++# if SLANG_VERSION < 20000 ++   unsigned char UpCaseKey[sizeof(savepattern)]; ++# else ++   int re_flags = 0; ++# endif +  +    /* +     *	Only recompile search string if it has changed +@@ -124,6 +129,7 @@ +  +    old_Most_Case_Sensitive = Most_Case_Sensitive; +  ++# if SLANG_VERSION < 20000 +    if ( Most_Case_Sensitive == 0 ) +      { + 	register unsigned char	*p;		/* ptr to UpCaseKey */ +@@ -141,6 +147,7 @@ +  + 	*p = '\0'; +      } ++# endif +  +    strcpy((char *)savepattern, (char *)key); +  +@@ -162,7 +169,12 @@ + #  else +    if (Regexp != NULL) +      SLregexp_free (Regexp); +-   if (NULL == (Regexp = SLregexp_compile ((char *)key, Most_Case_Sensitive ? 0 : SLREGEXP_CASELESS))) ++ ++   if (!Most_Case_Sensitive) ++     re_flags |= SLREGEXP_CASELESS; ++   if (Most_UTF8_Mode) ++     re_flags |= SLREGEXP_UTF8; ++   if (NULL == (Regexp = SLregexp_compile ((char *)key, re_flags))) +      posn = -1; +    else +      posn = 0; +@@ -187,7 +199,7 @@ +  * Call the appropriate regular expression execute function +  */ +  +-static unsigned char *do_regexec(unsigned char *string) ++static unsigned char *do_regexec(const unsigned char *string, size_t length) + { + # ifdef	HAVE_V8_REGCOMP +    if ( regexec(regpattern, (char *)string) ) +@@ -196,40 +208,46 @@ +      return( NULL ); + # else + #  if SLANG_VERSION < 20000 +-   return ( SLang_regexp_match(string, strlen((char *)string), ®data) ); ++   return ( SLang_regexp_match(string, length, ®data) ); + #  else +-   return (unsigned char *)SLregexp_match (Regexp, (char *)string, strlen ((char *)string)); ++   return (unsigned char *)SLregexp_match (Regexp, (char *)string, length); + #  endif + # endif	/* HAVE_V8_REGCOMP */ + } +  + /* +- *  Make a upper case copy of a string.	 Also changes any "c\b" character +- *  strings into just "" so that highlighted and underlined characters +- *  can be searched. ++ *  Changes any "c\b" character strings into just "" so that ++ *  highlighted and underlined characters can be searched.  Stores in ++ *  length the new size of the string, after the aforementioned ++ *  changes. ++ * ++ *  If using a version of S-Lang that does not support case ++ *  insensitive regular expressions, this function upper cases the ++ *  input string, as well. +  * +  *  Reuses malloced memory, so a copy cannot be retained between calls. +  */ +  +-static unsigned char *StrUpCaseCopy(unsigned char *input) ++static const unsigned char *StrNormCopy(const unsigned char *input, ++					size_t *length) + { +    static unsigned char *uppercase;	/* ptr to malloced area */ +    static size_t	  bufsize;	/* size of malloced area */ +-   unsigned char	 *src;		/* ptr to source */ ++   const unsigned char	 *src;		/* ptr to source */ ++   const unsigned char	 *end;		/* ptr to end of source */ +    register unsigned char *dest;	/* ptr to destination */ +    register int	  idx;	/* index into uppercase[] */ +-   register unsigned char c;		/* source character */ +-   size_t		  length;	/* size of string to copy */ +  +    src = input; +-   length = strlen((char *)src) + 1;	/* len of line plus terminator */ ++   end = input + *length; +  +-   if ( length > bufsize ) ++   if ( *length >= bufsize ) +      { + 	if ( uppercase != (unsigned char *)NULL ) + 	  free(uppercase); +  +-	bufsize = (length > 256 ) ? length : 256;	/* 256 byte default */ ++	/* len of line plus terminator */ ++	bufsize = (*length >= 256 ) ? *length + 1 : 256; /* 256 byte default */ +  + 	uppercase = (unsigned char *)malloc(bufsize); + 	if ( uppercase == (unsigned char *)NULL ) +@@ -242,8 +260,9 @@ +  +    dest = uppercase; +  +-   for ( idx = 0 ; (c = *src) != '\0' ; src++ ) ++   for ( idx = 0 ; src < end ; src++ ) +      { ++	unsigned char c = *src; + 	if ( c == '\b' )		/* backspace */ + 	  { + 	     if ( idx-- > 0 ) +@@ -252,54 +271,79 @@ + 	else + 	  { + 	     if ( idx++ >= 0 ) +-	       *dest++ = UPCASE(c); ++	       *dest++ = NORM_CHAR(c); + 	  } +      } +  +    *dest = '\0';		/* add termination */ +  ++   *length = dest - uppercase; +    return(uppercase); + } +  + /* +- *  Given an offset into a copy made by StrUpCaseCopy() and a pointer to the ++ *  Given an offset into a copy made by StrNormCopy() and a pointer to the +  *  original string, returns a pointer into the original string corresponding +  *  to this offset. +  */ +  +-static unsigned char *GetOrigPtr(unsigned char *original, int offset) ++static const unsigned char * ++GetOrigPtr(const unsigned char *original, int offset, ++	   const unsigned char *end) + { +-   register unsigned char *p = original; ++   const unsigned char *p = original; +    register int	    j = offset; +  +     /* +      *	Step through, adjusting offset according to backspaces found +      */ +-   while ( *p != '\0' ) ++   while ( p < end ) +      { ++	const unsigned char *next; ++	if (Most_UTF8_Mode) ++	  next = SLutf8_skip_char((unsigned char*) p, (unsigned char*) end); ++	else ++	  next = p + 1; ++	size_t length_last = next - p; ++ + 	if ( *p == '\b' ) +-	  j++; ++	  j += length_last; + 	else +-	  j--; ++	  j -= length_last; +  + 	if ( j < 0 ) + 	  break; + 	else +-	  p++; ++ 	  p = next; +      } +  +    return(p); + } + #endif	/* HAVE_V8_REGCOMP || SLANG_REGEXP */ +  ++/* Returns a pointer to the first occurrence of '\n' in string beg, or ++ * end if no '\n' can be found between inclusive beg and exclusive ++ * end. ++ */ ++static const unsigned char * ++find_eol(const unsigned char *beg, const unsigned char *end) ++{ ++   const unsigned char *p; ++   if ( (p = memchr(beg, '\n', end - beg)) != NULL) ++     return p; ++   else ++     return end; ++} ++ + /* This routine returns the 1 + position of first match of key in str. +    key is modified to match the case of str. */ + /* We should try to optimize this routine */ + /* searches from beg up to but not including end */ +  +-static unsigned char *forw_search_region(unsigned char *beg, +-					 unsigned char *end, +-					 unsigned char *key) ++static const unsigned char * ++forw_search_region(const unsigned char *beg, ++		   const unsigned char *end, ++		   const unsigned char *key) + { + #if	defined(HAVE_V8_REGCOMP) || defined(SLANG_REGEXP) +     /* +@@ -307,10 +351,11 @@ +      *	to be broken into lines. +      * +      */ +-   unsigned char	*p;		/* temp pointer */ +-   unsigned char	*linebeg;	/* beginning of working line */ +-   unsigned char	*copy;		/* ptr to upper case copy */ ++   const unsigned char	*linebeg;	/* beginning of working line */ ++   const unsigned char	*lineend;	/* end of working line */ ++   const unsigned char	*norm_line;	/* ptr to normalized line */ +    unsigned char	*match;		/* ptr to matching string */ ++   int			anchored_re; +  +     /* +      *	Compile "key" into an executable regular expression +@@ -318,58 +363,35 @@ +    if ( do_regcomp(key) == 0 ) +      return(Most_Eob); +  +-    /* +-     *	For regular expression searches we need to do a line by line +-     *	search, so it is necessary to temporarily replace '\n' with '\0' +-     *	characters. +-     */ +-   p = beg; +-   linebeg = beg; ++   anchored_re = key[0] == '^'; +  +-   while (linebeg < end) ++   for ( linebeg = beg ; linebeg < end ; linebeg = lineend + 1 ) +      { +-	while ((p < end) && (*p != '\n')) p++; +-	if (p == end) break; +-	*p = 0; ++	size_t length; +  +-	if ( Most_Case_Sensitive == 0 )	/* i.e. case insensitive */ +-	  { +-	     copy = StrUpCaseCopy(linebeg); +-	     if ( copy == (unsigned char *)NULL ) +-	       return(Most_Eob); +-	  } ++ 	lineend = find_eol(linebeg, end); ++ ++	length = lineend - linebeg; ++	if (0 == length) continue; /* Skip empty lines. */ ++ ++	norm_line = StrNormCopy(linebeg, &length); ++	if ( norm_line == NULL ) ++	  return(Most_Eob); +  + 	/* + 	 * Quick sanity check for beginning of line archored tests. +-	 * If 1st char of key is "^", then the character before linebeg (which +-	 * must be beyond the start of the window), must be a "\n", +-	 * otherwise do_regexec() isn't called. ++	 * If 1st char of key is "^", then the character before ++	 * linebeg (which must be within the buffer), must be a "\n". + 	 */ +-	if (  +-# if 0 +-	     ((*key != '^')  +-	      || (linebeg > Most_Win->beg_pos && linebeg[-1] == '\n')) +-	     && +-#endif +-	     (match = do_regexec(Most_Case_Sensitive ? linebeg : copy))) ++	if ( !(anchored_re && (linebeg <= Most_Beg || linebeg[-1] != '\n')) ++	     && (match = do_regexec(norm_line, length)) ) + 	  { +-	     *p = '\n'; +-	     if ( Most_Case_Sensitive == 0 ) +-	       { +-		/* +-		 *  Use offset into "copy" as idx to find point in +-		 *  real line. +-		 */ +-		  return( GetOrigPtr(linebeg, match - copy) ); +-	       } +-	     else +-	       { +-		  return( match ); +-	       } ++	     /* ++	      *  Use offset into "norm_line" as idx to find point in ++	      *  real line. ++	      */ ++	     return( GetOrigPtr(linebeg, match - norm_line, lineend) ); + 	  } +- +-	*p++ = '\n'; +-	linebeg = p; +      } +  +    return(Most_Eob); +@@ -475,23 +497,18 @@ +  *  pattern "key". +  */ +  +-static unsigned char *back_search_region(unsigned char *beg, +-					 unsigned char *end, +-					 unsigned char *key) ++static const unsigned char * ++back_search_region(const unsigned char *beg, ++		   const unsigned char *end, ++		   const unsigned char *key) + { + #if	defined(HAVE_V8_REGCOMP) || defined(SLANG_REGEXP) +-   register unsigned char	*p; +-   unsigned char		*endp,		/* end of line */ +-   *lastmatch,	/* last match in line */ ++   const unsigned char	*p; ++   const unsigned char	*endp,		/* end of line */ ++   *lastmatch,		/* last match in line */ +    *endprevline,	/* end of line before this one */ +    *match;		/* ptr to matching string */ +-   unsigned char		savec;		/* last char on line */ +- +-    /* +-     *	Compile "key" into an executable regular expression +-     */ +-   if ( do_regcomp(key) == 0 ) +-     return(Most_Eob); ++   int			anchored_re; +  +     /* +      *	Starting from the end of the buffer, break the buffer into lines +@@ -501,84 +518,60 @@ +      *	and isn't that what we want to do in a reverse search. +      */ +    endp = end; +-   lastmatch = Most_Eob; +-   while ( 1 )			/* forever loop */ +-     { +-	if ( (endp < beg) ) +-	  return(Most_Eob);		/* Reach start of buffer, no match */ ++   endprevline = end; ++   match = Most_Eob; +  +-	/* Find the real end of current line */ +-	if ( (p = (unsigned char *)strchr((char *)endp, '\n')) != NULL ) +-	  endp = p; +- +-	savec = *endp; +-	*endp = '\0';			/* terminate line with NULL */ ++   /* Find out whether the regexp attempts to match a line boundary. ++    * In this case, only a match on the full line should be attempted. ++    */ ++   anchored_re = key[strlen((const char *) key)-1] == '$'; +  ++   while ( endp > beg ) ++     { + 	/* Find the beginning of line */ + 	for ( p = endp - 1 ; (p >= beg) && (*p != '\n') ; p-- ) + 	  { + 	  } +  ++	if ( p < beg ) ++	  break; ++ + 	endprevline = p; +  +-	p++;			/* point to 1st char after newline */ ++	/* ++	 * Quick sanity check for end of line archored tests.  If last ++	 * char of key is "$", then the character after endp (which ++	 * must be within the buffer), must be a "\n". ++	 */ ++	if ( anchored_re && endp < Most_Eob && endp[0] != '\n' ) ++	  { ++	     endp = p; ++	     continue; ++	  } +  + 	/* + 	 *  Keep searching forward in this line till no more matches + 	 */ +-	if ( Most_Case_Sensitive == 0 )		/* i.e. case insensitive */ ++	do + 	  { +-	     unsigned char	*copy;		/* ptr to upper case copy */ +-	     unsigned char	*savecopy;	/* copy of "copy" */ +- +-	     copy = StrUpCaseCopy(p); +-	     if ( copy == (unsigned char *)NULL ) +-	       return(Most_Eob); ++	     lastmatch = match; +  +-	     savecopy = copy; +- +-	    /* +-	     * Quick sanity check for beginning of line archored tests. +-	     * Must be at start of line. +-	     */ +-	     while ( ((*key != '^') || (copy == savecopy)) +-		    && (match = do_regexec(copy)) ) +-	       { +-		  if ( GetOrigPtr(p, match - savecopy) > end ) +-		    break; +-		  lastmatch = match; +-		  if ( *lastmatch == '\0' )	/* key must be "$" or "^" */ +-		    break; +-		  copy = lastmatch + 1;		/* character after match */ +-	       } ++	     if (Most_UTF8_Mode) ++	       p = SLutf8_skip_char((unsigned char*) p, (unsigned char*) endp); ++	     else ++	       p++; +  +-	     if ( lastmatch != Most_Eob )	/* found a match */ +-	       lastmatch = GetOrigPtr(p, lastmatch - savecopy); +-	  } +-	else +-	  { +-	    /* +-	     * Quick sanity check for beginning of line archored tests. +-	     * Must be at start of buffer or start of line +-	     */ +-	     while ( ( (*key != '^') || (p == endprevline + 1) ) +-		    && (match = do_regexec(p)) ) +-	       { +-		  if ( match > end ) +-		    break; +-		  lastmatch = match; +-		  if ( *lastmatch == '\0' )	/* key must be "$" or "^" */ +-		    break; +-		  p = lastmatch + 1;		/* character after match */ +-	       } ++	     match = forw_search_region(p, endp, key); + 	  } ++	while ( match <= endp ); +  +-	*endp = savec; + 	if ( lastmatch != Most_Eob )	/* found a match */ + 	  return(lastmatch); +  + 	endp = endprevline; +      } ++ ++   return(Most_Eob);		/* Reached start of buffer, no match */ + #else +    char ch, char1, work[256]; +    unsigned char *pos; +@@ -670,15 +663,15 @@ + #endif	/* HAVE_V8_REGCOMP || SLANG_REGEXP */ + } +  +-int most_search(unsigned char *from, int repeat, int *col) ++long long most_search(const unsigned char *from, int repeat, long long *col) + { +     /* return the line match was found as well as line number, +      * search from i on; assume that line_array match the i so we need +      * no initial lookup */ +  +-   int test, save_line, the_col, row, s_len; ++   long long test, save_line, the_col, row, s_len; +    char string[300]; +-   unsigned char *pos; ++   const unsigned char *pos; +    unsigned int save_ofs; +    unsigned int found_ofs; +  +@@ -687,7 +680,10 @@ +    save_line = Most_C_Line; +    found_ofs = Most_Eob - Most_Beg; +    *col = 0; +-   s_len = strlen (Most_Search_Str); ++   if (Most_UTF8_Mode) ++     s_len = SLutf8_strlen (Most_Search_Str, 0); ++   else ++     s_len = strlen ((char *) Most_Search_Str); +    pos = from; +  +    if (*Most_Search_Str) +--- most-4.10.2.orig/src/search.h ++++ most-4.10.2/src/search.h +@@ -6,7 +6,7 @@ + extern int Most_Case_Sensitive; + extern int Most_Search_Dir; + #define MOST_SEARCH_BUF_LEN	256 +-extern char Most_Search_Str[MOST_SEARCH_BUF_LEN]; +-extern int most_search(unsigned char *, int, int *); ++extern unsigned char Most_Search_Str[MOST_SEARCH_BUF_LEN]; ++extern long long most_search(const unsigned char *, int, long long *); + #endif +  +--- most-4.10.2.orig/src/window.c ++++ most-4.10.2/src/window.c +@@ -48,10 +48,11 @@ +  + Most_Window_Type *Most_Win; + Most_Window_Type *Most_Top_Win; +-int Most_Top_Line;		       /* row number of top window */ +-int Most_Curs_Row; +-int Most_Curs_Col; +-int Most_Column = 1; ++long long Most_Top_Line;		       /* row number of top window */ ++long long Most_Curs_Row; ++long long Most_Curs_Col; ++/* The leftmost visible column. */ ++long long Most_Column = 1; + int Most_Restore_Width_To = 0; + char Most_Mini_Buf[256]; + unsigned long Most_Curs_Offset; +@@ -156,7 +157,7 @@ + 	SLsmg_write_nchars (buf + point, len - point); + 	if (col < SLtt_Screen_Cols) + 	  break; +-	buf++; point--; len--;      /* FIXME for UTF-8 */ ++	buf++; point--; len--; +      } +    SLsmg_erase_eol (); +    SLsmg_gotorc (SLtt_Screen_Rows - 1, col); +@@ -227,6 +228,8 @@ + { +    SLang_RLine_Info_Type *rli; +    unsigned int flags = SL_RLINE_BLINK_MATCH; ++   if (Most_UTF8_Mode) ++     flags |= SL_RLINE_UTF8_MODE; +     +    if (NULL == (rli = SLrline_open (SLtt_Screen_Cols, flags))) +      return NULL; +@@ -258,7 +261,7 @@ +  +    /* do not use default.  The up arrow can always get it back. */ +    if ((what != NULL)  +-       && (*what) && (what != Most_Search_Str)) ++       && (*what) && (what != (char *) Most_Search_Str)) +      { + 	if (-1 == SLrline_set_line (Most_RLI, what)) + 	  return -1; +@@ -593,7 +596,8 @@ +    unsigned int num_chars; +    unsigned int field_width, info_len; +    unsigned char *eob; +-   int r, x; ++   int r; ++   long long x; +  +    eob = Most_Eob; + #if MOST_HAS_MMAP +@@ -601,20 +605,20 @@ +      eob = Most_Beg + Most_Buf->mmap_size; + #endif +     +-   if (eob == Most_Beg) x = 100; ++   if (eob == Most_Beg) x = 100LL; +    else +      { +-	x = Most_C_Offset * 100; ++	x = Most_C_Offset * 100LL; + 	x = x / (eob - Most_Beg); +      } +  +    if (Most_C_Line + (Most_Win->bot - Most_Win->top + 1) >= Most_Num_Lines) +-     x = 100; ++     x = 100LL; +  +    /* for files with end of file above the bottom row (due to window manipulations) */ +-   if (x > 100) x = 100; ++   if (x > 100LL) x = 100LL; +  +-   sprintf (info, "(%d,%d) %d%%", Most_C_Line, Most_Column, x); ++   sprintf (info, "(%lld,%lld) %d%%", Most_C_Line, Most_Column, (int)x); +  +    r = Most_Win->bot + 1; +    most_goto_rc (r,1); +--- most-4.10.2.orig/src/window.h ++++ most-4.10.2/src/window.h +@@ -5,11 +5,11 @@ + typedef struct _Most_Window_Type + { +    unsigned long top_offset; /* offset of top line of window from bob */ +-   int beg_line;             /* line number of top */ +-   int curs_line;            /* line number of curs pos */ +-   int curs_col;             /* column number of curs pos */ ++   long long beg_line;       /* line number of top */ ++   long long curs_line;      /* line number of curs pos */ ++   long long curs_col;       /* column number of curs pos */ +    unsigned long curs_offset;  /* pos of cursor from bob*/ +-   int col;                  /* column offset */ ++   long long col;             /* column offset */ +    int n_lines;              /* number of lines of buffer (mode dependent) */ +    int top;                  /* screen location of top */ +    int bot;                  /* screen location of bot */ +@@ -29,9 +29,9 @@ + extern Most_Window_Type *Most_Win; + extern Most_Window_Type *Most_Top_Win; + extern unsigned long Most_Curs_Offset; +-extern int Most_Column; +-extern int Most_Curs_Row; +-extern int Most_Curs_Col; ++extern long long Most_Column; ++extern long long Most_Curs_Row; ++extern long long Most_Curs_Col; + #define MOST_MINI_BUF_LEN	256 + extern char Most_Mini_Buf[MOST_MINI_BUF_LEN]; + extern int Most_Selective_Display; diff --git a/abs/extra-testing/numlockx/PKGBUILD b/abs/extra-testing/numlockx/PKGBUILD new file mode 100644 index 0000000..172cceb --- /dev/null +++ b/abs/extra-testing/numlockx/PKGBUILD @@ -0,0 +1,26 @@ +# $Id: PKGBUILD 19225 2008-11-17 22:12:15Z thayer $ +# Contributor: Tom Newsom <Jeepster@gmx.co.uk> +# Contributor: Travis Willard <travisw@wmpub.ca>  +# Maintainer: Thayer Williams <thayer@archlinux.org>  + +pkgname=numlockx +pkgver=1.1 +pkgrel=4 +pkgdesc="Turns on the numlock key in X11" +arch=('i686' 'x86_64') +license=('MIT') +url="http://ktown.kde.org/~seli/numlockx/" +depends=('libxtst') +source=(http://ktown.kde.org/~seli/$pkgname/$pkgname-$pkgver.tar.gz) +md5sums=('127d9dfbbbe6dbec62cc78db340f913c') + +build() { +	cd $srcdir/$pkgname-$pkgver +	./configure --prefix=/usr x_includes=/usr/include/X11 \ +		x_libraries=/usr/lib || return 1 +	make || return 1 +	make prefix=$pkgdir/usr install || return 1 + +    # Install the custom MIT license +    install -D LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE || return 1 +} diff --git a/abs/extra-testing/terminus-font/PKGBUILD b/abs/extra-testing/terminus-font/PKGBUILD new file mode 100644 index 0000000..c3be90c --- /dev/null +++ b/abs/extra-testing/terminus-font/PKGBUILD @@ -0,0 +1,20 @@ +# Maintainer: Vesa Kaihlavirta <vegai@iki.fi> +# Contributor: Kristoffer Fossgård <kfs1@online.no> +pkgname=terminus-font +pkgver=4.30 +pkgrel=1 +pkgdesc="A superb, monospace bitmap font (for X11 and console)" +depends=(xorg-fonts-encodings xorg-fonts-alias xorg-font-utils fontconfig) +replaces=(xserver-terminus-fonts) +arch=(i686 x86_64) +source=(http://www.is-vn.bg/hamster/$pkgname-$pkgver.tar.gz) +url="http://www.is-vn.bg/hamster/jimmy-en.html" +install=terminus-font.install +license=('GPL-2') + +build() {  +  cd $startdir/src/$pkgname-$pkgver +  ./configure --prefix=/usr --x11dir=/usr/share/fonts/local/ --psfdir=/usr/share/kbd/consolefonts/ +  make DESTDIR=$startdir/pkg install +} +md5sums=('6f8bd95b593851f9f5c210a9d33cbbf1') diff --git a/abs/extra-testing/terminus-font/install.proto b/abs/extra-testing/terminus-font/install.proto new file mode 100644 index 0000000..37f0b55 --- /dev/null +++ b/abs/extra-testing/terminus-font/install.proto @@ -0,0 +1,27 @@ +# arg 1: the new package version  + post_install() { + echo -n "Updating font cache... "  + /usr/bin/fc-cache + cd /usr/share/fonts/local + /usr/bin/mkfontdir + /usr/bin/mkfontscale +# cp ../encodings/encodings.dir ./encodings.dir + echo "done." + echo "Note that local fonts are now (with xorg-7.0) in /usr/share/fonts/local/" + } + +# # arg 1: the new package version  +# # arg 2: the old package version  + post_upgrade() {  + post_install $1  + }  +# +# # arg 1: the old package version  + post_remove() {  + /usr/bin/fc-cache + }  + +op=$1  +shift  + +$op $* diff --git a/abs/extra-testing/terminus-font/terminus-font.install b/abs/extra-testing/terminus-font/terminus-font.install new file mode 100644 index 0000000..e17fb4f --- /dev/null +++ b/abs/extra-testing/terminus-font/terminus-font.install @@ -0,0 +1,21 @@ +# arg 1: the new package version +post_install() { +  echo -n "Updating font cache... " +  fc-cache -f > /dev/null +  mkfontscale /usr/share/fonts/local +  mkfontdir /usr/share/fonts/local +  echo "done." +  echo "Note: terminus-font is in /usr/share/fonts/local/" +} + +# # arg 1: the new package version +# # arg 2: the old package version +post_upgrade() { +  post_install $1 +} +# +# # arg 1: the old package version +post_remove() { +  post_install $1 +} + | 
