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