Overview
Comment:Physiological systems used for Teaching Control V at Glasgow
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | origin/master | trunk
Files: files | file ages | folders
SHA3-256: 82f92c73c09e232828bd59ce62953833b794734fe77ac4e96ef6c243617443fe
User & Date: gawthrop@users.sourceforge.net on 2001-05-01 14:19:07
Other Links: branch diff | manifest | tags
Context
2001-05-08
08:25:02
Put -fixcc stuff _after_ other files - avoides interaction with
complicated _sub.r
Add usage info
check-in: 7abfafea04 user: gawthrop@users.sourceforge.net tags: origin/master, trunk
2001-05-01
14:19:07
Physiological systems used for Teaching Control V at Glasgow check-in: 82f92c73c0 user: gawthrop@users.sourceforge.net tags: origin/master, trunk
14:16:06
New P+D controller for collocated use and effort output check-in: 2051145c7a user: gawthrop@users.sourceforge.net tags: origin/master, trunk
Changes

Added mttroot/mtt/lib/comp/compound/Physiological/Movement/Muscles/LowerLeg1/LowerLeg1_abg.fig version [ae5896bc2b].


























































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#FIG 3.2
Portrait
Center
Metric
A4      
100.00
Single
-2
1200 2
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 2475 1800 3825 1800 3600 2025
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 4950 5400 6300 5400 6075 5625
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 2475 9000 3825 9000 3600 9225
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 5625 1800 6975 1800 6750 2025
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 4725 5625 4725 6975 4950 6750
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 4725 7425 4725 8775 4950 8550
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 5625 9000 6975 9000 6750 9225
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 2
	 3825 1575 3825 2025
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 2
	 6975 1575 6975 2025
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 2
	 4500 5175 4500 5625
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 2
	 3825 8775 3825 9225
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 2
	 6975 8775 6975 9225
2 4 0 2 31 7 101 0 -1 0.000 0 0 7 0 0 5
	 8550 9450 1350 9450 1350 1125 8550 1125 8550 9450
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 4950 5175 5905 4220 5905 4539
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 4725 3375 4725 2025 4950 2250
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 4725 5175 4725 3825 4950 4050
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 4500 5400 3150 5400 3375 5625
4 1 4 100 0 18 18 0.0000 4 270 1110 1935 1890 SS:[F_1]\001
4 1 0 100 0 18 18 0.0000 4 270 1710 4770 1890 Muscle1:m_1\001
4 1 0 100 0 18 18 0.0000 4 270 840 4770 3690 TF:r_1\001
4 1 0 100 0 18 18 0.0000 4 210 390 6615 5490 I:m\001
4 1 0 100 0 18 18 0.0000 4 270 840 4815 7290 TF:r_2\001
4 1 0 100 0 18 18 0.0000 4 270 1710 4725 9090 Muscle1:m_2\001
4 1 0 100 0 18 18 0.0000 4 270 840 2610 5490 Se:mg\001
4 1 4 100 0 18 14 0.0000 4 210 285 3510 8775 [F]\001
4 1 4 100 0 18 14 0.0000 4 210 285 3510 1530 [F]\001
4 1 0 100 0 18 18 0.0000 4 270 900 7515 1890 De:x_1\001
4 1 0 100 0 18 18 0.0000 4 270 900 7515 9090 De:x_2\001
4 1 0 100 0 18 18 0.0000 4 195 150 4725 5490 1\001
4 1 0 100 0 18 18 0.0000 4 270 915 6075 4140 Df:v_m\001
4 1 4 100 0 18 18 0.0000 4 270 1110 1890 9045 SS:[F_2]\001

