Ignore:
Timestamp:
Nov 20, 2020, 12:23:31 AM (4 years ago)
Author:
alain
Message:

Introduce the fget_string() function.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libs/libalmosmkh/almosmkh.c

    r661 r678  
    118118}
    119119
    120 ///////////////////////////////////////
    121 int get_uint32( unsigned int * buffer )
     120////////////////////////////////////////
     121void get_uint32( unsigned int * buffer )
    122122{
    123123    unsigned int  i;
     
    201201    }
    202202
    203     // final evaluation
     203    // write value to buffer
    204204    if ( overflow == 0 )
    205205    {
    206206        // return value
    207207        *buffer = value;
    208         return 0;
    209208    }
    210209    else
     
    221220        // return 0 value
    222221        *buffer = 0;
    223         return -1;
    224222    }
    225223}  // end get_uint32()
    226224
    227 //////////////////////////////
     225///////////////////////////////
    228226int get_string( char * string,
    229227                int    maxlen )
    230228{
    231229    int c;
    232     int done   = 0;
    233230    int length = 0;
    234231
    235     while( done == 0 )
     232    while( 1 )
    236233    {
    237234        // check buffer overflow
     
    256253            length++;                       // update length
    257254        }
    258         else if (c == 0x0A)                 // LF character marks end of string
    259         {
    260             putchar( c );
    261             done = 1;
     255        else if( c == 0x0A )                // LF character marks end of string
     256        {
     257            putchar( c );                   // echo
     258            string[length] = 0;             // register NUL character in string
     259            return length + 1;
    262260        }
    263261        else if ( (c == 0x7F) ||            // DEL character
     
    270268            }
    271269        }
    272         else if ( c == 0 )                  // EOF character
    273         {
    274             // cancel all echo characters
    275             while( length )
     270    }
     271
     272    // set NUL character in string and return success
     273
     274}  // end get_string()
     275
     276
     277/////////////////////////////
     278int fget_string( int    fdid,
     279                 char * string,
     280                 int    maxlen )
     281{
     282    int  ret;
     283    char c;
     284    int  length = 0;
     285
     286    while( 1 )
     287    {
     288        // check buffer overflow
     289        if( length >= maxlen-1 )  length = 0;                 
     290
     291        // read one character from stream
     292        ret = read( fdid , &c , 1 );
     293
     294        if( ret == 1 )
     295        {
     296            if ( (c >= 0x20) && (c < 0x7F) )    // printable character
    276297            {
    277                printf("\b \b");             // cancel one echo character
    278                length--;                   
     298                string[length] = (char)c;       // register character in string
     299                length++;                       // update length
    279300            }
    280             return -1;                      // return failure
    281         }
    282     }
    283 
    284     // set NUL character in string and return success
    285     string[length] = 0;
    286     return length + 1;
    287 
    288 }  // end get_string()
     301            else if ( c == 0 )                  // end of string
     302            {
     303                string[length] = (char)c;       // register character in string
     304                length++;                       // update length
     305                break;                          // exit loop
     306            }
     307            // discard all characters not printable or NUL
     308        }
     309        else
     310        {
     311            printf("\n[%s] cannot read stream %d\n", __FUNCTION__, fdid );
     312            length = 0;
     313            break;
     314        }
     315    }
     316}  // end fget_string()
     317
    289318
    290319//////////////////////////////////////////////////////////////////////////////////////
     
    418447}
    419448
     449////////////////////////////////////////
     450int display_fd_array( unsigned int pid )
     451{
     452    return hal_user_syscall( SYS_DISPLAY,
     453                             DISPLAY_FD,
     454                             (reg_t)pid, 0, 0 );
     455}
     456
     457///////////////////////////////////////////
     458int display_fbf_windows( unsigned int pid )
     459{
     460    return hal_user_syscall( SYS_DISPLAY,
     461                             DISPLAY_WINDOWS,
     462                             (reg_t)pid, 0, 0 );
     463}
     464
    420465///////////////////////////////
    421466int trace( unsigned int active,
     
    433478{
    434479   char          cmd;
    435    int           error;
    436480
    437481   while( 1 )
     
    450494
    451495            printf("b / pid = ");
    452             error = get_uint32( &pid );
     496            get_uint32( &pid );
    453497
    454498            printf(" / trdid = ");
    455             error |= get_uint32( &trdid );
    456 
    457             if( error == 0 ) display_busylocks( pid , trdid );
     499            get_uint32( &trdid );
     500
     501            display_busylocks( pid , trdid );
    458502        }
    459503        // return to calling process
     
    470514
    471515            printf(" / min = ");
    472             error = get_uint32( &min );
     516            get_uint32( &min );
    473517
    474518            printf(" / slots = ");
    475             error |= get_uint32( &slots );
    476 
    477             if( error == 0 ) display_fat( min , slots );
     519            get_uint32( &slots );
     520
     521            display_fat( min , slots );
    478522        }
    479523        // list all supported commands
     
    503547
    504548            printf("m / path = ");
    505             error = get_string( path , 128 );
     549            get_string( path , 128 );
    506550
    507551            printf(" / page = ");
    508             error |= get_uint32( &page );
     552            get_uint32( &page );
    509553
    510554            printf(" / nbytes = ");
    511             error |= get_uint32( &nbytes );
    512 
    513             if( error == 0 ) display_mapper( path , page , nbytes );
     555            get_uint32( &nbytes );
     556
     557            display_mapper( path , page , nbytes );
    514558        }
    515559        // display all processes in cluster(cxy)
     
    519563
    520564            printf("p / cxy = ");
    521             error = get_uint32( &cxy );
    522 
    523             if( error == 0 ) display_cluster_processes( cxy , 0 );
     565            get_uint32( &cxy );
     566
     567            display_cluster_processes( cxy , 0 );
    524568        }
    525569        // display DQDT
     
    536580
    537581            printf("s / cxy = ");
    538             error = get_uint32( &cxy );
     582            get_uint32( &cxy );
    539583
    540584            printf(" / lid = ");
    541             error |= get_uint32( &lid );
    542 
    543             if( error == 0 ) display_sched( cxy , lid );
     585            get_uint32( &lid );
     586
     587            display_sched( cxy , lid );
    544588        }
    545589        // display all processes attached to TXT(txt_id)
     
    549593
    550594            printf("t / txt_id = ");
    551             error = get_uint32( &txt_id );
    552 
    553             if( error == 0 ) display_txt_processes( txt_id );
     595            get_uint32( &txt_id );
     596
     597            display_txt_processes( txt_id );
    554598        }
    555599        // display vmm state for process(cxy, pid)
     
    561605
    562606            printf("v / cxy = ");
    563             error = get_uint32( &cxy );
     607            get_uint32( &cxy );
    564608
    565609            printf(" / pid = ");
    566             error |= get_uint32( &pid );
     610            get_uint32( &pid );
    567611
    568612            printf(" / mapping = ");
    569             error |= get_uint32( &map );
    570 
    571             if( error == 0 ) display_vmm( cxy , pid , map );
     613            get_uint32( &map );
     614
     615            display_vmm( cxy , pid , map );
    572616        }
    573617        // force the calling process to exit
     
    585629
    586630            printf("y / active = ");
    587             error = get_uint32( &active );
     631            get_uint32( &active );
    588632
    589633            printf(" / cxy = ");
    590             error |= get_uint32( &cxy );
     634            get_uint32( &cxy );
    591635
    592636            printf(" / lid = ");
    593             error |= get_uint32( &lid );
    594 
    595             if( error == 0 ) trace( active , cxy , lid );
     637            get_uint32( &lid );
     638
     639            trace( active , cxy , lid );
    596640        }
    597641    }  // en while
     
    13661410                if( child_sts[i][j] < 0 )  // failure => report error
    13671411                {
    1368                     printf("\n[ERROR] in %s select core for child[%d,%d] of <build> thread[%d,%d]\n",
     1412                    printf("\n[ERROR] in %s : child[%d,%d] of <build> thread[%d,%d]\n",
    13691413                    __FUNCTION__ , i , j , cid , level );
    13701414
     
    15581602/////////////////////////////////////////////////////////////////////////////////////////
    15591603
    1560 /////////////////////////////////////////
    1561 int fbf_get_config( unsigned int * width,
    1562                     unsigned int * height,
    1563                     unsigned int * type )
     1604////////////////////////////////
     1605int fbf_get_config( int * width,
     1606                    int * height,
     1607                    int * type )
    15641608{
    15651609    return hal_user_syscall( SYS_FBF,
     
    15701614}
    15711615
    1572 ////////////////////////////////////
    1573 int fbf_read( void         * buffer,
    1574               unsigned int   length,
    1575               unsigned int   offset )
    1576 {
     1616////////////////////////////
     1617int fbf_read( void * buffer,
     1618              int    length,
     1619              int    offset )
     1620{
     1621    printf("[WARNING] the <%s> syscall is deprecated\n", __FUNCTION__ );
     1622
    15771623    return hal_user_syscall( SYS_FBF,
    15781624                             (reg_t)FBF_DIRECT_READ,
     
    15821628}
    15831629
    1584 /////////////////////////////////////
    1585 int fbf_write( void         * buffer,
    1586                unsigned int   length,
    1587                unsigned int   offset )
    1588 {
     1630/////////////////////////////
     1631int fbf_write( void * buffer,
     1632               int    length,
     1633               int    offset )
     1634{
     1635    printf("[WARNING] the <%s> syscall is deprecated\n", __FUNCTION__ );
     1636
    15891637    return hal_user_syscall( SYS_FBF,
    15901638                             (reg_t)FBF_DIRECT_WRITE,
     
    15941642}
    15951643
    1596 //////////////////////////////////////////////
    1597 int fbf_create_window( unsigned int    l_zero,
    1598                        unsigned int    p_zero,
    1599                        unsigned int    nlines,
    1600                        unsigned int    npixels,
    1601                        void         ** buffer )
     1644//////////////////////////////////////
     1645int fbf_create_window( int     l_zero,
     1646                       int     p_zero,
     1647                       int     nlines,
     1648                       int     npixels,
     1649                       void ** buffer )
    16021650{
    16031651    return hal_user_syscall( SYS_FBF,
     
    16081656}
    16091657
    1610 //////////////////////////////////////////
    1611 int fbf_delete_window( unsigned int  wid )
     1658///////////////////////////////
     1659int fbf_active_window( int wid,
     1660                       int active )
     1661{
     1662    return hal_user_syscall( SYS_FBF,
     1663                             (reg_t)FBF_ACTIVE_WINDOW,
     1664                             (reg_t)wid,
     1665                             (reg_t)active, 0 );
     1666}
     1667
     1668/////////////////////////////////
     1669int fbf_delete_window( int  wid )
    16121670{
    16131671    return hal_user_syscall( SYS_FBF,
     
    16161674}
    16171675
    1618 ///////////////////////////////////////
    1619 int fbf_move_window( unsigned int  wid,
    1620                      unsigned int  l_zero,
    1621                      unsigned int  p_zero )
     1676//////////////////////////////
     1677int fbf_move_window( int  wid,
     1678                     int  l_zero,
     1679                     int  p_zero )
    16221680{
    16231681    return hal_user_syscall( SYS_FBF,
     
    16281686}
    16291687
    1630 /////////////////////////////////////////
    1631 int fbf_resize_window( unsigned int  wid,
    1632                        unsigned int  width,
    1633                        unsigned int  height )
     1688////////////////////////////////
     1689int fbf_resize_window( int  wid,
     1690                       int  width,
     1691                       int  height )
    16341692{
    16351693    return hal_user_syscall( SYS_FBF,
     
    16401698}
    16411699
    1642 //////////////////////////////////////////
    1643 int fbf_refresh_window( unsigned int  wid,
    1644                         unsigned int  line_first,
    1645                         unsigned int  line_last )
     1700/////////////////////////////////
     1701int fbf_refresh_window( int  wid,
     1702                        int  line_first,
     1703                        int  line_last )
    16461704{
    16471705    return hal_user_syscall( SYS_FBF,
     
    16521710}
    16531711
     1712/////////////////////////////////
     1713int fbf_front_window( int   wid )
     1714{
     1715    return hal_user_syscall( SYS_FBF,
     1716                             (reg_t)FBF_FRONT_WINDOW,
     1717                             (reg_t)wid, 0, 0 );
     1718}
    16541719
    16551720// Local Variables:
Note: See TracChangeset for help on using the changeset viewer.