~marnold128/disabled-linuxing

This thread contains a patchset. You're looking at the original emails, but you may wish to use the patch review UI. Review patch
4

[PATCH 1/5] Delete splitm.c Support code for a feature that was never implemented, might make readd it if i get to that point again

Details
Message ID
<20220203044837.14074-1-matt@thegnuguru.org>
DKIM signature
missing
Download raw message
Patch: +0 -417
From: Matt Arnold <adeodatus@sdf.org>

---
 splitm.c | 417 -------------------------------------------------------
 1 file changed, 417 deletions(-)
 delete mode 100644 splitm.c

diff --git a/splitm.c b/splitm.c
deleted file mode 100644
index e9798cb..0000000
--- a/splitm.c
@@ -1,417 +0,0 @@
/*
 * Copyright (c) 1987, 1993, 1994
 *	The Regents of the University of California.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 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.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
 */

#include <sys/cdefs.h>
//__FBSDID("$FreeBSD$");

#define OFF_MAX INT_MAX
#define MAXBSIZE 4096
#ifndef lint
static const char copyright[] =
"@(#) Copyright (c) 1987, 1993, 1994\n\
	The Regents of the University of California.  All rights reserved.\n";
#endif

#ifndef lint
static const char sccsid[] = "@(#)split.c	8.2 (Berkeley) 4/16/94";
#endif
#include <bsd/bsd.h>
#include <values.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <ctype.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <limits.h>
#include <locale.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <regex.h>
#include <sysexits.h>

#define DEFLINE	1000			/* Default num lines per file. */

static off_t	 bytecnt;		/* Byte count to split on. */
static off_t	 chunks = 0;		/* Chunks count to split into. */
static long	 numlines;		/* Line count to split on. */
static int	 file_open;		/* If a file open. */
static int	 ifd = -1, ofd = -1;	/* Input/output file descriptors. */
static char	 bfr[MAXBSIZE];		/* I/O buffer. */
static char	 fname[MAXPATHLEN];	/* File name prefix. */
static regex_t	 rgx;
static int	 pflag;
static bool	 dflag;
static long	 sufflen = 2;		/* File name suffix length. */

static void newfile(void);
static void split1(void);
static void split2(void);
static void split3(void);
static void usage(void);

int
main(int argc, char **argv)
{
	intmax_t bytecnti;
	long scale;
	int ch;
	char *ep, *p;

	setlocale(LC_ALL, "");

	dflag = false;
	while ((ch = getopt(argc, argv, "0123456789a:b:dl:n:p:")) != -1)
		switch (ch) {
		case '0': case '1': case '2': case '3': case '4':
		case '5': case '6': case '7': case '8': case '9':
			/*
			 * Undocumented kludge: split was originally designed
			 * to take a number after a dash.
			 */
			if (numlines == 0) {
				p = argv[optind - 1];
				if (p[0] == '-' && p[1] == ch && !p[2])
					numlines = strtol(++p, &ep, 10);
				else
					numlines =
					    strtol(argv[optind] + 1, &ep, 10);
				if (numlines <= 0 || *ep)
					errx(EX_USAGE,
					    "%s: illegal line count", optarg);
			}
			break;
		case 'a':		/* Suffix length */
			if ((sufflen = strtol(optarg, &ep, 10)) <= 0 || *ep)
				errx(EX_USAGE,
				    "%s: illegal suffix length", optarg);
			break;
		case 'b':		/* Byte count. */
			errno = 0;
			if ((bytecnti = strtoimax(optarg, &ep, 10)) <= 0 ||
			    strchr("kKmMgG", *ep) == NULL || errno != 0)
				errx(EX_USAGE,
				    "%s: illegal byte count", optarg);
			if (*ep == 'k' || *ep == 'K')
				scale = 1024;
			else if (*ep == 'm' || *ep == 'M')
				scale = 1024 * 1024;
			else if (*ep == 'g' || *ep == 'G')
				scale = 1024 * 1024 * 1024;
			else
				scale = 1;
			if (bytecnti > OFF_MAX / scale)
				errx(EX_USAGE, "%s: offset too large", optarg);
			bytecnt = (off_t)(bytecnti * scale);
			break;
		case 'd':		/* Decimal suffix */
			dflag = true;
			break;
		case 'l':		/* Line count. */
			if (numlines != 0)
				usage();
			if ((numlines = strtol(optarg, &ep, 10)) <= 0 || *ep)
				errx(EX_USAGE,
				    "%s: illegal line count", optarg);
			break;
		case 'n':		/* Chunks. */
			if (!isdigit((unsigned char)optarg[0]) ||
			    (chunks = (size_t)strtoul(optarg, &ep, 10)) == 0 ||
			    *ep != '\0') {
				errx(EX_USAGE, "%s: illegal number of chunks",
				     optarg);
			}
			break;

		case 'p':		/* pattern matching. */
			if (regcomp(&rgx, optarg, REG_EXTENDED|REG_NOSUB) != 0)
				errx(EX_USAGE, "%s: illegal regexp", optarg);
			pflag = 1;
			break;
		default:
			usage();
		}
	argv += optind;
	argc -= optind;

	if (*argv != NULL) {			/* Input file. */
		if (strcmp(*argv, "-") == 0)
			ifd = STDIN_FILENO;
		else if ((ifd = open(*argv, O_RDONLY, 0)) < 0)
			err(EX_NOINPUT, "%s", *argv);
		++argv;
	}
	if (*argv != NULL)			/* File name prefix. */
		if (strlcpy(fname, *argv++, sizeof(fname)) >= sizeof(fname))
			errx(EX_USAGE, "file name prefix is too long");
	if (*argv != NULL)
		usage();

	if (strlen(fname) + (unsigned long)sufflen >= sizeof(fname))
		errx(EX_USAGE, "suffix is too long");
	if (pflag && (numlines != 0 || bytecnt != 0 || chunks != 0))
		usage();

	if (numlines == 0)
		numlines = DEFLINE;
	else if (bytecnt != 0 || chunks != 0)
		usage();

	if (bytecnt && chunks)
		usage();

	if (ifd == -1)				/* Stdin by default. */
		ifd = 0;

	if (bytecnt) {
		split1();
		exit (0);
	} else if (chunks) {
		split3();
		exit (0);
	}
	split2();
	if (pflag)
		regfree(&rgx);
	exit(0);
}

