#include <stdio.h> 
#include <math.h>   /* needed for ceil */ 
#include <string.h> /* needed for strlen */ 
 
void  make_linspace( int  a[ ] ,  double  start,  double  stop,  int  num)  { 
    /* Fills array a[] (in place) with linearly spaced values just like np.linspace in NumPy (Python) */ 
    double  spacing =  ( stop- start) / ( num- 1 ) ; 
    int  i; 
    for  ( i= 0 ;  i< num;  i++ ) { 
        a[ i]  =  start +  i* spacing; 
    } 
} 
 
void  make_and_print_msgs( int  n_proc,  int  msglength) 
{ 
    /* Create a string called msg of length msglength + 1 (for the null character '\0') */ 
    char  msg[ msglength+ 1 ] ; 
    int  i; 
    printf ( "msg intended to be:    " ) ;      for  ( i= 0 ;  i< msglength;  i++ )  { 
        msg[ i]  =  'a' ; 
    } 
    msg[ i]  =  '\0 ' ; 
 
    /* Print message to screen as a string and fine strlen(msg) and sizeof(msg) */ 
    printf ( "msg printed as string: %s\n " ,  msg
) ;      printf ( "sizeof(msg): %d\n \n " ,  sizeof ( msg
) ) ;   
} 
 
int  main( int  argc,  char  * argv[ ] ) 
{ 
    int  n_proc =  2 ; 
 
    /* Create an array containing the lengths of strings to be printed (In this case, data_length should be {0, 2, 4, 6, 8} */ 
    int  start =  0 ; 
    int  stop_range =  10 ;     /* the stop value if we are using range() */ 
    int  step =  2 ;              /* spacing between the integers in the output of range() */ 
    int  stop =  stop_range -  step;     /* the stop value if we are using linspace() */ 
    int  npoints 
=  ( int )  ceil (  ( ( double ) stop_range 
-  ( double ) start
)  /  ( double ) step 
) ;   /*  number of elements in the list produced by range(start, stop_range, step)  */   
    int  data_length[ npoints] ;    /* 1D array of string lengths (# of non-null chars in each str) */ 
    make_linspace( data_length,  start,  stop,  npoints) ; 
    int  i; 
 
 
    /* For each length, call on make_and_print_msgs to make a string of that length (plus '\0') and then print to stdout */ 
    printf ( "   i    data_length[i]\n --------------------\n " ) ;      for  ( i= 0 ;  i< npoints;  i++ )  { 
        printf ( "%4d %7d\n " ,  i
,  data_length
[ i
] ) ;          make_and_print_msgs( n_proc,  data_length[ i] ) ; 
    } 
    return  0 ; 
} 
 
 
				I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+ICAgLyogbmVlZGVkIGZvciBjZWlsICovCiNpbmNsdWRlIDxzdHJpbmcuaD4gLyogbmVlZGVkIGZvciBzdHJsZW4gKi8KCnZvaWQgbWFrZV9saW5zcGFjZShpbnQgYVtdLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBzdG9wLCBpbnQgbnVtKSB7CiAgICAvKiBGaWxscyBhcnJheSBhW10gKGluIHBsYWNlKSB3aXRoIGxpbmVhcmx5IHNwYWNlZCB2YWx1ZXMganVzdCBsaWtlIG5wLmxpbnNwYWNlIGluIE51bVB5IChQeXRob24pICovCiAgICBkb3VibGUgc3BhY2luZyA9IChzdG9wLXN0YXJ0KS8obnVtLTEpOwogICAgaW50IGk7CiAgICBmb3IgKGk9MDsgaTxudW07IGkrKyl7CiAgICAgICAgYVtpXSA9IHN0YXJ0ICsgaSpzcGFjaW5nOwogICAgfQp9Cgp2b2lkIG1ha2VfYW5kX3ByaW50X21zZ3MoaW50IG5fcHJvYywgaW50IG1zZ2xlbmd0aCkKewogICAgLyogQ3JlYXRlIGEgc3RyaW5nIGNhbGxlZCBtc2cgb2YgbGVuZ3RoIG1zZ2xlbmd0aCArIDEgKGZvciB0aGUgbnVsbCBjaGFyYWN0ZXIgJ1wwJykgKi8KICAgIGNoYXIgbXNnW21zZ2xlbmd0aCsxXTsKICAgIGludCBpOwogICAgcHJpbnRmKCJtc2cgaW50ZW5kZWQgdG8gYmU6ICAgICIpOwogICAgZm9yIChpPTA7IGk8bXNnbGVuZ3RoOyBpKyspIHsKICAgICAgICBtc2dbaV0gPSAnYSc7CiAgICAgICAgcHJpbnRmKCIlYyIsbXNnW2ldKTsKICAgIH0KICAgIG1zZ1tpXSA9ICdcMCc7CgogICAgLyogUHJpbnQgbWVzc2FnZSB0byBzY3JlZW4gYXMgYSBzdHJpbmcgYW5kIGZpbmUgc3RybGVuKG1zZykgYW5kIHNpemVvZihtc2cpICovCiAgICBwcmludGYoIlxuIik7CiAgICBwcmludGYoIm1zZyBwcmludGVkIGFzIHN0cmluZzogJXNcbiIsIG1zZyk7CiAgICBwcmludGYoInN0cmxlbihtc2cpOiAlZFxuIiwgc3RybGVuKG1zZykpOwogICAgcHJpbnRmKCJzaXplb2YobXNnKTogJWRcblxuIiwgc2l6ZW9mKG1zZykpOwoKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgaW50IG5fcHJvYyA9IDI7CgogICAgLyogQ3JlYXRlIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxlbmd0aHMgb2Ygc3RyaW5ncyB0byBiZSBwcmludGVkIChJbiB0aGlzIGNhc2UsIGRhdGFfbGVuZ3RoIHNob3VsZCBiZSB7MCwgMiwgNCwgNiwgOH0gKi8KICAgIGludCBzdGFydCA9IDA7CiAgICBpbnQgc3RvcF9yYW5nZSA9IDEwOyAgICAvKiB0aGUgc3RvcCB2YWx1ZSBpZiB3ZSBhcmUgdXNpbmcgcmFuZ2UoKSAqLwogICAgaW50IHN0ZXAgPSAyOyAgICAgICAgICAgICAvKiBzcGFjaW5nIGJldHdlZW4gdGhlIGludGVnZXJzIGluIHRoZSBvdXRwdXQgb2YgcmFuZ2UoKSAqLwogICAgaW50IHN0b3AgPSBzdG9wX3JhbmdlIC0gc3RlcDsgICAgLyogdGhlIHN0b3AgdmFsdWUgaWYgd2UgYXJlIHVzaW5nIGxpbnNwYWNlKCkgKi8KICAgIGludCBucG9pbnRzID0gKGludCkgY2VpbCggKChkb3VibGUpc3RvcF9yYW5nZSAtIChkb3VibGUpc3RhcnQpIC8gKGRvdWJsZSlzdGVwICk7ICAvKiAgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IHByb2R1Y2VkIGJ5IHJhbmdlKHN0YXJ0LCBzdG9wX3JhbmdlLCBzdGVwKSAgKi8KCiAgICBpbnQgZGF0YV9sZW5ndGhbbnBvaW50c107ICAgLyogMUQgYXJyYXkgb2Ygc3RyaW5nIGxlbmd0aHMgKCMgb2Ygbm9uLW51bGwgY2hhcnMgaW4gZWFjaCBzdHIpICovCiAgICBtYWtlX2xpbnNwYWNlKGRhdGFfbGVuZ3RoLCBzdGFydCwgc3RvcCwgbnBvaW50cyk7CiAgICBpbnQgaTsKCgogICAgLyogRm9yIGVhY2ggbGVuZ3RoLCBjYWxsIG9uIG1ha2VfYW5kX3ByaW50X21zZ3MgdG8gbWFrZSBhIHN0cmluZyBvZiB0aGF0IGxlbmd0aCAocGx1cyAnXDAnKSBhbmQgdGhlbiBwcmludCB0byBzdGRvdXQgKi8KICAgIHByaW50ZigiICAgaSAgICBkYXRhX2xlbmd0aFtpXVxuLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgZm9yIChpPTA7IGk8bnBvaW50czsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlNGQgJTdkXG4iLCBpLCBkYXRhX2xlbmd0aFtpXSk7CiAgICAgICAgbWFrZV9hbmRfcHJpbnRfbXNncyhuX3Byb2MsIGRhdGFfbGVuZ3RoW2ldKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==