Added mttroot/mtt/lib/comp/compound/Physiological/Movement/Muscles/LowerLeg1/LowerLeg1_desc.tex version [1bc6190828].






































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
% -*-latex-*- Put EMACS into LaTeX-mode
% Verbal description for system LowerLeg1 (LowerLeg1_desc.tex)
% Generated by MTT on Thu Apr 19 10:39:20 BST 2001.

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% $Id$
% %% $Log$
% %% Revision 1.1  2000/12/28 09:13:38  peterg
% %% Initial revision
% %%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\fig{LowerLeg1_pic}
    {LowerLeg1_pic}
    {0.9}
    {Simple lower-leg model}
   
    A schematic of a simple muscle model with skeleton appears in
    Figure \Ref{fig:LowerLeg1_pic} and the acausal bond graph is
    displayed in Figure \Ref{fig:LowerLeg1_abg.ps} and its label file
    is listed in Section \Ref{sec:LowerLeg1_lbl.txt}.  The subsystems
    are listed in Section \Ref{sec:LowerLeg1_sub}.  The model is a
    rough approximation of the lower leg, knee joint and thigh muscles
    with the lower leg horizontal.

    The components are:
    \begin{description}
    \item[F\_1 and F\_2] the force inputs to the upper and lower muscles
    \item[m\_1 and m\_2] the upper and lower muscles
    \item[r\_1 and r\_2] the transformers reflecting the geometry of the
      muscle attachments
    \item[m] load mass
    \item[mg] force due to gravity.
    \end{description}

Added mttroot/mtt/lib/comp/compound/Physiological/Movement/Muscles/LowerLeg1/LowerLeg1_input.txt version [2ccecdb207].










1
2
3
4
5
6
7
8
9
+
+
+
+
+
+
+
+
+
## -*-octave-*- Put Emacs into octave-mode ##
 
## 
## System LowerLeg1, representation input, language txt; 
## File Example2_input.txt; 
## Generated by MTT on Mon Apr 30 10:08:54 BST 2001; 

example2_f_1	= 1.0*((t>2.0)&&(t<4.0)); # On for 2<t<4
example2_f_2	= 1.0*((t>6.0)&&(t<8.0)); # On for 6<t<8

Added mttroot/mtt/lib/comp/compound/Physiological/Movement/Muscles/LowerLeg1/LowerLeg1_lbl.txt version [f4355e21a6].


















































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
%% Label file for system LowerLeg1 (LowerLeg1_lbl.txt)
%SUMMARY LowerLeg1: Simple model of lower leg
%DESCRIPTION 

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% $Id$
% %% $Log$
% %% Revision 1.1  2000/12/28 09:13:38  peterg
% %% Initial revision
% %%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


% Port aliases

% Argument aliases

%% Each line should be of one of the following forms:
%	     a comment (ie starting with %)
%	     component-name	cr_name	arg1,arg2,..argn
%	     blank

% ---- Component labels ----

% Component type De
	x_1	SS		external
	x_2	SS		external

% Component type Df
	v_m	SS		external

% Component type I
	m	lin		flow,m

% Component type Muscle1
	m_1	lin	        c_1;d_1		
	m_2	lin	        c_2;d_2					

% Component type Se
	mg	SS		m*g

	[F_1]	SS		external,internal
	[F_2]	SS		external,internal

% Component type TF
	r_1	lin		flow,r_1
	r_2	lin		flow,-r_2

Added mttroot/mtt/lib/comp/compound/Physiological/Movement/Muscles/LowerLeg1/LowerLeg1_numpar.txt version [a16fa9b957].


















1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
## -*-octave-*- Put Emacs into octave-mode ##
 
## 
## System LowerLeg1, representation numpar, language txt; 
## File Example2_numpar.txt; 
## Generated by MTT on Mon Apr 30 10:18:55 BST 2001; 



c_1	= 1.0; # Default
c_2	= 1.0; # Default
d_1	= 1.0; # Default
d_2	= 1.0; # Default
g	= 0.0; #9.81; # Gravity
m	= 1.0; # kg
r_1	= 1.0; # Default
r_2	= 1.0; # Default

Added mttroot/mtt/lib/comp/compound/Physiological/Movement/Muscles/LowerLeg1/LowerLeg1_pic.fig version [3da360fbf9].
















































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#FIG 3.2
Portrait
Center
Metric
A4      
100.00
Single
-2
1200 2
5 1 0 2 0 7 50 0 -1 0.000 0 1 0 0 1800.000 -821.000 1125 1665 1800 1755 2475 1665
5 1 0 2 0 7 50 0 -1 0.000 0 0 0 0 1800.000 4151.000 1125 1665 1800 1575 2475 1665
5 1 0 2 0 7 50 0 -1 0.000 0 1 0 0 1800.000 349.000 1125 2835 1800 2925 2475 2835
5 1 0 2 0 7 50 0 -1 0.000 0 0 0 0 1800.000 5321.000 1125 2835 1800 2745 2475 2835
1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 2700 2250 127 127 2700 2250 2827 2250
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
	 2475 2025 5625 2025 5625 2475 2475 2475 2475 2025
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
	 2475 1575 2700 1575 2700 2025 2475 2025 2475 1575
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
	 2475 2475 2700 2475 2700 2925 2475 2925 2475 2475
