msgget.c revision 3f54fd611f536639ec30dd53c48e5ec1897cc7d9
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder/***********************************************************************
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens Elkner* *
e6d40133bc9f858308654afb1262b8b483ec5922Till Mossakowski* This software is part of the ast package *
7b1dc4100fa5a3afee36f6eb379a067a1a0f7c3cChristian Maeder* Copyright (c) 2000-2011 AT&T Intellectual Property *
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu Prodescu* and is licensed under the *
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder* Eclipse Public License, Version 1.0 *
3f69b6948966979163bdfe8331c38833d5d90ecdChristian Maeder* by AT&T Intellectual Property *
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder* *
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder* A copy of the License is available at *
cfe294850faf3d3dbcc68828f31c20532ea57557Christian Maeder* http://www.eclipse.org/org/documents/epl-v10.html *
e6d40133bc9f858308654afb1262b8b483ec5922Till Mossakowski* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
cfe294850faf3d3dbcc68828f31c20532ea57557Christian Maeder* *
cfe294850faf3d3dbcc68828f31c20532ea57557Christian Maeder* Information and Software Systems Research *
36e5bfa68ec2bac960e5b9d3c5613debea36c0e8Christian Maeder* AT&T Research *
4f9fc8b01e3c01d538a12e6327241c8fc16bc102Christian Maeder* Florham Park NJ *
68a0dfd3b2ae76877534ec1495aec6128dfbd287Christian Maeder* *
36e5bfa68ec2bac960e5b9d3c5613debea36c0e8Christian Maeder* Glenn Fowler <gsf@research.att.com> *
2119c0874c93fc1cdfea381bcfea69e8fdb8b6e2Christian Maeder* *
2119c0874c93fc1cdfea381bcfea69e8fdb8b6e2Christian Maeder***********************************************************************/
36e5bfa68ec2bac960e5b9d3c5613debea36c0e8Christian Maeder#pragma prototyped
cfe294850faf3d3dbcc68828f31c20532ea57557Christian Maeder/*
d3f192025f2836285d9705a959542350e057f281Christian Maeder * Glenn Fowler
d3f192025f2836285d9705a959542350e057f281Christian Maeder * AT&T Research
d3f192025f2836285d9705a959542350e057f281Christian Maeder */
d3f192025f2836285d9705a959542350e057f281Christian Maeder
d3f192025f2836285d9705a959542350e057f281Christian Maederstatic const char usage[] =
d3f192025f2836285d9705a959542350e057f281Christian Maeder"[-?\n@(#)$Id: msgget (AT&T Research) 2001-04-21 $\n]"
2eb84fc82d3ffa9116bc471fda3742bd9e5a24bbChristian MaederUSAGE_LICENSE
2eb84fc82d3ffa9116bc471fda3742bd9e5a24bbChristian Maeder"[+NAME?msgget - get a message from a message catalog]"
2eb84fc82d3ffa9116bc471fda3742bd9e5a24bbChristian Maeder"[+DESCRIPTION?\bmsgget\b gets the message corresponding to the parameters."
2eb84fc82d3ffa9116bc471fda3742bd9e5a24bbChristian Maeder" If \alocale\a is \b-\b then the current locale is used. \acommand\a"
d3f192025f2836285d9705a959542350e057f281Christian Maeder" may be specified for command specific messages. \acatalog\a specifies"
d3f192025f2836285d9705a959542350e057f281Christian Maeder" the message catalog name. [\aset\a.]]\anumber\a identifies the message"
cfe294850faf3d3dbcc68828f31c20532ea57557Christian Maeder" by message \anumber\a and an optional message \aset\a; if specified as"
7b1dc4100fa5a3afee36f6eb379a067a1a0f7c3cChristian Maeder" \b-\b then the message set and number are determined by looking up"
d3f192025f2836285d9705a959542350e057f281Christian Maeder" \atext\a in the corresponding \bC\b locale message catalog.]"
d3f192025f2836285d9705a959542350e057f281Christian Maeder
d3f192025f2836285d9705a959542350e057f281Christian Maeder"\n"
d3f192025f2836285d9705a959542350e057f281Christian Maeder"\nlocale [command:]catalog [set.]number [ text ]\n"
d3f192025f2836285d9705a959542350e057f281Christian Maeder"\n"
d3f192025f2836285d9705a959542350e057f281Christian Maeder
d3f192025f2836285d9705a959542350e057f281Christian Maeder"[+SEE ALSO?\biconv\b(1), \bmsgcc\b(1), \bmsggen\b(1)]"
d3f192025f2836285d9705a959542350e057f281Christian Maeder;
d3f192025f2836285d9705a959542350e057f281Christian Maeder
d3f192025f2836285d9705a959542350e057f281Christian Maeder#include <ast.h>
d3f192025f2836285d9705a959542350e057f281Christian Maeder#include <error.h>
d3f192025f2836285d9705a959542350e057f281Christian Maeder#include <mc.h>
d3f192025f2836285d9705a959542350e057f281Christian Maeder
d3f192025f2836285d9705a959542350e057f281Christian Maederint
d3f192025f2836285d9705a959542350e057f281Christian Maedermain(int argc, char** argv)
d3f192025f2836285d9705a959542350e057f281Christian Maeder{
d3f192025f2836285d9705a959542350e057f281Christian Maeder register Mc_t* mc;
cfe294850faf3d3dbcc68828f31c20532ea57557Christian Maeder register char* s;
7b1dc4100fa5a3afee36f6eb379a067a1a0f7c3cChristian Maeder char* loc;
d3f192025f2836285d9705a959542350e057f281Christian Maeder char* cmd;
7b1dc4100fa5a3afee36f6eb379a067a1a0f7c3cChristian Maeder char* cat;
50dce6b011347f92377adb8bbabaeeb80975e86dChristian Maeder char* msg;
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder int set;
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder int num;
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder Sfio_t* sp;
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder char path[PATH_MAX];
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder NoP(argc);
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder error_info.id = "msgget";
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder for (;;)
cfe294850faf3d3dbcc68828f31c20532ea57557Christian Maeder {
cfe294850faf3d3dbcc68828f31c20532ea57557Christian Maeder switch (optget(argv, usage))
7b1dc4100fa5a3afee36f6eb379a067a1a0f7c3cChristian Maeder {
d3f192025f2836285d9705a959542350e057f281Christian Maeder case '?':
d3f192025f2836285d9705a959542350e057f281Christian Maeder error(ERROR_USAGE|4, "%s", opt_info.arg);
d3f192025f2836285d9705a959542350e057f281Christian Maeder continue;
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder case ':':
d3f192025f2836285d9705a959542350e057f281Christian Maeder error(2, "%s", opt_info.arg);
d3f192025f2836285d9705a959542350e057f281Christian Maeder continue;
d3f192025f2836285d9705a959542350e057f281Christian Maeder }
d3f192025f2836285d9705a959542350e057f281Christian Maeder break;
d3f192025f2836285d9705a959542350e057f281Christian Maeder }
d3f192025f2836285d9705a959542350e057f281Christian Maeder argv += opt_info.index;
d3f192025f2836285d9705a959542350e057f281Christian Maeder if (error_info.errors || !(loc = *argv++) || !(cmd = *argv++) || !(s = *argv++))
d3f192025f2836285d9705a959542350e057f281Christian Maeder error(ERROR_USAGE|4, "%s", optusage(NiL));
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder if (streq(s, "-"))
cfe294850faf3d3dbcc68828f31c20532ea57557Christian Maeder set = num = 0;
d3f192025f2836285d9705a959542350e057f281Christian Maeder else
d3f192025f2836285d9705a959542350e057f281Christian Maeder mcindex(s, NiL, &set, &num);
d3f192025f2836285d9705a959542350e057f281Christian Maeder if (!(msg = *argv++))
d3f192025f2836285d9705a959542350e057f281Christian Maeder msg = "";
d3f192025f2836285d9705a959542350e057f281Christian Maeder else if (*argv)
7b1dc4100fa5a3afee36f6eb379a067a1a0f7c3cChristian Maeder error(ERROR_USAGE|4, "%s", optusage(NiL));
d3f192025f2836285d9705a959542350e057f281Christian Maeder if (streq(loc, "-"))
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder loc = 0;
36e5bfa68ec2bac960e5b9d3c5613debea36c0e8Christian Maeder if (cat = strchr(cmd, ':'))
36e5bfa68ec2bac960e5b9d3c5613debea36c0e8Christian Maeder *cat++ = 0;
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder if (!mcfind(loc, cmd, LC_MESSAGES, 0, path, sizeof(path)) && (!cat || !mcfind(loc, cat, LC_MESSAGES, 0, path, sizeof(path))))
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder {
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder if (cat)
cfe294850faf3d3dbcc68828f31c20532ea57557Christian Maeder *--cat = ':';
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder error(3, "%s: cannot locate message catalog", cmd);
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder }
d3f192025f2836285d9705a959542350e057f281Christian Maeder if (!(sp = sfopen(NiL, path, "r")))
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder error(ERROR_SYSTEM|3, "%s: cannot read message catalog", path);
d3f192025f2836285d9705a959542350e057f281Christian Maeder if (!(mc = mcopen(sp)))
61e38a4f194d3adc66646326c938eb9263a2f39bChristian Maeder error(3, "%s: invalid message catalog", path);
7b1dc4100fa5a3afee36f6eb379a067a1a0f7c3cChristian Maeder if (set)
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder s = mcget(mc, set, num, msg);
d3f192025f2836285d9705a959542350e057f281Christian Maeder else
41f19dd5103acd1adf0343bf6f0096a260290117Christian Maeder s = errorx(loc, cmd, cat, msg);
50dce6b011347f92377adb8bbabaeeb80975e86dChristian Maeder sfputr(sfstdout, s, '\n');
68a0dfd3b2ae76877534ec1495aec6128dfbd287Christian Maeder return error_info.errors != 0;
68a0dfd3b2ae76877534ec1495aec6128dfbd287Christian Maeder}
68a0dfd3b2ae76877534ec1495aec6128dfbd287Christian Maeder