<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sarg.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=2605%3A8D80%3A1391%3AEE1E%3A91AC%3AF491%3AC4F0%3A5197</id>
	<title>Vero - Wikipedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sarg.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=2605%3A8D80%3A1391%3AEE1E%3A91AC%3AF491%3AC4F0%3A5197"/>
	<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php/Special:Contributions/2605:8D80:1391:EE1E:91AC:F491:C4F0:5197"/>
	<updated>2026-08-14T15:33:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.sarg.dev/index.php?title=Boxing_(computer_programming)&amp;diff=221178</id>
		<title>Boxing (computer programming)</title>
		<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Boxing_(computer_programming)&amp;diff=221178"/>
		<updated>2025-10-24T17:19:14Z</updated>

		<summary type="html">&lt;p&gt;2605:8D80:1391:EE1E:91AC:F491:C4F0:5197: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Short description|Programming language concept}}&lt;br /&gt;
{{redirect|Object type|another use|Class (computer programming)|the universal type|any type}}&lt;br /&gt;
{{More citations needed|date=August 2009}}&lt;br /&gt;
In [[computer science]], &#039;&#039;&#039;boxing&#039;&#039;&#039; (a.k.a. wrapping) is the transformation of placing a primitive type within an [[Object (computer science)|object]] so that the value can be used as a [[reference type|reference]]. &#039;&#039;&#039;Unboxing&#039;&#039;&#039; is the reverse transformation of extracting the primitive value from its wrapper object. &#039;&#039;&#039;Autoboxing&#039;&#039;&#039; is the term for automatically applying boxing and/or unboxing transformations as needed.&lt;br /&gt;
&lt;br /&gt;
==Boxing==&lt;br /&gt;
&lt;br /&gt;
Boxing&#039;s most prominent use is in [[Java (programming language)|Java]] where there is a distinction between [[reference type|reference]] and [[value type]]s for reasons such as runtime efficiency and syntax and semantic issues. In Java, a {{Java|LinkedList&amp;lt;T&amp;gt;}} must be such that &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; is an instance of {{Java|Object}}. One might desire to have a {{Java|LinkedList&amp;lt;int&amp;gt;}}, but this is not directly possible. Instead Java defines [[primitive wrapper class]]es corresponding to each [[primitive data type|primitive type]]: {{Java|Integer}} and {{Java|int}}, {{Java|Character}} and {{Java|char}}, {{Java|Float}} and {{Java|float}}, etc. Using [[Generics in Java|generic]] parameterized types introduced in [[Java Platform, Standard Edition|J2SE]] 5.0, one can then define a {{Java|LinkedList&amp;lt;Integer&amp;gt;}} and insert {{Java|int}} values into the list by boxing them as {{Java|Integer}} objects.&lt;br /&gt;
&lt;br /&gt;
On the other hand, [[C Sharp (programming language)|C#]] has no primitive wrapper classes, but allows boxing of any value type, returning a generic {{C sharp|Object}} reference. In [[Objective-C]], any primitive value can be prefixed by a {{ObjC|@}} to make an {{ObjC|NSNumber}} out of it (e.g. {{ObjC|@123}} or {{ObjC|@(123)}}). This allows for adding them in any of the standard collections, such as an {{ObjC|NSArray}}.&lt;br /&gt;
&lt;br /&gt;
[[Haskell]] has little or no notion of [[reference type]], but still uses the term &amp;quot;boxed&amp;quot; for the runtime system&#039;s uniform pointer-to-[[tagged union]] representation.&amp;lt;ref&amp;gt;{{cite web |title=7.2. Unboxed types and primitive operations |url=https://downloads.haskell.org/~ghc/6.12.1/docs/html/users_guide/primitives.html |website=downloads.haskell.org |access-date=10 August 2022}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The boxed object is always a copy of the value object, and is usually [[immutable object|immutable]]. Unboxing the object also returns a copy of the stored value. Repeated boxing and unboxing of objects can have a severe performance impact, because boxing [[dynamic memory allocation|dynamically allocates]] new objects and unboxing (if the boxed value is no longer used) then makes them eligible for [[garbage collection (computer science)|garbage collection]]. However, modern garbage collectors such as the default Java HotSpot garbage collector can more efficiently collect short-lived objects, so if the boxed objects are short-lived, the performance impact may not be severe.&lt;br /&gt;
&lt;br /&gt;
In some languages, there is a direct equivalence between an unboxed primitive type and a reference to an immutable, boxed object type. In fact, it is possible to substitute all the primitive types in a program with boxed object types. Whereas assignment from one primitive to another will copy its value, assignment from one reference to a boxed object to another will copy the reference value to refer to the same object as the first reference. However, this will not cause any problems, because the objects are immutable, so there is semantically no real difference between two references to the same object or to different objects (unless you look at physical equality). For all operations other than assignment, such as arithmetic, comparison, and logical operators, one can unbox the boxed type, perform the operation, and re-box the result as needed. Thus, it is possible to not store primitive types at all.&lt;br /&gt;
&lt;br /&gt;
==Autoboxing==&lt;br /&gt;
Autoboxing is the term for getting a reference type out of a value type just through [[type conversion]] (either implicit or explicit). The compiler automatically supplies the extra source code that creates the object.&lt;br /&gt;
&lt;br /&gt;
For example, in versions of Java prior to J2SE 5.0, the following code did not compile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Java&amp;gt;&lt;br /&gt;
Integer i = new Integer(9);&lt;br /&gt;
Integer i = 9; // error in versions prior to 5.0!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilers prior to 5.0 would not accept the last line. {{Java|Integer}} are reference objects, on the surface no different from {{Java|List}}, {{Java|Object}}, and so forth. To convert from an {{Java|int}} to an {{Java|Integer}}, one had to &amp;quot;manually&amp;quot; instantiate the Integer object. As of J2SE 5.0, the compiler will accept the last line, and automatically transform it so that an Integer object is created to store the value {{Java|9}}.&amp;lt;ref&amp;gt;[https://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html oracle.com Java language guide entry on autoboxing]&amp;lt;/ref&amp;gt; This means that, from J2SE 5.0 on, something like {{Java|1=Integer c = a + b}}, where {{Java|a}} and {{Java|b}} are {{Java|Integer}} themselves, will compile now — a and b are unboxed, the integer values summed up, and the result is autoboxed into a new {{Java|Integer}}, which is finally stored inside variable {{Java|c}}. The equality operators cannot be used this way, because the equality operators are already defined for reference types, for equality of the references; to test for equality of the value in a boxed type, one must still manually unbox them and compare the primitives, or use the {{Java|Objects.equals}} method.&lt;br /&gt;
&lt;br /&gt;
Another example: J2SE 5.0 allows the programmer to treat a collection (such as a {{Java|LinkedList}}) as if it contained {{Java|int}} values instead of {{Java|Integer}} objects. This does not contradict what was said above: the collection still only contains references to dynamic objects, and it cannot list primitive types. It cannot be a {{Java|LinkedList&amp;lt;int&amp;gt;}}, but it must be a {{Java|LinkedList&amp;lt;Integer&amp;gt;}} instead. However, the compiler automatically transforms the code so that the list will &amp;quot;silently&amp;quot; receive objects, while the source code only mentions primitive values. For example, the programmer can now write {{Java|list.add(3)}} and think as if the {{Java|int}} {{Java|3}} were added to the list; but, the compiler will have actually transformed the line into {{Java|list.add(new Integer(3))}}.&lt;br /&gt;
&lt;br /&gt;
===Automatic unboxing===&lt;br /&gt;
With automatic unboxing the compiler automatically supplies the extra source code that retrieves the value out of that object, either by invoking some method on that object, or by other means.&lt;br /&gt;
&lt;br /&gt;
For example, in versions of Java prior to J2SE 5.0, the following code did not compile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Java&amp;gt;&lt;br /&gt;
Integer k = new Integer(4);&lt;br /&gt;
int l = k.intValue(); // always okay&lt;br /&gt;
int m = k;            // would have been an error, but okay now&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C# doesn&#039;t support automatic unboxing in the same meaning as Java, because it doesn&#039;t have a separate set of primitive types and object types. All types that have both primitive and object version in Java, are automatically implemented by the C# compiler as either primitive (value) types or object (reference) types.&lt;br /&gt;
&lt;br /&gt;
In both languages, automatic boxing does not downcast automatically, i.e. the following code won&#039;t compile:&lt;br /&gt;
&lt;br /&gt;
C#:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
int i = 42;&lt;br /&gt;
object o = i;         // box&lt;br /&gt;
int j = o;            // unbox (error)&lt;br /&gt;
Console.WriteLine(j); // unreachable line, author might have expected output &amp;quot;42&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Java:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int i = 42;&lt;br /&gt;
Object o = i;          // box&lt;br /&gt;
int j = o;             // unbox (error)&lt;br /&gt;
System.out.println(j); // unreachable line, author might have expected output &amp;quot;42&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Boxing in Rust ==&lt;br /&gt;
[[Rust (programming language)|Rust]] has the {{Code|Box}} type, which represents a uniquely owned, heap-allocated value:&amp;lt;ref&amp;gt;{{cite web |title=std::boxed - Rust |url=https://doc.rust-lang.org/std/boxed/index.html |website=doc.rust-lang.org |access-date=2 June 2025}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rust&amp;quot;&amp;gt;&lt;br /&gt;
let number: Box&amp;lt;i32&amp;gt; = Box::new(42);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;std::boxed::Box&amp;lt;/code&amp;gt; in Rust is equivalent to &amp;lt;code&amp;gt;std::unique_ptr&amp;lt;/code&amp;gt; in [[C++]], a kind of [[smart pointer]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
using std::unique_ptr;&lt;br /&gt;
&lt;br /&gt;
unique_ptr&amp;lt;int&amp;gt; number = std::make_unique&amp;lt;int&amp;gt;(42);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the value needs to have shared ownership (e.g. between threads), one can use {{Code|Arc}}, which represents a reference-counted, heap-allocated value.&amp;lt;ref&amp;gt;{{cite web |title=Arc in std::sync - Rust |url=https://doc.rust-lang.org/std/sync/struct.Arc.html |website=doc.rust-lang.org |access-date=18 January 2025}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web |title=Arc - Rust By Example |url=https://doc.rust-lang.org/rust-by-example/std/arc.html |website=doc.rust-lang.org |access-date=18 January 2025}}&amp;lt;/ref&amp;gt; This is similar to &amp;lt;code&amp;gt;std::shared_ptr&amp;lt;/code&amp;gt; in C++.&lt;br /&gt;
&lt;br /&gt;
==Type helpers==&lt;br /&gt;
Modern [[Object Pascal]] has yet another way to perform operations on simple types, close to boxing, called type helpers in [[FreePascal]] or record helpers in [[Delphi (programming language)|Delphi]] and [[FreePascal]] in Delphi mode.&amp;lt;br&amp;gt;&lt;br /&gt;
The dialects mentioned are Object Pascal compile-to-native languages, and so miss some of the features that C# and Java can implement. Notably run-time [[type inference]] on strongly typed variables.&amp;lt;br&amp;gt;&lt;br /&gt;
But the feature is related to boxing.&amp;lt;br&amp;gt;&lt;br /&gt;
It allows the programmer to use constructs like&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
{$ifdef fpc}{$mode delphi}{$endif}&lt;br /&gt;
uses sysutils;  // this unit contains wraps for the simple types&lt;br /&gt;
var&lt;br /&gt;
  x:integer=100;&lt;br /&gt;
  s:string;&lt;br /&gt;
begin&lt;br /&gt;
  s:= x.ToString;&lt;br /&gt;
  writeln(s);&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
{{Data types}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Data types]]&lt;br /&gt;
[[Category:Java (programming language)]]&lt;br /&gt;
[[Category:Programming language concepts]]&lt;/div&gt;</summary>
		<author><name>2605:8D80:1391:EE1E:91AC:F491:C4F0:5197</name></author>
	</entry>
	<entry>
		<id>https://wiki.sarg.dev/index.php?title=Digraphs_and_trigraphs_(programming)&amp;diff=252469</id>
		<title>Digraphs and trigraphs (programming)</title>
		<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Digraphs_and_trigraphs_(programming)&amp;diff=252469"/>
		<updated>2025-10-24T16:13:01Z</updated>

		<summary type="html">&lt;p&gt;2605:8D80:1391:EE1E:91AC:F491:C4F0:5197: use bool for clarity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Short description|Two or three characters, treated as one}}&lt;br /&gt;
{{Other uses|Digraph (disambiguation){{!}}Digraph|Trigraph (disambiguation){{!}}Trigraph}}&lt;br /&gt;
{{More citations needed|date=September 2008}}&lt;br /&gt;
{{Use dmy dates|date=May 2019|cs1-dates=y}}&lt;br /&gt;
In [[computer programming]], &#039;&#039;&#039;digraphs and trigraphs&#039;&#039;&#039; are sequences of two and three [[character (computing)|character]]s, respectively, that appear in [[source code]] and, according to a [[programming language]]&#039;s specification, should be treated as if they were single characters. &lt;br /&gt;
&lt;br /&gt;
Various reasons exist for using digraphs and trigraphs: keyboards may not have keys to cover the entire [[character set]] of the language, input of special characters may be difficult, [[text editor]]s may reserve some characters for special use and so on. Trigraphs might also be used for some [[EBCDIC]] [[code page]]s that lack characters such as &amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
The basic character set of the [[C programming language]] is a subset of the [[ASCII]] character set that includes nine characters which lie outside the [[ISO 646]] invariant character set. This can pose a problem for writing [[source code]] when the [[encoding]] (and possibly [[computer keyboard|keyboard]]) being used does not support one or more of these nine characters. The [[ANSI C]] committee invented trigraphs as a way of entering source code using keyboards that support any national version of the ISO 646 character set.&amp;lt;ref&amp;gt;{{Cite book |url=https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf |title=Rationale for International Standard—Programming Languages—C |version=Revision 5.10 |pages=20–21 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the widespread adoption of [[ASCII]] and [[Unicode]]/[[UTF-8]], trigraph use is limited today, and trigraph support has been removed from C as of C23. &amp;lt;ref&amp;gt;{{cite web|url=https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2940.pdf|title=Removing trigraphs??!}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== {{anchor|TRIGRAPH.EXE}}Implementations ==&lt;br /&gt;
Trigraphs are not commonly encountered outside [[compiler]] [[test suite]]s.&amp;lt;ref name=&amp;quot;C&amp;quot;/&amp;gt; Some compilers support an option to turn recognition of trigraphs off, or disable trigraphs by default and require an option to turn them on. Some can issue warnings when they encounter trigraphs in source files. [[Borland]] supplied a separate program, the trigraph preprocessor (&amp;lt;code&amp;gt;TRIGRAPH.EXE&amp;lt;/code&amp;gt;), to be used only when trigraph processing is desired (the rationale was to maximise speed of compilation).&lt;br /&gt;
&lt;br /&gt;
== Language support ==&lt;br /&gt;
Different systems define different sets of digraphs and trigraphs, as described below.&lt;br /&gt;
&lt;br /&gt;
=== ALGOL ===&lt;br /&gt;
Early versions of [[ALGOL]] predated the standardized ASCII and EBCDIC character sets, and were typically implemented using a manufacturer-specific [[six-bit character code]]. A number of ALGOL operations either lacked [[codepoint]]s in the available character set or were not supported by peripherals, leading to a number of substitutions including &amp;lt;code&amp;gt;:=&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;←&amp;lt;/code&amp;gt; (assignment) and &amp;lt;code&amp;gt;&amp;gt;=&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;≥&amp;lt;/code&amp;gt; (greater than or equal).&lt;br /&gt;
&lt;br /&gt;
=== Pascal ===&lt;br /&gt;
The [[Pascal (programming language)|Pascal]] programming language supports digraphs &amp;lt;code&amp;gt;(.&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*)&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt; respectively. Unlike all other cases mentioned here, &amp;lt;code&amp;gt;(*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;*)&amp;lt;/code&amp;gt; were and still are in wide use. However, many compilers treat them as a different type of commenting block rather than as actual digraphs, that is, a comment started with &amp;lt;code&amp;gt;(*&amp;lt;/code&amp;gt; cannot be closed with &amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt; and vice versa.&lt;br /&gt;
&lt;br /&gt;
=== J ===&lt;br /&gt;
The [[J programming language]] is a descendant of [[APL (programming language)|APL]] but uses the ASCII character set rather than [[APL symbol]]s. Because the printable range of ASCII is smaller than APL&#039;s specialized set of symbols, &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; (dot) and &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; (colon) characters are used to inflect ASCII symbols, effectively interpreting unigraphs, digraphs or rarely trigraphs as standalone &amp;quot;symbols&amp;quot;.&amp;lt;ref name=&amp;quot;Hui_2015&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unlike the use of digraphs and trigraphs in C and [[C++]], there are no single-character equivalents to these in J.&lt;br /&gt;
&lt;br /&gt;
=== C ===&lt;br /&gt;
{{See also|C alternative tokens}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable floatright&amp;quot; style=&amp;quot;margin-left: 1.5em;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Trigraph !! Equivalent&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;??=&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;??/&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;??&#039;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;??(&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;??)&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;??!&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;??&amp;lt;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;??&amp;gt;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;??-&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[C preprocessor]] (used for C and with slight differences in [[C++]]; see [[#C++|below]]) replaces all occurrences of the nine trigraph sequences in this table by their single-character equivalents before any other processing (until [[C23 (C standard revision)|C23]]&amp;lt;ref&amp;gt;{{cite web|url=https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2940.pdf|title=Removing trigraphs??!}}&amp;lt;/ref&amp;gt;).&amp;lt;ref name=&amp;quot;BSI_2003_C&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;Rationale_2003_C&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A programmer may want to place two question marks together yet not have the compiler treat them as introducing a trigraph. The C grammar does not permit two consecutive &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; tokens, so the only places in a C file where two question marks in a row may be used are in multi-character constants, [[string literal]]s, and comments. This is particularly a problem for the [[classic Mac OS]], where the constant &amp;lt;code&amp;gt;&#039;????&#039;&amp;lt;/code&amp;gt; may be used as a file [[Type code|type]] or [[Creator code|creator]].&amp;lt;ref&amp;gt;{{Cite web |title=File Basics |url=https://whitefiles.org/dta/pgs/f01.htm |access-date=2024-05-08 |website=whitefiles.org}}&amp;lt;/ref&amp;gt; To safely place two consecutive question marks within a string literal, the programmer can use string concatenation &amp;lt;code&amp;gt;&amp;quot;...?&amp;quot;&amp;quot;?...&amp;quot;&amp;lt;/code&amp;gt; or an [[escape sequence]] &amp;lt;code&amp;gt;&amp;quot;...?\?...&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;???&amp;lt;/code&amp;gt; is not itself a trigraph sequence, but when followed by a character such as &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; it will be interpreted as &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;??-&amp;lt;/code&amp;gt;, as in the example below which has an extra &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; before the &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;??/&amp;lt;/code&amp;gt; trigraph can be used to introduce an escaped newline for line splicing; this must be taken into account for correct and efficient handling of trigraphs within the preprocessor.  It can also cause surprises, particularly within comments.  For example:&lt;br /&gt;
&lt;br /&gt;
{{sxhl|2=c|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
// This is all just one comment!???/&lt;br /&gt;
a++;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
which is a single logical comment line (used in C++ and [[C99]]), and&lt;br /&gt;
&lt;br /&gt;
{{sxhl|2=c|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
/??/&lt;br /&gt;
* A comment *??/&lt;br /&gt;
/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
which is a correctly formed block comment. The concept can be used to check for trigraphs as in the following C99 example, where only one return statement will be executed.&lt;br /&gt;
&lt;br /&gt;
{{sxhl|2=c|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
// returns false or true; language standard C99 or later&lt;br /&gt;
bool trigraphsAvailable() {&lt;br /&gt;
	// are trigraphs available??/&lt;br /&gt;
	return false;&lt;br /&gt;
	return true;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable floatright&amp;quot; style=&amp;quot;margin-left: 1.5em;&amp;quot;&lt;br /&gt;
|+ Alternative digraphs introduced in the C standard in 1994&lt;br /&gt;
|-&lt;br /&gt;
! Digraph !! Equivalent&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;:&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;:&amp;gt;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%&amp;gt;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%:&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In 1994, a normative amendment to the C standard, [[ANSI C#C95|C95]],&amp;lt;ref&amp;gt;{{Cite ISO standard|csnumber=23909|title=ISO/IEC 9899:1990/Amd 1:1995 - Programming languages — C — Amendment 1: C Integrity|date=March 1995|access-date=30 May 2024}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite web| url=http://www.lysator.liu.se/c/na1.html | title=A brief description of Normative Addendum 1 | author=Clive D.W. Feather | date=2010-09-12}}&amp;lt;/ref&amp;gt; included in C99, supplied digraphs as more readable alternatives to five of the trigraphs.&lt;br /&gt;
&lt;br /&gt;
Unlike trigraphs, digraphs are handled during [[Tokenization (lexical analysis)|tokenization]], and any digraph must always represent a full token by itself, or compose the token &amp;lt;code&amp;gt;%:%:&amp;lt;/code&amp;gt; replacing the preprocessor concatenation token &amp;lt;code&amp;gt;##&amp;lt;/code&amp;gt;. If a digraph sequence occurs inside another token, for example a quoted string, or a character constant, it will not be replaced.&lt;br /&gt;
&lt;br /&gt;
=== C++ ===&lt;br /&gt;
{{See also|C alternative tokens}}&lt;br /&gt;
&lt;br /&gt;
[[C++]] (through [[C++14]], see [[#C++REMOVAL|below]]) behaves like C, including the C99 additions.&amp;lt;ref name=&amp;quot;Stroustrup_1994_DEC&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a note, &amp;lt;code&amp;gt;%:%:&amp;lt;/code&amp;gt; is treated as a single token, rather than two occurrences of &amp;lt;code&amp;gt;%:&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the sequence &amp;lt;code&amp;gt;&amp;lt;::&amp;lt;/code&amp;gt; if the subsequent character is neither &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; nor &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt; is treated as a preprocessing token by itself and not as the first character of the alternative token &amp;lt;code&amp;gt;&amp;lt;:&amp;lt;/code&amp;gt;. This is done so certain uses of templates are not broken by the substitution.&lt;br /&gt;
&lt;br /&gt;
The C++ Standard makes this comment with regards to the term &amp;quot;digraph&amp;quot;:&amp;lt;ref name=&amp;quot;OpenSTD&amp;quot;/&amp;gt;&lt;br /&gt;
{{Quote|text=The term &amp;quot;digraph&amp;quot; (token consisting of two characters) is not perfectly descriptive, since one of the alternative preprocessing-tokens is &amp;lt;code&amp;gt;%:%:&amp;lt;/code&amp;gt; and of course several primary tokens contain two characters. Nonetheless, those alternative tokens that aren&#039;t lexical keywords are colloquially known as &amp;quot;digraphs&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
{{Anchor|C++REMOVAL}}Trigraphs were proposed for deprecation in [[C++0x]], which was released as [[C++11]].&amp;lt;ref name=&amp;quot;N2837&amp;quot;/&amp;gt; This was opposed by [[IBM]], speaking on behalf of itself and other users of C++,&amp;lt;ref name=&amp;quot;N2910&amp;quot;/&amp;gt; and as a result trigraphs were retained in C++11. Trigraphs were then proposed again for removal (not only deprecation) in [[C++17]].&amp;lt;ref name=&amp;quot;N3981&amp;quot;/&amp;gt; This passed a committee vote, and trigraphs (but not the additional tokens) are removed from C++17 despite the opposition from IBM.&amp;lt;ref name=&amp;quot;N4210&amp;quot;/&amp;gt; Existing code that uses trigraphs can be supported by translating from the source files (parsing trigraphs) to the basic source character set that does not include trigraphs.&amp;lt;ref name=&amp;quot;N3981&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== {{anchor|TIO}}RPL ===&lt;br /&gt;
[[Hewlett-Packard]] calculators supporting the [[Reverse Polish LISP|RPL]] language and input method provide support for a large number of trigraphs (also called &#039;&#039;TIO codes&#039;&#039;) to reliably transcribe non-seven-bit ASCII characters of the [[RPL character set|calculators&#039; extended character set]]&amp;lt;ref name=&amp;quot;HP82240B_1989&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;HP48G_UG&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;HP50G_AUR&amp;quot;/&amp;gt; on foreign platforms, and to ease keyboard input without using the {{Mono|CHARS}} application.&amp;lt;ref name=&amp;quot;HP-TIO&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;Heinz_2005&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;HP48G_UG&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;HP50G_AUR&amp;quot;/&amp;gt; The first character of all TIO codes is a &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;, followed by two other ASCII characters vaguely resembling the glyph to be substituted.&amp;lt;ref name=&amp;quot;HP-TIO&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;Heinz_2005&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;HP48G_UG&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;HP50G_AUR&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;Finseth_2012&amp;quot;/&amp;gt; All other characters can be entered using the special &amp;lt;code&amp;gt;\nnn&amp;lt;/code&amp;gt; TIO code syntax with nnn being a three-digit [[decimal number]] (with [[leading zero]]s if necessary) of the corresponding [[code point]] (thereby formally representing a &#039;&#039;[[tetragraph]]&#039;&#039;).&amp;lt;ref name=&amp;quot;HP-TIO&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;HP48G_UG&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;HP50G_AUR&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Application support ==&lt;br /&gt;
=== Vim ===&lt;br /&gt;
The [[Vim (text editor)|Vim]] text editor supports digraphs for actual entry of text characters, following {{IETF_RFC|1345}}. The entry of digraphs is [[Key binding|bound]] to {{keypress|Ctrl|K}} by default.&amp;lt;ref name=&amp;quot;vim&amp;quot;/&amp;gt; The list of all possible digraphs in [[Vim (text editor)|Vim]] can be displayed by typing {{kbd|:dig}}.&lt;br /&gt;
&lt;br /&gt;
=== GNU Screen ===&lt;br /&gt;
[[GNU Screen]] has a digraph command, bound to {{keypress|Ctrl|A}} {{keypress|Ctrl|V}}&amp;lt;!-- ^A ^V --&amp;gt; by default.&amp;lt;ref name=&amp;quot;Screen&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lotus ===&lt;br /&gt;
[[Lotus 1-2-3]] for [[DOS]] uses {{keypress|Alt|F1}} as [[compose key]] to allow easier input of many special characters of the [[Lotus International Character Set]] (LICS)&amp;lt;ref name=&amp;quot;HP_1991_95LXUG&amp;quot;/&amp;gt; and [[Lotus Multi-Byte Character Set]] (LMBCS).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
{{Portal|Computer programming}}&lt;br /&gt;
* {{anl|AltGr key}}&lt;br /&gt;
* {{anl|C alternative tokens}}&lt;br /&gt;
* {{anl|Compose key}}&lt;br /&gt;
* {{anl|Dead key}}&lt;br /&gt;
* {{anl|Escape sequence}}&lt;br /&gt;
* {{anl|Escape sequences in C}}&lt;br /&gt;
* [[List of XML and HTML character entity references]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Reflist|refs=&lt;br /&gt;
&amp;lt;ref name=&amp;quot;C&amp;quot;&amp;gt;{{Cite book |title=The New C Standard: An Economic and Cultural Commentary |author-first=Derek M. |author-last=Jones |chapter=Sentence 117}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Hui_2015&amp;quot;&amp;gt;{{cite web |author-last=Hui |author-first=Roger |title=Vocabulary |url=http://www.jsoftware.com/help/dictionary/vocabul.htm |website=jsoftware.com |access-date=2015-04-16 |archive-url=https://web.archive.org/web/20190402203251/http://www.jsoftware.com/help/dictionary/vocabul.htm |archive-date=2019-04-02}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;BSI_2003_C&amp;quot;&amp;gt;{{cite book |author=British Standards Institute |author-link=British Standards Institute |title=The C Standard - Incorporating TC1 - BS ISO/IEC 9899:1999 |publisher=[[John Wiley &amp;amp; Sons]] |date=2003 |isbn=0-470-84573-2}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Rationale_2003_C&amp;quot;&amp;gt;{{cite web |title=Rationale for International Standard - Programming Languages - C |version=5.10 |date=April 2003 |url=http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf |access-date=2010-10-17 |url-status=live |archive-url=https://web.archive.org/web/20160606072228/http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf |archive-date=2016-06-06}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Stroustrup_1994_DEC&amp;quot;&amp;gt;{{cite book |title=Design and Evolution of C++ |author-first=Bjarne |author-last=Stroustrup |author-link=Bjarne Stroustrup |publisher=[[Addison-Wesley Publishing Company]]&amp;lt;!-- [[AT&amp;amp;T Bell Labs]] --&amp;gt; |edition=1 |date=1994-03-29 |isbn=0-201-54330-3}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;OpenSTD&amp;quot;&amp;gt;{{cite web |editor-first=Stefanus |editor-last=Du Toit |title=Working Draft, Standard for Programming Language C++ |date=2012-01-16 |id=N3337 |url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf |access-date=2019-05-08 |url-status=live |archive-url=https://web.archive.org/web/20190508044758/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf |archive-date=2019-05-08}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;N2837&amp;quot;&amp;gt;{{cite web |url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2837.pdf |title=C++0X, CD 1, National Body Comments |id=SC22/WG21 N2837 comment UK 11 |date=2009-01-30 |access-date=2019-05-12 |url-status=live |archive-url=https://web.archive.org/web/20170801160118/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2837.pdf |archive-date=2017-08-01}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;N2910&amp;quot;&amp;gt;{{cite web |url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2910.pdf |title=Comment on Proposed Trigraph Deprecation |author-first1=Michael |author-last1=Wong |author-first2=Hubert |author-last2=Tong |author-first3=Robert |author-last3=Klarer |author-first4=Ian |author-last4=McIntosh |author-first5=Raymond |author-last5=Mak |author-first6=Christopher |author-last6=Cambly |author-first7=Alain |author-last7=LaBonté |id=N2910 |date=2009-06-19 |access-date=2019-05-12 |url-status=live |archive-url=https://web.archive.org/web/20170801162124/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2910.pdf |archive-date=2017-08-01}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;N3981&amp;quot;&amp;gt;{{cite web |url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3981.html |title=Removing trigraphs??! |id=N3981 |author-first=Richard |author-last=Smith |date=2014-05-06 |access-date=2019-05-12 |url-status=live |archive-url=https://web.archive.org/web/20180709123422/http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n3981.html |archive-date=2018-07-09}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;N4210&amp;quot;&amp;gt;{{cite web |url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4210.pdf |title=IBM comment on preparing for a Trigraph-adverse future in C++17 |id=IBM paper N4210 |date=2014-10-10 |author-first1=Michael |author-last1=Wong |author-first2=Hubert |author-last2=Tong |author-first3=Rajan |author-last3=Bhakta |author-first4=Derek |author-last4=Inglis |access-date=2019-05-12 |url-status=live |archive-url=https://web.archive.org/web/20180911053619/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4210.pdf |archive-date=2018-09-11}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;HP82240B_1989&amp;quot;&amp;gt;{{cite book |title=HP 82240B Infrared Printer |publisher=[[Hewlett-Packard]] |date=August 1989 |edition=1 |id=HP reorder number 82240-90014 |location=Corvallis, OR, USA }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;HP-TIO&amp;quot;&amp;gt;{{cite web |url=http://holyjoe.org/hp/tiotable.htm |title=HP RPL TIO Table |work=holyjoe.org |access-date=2015-01-23 |url-status=live |archive-url=https://web.archive.org/web/20160523164117/http://holyjoe.org/hp/tiotable.htm |archive-date=2016-05-23}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Heinz_2005&amp;quot;&amp;gt;{{cite web |author-first=Michael W. |author-last=Heinz, Sr. |title=HP-ASCII and Trigraphs |date=2005 |url=https://hpconnect.sourceforge.net/trigraphs.html |access-date=2016-08-02 |url-status=live |archive-url=https://web.archive.org/web/20160802011132/http://hpconnect.sourceforge.net/trigraphs.html |archive-date=2016-08-02}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;HP48G_UG&amp;quot;&amp;gt;{{cite book |title=HP&amp;amp;nbsp;48G Series – User&#039;s Guide (UG) |publisher=[[Hewlett-Packard]] |edition=8 |date=December 1994 |id=HP 00048-90126, (00048-90104) |orig-year=1993&amp;lt;!-- edition 1 (1993-05) --&amp;gt; |pages=2-5, 27-16 |url=http://www.hpcalc.org/details.php?id=3937 |access-date=2015-09-06 |url-status=live |archive-url=https://web.archive.org/web/20160806145719/http://www.hpcalc.org/details.php?id=3937 |archive-date=2016-08-06}} [http://www.hpcalc.org/hp48/docs/misc/hp48gug.zip&amp;lt;!-- https://web.archive.org/web/20160528071119/http://www.hpcalc.org/hp48/docs/misc/hp48gug.zip --&amp;gt;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;HP50G_AUR&amp;quot;&amp;gt;{{cite book |title=HP 50g / 49g+ / 48gII graphing calculator advanced user&#039;s reference manual (AUR) |publisher=[[Hewlett-Packard]] |edition=2 |date=2009-07-14 |orig-year=2005&amp;lt;!-- first published: Edition 1 (2005–09) --&amp;gt; |id=HP F2228-90010 |pages=J-1, J-2 |url=http://www.hpcalc.org/details.php?id=7141 |access-date=2015-10-10 |url-status=live |archive-url=https://web.archive.org/web/20180708015449/https://www.hpcalc.org/details/7141 |archive-date=2018-07-08}} [https://web.archive.org/web/20190430072646/http://holyjoe.net/hp/HP_50g_AUR_v2_English_searchable.pdf&amp;lt;!-- http://holyjoe.net/hp/HP_50g_AUR_v2_English_searchable.pdf --&amp;gt; Searchable PDF]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Finseth_2012&amp;quot;&amp;gt;{{cite web |title=chars |author-first=Craig A. |author-last=Finseth |date=2012-02-25 |url=https://www.finseth.com/hpdata/chars.php |access-date=2017-12-21 |url-status=live |archive-url=https://web.archive.org/web/20171221075534/https://www.finseth.com/hpdata/chars.php |archive-date=2017-12-21}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;vim&amp;quot;&amp;gt;{{cite web |url=https://vimdoc.sourceforge.net/htmldoc/digraph.html#digraphs-default |title=Vim documentation: *digraphs-default* |author=&amp;lt;!--Staff writer(s); no by-line.--&amp;gt; |date=2011-01-15 |access-date=2019-05-12 |url-status=live |archive-url=https://web.archive.org/web/20181220141938/http://vimdoc.sourceforge.net/htmldoc/digraph.html |archive-date=2018-12-20}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;HP_1991_95LXUG&amp;quot;&amp;gt;{{cite book |title=HP 95LX User&#039;s Guide |publisher=[[Hewlett-Packard Company]], Corvallis Division |location=Corvallis, OR, USA |edition=2 |chapter=Appendix F |date=June 1991 |orig-year=March 1991 |id=F0001-90003 |url=http://www.retroisle.com/others/hp95lx/OriginalDocs/95LX_UsersGuide_F1000-90001_826pages_Jun91.pdf |access-date=2016-11-27 |url-status=live |archive-url=https://web.archive.org/web/20161128202642/http://www.retroisle.com/others/hp95lx/OriginalDocs/95LX_UsersGuide_F1000-90001_826pages_Jun91.pdf |archive-date=2016-11-28}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Screen&amp;quot;&amp;gt;{{cite web |title=Digraph - Screen User&#039;s Manual |url=https://www.gnu.org/software/screen/manual/html_node/Digraph.html |access-date=2019-05-12 |url-status=live |archive-url=https://web.archive.org/web/20181231060134/https://www.gnu.org/software/screen/manual/html_node/Digraph.html |archive-date=2018-12-31}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{IETF_RFC|1345}}&lt;br /&gt;
&lt;br /&gt;
[[Category:C (programming language)]]&lt;br /&gt;
[[Category:Character encoding]]&lt;br /&gt;
[[Category:Input/output]]&lt;/div&gt;</summary>
		<author><name>2605:8D80:1391:EE1E:91AC:F491:C4F0:5197</name></author>
	</entry>
</feed>