/*
 * split1 --
 *	Split the input by bytes.
 */
static void
split1(void)
{
	off_t bcnt;
	char *C;
	ssize_t dist, len;
	int nfiles;

	nfiles = 0;

	for (bcnt = 0;;)
		switch ((len = read(ifd, bfr, MAXBSIZE))) {
		case 0:
			exit(0);
		case -1:
			err(EX_IOERR, "read");
			/* NOTREACHED */
		default:
			if (!file_open) {
				if (!chunks || (nfiles < chunks)) {
					newfile();
					nfiles++;
				}
			}
			if (bcnt + len >= bytecnt) {
				dist = bytecnt - bcnt;
				if (write(ofd, bfr, dist) != dist)
					err(EX_IOERR, "write");
				len -= dist;
				for (C = bfr + dist; len >= bytecnt;
				    len -= bytecnt, C += bytecnt) {
					if (!chunks || (nfiles < chunks)) {
					newfile();
						nfiles++;
					}
					if (write(ofd,
					    C, bytecnt) != bytecnt)
						err(EX_IOERR, "write");
				}
				if (len != 0) {
					if (!chunks || (nfiles < chunks)) {
					newfile();
						nfiles++;
					}
					if (write(ofd, C, len) != len)
						err(EX_IOERR, "write");
				} else
					file_open = 0;
				bcnt = len;
			} else {
				bcnt += len;
				if (write(ofd, bfr, len) != len)
					err(EX_IOERR, "write");
			}
		}
}

/*
 * split2 --
 *	Split the input by lines.
 */
static void
split2(void)
{
	long lcnt = 0;
	FILE *infp;

	/* Stick a stream on top of input file descriptor */
	if ((infp = fdopen(ifd, "r")) == NULL)
		err(EX_NOINPUT, "fdopen");

	/* Process input one line at a time */
	while (fgets(bfr, sizeof(bfr), infp) != NULL) {
		const int len = strlen(bfr);

		/* If line is too long to deal with, just write it out */
		if (bfr[len - 1] != '\n')
			goto writeit;

		/* Check if we need to start a new file */
		if (pflag) {
			regmatch_t pmatch;

			pmatch.rm_so = 0;
			pmatch.rm_eo = len - 1;
			if (regexec(&rgx, bfr, 0, &pmatch, REG_STARTEND) == 0)
				newfile();
		} else if (lcnt++ == numlines) {
			newfile();
			lcnt = 1;
		}

writeit:
		/* Open output file if needed */
		if (!file_open)
			newfile();

		/* Write out line */
		if (write(ofd, bfr, len) != len)
			err(EX_IOERR, "write");
	}

	/* EOF or error? */
	if (ferror(infp))
		err(EX_IOERR, "read");
	else
		exit(0);
}

