Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 81bc309 in mainline


Ignore:
Timestamp:
2011-08-20T17:03:29Z (10 years ago)
Author:
Petr Koupy <petr.koupy@…>
Branches:
lfn, master
Children:
c8f70eb
Parents:
c916dfc
Message:

batch command rewritten as builtin command.

Location:
uspace/app/bdsh
Files:
4 added
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/bdsh/Makefile

    rc916dfc r81bc309  
    5050        cmds/modules/unmount/unmount.c \
    5151        cmds/modules/kcon/kcon.c \
     52        cmds/builtins/batch/batch.c \
    5253        cmds/builtins/exit/exit.c \
    5354        cmds/builtins/cd/cd.c \
  • uspace/app/bdsh/cmds/builtins/builtins.h

    rc916dfc r81bc309  
    44#include "config.h"
    55
     6#include "batch/entry.h"
    67#include "cd/entry.h"
    78#include "exit/entry.h"
    89
    910builtin_t builtins[] = {
     11#include "batch/batch_def.h"
    1012#include "cd/cd_def.h"
    1113#include "exit/exit_def.h"
  • uspace/app/bdsh/cmds/modules/help/help.c

    rc916dfc r81bc309  
    4343extern const char *progname;
    4444
    45 #define HELP_IS_BATCH           3
    4645#define HELP_IS_COMMANDS        2
    4746#define HELP_IS_MODULE          1
     
    5554{
    5655        int rc = HELP_IS_RUBBISH;
    57 
    58         if (str_cmp(cmd, "batch") == 0)
    59                 return HELP_IS_BATCH;
    6056
    6157        if (str_cmp(cmd, "commands") == 0)
     
    9692}
    9793
    98 static void help_batch(unsigned int level)
    99 {
    100         if (level == HELP_SHORT) {
    101                 printf(
    102                 "\n  batch [filename]\n"
    103                 "  Issues commands stored in the file.\n"
    104                 "  Each command must correspond to the single line in the file.\n\n");
    105         } else {
    106                 printf(
    107                 "\n  `batch' - issues a batch of commands\n"
    108                 "  Issues commands stored in the file. Each command must correspond\n"
    109                 "  to the single line in the file. Empty lines can be used to visually\n"
    110                 "  separate groups of commands. There is no support for comments,\n"
    111                 "  variables, recursion or other programming constructs - the `batch'\n"
    112                 "  command is indeed very trivial.\n\n");
    113         }
    114 
    115         return;
    116 }
    117 
    11894static void help_commands(void)
    11995{
     
    145121        }
    146122
    147         printf("   %-16s\t%s\n", "batch", "Issue batch of commands");
    148123        printf("\n  Try %s %s for more information on how `%s' works.\n\n",
    149124                cmdname, cmdname, cmdname);
     
    207182                        help_commands();
    208183                        return CMD_SUCCESS;
    209                 case HELP_IS_BATCH:
    210                         help_batch(level);
    211                         return CMD_SUCCESS;
    212184                case HELP_IS_MODULE:
    213185                        help_module(mod_switch, level);
  • uspace/app/bdsh/input.c

    rc916dfc r81bc309  
    193193        }
    194194
    195         if (str_cmp(cmd[0], "batch") == 0 && cmd[1] != NULL) {
    196                 FILE *batch = fopen(cmd[1], "r");
    197                 if (batch == NULL) {
    198                         printf("Cannot open file %s\n", cmd[1]);
    199                         rc = errno;
    200                 } else {
    201                         cliuser_t fusr;
    202                         fusr.name = usr->name;
    203                         fusr.cwd = usr->cwd;
    204                         fusr.prompt = usr->prompt;
    205                         fusr.line = malloc(INPUT_MAX + 1);
    206                         char *cur = fusr.line;
    207                         char *end = fusr.line + INPUT_MAX;
    208                         int c = fgetc(batch);
    209                         while (fusr.line != NULL) {
    210                                 if (c == '\n' || c == EOF || cur == end) {
    211                                         *cur = '\0';
    212                                         if (cur == fusr.line) {
    213                                                 /* skip empty line */
    214                                                 rc = 0;
    215                                                 free(cur);
    216                                         } else {
    217                                                 printf(">%s\n", fusr.line);
    218                                                 rc = process_input(&fusr);
    219                                                 /* fusr->line was freed by process_input() */
    220                                         }
    221                                         if (rc == 0 && c != EOF) {
    222                                                 fusr.line = malloc(INPUT_MAX + 1);
    223                                                 cur = fusr.line;
    224                                                 end = fusr.line + INPUT_MAX;
    225                                         } else {
    226                                                 break;
    227                                         }
    228                                 } else {
    229                                         *cur++ = c;
    230                                 }
    231                                 c = fgetc(batch);
    232                         }
    233                         fclose(batch);
    234                 }
    235         } else {
    236                 rc = run_command(cmd, usr, &new_iostate);
    237         }
     195        rc = run_command(cmd, usr, &new_iostate);
    238196       
    239197finit_with_files:
Note: See TracChangeset for help on using the changeset viewer.