Max 5 API Reference
00001 /** 00002 @file 00003 simpletext - show use of text reading and editing 00004 00005 @ingroup examples 00006 */ 00007 00008 #include "ext.h" // standard Max include, always required 00009 #include "ext_obex.h" // required for new style Max object 00010 00011 00012 ////////////////////////// object struct 00013 typedef struct _simpletext 00014 { 00015 t_object ob; // the object itself (must be first) 00016 t_object *t_editor; 00017 char **t_text; 00018 long t_size; 00019 } t_simpletext; 00020 00021 ///////////////////////// function prototypes 00022 //// standard set 00023 void *simpletext_new(t_symbol *s, long argc, t_atom *argv); 00024 void simpletext_free(t_simpletext *x); 00025 void simpletext_assist(t_simpletext *x, void *b, long m, long a, char *s); 00026 void simpletext_read(t_simpletext *x, t_symbol *s); 00027 void simpletext_doread(t_simpletext *x, t_symbol *s, long argc, t_atom *argv); 00028 void simpletext_dblclick(t_simpletext *x); 00029 void simpletext_edclose(t_simpletext *x, char **text, long size); 00030 //////////////////////// global class pointer variable 00031 void *simpletext_class; 00032 00033 00034 int main(void) 00035 { 00036 t_class *c; 00037 00038 c = class_new("simpletext", (method)simpletext_new, (method)simpletext_free, (long)sizeof(t_simpletext), 00039 0L, A_GIMME, 0); 00040 00041 class_addmethod(c, (method)simpletext_read, "read", A_DEFSYM, 0); 00042 class_addmethod(c, (method)simpletext_dblclick, "dblclick", A_CANT, 0); 00043 class_addmethod(c, (method)simpletext_edclose, "edclose", A_CANT, 0); 00044 00045 class_register(CLASS_BOX, c); 00046 simpletext_class = c; 00047 00048 return 0; 00049 } 00050 00051 void simpletext_assist(t_simpletext *x, void *b, long m, long a, char *s) 00052 { 00053 if (m == ASSIST_INLET) 00054 sprintf(s, "Message In"); 00055 } 00056 00057 void simpletext_free(t_simpletext *x) 00058 { 00059 if (x->t_text) 00060 sysmem_freehandle(x->t_text); 00061 } 00062 00063 void simpletext_read(t_simpletext *x, t_symbol *s) 00064 { 00065 defer((t_object *)x, (method)simpletext_doread, s, 0, NULL); 00066 } 00067 00068 void simpletext_dblclick(t_simpletext *x) 00069 { 00070 if (x->t_editor) 00071 object_attr_setchar(x->t_editor, gensym("visible"), 1); 00072 else { 00073 x->t_editor = object_new(CLASS_NOBOX, gensym("jed"), x, 0); 00074 object_method(x->t_editor, gensym("settext"), *x->t_text, gensym("utf-8")); 00075 object_attr_setchar(x->t_editor, gensym("scratch"), 1); 00076 object_attr_setsym(x->t_editor, gensym("title"), gensym("simpletext")); 00077 } 00078 } 00079 00080 void simpletext_doread(t_simpletext *x, t_symbol *s, long argc, t_atom *argv) 00081 { 00082 char filename[MAX_PATH_CHARS]; 00083 short path; 00084 long type = 'TEXT'; 00085 long err; 00086 t_filehandle fh; 00087 00088 if (s == gensym("")) { 00089 filename[0] = 0; 00090 00091 if (open_dialog(filename, &path, &type, &type, 1)) 00092 return; 00093 } else { 00094 strcpy(filename,s->s_name); 00095 if (locatefile_extended(filename,&path,&type,&type,1)) { 00096 object_error((t_object *)x, "can't find file %s",filename); 00097 return; 00098 } 00099 } 00100 // success 00101 00102 err = path_opensysfile(filename, path, &fh, READ_PERM); 00103 if (!err) { 00104 sysfile_readtextfile(fh, x->t_text, 0, TEXT_LB_UNIX | TEXT_NULL_TERMINATE); 00105 sysfile_close(fh); 00106 x->t_size = sysmem_handlesize(x->t_text); 00107 } 00108 } 00109 00110 void simpletext_edclose(t_simpletext *x, char **text, long size) 00111 { 00112 if (x->t_text) 00113 sysmem_freehandle(x->t_text); 00114 00115 x->t_text = sysmem_newhandleclear(size+1); 00116 sysmem_copyptr((char *)*text, *x->t_text, size); 00117 x->t_size = size+1; 00118 x->t_editor = NULL; 00119 } 00120 00121 void *simpletext_new(t_symbol *s, long argc, t_atom *argv) 00122 { 00123 t_simpletext *x = NULL; 00124 00125 x = (t_simpletext *)object_alloc(simpletext_class); 00126 00127 x->t_text = sysmem_newhandle(0); 00128 x->t_size = 0; 00129 x->t_editor = NULL; 00130 return x; 00131 }
Copyright © 2008, Cycling '74