Browse Source

merge changes from newtasksel branch back to trunk

tags/2.01
Joey Hess 17 years ago
parent
commit
a80b5780c6
100 changed files with 7712 additions and 11638 deletions
  1. +15
    -29
      Makefile
  2. +10
    -30
      README
  3. +2
    -1
      README.translators
  4. +0
    -3
      TODO
  5. +0
    -696
      data.c
  6. +0
    -64
      data.h
  7. +51
    -2
      debian/changelog
  8. +6
    -5
      debian/control
  9. +1
    -1
      debian/copyright
  10. +0
    -4
      debian/dirs
  11. +0
    -2
      debian/docs
  12. +1
    -0
      debian/po/POTFILES.in
  13. +63
    -0
      debian/po/cs.po
  14. +65
    -0
      debian/po/eu.po
  15. +65
    -0
      debian/po/fr.po
  16. +60
    -0
      debian/po/lt.po
  17. +65
    -0
      debian/po/sk.po
  18. +61
    -0
      debian/po/templates.pot
  19. +65
    -0
      debian/po/uk.po
  20. +4
    -0
      debian/postinst
  21. +1
    -0
      debian/rules
  22. +19
    -0
      debian/templates
  23. +0
    -61
      macros.h
  24. +2
    -1
      makedesc.pl
  25. +2
    -2
      po/Makefile
  26. +174
    -197
      po/bg.po
  27. +179
    -203
      po/bs.po
  28. +177
    -205
      po/ca.po
  29. +31
    -211
      po/cs.po
  30. +174
    -202
      po/cy.po
  31. +166
    -182
      po/da.po
  32. +178
    -207
      po/de.po
  33. +34
    -215
      po/el.po
  34. +158
    -187
      po/es.po
  35. +191
    -207
      po/eu.po
  36. +198
    -213
      po/fi.po
  37. +36
    -226
      po/fr.po
  38. +181
    -209
      po/gl.po
  39. +60
    -196
      po/he.po
  40. +159
    -186
      po/hu.po
  41. +183
    -203
      po/id.po
  42. +34
    -217
      po/it.po
  43. +174
    -203
      po/ja.po
  44. +29
    -205
      po/ko.po
  45. +30
    -209
      po/lt.po
  46. +160
    -188
      po/nb.po
  47. +177
    -205
      po/nl.po
  48. +174
    -200
      po/nn.po
  49. +158
    -187
      po/pl.po
  50. +174
    -201
      po/pt.po
  51. +170
    -189
      po/pt_BR.po
  52. +176
    -205
      po/ro.po
  53. +175
    -204
      po/ru.po
  54. +32
    -211
      po/sk.po
  55. +174
    -202
      po/sl.po
  56. +171
    -201
      po/sq.po
  57. +177
    -204
      po/sv.po
  58. +15
    -183
      po/tasksel.pot
  59. +196
    -215
      po/tr.po
  60. +193
    -211
      po/uk.po
  61. +157
    -186
      po/zh_CN.po
  62. +158
    -187
      po/zh_TW.po
  63. +0
    -881
      slangui.c
  64. +0
    -32
      slangui.h
  65. +0
    -55
      strutl.c
  66. +0
    -10
      strutl.h
  67. +28
    -5
      tasks/README
  68. +0
    -12
      tasks/broadband
  69. +0
    -44
      tasks/c-dev
  70. +1
    -0
      tasks/catalan
  71. +1
    -0
      tasks/chinese-s
  72. +1
    -0
      tasks/chinese-t
  73. +1
    -0
      tasks/cyrillic
  74. +1
    -0
      tasks/danish
  75. +7
    -0
      tasks/desktop
  76. +0
    -20
      tasks/dialup
  77. +1
    -0
      tasks/french
  78. +0
    -21
      tasks/games
  79. +1
    -0
      tasks/german
  80. +1
    -0
      tasks/greek
  81. +2
    -0
      tasks/hebrew
  82. +28
    -0
      tasks/italian
  83. +1
    -0
      tasks/japanese
  84. +0
    -14
      tasks/java-dev
  85. +0
    -22
      tasks/junior
  86. +0
    -22
      tasks/kernel-compile
  87. +1
    -0
      tasks/korean
  88. +0
    -40
      tasks/laptop
  89. +1
    -0
      tasks/lithuanian
  90. +0
    -12
      tasks/lsb
  91. +0
    -15
      tasks/news-server
  92. +1
    -0
      tasks/norwegian
  93. +0
    -19
      tasks/office
  94. +242
    -294
      tasks/po/bg.po
  95. +402
    -267
      tasks/po/bs.po
  96. +259
    -301
      tasks/po/ca.po
  97. +236
    -287
      tasks/po/cs.po
  98. +250
    -296
      tasks/po/cy.po
  99. +252
    -305
      tasks/po/da.po
  100. +253
    -301
      tasks/po/de.po

+ 15
- 29
Makefile View File

@@ -1,29 +1,14 @@
PROGRAM=tasksel
DOMAIN=debian-tasks
TASKDESC=$(DOMAIN).desc
TASKDIR=/usr/share/tasksel
DESCDIR=tasks
DESCPO=$(DESCDIR)/po
CC=gcc
CFLAGS=-g -Wall #-Os
DEBUG=1
ifeq (0,$(DEBUG))
DEFS=-DUTF8 -DVERSION=\"$(VERSION)\" -DPACKAGE=\"$(PROGRAM)\" -DLOCALEDIR=\"/usr/share/locale\" \
-DTASKDIR=\"$(TASKDIR)\"
else
DEFS=-DUTF8 -DVERSION=\"$(VERSION)\" -DPACKAGE=\"$(PROGRAM)\" -DLOCALEDIR=\"/usr/share/locale\" \
-DTASKDIR=\".\" -DDEBUG
endif
VERSION=$(shell expr "`dpkg-parsechangelog 2>/dev/null |grep Version:`" : '.*Version: \(.*\)' | cut -d - -f 1)
LIBS=-lslang -ltextwrap #-lccmalloc -ldl
OBJS=tasksel.o slangui.o data.o util.o strutl.o
LANGS=bg bs ca cs cy da de el es fi fr gl hu id it ja ko lt nb nl nn pl pt pt_BR ru sk sl sq sv tr uk zh_CN zh_TW
LANGS_DESC=bg bs ca cs cy da de el es fi fr hu id it ja ko lt nb nl nn pl pt pt_BR ru sk sl sq sv tr uk zh_CN zh_TW
LOCALEDIR=$(DESTDIR)/usr/share/locale
COMPILE = $(CC) $(CFLAGS) $(DEFS) -c
LINK = $(CC) $(CFLAGS) $(DEFS) -o

all: $(PROGRAM) $(TASKDESC) $(DESCPO)/build_stamp
all: $(TASKDESC) $(DESCPO)/build_stamp po/build_stamp

$(TASKDESC): makedesc.pl $(DESCDIR)/[a-z]??*
./doincludes.pl $(DESCDIR)
@@ -44,27 +29,28 @@ $(DESCPO)/build_stamp:
updatetaskspo:
$(MAKE) -C $(DESCPO) update LANGS="$(LANGS_DESC)"

$(PROGRAM): $(OBJS) po/build_stamp
$(LINK) $(PROGRAM) $(OBJS) $(LIBS)

