Changeset 5d2248c
- Timestamp:
- Dec 13, 2008, 5:32:06 PM (16 years ago)
- Children:
- 9b70dd4
- Parents:
- 1c014eec
- git-author:
- Nelson Elhage <nelhage@mit.edu> (12/11/08 00:08:35)
- git-committer:
- Nelson Elhage <nelhage@mit.edu> (12/13/08 17:32:06)
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
perlglue.xs
r19bab8e r5d2248c 24 24 * complex argument processing or something, we define a 25 25 * simple version here that takes arguments in as flat a 26 * manner as possible, to simplify the XS code, with a name27 * with a trailing `_internal', and write a perl wrapper in28 * perlwrap.pm that munges the arguments as appropriate and29 * calls theinternal version.26 * manner as possible, to simplify the XS code, put it in 27 * BarnOwl::Intenal::, and write a perl wrapper in perlwrap.pm 28 * that munges the arguments as appropriate and calls the 29 * internal version. 30 30 */ 31 31 … … 143 143 if (rv) owl_free(rv); 144 144 145 void 146 new_command_internal(name, func, summary, usage, description) 145 void queue_message(msg) 146 SV *msg 147 PREINIT: 148 owl_message *m; 149 CODE: 150 { 151 if(!SvROK(msg) || SvTYPE(SvRV(msg)) != SVt_PVHV) { 152 croak("Usage: BarnOwl::queue_message($message)"); 153 } 154 155 m = owl_perlconfig_hashref2message(msg); 156 157 owl_global_messagequeue_addmsg(&g, m); 158 } 159 160 void admin_message(header, body) 161 char *header 162 char *body 163 CODE: 164 { 165 owl_function_adminmsg(header, body); 166 } 167 168 void start_question(line, callback) 169 char *line 170 SV *callback 171 PREINIT: 172 CODE: 173 { 174 if(!SV_IS_CODEREF(callback)) 175 croak("Callback must be a subref"); 176 177 owl_function_start_question(line); 178 179 SvREFCNT_inc(callback); 180 owl_editwin_set_cbdata(owl_global_get_typwin(&g), callback); 181 owl_editwin_set_callback(owl_global_get_typwin(&g), owl_perlconfig_edit_callback); 182 } 183 184 void start_password(line, callback) 185 char *line 186 SV *callback 187 PREINIT: 188 CODE: 189 { 190 if(!SV_IS_CODEREF(callback)) 191 croak("Callback must be a subref"); 192 193 owl_function_start_password(line); 194 195 SvREFCNT_inc(callback); 196 owl_editwin_set_cbdata(owl_global_get_typwin(&g), callback); 197 owl_editwin_set_callback(owl_global_get_typwin(&g), owl_perlconfig_edit_callback); 198 } 199 200 void start_edit_win(line, callback) 201 char *line 202 SV *callback 203 PREINIT: 204 owl_editwin * e; 205 char buff[1024]; 206 CODE: 207 { 208 if(!SV_IS_CODEREF(callback)) 209 croak("Callback must be a subref"); 210 211 e = owl_global_get_typwin(&g); 212 owl_editwin_new_style(e, OWL_EDITWIN_STYLE_MULTILINE, 213 owl_global_get_msg_history(&g)); 214 owl_editwin_clear(e); 215 owl_editwin_set_dotsend(e); 216 snprintf(buff, 1023, "----> %s\n", line); 217 owl_editwin_set_locktext(e, buff); 218 219 owl_global_set_typwin_active(&g); 220 221 SvREFCNT_inc(callback); 222 owl_editwin_set_cbdata(owl_global_get_typwin(&g), callback); 223 owl_editwin_set_callback(owl_global_get_typwin(&g), owl_perlconfig_edit_callback); 224 } 225 226 227 char * 228 get_data_dir () 229 CODE: 230 RETVAL = (char *) owl_get_datadir(); 231 OUTPUT: 232 RETVAL 233 234 char * 235 get_config_dir () 236 CODE: 237 RETVAL = (char *) owl_global_get_confdir(&g); 238 OUTPUT: 239 RETVAL 240 241 void 242 popless_text(text) 243 char *text 244 CODE: 245 { 246 owl_function_popless_text(text); 247 } 248 249 void 250 popless_ztext(text) 251 char *text 252 CODE: 253 { 254 owl_fmtext fm; 255 owl_fmtext_init_null(&fm); 256 owl_fmtext_append_ztext(&fm, text); 257 owl_function_popless_fmtext(&fm); 258 owl_fmtext_free(&fm); 259 } 260 261 void 262 error(text) 263 char *text 264 CODE: 265 { 266 owl_function_error("%s", text); 267 } 268 269 void 270 create_style(name, object) 271 char *name 272 SV *object 273 PREINIT: 274 owl_style *s; 275 CODE: 276 { 277 s = owl_malloc(sizeof(owl_style)); 278 owl_style_create_perl(s, name, object); 279 owl_global_add_style(&g, s); 280 } 281 282 int 283 getnumcolors() 284 CODE: 285 RETVAL = owl_function_get_color_count(); 286 OUTPUT: 287 RETVAL 288 289 void 290 _remove_filter(filterName) 291 char *filterName 292 CODE: 293 { 294 /* Don't delete the current view, or the 'all' filter */ 295 if (strcmp(filterName, owl_view_get_filtname(owl_global_get_current_view(&g))) 296 && strcmp(filterName, "all")) { 297 owl_global_remove_filter(&g,filterName); 298 } 299 } 300 301 char * 302 wordwrap(in, cols) 303 char *in 304 int cols 305 PREINIT: 306 char *rv = NULL; 307 CODE: 308 rv = owl_text_wordwrap(in, cols); 309 RETVAL = rv; 310 OUTPUT: 311 RETVAL 312 CLEANUP: 313 if (rv) owl_free(rv); 314 315 void 316 add_dispatch(fd, cb) 317 int fd 318 SV * cb 319 CODE: 320 SvREFCNT_inc(cb); 321 owl_select_add_perl_dispatch(fd, cb); 322 323 void 324 remove_dispatch(fd) 325 int fd 326 CODE: 327 owl_select_remove_perl_dispatch(fd); 328 329 MODULE = BarnOwl PACKAGE = BarnOwl::Internal 330 331 332 void 333 new_command(name, func, summary, usage, description) 147 334 char *name 148 335 SV *func … … 174 361 } 175 362 176 void queue_message(msg) 177 SV *msg 178 PREINIT: 179 owl_message *m; 180 CODE: 181 { 182 if(!SvROK(msg) || SvTYPE(SvRV(msg)) != SVt_PVHV) { 183 croak("Usage: BarnOwl::queue_message($message)"); 184 } 185 186 m = owl_perlconfig_hashref2message(msg); 187 188 owl_global_messagequeue_addmsg(&g, m); 189 } 190 191 void admin_message(header, body) 192 char *header 193 char *body 194 CODE: 195 { 196 owl_function_adminmsg(header, body); 197 } 198 199 void start_question(line, callback) 200 char *line 201 SV *callback 202 PREINIT: 203 CODE: 204 { 205 if(!SV_IS_CODEREF(callback)) 206 croak("Callback must be a subref"); 207 208 owl_function_start_question(line); 209 210 SvREFCNT_inc(callback); 211 owl_editwin_set_cbdata(owl_global_get_typwin(&g), callback); 212 owl_editwin_set_callback(owl_global_get_typwin(&g), owl_perlconfig_edit_callback); 213 } 214 215 void start_password(line, callback) 216 char *line 217 SV *callback 218 PREINIT: 219 CODE: 220 { 221 if(!SV_IS_CODEREF(callback)) 222 croak("Callback must be a subref"); 223 224 owl_function_start_password(line); 225 226 SvREFCNT_inc(callback); 227 owl_editwin_set_cbdata(owl_global_get_typwin(&g), callback); 228 owl_editwin_set_callback(owl_global_get_typwin(&g), owl_perlconfig_edit_callback); 229 } 230 231 void start_edit_win(line, callback) 232 char *line 233 SV *callback 234 PREINIT: 235 owl_editwin * e; 236 char buff[1024]; 237 CODE: 238 { 239 if(!SV_IS_CODEREF(callback)) 240 croak("Callback must be a subref"); 241 242 e = owl_global_get_typwin(&g); 243 owl_editwin_new_style(e, OWL_EDITWIN_STYLE_MULTILINE, 244 owl_global_get_msg_history(&g)); 245 owl_editwin_clear(e); 246 owl_editwin_set_dotsend(e); 247 snprintf(buff, 1023, "----> %s\n", line); 248 owl_editwin_set_locktext(e, buff); 249 250 owl_global_set_typwin_active(&g); 251 252 SvREFCNT_inc(callback); 253 owl_editwin_set_cbdata(owl_global_get_typwin(&g), callback); 254 owl_editwin_set_callback(owl_global_get_typwin(&g), owl_perlconfig_edit_callback); 255 } 256 257 258 char * 259 get_data_dir () 260 CODE: 261 RETVAL = (char *) owl_get_datadir(); 262 OUTPUT: 263 RETVAL 264 265 char * 266 get_config_dir () 267 CODE: 268 RETVAL = (char *) owl_global_get_confdir(&g); 269 OUTPUT: 270 RETVAL 271 272 void 273 popless_text(text) 274 char *text 275 CODE: 276 { 277 owl_function_popless_text(text); 278 } 279 280 void 281 popless_ztext(text) 282 char *text 283 CODE: 284 { 285 owl_fmtext fm; 286 owl_fmtext_init_null(&fm); 287 owl_fmtext_append_ztext(&fm, text); 288 owl_function_popless_fmtext(&fm); 289 owl_fmtext_free(&fm); 290 } 291 292 void 293 error(text) 294 char *text 295 CODE: 296 { 297 owl_function_error("%s", text); 298 } 299 300 void 301 create_style(name, object) 302 char *name 303 SV *object 304 PREINIT: 305 owl_style *s; 306 CODE: 307 { 308 s = owl_malloc(sizeof(owl_style)); 309 owl_style_create_perl(s, name, object); 310 owl_global_add_style(&g, s); 311 } 312 313 int 314 getnumcolors() 315 CODE: 316 RETVAL = owl_function_get_color_count(); 317 OUTPUT: 318 RETVAL 319 320 void 321 _remove_filter(filterName) 322 char *filterName 323 CODE: 324 { 325 /* Don't delete the current view, or the 'all' filter */ 326 if (strcmp(filterName, owl_view_get_filtname(owl_global_get_current_view(&g))) 327 && strcmp(filterName, "all")) { 328 owl_global_remove_filter(&g,filterName); 329 } 330 } 331 332 char * 333 wordwrap(in, cols) 334 char *in 335 int cols 336 PREINIT: 337 char *rv = NULL; 338 CODE: 339 rv = owl_text_wordwrap(in, cols); 340 RETVAL = rv; 341 OUTPUT: 342 RETVAL 343 CLEANUP: 344 if (rv) owl_free(rv); 345 346 void 347 new_variable_string_internal(name, ival, summ, desc) 363 void 364 new_variable_string(name, ival, summ, desc) 348 365 char * name 349 366 char * ival … … 358 375 359 376 void 360 new_variable_int _internal(name, ival, summ, desc)377 new_variable_int(name, ival, summ, desc) 361 378 char * name 362 379 int ival … … 371 388 372 389 void 373 new_variable_bool _internal(name, ival, summ, desc)390 new_variable_bool(name, ival, summ, desc) 374 391 char * name 375 392 int ival … … 382 399 desc, 383 400 ival); 384 385 void386 add_dispatch(fd, cb)387 int fd388 SV * cb389 CODE:390 SvREFCNT_inc(cb);391 owl_select_add_perl_dispatch(fd, cb);392 393 void394 remove_dispatch(fd)395 int fd396 CODE:397 owl_select_remove_perl_dispatch(fd); -
perlwrap.pm
r799b60e r5d2248c 242 242 ); 243 243 244 BarnOwl:: new_command_internal($name, $func, $args{summary}, $args{usage}, $args{description});244 BarnOwl::Internal::new_command($name, $func, $args{summary}, $args{usage}, $args{description}); 245 245 } 246 246 … … 275 275 276 276 sub new_variable_int { 277 unshift @_, \&BarnOwl:: new_variable_int_internal, 0;277 unshift @_, \&BarnOwl::Internal::new_variable_int, 0; 278 278 goto \&_new_variable; 279 279 } 280 280 281 281 sub new_variable_bool { 282 unshift @_, \&BarnOwl:: new_variable_bool_internal, 0;282 unshift @_, \&BarnOwl::Internal::new_variable_bool, 0; 283 283 goto \&_new_variable; 284 284 } 285 285 286 286 sub new_variable_string { 287 unshift @_, \&BarnOwl:: new_variable_string_internal, "";287 unshift @_, \&BarnOwl::Internal::new_variable_string, ""; 288 288 goto \&_new_variable; 289 289 }
Note: See TracChangeset
for help on using the changeset viewer.