|
|
1.1 ! root 1: .\" @(#)termdesc.me 6.2 (Berkeley) 5/20/86 ! 2: .\" ! 3: .+c ! 4: .(l C ! 5: .sz 14 ! 6: .b "Writing \s-2NROFF\s0 Terminal Descriptions" ! 7: .sp ! 8: .sz 10 ! 9: Eric Allman ! 10: .i "Britton-Lee, Inc." ! 11: .)l ! 12: .sp 2 ! 13: .sh 1 "INTRODUCTION" ! 14: .eh 'SMM:20-%''Writing NROFF Terminal Descriptions' ! 15: .oh 'Writing NROFF Terminal Descriptions''SMM:20-%' ! 16: .pp ! 17: As of the Version 7 Phototypesetter release of \s-2UNIX\s0,* ! 18: .(f ! 19: *\s-2UNIX\s0 is a trademark of Bell Laboratories. ! 20: .)f ! 21: \s-2NROFF\s0 has supported terminal description files. ! 22: These files describe the characteristics of available hard-copy printers. ! 23: This document describes some of the details of how to write ! 24: terminal description files. ! 25: .pp ! 26: .ul ! 27: Disclaimer. ! 28: This document describes the results of my personal experience. ! 29: The effects of changing some of the fields from the norms ! 30: may not be well defined, ! 31: even if it seems like it ! 32: .q ought ! 33: to work given the descriptions herein. ! 34: These tables are known to vary slightly ! 35: for different versions of \s-2UNIX\s0. ! 36: I have not seen \s-2UNIX\s0 3.0 at this time, ! 37: so this may be irrelevant in that context. ! 38: .sh 1 "GENERAL" ! 39: .pp ! 40: When \s-2NROFF\s0 starts up, ! 41: it looks for a ! 42: .b \-T ! 43: flag describing the terminal type. ! 44: For example, ! 45: if the command line is given as ! 46: .(b ! 47: nroff \-T300s ! 48: .)b ! 49: \s-2NROFF\s0 prepares output for a ! 50: .i DTC300S ! 51: terminal. ! 52: This terminal is described in the file ! 53: /usr/lib/term/tab300s ! 54: on most systems. ! 55: .pp ! 56: If no ! 57: .b \-T ! 58: flag is given, ! 59: the terminal type ! 60: .b 37 ! 61: (ASR 37 \*- a relic assumed for historical humor only) ! 62: is assumed. ! 63: .pp ! 64: The terminal description table is a stripped ! 65: .q \&.o ! 66: file generated from a data structure, ! 67: shown in figure one. ! 68: .(z ! 69: .hl ! 70: .ta 8n 24n ! 71: #define INCH 240 /* one inch in units */ ! 72: struct ! 73: { ! 74: int bset; /* stty bits to set */ ! 75: int breset; /* stty bits to reset */ ! 76: int Hor; /* horizontal resolution in units */ ! 77: int Vert; /* vertical resolution in units */ ! 78: int Newline; /* the distance a newline moves */ ! 79: int Char; /* the distance one char moves */ ! 80: int Em; /* size of an Em */ ! 81: int Halfline; /* the distance a halfline up/down moves */ ! 82: int Adj; /* default adjustment width */ ! 83: char *twinit; /* string to init the terminal */ ! 84: char *twrest; /* string to reset the terminal */ ! 85: char *twnl; /* string to send a newline (CR-LF) */ ! 86: char *hlr; /* half line reverse string */ ! 87: char *hlf; /* half line forward string */ ! 88: char *flr; /* full line reverse string */ ! 89: char *bdon; /* string to turn boldface on */ ! 90: char *bdoff; /* string to turn boldface off */ ! 91: char *ploton; /* string to turn plot on */ ! 92: char *plotoff; /* string to turn plot off */ ! 93: char *up; /* move up in plot mode */ ! 94: char *down; /* move down in plot mode */ ! 95: char *right; /* move right in plot mode */ ! 96: char *left; /* move left in plot mode */ ! 97: char *codetab[256-32]; /* the codes to send for characters */ ! 98: int zzz; /* padding */ ! 99: }; ! 100: .sp ! 101: .ce ! 102: Figure 1 \*- the terminal descriptor data structure ! 103: .hl ! 104: .)z ! 105: This structure can be dealt with in two sections: ! 106: the terminal capability descriptor (everything to codetab), ! 107: and the output descriptor. ! 108: .sh 1 "TERMINAL CAPABILITIES" ! 109: .pp ! 110: The section of the data structure up to but excluding ! 111: .i codetab ! 112: describes the basic functions and setup requirements of the terminal. ! 113: Distances are measured in ! 114: .q units, ! 115: which are 1/240 of an inch in \s-2NROFF\s0. ! 116: In general, \s-2NROFF\s0 assumes that there is a ! 117: .q "plot mode" ! 118: on the terminal that allows you to move in small increments. ! 119: A terminal has a resolution when in plot mode ! 120: that is measured in units. ! 121: This limits how well the terminal can simulate ! 122: printing Greek and special characters. ! 123: .sh 2 "bset, breset" ! 124: .pp ! 125: These fields define bits in a vanilla stty(2) word ! 126: (sg_flags) to ! 127: set and clear respectively when ! 128: \s-2NROFF\s0 starts. ! 129: They are normally represented in octal, ! 130: although you could include <sgtty.h>. ! 131: [Note: ! 132: these fields are presumably different ! 133: in \s-2UNIX\s0 3.0.] ! 134: .sh 2 "Hor, Vert" ! 135: .pp ! 136: These represent the horizontal and vertical resolution respectively ! 137: of the terminal when it is in plot mode. ! 138: They are given in units. ! 139: .sh 2 "Newline" ! 140: .pp ! 141: This field describes the distance that the ! 142: .i twnl ! 143: field (below) will move the paper; ! 144: it is literally the size of a newline. ! 145: .sh 2 "Char" ! 146: .pp ! 147: This is the distance that a regular character ! 148: will move the print head to the right. ! 149: .sh 2 "Em" ! 150: .pp ! 151: The ! 152: .q em ! 153: is a typesetting unit, ! 154: approximately equal to the width of the letter ! 155: .q m . ! 156: In \s-2NROFF\s0 driver tables, ! 157: this must be the distance a space or backspace character will move ! 158: the carriage. ! 159: .sh 2 "Halfline" ! 160: .pp ! 161: This is the distance that the ! 162: .i hlr ! 163: or ! 164: .i hlf ! 165: strings move the print head ! 166: (reverse or forward respectively). ! 167: .sh 2 "Adj" ! 168: .pp ! 169: This is the resolution that \s-2NROFF\s0 will normally adjust ! 170: your lines to horizontally. ! 171: Typically this is the same as Char. ! 172: If the ! 173: .b \-e ! 174: flag is given to \s-2NROFF\s0, ! 175: output resolution will be to the full device resolution. ! 176: .sh 2 "twinit, twrest" ! 177: .pp ! 178: These strings are output when \s-2NROFF\s0 starts and finishes ! 179: respectively. ! 180: .sh 2 "twnl" ! 181: .pp ! 182: This string is output when \s-2NROFF\s0 wants to do a carriage return. ! 183: Typically it will be ! 184: .q "\er\en" . ! 185: Remember, ! 186: the terminal will normally have CRMOD turned off ! 187: when this is set. ! 188: .sh 2 "hlr, hlf" ! 189: .pp ! 190: These strings are sent to move the carriage back or forward ! 191: one half line respectively. ! 192: The actual amount that they moved is defined by ! 193: Halfline. ! 194: The carriage should be left in the same column. ! 195: .sh 2 "flr" ! 196: .pp ! 197: The string to send to move a full line backwards. ! 198: This should leave the carriage in the same column. ! 199: .sh 2 "bdon, bdoff" ! 200: .pp ! 201: These strings are sent to turn boldface mode on and off ! 202: respectively. ! 203: Normally this will set the terminal into overstrike mode. ! 204: If they are not given, ! 205: some newer versions of \s-2NROFF\s0 will output the characters ! 206: four times to force overstriking. ! 207: .sh 2 "ploton, plotoff" ! 208: .pp ! 209: These strings turn plot mode on and off respectively. ! 210: In plot mode, ! 211: the carriage moves a very small amount, ! 212: and only under specific control; ! 213: i.e., characters do not automatically cause any carriage motion. ! 214: .sh 2 "up, down, right, left" ! 215: .pp ! 216: These strings are only output in plot mode. ! 217: They should move the carriage up, down, left, and right ! 218: respectively; ! 219: they will move the carriage a distance of Hor or Vert ! 220: as appropriate. ! 221: .sh 2 "An Example" ! 222: .pp ! 223: Consider the following table describing a ! 224: DTC300S: ! 225: .(b ! 226: .ta 1.5i ! 227: /*bset*/ 0, ! 228: /*breset*/ 0177420, ! 229: /*Hor*/ INCH/60, ! 230: /*Vert*/ INCH/48, ! 231: /*Newline*/ INCH/6, ! 232: /*Char*/ INCH/10, ! 233: /*Em*/ INCH/10, ! 234: /*Halfline*/ INCH/12, ! 235: /*Adj*/ INCH/10, ! 236: /*twinit*/ "\e033\e006", ! 237: /*twrest*/ "\e033\e006", ! 238: /*twnl*/ "\e015\en", ! 239: /*hlr*/ "\e033H", ! 240: /*hlf*/ "\e033h", ! 241: /*flr*/ "\e032", ! 242: /*bdon*/ "", ! 243: /*bdoff*/ "", ! 244: /*ploton*/ "\e006", ! 245: /*plotoff*/ "\e033\e006", ! 246: /*up*/ "\e032", ! 247: /*down*/ "\en", ! 248: /*right*/ " ", ! 249: /*left*/ "\eb", ! 250: .)b ! 251: This describes a terminal that should have the ! 252: ALLDELAY and CRMOD bits turned off, ! 253: 1/60" horizontal and 1/48" vertical resolution, ! 254: six lines per inch and ten characters per inch, including space, ! 255: halfline takes 1/12" (one half of a full line), ! 256: should send ESC-control-F to initialize and reset the terminal ! 257: (to insure that it is in a normal state), ! 258: takes <CR><LF> to give a newline, ! 259: <ESC>H to move back one half line, ! 260: <ESC>h to move forward one half line, ! 261: control-Z to move back one full line, ! 262: has no bold mode, ! 263: takes control-F to enter plot mode ! 264: and escape-control-F to exit plot mode, ! 265: and uses control-Z, linefeed, space, and backspace ! 266: to move up, down, right, and left respectively ! 267: when in plot mode. ! 268: .sh 1 "CHARACTER DESCRIPTIONS" ! 269: .pp ! 270: There is one character description ! 271: for each possible character to be output. ! 272: The easiest way to find what character corresponds to what position ! 273: is to edit an existing character table; ! 274: one is given in the appendix as an example. ! 275: Character representations are represented as a string per ! 276: character. ! 277: .pp ! 278: The first character of the string ! 279: is interpreted as a binary number ! 280: giving the number of character spaces taken up ! 281: by this character. ! 282: For regular characters ! 283: this will always be ! 284: .q "\e001" , ! 285: but Greek and special characters can take more. ! 286: If the 0200 bit is set in this character, ! 287: it indicates that the character should be underlined ! 288: if we are in italic (underline) mode. ! 289: Thus, ! 290: alphabetic and numeric descriptions ! 291: will begin ! 292: .q "\e201" . ! 293: .pp ! 294: The remainder of the string is output to represent the character. ! 295: If the first output character ! 296: (i.e., ! 297: the second character in the total string) ! 298: has the 0200 bit set, ! 299: the character will be output in plot mode ! 300: so that fancy characters can be built up from existing characters. ! 301: If necessary, ! 302: the ! 303: .q "\e200" ! 304: character can be used as a null character ! 305: to force \s-2NROFF\s0 to set the terminal into plot mode. ! 306: All characters without the 0200 bit are output literally; ! 307: characters with the 0200 bit are not output, ! 308: but are used to indicate local carriage movement. ! 309: The next two bits (0140 bits) represent direction: ! 310: .(b ! 311: .ta \w'0200 'u ! 312: 0200 right ! 313: 0240 left ! 314: 0300 down ! 315: 0340 up ! 316: .)b ! 317: The bottom five bits represent a distance in terminal resolution units. ! 318: This is rather confusing, ! 319: but the examples should make this much more clear. ! 320: .sh 2 "Some Examples" ! 321: .pp ! 322: The following examples are from the DTC300S table: ! 323: .(b ! 324: .ta 2i ! 325: "\e001 ", /*space*/ ! 326: "\e001=", /*=*/ ! 327: "\e201A", /*A*/ ! 328: .)b ! 329: These entries show that all of these characters ! 330: take one character width when output. ! 331: The letter A is underlined in italic mode, ! 332: but neither space nor equal sign is. ! 333: .(b ! 334: .ta 2i ! 335: "\e001o\eb+", /*bullet*/ ! 336: "\e002[]", /*square*/ ! 337: "\e202f\^i", /*f\^i*/ ! 338: .)b ! 339: The bullet character takes only one character position, ! 340: but is created by outputing the letter ! 341: .q o ! 342: and overstriking it with a plus sign. ! 343: The square character is approximated ! 344: with two brackets; ! 345: it takes two full character positions ! 346: when output. ! 347: The ! 348: .q fi ! 349: ligature ! 350: is produced using the letters ! 351: .q f ! 352: and ! 353: .q i ! 354: (surprise!); ! 355: it is underlined in italic mode. ! 356: .(b ! 357: "\e001\e241c\e202(\e241", /*alpha*/ ! 358: "\e001\e200B\e242\e302|\e202\e342", /*beta*/ ! 359: .)b ! 360: The letters alpha and beta both take a single character position. ! 361: The alpha is output by entering plot mode, ! 362: moving left 1 terminal unit (1/60" if you recall), ! 363: outputing the letter ! 364: .q c , ! 365: moving right 2/60", ! 366: outputing a left parenthesis, ! 367: and finally moving left 1/60"; ! 368: it is critical that the net space moved ! 369: be zero both horizontally and vertically. ! 370: The beta first has a dummy 0200 character ! 371: to enter plot mode but not output anything. ! 372: It then outputs a ! 373: .q B , ! 374: moves left 2/60", ! 375: moves down 2/48", ! 376: outputs a vertical bar ! 377: (which is designed to partically overstrike the left edge of the ! 378: .q B , ! 379: and finally move right 2/60" and up 2/48" ! 380: to set us back to the right place. ! 381: .sh 1 "INSTALLATION" ! 382: .pp ! 383: To install a terminal descriptor, ! 384: make it up by editing an existing terminal descriptor. ! 385: Assuming your terminal name is ! 386: .i term , ! 387: call your new descriptor ! 388: .b tab \c ! 389: .i term \c ! 390: .b .c . ! 391: Then, execute the following commands: ! 392: .(b ! 393: cc -c tabterm.c ! 394: strip tabterm.c ! 395: cp tabterm.o /usr/lib/term/tabterm ! 396: .)b ! 397: The directory /usr/src/cmd/troff/term ! 398: typically has a shell file to do this. ! 399: .+c ! 400: .ce 2 ! 401: APPENDIX ! 402: .sp ! 403: A Sample Table ! 404: .sp 3 ! 405: This table describes the DTC 300S. ! 406: .(l ! 407: .re ! 408: #define INCH 240 ! 409: /* ! 410: DASI300S ! 411: nroff driving tables ! 412: width and code tables ! 413: */ ! 414: ! 415: struct { ! 416: int bset; ! 417: int breset; ! 418: int Hor; ! 419: int Vert; ! 420: int Newline; ! 421: int Char; ! 422: int Em; ! 423: int Halfline; ! 424: int Adj; ! 425: char *twinit; ! 426: char *twrest; ! 427: char *twnl; ! 428: char *hlr; ! 429: char *hlf; ! 430: char *flr; ! 431: char *bdon; ! 432: char *bdoff; ! 433: char *ploton; ! 434: char *plotoff; ! 435: char *up; ! 436: char *down; ! 437: char *right; ! 438: char *left; ! 439: char *codetab[256-32]; ! 440: int zzz; ! 441: } t = { ! 442: /*bset*/ 0, ! 443: /*breset*/ 0177420, ! 444: /*Hor*/ INCH/60, ! 445: /*Vert*/ INCH/48, ! 446: /*Newline*/ INCH/6, ! 447: /*Char*/ INCH/10, ! 448: /*Em*/ INCH/10, ! 449: /*Halfline*/ INCH/12, ! 450: /*Adj*/ INCH/10, ! 451: /*twinit*/ "\e033\e006", ! 452: /*twrest*/ "\e033\e006", ! 453: /*twnl*/ "\e015\en", ! 454: /*hlr*/ "\e033H", ! 455: /*hlf*/ "\e033h", ! 456: /*flr*/ "\e032", ! 457: /*bdon*/ "", ! 458: /*bdoff*/ "", ! 459: /*ploton*/ "\e006", ! 460: /*plotoff*/ "\e033\e006", ! 461: /*up*/ "\e032", ! 462: /*down*/ "\en", ! 463: /*right*/ " ", ! 464: /*left*/ "\eb", ! 465: /*codetab*/ ! 466: "\e001 ", /*space*/ ! 467: "\e001!", /*!*/ ! 468: "\e001\e"", /*"*/ ! 469: "\e001#", /*#*/ ! 470: "\e001$", /*$*/ ! 471: "\e001%", /*%*/ ! 472: "\e001&", /*&*/ ! 473: "\e001'", /*' close*/ ! 474: "\e001(", /*(*/ ! 475: "\e001)", /*)*/ ! 476: "\e001*", /***/ ! 477: "\e001+", /*+*/ ! 478: "\e001,", /*,*/ ! 479: "\e001-", /*- hyphen*/ ! 480: "\e001.", /*.*/ ! 481: "\e001/", /*/*/ ! 482: "\e2010", /*0*/ ! 483: "\e2011", /*1*/ ! 484: "\e2012", /*2*/ ! 485: "\e2013", /*3*/ ! 486: "\e2014", /*4*/ ! 487: "\e2015", /*5*/ ! 488: "\e2016", /*6*/ ! 489: "\e2017", /*7*/ ! 490: "\e2018", /*8*/ ! 491: "\e2019", /*9*/ ! 492: "\e001:", /*:*/ ! 493: "\e001;", /*;*/ ! 494: "\e001<", /*<*/ ! 495: "\e001=", /*=*/ ! 496: "\e001>", /*>*/ ! 497: "\e001?", /*?*/ ! 498: "\e001@", /*@*/ ! 499: "\e201A", /*A*/ ! 500: "\e201B", /*B*/ ! 501: "\e201C", /*C*/ ! 502: "\e201D", /*D*/ ! 503: "\e201E", /*E*/ ! 504: "\e201F", /*F*/ ! 505: "\e201G", /*G*/ ! 506: "\e201H", /*H*/ ! 507: "\e201I", /*I*/ ! 508: "\e201J", /*J*/ ! 509: "\e201K", /*K*/ ! 510: "\e201L", /*L*/ ! 511: "\e201M", /*M*/ ! 512: "\e201N", /*N*/ ! 513: "\e201O", /*O*/ ! 514: "\e201P", /*P*/ ! 515: "\e201Q", /*Q*/ ! 516: "\e201R", /*R*/ ! 517: "\e201S", /*S*/ ! 518: "\e201T", /*T*/ ! 519: "\e201U", /*U*/ ! 520: "\e201V", /*V*/ ! 521: "\e201W", /*W*/ ! 522: "\e201X", /*X*/ ! 523: "\e201Y", /*Y*/ ! 524: "\e201Z", /*Z*/ ! 525: "\e001[", /*[*/ ! 526: "\e001\e\e", /*\e*/ ! 527: "\e001]", /*]*/ ! 528: "\e001^", /*^*/ ! 529: "\e001_", /*_ dash*/ ! 530: "\e001`", /*` open*/ ! 531: "\e201a", /*a*/ ! 532: "\e201b", /*b*/ ! 533: "\e201c", /*c*/ ! 534: "\e201d", /*d*/ ! 535: "\e201e", /*e*/ ! 536: "\e201f", /*f*/ ! 537: "\e201g", /*g*/ ! 538: "\e201h", /*h*/ ! 539: "\e201i", /*i*/ ! 540: "\e201j", /*j*/ ! 541: "\e201k", /*k*/ ! 542: "\e201l", /*l*/ ! 543: "\e201m", /*m*/ ! 544: "\e201n", /*n*/ ! 545: "\e201o", /*o*/ ! 546: "\e201p", /*p*/ ! 547: "\e201q", /*q*/ ! 548: "\e201r", /*r*/ ! 549: "\e201s", /*s*/ ! 550: "\e201t", /*t*/ ! 551: "\e201u", /*u*/ ! 552: "\e201v", /*v*/ ! 553: "\e201w", /*w*/ ! 554: "\e201x", /*x*/ ! 555: "\e201y", /*y*/ ! 556: "\e201z", /*z*/ ! 557: "\e001{", /*{*/ ! 558: "\e001|", /*|*/ ! 559: "\e001}", /*}*/ ! 560: "\e001~", /*~*/ ! 561: "\e000\e0", /*narrow sp*/ ! 562: "\e001-", /*hyphen*/ ! 563: "\e001o\eb+", /*bullet*/ ! 564: "\e002[]", /*square*/ ! 565: "\e001-", /*3/4 em*/ ! 566: "\e001_", /*rule*/ ! 567: "\e000\e0", /*1/4*/ ! 568: "\e000\e0", /*1/2*/ ! 569: "\e000\e0", /*3/4*/ ! 570: "\e001-", /*minus*/ ! 571: "\e202f\^i", /*fi*/ ! 572: "\e202f\^l", /*fl*/ ! 573: "\e202f\^f", /*ff*/ ! 574: "\e203f\^f\^i", /*ffi*/ ! 575: "\e203f\^f\^l", /*ffl*/ ! 576: "\e000\e0", /*degree*/ ! 577: "\e000\e0", /*dagger*/ ! 578: "\e000\e0", /*section*/ ! 579: "\e001'", /*foot mark*/ ! 580: "\e001'", /*acute accent*/ ! 581: "\e001`", /*grave accent*/ ! 582: "\e001_", /*underrule*/ ! 583: "\e001/", /*slash (longer)*/ ! 584: "\e000\e0", /*half narrow space*/ ! 585: "\e001 ", /*unpaddable space*/ ! 586: "\e001\e241c\e202(\e241", /*alpha*/ ! 587: "\e001\e200B\e242\e302|\e202\e342", /*beta*/ ! 588: "\e001\e200)\e201/\e241", /*gamma*/ ! 589: "\e001\e200o\e342<\e302", /*delta*/ ! 590: "\e001<\eb-", /*epsilon*/ ! 591: "\e001\e200c\e201\e301,\e241\e343<\e302", /*zeta*/ ! 592: "\e001\e200n\e202\e302|\e242\e342", /*eta*/ ! 593: "\e001O\eb-", /*theta*/ ! 594: "\e001i", /*iota*/ ! 595: "\e001k", /*kappa*/ ! 596: "\e001\e200\e\e\e304\e241'\e301\e241'\e345\e202", /*lambda*/ ! 597: "\e001\e200u\e242,\e202", /*mu*/ ! 598: "\e001\e241(\e203/\e242", /*nu*/ ! 599: "\e001\e200c\e201\e301,\e241\e343c\e241\e301`\e201\e301", /*xi*/ ! 600: "\e001o", /*omicron*/ ! 601: "\e001\e341-\e303\e"\e301\e"\e343", /*pi*/ ! 602: "\e001\e200o\e242\e302|\e342\e202", /*rho*/ ! 603: "\e001\e200o\e301\e202~\e341\e242", /*sigma*/ ! 604: "\e001\e200t\e301\e202~\e243~\e201\e341", /*tau*/ ! 605: "\e001v", /*upsilon*/ ! 606: "\e001o\eb/", /*phi*/ ! 607: "\e001x", /*chi*/ ! 608: "\e001\e200/-\e302\e202'\e244'\e202\e342", /*psi*/ ! 609: "\e001\e241u\e203u\e242", /*omega*/ ! 610: "\e001\e242|\e202\e343-\e303\e202`\e242", /*Gamma*/ ! 611: "\e001\e242/\e303-\e204-\e343\e\e\e242", /*Delta*/ ! 612: "\e001O\eb=", /*Theta*/ ! 613: "\e001\e242/\e204\e\e\e242", /*Lambda*/ ! 614: "\e000\e0", /*Xi*/ ! 615: "\e001\e242[]\e204[]\e242\e343-\e303", /*Pi*/ ! 616: "\e001\e200>\e302-\e345-\e303", /*Sigma*/ ! 617: "\e000\e0", /**/ ! 618: "\e001Y", /*Upsilon*/ ! 619: "\e001o\eb[\eb]", /*Phi*/ ! 620: "\e001\e200[]-\e302\e202'\e244`\e202\e342", /*Psi*/ ! 621: "\e001\e200O\e302\e241-\e202-\e241\e342", /*Omega*/ ! 622: "\e000\e0", /*square root*/ ! 623: "\e000\e0", /*terminal sigma*/ ! 624: "\e000\e0", /*root en*/ ! 625: "\e001>\eb_", /*>=*/ ! 626: "\e001<\eb_", /*<=*/ ! 627: "\e001=\eb_", /*identically equal*/ ! 628: "\e001-", /*equation minus*/ ! 629: "\e001=\eb~", /*approx =*/ ! 630: "\e000\e0", /*approximates*/ ! 631: "\e001=\eb/", /*not equal*/ ! 632: "\e002->", /*right arrow*/ ! 633: "\e002<-", /*left arrow*/ ! 634: "\e001|\eb^", /*up arrow*/ ! 635: "\e000\e0", /*down arrow*/ ! 636: "\e001=", /*equation equal*/ ! 637: "\e001x", /*multiply*/ ! 638: "\e001/", /*divide*/ ! 639: "\e001+\eb_", /*plus-minus*/ ! 640: "\e001U", /*cup (union)*/ ! 641: "\e000\e0", /*cap (intersection)*/ ! 642: "\e000\e0", /*subset of*/ ! 643: "\e000\e0", /*superset of*/ ! 644: "\e000\e0", /*improper subset*/ ! 645: "\e000\e0", /* improper superset*/ ! 646: "\e002oo", /*infinity*/ ! 647: "\e001\e200o\e201\e301`\e241\e341`\e241\e341`\e201\e301", /*partial derivative*/ ! 648: "\e001\e242\e\e\e343-\e204-\e303/\e242", /*gradient*/ ! 649: "\e001\e200-\e202\e341,\e301\e242", /*not*/ ! 650: "\e001\e200|'\e202`\e243\e306'\e241`\e202\e346", /*integral sign*/ ! 651: "\e000\e0", /*proportional to*/ ! 652: "\e000\e0", /*empty set*/ ! 653: "\e000\e0", /*member of*/ ! 654: "\e001+", /*equation plus*/ ! 655: "\e001r\ebO", /*registered*/ ! 656: "\e001c\ebO", /*copyright*/ ! 657: "\e001|", /*box rule */ ! 658: "\e001c\eb/", /*cent sign*/ ! 659: "\e000\e0", /*dbl dagger*/ ! 660: "\e000\e0", /*right hand*/ ! 661: "\e001*", /*left hand*/ ! 662: "\e001*", /*math * */ ! 663: "\e000\e0", /*bell system sign*/ ! 664: "\e001|", /*or (was star)*/ ! 665: "\e001O", /*circle*/ ! 666: "\e001|", /*left top (of big curly)*/ ! 667: "\e001|", /*left bottom*/ ! 668: "\e001|", /*right top*/ ! 669: "\e001|", /*right bot*/ ! 670: "\e001|", /*left center of big curly bracket*/ ! 671: "\e001|", /*right center of big curly bracket*/ ! 672: "\e001|", /*bold vertical*/ ! 673: "\e001|", /*left floor (left bot of big sq bract)*/ ! 674: "\e001|", /*right floor (rb of ")*/ ! 675: "\e001|", /*left ceiling (lt of ")*/ ! 676: "\e001|"}; /*right ceiling (rt of ")*/ ! 677: .)l
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.