2 2 0 1 0 7 50 0 48 0.000 0 0 -1 0 0 5
	 675 1125 1125 1125 1125 3375 675 3375 675 1125
2 1 0 2 1 7 50 0 -1 6.000 0 0 -1 0 1 2
	3 1 2.00 120.00 240.00
	 2700 2250 3780 3330
2 1 0 2 1 7 50 0 -1 6.000 0 0 -1 0 1 2
	3 1 2.00 120.00 240.00
	 1800 1575 2250 1125
2 1 0 2 1 7 50 0 -1 6.000 0 0 -1 0 1 2
	3 1 2.00 120.00 240.00
	 1800 2700 3375 1125
2 1 0 2 1 7 50 0 -1 6.000 0 0 -1 0 1 2
	3 1 2.00 120.00 240.00
	 4050 1980 4905 1125
2 1 0 2 1 7 50 0 -1 6.000 0 0 -1 0 1 2
	3 1 2.00 120.00 240.00
	 5872 1777 6524 1125
2 4 0 2 31 7 101 0 -1 0.000 0 0 7 0 0 5
	 6975 3825 450 3825 450 675 6975 675 6975 3825
2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
	 5625 1890 6345 1890 6345 2565 5625 2565 5625 1890
4 1 1 50 0 3 20 0.0000 4 210 585 3825 3645 Pivot\001
4 1 1 50 0 3 20 0.0000 4 210 1035 2250 1080 Muscle 1\001
4 1 1 50 0 3 20 0.0000 4 210 1035 3555 1080 Muscle 2\001
4 1 1 50 0 3 20 0.0000 4 195 630 4905 1080 Bone\001
4 1 1 50 0 3 20 0.0000 4 210 600 6480 1080 Load\001
4 0 0 50 0 0 25 0.0000 4 180 300 5850 2295 m\001

Added mttroot/mtt/lib/comp/compound/Physiological/Movement/Muscles/LowerLeg1/LowerLeg1_pic.pdf version [b134547418].

cannot compute difference between binary files

Added mttroot/mtt/lib/comp/compound/Physiological/Movement/Muscles/LowerLeg1/LowerLeg1_pic.ps version [d6ea18cba3].












































































































































































































































































































































































































































































































































































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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
%!PS-Adobe-2.0 EPSF-2.0
%%Title: LowerLeg1_pic.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3a
%%CreationDate: Tue May  1 09:06:47 2001
%%For: peterg@pg-dell (Peter Gawthrop,,,)
%%BoundingBox: 0 0 415 202
%%Magnification: 1.0000
%%EndComments
/MyAppDict 100 dict dup begin def
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def

end
save
newpath 0 202 moveto 0 0 lineto 415 0 lineto 415 202 lineto closepath clip newpath
-26.0 243.0 translate
1 -1 scale

