-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBLEND.lss
72 lines (66 loc) · 2.37 KB
/
BLEND.lss
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
<h1>BLEND - Blend two strings</h1>
[[BLEND(S1,S2)]] will blend the two (equi-length) strings [[S1]] and
[[S2]] such that every other character is taken from each string. Thus,
[[BLEND('ABC','123')]] will return [['A1B2C3']].
<h2>Uses</h2>
<<INCLUDES>>=
@
<<BLEND>>=
-PUBLIC BLEND()
*
DEFINE('BLEND(S1,S2)T1,T2,ABC,XYZ,L1,L2')
&ALPHABET LEN(128) . ABC LEN(128) . XYZ
BLE_1 ABC LEN(1) . T1 = :F(BLEND_END)
XYZ LEN(1) . T2 =
BLENDED_ALPHABET = BLENDED_ALPHABET T1 T2 :(BLE_1)
*
BLEND L1 = SIZE(S1)
GT(L1, 128) :F(BLEND_1)
EQ(L1, 0) :S(RETURN)
S1 LEN(128) . S1 REM . T1
S2 LEN(128) . S2 REM . T2
BLEND = REPLACE(BLENDED_ALPHABET, &ALPHABET, S1 S2)
BLEND(T1, T2) :(RETURN)
BLEND_1 L2 = SIZE(S2)
&ALPHABET LEN(*L1) . ABC TAB(128) LEN(*L2) . XYZ
BLENDED_ALPHABET LEN(*(L1 + L2)) . AXBYCZ
BLEND = REPLACE(AXBYCZ, ABC XYZ, S1 S2) :(RETURN)
*
BLEND_END
@
<<unit_test>>=
#!/usr/bin/bash
exec "snobol4" "-b" "$0" "$@"
-INCLUDE 'BLEND.INC'
&CODE = 1
IDENT(BLEND('ABC', '123'), 'A1B2C3') :F(END)
&CODE = 0
END
@
<<>>=
-MODULE BLEND
<<INCLUDES>>
-IN72
-STITL BLEND
-EJECT
*
************************************************************************
* *
* ###### # ####### # # ###### *
* # # # # ## # # # *
* # # # # # # # # # *
* ###### # ##### # # # # # *
* # # # # # # # # # *
* # # # # # ## # # *
* ###### ####### ####### # # ###### *
* *
* BLEND BLEND STRINGS *
* *
************************************************************************
*
* BLEND.lss
*
<<BLEND>>
*
* CE: .MSNOBOL4;
@