cmat ← {h v t←⍬ ⍬ 0} ##.box text ⍝ Box the simple text array ⍵. From Veli-Matti Jantunen, [box] applies borders and horizontal and vertical div- iders to simple character matrix [text]. Optional left argument (default ⍬ ⍬ 0) determines whether to draw borders and where to draw dividers. ⍺: [1] = horizontal lines [2] = vertical lines An optional 3rd item specifies line type: [3] = type: 0 = box drawing chars, 1 = raw boxing For example: box 6 10⍴⎕a ⍝ Borders but no dividers, by default. ┌──────────┐ │ABCDEFGHIJ│ │KLMNOPQRST│ │UVWXYZABCD│ │EFGHIJKLMN│ │OPQRSTUVWX│ │YZABCDEFGH│ └──────────┘ ┌──────────────────── Horizontal dividers after 2nd and 4th row. │ ┌─────────────── Vertical dividers after 3rd, 6th and 7th column. │ │ (2 4)(3 6 7)box 6 10⍴⎕a ┌───┬───┬─┬───┐ │ABC│DEF│G│HIJ│ │KLM│NOP│Q│RST│ ├───┼───┼─┼───┤ │UVW│XYZ│A│BCD│ │EFG│HIJ│K│LMN│ ├───┼───┼─┼───┤ │OPQ│RST│U│VWX│ │YZA│BCD│E│FGH│ └───┴───┴─┴───┘ ┌───────────────────── No horizontal dividers. │ ┌────────────────── Vertical dividers after each column. │ │ ⍬(⍳5) box 5 5⍴⎕a ┌─┬─┬─┬─┬─┐ │A│B│C│D│E│ │F│G│H│I│J│ │K│L│M│N│O│ │P│Q│R│S│T│ │U│V│W│X│Y│ └─┴─┴─┴─┴─┘ The horizontal or vertical border may be switched off by prefixing ¯1 to the first or second control item, respectively. ┌──────────────────── Horizontal dividers after 2nd and 3rd rows. │ ┌─────────────── Vertical dividers after 1st and 4th cols. │ │ (2 3)(1 4) box 5 5⍴⎕a ┌─┬───┬─┐ │A│BCD│E│ │F│GHI│J│ ├─┼───┼─┤ │K│LMN│O│ ├─┼───┼─┤ │P│QRS│T│ │U│VWX│Y│ └─┴───┴─┘ ┌─────────────────── Same again but with no horizontal border. │ (¯1 2 3)(1 4) box 5 5⍴⎕a │A│BCD│E│ │F│GHI│J│ ├─┼───┼─┤ │K│LMN│O│ ├─┼───┼─┤ │P│QRS│T│ │U│VWX│Y│ ┌────────────── Same again but with no vertical border. │ (2 3)(¯1 1 4) box 5 5⍴⎕a ─┬───┬─ A│BCD│E F│GHI│J ─┼───┼─ K│LMN│O ─┼───┼─ P│QRS│T U│VWX│Y ─┴───┴─ ┌───────┬─────────── Same again but with no borders. │ │ (¯1 2 3)(¯1 1 4) box 5 5⍴⎕a A│BCD│E F│GHI│J ─┼───┼─ K│LMN│O ─┼───┼─ P│QRS│T U│VWX│Y A divider index of 0 or the number of rows or columns is interpreted as specify- ing the border and so overrides a ¯1 border supressor. ┌──────────────────── Dividers after 1st and 2nd row. │ (1 2)⍬ box 3 10⍴⎕a ┌──────────┐ │ABCDEFGHIJ│ ├──────────┤ │KLMNOPQRST│ ├──────────┤ │UVWXYZABCD│ └──────────┘ ┌─────────────────── Same again, with horizontal borders supressed. │ (¯1 1 2)⍬ box 3 10⍴⎕a │ABCDEFGHIJ│ ├──────────┤ │KLMNOPQRST│ ├──────────┤ │UVWXYZABCD│ ┌───────────────── Same again, with explicit upper border (divider │ after 0th row). │ (¯1 0 1 2)⍬ box 3 10⍴⎕a ┌──────────┐ │ABCDEFGHIJ│ ├──────────┤ │KLMNOPQRST│ ├──────────┤ │UVWXYZABCD│ ┌───────────── Same again, with explicit lower border (divider │ after 3rd row). │ (¯1 1 2 3)⍬ box 3 10⍴⎕a │ABCDEFGHIJ│ ├──────────┤ │KLMNOPQRST│ ├──────────┤ │UVWXYZABCD│ └──────────┘ Finally, a third item of the left argument may be given to specify the type of the border and divider lines: 0 (default) "smooth" box drawing characters 1 · · "raw" characters, which are more suitable for printing. Examples: a←3 10⍴⎕a ⍝ Simple array. box a ⍝ simple case ┌──────────┐ │ABCDEFGHIJ│ │KLMNOPQRST│ │UVWXYZABCD│ └──────────┘ 1 box a ⍝ draw a row.. ┌──────────┐ │ABCDEFGHIJ│ ├──────────┤ │KLMNOPQRST│ │UVWXYZABCD│ └──────────┘ ⍬ (⍳5) box a ⍝ ..and columns ┌─┬─┬─┬─┬─┬─────┐ │A│B│C│D│E│FGHIJ│ │K│L│M│N│O│PQRST│ │U│V│W│X│Y│ZABCD│ └─┴─┴─┴─┴─┴─────┘ (1 2) (2+⍳3) box a ⍝ both ┌───┬─┬─┬─────┐ │ABC│D│E│FGHIJ│ ├───┼─┼─┼─────┤ │KLM│N│O│PQRST│ ├───┼─┼─┼─────┤ │UVW│X│Y│ZABCD│ └───┴─┴─┴─────┘ 2 ⍬ 1 box a ⍝ raw case +----------+ |ABCDEFGHIJ| |KLMNOPQRST| +----------+ |UVWXYZABCD| +----------+ (¯1) (2+⍳5) box a ⍝ no horiz lines │ABC│D│E│F│G│HIJ│ │KLM│N│O│P│Q│RST│ │UVW│X│Y│Z│A│BCD│ (¯1 1 3) (2+⍳5) box a ⍝ draw bottom │ABC│D│E│F│G│HIJ│ ├───┼─┼─┼─┼─┼───┤ │KLM│N│O│P│Q│RST│ │UVW│X│Y│Z│A│BCD│ └───┴─┴─┴─┴─┴───┘ (¯1 0 1) (¯1 9 10) box a ⍝ variant ─────────┬─┐ ABCDEFGHI│J│ ─────────┼─┤ KLMNOPQRS│T│ UVWXYZABC│D│ (¯1 1 2) (¯1 1 2) box ↑'OOX' 'OXO' 'XX ' ⍝ I won! O│O│X ─┼─┼─ O│X│O ─┼─┼─ X│X│ See also: dsp disp display draw Back to: contents Back to: Workspaces