main.c revision 8857
1327Sjkh#ifndef lint
28857Srgrimesstatic char *rcsid = "$Id: main.c,v 1.8 1994/12/06 00:51:44 jkh Exp $";
3327Sjkh#endif
4327Sjkh
5327Sjkh/*
6327Sjkh *
7327Sjkh * FreeBSD install - a package for the installation and maintainance
8327Sjkh * of non-core utilities.
9327Sjkh *
10327Sjkh * Redistribution and use in source and binary forms, with or without
11327Sjkh * modification, are permitted provided that the following conditions
12327Sjkh * are met:
13327Sjkh * 1. Redistributions of source code must retain the above copyright
14327Sjkh *    notice, this list of conditions and the following disclaimer.
15327Sjkh * 2. Redistributions in binary form must reproduce the above copyright
16327Sjkh *    notice, this list of conditions and the following disclaimer in the
17327Sjkh *    documentation and/or other materials provided with the distribution.
18327Sjkh *
19327Sjkh * Jordan K. Hubbard
20327Sjkh * 18 July 1993
21327Sjkh *
22327Sjkh * This is the add module.
23327Sjkh *
24327Sjkh */
25327Sjkh
26327Sjkh#include "lib.h"
27327Sjkh#include "info.h"
28327Sjkh
294996Sjkhstatic char Options[] = "acdDe:fikrRpLqImvhl:";
30327Sjkh
31327Sjkhint	Flags		= 0;
32327SjkhBoolean AllInstalled	= FALSE;
33411SjkhBoolean Quiet		= FALSE;
34379Sjkhchar *InfoPrefix	= "";
35383Sjkhchar *PlayPen		= NULL;
36392Sjkhchar *CheckPkg		= NULL;
37327Sjkh
38327Sjkhint
39327Sjkhmain(int argc, char **argv)
40327Sjkh{
41327Sjkh    int ch;
42327Sjkh    char **pkgs, **start;
43327Sjkh    char *prog_name = argv[0];
44327Sjkh
45327Sjkh    pkgs = start = argv;
46327Sjkh    while ((ch = getopt(argc, argv, Options)) != EOF)
47327Sjkh	switch(ch) {
48327Sjkh	case 'a':
49327Sjkh	    AllInstalled = TRUE;
50327Sjkh	    break;
51327Sjkh
52327Sjkh	case 'v':
53327Sjkh	    Verbose = TRUE;
54327Sjkh	    /* Reasonable definition of 'everything' */
55327Sjkh	    Flags = SHOW_COMMENT | SHOW_DESC | SHOW_PLIST | SHOW_INSTALL |
564996Sjkh		SHOW_DEINSTALL | SHOW_REQUIRE | SHOW_DISPLAY | SHOW_MTREE;
57327Sjkh	    break;
58327Sjkh
59327Sjkh	case 'I':
60327Sjkh	    Flags |= SHOW_INDEX;
61327Sjkh	    break;
62327Sjkh
63327Sjkh	case 'p':
64327Sjkh	    Flags |= SHOW_PREFIX;
65327Sjkh	    break;
66327Sjkh
67327Sjkh	case 'c':
68327Sjkh	    Flags |= SHOW_COMMENT;
69327Sjkh	    break;
70327Sjkh
71327Sjkh	case 'd':
72327Sjkh	    Flags |= SHOW_DESC;
73327Sjkh	    break;
74327Sjkh
754996Sjkh	case 'D':
764996Sjkh	    Flags |= SHOW_DISPLAY;
774996Sjkh	    break;
784996Sjkh
79327Sjkh	case 'f':
80327Sjkh	    Flags |= SHOW_PLIST;
81327Sjkh	    break;
82327Sjkh
83327Sjkh	case 'i':
84327Sjkh	    Flags |= SHOW_INSTALL;
85327Sjkh	    break;
86327Sjkh
87327Sjkh	case 'k':
88327Sjkh	    Flags |= SHOW_DEINSTALL;
89327Sjkh	    break;
90327Sjkh
91327Sjkh	case 'r':
92327Sjkh	    Flags |= SHOW_REQUIRE;
93327Sjkh	    break;
94327Sjkh
954996Sjkh	case 'R':
964996Sjkh	    Flags |= SHOW_REQBY;
974996Sjkh	    break;
984996Sjkh
99411Sjkh	case 'L':
100411Sjkh	    Flags |= SHOW_FILES;
101411Sjkh	    break;
102411Sjkh
1034996Sjkh	case 'm':
1044996Sjkh	    Flags |= SHOW_MTREE;
1054996Sjkh	    break;
1064996Sjkh
107379Sjkh	case 'l':
108379Sjkh	    InfoPrefix = optarg;
109379Sjkh	    break;
110379Sjkh
111411Sjkh	case 'q':
112411Sjkh	    Quiet = TRUE;
113411Sjkh	    break;
114411Sjkh
115383Sjkh	case 't':
116383Sjkh	    PlayPen = optarg;
117383Sjkh	    break;
118383Sjkh
119392Sjkh	case 'e':
120392Sjkh	    CheckPkg = optarg;
121392Sjkh	    break;
122392Sjkh
123327Sjkh	case 'h':
124327Sjkh	case '?':
125327Sjkh	default:
126327Sjkh	    usage(prog_name, NULL);
127327Sjkh	    break;
128327Sjkh	}
129327Sjkh
1308857Srgrimes    argc -= optind;
131327Sjkh    argv += optind;
132327Sjkh
133327Sjkh    /* Set some reasonable defaults */
134327Sjkh    if (!Flags)
1354996Sjkh	Flags = SHOW_COMMENT | SHOW_DESC | SHOW_REQBY;
136327Sjkh
137327Sjkh    /* Get all the remaining package names, if any */
138327Sjkh    while (*argv)
139327Sjkh	*pkgs++ = *argv++;
140327Sjkh
141327Sjkh    /* If no packages, yelp */
142392Sjkh    if (pkgs == start && !AllInstalled && !CheckPkg)
143327Sjkh	usage(prog_name, "Missing package name(s)");
144327Sjkh    *pkgs = NULL;
145327Sjkh    return pkg_perform(start);
146327Sjkh}
147327Sjkh
148327Sjkhvoid
149327Sjkhusage(const char *name, const char *fmt, ...)
150327Sjkh{
151327Sjkh    va_list args;
152327Sjkh
153327Sjkh    va_start(args, fmt);
154327Sjkh    if (fmt) {
155327Sjkh	fprintf(stderr, "%s: ", name);
156327Sjkh	vfprintf(stderr, fmt, args);
157327Sjkh	fprintf(stderr, "\n\n");
158327Sjkh    }
159327Sjkh    va_end(args);
160327Sjkh    fprintf(stderr, "Usage: %s [args] pkg [ .. pkg ]\n", name);
161327Sjkh    fprintf(stderr, "Where args are one or more of:\n\n");
162327Sjkh    fprintf(stderr, "-a         show all installed packages (if any)\n");
163327Sjkh    fprintf(stderr, "-I         print 'index' of packages\n");
164327Sjkh    fprintf(stderr, "-c         print `one line comment'\n");
165327Sjkh    fprintf(stderr, "-d         print description\n");
1664996Sjkh    fprintf(stderr, "-D         print install notice\n");
167327Sjkh    fprintf(stderr, "-f         show packing list\n");
168327Sjkh    fprintf(stderr, "-i         show install script\n");
169327Sjkh    fprintf(stderr, "-k         show deinstall script\n");
170327Sjkh    fprintf(stderr, "-r         show requirements script\n");
1714996Sjkh    fprintf(stderr, "-R         show packages depending on this package\n");
172327Sjkh    fprintf(stderr, "-p         show prefix\n");
173379Sjkh    fprintf(stderr, "-l <str>   Prefix each info catagory with <str>\n");
1744996Sjkh    fprintf(stderr, "-L         show intalled files\n");
1754996Sjkh    fprintf(stderr, "-q         minimal output (``quiet'' mode)\n");
176327Sjkh    fprintf(stderr, "-v         show all information\n");
177383Sjkh    fprintf(stderr, "-t temp    use temp as template for mktemp()\n");
1781667Sasami    fprintf(stderr, "-e pkg     returns 0 if pkg is installed, 1 otherwise\n");
1794996Sjkh    fprintf(stderr, "\n[no args = -c -d -R]\n");
180327Sjkh    exit(1);
181327Sjkh}
182