123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- #include <stdlib.h>
- #include <string.h>
- #include <grass/gis.h>
- #include "list.h"
- static int count;
- static char **text;
- static int first, last;
- int menu(int type)
- {
- int i;
- int n;
- int x;
- char buf[100];
- build_menu();
- first = 0;
- while (1) {
- last = first + 30;
- if (last > count)
- last = count;
- G_clear_screen();
- switch (type) {
- case RENAME:
- fprintf(stdout, "RENAME");
- break;
- case REMOVE:
- fprintf(stdout, "REMOVE");
- break;
- case COPY:
- fprintf(stdout, "COPY");
- break;
- case LIST:
- fprintf(stdout, "LIST");
- break;
- }
- fprintf(stdout, " FACILITY\n\n");
- fprintf(stdout, "This program allows you to ");
- switch (type) {
- case RENAME:
- fprintf(stdout, "rename files found in your mapset");
- break;
- case REMOVE:
- fprintf(stdout, "remove files found in your mapset");
- break;
- case COPY:
- fprintf(stdout, "copy files from other mapsets into your mapset");
- break;
- case LIST:
- fprintf(stdout, "list files from mapsets in your search path");
- break;
- }
- fprintf(stdout, "\n\n");
- fprintf(stdout, "Please select the type of file to be ");
- switch (type) {
- case RENAME:
- fprintf(stdout, "renamed");
- break;
- case REMOVE:
- fprintf(stdout, "removed");
- break;
- case COPY:
- fprintf(stdout, "copied");
- break;
- case LIST:
- fprintf(stdout, "listed");
- break;
- }
- fprintf(stdout, "\n\n");
- display_menu();
- fprintf(stdout, "\n");
- if (first > 0)
- fprintf(stdout, " - to see previous menu page\n");
- if (last < count)
- fprintf(stdout, " + to see next menu page\n");
- fprintf(stdout, "RETURN to exit\n\n");
- fprintf(stdout, "> ");
- if (!G_gets(buf))
- continue;
- if (*buf == 0) {
- free_menu();
- return -1;
- }
- G_strip(buf);
- if (first > 0 && strcmp(buf, "-") == 0) {
- first -= 30;
- if (first < 0)
- first = 0;
- continue;
- }
- if (last < count && strcmp(buf, "+") == 0) {
- first = last;
- continue;
- }
- if (sscanf(buf, "%d", &x) != 1)
- continue;
- i = 1;
- for (n = 0; n < nlist; n++)
- if (list[n].status && (i++ == x)) {
- free_menu();
- return n;
- }
- }
- }
- int build_menu(void)
- {
- char buf[100];
- int n;
- count = 0;
- text = 0;
- for (n = 0; n < nlist; n++)
- if (list[n].status) {
- sprintf(buf, "%3d %-.30s", ++count, list[n].text);
- text = (char **)G_realloc(text, count * sizeof(char *));
- text[count - 1] = G_store(buf);
- }
- return 0;
- }
- int free_menu(void)
- {
- while (count-- > 0)
- G_free(text[count]);
- return 0;
- }
- int display_menu(void)
- {
- int left, right;
- int i;
- left = first;
- right = first + 15;
- for (i = 0; i < 15; i++) {
- if (left >= last)
- break;
- if (right >= last)
- fprintf(stdout, " %-35.35s\n", text[left]);
- else
- fprintf(stdout, " %-35.35s %-35.35s\n", text[left],
- text[right]);
- left++;
- right++;
- }
- return 0;
- }
|