1 #include "niml.h"
2
3 /*************************************************************************/
4 /*** Compile with
5 gcc -O2 -o nimltest nimltest.c niml.c -I. ***/
6 /*************************************************************************/
7
main(int argc,char * argv[])8 int main( int argc , char *argv[] )
9 {
10 NI_stream ns , nsout , nsf=NULL ;
11 int nn , tt , nopt=1 , bmode , tflag=0 ;
12 void *nini ;
13 char *ccc ;
14
15 if( argc < 2 ){
16 printf("Usage: nimltest [-bB fname] [-w[r]] [-#] streamspec\n");exit(0);
17 }
18
19 #if 0
20 for( nn=0 ; nn < 5 ; nn++ ){
21 ccc = UNIQ_idcode() ;
22 fprintf(stderr,"%d: %s\n",nn,ccc) ; free(ccc) ;
23 }
24 ccc = UNIQ_hashcode("Elvis") ;
25 fprintf(stderr," %s\n",ccc) ; free(ccc) ;
26 #endif
27
28 /* writing to a stream? */
29
30 if( strncmp(argv[1],"-w",2) == 0 ){
31 char lbuf[1024] , *bbb ;
32 int raw=(argv[1][2]=='r') ;
33 if( argc < 3 ) exit(1) ;
34 nopt = 2 ;
35 ns = NI_stream_open( argv[nopt] , "w" ) ;
36 if( ns == NULL ){
37 fprintf(stderr,"NI_stream_open fails\n") ; exit(1) ;
38 }
39 while(1){
40 nn = NI_stream_writecheck( ns , 400 ) ;
41 if( nn == 1 ){ fprintf(stderr,"\n") ; break ; }
42 if( nn < 0 ){ fprintf(stderr,"BAD writecheck\n"); exit(1) ; }
43 fprintf(stderr,".") ;
44 }
45 if( !raw ){
46 while(1){
47 fprintf(stderr,"READY> ") ;
48 bbb = fgets( lbuf , 1024 , stdin ) ; if( bbb == NULL ) exit(0) ;
49 nn = NI_stream_write( ns , lbuf , strlen(lbuf) ) ;
50 if( nn < 0 ){
51 fprintf(stderr,"NI_stream_write fails\n"); exit(1);
52 }
53 }
54 } else {
55 int nbyt ;
56 while(1){
57 nbyt = fread( lbuf , 1,1024 , stdin ) ;
58 if( nbyt <= 0 ){ NI_sleep(10) ; NI_stream_close(ns) ; exit(0) ; }
59 nn = NI_stream_write( ns , lbuf , nbyt ) ;
60 if( nn < 0 ){
61 fprintf(stderr,"NI_stream_write fails\n"); exit(1);
62 }
63 }
64 }
65 }
66
67 if( strcmp(argv[1],"-b") == 0 || strcmp(argv[1],"-B") == 0 ){
68 char fname[256] ;
69 nopt = 3 ;
70 if( argc < 4 ){ fprintf(stderr,"Too few args\n"); exit(1); }
71
72 sprintf(fname,"file:%s",argv[2]) ;
73 nsf = NI_stream_open( fname, "w" ) ;
74 if( nsf == NULL ) fprintf(stderr,"Can't open %s\n",fname) ;
75
76 bmode = (strcmp(argv[1],"-b") == 0) ? NI_BINARY_MODE
77 : NI_BASE64_MODE ;
78 }
79
80 if( strcmp(argv[nopt],"-#") == 0 ){
81 tflag = NI_HEADERSHARP_FLAG ; nopt++ ;
82 }
83
84 /* reading! */
85
86 NI_add_trusted_host(NULL) ;
87
88 ns = NI_stream_open( argv[nopt] , "r" ) ;
89 if( ns == NULL ){
90 fprintf(stderr,"NI_stream_open fails\n") ; exit(1) ;
91 }
92 while(1){
93 nn = NI_stream_goodcheck( ns , 400 ) ;
94 if( nn == 1 ){ fprintf(stderr,"\n") ; break ; }
95 if( nn < 0 ){ fprintf(stderr,"BAD goodcheck\n"); exit(1) ; }
96 fprintf(stderr,".") ;
97 }
98
99 GetElement:
100 nini = NI_read_element( ns , -1 ) ; /* wait forever */
101 if( nini == NULL ){
102 if( NI_stream_goodcheck(ns,0) < 0 ){
103 fprintf(stderr,"NI_read_element fails\n") ; exit(1) ;
104 }
105 NI_sleep(999) ; goto GetElement ;
106 }
107
108 tt = NI_element_type( nini ) ;
109
110 if( tt == NI_ELEMENT_TYPE ){
111 NI_element *nel = (NI_element *) nini ;
112 fprintf(stderr,"Data element:\n"
113 " name = %s\n"
114 " vec_num = %d\n"
115 " vec_len = %d\n"
116 " vec_filled = %d\n"
117 " vec_rank = %d\n"
118 " attr_num = %d\n" ,
119 nel->name,nel->vec_num,nel->vec_len,nel->vec_filled,
120 nel->vec_rank,nel->attr_num );
121 for( nn=0 ; nn < nel->attr_num ; nn++ )
122 fprintf(stderr," %2d: lhs=%s rhs=%s\n",
123 nn , nel->attr_lhs[nn] , nel->attr_rhs[nn] ) ;
124
125 #if 0
126 for( nn=0 ; nn < nel->vec_rank ; nn++ ){
127 fprintf(stderr," axis[%d]: len=%d delta=%f origin=%f unit=%s label=%s\n",
128 nn , nel->vec_axis_len[nn] ,
129 (nel->vec_axis_delta) ? nel->vec_axis_delta[nn] : -666.0 ,
130 (nel->vec_axis_origin) ? nel->vec_axis_origin[nn] : -666.0 ,
131 (nel->vec_axis_unit) ? nel->vec_axis_unit[nn] : "NULL" ,
132 (nel->vec_axis_label) ? nel->vec_axis_label[nn] : "NULL" ) ;
133 }
134 #endif
135 } else if( tt == NI_GROUP_TYPE ){
136 NI_group *ngr = (NI_group *) nini ;
137 fprintf(stderr,"Group element:\n"
138 " part_num = %d\n"
139 " attr_num = %d\n" ,
140 ngr->part_num , ngr->attr_num ) ;
141 for( nn=0 ; nn < ngr->attr_num ; nn++ )
142 fprintf(stderr," %2d: lhs=%s rhs=%s\n",
143 nn , ngr->attr_lhs[nn] , ngr->attr_rhs[nn] ) ;
144
145 } else if( tt == NI_PROCINS_TYPE ){
146 NI_procins *npi = (NI_procins *)nini ;
147 fprintf(stderr,"Processing instruction:\n"
148 " target = %s\n" , npi->name ) ;
149 for( nn=0 ; nn < npi->attr_num ; nn++ )
150 fprintf(stderr," %2d: lhs=%s rhs=%s\n",
151 nn , npi->attr_lhs[nn] , npi->attr_rhs[nn] ) ;
152 }
153
154 #if 1
155 nsout = NI_stream_open( "str:" , "w" ) ;
156 if( nsout == NULL ){
157 fprintf(stderr,"NI_stream_open fails for output\n"); exit(1);
158 }
159
160 nn = NI_write_element( nsout , nini , NI_TEXT_MODE | tflag ) ;
161
162 fprintf(stderr,"\n------ NI_write_element = %d ------\n%s\n==========================\n" ,
163 nn, NI_stream_getbuf(nsout) ) ;
164 NI_stream_close(nsout) ;
165 #endif
166
167 if( nsf != NULL ){
168 nn = NI_write_element( nsf , nini , bmode ) ;
169 fprintf(stderr,"NI_write_element to file = %d\n",nn) ;
170 }
171
172 goto GetElement ;
173 }
174