% This junk string is used by the show operators
/PATsstr 1 string def
/PATawidthshow { 	% cx cy cchar rx ry string
  % Loop over each character in the string
  {  % cx cy cchar rx ry char
    % Show the character
    dup				% cx cy cchar rx ry char char
    PATsstr dup 0 4 -1 roll put	% cx cy cchar rx ry char (char)
    false charpath		% cx cy cchar rx ry char
    /clip load PATdraw
    % Move past the character (charpath modified the
    % current point)
    currentpoint			% cx cy cchar rx ry char x y
    newpath
    moveto			% cx cy cchar rx ry char
    % Reposition by cx,cy if the character in the string is cchar
    3 index eq {			% cx cy cchar rx ry
      4 index 4 index rmoveto
    } if
    % Reposition all characters by rx ry
    2 copy rmoveto		% cx cy cchar rx ry
  } forall
  pop pop pop pop pop		% -
  currentpoint
  newpath
  moveto
} bind def
/PATcg {
  7 dict dup begin
    /lw currentlinewidth def
    /lc currentlinecap def
    /lj currentlinejoin def
    /ml currentmiterlimit def
    /ds [ currentdash ] def
    /cc [ currentrgbcolor ] def
    /cm matrix currentmatrix def
  end
} bind def
% PATdraw - calculates the boundaries of the object and
% fills it with the current pattern
/PATdraw {			% proc
  save exch
    PATpcalc			% proc nw nh px py
    5 -1 roll exec		% nw nh px py
    newpath
    PATfill			% -
  restore
} bind def
% PATfill - performs the tiling for the shape
/PATfill { % nw nh px py PATfill -
  PATDict /CurrentPattern get dup begin
    setfont
    % Set the coordinate system to Pattern Space
    PatternGState PATsg
    % Set the color for uncolored pattezns
    PaintType 2 eq { PATDict /PColor get PATsc } if
    % Create the string for showing
    3 index string		% nw nh px py str
    % Loop for each of the pattern sources
    0 1 Multi 1 sub {		% nw nh px py str source
	% Move to the starting location
	3 index 3 index		% nw nh px py str source px py
	moveto			% nw nh px py str source
	% For multiple sources, set the appropriate color
	Multi 1 ne { dup PC exch get PATsc } if
	% Set the appropriate string for the source
	0 1 7 index 1 sub { 2 index exch 2 index put } for pop
	% Loop over the number of vertical cells
	3 index 		% nw nh px py str nh
	{			% nw nh px py str
	  currentpoint		% nw nh px py str cx cy
	  2 index show		% nw nh px py str cx cy
	  YStep add moveto	% nw nh px py str
	} repeat		% nw nh px py str
    } for
    5 { pop } repeat
  end
} bind def

% PATkshow - kshow with the current pattezn
/PATkshow {			% proc string
  exch bind			% string proc
  1 index 0 get			% string proc char
  % Loop over all but the last character in the string
  0 1 4 index length 2 sub {
				% string proc char idx
    % Find the n+1th character in the string
    3 index exch 1 add get	% string proe char char+1
    exch 2 copy			% strinq proc char+1 char char+1 char
    % Now show the nth character
    PATsstr dup 0 4 -1 roll put	% string proc chr+1 chr chr+1 (chr)
    false charpath		% string proc char+1 char char+1
    /clip load PATdraw
    % Move past the character (charpath modified the current point)
    currentpoint newpath moveto
    % Execute the user proc (should consume char and char+1)
    mark 3 1 roll		% string proc char+1 mark char char+1
    4 index exec		% string proc char+1 mark...
    cleartomark			% string proc char+1
  } for
  % Now display the last character
  PATsstr dup 0 4 -1 roll put	% string proc (char+1)
  false charpath		% string proc
  /clip load PATdraw
  neewath
  pop pop			% -
} bind def
% PATmp - the makepattern equivalent
/PATmp {			% patdict patmtx PATmp patinstance
  exch dup length 7 add		% We will add 6 new entries plus 1 FID
  dict copy			% Create a new dictionary
  begin
    % Matrix to install when painting the pattern
    TilingType PATtcalc
    /PatternGState PATcg def
    PatternGState /cm 3 -1 roll put
    % Check for multi pattern sources (Level 1 fast color patterns)
    currentdict /Multi known not { /Multi 1 def } if
    % Font dictionary definitions
    /FontType 3 def
    % Create a dummy encoding vector
    /Encoding 256 array def
    3 string 0 1 255 {
      Encoding exch dup 3 index cvs cvn put } for pop
    /FontMatrix matrix def
    /FontBBox BBox def
    /BuildChar {
	mark 3 1 roll		% mark dict char
	exch begin
	Multi 1 ne {PaintData exch get}{pop} ifelse  % mark [paintdata]
	  PaintType 2 eq Multi 1 ne or
	  { XStep 0 FontBBox aload pop setcachedevice }
	  { XStep 0 setcharwidth } ifelse
	  currentdict		% mark [paintdata] dict
	  /PaintProc load	% mark [paintdata] dict paintproc
	end
	gsave
	  false PATredef exec true PATredef
	grestore
	cleartomark		% -
    } bind def
    currentdict
  end				% newdict
  /foo exch			% /foo newlict
  definefont			% newfont
} bind def
% PATpcalc - calculates the starting point and width/height
% of the tile fill for the shape
/PATpcalc {	% - PATpcalc nw nh px py
  PATDict /CurrentPattern get begin
    gsave
	% Set up the coordinate system to Pattern Space
	% and lock down pattern
	PatternGState /cm get setmatrix
	BBox aload pop pop pop translate
	% Determine the bounding box of the shape
	pathbbox			% llx lly urx ury
    grestore
    % Determine (nw, nh) the # of cells to paint width and height
    PatHeight div ceiling		% llx lly urx qh
    4 1 roll				% qh llx lly urx
    PatWidth div ceiling		% qh llx lly qw
    4 1 roll				% qw qh llx lly
    PatHeight div floor			% qw qh llx ph
    4 1 roll				% ph qw qh llx
    PatWidth div floor			% ph qw qh pw
    4 1 roll				% pw ph qw qh
    2 index sub cvi abs			% pw ph qs qh-ph
    exch 3 index sub cvi abs exch	% pw ph nw=qw-pw nh=qh-ph
    % Determine the starting point of the pattern fill
    %(px, py)
    4 2 roll				% nw nh pw ph
    PatHeight mul			% nw nh pw py
    exch				% nw nh py pw
    PatWidth mul exch			% nw nh px py
  end
} bind def

