main.c revision 30221
1327Sjkh#ifndef lint
230221Scharnierstatic const char rcsid[] =
330221Scharnier	"$Id: main.c,v 1.13 1997/03/31 05:10:50 imp Exp $";
4327Sjkh#endif
5327Sjkh
6327Sjkh/*
7327Sjkh *
8327Sjkh * FreeBSD install - a package for the installation and maintainance
9327Sjkh * of non-core utilities.
10327Sjkh *
11327Sjkh * Redistribution and use in source and binary forms, with or without
12327Sjkh * modification, are permitted provided that the following conditions
13327Sjkh * are met:
14327Sjkh * 1. Redistributions of source code must retain the above copyright
15327Sjkh *    notice, this list of conditions and the following disclaimer.
16327Sjkh * 2. Redistributions in binary form must reproduce the above copyright
17327Sjkh *    notice, this list of conditions and the following disclaimer in the
18327Sjkh *    documentation and/or other materials provided with the distribution.
19327Sjkh *
20327Sjkh * Jordan K. Hubbard
21327Sjkh * 18 July 1993
22327Sjkh *
23327Sjkh * This is the add module.
24327Sjkh *
25327Sjkh */
26327Sjkh
2730221Scharnier#include <err.h>
28327Sjkh#include "lib.h"
29327Sjkh#include "info.h"
30327Sjkh
314996Sjkhstatic char Options[] = "acdDe:fikrRpLqImvhl:";
32327Sjkh
33327Sjkhint	Flags		= 0;
34327SjkhBoolean AllInstalled	= FALSE;
35411SjkhBoolean Quiet		= FALSE;
36379Sjkhchar *InfoPrefix	= "";
3711780Sjkhchar PlayPen[FILENAME_MAX];
38392Sjkhchar *CheckPkg		= NULL;
39327Sjkh
4030221Scharnierstatic void usage __P((void));
4130221Scharnier
42327Sjkhint
43327Sjkhmain(int argc, char **argv)
44327Sjkh{
45327Sjkh    int ch;
46327Sjkh    char **pkgs, **start;
47327Sjkh
48327Sjkh    pkgs = start = argv;
4924428Simp    while ((ch = getopt(argc, argv, Options)) != -1)
50327Sjkh	switch(ch) {
51327Sjkh	case 'a':
52327Sjkh	    AllInstalled = TRUE;
53327Sjkh	    break;
54327Sjkh
55327Sjkh	case 'v':
56327Sjkh	    Verbose = TRUE;
57327Sjkh	    /* Reasonable definition of 'everything' */
58327Sjkh	    Flags = SHOW_COMMENT | SHOW_DESC | SHOW_PLIST | SHOW_INSTALL |
594996Sjkh		SHOW_DEINSTALL | SHOW_REQUIRE | SHOW_DISPLAY | SHOW_MTREE;
60327Sjkh	    break;
61327Sjkh
62327Sjkh	case 'I':
63327Sjkh	    Flags |= SHOW_INDEX;
64327Sjkh	    break;
65327Sjkh
66327Sjkh	case 'p':
67327Sjkh	    Flags |= SHOW_PREFIX;
68327Sjkh	    break;
69327Sjkh
70327Sjkh	case 'c':
71327Sjkh	    Flags |= SHOW_COMMENT;
72327Sjkh	    break;
73327Sjkh
74327Sjkh	case 'd':
75327Sjkh	    Flags |= SHOW_DESC;
76327Sjkh	    break;
77327Sjkh
784996Sjkh	case 'D':
794996Sjkh	    Flags |= SHOW_DISPLAY;
804996Sjkh	    break;
814996Sjkh
82327Sjkh	case 'f':
83327Sjkh	    Flags |= SHOW_PLIST;
84327Sjkh	    break;
85327Sjkh
86327Sjkh	case 'i':
87327Sjkh	    Flags |= SHOW_INSTALL;
88327Sjkh	    break;
89327Sjkh
90327Sjkh	case 'k':
91327Sjkh	    Flags |= SHOW_DEINSTALL;
92327Sjkh	    break;
93327Sjkh
94327Sjkh	case 'r':
95327Sjkh	    Flags |= SHOW_REQUIRE;
96327Sjkh	    break;
97327Sjkh
984996Sjkh	case 'R':
994996Sjkh	    Flags |= SHOW_REQBY;
1004996Sjkh	    break;
1014996Sjkh
102411Sjkh	case 'L':
103411Sjkh	    Flags |= SHOW_FILES;
104411Sjkh	    break;
105411Sjkh
1064996Sjkh	case 'm':
1074996Sjkh	    Flags |= SHOW_MTREE;
1084996Sjkh	    break;
1094996Sjkh
110379Sjkh	case 'l':
111379Sjkh	    InfoPrefix = optarg;
112379Sjkh	    break;
113379Sjkh
114411Sjkh	case 'q':
115411Sjkh	    Quiet = TRUE;
116411Sjkh	    break;
117411Sjkh
118383Sjkh	case 't':
11911780Sjkh	    strcpy(PlayPen, optarg);
120383Sjkh	    break;
121383Sjkh
122392Sjkh	case 'e':
123392Sjkh	    CheckPkg = optarg;
124392Sjkh	    break;
125392Sjkh
126327Sjkh	case 'h':
127327Sjkh	case '?':
128327Sjkh	default:
12930221Scharnier	    usage();
130327Sjkh	    break;
131327Sjkh	}
132327Sjkh
1338857Srgrimes    argc -= optind;
134327Sjkh    argv += optind;
135327Sjkh
136327Sjkh    /* Set some reasonable defaults */
137327Sjkh    if (!Flags)
1384996Sjkh	Flags = SHOW_COMMENT | SHOW_DESC | SHOW_REQBY;
139327Sjkh
140327Sjkh    /* Get all the remaining package names, if any */
141327Sjkh    while (*argv)
142327Sjkh	*pkgs++ = *argv++;
143327Sjkh
144327Sjkh    /* If no packages, yelp */
145392Sjkh    if (pkgs == start && !AllInstalled && !CheckPkg)
14630221Scharnier	warnx("missing package name(s)"), usage();
147327Sjkh    *pkgs = NULL;
148327Sjkh    return pkg_perform(start);
149327Sjkh}
150327Sjkh
15130221Scharnierstatic void
15230221Scharnierusage()
153327Sjkh{
15430221Scharnier    fprintf(stderr, "%s\n%s\n%s\n",
15530221Scharnier	"usage: pkg_info [-cdDikrRpLqImv] [-e package] [-l prefix]",
15630221Scharnier	"                pkg-name [pkg-name ...]",
15730221Scharnier	"       pkg_info -a [flags]");
158327Sjkh    exit(1);
159327Sjkh}
160