1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
/* code for foo1 pd class */
#include "m_pd.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef _WIN32
#include <malloc.h>
#endif
#ifndef RAND_MAX
#define RAND_MAX 21
#endif
t_class *ascwave_class;
typedef struct ascwave
{
t_object t_ob;
t_symbol* filename;
FILE* x_file;
// width vertical, sort of useless
t_float x_jodel;
// width horizontal
t_float x_julp;
// fill or not flag
t_float x_fill;
// chr to use for draw
t_float x_chr;
// chr to use 4 fill
} t_ascwave;
void ascwave_bang(t_ascwave *x, t_floatarg f)
{
// post("cxc/ascwave.c: bang %f", x->x_jodel);
outlet_float(x->t_ob.ob_outlet, x->x_jodel + x->x_jodel);
}
/* fill or line toggle */
static void ascwave_fill(t_ascwave *x, t_floatarg f)
{
x->x_fill = f;
// post("ascwave: fill %f", x->x_fill);
}
/* open a file to put ascii output into */
static void ascwave_open(t_ascwave *x, t_symbol *filename)
{
post("ascwave: open");
x->filename = filename;
post("ascwave: filename = %s",x->filename->s_name);
if ((x->x_file = fopen(x->filename->s_name,"w")) < 0)
{
error("can't create %s",filename->s_name);
return;
}
}
void ascwave_ft1(t_ascwave *x, t_floatarg g)
{
int sz = x->x_julp;
int lchr = x->x_chr;
int schr = 32;
int i = 0;
char* xip;
char* xap;
xip = (char*)malloc((sz+1)*sizeof(char));
xap = (char*)malloc((sz+1)*sizeof(char));
for (i = 0;i <= sz; ++i) {
if (i == sz-1) {
xip[i] = lchr;
} else {
if (!x->x_fill) {
xip[i] = schr;
} else {
xip[i] = lchr;
/* if (rand() > 20)
xip[i] = '\n'; */
}
}
if (i == 0 || i == sz-1)
xap[i] = lchr;
else
xap[i] = i % 80 + 33;
}
// xip[sz] = schr;//'\n';
xip[sz+1] = '\0';
//xap[sz] = schr;//'\n';
xap[sz+1] = '\0';
// poststring(xip);
// post("ft1: %f, %d", x->x_jodel, sz);
// outlet_float(x->t_ob.ob_outlet, x->x_jodel + x->x_jodel);
outlet_symbol(x->t_ob.ob_outlet, gensym(xip));
for (i = 0; i < g-2;++i)
outlet_symbol(x->t_ob.ob_outlet, gensym(xap));
if (g > 1)
outlet_symbol(x->t_ob.ob_outlet, gensym(xip));
x->x_jodel = g;
free(xip);
free(xap);
}
static void ascwave_width(t_ascwave *x, t_floatarg g)
{
if (g < 0)
x->x_julp = 0;
else
x->x_julp = g;
//post("ascwave: setting width: %f", x->x_julp);
}
static void ascwave_chr(t_ascwave *x, t_floatarg g)
{
x->x_chr = g;
// post("ascwave: setting character: %f", x->x_chr);
}
void ascwave_free() { }
void *ascwave_new()
{
t_ascwave *x = (t_ascwave *)pd_new(ascwave_class);
x->x_chr = 46;
// outlet_new(&x->t_ob, &s_float);
outlet_new(&x->t_ob, &s_symbol);
inlet_new(&x->t_ob, &x->t_ob.ob_pd, gensym("float"), gensym("ft1"));
inlet_new(&x->t_ob, &x->t_ob.ob_pd, gensym("float"), gensym("ft2"));
inlet_new(&x->t_ob, &x->t_ob.ob_pd, gensym("float"), gensym("ft3"));
// post("ascwave_new");
return (void *)x;
}
void ascwave_setup()
{
// post("ascwave_setup");
ascwave_class = class_new(gensym("ascwave"), (t_newmethod)ascwave_new, 0,
sizeof(t_ascwave), 0, 0);
class_addmethod(ascwave_class, (t_method)ascwave_bang, gensym("bang"), 0);
class_addmethod(ascwave_class, (t_method)ascwave_fill, gensym("fill"), A_FLOAT, A_NULL);
class_addmethod(ascwave_class, (t_method) ascwave_open, gensym("open"), A_SYMBOL,A_NULL);
class_addmethod(ascwave_class, (t_method)ascwave_ft1, gensym("ft1"), A_FLOAT, 0);
class_addmethod(ascwave_class, (t_method)ascwave_width, gensym("ft2"), A_FLOAT, 0);
// set chr
class_addmethod(ascwave_class, (t_method)ascwave_chr, gensym("ft3"), A_FLOAT, 0);
}
|