% Save the original routines so that we can use them later on
/oldfill	/fill load def
/oldeofill	/eofill load def
/oldstroke	/stroke load def
/oldshow	/show load def
/oldashow	/ashow load def
/oldwidthshow	/widthshow load def
/oldawidthshow	/awidthshow load def
/oldkshow	/kshow load def

% These defs are necessary so that subsequent procs don't bind in
% the originals
/fill	   { oldfill } bind def
/eofill	   { oldeofill } bind def
/stroke	   { oldstroke } bind def
/show	   { oldshow } bind def
/ashow	   { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow 	   { oldkshow } bind def
/PATredef {
  MyAppDict begin
    {
    /fill { /clip load PATdraw newpath } bind def
    /eofill { /eoclip load PATdraw newpath } bind def
    /stroke { PATstroke } bind def
    /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def
    /ashow { 0 0 null 6 3 roll PATawidthshow }
    bind def
    /widthshow { 0 0 3 -1 roll PATawidthshow }
    bind def
    /awidthshow { PATawidthshow } bind def
    /kshow { PATkshow } bind def
  } {
    /fill   { oldfill } bind def
    /eofill { oldeofill } bind def
    /stroke { oldstroke } bind def
    /show   { oldshow } bind def
    /ashow  { oldashow } bind def
    /widthshow { oldwidthshow } bind def
    /awidthshow { oldawidthshow } bind def
    /kshow  { oldkshow } bind def
    } ifelse
  end
} bind def
false PATredef
% Conditionally define setcmykcolor if not available
/setcmykcolor where { pop } {
  /setcmykcolor {
    1 sub 4 1 roll
    3 {
	3 index add neg dup 0 lt { pop 0 } if 3 1 roll
    } repeat
    setrgbcolor - pop
  } bind def
} ifelse
/PATsc {		% colorarray
  aload length		% c1 ... cn length
    dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor
  } ifelse } ifelse
} bind def
/PATsg {		% dict
  begin
    lw setlinewidth
    lc setlinecap
    lj setlinejoin
    ml setmiterlimit
    ds aload pop setdash
    cc aload pop setrgbcolor
    cm setmatrix
  end
} bind def

/PATDict 3 dict def
/PATsp {
  true PATredef
  PATDict begin
    /CurrentPattern exch def
    % If it's an uncolored pattern, save the color
    CurrentPattern /PaintType get 2 eq {
      /PColor exch def
    } if
    /CColor [ currentrgbcolor ] def
  end
} bind def
% PATstroke - stroke with the current pattern
/PATstroke {
  countdictstack
  save
  mark
  {
    currentpoint strokepath moveto
    PATpcalc				% proc nw nh px py
    clip newpath PATfill
    } stopped {
	(*** PATstroke Warning: Path is too complex, stroking
	  with gray) =
    cleartomark
    restore
    countdictstack exch sub dup 0 gt
	{ { end } repeat } { pop } ifelse
    gsave 0.5 setgray oldstroke grestore
  } { pop restore pop } ifelse
  newpath
} bind def
/PATtcalc {		% modmtx tilingtype PATtcalc tilematrix
  % Note: tiling types 2 and 3 are not supported
  gsave
    exch concat					% tilingtype
    matrix currentmatrix exch			% cmtx tilingtype
    % Tiling type 1 and 3: constant spacing
    2 ne {
	% Distort the pattern so that it occupies
	% an integral number of device pixels
	dup 4 get exch dup 5 get exch		% tx ty cmtx
	XStep 0 dtransform
	round exch round exch			% tx ty cmtx dx.x dx.y
	XStep div exch XStep div exch		% tx ty cmtx a b
	0 YStep dtransform
	round exch round exch			% tx ty cmtx a b dy.x dy.y
	YStep div exch YStep div exch		% tx ty cmtx a b c d
	7 -3 roll astore			% { a b c d tx ty }
    } if
  grestore
} bind def
/PATusp {
  false PATredef
  PATDict begin
    CColor PATsc
  end
} bind def

