main.c revision 392
1327Sjkh#ifndef lint
2379Sjkhstatic char *rcsid = "$Header: /usr1/cvs/jkh/pkg_install/info/main.c,v 1.5 1993/09/04 05:06:41 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
29392Sjkhstatic char Options[] = "acde:fikrpIvhl:";
30327Sjkh
31327Sjkhint	Flags		= 0;
32327SjkhBoolean AllInstalled	= FALSE;
33379Sjkhchar *InfoPrefix	= "";
34383Sjkhchar *PlayPen		= NULL;
35392Sjkhchar *CheckPkg		= NULL;
36327Sjkh
37327Sjkhint
38327Sjkhmain(int argc, char **argv)
39327Sjkh{
40327Sjkh    int ch;
41327Sjkh    char **pkgs, **start;
42327Sjkh    char *prog_name = argv[0];
43327Sjkh
44327Sjkh    pkgs = start = argv;
45327Sjkh    while ((ch = getopt(argc, argv, Options)) != EOF)
46327Sjkh	switch(ch) {
47327Sjkh	case 'a':
48327Sjkh	    AllInstalled = TRUE;
49327Sjkh	    break;
50327Sjkh
51327Sjkh	case 'v':
52327Sjkh	    Verbose = TRUE;
53327Sjkh	    /* Reasonable definition of 'everything' */
54327Sjkh	    Flags = SHOW_COMMENT | SHOW_DESC | SHOW_PLIST | SHOW_INSTALL |
55327Sjkh		SHOW_DEINSTALL | SHOW_REQUIRE;
56327Sjkh	    break;
57327Sjkh
58327Sjkh	case 'I':
59327Sjkh	    Flags |= SHOW_INDEX;
60327Sjkh	    break;
61327Sjkh
62327Sjkh	case 'p':
63327Sjkh	    Flags |= SHOW_PREFIX;
64327Sjkh	    break;
65327Sjkh
66327Sjkh	case 'c':
67327Sjkh	    Flags |= SHOW_COMMENT;
68327Sjkh	    break;
69327Sjkh
70327Sjkh	case 'd':
71327Sjkh	    Flags |= SHOW_DESC;
72327Sjkh	    break;
73327Sjkh
74327Sjkh	case 'f':
75327Sjkh	    Flags |= SHOW_PLIST;
76327Sjkh	    break;
77327Sjkh
78327Sjkh	case 'i':
79327Sjkh	    Flags |= SHOW_INSTALL;
80327Sjkh	    break;
81327Sjkh
82327Sjkh	case 'k':
83327Sjkh	    Flags |= SHOW_DEINSTALL;
84327Sjkh	    break;
85327Sjkh
86327Sjkh	case 'r':
87327Sjkh	    Flags |= SHOW_REQUIRE;
88327Sjkh	    break;
89327Sjkh
90379Sjkh	case 'l':
91379Sjkh	    InfoPrefix = optarg;
92379Sjkh	    break;
93379Sjkh
94383Sjkh	case 't':
95383Sjkh	    PlayPen = optarg;
96383Sjkh	    break;
97383Sjkh
98392Sjkh	case 'e':
99392Sjkh	    CheckPkg = optarg;
100392Sjkh	    break;
101392Sjkh
102327Sjkh	case 'h':
103327Sjkh	case '?':
104327Sjkh	default:
105327Sjkh	    usage(prog_name, NULL);
106327Sjkh	    break;
107327Sjkh	}
108327Sjkh
109327Sjkh    argc -= optind;
110327Sjkh    argv += optind;
111327Sjkh
112327Sjkh    /* Set some reasonable defaults */
113327Sjkh    if (!Flags)
114327Sjkh	Flags = SHOW_COMMENT | SHOW_DESC;
115327Sjkh
116327Sjkh    /* Get all the remaining package names, if any */
117327Sjkh    while (*argv)
118327Sjkh	*pkgs++ = *argv++;
119327Sjkh
120327Sjkh    /* If no packages, yelp */
121392Sjkh    if (pkgs == start && !AllInstalled && !CheckPkg)
122327Sjkh	usage(prog_name, "Missing package name(s)");
123327Sjkh    *pkgs = NULL;
124327Sjkh    return pkg_perform(start);
125327Sjkh}
126327Sjkh
127327Sjkhvoid
128327Sjkhusage(const char *name, const char *fmt, ...)
129327Sjkh{
130327Sjkh    va_list args;
131327Sjkh
132327Sjkh    va_start(args, fmt);
133327Sjkh    if (fmt) {
134327Sjkh	fprintf(stderr, "%s: ", name);
135327Sjkh	vfprintf(stderr, fmt, args);
136327Sjkh	fprintf(stderr, "\n\n");
137327Sjkh    }
138327Sjkh    va_end(args);
139327Sjkh    fprintf(stderr, "Usage: %s [args] pkg [ .. pkg ]\n", name);
140327Sjkh    fprintf(stderr, "Where args are one or more of:\n\n");
141327Sjkh    fprintf(stderr, "-a         show all installed packages (if any)\n");
142327Sjkh    fprintf(stderr, "-I         print 'index' of packages\n");
143327Sjkh    fprintf(stderr, "-c         print `one line comment'\n");
144327Sjkh    fprintf(stderr, "-d         print description\n");
145327Sjkh    fprintf(stderr, "-f         show packing list\n");
146327Sjkh    fprintf(stderr, "-i         show install script\n");
147327Sjkh    fprintf(stderr, "-k         show deinstall script\n");
148327Sjkh    fprintf(stderr, "-r         show requirements script\n");
149327Sjkh    fprintf(stderr, "-p         show prefix\n");
150379Sjkh    fprintf(stderr, "-l <str>   Prefix each info catagory with <str>\n");
151327Sjkh    fprintf(stderr, "-v         show all information\n");
152383Sjkh    fprintf(stderr, "-t temp    use temp as template for mktemp()\n");
153327Sjkh    fprintf(stderr, "\n[no args = -c -d]\n");
154327Sjkh    exit(1);
155327Sjkh}
156