/*
 * split3 --
 *	Split the input into specified number of chunks
 */
static void
split3(void)
{
	struct stat sb;

	if (fstat(ifd, &sb) == -1) {
		err(1, "stat");
		/* NOTREACHED */
	}

	if (chunks > sb.st_size) {
		errx(1, "can't split into more than %d files",
		    (int)sb.st_size);
		/* NOTREACHED */
	}

	bytecnt = sb.st_size / chunks;
	split1();
}


/*
 * newfile --
 *	Open a new output file.
 */
static void
newfile(void)
{
	long i, maxfiles, tfnum;
	static long fnum;
	static char *fpnt;
	char beg, end;
	int pattlen;

	if (ofd == -1) {
		if (fname[0] == '\0') {
			fname[0] = 'x';
			fpnt = fname + 1;
		} else {
			fpnt = fname + strlen(fname);
		}
		ofd = fileno(stdout);
	}

	if (dflag) {
		beg = '0';
		end = '9';
	}
	else {
		beg = 'a';
		end = 'z';
	}
	pattlen = end - beg + 1;

	/* maxfiles = pattlen^sufflen, but don't use libm. */
	for (maxfiles = 1, i = 0; i < sufflen; i++)
		if (LONG_MAX / pattlen < maxfiles)
			errx(EX_USAGE, "suffix is too long (max %ld)", i);
		else
			maxfiles *= pattlen;

	if (fnum == maxfiles)
		errx(EX_DATAERR, "too many files");

	/* Generate suffix of sufflen letters */
	tfnum = fnum;
	i = sufflen - 1;
	do {
		fpnt[i] = tfnum % pattlen + beg;
		tfnum /= pattlen;
	} while (i-- > 0);
	fpnt[sufflen] = '\0';

	++fnum;
	if (!freopen(fname, "w", stdout))
		err(EX_IOERR, "%s", fname);
	file_open = 1;
}

static void
usage(void)
{
	(void)fprintf(stderr,
"usage: split [-l line_count] [-a suffix_length] [file [prefix]]\n"
"       split -b byte_count[K|k|M|m|G|g] [-a suffix_length] [file [prefix]]\n"
"       split -n chunk_count [-a suffix_length] [file [prefix]]\n"
"       split -p pattern [-a suffix_length] [file [prefix]]\n");
	exit(EX_USAGE);
}

-- 
2.30.2

[PATCH 2/5] vsss.conf.in renamed to vsss.conf.in.matt, Now user must select what conffile they want before using

Details
Message ID
<20220203044837.14074-2-matt@thegnuguru.org>
In-Reply-To
<20220203044837.14074-1-matt@thegnuguru.org> (view parent)
DKIM signature
missing
Download raw message
Patch: +0 -2
From: Matt Arnold <adeodatus@sdf.org>

---
 vsss.conf.in => vsss.conf.in.matt | 2 --
 1 file changed, 2 deletions(-)
 rename vsss.conf.in => vsss.conf.in.matt (92%)