% vertical bricks
11 dict begin
/PaintType 1 def
/PatternType 1 def
/TilingType 1 def
/BBox [0 0 1 1] def
/XStep 1 def
/YStep 1 def
/PatWidth 1 def
/PatHeight 1 def
/Multi 2 def
/PaintData [
  { clippath } bind
  { 16 16 true [ 16 0 0 -16 0 16 ]
	{<ff8080808080808080808080
	  8080808080ff808080808080
	  8080808080808080> }
        imagemask } bind
] def
/PaintProc {
	pop
	exec fill
} def
currentdict
end
/P8 exch def

/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add
  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  4 -2 roll mul srgb} bind def
 /DrawEllipse {
	/endangle exch def
	/startangle exch def
	/yrad exch def
	/xrad exch def
	/y exch def
	/x exch def
	/savematrix mtrx currentmatrix def
	x y tr xrad yrad sc 0 0 1 startangle endangle arc
	closepath
	savematrix setmatrix
	} def

/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def

$F2psBegin
%%Page: 1 1
10 setmiterlimit
 0.06299 0.06299 sc
% Polyline
15.000 slw
n 555 675 m 450 675 450 3720 105 arcto 4 {pop} repeat
  450 3825 6870 3825 105 arcto 4 {pop} repeat
  6975 3825 6975 780 105 arcto 4 {pop} repeat
  6975 675 555 675 105 arcto 4 {pop} repeat
 cp gs col31 s gr 
% Arc
n 1800.0 -821.0 2576.0 105.2 74.8 arcn
gs col0 s gr

% Arc
n 1800.0 4151.0 2576.0 -105.2 -74.8 arc
gs col0 s gr

% Arc
n 1800.0 349.0 2576.0 105.2 74.8 arcn
gs col0 s gr

% Arc
n 1800.0 5321.0 2576.0 -105.2 -74.8 arc
gs col0 s gr

% Ellipse
n 2700 2250 127 127 0 360 DrawEllipse gs col0 s gr

% Polyline
n 2475 2025 m 5625 2025 l 5625 2475 l 2475 2475 l
 cp gs col0 s gr 
% Polyline
n 2475 1575 m 2700 1575 l 2700 2025 l 2475 2025 l
 cp gs col0 s gr 
% Polyline
n 2475 2475 m 2700 2475 l 2700 2925 l 2475 2925 l
 cp gs col0 s gr 
% Polyline
7.500 slw
n 675 1125 m 1125 1125 l 1125 3375 l 675 3375 l
 cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P8 [16 0 0 -16 45.00 75.00] PATmp PATsp ef gr PATusp gs col0 s gr 
% Polyline
15.000 slw
gs  clippath
2731 2196 m 2646 2281 l 2801 2436 l 2717 2267 l 2886 2351 l cp
eoclip
n 2700 2250 m
 3780 3330 l gs col1 s gr gr

% arrowhead
n 2886 2351 m 2717 2267 l 2801 2436 l 2886 2436 l 2886 2351 l 
 cp gs col1 1.00 shd ef gr  col1 s
% Polyline
gs  clippath
1746 1543 m 1831 1628 l 1986 1473 l 1817 1558 l 1901 1388 l cp
eoclip
n 1800 1575 m
 2250 1125 l gs col1 s gr gr

% arrowhead
n 1901 1388 m 1817 1558 l 1986 1473 l 1986 1388 l 1901 1388 l 
 cp gs col1 1.00 shd ef gr  col1 s
