Digital encoding of APL symbols
The programming language APL uses a number of symbols, rather than words from natural language, to identify operations, similarly to mathematical symbols. Prior to the wide adoption of Unicode, a number of special-purpose EBCDIC and non-EBCDIC code pages were used to represent the symbols required for writing APL.
Character sets
Due to its origins on IBM Selectric typewriter|Selectric]-based teleprinters, APL symbols have traditionally been represented on the wire using a unique, non-standard character set. In the 1960s and 1970s, few terminal devices existed which could reproduce them, the most popular ones being the IBM 2741 and IBM 1050 fitted with a specific APL print head. Over time, with the universal use of high-quality graphic display, printing devices and Unicode support, the APL character font problem has largely been eliminated.Character repertoire
IBM assigns the following character IDs to APL syntax, which are used in the definitions of its code pages.| GCGID | IBM name | Unicode | Notes and other mappings |
| SL010000 | Up Stile | ||
| SL020000 | Down Stile | ||
| SL030000 | Del | ||
| SL040000 | Del Tilde | ||
| SL050000 | Del Stile | ||
| SL060000 | Delta | ||
| SL070000 | Delta Stile | ||
| SL080000 | Circle | This is SM750000 in a non-APL context, for example, in the C0 replacement graphics from code page 437, which code pages 907, 909 and 910 inherit some or all of, retaining SM750000 in the C0 area and also including SL080000 outside of it. Both map to U+25CB when APL is represented using Unicode characters, although SL080000 can be mapped to U+F890 in IBM's private use area scheme. Compare SL590000 through SL620000 below. | |
| SL090000 | Circle Stile | ||
| SL100000 | Circle Slope | ||
| SL110000 | Circle Star | ||
| SL120000 | Circle Bar | ||
| SL130000 | Quad Quote | ||
| SL140000 | Quad Divide | ||
| SL150000 | Slash Bar | ||
| SL160000 | Slope Bar | ||
| SL170000 | Up Caret Tilde | ||
| SL180000 | Down Caret Tilde | ||
| SL190000 | Down Tack Jot | ||
| SL200000 | Up Tack Jot | ||
| SL210000 | Up Shoe Null | ||
| SL220000 | Up Tack | ||
| SL230000 | Down Tack | ||
| SL240000 | Down Tack Up Tack | ||
| SL250000 | Jot | ||
| SL260000 | |||
| SL270000 | Quad Jot | ||
| SL280000 | Quad Slope | ||
| SL290000 | Ampersand Underbar | Not used in any documented code page. Can be represented in Unicode with the sequence &̲ | |
| SL300000 | Equal Underbar | ||
| SL310000 | OUT Symbol | none | Not used in any IBM-documented code page. IBM's reference glyph resembles oblique underlined forms of the letters O, U and T overstruck in the same character position. |
| SL320000 | Diaeresis Dot | ||
| SL330000 | Delta Underbar | ||
| SL340000 | Left Tack | ||
| SL350000 | Right Tack | ||
| SL360000 | Quad | ||
| SL370000 | Less Greater | , | |
| SL380000 | Stile | , | |
| SL400000 | Up Shoe | ||
| SL410000 | Down Shoe | ||
| SL420000 | Left Shoe | ||
| SL430000 | Right Shoe | ||
| SL440000 | Underbar | ||
| SL450000 | Diaeresis | ||
| SL460000 | Tilde | U+F88F in IBM's private use area scheme. Also mapped to, although SD190000 co-occurs at 0xA1 in code page 213. | |
| SL480000 | Circle Plus | ||
| SL490000 | Circle x | ||
| SL500000 | Down Caret | ||
| SL510000 | Up Caret | ||
| SL520000 | Less | ||
| SL530000 | Greater | ||
| SL540000 | Divide | ||
| SL550000 | Times | ||
| SL560000 | Not Greater | ||
| SL570000 | Not Less | ||
| SL580000 | Quote Dot | U+F88E in IBM's private use area scheme. SP020000 co-occurs at 0x5A in code page 293. Tachyonsoft lists for SL580000. | |
| SL590000 | Left Arrow | These arrows are SM300000, SM310000, SM320000 and SM330000 respectively in a non-APL context, for example, in the C0 replacement graphics from code page 437, which code pages 907, 909 and 910 inherit some or all of. Their APL GCGIDs can be mapped to U+F88D, U+F88C, U+F88B and U+F88A respectively in IBM's private use area scheme. Code pages 907 and 910 keep the non-APL GCGIDs for the C0 replacements but use the APL GCGIDs where the arrows appear outside of the C0 area, while code page 909 uses the APL GCGIDs multiple times, both for the C0 replacements and for between one and two occurrences of each of these arrows outside of the C0 area. Compare SL080000 above. Duplicating C0 replacement graphics outside of the C0 area is not an uncommon practice in DOS code pages: compare, for example, the pilcrow and section sign in code page 850. | |
| SL600000 | Right Arrow | These arrows are SM300000, SM310000, SM320000 and SM330000 respectively in a non-APL context, for example, in the C0 replacement graphics from code page 437, which code pages 907, 909 and 910 inherit some or all of. Their APL GCGIDs can be mapped to U+F88D, U+F88C, U+F88B and U+F88A respectively in IBM's private use area scheme. Code pages 907 and 910 keep the non-APL GCGIDs for the C0 replacements but use the APL GCGIDs where the arrows appear outside of the C0 area, while code page 909 uses the APL GCGIDs multiple times, both for the C0 replacements and for between one and two occurrences of each of these arrows outside of the C0 area. Compare SL080000 above. Duplicating C0 replacement graphics outside of the C0 area is not an uncommon practice in DOS code pages: compare, for example, the pilcrow and section sign in code page 850. | |
| SL610000 | Up Arrow | These arrows are SM300000, SM310000, SM320000 and SM330000 respectively in a non-APL context, for example, in the C0 replacement graphics from code page 437, which code pages 907, 909 and 910 inherit some or all of. Their APL GCGIDs can be mapped to U+F88D, U+F88C, U+F88B and U+F88A respectively in IBM's private use area scheme. Code pages 907 and 910 keep the non-APL GCGIDs for the C0 replacements but use the APL GCGIDs where the arrows appear outside of the C0 area, while code page 909 uses the APL GCGIDs multiple times, both for the C0 replacements and for between one and two occurrences of each of these arrows outside of the C0 area. Compare SL080000 above. Duplicating C0 replacement graphics outside of the C0 area is not an uncommon practice in DOS code pages: compare, for example, the pilcrow and section sign in code page 850. | |
| SL620000 | Down Arrow | These arrows are SM300000, SM310000, SM320000 and SM330000 respectively in a non-APL context, for example, in the C0 replacement graphics from code page 437, which code pages 907, 909 and 910 inherit some or all of. Their APL GCGIDs can be mapped to U+F88D, U+F88C, U+F88B and U+F88A respectively in IBM's private use area scheme. Code pages 907 and 910 keep the non-APL GCGIDs for the C0 replacements but use the APL GCGIDs where the arrows appear outside of the C0 area, while code page 909 uses the APL GCGIDs multiple times, both for the C0 replacements and for between one and two occurrences of each of these arrows outside of the C0 area. Compare SL080000 above. Duplicating C0 replacement graphics outside of the C0 area is not an uncommon practice in DOS code pages: compare, for example, the pilcrow and section sign in code page 850. | |
| SL630000 | Overbar | ||
| SL640000 | Slope | U+F889 in IBM's private use area scheme. Also mapped to. SM070000 co-occurs at 0x5A in code page 293. | |
| SL650000 | Star | ||
| SL660000 | Quote | ||
| SL670000 | Left Parenthesis | ||
| SL680000 | Right Parenthesis | ||
| SL690000 | Bar | ||
| SL700000 | Query | U+F888 in IBM's private use area scheme. | |
| SL710000 | Alpha | ||
| SL720000 | Epsilon | , | |
| SL730000 | Iota | ||
| SL740000 | Rho | ||
| SL750000 | Omega | ||
| SL760000 | Slash | ||
| SL770000 | Left Bracket | ||
| SL780000 | Right Bracket | ||
| SL790000 | Plus | ||
| SL800000 | Semicolon | ||
| SL810000 | Equal | ||
| SL820000 | Not Equal | ||
| SL830000 | Colon | Form with fullwidth attribute set is used for 0xA1C3 in EUC-CN. | |
| SL840000 | Dot | ||
| SL850000 | Comma | ||
| SL860000 | Iota Underbar | ||
| SL870000 | Epsilon Underbar |
EBCDIC code pages
Code page 293
Code page 293, called "APL ", is an EBCDIC code page which includes APL symbols, in addition to preserving the basic Latin alphabet|basic Latin] letters and Western Arabic numerals at their usual EBCDIC locations.Code page 310
Code page 310 includes a larger gamut of symbols, but does not itself include the basic Latin letters or the basic digits. It is used alongside Code page 37-2, with the Code page 310 codes being prefixed by the Graphic Escape control character.Code page 351
Code page 351 contains most of the characters of Code page 293 and Code page 310 in addition to the letters and digits, by replacing several control characters with symbols.7-bit modified ASCII
Code page 371 (IR-68)
Code page 371, registered for use with ISO/IEC 2022 as ISO-IR-68, is a 7-bit heavily modified ASCII, designed by the APL Working Group of the Canadian Standards Association, intended for use with APL in an environment allowing overstriking of characters using the control code.8-bit modified and/or extended ASCII
Code page 907
Code page 907 is used by the IBM 3812, like code page 906.Code page 909
Code page 909 is another encoding for APL, differing from code page 907 in not including the underlined characters, assigning different codes to the APL characters which fall in the 0xB0–DF range, and replacing some of the C0 replacement graphics from code page 437 with alternative encodings for certain APL symbols.Code page 910
Code page 910 is similar to code page 909, but with fewer duplicate horizontal arrows, using the same C0 graphics as code page 437, and including some additional characters.Unicode
Most APL symbols are present in Unicode, in the Miscellaneous Technical range, although some APL products may not yet feature Unicode, and some APL symbols may be unused or unavailable in a given vendor's implementation.As of 2010, Unicode allows APL to be stored in text files, published in print and on the web, and shared through email and instant messaging. Entering APL characters still requires the use of either a specific input method editor or keyboard mapping, or of a specific touch interface. APL keyboard mappings are available for free for the most common operating systems, or can be obtained by adding the Unicode APL symbols to existing keyboard map.
Underscored alphabetic characters
Missing from Unicode are the traditional underscored alphabetic characters included in some of the APL code pages; their usage has been eliminated or deprecated in most APL implementations. These were produced on APL printing terminals by over-striking a straight capital letter with an underscore character. Some tables show them simulated with underlined and italic markup, not listing Unicode mappings.IBM assigns them GCGIDs as "LA480000", "LB480000" and so forth, under the "L" series used for Latin letters. The use of an even number rather than an odd number is due to being uppercase: compare the use of SD110000 for a lone acute accent, LA110000 for the lowercase, and LA120000 for the uppercase. They are included in IBM's private use area scheme, encoded in reverse‑alphabetical order in the odd-numbered code points from U+F8BF to U+F8F1.
Homologous uses of 47 include the "SD" series GCGID SD470000 for "Line Below/Discontinuous Underscore"—i.e. macron below, distinct from the ASCII underscore which is SP090000 —and the "A" series GCGID AD470009 for the ḏāl, for example. Unicode's Latin Extended Additional block includes the following capital "Line Below" characters with the macron below diacritic, for Semitic transcription :
Keyboard layout
[Image:APL-keybd2.svg|600px|thumb|center|APL keyboard layout.]
Later IBM terminals, notably the IBM 3270 display stations, had an alternate keyboard arrangement which is the basis for some of the modern APL keyboard layouts in use today.
Further APL characters were available by overstriking one character with another. For example, the log symbol was formed by overstriking with. This extended the graphic abilities of the earlier teleprinters, but made it more complex to correct errors and edit program lines.
New overstrikes were introduced by vendors as they produced versions of APL tailored to specific hardware, system features, file systems, and so on. Further, printing terminals and early APL cathode-ray terminals were able to display arbitrary overstrikes, but as personal computers rapidly replaced terminals as a data-entry device, APL character support became provided as an APL Character Generator ROM or a soft character set rendered by the display device. With the advent of the modern PC, APL characters were defined in specific fonts, eliminating the distinction between overstruck characters and standard characters.
Finally, the symbols were ratified in Unicode and given specific code points, with unambiguous interpretations, independently of the graphic font.