Ignore:
Timestamp:
Oct 1, 2015, 4:09:25 PM (9 years ago)
Author:
alain
Message:

Adapt the following application to the POSIX threads API

  • convol
  • classif
  • raycast
  • coproc
  • display
  • gameoflife
  • transpose
  • shell
File:
1 moved

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/applications/shell/shell.c

    r707 r708  
    11///////////////////////////////////////////////////////////////////////////////////////
    2 // File   : main.c   (for shell application)
     2// File   : shell.c   
    33// Date   : july 2015
    44// author : Clément Guérin
     
    1717{
    1818    char *name;
     19    char *desc;
    1920    void (*fn)(int, char**);
    2021};
     
    3536    for (i = 0; cmd[i].name; i++)
    3637    {
    37         giet_tty_printf("\t%s\n", cmd[i].name);
    38     }
    39 }
    40 
    41 ///////////////////////////////////////////////
    42 static void cmd_proctime(int argc, char** argv)
    43 {
    44     giet_tty_printf("%u\n", giet_proctime());
     38        giet_tty_printf("\t%s\t : %s\n", cmd[i].name , cmd[i].desc );
     39    }
     40}
     41
     42///////////////////////////////////////////
     43static void cmd_time(int argc, char** argv)
     44{
     45    giet_tty_printf("%d\n", giet_proctime());
    4546}
    4647
     
    5253
    5354    if (argc < 2)
    54         fd = giet_fat_opendir("/");
    55     else
    56         fd = giet_fat_opendir(argv[1]);
     55    {
     56        giet_tty_printf("  usage : %s <pathname>\n", argv[0]);
     57        return;
     58    }
     59
     60    fd = giet_fat_opendir(argv[1]);
    5761
    5862    if (fd < 0)
    5963    {
    60         giet_tty_printf("can't list directory (err=%d)\n", fd);
     64        giet_tty_printf("  error : cannot open %s / err = %d)\n", argv[1], fd);
    6165        return;
    6266    }
     
    8185    if (argc < 2)
    8286    {
    83         giet_tty_printf("%s <path>\n", argv[0]);
     87        giet_tty_printf("  usage : %s <path>\n", argv[0]);
    8488        return;
    8589    }
    8690
    8791    int ret = giet_fat_mkdir(argv[1]);
     92
    8893    if (ret < 0)
    8994    {
    90         giet_tty_printf("can't create directory (err=%d)\n", ret);
     95        giet_tty_printf("  error : cannot create directory %s / err = %d\n", argv[1], ret);
    9196    }
    9297}
     
    97102    if (argc < 3)
    98103    {
    99         giet_tty_printf("%s <src> <dst>\n", argv[0]);
     104        giet_tty_printf("  usage : %s <src> <dst>\n", argv[0]);
    100105        return;
    101106    }
     
    111116    if (src_fd < 0)
    112117    {
    113         giet_tty_printf("can't open %s (err=%d)\n", argv[1], src_fd);
     118        giet_tty_printf("  error : cannot open %s / err = %d\n", argv[1], src_fd);
    114119        goto exit;
    115120    }
    116121
    117122    giet_fat_file_info(src_fd, &info);
     123
    118124    if (info.is_dir)
    119125    {
    120         giet_tty_printf("can't copy a directory\n");
     126        giet_tty_printf("  error : %s is a directory\n", argv[1] );
    121127        goto exit;
    122128    }
     129
    123130    size = info.size;
    124131
    125132    dst_fd = giet_fat_open( argv[2] , O_CREATE | O_TRUNC );
     133
    126134    if (dst_fd < 0)
    127135    {
    128         giet_tty_printf("can't open %s (err=%d)\n", argv[2], dst_fd);
     136        giet_tty_printf("  error : cannot open %s / err = %d\n", argv[2], dst_fd);
    129137        goto exit;
    130138    }
    131139
    132140    giet_fat_file_info(dst_fd, &info);
     141
    133142    if (info.is_dir)
    134143    {
    135         giet_tty_printf("can't copy to a directory\n"); // TODO
     144        giet_tty_printf("error : %s is a directory\n", argv[2] ); // TODO
    136145        goto exit;
    137146    }
     
    149158        if (wlen != len)
    150159        {
    151             giet_tty_printf("\nwrite error\n");
     160            giet_tty_printf("  error : cannot write on device\n");
    152161            goto exit;
    153162        }
     
    168177    if (argc < 2)
    169178    {
    170         giet_tty_printf("%s <file>\n", argv[0]);
     179        giet_tty_printf("  usage : %s <file>\n", argv[0]);
    171180        return;
    172181    }
    173182
    174183    int ret = giet_fat_remove(argv[1], 0);
     184
    175185    if (ret < 0)
    176186    {
    177         giet_tty_printf("can't remove %s (err=%d)\n", argv[1], ret);
     187        giet_tty_printf("  error : cannot remove %s / err = %d\n", argv[1], ret );
    178188    }
    179189}
     
    184194    if (argc < 2)
    185195    {
    186         giet_tty_printf("%s <path>\n", argv[0]);
     196        giet_tty_printf("  usage : %s <pathname>\n", argv[0]);
    187197        return;
    188198    }
     
    191201    if (ret < 0)
    192202    {
    193         giet_tty_printf("can't remove %s (err=%d)\n", argv[1], ret);
     203        giet_tty_printf("  error : cannot remove %s / err = %d\n", argv[1], ret );
    194204    }
    195205}
     
    200210    if (argc < 3)
    201211    {
    202         giet_tty_printf("%s <src> <dst>\n", argv[0]);
     212        giet_tty_printf("  usage : %s <src> <dst>\n", argv[0]);
    203213        return;
    204214    }
     
    207217    if (ret < 0)
    208218    {
    209         giet_tty_printf("can't move %s to %s (err=%d)\n", argv[1], argv[2], ret);
     219        giet_tty_printf("error : cannot move %s to %s / err = %d\n", argv[1], argv[2], ret );
    210220    }
    211221}
     
    216226    if (argc < 2)
    217227    {
    218         giet_tty_printf("%s <pathname>\n", argv[0]);
     228        giet_tty_printf("  usage : %s <vspace_name>\n", argv[0]);
    219229        return;
    220230    }
     
    223233    if ( ret == -1 )
    224234    {
    225         giet_tty_printf("\n  error : %s not found\n", argv[1] );
     235        giet_tty_printf("  error : %s not found\n", argv[1] );
    226236    }
    227237}
     
    232242    if (argc < 2)
    233243    {
    234         giet_tty_printf("%s <pathname>\n", argv[0]);
     244        giet_tty_printf("  usage : %s <vspace_name>\n", argv[0]);
    235245        return;
    236246    }
     
    239249    if ( ret == -1 )
    240250    {
    241         giet_tty_printf("\n  error : %s not found\n", argv[1] );
     251        giet_tty_printf("  error : %s not found\n", argv[1] );
    242252    }
    243253    if ( ret == -2 )
    244254    {
    245         giet_tty_printf("\n  error : %s cannot be killed\n", argv[1] );
    246     }
    247 }
    248 
    249 ///////////////////////////////////////////////
     255        giet_tty_printf("  error : %s cannot be killed\n", argv[1] );
     256    }
     257}
     258
     259/////////////////////////////////////////
    250260static void cmd_ps(int argc, char** argv)
    251261{
    252     giet_tasks_status();
    253 }
    254 
    255 ///////////////////////////////////////////////
    256 static void cmd_sleep(int argc, char** argv)
    257 {
    258     int start = giet_proctime();
    259 
    260     if (argc < 2)
    261     {
    262         giet_tty_printf("%s <cycles>\n", argv[0]);
    263         return;
    264     }
    265 
    266     while (giet_proctime() < start + atoi(argv[1]));
    267 }
     262    giet_applications_status();
     263}
     264
     265////////////////////////////////////////////
     266static void cmd_pause(int argc, char** argv)
     267{
     268    if (argc < 3)
     269    {
     270        giet_tty_printf("  usage : %s <vspace_name> <thread_name>\n", argv[0] );
     271        return;
     272    }
     273
     274    int ret = giet_pthread_pause( argv[1] , argv[2] );
     275
     276    if ( ret == -1 )
     277    {
     278        giet_tty_printf("  error : vspace %s not found\n", argv[1] );
     279    }
     280    if ( ret == -2 )
     281    {
     282        giet_tty_printf("  error : thread %s not found\n", argv[2] );
     283    }
     284}
     285
     286/////////////////////////////////////////////
     287static void cmd_resume(int argc, char** argv)
     288{
     289    if (argc < 3)
     290    {
     291        giet_tty_printf("  usage : %s <vspace_name> <thread_name>\n", argv[0] );
     292        return;
     293    }
     294
     295    int ret = giet_pthread_resume( argv[1] , argv[2] );
     296
     297    if ( ret == -1 )
     298    {
     299        giet_tty_printf("  error : vspace %s not found\n", argv[1] );
     300    }
     301    if ( ret == -2 )
     302    {
     303        giet_tty_printf("  error : thread %s not found\n", argv[2] );
     304    }
     305}
     306
     307/////////////////////////////////////////////
     308static void cmd_context(int argc, char** argv)
     309{
     310    if (argc < 3)
     311    {
     312        giet_tty_printf("  usage : %s <vspace_name> <thread_name>\n", argv[0] );
     313        return;
     314    }
     315
     316    int ret = giet_pthread_context( argv[1] , argv[2] );
     317
     318    if ( ret == -1 )
     319    {
     320        giet_tty_printf("  error : vspace %s not found\n", argv[1] );
     321    }
     322    if ( ret == -2 )
     323    {
     324        giet_tty_printf("  error : thread %s not found\n", argv[2] );
     325    }
     326}
     327
    268328
    269329////////////////////////////////////////////////////////////////////
    270330struct command_t cmd[] =
    271331{
    272     { "help",       cmd_help },
    273     { "proctime",   cmd_proctime },
    274     { "ls",         cmd_ls },
    275     { "mkdir",      cmd_mkdir },
    276     { "cp",         cmd_cp },
    277     { "rm",         cmd_rm },
    278     { "rmdir",      cmd_rmdir },
    279     { "mv",         cmd_mv },
    280     { "exec",       cmd_exec },
    281     { "kill",       cmd_kill },
    282     { "ps",         cmd_ps },
    283     { "sleep",      cmd_sleep },
    284     { NULL,         NULL }
     332    { "help",       "list available commands",              cmd_help },
     333    { "time",       "return current date",                  cmd_time },
     334    { "ls",         "list content of a directory",          cmd_ls },
     335    { "mkdir",      "create a new directory",               cmd_mkdir },
     336    { "cp",         "replicate a file in file system",      cmd_cp },
     337    { "rm",         "remove a file from file system",       cmd_rm },
     338    { "rmdir",      "remove a directory from file system",  cmd_rmdir },
     339    { "mv",         "move a file in file system",           cmd_mv },
     340    { "exec",       "start an application",                 cmd_exec },
     341    { "kill",       "kill an application (all threads)",    cmd_kill },
     342    { "ps",         "list all mapped applications status",  cmd_ps },
     343    { "pause",      "pause a thread",                       cmd_pause },
     344    { "resume",     "resume a thread",                      cmd_resume },
     345    { "context",    "display a thread context",             cmd_context },
     346    { NULL,         NULL,                                   NULL }
    285347};
    286348
    287349// shell
    288350
    289 ///////////////////////////////////////
     351////////////////////////////
    290352static void parse(char *buf)
    291353{
     
    351413    // get a private TTY
    352414    giet_tty_alloc( 0 );
    353     giet_tty_printf( "~~~ shell ~~~\n" );
     415    giet_tty_printf( "~~~ shell ~~~\n\n" );
    354416
    355417    // display first prompt
Note: See TracChangeset for help on using the changeset viewer.