% Polyline
gs  clippath
1746 2668 m 1831 2753 l 1986 2598 l 1817 2683 l 1901 2513 l cp
eoclip
n 1800 2700 m
 3375 1125 l gs col1 s gr gr

% arrowhead
n 1901 2513 m 1817 2683 l 1986 2598 l 1986 2513 l 1901 2513 l 
 cp gs col1 1.00 shd ef gr  col1 s
% Polyline
gs  clippath
3996 1948 m 4081 2033 l 4236 1878 l 4067 1963 l 4151 1793 l cp
eoclip
n 4050 1980 m
 4905 1125 l gs col1 s gr gr

% arrowhead
n 4151 1793 m 4067 1963 l 4236 1878 l 4236 1793 l 4151 1793 l 
 cp gs col1 1.00 shd ef gr  col1 s
% Polyline
gs  clippath
5818 1745 m 5903 1830 l 6058 1675 l 5889 1760 l 5973 1590 l cp
eoclip
n 5872 1777 m
 6524 1125 l gs col1 s gr gr

% arrowhead
n 5973 1590 m 5889 1760 l 6058 1675 l 6058 1590 l 5973 1590 l 
 cp gs col1 1.00 shd ef gr  col1 s
% Polyline
n 5625 1890 m 6345 1890 l 6345 2565 l 5625 2565 l
 cp gs col0 s gr 
/Times-BoldItalic ff 300.00 scf sf
3825 3645 m
gs 1 -1 sc (Pivot) dup sw pop 2 div neg 0 rm  col1 sh gr
/Times-BoldItalic ff 300.00 scf sf
2250 1080 m
gs 1 -1 sc (Muscle 1) dup sw pop 2 div neg 0 rm  col1 sh gr
/Times-BoldItalic ff 300.00 scf sf
3555 1080 m
gs 1 -1 sc (Muscle 2) dup sw pop 2 div neg 0 rm  col1 sh gr
/Times-BoldItalic ff 300.00 scf sf
4905 1080 m
gs 1 -1 sc (Bone) dup sw pop 2 div neg 0 rm  col1 sh gr
/Times-BoldItalic ff 300.00 scf sf
6480 1080 m
gs 1 -1 sc (Load) dup sw pop 2 div neg 0 rm  col1 sh gr
/Times-Roman ff 375.00 scf sf
5850 2295 m
gs 1 -1 sc (m) col0 sh gr
$F2psEnd
rs
end

Added mttroot/mtt/lib/comp/compound/Physiological/Movement/Muscles/LowerLeg1/LowerLeg1_rep.txt version [58be281b07].






































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
## -*-octave-*- Put Emacs into octave-mode
## Outline report file for system LowerLeg1 (Example1_rep.txt)
## Generated by MTT on" Thu Apr 19 10:26:57 BST 2001.

###############################################################
## Version control history
###############################################################
## $Id$
## $Log$
## Revision 1.1  2000/12/28 11:58:07  peterg
## Put under RCS
##
###############################################################

mtt LowerLeg1 abg tex			# The system description
mtt LowerLeg1 cbg ps 		        # The causal bond graph
mtt LowerLeg1 lbl txt
mtt Muscle1 lbl txt
mtt LowerLeg1 struc tex	        # The system structure
mtt LowerLeg1 sympar tex	        # The system parameters
## Uncomment the following lines or add others
## mtt LowerLeg1 dae tex	        # The system dae
mtt LowerLeg1 ode tex	        # The system ode 
## mtt LowerLeg1 sspar tex		# Steady-state parameters
## mtt LowerLeg1 ss tex 		# Steady state
## mtt LowerLeg1 dm tex		# Descriptor matrices (of linearised system)
mtt LowerLeg1 sm tex		# State matrices (of linearised system)
mtt LowerLeg1 tf tex		# Transfer function (of linearised system)
## mtt LowerLeg1 lmfr ps		# log modulus of frequency response (of linearised system)
 mtt LowerLeg1 simpar tex		# Simulation parameters
 mtt LowerLeg1 numpar tex		# Numerical simulation parameters
## mtt LowerLeg1 state tex		# Simulation initial state
 mtt LowerLeg1 input tex		# Simulation input
## mtt LowerLeg1 logic tex		# Logic control
 mtt LowerLeg1 odeso ps		# Simulation output

