The extension is described in Blocks a new datatype for SNOBOL4, James F. Gimpel, Communications of the ACM, Volume 15 Issue 6, June 1972, Pages 438-447.
BLOCKS were originally implemented in SNOBOL4, and then re-implemented in in SIL (the Macro SNOBOL4 SNOBOL Implementation Language).
A manual appears in the Michigan Terminal Service (MTS) SNOBOL in MTS Manual (pdf).
The following program:
* MTS Volume 9 (Sept 1975) p151 DEFINE('OUTLINE(B,DH,DW)UL,UR,LL,LR') :(OUTLINE_END) OUTLINE UL = UR = LL = LR = '+' B = VER(DH) % HOR(DW) B HOR(DW) % VER(DH) B = UL REP('-') UR % + IT('|') B IT('|') % + LL REP('-') LR OUTLINE = FIX(B) :(RETURN) OUTLINE_END PRINT(OUTLINE('ABC', 5, 10)) * MTS Volume 9 (Sept 1975) p146 PRINT(OUTLINE(OUTLINE('ABC', 5, 10),,1))Produces:
+-----------------------+ | | | | | | | | | | | ABC | | | | | | | | | | | +-----------------------+ +---------------------------+ | +-----------------------+ | | | | | | | | | | | | | | | | | | | | | | | ABC | | | | | | | | | | | | | | | | | | | | | | | +-----------------------+ | +---------------------------+And this:
N1 = NODE(OUTLINE('N1',2,4)) N2 = NODE(OUTLINE('N2',1,2)) N3 = NODE(OUTLINE('N3',3,1)) N4 = NODE(OUTLINE('N4',2,8)) VERT = '|' % '|' % '|' B = MERGE(N1 '-----------' N2, + N1 % VERT % N3, + N2 % REP('|') % N4, + N3 REP('-') N4) PRINT(B)
Produces this output:
+----------+ | | +------+ | | | | | N1 |-----------| N2 | | | | | | | +------+ +----------+ | | | | | | | +----+ | | | +------------------+ | | | | | | | | | N3 |--------| N4 | | | | | | | | | | | +------------------+ +----+
Phil Budne resurected SNOBOL4B in CSNOBOL4 version 2.0 with files from MTS, supplied by Mike Alexander.