source: mainline/uspace/app/cli/cli.c@ 216d6fc

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 216d6fc was c98e6ee, checked in by Jiri Svoboda <jirik.svoboda@…>, 17 years ago

Merge program-loader related stuff from dynload branch to trunk. (huge)

  • Property mode set to 100644
File size: 2.8 KB
Line 
1/*
2 * Copyright (c) 2008 Jiri Svoboda
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup cli cli
30 * @brief Trivial command-line interface for running programs.
31 * @{
32 */
33/**
34 * @file
35 */
36
37#include <stdio.h>
38#include <stdlib.h>
39#include <task.h>
40
41#define LINE_BUFFER_SIZE 128
42static char line_buffer[LINE_BUFFER_SIZE];
43
44#define MAX_ARGS 16
45static char *argv_buf[MAX_ARGS + 1];
46
47static void read_line(char *buffer, int n)
48{
49 char c;
50 int chars;
51
52 printf("> ");
53
54 chars = 0;
55 while (chars < n - 1) {
56 c = getchar();
57 if (c < 0) exit(0);
58 if (c == '\n') break;
59 if (c == '\b') {
60 if (chars > 0) {
61 putchar('\b');
62 --chars;
63 }
64 continue;
65 }
66
67 putchar(c);
68 buffer[chars++] = c;
69 }
70
71 putchar('\n');
72 buffer[chars] = '\0';
73}
74
75static void program_run(void)
76{
77 char *p;
78 int n;
79
80 p = line_buffer;
81 n = 0;
82
83 while (n < MAX_ARGS) {
84 argv_buf[n++] = p;
85 p = strchr(p, ' ');
86 if (p == NULL) break;
87
88 *p++ = '\0';
89 }
90 argv_buf[n] = NULL;
91
92 printf("spawn task '%s' with %d args\n", argv_buf[0], n);
93 printf("args:");
94 int i;
95 for (i = 0; i < n; ++i) {
96 printf(" '%s'", argv_buf[i]);
97 }
98 printf("\n");
99
100 task_spawn(argv_buf[0], argv_buf);
101}
102
103
104int main(int argc, char *argv[])
105{
106 printf("This is CLI\n");
107
108 while (1) {
109 read_line(line_buffer, LINE_BUFFER_SIZE);
110 printf("'%s'\n", line_buffer);
111 if (strcmp(line_buffer, "exit") == 0)
112 break;
113
114 if (line_buffer[0] != '\0')
115 program_run();
116 }
117
118 printf("Bye\n");
119
120 return 0;
121}
122
123/** @}
124 */
125
Note: See TracBrowser for help on using the repository browser.