diff --git a/vsss.conf.in b/vsss.conf.in.matt
similarity index 92%
rename from vsss.conf.in
rename to vsss.conf.in.matt
index 2af8904..48e5a8d 100644
--- a/vsss.conf.in
+++ b/vsss.conf.in.matt
@@ -4,8 +4,6 @@ PIPE_COLOR="1;33;45m"
export PIPE_COLOR
audio_bckend="padsp"
spkedit="pluma" 
QT_SELECT=4; 
export QT_SELECT
speak_bckend() {

    if [ -f /tmp/vsss.lock ]
-- 
2.30.2

[PATCH 3/5] Add a proper makefile for screen graphics

Details
Message ID
<20220203044837.14074-3-matt@thegnuguru.org>
In-Reply-To
<20220203044837.14074-1-matt@thegnuguru.org> (view parent)
DKIM signature
missing
Download raw message
Patch: +5 -0
From: Matt Arnold <adeodatus@sdf.org>

---
 Makefile | 5 +++++
 1 file changed, 5 insertions(+)
 create mode 100644 Makefile

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..d2eb5ee
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,5 @@
CC=gcc
all:
	$(CC) -o pcg colorize-pipe.c -lm
clean:
	rm -f pcg
-- 
2.30.2

[PATCH 4/5] Fix some gtk warnings, get others in the process

Details
Message ID
<20220203044837.14074-4-matt@thegnuguru.org>
In-Reply-To
<20220203044837.14074-1-matt@thegnuguru.org> (view parent)
DKIM signature
missing
Download raw message
Patch: +2 -1
From: Matt Arnold <adeodatus@sdf.org>

---
 mklip.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/mklip.py b/mklip.py
index 14c2c3c..aa376f9 100755
--- a/mklip.py
+++ b/mklip.py
@@ -31,7 +31,8 @@ Copyright (c) 2014 Matt Arnold
# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE

"""

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk
import dbus
import dbus.service
-- 
2.30.2

[PATCH 5/5] Remove unneaded files from repo daisy converter will be moved to a more appropriate place

Details
Message ID
<20220203044837.14074-5-matt@thegnuguru.org>
In-Reply-To
<20220203044837.14074-1-matt@thegnuguru.org> (view parent)
DKIM signature
missing
Download raw message
Patch: +0 -299
From: Matt Arnold <adeodatus@sdf.org>

---
 daisyxmltotxt.py |  56 -----------
 ls.txt           | 243 -----------------------------------------------
 2 files changed, 299 deletions(-)
 delete mode 100755 daisyxmltotxt.py
 delete mode 100644 ls.txt

diff --git a/daisyxmltotxt.py b/daisyxmltotxt.py
deleted file mode 100755
index 35de87c..0000000
--- a/daisyxmltotxt.py
@@ -1,56 +0,0 @@
#!/usr/bin/env python
# daisyxmtotxt.py: Extract content from DAISY XML
# Dump to Unicode text file
# (C) Matt Arnold 2015
# Premission to use this code is given under the
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 
# See http://www.wtfpl.net/about/


from sys import argv, exit
import re
import textwrap
import BeautifulSoup 
from StringIO import StringIO

junk_tags = ['style', 'script', '[document]', 'head', 'title']
def isjunk(element):
    if element.parent.name in junk_tags:
        return False
    elif re.match('<!--.*-->', str(element)):
        return False
    return True


if len(argv) < 3:
    
    print "Usage: <input.xml> <output.txt>"
    exit(1)
outw = 80
if len(argv) == 4 and  argv[3].isdigit():
    outw = int(argv[3])
    
fp = open(argv[1])
unparsed = fp.read()
fp.close()
soup = BeautifulSoup.BeautifulSoup(unparsed)

utext = soup.findAll(text=True)
ctext = filter(isjunk, utext)
buffer = StringIO()

for t in ctext:

    buffer.write(t.encode('utf-8'))





mt = textwrap.dedent(buffer.getvalue()).strip()
ftm = textwrap.fill(mt, width=outw)

op = open(argv[2], 'w+')
op.write(ftm)
op.close()
exit(0)
diff --git a/ls.txt b/ls.txt
deleted file mode 100644
index dab7333..0000000
--- a/ls.txt
@@ -1,243 +0,0 @@
LS(1)                            User Commands                           LS(1)



NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List  information  about  the FILEs (the current directory by default).
       Sort entries alphabetically if none of -cftuvSUX nor --sort  is  speci‐
       fied.

       Mandatory  arguments  to  long  options are mandatory for short options
       too.

       -a, --all
              do not ignore entries starting with .

       -A, --almost-all
              do not list implied . and ..

       --author
              with -l, print the author of each file

       -b, --escape
              print C-style escapes for nongraphic characters

       --block-size=SIZE
              scale   sizes   by   SIZE   before   printing    them.     E.g.,
              `--block-size=M'  prints sizes in units of 1,048,576 bytes.  See
              SIZE format below.

       -B, --ignore-backups
              do not list implied entries ending with ~

       -c     with -lt: sort by, and show, ctime (time of last modification of
              file  status  information)  with -l: show ctime and sort by name
              otherwise: sort by ctime, newest first

       -C     list entries by columns

       --color[=WHEN]
              colorize the output.   WHEN  defaults  to  `always'  or  can  be
              `never' or `auto'.  More info below

       -d, --directory
              list  directory entries instead of contents, and do not derefer‐
              ence symbolic links

       -D, --dired
              generate output designed for Emacs' dired mode

       -f     do not sort, enable -aU, disable -ls --color

       -F, --classify
              append indicator (one of */=>@|) to entries

       --file-type
              likewise, except do not append `*'

       --format=WORD
              across -x, commas -m, horizontal -x, long -l, single-column  -1,
              verbose -l, vertical -C

       --full-time
              like -l --time-style=full-iso

       -g     like -l, but do not list owner

       --group-directories-first
              group directories before files.

              augment  with  a  --sort option, but any use of --sort=none (-U)
              disables grouping

       -G, --no-group
              in a long listing, don't print group names

       -h, --human-readable
              with -l, print sizes in human readable format (e.g., 1K 234M 2G)

       --si   likewise, but use powers of 1000 not 1024

       -H, --dereference-command-line
              follow symbolic links listed on the command line

       --dereference-command-line-symlink-to-dir
              follow each command line symbolic link that points to  a  direc‐
              tory

       --hide=PATTERN
              do  not  list implied entries matching shell PATTERN (overridden
              by -a or -A)

       --indicator-style=WORD
              append indicator with style WORD to entry names: none (default),
              slash (-p), file-type (--file-type), classify (-F)

       -i, --inode
              print the index number of each file

       -I, --ignore=PATTERN
              do not list implied entries matching shell PATTERN

       -k     like --block-size=1K

       -l     use a long listing format

       -L, --dereference
              when showing file information for a symbolic link, show informa‐
              tion for the file the link references rather than for  the  link
              itself

       -m     fill width with a comma separated list of entries

       -n, --numeric-uid-gid
              like -l, but list numeric user and group IDs

       -N, --literal
              print  raw entry names (don't treat e.g. control characters spe‐
              cially)

       -o     like -l, but do not list group information

       -p, --indicator-style=slash
              append / indicator to directories

       -q, --hide-control-chars
              print ? instead of non graphic characters

       --show-control-chars
              show non graphic characters as-is  (default  unless  program  is
              `ls' and output is a terminal)

       -Q, --quote-name
              enclose entry names in double quotes

       --quoting-style=WORD
              use  quoting style WORD for entry names: literal, locale, shell,
              shell-always, c, escape

       -r, --reverse
              reverse order while sorting

       -R, --recursive
              list subdirectories recursively

       -s, --size
              print the allocated size of each file, in blocks

       -S     sort by file size

       --sort=WORD
              sort by WORD instead of name: none -U, extension  -X,  size  -S,
              time -t, version -v

       --time=WORD
              with  -l,  show time as WORD instead of modification time: atime
              -u, access -u, use -u, ctime -c, or  status  -c;  use  specified
              time as sort key if --sort=time

       --time-style=STYLE
              with  -l, show times using style STYLE: full-iso, long-iso, iso,
              locale, +FORMAT.  FORMAT is interpreted like `date';  if  FORMAT
              is  FORMAT1<newline>FORMAT2, FORMAT1 applies to non-recent files
              and FORMAT2 to recent files; if STYLE is prefixed with `posix-',
              STYLE takes effect only outside the POSIX locale

       -t     sort by modification time, newest first

       -T, --tabsize=COLS
              assume tab stops at each COLS instead of 8

       -u     with  -lt:  sort  by, and show, access time with -l: show access
              time and sort by name otherwise: sort by access time

       -U     do not sort; list entries in directory order

       -v     natural sort of (version) numbers within text

       -w, --width=COLS
              assume screen width instead of current value

       -x     list entries by lines instead of by columns

       -X     sort alphabetically by entry extension

       -Z, --context
              print any SELinux security context of each file

       -1     list one file per line

       --help display this help and exit

       --version
              output version information and exit

       SIZE may be (or may be an integer optionally followed by) one  of  fol‐
       lowing: KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T,
       P, E, Z, Y.

       Using color to distinguish file types is disabled both by  default  and
       with  --color=never.  With --color=auto, ls emits color codes only when
       standard output is connected to a terminal.  The LS_COLORS  environment
       variable can change the settings.  Use the dircolors command to set it.

   Exit status:
       0      if OK,

       1      if minor problems (e.g., cannot access subdirectory),

       2      if serious trouble (e.g., cannot access command-line argument).

AUTHOR
       Written by Richard M. Stallman and David MacKenzie.

REPORTING BUGS
       Report ls bugs to bug-coreutils@gnu.org
       GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
       General help using GNU software: <http://www.gnu.org/gethelp/>
       Report ls translation bugs to <http://translationproject.org/team/>

COPYRIGHT
       Copyright  ©  2011  Free Software Foundation, Inc.  License GPLv3+: GNU
       GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
       This is free software: you are free  to  change  and  redistribute  it.
       There is NO WARRANTY, to the extent permitted by law.

SEE ALSO
       The  full  documentation  for ls is maintained as a Texinfo manual.  If
       the info and ls programs are properly installed at your site, the  com‐
       mand

              info coreutils 'ls invocation'

       should give you access to the complete manual.



GNU coreutils 8.12.197-032bb    September 2011                           LS(1)
-- 
2.30.2
Reply to thread Export thread (mbox)