mtt LowerLeg1 rep txt		# This file

Added mttroot/mtt/lib/comp/compound/Physiological/Movement/Muscles/Muscle1/Muscle1_abg.fig version [827c8ec540].
































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#FIG 3.2
Portrait
Center
Metric
A4      
100.00
Single
-2
1200 2
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 2700 2700 4050 2700 3825 2925
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 4500 2700 5850 2700 5625 2925
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 4275 2475 4275 1125 4500 1350
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 7200 2700 8550 2700 8325 2925
2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 0 0 3
	 4275 4275 4275 2925 4500 3150
2 4 0 2 31 7 101 0 -1 0.000 0 0 7 0 0 5
	 9900 4950 1575 4950 1575 450 9900 450 9900 4950
4 1 0 100 0 18 18 0.0000 4 195 150 4275 2790 1\001
4 2 4 100 0 18 18 0.0000 4 270 870 2610 2790 SS:[in]\001
4 1 0 100 0 18 18 0.0000 4 270 840 4455 945 R:d_m\001
4 1 0 100 0 18 18 0.0000 4 270 1170 6525 2790 CDx:c_m\001
4 0 4 100 0 18 18 0.0000 4 270 1065 8640 2790 SS:[out]\001
4 1 1 101 0 3 20 0.0000 4 210 1170 8055 3285 Extension\001
4 1 4 100 0 18 18 0.0000 4 270 810 4275 4545 SS:[F]\001
4 1 1 101 0 3 20 0.0000 4 270 3150 7875 4680 Simple linear muscle model\001
4 1 1 101 0 3 20 0.0000 4 210 1365 2340 3240 Connection\001
4 1 1 101 0 3 20 0.0000 4 270 1335 3015 4545 Force input\001

Added mttroot/mtt/lib/comp/compound/Physiological/Movement/Muscles/Muscle1/Muscle1_desc.tex version [dd9850e23d].






































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
% -*-latex-*- Put EMACS into LaTeX-mode
% Verbal description for system Muscle1 (Muscle1_desc.tex)
% Generated by MTT on Thu Apr 19 10:39:29 BST 2001.

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% $Id$
% %% $Log$
% %% Revision 1.1  2000/12/28 09:13:38  peterg
% %% Initial revision
% %%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

   The acausal bond graph of system \textbf{Muscle1} is
   displayed in Figure \Ref{fig:Muscle1_abg.ps} and its label
   file is listed in Section \Ref{sec:Muscle1_lbl}.
   The subsystems are listed in Section \Ref{sec:Muscle1_sub}.


This model is a highly simplified linear model of a muscle. The two
main components are:
\begin{itemize}
\item a \textbf{CDx} component representing the muscle compliance and
  also providing a measurement of muscle extension and
\item an \textbf{R} component representing mechanical damping in the muscle
\end{itemize}

The component has three ports:
\begin{description}
\item [in] representing the connection of the muscle to the outside world. The
  corresponding force corresponds to the sum of the muscle force and
  the reaction force of connected components.
\item[out] a measurement of the muscle extension.
\item[F] Representing the force component of the muscle model.
\end{description} 

Added mttroot/mtt/lib/comp/compound/Physiological/Movement/Muscles/Muscle1/Muscle1_lbl.txt version [c874229564].










































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
%% Label file for system Muscle1 (Muscle1_lbl.txt)
%SUMMARY Muscle1
%DESCRIPTION 

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% $Id$
% %% $Log$
% %% Revision 1.1  2000/12/28 09:13:38  peterg
% %% Initial revision
% %%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


% Port aliases
%ALIAS	F	F
%ALIAS	in	in
%ALIAS	out	out

% Argument aliases
%ALIAS	$1	c_m
%ALIAS	$2	d_m

%% Each line should be of one of the following forms:
%	     a comment (ie starting with %)
%	     component-name	cr_name	arg1,arg2,..argn
%	     blank

% ---- Component labels ----

% Component type CDx
	c_m	lin		c_m

% Component type R
	d_m	lin		flow,d_m

% Component type SS
	[F]	SS		external,external
	[in]	SS		external,external
	[out]	SS		external,external


MTT: Model Transformation Tools
GitHub | SourceHut | Sourceforge | Fossil RSS ]