busybox/applets/usage_pod.c
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2/*
   3 * Copyright (C) 2009 Denys Vlasenko.
   4 *
   5 * Licensed under GPLv2, see file LICENSE in this source tree.
   6 */
   7#include <unistd.h>
   8#include <stdint.h>
   9#include <stdlib.h>
  10#include <string.h>
  11#include <stdio.h>
  12
  13#include "autoconf.h"
  14
  15#define SKIP_applet_main
  16#define ALIGN1 /* nothing, just to placate applet_tables.h */
  17#define ALIGN2 /* nothing, just to placate applet_tables.h */
  18#include "applet_tables.h"
  19
  20/* Since we can't use platform.h, have to do this again by hand: */
  21#if ENABLE_NOMMU
  22# define BB_MMU 0
  23# define USE_FOR_NOMMU(...) __VA_ARGS__
  24# define USE_FOR_MMU(...)
  25#else
  26# define BB_MMU 1
  27# define USE_FOR_NOMMU(...)
  28# define USE_FOR_MMU(...) __VA_ARGS__
  29#endif
  30
  31#include "usage.h"
  32#define MAKE_USAGE(aname, usage) { aname, usage },
  33static struct usage_data {
  34        const char *aname;
  35        const char *usage;
  36} usage_array[] = {
  37#include "applets.h"
  38};
  39
  40static int compare_func(const void *a, const void *b)
  41{
  42        const struct usage_data *ua = a;
  43        const struct usage_data *ub = b;
  44        return strcmp(ua->aname, ub->aname);
  45}
  46
  47int main(void)
  48{
  49        int col, len2;
  50
  51        int i;
  52        int num_messages = sizeof(usage_array) / sizeof(usage_array[0]);
  53
  54        if (num_messages == 0)
  55                return 0;
  56
  57        qsort(usage_array,
  58                num_messages, sizeof(usage_array[0]),
  59                compare_func);
  60
  61        col = 0;
  62        for (i = 0; i < num_messages; i++) {
  63                len2 = strlen(usage_array[i].aname) + 2;
  64                if (col >= 76 - len2) {
  65                        printf(",\n");
  66                        col = 0;
  67                }
  68                if (col == 0) {
  69                        col = 6;
  70                        printf("\t");
  71                } else {
  72                        printf(", ");
  73                }
  74                printf("%s", usage_array[i].aname);
  75                col += len2;
  76        }
  77        printf("\n\n");
  78
  79        printf("=head1 COMMAND DESCRIPTIONS\n\n");
  80        printf("=over 4\n\n");
  81
  82        for (i = 0; i < num_messages; i++) {
  83                if (usage_array[i].aname[0] >= 'a' && usage_array[i].aname[0] <= 'z'
  84                 && usage_array[i].usage[0] != NOUSAGE_STR[0]
  85                ) {
  86                        printf("=item B<%s>\n\n", usage_array[i].aname);
  87                        if (usage_array[i].usage[0])
  88                                printf("%s %s\n\n", usage_array[i].aname, usage_array[i].usage);
  89                        else
  90                                printf("%s\n\n", usage_array[i].aname);
  91                }
  92        }
  93        printf("=back\n\n");
  94
  95        return 0;
  96}
  97
  98/* TODO: we used to make options bold with B<> and output an example too:
  99
 100=item B<cat>
 101
 102cat [B<-u>] [FILE]...
 103
 104Concatenate FILE(s) and print them to stdout
 105
 106Options:
 107        -u      Use unbuffered i/o (ignored)
 108
 109Example:
 110        $ cat /proc/uptime
 111        110716.72 17.67
 112
 113*/
 114