install:
install -m 755 tasksel $(DESTDIR)/usr/bin
install -d $(DESTDIR)/usr/bin $(DESTDIR)$(TASKDIR) \
$(DESTDIR)/usr/lib/tasksel/tests \
$(DESTDIR)/usr/share/man/man8
install -m 755 tasksel.pl $(DESTDIR)/usr/bin/tasksel
install -m 755 tasksel-debconf $(DESTDIR)/usr/lib/tasksel/
install -m 0644 $(TASKDESC) $(DESTDIR)$(TASKDIR)
pod2man --center "Debian specific manpage" --release $(VERSION) tasksel.pod | gzip -9c > $(DESTDIR)/usr/share/man/man8/tasksel.8.gz
pod2man --section=8 --center "Debian specific manpage" --release $(VERSION) tasksel.pod | gzip -9c > $(DESTDIR)/usr/share/man/man8/tasksel.8.gz
for lang in $(LANGS); do \
[ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \
install -m 644 po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/$(PROGRAM).mo; \
[ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \
install -m 644 po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/tasksel.mo; \
done
for lang in $(LANGS_DESC); do \
[ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \
install -m 644 tasks/po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/$(DOMAIN).mo; \
[ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \
install -m 644 tasks/po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/$(DOMAIN).mo; \
done
for test in tests/*; do \
install -m 755 $$test $(DESTDIR)/usr/lib/tasksel/tests/; \
done

test:
$(MAKE) -C scratch

clean:
rm -f $(PROGRAM) $(TASKDESC) *.o *~
rm -f $(TASKDESC) *~
$(MAKE) -C po clean
$(MAKE) -C $(DESCPO) clean



+ 10
- 30
README View File

@@ -1,38 +1,18 @@
$Id: README,v 1.4 2003/09/16 23:38:46 joeyh Rel $
Task Selection UI v0.1
Nov 20, 1999
Randolph Chung <tausq@debian.org>
The interface uses debconf for consistency with the rest of the Debian
installer.

Here's a first cut at a task selection user interface.

The interface GUI is based on libslang. It has no other special library
dependencies.

On startup, the tasksel program will read
/usr/share/tasksel/debian-tasks.desc for information about what tasks are
available and their descriptions and sections. Next it will read the output
of apt-cache dumpavail. Task: fields can be used to state that a package
belongs to a task or tasks. Also, the package names are used to identify
task packages (matching "task-*").

The tasks will be presented in a simple list selection screen with
their short descriptions. Users can drill down into the tasks to
see detailed descriptions and some information about the packages in the
task.
On startup, the tasksel program will read all *.desc files in
/usr/share/tasksel/ for information about what tasks are available. The
tasks will be presented in a simple list selection screen with their short
descriptions.

On exit, tasksel executes the appropriate apt-get command to install the
selected packages. If the -t option is given, then tasksel prints out the
command line to use to stdout instead. All other messages are printed to
stderr.

The appropriate display strings in the source have been marked with gettext
macros, though I have never done any other i18n work and am not sure if it
is done correctly at the moment.

A word on building.... use make CFLAGS="-Os" to get a smaller binary. The
default build rule produces binaries with debugging symbols. You can also
turn on -DDEBUG to get extra debugging info.

Comments and suggestions are most welcome.

To get a new task added, please file a bug report on tasksel.

Debian derived distributions can add a new .desc file to
/usr/share/tasksel/ to add additional tasks, or modify/divert
debian-tasks.desc to remove tasks.

+ 2
- 1
README.translators View File

@@ -12,7 +12,8 @@ There are two directories containing translations:
Contain the phrases used in the tasks themselves.

The text in both these directories need to be translated for the
translation to be complete.
translation to be complete. You'll also need to translate the debconf
templates, of course.

Your language should be listed in LANGS and LANGS_DESC variables
in Makefile. (LANGS is for translations in po/, and LANGS_DESC


+ 0
- 3
TODO View File

@@ -1,6 +1,3 @@
$Id: TODO,v 1.11 2003/07/25 23:56:36 joeyh Rel $
- fix screen resize code (in dialogs, it doesn't work right)
- figure out how to properly install the i18n stuff
- show already installed tasks
- language tasks like spanish that include stuff like mozilla-locale-es-es
and openoffice.org-l10n-es pull in all of mozilla and openoffice, which


+ 0
- 696
data.c View File

@@ -1,696 +0,0 @@
/* $Id: data.c,v 1.20 2003/09/16 23:38:46 joeyh Rel $ */
/* data.c - encapsulates functions for reading a package listing like dpkg's available file
* Internally, packages are stored in a binary tree format to faciliate search operations
*/
#include "data.h"

#include <stdio.h>
#include <stdlib.h>
#include <search.h>
#include <string.h>
#include <ctype.h>
#include <libintl.h>

#include "slangui.h"
#include "util.h"
#include "macros.h"

#define PACKAGEFIELD "Package: "
#define TASKFIELD "Task: "
#define KEYFIELD "Key:" /* multiline; no space necessary */
#define RELEVANCEFIELD "Relevance: "
#define DEPENDSFIELD "Depends: "
#define RECOMMENDSFIELD "Recommends: "
#define SUGGESTSFIELD "Suggests: "
#define DESCRIPTIONFIELD "Description: "
#define PRIORITYFIELD "Priority: "
#define SECTIONFIELD "Section: "
#define STATUSFIELD "Status: "
#define STATUSFILE "/var/lib/dpkg/status"
#define DUMPAVAIL "apt-cache dumpavail"
#define BUF_SIZE 1024
#define MATCHFIELD(buf, s) (strncmp(buf, s, strlen(s)) == 0)
#define FIELDDATA(buf, s) (buf + strlen(s))
#define CHOMP(s) if (s[strlen(s)-1] == '\n') s[strlen(s)-1] = 0

/* module variables */
static struct package_t **_packages_enumbuf = NULL;
static int _packages_enumcount = 0;
static void *_packages_root = NULL;

static struct task_t **_tasks_enumbuf = NULL;
static int _tasks_enumcount = 0;
static void *_tasks_root = NULL;
int _tasks_count;

/* private functions */
static int packagecompare(const void *p1, const void *p2)
{
/* compares two packages by name; used for binary tree routines */
char *s1, *s2;
s1 = ((struct package_t *)p1)->name;
s2 = ((struct package_t *)p2)->name;
return strcmp(s1, s2);
}

static void packages_walk_enumerate(const void *nodep, const VISIT order, const int depth)
{
/* adds nodep to list of nodes if we haven't visited this node before */
struct package_t *datap = *(struct package_t **)nodep;
if (order == leaf || order == postorder) {
_packages_enumcount++;
_packages_enumbuf[_packages_enumcount - 1] = datap;
}
}

static void tasks_walk_enumerate(const void *nodep, const VISIT order, const int depth)
{
/* adds nodep to list of nodes if we haven't visited this node before */
struct task_t *datap = *(struct task_t **)nodep;
if (order == leaf || order == postorder) {
_tasks_enumcount++;
_tasks_enumbuf[_tasks_enumcount - 1] = datap;
}
}

static int taskcompare(const void *lp, const void *rp)
{
const struct task_t *l = (const struct task_t *)lp;
const struct task_t *r = (const struct task_t *)rp;
return strcmp(l->name, r->name);
}

static void tasks_walk_delete(const void *nodep, const VISIT order, const int depth)
{
/* deletes memory associated with nodep */
struct task_t *datap = *(struct task_t **)nodep;
int i;

if (order == leaf || order == endorder) {
tdelete((void *)datap, &_tasks_root, taskcompare);
if (datap->name) FREE(datap->name);
if (datap->packages) {
for (i = 0; i < datap->packagescount; i++) FREE(datap->packages[i]);
FREE(datap->packages);
}
FREE(datap);
}
}

static void tasks_walk_crop(const void *nodep, const VISIT order, const int depth)
{
struct task_t *datap = *(struct task_t **)nodep;

if (order == leaf || order == endorder) {
if (! datap->task_pkg || ! datap->task_pkg->shortdesc) {
if (tdelete((void *)datap, &_tasks_root, taskcompare)) {
_tasks_count--;
}
}
}
}

static void packages_walk_delete(const void *nodep, const VISIT order, const int depth)
{
/* deletes memory associated with nodep */
struct package_t *datap = *(struct package_t **)nodep;
int i;

if (order == leaf || order == endorder) {
tdelete((void *)datap, &_packages_root, packagecompare);
if (datap->name) FREE(datap->name);
if (datap->shortdesc) FREE(datap->shortdesc);
if (datap->longdesc) FREE(datap->longdesc);
if (datap->depends) {
for (i = 0; i < datap->dependscount; i++) FREE(datap->depends[i]);
FREE(datap->depends);
}
if (datap->suggests) {
for (i = 0; i < datap->suggestscount; i++) FREE(datap->suggests[i]);
FREE(datap->suggests);
}
if (datap->recommends) {
for (i = 0; i < datap->recommendscount; i++) FREE(datap->recommends[i]);
FREE(datap->recommends);
}
FREE(datap);
}
}

static int splitlinkdesc(const char *desc, char ***array)
{
/* given a comma separate list of names, returns an array with the names split into elts of the array */
char *p;
char *token;
int i = 0, elts = 1;

VERIFY(array != NULL);
*array = NULL;
if (desc == NULL) return 0;
p = (char *)desc;
while (*p != 0) if (*p++ == ',') elts++;

*array = MALLOC(sizeof(char *) * elts);
memset(*array, 0, sizeof(char *) * elts);
p = (char *)desc;
while ((token = strsep(&p, ","))) {
while (isspace(*token)) token++;
(*array)[i++] = STRDUP(token);
}

return elts;
}


void deletetask(struct tasks_t *tasks, const char *taskname) {
struct task_t *task;

task = tasks_find(tasks, taskname);
if (! task)
return;
/* TODO: free structs */
if (tdelete((void *)task, &tasks->tasks, taskcompare)) {
tasks->count--;
}
}
static struct task_t *addtask(
struct tasks_t *tasks,
const char *taskname,
const char *package)
{
struct task_t t = {0}, *task;
void *result;

t.name = (char*)taskname;
result = tfind(&t, &tasks->tasks, taskcompare);
if (result) {
task = *(struct task_t**)result;
} else {
task = NEW(struct task_t);
task->name = STRDUP(taskname);
task->task_pkg = NULL;
task->packages = MALLOC(sizeof(char*)*10);
task->packagesmax = 10;
task->packagescount = 0;
task->selected = 0;
task->relevance = 5;
tsearch(task, &tasks->tasks, taskcompare);
tasks->count++;
}

{
char const *pch;
if (*package == '\0') return task;
for (pch = package; *pch; pch++) {
if ('a' <= *pch && *pch <= 'z') continue;
if ('0' <= *pch && *pch <= '9') continue;
if (*pch == '+' || *pch == '-' || *pch == '.') continue;
return task;
}
}

if (task->packagescount >= task->packagesmax) {
ASSERT(task->packagescount == task->packagesmax);
task->packagesmax *= 2;
task->packages = REALLOC(task->packages, task->packagesmax * sizeof(char*));
}
task->packages[task->packagescount++] = STRDUP(package);

return task;
}

static struct package_t *addpackage(
struct packages_t *pkgs,
const char *name, const char *dependsdesc,
const char *recommendsdesc, const char *suggestsdesc,
const char *shortdesc, const char *longdesc,
const priority_t priority)
{
/* Adds package to the package list binary tree */
struct package_t *node = NEW(struct package_t);
void *p;
VERIFY(name != NULL);
/* DPRINTF("Adding package %s to list\n", name); */
memset(node, 0, sizeof(struct package_t));
node->name = STRDUP(name);
node->shortdesc = STRDUP(shortdesc);
node->longdesc = STRDUP(longdesc);
node->priority = priority;
node->section = NULL;
node->pseudopackage = 0;

if (dependsdesc) node->dependscount = splitlinkdesc(dependsdesc, &node->depends);
if (recommendsdesc) node->recommendscount = splitlinkdesc(recommendsdesc, &node->recommends);
if (suggestsdesc) node->suggestscount = splitlinkdesc(suggestsdesc, &node->suggests);
p = tsearch(node, &pkgs->packages, packagecompare);
VERIFY(p != NULL);
if (*(struct package_t**)p == node) {
pkgs->count++;
} else {
/* hmmm. this happens when there's a task- package and an entry in
* the task file. what to do about it? I *think* what's happening is
* the task- package is being replaced by the entry in the file, which
* would mean **p is getting leaked right now. XXX
*/
fprintf(stderr, "W: duplicate task info for %s\n", node->name);
}

return node;
}

/* public functions */
struct package_t *packages_find(const struct packages_t *pkgs, const char *name)
{
/* Given a package name, returns a pointer to the appropriate package_t
* structure or NULL if none is found */
struct package_t pkg;
void *result;
pkg.name = (char *)name;
result = tfind((void *)&pkg, &pkgs->packages, packagecompare);
if (result == NULL)
return NULL;
else
return *(struct package_t **)result;
}

struct task_t *tasks_find(const struct tasks_t *tasks, const char *name)
{
/* Given a task name, returns a pointer to the appropriate task_t
* structure or NULL if none is found */
struct task_t task;
void *result;

task.name = (char *)name;
result = tfind((void *)&task, &tasks->tasks, taskcompare);

if (result == NULL)
return NULL;
else
return *(struct task_t **)result;
}

struct package_t **packages_enumerate(const struct packages_t *packages)
{
/* Converts a packages binary tree into an array */
_packages_enumbuf = MALLOC(sizeof(struct package_t *) * packages->count);
if (_packages_enumbuf == NULL)
DIE(_("Cannot allocate memory for enumeration buffer"));
memset(_packages_enumbuf, 0, sizeof(struct package_t *) * packages->count);
_packages_enumcount = 0;
twalk((void *)packages->packages, packages_walk_enumerate);
ASSERT(_packages_enumcount == packages->count);
return _packages_enumbuf;
}

struct task_t **tasks_enumerate(const struct tasks_t *tasks)
{
/* Converts the tasks binary tree into an array. */

_tasks_enumbuf = MALLOC(sizeof(struct task_t *) * tasks->count);
if (_tasks_enumbuf == NULL)
DIE(_("Cannot allocate memory for enumeration buffer"));
memset(_tasks_enumbuf, 0, sizeof(struct task_t *) * tasks->count);
_tasks_enumcount = 0;
twalk((void *)tasks->tasks, tasks_walk_enumerate);
ASSERT(_tasks_enumcount == tasks->count);
qsort(_tasks_enumbuf, tasks->count, sizeof(struct task_t *),
taskcompare);
return _tasks_enumbuf;
}

void tasks_crop(struct tasks_t *tasks) {
_tasks_root = tasks->tasks;
_tasks_count = tasks->count;
twalk(tasks->tasks, tasks_walk_crop);
tasks->count = _tasks_count;
}

static void walktasks(const void *t, const VISIT which, const int depth)
{
struct task_t *task = *(struct task_t**)t;
int i;

if (which == postorder || which == leaf) {
fprintf(stderr, "Task %s [%s]:\n", task->name,
(task->task_pkg ? task->task_pkg->section : "misc"));
for (i = 0; i < task->packagescount; i++) {
fprintf(stderr, " %s\n", task->packages[i]);
}
}
}

static void add_translated_paragraph(char *domain, char **trans, char *msgid)
{
char *l, *msgstr;

l = msgid+strlen(msgid) - 1;
while (l[0] == '\n' || l[0] == ' ') {
l[0] = '\0';
if (l == msgid)
break;
l--;
}
msgstr = dgettext(domain, msgid);
if (*trans == NULL) {
/* '\n\n' will be appended */
*trans = MALLOC(strlen(msgstr) + 3);
**trans = '\0';
}
else {
*trans = REALLOC(*trans, strlen(*trans) + strlen(msgstr) + 3);
}
strcat(*trans, msgstr);
strcat(*trans, "\n\n");
}

void taskfile_read(char *fn, struct tasks_t *tasks, struct packages_t *pkgs,
unsigned char showempties)
{
/* Reads a task definition file, and populates internal data structures
* with information about the tasks defined therein.
*
* The format of the task definition file is a series of stanzas,
* seperated by blank lines. Each stanza is in rfc-822 format, and
* contains fields named Task, Description (with extended desc), and
* Section. (The information about what packages belong in a task is
* contained in Task fields in the Packages file.) */
FILE *f;
char buf[BUF_SIZE];
char *pkgname, *s;
char *task, *shortdesc, *longdesc, *translongdesc, *section;
int relevance = 5;
struct package_t *p;
struct task_t *t;
char *package;
int key_missing;
char *domainname, *newdomainname, *l, *startdesc;
int verbatimline;
f = fopen(fn, "r");
if (f == NULL) PERROR(fn);

/* Use a domain matching the task file that's being read, so translations
* can be found. */
domainname=STRDUP(fn);
l = strrchr(domainname, '/');
if (l) {
newdomainname=STRDUP(l+1);
FREE(domainname);
domainname = newdomainname;
}
l = strrchr(domainname, '.');
if (l)
l[0] = '\0';
while (!feof(f)) {
fgets(buf, BUF_SIZE, f);
CHOMP(buf);
if (MATCHFIELD(buf, TASKFIELD)) {
shortdesc = longdesc = section = NULL;
task = STRDUP(FIELDDATA(buf, TASKFIELD));
VERIFY(task != NULL);
key_missing=0;
while (!feof(f)) {
fgets(buf, BUF_SIZE, f);
dontmakemethink:
/* after reading the Description:, we may actually have some more fields.
* but the only way we might know this is if we've just read one of those
* fields. to ensure we don't miss it, we immediately goto the label above
* when we realise our mistake. a computer scientist would use lookahead
* for this
*/
CHOMP(buf);
if (buf[0] == 0) break;

if (MATCHFIELD(buf, SECTIONFIELD)) {
section = STRDUP(FIELDDATA(buf, SECTIONFIELD));
} else if (MATCHFIELD(buf, RELEVANCEFIELD)) {
char *data = FIELDDATA(buf, RELEVANCEFIELD);
if (strlen(data))
relevance = atoi(data);
} else if (MATCHFIELD(buf, DESCRIPTIONFIELD)) {
shortdesc = STRDUP(dgettext(domainname, FIELDDATA(buf, DESCRIPTIONFIELD)));
VERIFY(shortdesc != NULL);
do {
if (fgets(buf, BUF_SIZE, f) == 0)
break;
if (buf[0] != ' ') goto dontmakemethink;
if (longdesc == NULL) {
longdesc = (char *)MALLOC(strlen(buf) + 1);
strcpy(longdesc, buf + 1);
} else {
longdesc = realloc(longdesc, strlen(longdesc) + strlen(buf) + 1);
strcat(longdesc, buf + 1);
}
} while (buf[0] != '\n' && !feof(f));
break;
} else if (MATCHFIELD(buf, KEYFIELD)) {
do {
if (fgets(buf, BUF_SIZE, f) == 0)
break;
if (buf[0] != ' ') goto dontmakemethink;
CHOMP(buf);
pkgname=buf;
while(pkgname[0] == ' ')
pkgname++;
s=pkgname+strlen(pkgname)-1;
while(s[0] == ' ') {
s[0]='\0';
s--;
}
if (pkgname) {
if (! packages_find(pkgs, pkgname)) {
DPRINTF("task %s is missing key package %s", task, pkgname);
key_missing=1;
}
}
} while (buf[0] != '\n' && !feof(f));
}
}
/* Munge long desc to something that gettext might be able to use. */
verbatimline = 0;
l = startdesc = longdesc;
translongdesc = NULL;
while ((l = strchr(l, '\n'))) {
if (l[1] == ' ')
verbatimline = 1;
else if (l[1] == '.' && l[2] == '\n') {
/* Translate current paragraph and pass to next one */
l[0] = '\0';
add_translated_paragraph(domainname, &translongdesc, startdesc);
startdesc = l + 3;
l += 2;
verbatimline = 0;
}
else {
if (!verbatimline)
l[0] = ' ';
verbatimline = 0;
}
l++;
}
add_translated_paragraph(domainname, &translongdesc, startdesc);
FREE(longdesc);
l = longdesc = translongdesc;
/* Dirty trick: text is reformatted in reflowtext(), but
* superfluous \n are already stripped, so keep remaining ones
*/
while ((l = strchr(l, '\n')))
l[0] = '\r';

/* packages_readlist must be called before this function, so we can
* tell if any packages are in this task, and ignore it if none are */
if (showempties || (!key_missing && tasks_find(tasks, task))) {
/* This is a fake package to go with the task. I add the task-
* prefix to the package name to ensure that adding this fake
* package stomps on the toes of no real package. */
/* FIXME: It should not be necessary to do this; instead task_t
* should include description and section fields and not need an
* associated package. */
package = MALLOC(strlen(task) + 6);
package = MALLOC(6 + strlen(task));
strcpy(package, "task-"); strcat(package, task);
p = addpackage(pkgs, package, NULL, NULL, NULL, shortdesc, longdesc,
PRIORITY_UNKNOWN);
p->section = STRDUP(section);
p->pseudopackage = 1;
t = addtask(tasks, task, "");
t->task_pkg = p;
t->relevance = relevance;
}
else {
DPRINTF("skipping empty task %s", task);
deletetask(tasks, task);
}

if (task != NULL) FREE(task);
if (shortdesc != NULL) FREE(shortdesc);
if (longdesc != NULL) FREE(longdesc);
if (section != NULL) FREE(section);
}
}
if (domainname != NULL) FREE(domainname);
fclose(f);
}

void packages_readlist(struct tasks_t *tasks, struct packages_t *pkgs)
{
/* Populates internal data structures with information about available
* packages */
FILE *f;
char buf[BUF_SIZE];
char *name, *shortdesc, *longdesc;
char *dependsdesc, *recommendsdesc, *suggestsdesc, *prioritydesc, *taskdesc;
char *section;
priority_t priority;
/* XXX This is hardly idea. */
if ((f = popen(DUMPAVAIL, "r")) == NULL) PERROR(DUMPAVAIL);
while (!feof(f)) {
fgets(buf, BUF_SIZE, f);
CHOMP(buf);
if (MATCHFIELD(buf, PACKAGEFIELD)) {
/*DPRINTF("Package = %s\n", FIELDDATA(buf, PACKAGEFIELD)); */
name = shortdesc = longdesc = taskdesc = dependsdesc = recommendsdesc = suggestsdesc = section = NULL;
priority = PRIORITY_UNKNOWN;
name = STRDUP(FIELDDATA(buf, PACKAGEFIELD));
VERIFY(name != NULL);

/* look for depends/suggests and shotdesc/longdesc */
while (!feof(f)) {
fgets(buf, BUF_SIZE, f);
dontmakemethink:
/* after reading the Description:, we make actually have some more fields.
* but the only way we might know this is if we've just read one of those
* fields. to ensure we don't miss it, we immediately goto the label above
* when we realise our mistake. a computer scientist would use lookahead
* for this
*/
CHOMP(buf);
if (buf[0] == 0) break;

if (MATCHFIELD(buf, TASKFIELD)) {
taskdesc = STRDUP(FIELDDATA(buf, TASKFIELD));
VERIFY(taskdesc != NULL);
} else if (MATCHFIELD(buf, DEPENDSFIELD)) {
dependsdesc = STRDUP(FIELDDATA(buf, DEPENDSFIELD));
VERIFY(dependsdesc != NULL);
} else if (MATCHFIELD(buf, RECOMMENDSFIELD)) {
recommendsdesc = STRDUP(FIELDDATA(buf, RECOMMENDSFIELD));
VERIFY(recommendsdesc != NULL);
} else if (MATCHFIELD(buf, SUGGESTSFIELD)) {
suggestsdesc = STRDUP(FIELDDATA(buf, SUGGESTSFIELD));
VERIFY(suggestsdesc != NULL);
} else if (MATCHFIELD(buf, SECTIONFIELD)) {
section = STRDUP(FIELDDATA(buf, SECTIONFIELD));
} else if (MATCHFIELD(buf, PRIORITYFIELD)) {
prioritydesc = FIELDDATA(buf, PRIORITYFIELD);
if (strcmp(prioritydesc, "required") == 0) {
priority = PRIORITY_REQUIRED;
} else if (strcmp(prioritydesc, "important") == 0) {
priority = PRIORITY_IMPORTANT;
} else if (strcmp(prioritydesc, "standard") == 0) {
priority = PRIORITY_STANDARD;
} else if (strcmp(prioritydesc, "optional") == 0) {
priority = PRIORITY_OPTIONAL;
} else if (strcmp(prioritydesc, "extra") == 0) {
priority = PRIORITY_EXTRA;
}
} else if (MATCHFIELD(buf, DESCRIPTIONFIELD)) {
shortdesc = STRDUP(FIELDDATA(buf, DESCRIPTIONFIELD));
VERIFY(shortdesc != NULL);
do {
if (fgets(buf, BUF_SIZE, f) == 0)
break;
if (buf[0] != ' ') goto dontmakemethink;
if (buf[1] == '.') buf[1] = ' ';
if (longdesc == NULL) {
longdesc = (char *)MALLOC(strlen(buf) + 1);
strcpy(longdesc, buf + 1);
} else {
longdesc = realloc(longdesc, strlen(longdesc) + strlen(buf) + 1);
strcat(longdesc, buf + 1);
}
} while (buf[0] != '\n' && !feof(f));
break;
}
}

if (strncmp(name, "task-", 5) != 0) {
addpackage(pkgs, name, NULL, NULL, NULL, shortdesc,
NULL, priority);
} else {
struct package_t *p;
struct task_t *t;
int i;
p = addpackage(pkgs, name, dependsdesc, recommendsdesc,
suggestsdesc, shortdesc,
longdesc, priority);
#if 1
if (section && strncmp(section, "tasks-", 6) == 0) {
p->section = STRDUP(section+6);
} else {
p->section = "junk";
}
#else
p->section = STRDUP(section);
#endif
t = addtask(tasks, name+5, "");
t->task_pkg = p;
for (i = 0; i < p->dependscount; i++) {
addtask(tasks, name+5, p->depends[i]);
}
}

if (taskdesc != NULL) {
char **ts;
int tscount;
int i;

tscount = splitlinkdesc(taskdesc, &ts);
for (i = 0; i < tscount; i++) {
addtask(tasks, ts[i], name);
FREE(ts[i]);
}
FREE(ts);
}
if (name != NULL) FREE(name);
if (dependsdesc != NULL) FREE(dependsdesc);
if (recommendsdesc != NULL) FREE(recommendsdesc);
if (suggestsdesc != NULL) FREE(suggestsdesc);
if (taskdesc != NULL) FREE(taskdesc);
if (shortdesc != NULL) FREE(shortdesc);
if (longdesc != NULL) FREE(longdesc);
if (section != NULL) FREE(section);
}
};
fclose(f);

/*twalk(tasks->tasks, walktasks);*/
}

void packages_free(struct tasks_t *tasks, struct packages_t *pkgs)
{
/* Frees up memory allocated by taskfile_read and packages_readlist */
_tasks_root = tasks->tasks;
twalk(tasks->tasks, tasks_walk_delete);

_packages_root = pkgs->packages;
twalk(pkgs->packages, packages_walk_delete);
}


+ 0
- 64
data.h View File

@@ -1,64 +0,0 @@
/* $Id: data.h,v 1.10 2003/08/01 01:39:35 joeyh Rel $ */
#ifndef _DATA_H
#define _DATA_H

typedef enum {
PRIORITY_UNKNOWN = 0,
PRIORITY_REQUIRED,
PRIORITY_IMPORTANT,
PRIORITY_STANDARD,
PRIORITY_OPTIONAL,
PRIORITY_EXTRA
} priority_t;

struct package_t {
char *name;
char *shortdesc;
char *longdesc;
int dependscount;
char **depends;
int recommendscount;
char **recommends;
int suggestscount;
char **suggests;
char *section;
priority_t priority;
int selected;
int pseudopackage;
};

struct packages_t {
int count;
void *packages;
};

struct task_t {
char *name;
struct package_t *task_pkg;
char **packages;
int packagescount;
int packagesmax;
int selected;
int relevance;
};

struct tasks_t {
int count;
void *tasks;
};

/* Reads in a list of tasks from task description file */
void taskfile_read(char *fn, struct tasks_t *tasks, struct packages_t *pkgs, unsigned char showempties);
/* Reads in a list of package and package descriptions from available file */
void packages_readlist(struct tasks_t *tasks, struct packages_t *packages);
/* free memory allocated to store packages */
void packages_free(struct tasks_t *tasks, struct packages_t *packages);

void tasks_crop(struct tasks_t *tasks);

struct package_t *packages_find(const struct packages_t *packages, const char *name);
struct task_t *tasks_find(const struct tasks_t *tasks, const char *name);
struct package_t **packages_enumerate(const struct packages_t *packages);
struct task_t **tasks_enumerate(const struct tasks_t *tasks);

#endif

+ 51
- 2
debian/changelog View File

@@ -1,8 +1,57 @@
tasksel (1.53) UNRELEASED; urgency=low
tasksel (2.01) UNRELEASED; urgency=low

* Joey Hess
- Add hspell-gui to Hebrew task.
- Merge office with desktop task, dropping gnucash.
* Translations
- Eugeniy Meshcheryakov
- Updated Ukrainian translation
- Christian Perrier
- Updated POT files and PO files accordingly
- Updated French programs and debconf translations
- Kęstutis Biliūnas
- Updated Lithuanian programs and debconf translations
- Claus Hindsgaul
- Updated Danish translation

-- Christian Perrier <bubulle@kheops.frmug.org> Tue, 15 Jun 2004 08:26:08 +0200

tasksel (2.00) experimental; urgency=low

* Joey Hess
- Rewrote tasksel to use debconf for the UI, and support test programs
for flexible automatic task selection, etc.
Closes: #65992, #103363, #105718, #234216, #251419, #251638, #251639
Closes: #244949, #251743
- Tagged all the language tasks with Test-lang fields holding the
language that the task is useful for, to allow for autoselection
of languages matching the installation language.
- Add fortune-mod to the desktop task as a gnome or kde screensaver does
very silly things w/o it.
- Adopted new, stricter criteria for task additions. Removed the following
tasks, which did not meet it: c-dev, java-dev, python-dev, broadband,
dialup, laptop, junior, kernel-compile, science, tex, games, lsb,
unix-server. Some of these (laptop, etc) could be reinstated if tests
were developed for them.
Closes: #192747, #249309, #234393, #202878, #249702, #142873, #186085
Closes: #237255, #245649, #254329
- Added a dependency on liblocale-gettext-perl.
- Added a dependency on aptitude, which is used to do the work of
installing tasks, etc.
- Added a conflicts with older debconf versions that do not work
with tasksel.
- Tasksel now accepts long options in addition to the short ones.
- The -q option is not yet re-implemented, and I hope not to implement
it, as to do so would mean a lot more messing with the package
database. This breaks older base-config's, so conflict with them.
- The -a option is also not yet re-implemented.
- Add --new-install option, intended to be used by base-config to make
tasksel enter a special mode more suited for initial system installs.
- Fixes "tasksel install". Closes: #165628
- Fix man page internal section.
- Rejiggered the maintainer and uploader fields.
- Update copyright.
- Add Italian task.
* Changwoo Ryu
- Replaced old IM ami from Korean task with descent nabi and imhangul.
- Added more fonts and docs to Korean task.
@@ -16,7 +65,7 @@ tasksel (1.53) UNRELEASED; urgency=low
- Tomohiro KUBOTA (久保田智広)
- Updated Japanese tasks translation

-- Christian Perrier <bubulle@debian.org> Wed, 26 May 2004 23:08:26 -0300
-- Joey Hess <joeyh@debian.org> Tue, 8 Jun 2004 13:32:12 -0400

tasksel (1.52) unstable; urgency=high



+ 6
- 5
debian/control View File

@@ -1,16 +1,17 @@
Source: tasksel
Section: base
Priority: optional
Maintainer: Randolph Chung <tausq@debian.org>
Uploaders: Joey Hess <joeyh@debian.org>
Maintainer: Debian Install System Team <debian-boot@lists.debian.org>
Uploaders: Randolph Chung <tausq@debian.org>, Joey Hess <joeyh@debian.org>
Standards-Version: 3.6.1.0
Build-Depends: po-debconf, debhelper (>= 4), slang1-utf8-dev, gettext, dpkg-dev (>= 1.9.0), libtextwrap-dev
Build-Depends: po-debconf, debhelper (>= 4), gettext, dpkg-dev (>= 1.9.0)

Package: tasksel
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}, liblocale-gettext-perl, aptitude
Conflicts: debconf (<< 1.4.27), base-config (<< 2.27)
Description: Tool for selecting tasks for installation on Debian system
This package provides 'tasksel', a simple interface for users who
want to pick general tasks for installation on their Debian GNU/Linux
system. This program is used during the installation process, but
system. This program is used during the installation process, but
users can also use tasksel at any point.

+ 1
- 1
debian/copyright View File

@@ -1,6 +1,6 @@
This package was debianized by Randolph Chung <tausq@debian.org> on
Wed, 8 Dec 1999 21:41:46 -0700.

Upstream Author: Randolph Chung
Upstream Authors: Randolph Chung and Joey Hess

Copyright: GPLv2, see /usr/share/common-licenses/GPL

+ 0
- 4
debian/dirs View File

@@ -1,4 +0,0 @@
usr/bin
usr/share/man/man8
usr/share/locale
usr/share/tasksel

+ 0
- 2
debian/docs View File

@@ -1,2 +0,0 @@
README
TODO

+ 1
- 0
debian/po/POTFILES.in View File

@@ -0,0 +1 @@
[type: gettext/rfc822deb] templates

+ 63
- 0
debian/po/cs.po View File

@@ -0,0 +1,63 @@
#
# Translators, if you are not familiar with the PO format, gettext
# documentation is worth reading, especially sections dedicated to
# this format, e.g. by running:
# info -n '(gettext)PO Files'
# info -n '(gettext)Header Entry'
#
# Some information specific to po-debconf are available at
# /usr/share/doc/po-debconf/README-trans
# or http://www.debian.org/intl/l10n/po-debconf/README-trans
#
# Developers do not need to manually edit POT or PO files.
#
msgid ""
msgstr ""
"Project-Id-Version: tasksel\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2004-06-06 19:41-0400\n"
"PO-Revision-Date: 2004-06-10 21:00+0200\n"
"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
"Language-Team: Czech <provoz@debian.cz>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"

#. Type: multiselect
#. Choices
#: ../templates:3
msgid "${CHOICES}, manual package selection"
msgstr "${CHOICES}, ruèní výbìr balíkù"

#. Type: multiselect
#. Description
#: ../templates:4
msgid ""
"At the moment, only the core of Debian is installed. To tune the "
"installation to your needs, you can choose to install one or more of the "
"following predefined collections of software. Experienced users may prefer "
"to select packages manually."
msgstr ""
"Momentálnì je nainstalováno pouze jádro Debianu. Abyste si vyladili systém "
"dle svých potøeb, mù¾ete nyní instalovat tzv. úlohy. Úlohy jsou pøipravené "
"kolekce souvisejícího softwaru. Zku¹ení u¾ivatelé mohou vybrat balíky ruènì."

#. Type: multiselect
#. Description
#: ../templates:13
msgid "Choose software to install:"
msgstr "Zvolte programy k instalaci:"

#. Type: multiselect
#. Description
#: ../templates:13
msgid ""
"You can choose to install one or more of the following predefined "
"collections of software."
msgstr "Nyní mù¾ete nainstalovat jednu nebo více pøedpøipravených úloh."

#. Type: title
#. Description
#: ../templates:19
msgid "Debian software selection"
msgstr "Výbìr programù v Debianu"

+ 65
- 0
debian/po/eu.po View File

@@ -0,0 +1,65 @@
#
# Translators, if you are not familiar with the PO format, gettext
# documentation is worth reading, especially sections dedicated to
# this format, e.g. by running:
# info -n '(gettext)PO Files'
# info -n '(gettext)Header Entry'
# Some information specific to po-debconf are available at
# /usr/share/doc/po-debconf/README-trans
# or http://www.debian.org/intl/l10n/po-debconf/README-trans#
# Developers do not need to manually edit POT or PO files.
# Piarres Beobide Egaña <pi@beobide.net>, 2004.
#
msgid ""
msgstr ""
"Project-Id-Version: tasksel_debian_tem\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2004-06-06 19:41-0400\n"
"PO-Revision-Date: 2004-06-21 17:36+0200\n"
"Last-Translator: Piarres Beobide Egaña <pi@beobide.net>\n"
"Language-Team: Euskara <librezale@librezale.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.3.1\n"
"Plural-Forms: Plural-Forms: nplurals=2; plural=n != 1;\n"

#. Type: multiselect
#. Choices
#: ../templates:3
msgid "${CHOICES}, manual package selection"
msgstr "${CHOICES}, eskuzko pakete aukerareketa"

#. Type: multiselect
#. Description
#: ../templates:4
msgid ""
"At the moment, only the core of Debian is installed. To tune the "
"installation to your needs, you can choose to install one or more of the "
"following predefined collections of software. Experienced users may prefer "
"to select packages manually."
msgstr ""
"Momentu honetan, Debianen muina bakarrik duzu instalaturik. Instalakuntza zure beharretara egokitzeko, aurreaukeratutako pakete bilduma "
"hauetako bat edo gehiago instalatu ditzakezu. Erabiltzaile aurreratuek "
"nahiago dute banakako aukeraketa bat egitea."

#. Type: multiselect
#. Description
#: ../templates:13
msgid "Choose software to install:"
msgstr "Instalatu nahi duzun softwarea aukeratu:"

#. Type: multiselect
#. Description
#: ../templates:13
msgid ""
"You can choose to install one or more of the following predefined "
"collections of software."
msgstr "aurreaukeratutako pakete bilduma hauetako bat edo gehiago instalatu ditzakezu."

#. Type: title
#. Description
#: ../templates:19
msgid "Debian software selection"
msgstr "Debian software aukeraketa"


+ 65
- 0
debian/po/fr.po View File

@@ -0,0 +1,65 @@
#
# Translators, if you are not familiar with the PO format, gettext
# documentation is worth reading, especially sections dedicated to
# this format, e.g. by running:
# info -n '(gettext)PO Files'
# info -n '(gettext)Header Entry'
#
# Some information specific to po-debconf are available at
# /usr/share/doc/po-debconf/README-trans
# or http://www.debian.org/intl/l10n/po-debconf/README-trans
#
# Developers do not need to manually edit POT or PO files.
#
msgid ""
msgstr ""
"Project-Id-Version: tasksel 2.00 debconf\n"
"POT-Creation-Date: 2004-06-06 19:41-0400\n"
"PO-Revision-Date: 2004-06-10 21:07+0100\n"
"Last-Translator: Christian Perrier <bubulle@debian.org>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"

#. Type: multiselect
#. Choices
#: ../templates:3
msgid "${CHOICES}, manual package selection"
msgstr "${CHOICES}, choix manuel des paquets"

#. Type: multiselect
#. Description
#: ../templates:4
msgid ""
"At the moment, only the core of Debian is installed. To tune the "
"installation to your needs, you can choose to install one or more of the "
"following predefined collections of software. Experienced users may prefer "
"to select packages manually."
msgstr ""
"Actuellement, seul le système de base de Debian est installé. Pour adapter "
"l'installation à vos besoins, vou spouvez choisir d'installer un ou "
"plusieurs ensembles prédéfinis de logiciels. Les utilisateurs expérimentés "
"préféreront probablement choisir eux-mêmes les paquets à installer."

#. Type: multiselect
#. Description
#: ../templates:13
msgid "Choose software to install:"
msgstr "Logiciels à installer :"

#. Type: multiselect
#. Description
#: ../templates:13
msgid ""
"You can choose to install one or more of the following predefined "
"collections of software."
msgstr ""
"Vous pouvez choisir d'installer un ou plusieurs des ensembles suivants de "
"logiciels."

#. Type: title
#. Description
#: ../templates:19
msgid "Debian software selection"
msgstr "Sélection des logiciels Debian"

+ 60
- 0
debian/po/lt.po View File

@@ -0,0 +1,60 @@
# translation of tasksel_debian.po to Lithuanian
# This file is distributed under the same license as the tasksel package.
# Copyright (C) 2004 Free Software Foundation, Inc.
# Kęstutis Biliūnas <kebil@kaunas.init.lt>, 2004.
#
msgid ""
msgstr ""
"Project-Id-Version: tasksel_debian\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2004-06-06 19:41-0400\n"
"PO-Revision-Date: 2004-06-17 02:09+0300\n"
"Last-Translator: Kęstutis Biliūnas <kebil@kaunas.init.lt>\n"
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.3.1\n"

#. Type: multiselect
#. Choices
#: ../templates:3
msgid "${CHOICES}, manual package selection"
msgstr "${CHOICES}, rankinis paketų pasirinkimas"

#. Type: multiselect
#. Description
#: ../templates:4
msgid ""
"At the moment, only the core of Debian is installed. To tune the "
"installation to your needs, you can choose to install one or more of the "
"following predefined collections of software. Experienced users may prefer "
"to select packages manually."
msgstr ""
"Esamu momentu yra įdiegta tik esminė Debian'o dalis. Tam, kad priderinti "
"įdiegimą savo poreikiams, Jūs galite pasirinkti vieną ar kelis iš žemiau "
"apibrėžtų programinės įrangos rinkinių. Patyrę naudotojai gali teikti pirmenybę "
"rankiniam paketų pasirinkimui."

#. Type: multiselect
#. Description
#: ../templates:13
msgid "Choose software to install:"
msgstr "Pasirinkite programas įdiegimui:"

#. Type: multiselect
#. Description
#: ../templates:13
msgid ""
"You can choose to install one or more of the following predefined "
"collections of software."
msgstr ""
"Jūs galite pasirinkti vieną ar kelis iš žemiau apibrėžtų programinės "
"įrangos rinkinių."

#. Type: title
#. Description
#: ../templates:19
msgid "Debian software selection"
msgstr "Debian'o programinės įrangos pasirinkimas"


+ 65
- 0
debian/po/sk.po View File

@@ -0,0 +1,65 @@
#
# Translators, if you are not familiar with the PO format, gettext
# documentation is worth reading, especially sections dedicated to
# this format, e.g. by running:
# info -n '(gettext)PO Files'
# info -n '(gettext)Header Entry'
#
# Some information specific to po-debconf are available at
# /usr/share/doc/po-debconf/README-trans
# or http://www.debian.org/intl/l10n/po-debconf/README-trans
#
# Developers do not need to manually edit POT or PO files.
#
msgid ""
msgstr ""
"Project-Id-Version: tasksel\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2004-06-06 19:41-0400\n"
"PO-Revision-Date: 2004-06-22 16:18+0200\n"
"Last-Translator: Peter KLFMANiK Mann <Peter.Mann@tuke.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. Type: multiselect
#. Choices
#: ../templates:3
msgid "${CHOICES}, manual package selection"
msgstr "${CHOICES}, manuálny výber balíkov"

#. Type: multiselect
#. Description
#: ../templates:4
msgid ""
"At the moment, only the core of Debian is installed. To tune the "
"installation to your needs, you can choose to install one or more of the "
"following predefined collections of software. Experienced users may prefer "
"to select packages manually."
msgstr ""
"Momentálne je nainštalovaný iba základ Debianu. Aby ste si vyladili systém "
"podľa svojich potrieb, môžete teraz inštalovať tzv. úlohy. Úlohy sú pripravené "
"kolekcie súvisiaceho softvéru. Skúsení používatelia si môžu vybrať balíky "
"manuálne."

#. Type: multiselect
#. Description
#: ../templates:13
msgid "Choose software to install:"
msgstr "Zvoľte programy na inštaláciu:"

#. Type: multiselect
#. Description
#: ../templates:13
msgid ""
"You can choose to install one or more of the following predefined "
"collections of software."
msgstr "Teraz môžete inštalovať jednu alebo viac predpripravených úloh."

#. Type: title
#. Description
#: ../templates:19
msgid "Debian software selection"
msgstr "Výber programov v Debiane"


+ 61
- 0
debian/po/templates.pot View File

@@ -0,0 +1,61 @@
#
# Translators, if you are not familiar with the PO format, gettext
# documentation is worth reading, especially sections dedicated to
# this format, e.g. by running:
# info -n '(gettext)PO Files'
# info -n '(gettext)Header Entry'
#
# Some information specific to po-debconf are available at
# /usr/share/doc/po-debconf/README-trans
# or http://www.debian.org/intl/l10n/po-debconf/README-trans
#
# Developers do not need to manually edit POT or PO files.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2004-06-06 19:41-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#. Type: multiselect
#. Choices
#: ../templates:3
msgid "${CHOICES}, manual package selection"
msgstr ""

#. Type: multiselect
#. Description
#: ../templates:4
msgid ""
"At the moment, only the core of Debian is installed. To tune the "
"installation to your needs, you can choose to install one or more of the "
"following predefined collections of software. Experienced users may prefer "
"to select packages manually."
msgstr ""

#. Type: multiselect
#. Description
#: ../templates:13
msgid "Choose software to install:"
msgstr ""

#. Type: multiselect
#. Description
#: ../templates:13
msgid ""
"You can choose to install one or more of the following predefined "
"collections of software."
msgstr ""

#. Type: title
#. Description
#: ../templates:19
msgid "Debian software selection"
msgstr ""

+ 65
- 0
debian/po/uk.po View File

@@ -0,0 +1,65 @@
# translation of tasksel-templates.po to Ukrainian
#
# Translators, if you are not familiar with the PO format, gettext
# documentation is worth reading, especially sections dedicated to
# this format, e.g. by running:
# info -n '(gettext)PO Files'
# info -n '(gettext)Header Entry'
# Some information specific to po-debconf are available at
# /usr/share/doc/po-debconf/README-trans
# or http://www.debian.org/intl/l10n/po-debconf/README-trans#
# Developers do not need to manually edit POT or PO files.
# Eugeniy Meshcheryakov <eugen@univ.kiev.ua>, 2004.
#
msgid ""
msgstr ""
"Project-Id-Version: tasksel-templates_uk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2004-06-06 19:41-0400\n"
"PO-Revision-Date: 2004-06-15 22:27+0300\n"
"Last-Translator: Eugeniy Meshcheryakov <eugen@univ.kiev.ua>\n"
"Language-Team: Ukrainian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.3.1\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"

#. Type: multiselect
#. Choices
#: ../templates:3
msgid "${CHOICES}, manual package selection"
msgstr "${CHOICES}, вибрати пакунки вручну"

#. Type: multiselect
#. Description
#: ../templates:4
msgid ""
"At the moment, only the core of Debian is installed. To tune the "
"installation to your needs, you can choose to install one or more of the "
"following predefined collections of software. Experienced users may prefer "
"to select packages manually."
msgstr ""
"На даний момент, тільки встановлена тільки основна частина Debian. "
"Для того, щоб підлаштувати інсталяцію під ваші потреби, ви можете вибрати встановлення одного або кількох наступних наборів програмного забезпечення. Досвідчені користувачі, можливо, нададуть перевагу ручному вибору пакунків."

#. Type: multiselect
#. Description
#: ../templates:13
msgid "Choose software to install:"
msgstr "Виберіть програмне забезпечення для встановлення:"

#. Type: multiselect
#. Description
#: ../templates:13
msgid ""
"You can choose to install one or more of the following predefined "
"collections of software."
msgstr "Ви можете встановити один або декілька наступних наборів програмного забезпечення."

#. Type: title
#. Description
#: ../templates:19
msgid "Debian software selection"
msgstr "Вибір програмного забезпечення Debian"


+ 4
- 0
debian/postinst View File

@@ -0,0 +1,4 @@
#!/bin/sh
# Get tasksel's templates loaded up.
. /usr/share/debconf/confmodule
#DEBHELPER#

+ 1
- 0
debian/rules View File

@@ -50,6 +50,7 @@ binary-arch: build install
dh_link
dh_strip
dh_compress
dh_installdebconf
dh_fixperms
dh_installdeb
dh_shlibdeps


+ 19
- 0
debian/templates View File

@@ -0,0 +1,19 @@
Template: tasksel/first
Type: multiselect
_Choices: ${CHOICES}, manual package selection
_Description: Choose software to install:
At the moment, only the core of Debian is installed. To tune the
installation to your needs, you can choose to install one or more of the
following predefined collections of software. Experienced users may prefer
to select packages manually.

Template: tasksel/tasks
Type: multiselect
Choices: ${CHOICES}
_Description: Choose software to install:
You can choose to install one or more of the following predefined
collections of software.

Template: tasksel/title
Type: title
_Description: Debian software selection

+ 0
- 61
macros.h View File

@@ -1,61 +0,0 @@
/* $Id: macros.h,v 1.4 2001/11/22 17:53:48 tausq Rel $ */
#ifndef _MACROS_H
#define _MACROS_H

#include <stdio.h>
#include <errno.h>

#ifdef DEBUG
#define DPRINTF(fmt, arg...) \
do { \
fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
fprintf(stderr, fmt, ##arg); \
fprintf(stderr, "\n"); \
} while (0);
#define ASSERT(cond) \
if (!(cond)) { \
if (ui_running()) ui_shutdown(); \
fprintf(stderr, "ASSERTION FAILED at %s:%d! (%s)\n", __FILE__, __LINE__, #cond); \
exit(255); \
}
#define VERIFY(cond) ASSERT(cond)
#define ABORT abort()
#define STRDUP(s) safe_strdup(s)
#define MALLOC(sz) safe_malloc(sz)
#define REALLOC(x,sz) safe_realloc(x,sz)
#define FREE(p) safe_free((void **)&p);
#else
#define DPRINTF(fmt, arg...)
#define ASSERT(cond)
#define VERIFY(cond)
#define ABORT exit(255)
#define STRDUP(s) (s ? strdup(s) : NULL)
#define MALLOC(sz) malloc(sz)
#define REALLOC(x,sz) realloc(x,sz)
#define FREE(p) if (p) free(p)
#endif
/* Do you see a perl influence? :-) */
#define DIE(fmt, arg...) \
do { \
if (ui_running()) ui_shutdown(); \
fprintf(stderr, _("Fatal error encountered at %s:%d\n\t"), __FILE__, __LINE__); \
fprintf(stderr, fmt, ##arg); \
fprintf(stderr, "\n"); \
ABORT; \
} while (0);
#define PERROR(ctx) \
do { \
if (ui_running()) ui_shutdown(); \
fprintf(stderr, _("I/O error at %s:%d\n\t"), __FILE__, __LINE__); \
fprintf(stderr, "%s: %s\n", ctx, strerror(errno)); \
ABORT; \
} while (0);
#define NEW(S) (S *)MALLOC(sizeof(S))
#define _(s) gettext(s)
#define gettext_noop(s) (s)
#define N_(s) gettext_noop (s)
#endif

+ 2
- 1
makedesc.pl View File

@@ -94,7 +94,8 @@ sub processfile {
}
}

foreach (qw{task section relevance description key}) {
foreach (qw{task section relevance description key},
grep(/^test-(.*)/, keys %fields)) {
print OUT ucfirst($_).": ".$fields{$_}."\n" if length $fields{$_};
}
print OUT "\n";


+ 2
- 2
po/Makefile View File

@@ -5,8 +5,8 @@ MOS:=$(addsuffix .mo, $(LANGS))
all: $(POTFILE) $(MOS)
touch build_stamp

$(POTFILE): ../*.[ch]
$(XGETTEXT) -o $(POTFILE)-update ../*.[ch]
$(POTFILE): ../tasksel.pl
$(XGETTEXT) -o $(POTFILE)-update ../tasksel.pl
if test -f $(POTFILE); then \
if diff -I '^"POT-Creation-Date:' -I '^Report-Msgid-Bugs-To:' $(POTFILE) $(POTFILE)-update >/dev/null 2>&1; then \
rm -f $(POTFILE)-update; \


+ 174
- 197
po/bg.po View File

@@ -9,215 +9,192 @@ msgid ""
msgstr ""
"Project-Id-Version: tasksel 1.44\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2004-01-28 08:04+0100\n"
"POT-Creation-Date: 2004-06-10 09:02+0200\n"
"PO-Revision-Date: 2004-02-15 14:32+0200\n"
"Last-Translator: Ognyan Kulev <ogi@fmi.uni-sofia.bg>\n"
"Language-Team: Bulgarian <dict@linux.zonebg.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit"
"Content-Transfer-Encoding: 8bit\n"

#: ../data.c:307 ../data.c:321
msgid "Cannot allocate memory for enumeration buffer"
msgstr "Няма достатъчно памет за изброяващия буфер"

#: ../macros.h:42
#, c-format
#: ../tasksel.pl:188
msgid ""
"Fatal error encountered at %s:%d\n"
"\t"
"Usage:\n"
"tasksel install <task>\n"
"tasksel [options]; where options is any combination of:\n"
"\t-t -- test mode; don't really do anything\n"
"\t-r -- install all required-priority packages\n"
"\t-i -- install all important-priority packages\n"
"\t-s -- install all standard-priority packages\n"
"\t-n -- don't show UI; use with -r or -i usually\n"
"\t-a -- show all tasks, even those with no packages in them\n"
msgstr ""
"Фатална грешка в %s:%d\n\t"

#: ../macros.h:51
#, c-format
msgid ""
"I/O error at %s:%d\n"
"\t"
#: ../tasksel.pl:250
msgid "ignoring other selected packages in favour of manual package selection"
msgstr ""
"Входно-изходна грешка в %s:%d\n\t"

#: ../slangui.c:18 ../slangui.c:19
msgid "(no description)"
msgstr "(без описание)"

#: ../slangui.c:75
msgid "End-user"
msgstr "Краен потребител"

#: ../slangui.c:76
msgid "Hardware Support"
msgstr "Хардуерна поддръжка"

#: ../slangui.c:77