DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ P T ┃
Length: 285333 (0x45a95) Types: TextFile Names: »PORTING_PS«
└─⟦85b835f43⟧ Bits:30000549 8mm tape, Rational 1000, Xlib rev 6.00 └─ ⟦0c20f784e⟧ »DATA« └─⟦90e3dc9e8⟧ └─⟦this⟧
%!PS-Adobe-2.0 %%Title: !DOCUMENTATION.BOOKS.XLIB.PORTING.PROD_WORKING.UNITS.PORTING'V(3) %%Creator: COMPOSE 10.7.11 %%CreationDate: June 6, 1991 at 8:47:05 AM %%For: SJB %%Pages: (atend) %%DocumentFonts: (atend) %%EndComments /SelectFont {findfont exch dup neg 0 0 3 -1 roll 0 0 MAT astore makefont setfont} bind def /BeginPage {/State save def /INITIAL-MATRIX matrix currentmatrix def 1 -1 scale 0.5 setlinewidth} bind def /PositionPage {{-90 rotate pop} {0 exch neg translate} ifelse} bind def /EndPage {State restore showpage} def /WS {0 32 4 -1 roll widthshow} bind def /MX {0 rmoveto} bind def /LTAB {gsave exch (.) stringwidth pop sub exch {dup 2 div dup 0 rmoveto (.) show 0 rmoveto} repeat pop grestore} bind def /MAT matrix def /FINDSCALE {gsave newpath 0 0 moveto (X) false charpath flattenpath pathbbox /CAPHEIGHT exch def pop pop pop newpath 0 0 moveto (x) false charpath flattenpath pathbbox /XHEIGHT exch def pop pop pop grestore XHEIGHT CAPHEIGHT XHEIGHT sub 3 div add CAPHEIGHT div } bind def /CAP-ENCODING [ StandardEncoding aload pop ] def 8#141 1 8#172 {CAP-ENCODING exch dup 1 string dup 0 4 -1 roll 8#40 sub put cvn put} for /COPYFONT {dup length dict /TMPDICT exch def {1 index /FID ne {TMPDICT 3 1 roll put} {pop pop} ifelse } forall TMPDICT }bind def /SYM {save exch /newfont currentfont maxlength dict def currentfont {exch dup /FID ne {dup /Encoding eq {exch dup length array copy newfont 3 1 roll put} {exch newfont 3 1 roll put} ifelse } {pop pop} ifelse} forall newfont /Encoding get 8#377 3 -1 roll put /NEWFONT newfont definefont setfont (\377) show restore} bind def %%EndProlog %%Page: 1 1 BeginPage 792 false PositionPage 72 76 moveto 14 /Times-Bold SelectFont (1. Introduction) show 72 99.760 moveto 10 /Times-Roman SelectFont (The Rational X Library is an Ada implementation of Xlib, the X interface level of the) 0.786 WS 3.285 MX (X Window System) 0.785 WS /trademark SYM 9.800 MX ( from) 0.785 WS 72 111.760 moveto (MIT. The purpose of this manual is to detail the steps and considerations involved when porting Xlib to a new target) 0.083 WS 72 123.760 moveto (machine, compiler, or operating system.) show 72 147.760 moveto (Rational's Xlib is about 99 percent Ada and 1 percent \252other.\272 The) 0.192 WS 2.691 MX (99 percent Ada portion is completely portable to) 0.191 WS 72 159.760 moveto (any Ada compiler) 0.082 WS 2.583 MX (that implements the necessary numeric types and data-representation specifications. The 1 percent) 0.083 WS 72 171.760 moveto (\252other\272 portion contains routines that implement target-dependent support for certain operations) 2.386 WS 4.885 MX (not generally) 2.385 WS 72 183.760 moveto (available in Ada.) show 8 /Times-Roman SelectFont 0 -3 rmoveto (1) show 0 3 rmoveto 72 207.760 moveto 10 /Times-Roman SelectFont (The intended audience for this manual is the programmers who will be responsible for) 0.366 WS 2.867 MX (porting Xlib to a new target.) 0.367 WS 72 219.760 moveto (They should be familiar with Ada, the target Ada compiler, the target machine, and the target) 1.276 WS 3.775 MX (operating system.) 1.275 WS 72 231.760 moveto (Depending on the facilities provided by the compiler, it may be necessary to have familiarity) 2.141 WS 4.642 MX (with the target) 2.142 WS 72 243.760 moveto (machine's assembly language as well.) show 72 267.760 moveto (Porting Xlib is not a good assignment for a \252novice\272 or) 1.653 WS 4.152 MX (for someone who is not familiar with the concepts of) 1.652 WS 72 279.760 moveto (program stacks, calling sequences, or physical representations for data types.) show 72 303.760 moveto (The time required to port Xlib to a new target depends) 1.829 WS 4.330 MX (on several variables, such as: How experienced is the) 1.830 WS 72 315.760 moveto (programmer? What facilities are provided by the Ada compiler?) 2.243 WS 4.742 MX (What facilities are) 2.242 WS 10 /Times-Italic SelectFont ( not) 2.242 WS 10 /Times-Roman SelectFont ( provided by the Ada) 2.242 WS 72 327.760 moveto (compiler? What model of network input/output is used by the operating system?) show 72 351.760 moveto (The minimum time for a port can be estimated at approximately one man-month.) 1.758 WS 4.259 MX (This is based on the mutual) 1.759 WS 72 363.760 moveto (assumptions that the programmer has done this before and that everything goes very smoothly.) 1.422 WS 3.921 MX (A figure of two) 1.421 WS 72 375.760 moveto (man-months is probably more realistic. If the target compiler has bugs or if it fails to usefully implement certain) 1.080 WS 72 387.760 moveto (implementation-dependent Ada facilities, such as Unchecked_Conversion,) 1.026 WS 3.525 MX (pragma Interface, record representation) 1.025 WS 72 399.760 moveto (clauses, or length clauses, the porting effort could easily require additional time.) show 72 423.760 moveto (As with any porting task, it is possible to tune the performance of the new Xlib. This is done) 0.767 WS 3.268 MX (by reworking larger) 0.768 WS 72 435.760 moveto (portions of the code. For example, the default configuration) 1.190 WS 3.689 MX (of the library uses a very simple model for network) 1.189 WS 72 447.760 moveto (input/output. This model is very portable, but it may not) 0.130 WS 2.631 MX (be the most efficient possible for a particular machine. Xlib) 0.131 WS 72 459.760 moveto (is designed so that the code that) 0.217 WS 10 /Times-Italic SelectFont ( must) 0.217 WS 10 /Times-Roman SelectFont ( be) 0.217 WS 2.716 MX (changed for a new target is very small. However, this code is also arranged) 0.216 WS 72 471.760 moveto (so that it has a small number) 0.463 WS 2.964 MX (of callers. It is possible to widen the circle of change to the next level and to increase) 0.464 WS 72 483.760 moveto (the library's efficiency at the cost of increased machine dependence. This kind of) 0.575 WS 3.074 MX (tuning can easily consume many) 0.574 WS 72 495.760 moveto (additional man-months.) show 72 519.760 moveto (Xlib, in its default form, depends on a number of Ada's implementation-dependent facilities.) show 72 543.760 moveto (\267 ) show 18 MX (Pragma Interface: Xlib must talk to the operating system to initiate) 0.479 WS 2.980 MX (network connections to remote X servers.) 0.480 WS 96 555.760 moveto (This usually implies the use of pragma Interface. If this facility is not provided, something) 0.333 WS 2.832 MX (else must be done.) 0.332 WS 96 567.760 moveto (This can take additional porting time.) show 72 585.760 moveto (\267 ) show 18 MX (Unchecked_Conversion: Xlib must convert data to and from X protocol format. This implies Unchecked-) 1.680 WS 96 597.760 moveto (_Conversion. If this facility does not exist, or if it exists but has limitations that restrict its utility, a different) 0.620 WS 96 609.760 moveto (facility must be created. Xlib is prepared for this, but it requires additional porting time.) show 72 627.760 moveto (\267 ) show 18 MX (Representation clauses: Xlib provides representation clauses for all X protocol message types. If the Ada) 1.740 WS 96 639.760 moveto (compiler does not support representation clauses, and if the default record) 0.151 WS 2.650 MX (layout does not match Xlib's needs,) 0.150 WS 96 651.760 moveto (the default conversion facilities to/from protocol format will not operate properly. This means) 3.127 WS 5.628 MX (that a) 3.128 WS 96 663.760 moveto (target-specific module will have to replace the default implementation. Xlib is) 0.116 WS 2.615 MX (prepared for this, but it requires) 0.115 WS 96 675.760 moveto (additional porting time.) show 72 702 moveto (____________________________________________) show 72 720 moveto 8 /Times-Roman SelectFont 0 -3 rmoveto (1) show 0 3 rmoveto ( For the first SunOS) show /trademark SYM 7.840 MX ( target, there were 41,000 lines of Ada plus 250 lines of assembly code.) show 72 756 moveto 10 /Times-Roman SelectFont (RATIONAL) show 161.095 MX (April 1991) show 207.195 MX (1) show EndPage %%Page: 2 2 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto (\267 ) show 18 MX (Length clauses: Xlib specifies the length of all basic types. This) 1.345 WS 3.846 MX (makes conversions between network data) 1.346 WS 96 84 moveto (streams and Xlib) 0.848 WS 3.347 MX (types very efficient. If length clauses are not supported, Unchecked_Conversion or similar) 0.847 WS 96 96 moveto (\252blind\272 conversions cannot be used and more explicit \050nongeneric\051 facilities must) 0.513 WS 3.014 MX (be created by hand. Again,) 0.514 WS 96 108 moveto (Xlib is prepared for this, but it requires additional porting time.) show 72 132 moveto (Xlib is set up to take advantage of various implementation-dependent Ada facilities if) 0.785 WS 3.284 MX (they exist. However, it also) 0.784 WS 72 144 moveto (restricts itself to those facilities that are highly likely to exist. For each optional) 0.436 WS 2.937 MX (facility that might be missing, Xlib) 0.437 WS 72 156 moveto (has a fallback position. But, for each) 0.095 WS 2.594 MX (fallback, more work is added to the port and more knowledge is required of the) 0.094 WS 72 168 moveto (programmer.) show 72 192 moveto (This manual attempts to cover all of the considerations involved in porting) 1.198 WS 3.699 MX (Xlib to a new target. In particular, it) 1.199 WS 72 204 moveto (covers:) show 72 228 moveto (\267 ) show 18 MX (Structure of the Xlib subsystem and the related subsystems) show 72 246 moveto (\267 ) show 18 MX (Ada compiler dependencies, LRM Appendix F, and other language issues) show 72 264 moveto (\267 ) show 18 MX (Machine and operating-system dependencies) show 72 282 moveto (\267 ) show 18 MX (Xlib source-code parameterization and tools that support it) show 72 300 moveto (\267 ) show 18 MX (Steps, caveats, things to watch, and options for porting Xlib) show 72 318 moveto (\267 ) show 18 MX (Testing and debugging a newly ported Xlib) show 72 336 moveto (\267 ) show 18 MX (Working sample UNIX) show 0 -2.500 rmoveto 7 /Times-Roman SelectFont /registered SYM 5.320 MX 10 /Times-Roman SelectFont 0 2.500 rmoveto ( Makefiles, Imakefiles, and scripts for building and maintaining Xlib) show 72 756 moveto (2) show 207.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 3 3 BeginPage 792 false PositionPage 72 76 moveto 14 /Times-Bold SelectFont (2. Library Organization) show 72 99.760 moveto 10 /Times-Roman SelectFont (Xlib is organized into these subsystems and system directories:) show 72 123.760 moveto 10 /Times-Bold SelectFont 18 MX (X_Clients) show 10 /Times-Roman SelectFont 35.780 MX (This subsystem supplies various utility programs that were written against) 1.422 WS 3.921 MX (the X_Library) 1.421 WS 168 135.760 moveto (subsystem. \050This subsystem is present only on machines with full Xlib source.\051) show 72 153.760 moveto 10 /Times-Bold SelectFont 18 MX (X_Data) show 10 /Times-Roman SelectFont 45.230 MX (This directory) 1.120 WS 3.621 MX (contains machine- and site-specific information used by Xlib at application) 1.121 WS 168 165.760 moveto (runtime. This is the installed location) 1.526 WS 4.025 MX (for these files. The originals for these files can be) 1.525 WS 168 177.760 moveto (found in the Misc subdirectory of the X_Library subsystem.) show 72 195.760 moveto 10 /Times-Bold SelectFont 18 MX (X_Demos) show 10 /Times-Roman SelectFont 36.900 MX (This subsystem supplies various demonstration programs that were written against the) 2.703 WS 168 207.760 moveto (X_Library subsystem. They) 2.487 WS 4.986 MX (can be interesting and useful in their own right, but their) 2.486 WS 168 219.760 moveto (primary use is as a first-level operability check for the Xlib. These programs are especially) 0.645 WS 168 231.760 moveto (useful when porting the Xlib to a new target.) 1.319 WS 3.818 MX (Each program exercises a slightly different) 1.318 WS 168 243.760 moveto (subset of the Xlib interfaces. \050This subsystem is present only on machines with full Xlib) 1.355 WS 168 255.760 moveto (source.\051) show 72 273.760 moveto 10 /Times-Bold SelectFont 18 MX (X_Library) show 10 /Times-Roman SelectFont 31.890 MX (This subsystem implements the full X Interface. This is the subsystem that would) 0.958 WS 3.457 MX (be used) 0.957 WS 168 285.760 moveto (when writing X applications.) show 72 303.760 moveto 10 /Times-Bold SelectFont 18 MX (X_Testing) show 10 /Times-Roman SelectFont 34.110 MX (This subsystem is the primary testbed for Xlib. All of the) 0.879 WS 3.380 MX (basic \252smoke\272 and functionality) 0.880 WS 168 315.760 moveto (tests for Xlib are found here.) show 72 333.760 moveto 10 /Times-Bold SelectFont 18 MX (X_Tools) show 10 /Times-Roman SelectFont 42.440 MX (This subsystem contains a variety of tools that are useful when porting Xlib to a new target.) show 72 351.760 moveto 10 /Times-Bold SelectFont 18 MX (X_R1000_Support) show 72 363.760 moveto 10 /Times-Roman SelectFont 96 MX (This subsystem is for the R1000) 1.787 WS 0 -2.500 rmoveto 7 /Times-Roman SelectFont /registered SYM 5.320 MX 10 /Times-Roman SelectFont 0 2.500 rmoveto ( version of Xlib.) 1.787 WS 4.286 MX (It implements the procedure-variable) 1.786 WS 168 375.760 moveto (mechanism for the library. Use of this subsystem by) 1.396 WS 3.897 MX (any client other than the X_Library) 1.397 WS 168 387.760 moveto (itself is strongly) 1.675 WS 4.174 MX (discouraged. It is subject to arbitrary change, even elimination, without) 1.674 WS 168 399.760 moveto (notice.) show 72 423.760 moveto (If disk space is tight on your) 1.741 WS 4.242 MX (target machine, X_Library and X_Clients are the only X_@ subsystems that are) 1.742 WS 72 435.760 moveto (required. The other X_@ subsystems are for porting and testing purposes.) show 72 459.760 moveto (On an R1000, the paths for these components would be:) show 72 483.760 moveto 10 /Times-Bold SelectFont 18 MX (!Tools.X_Windows.X_Clients) show 10 /Times-Roman SelectFont 59.880 MX (Utilities and Environment commands) show 72 495.760 moveto 10 /Times-Bold SelectFont 18 MX (!Tools.X_Windows.X_Data) show 10 /Times-Roman SelectFont 69.330 MX (Runtime-support text files) show 72 507.760 moveto 10 /Times-Bold SelectFont 18 MX (!Tools.X_Windows.X_Demos) show 10 /Times-Roman SelectFont 61 MX (Demonstration programs) show 72 519.760 moveto 10 /Times-Bold SelectFont 18 MX (!Tools.X_Windows.X_Library) show 10 /Times-Roman SelectFont 55.990 MX (Basic library: source and binary) show 72 531.760 moveto 10 /Times-Bold SelectFont 18 MX (!Tools.X_Windows.X_Testing) show 10 /Times-Roman SelectFont 58.210 MX (Testbed) show 72 543.760 moveto 10 /Times-Bold SelectFont 18 MX (!Tools.X_Windows.X_Tools) show 10 /Times-Roman SelectFont 66.540 MX (Porting tools) show 72 555.760 moveto 10 /Times-Bold SelectFont 18 MX (!Tools.X_Windows.X_R1000_Support) show 10 /Times-Roman SelectFont 22.650 MX (R1000-supporting code view) show 72 591.760 moveto (On a UNIX system, if an environment variable named \252) 1.032 WS 10 /Times-Bold SelectFont (xwin) show 10 /Times-Roman SelectFont (\272 contains the path for) 1.032 WS 3.531 MX (the basic source library\320for) 1.031 WS 72 603.760 moveto (example,) show 10 /Times-Bold SelectFont ( xwin=/src/ada/x_windows) show 10 /Times-Roman SelectFont (\320then the various components would be in:) show 72 627.760 moveto 10 /Times-Bold SelectFont 18 MX ($xwin/x-clients) show 10 /Times-Roman SelectFont 38.110 MX (Utilities) show 72 639.760 moveto 10 /Times-Bold SelectFont 18 MX ($xwin/x-demos) show 10 /Times-Roman SelectFont 38.110 MX (Demos) show 72 651.760 moveto 10 /Times-Bold SelectFont 18 MX ($xwin/x-library) show 10 /Times-Roman SelectFont 35.330 MX (Basic library: source) show 72 663.760 moveto 10 /Times-Bold SelectFont 18 MX ($xwin/x-testing) show 10 /Times-Roman SelectFont 37 MX (Testbed) show 72 675.760 moveto 10 /Times-Bold SelectFont 18 MX ($xwin/tools) show 10 /Times-Roman SelectFont 53.660 MX (Porting tools) show 72 687.760 moveto 10 /Times-Bold SelectFont 18 MX (/usr/lib/X11/ada) show 10 /Times-Roman SelectFont 33.090 MX (Runtime-support text files) show 72 699.760 moveto 10 /Times-Bold SelectFont 18 MX (/usr/lib/X11/ada) show 10 /Times-Roman SelectFont 33.090 MX (Installed Xlib library: binary form) show 72 711.760 moveto 10 /Times-Bold SelectFont 18 MX (/usr/bin/X11/ada) show 10 /Times-Roman SelectFont 30.310 MX (Installed executables) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 207.195 MX (3) show EndPage %%Page: 4 4 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto (Within these subsystems and directories, the structure of Xlib is the much the same on an R1000 and on UNIX. On) 0.375 WS 72 84 moveto (UNIX there are additional files in some or all) 1.319 WS 3.818 MX (directories, such as Makefiles and Imakefiles, that are part of the) 1.318 WS 72 96 moveto (UNIX facilities for building and maintaining a working library.) show 72 120 moveto (Paths and filenames on the R1000 follow Ada naming rules: only letters,) 1.372 WS 3.873 MX (digits, and underscores are allowed in) 1.373 WS 72 132 moveto (names; dots are used) 1.912 WS 4.411 MX (between directory names within a path. This manual is written using the R1000 naming) 1.911 WS 72 144 moveto (conventions.) show 72 168 moveto (Pathnames on UNIX typically will) 1.497 WS 3.998 MX (be the same as on the R1000, except that pathnames are all lowercase, dots) 1.498 WS 72 180 moveto (between directory names are replaced with slashes, and underscores) 2.704 WS 5.203 MX (are replaced with dashes. For example,) 2.703 WS 72 192 moveto (X_Windows.X_Library on the R1000 would be x-windows/x-library on UNIX.) show 72 216 moveto (Filenames on UNIX are often shorter than on the R1000 to allow for System V) 0.957 WS 3.458 MX (name-length restrictions, and file) 0.958 WS 72 228 moveto (extension often is added. For example, Xlbmt_Numeric_Types'Spec on the R1000 would) 0.961 WS 3.460 MX (be mtNumTypes.prs on) 0.960 WS 72 240 moveto (UNIX. The UNIX names contain mixed upper/lowercase characters.) show 72 264 moveto (The exact names and locations of the Ada libraries \050compiled Ada units managed) 0.728 WS 3.229 MX (by the Ada librarian\051 are target-) 0.729 WS 72 276 moveto (dependent. For a list of the libraries for our current set of targets, see Appendix E.) show 72 301.760 moveto 12 /Times-Bold SelectFont (2.1. Subsystem: X_Clients) show 72 325.520 moveto 10 /Times-Bold SelectFont (X_Clients) show 10 /Times-Roman SelectFont ( is a collection of utility programs and Environment commands.) 0.296 WS 2.500 MX ( These programs are written against Xlib) 0.296 WS 72 337.520 moveto (and they make no use of any toolkit.) show 72 361.520 moveto (Most of the utilities are based on the MIT utility of the same name, and they perform in much) 0.518 WS 3.019 MX (the same way. Each) 0.519 WS 72 373.520 moveto (program has a UNIX) show 10 /Times-Bold SelectFont ( man) show 10 /Times-Roman SelectFont ( page that explains how it works. The current list of clients is:) show 72 397.520 moveto 10 /Times-Bold SelectFont 18 MX (printenv) show 10 /Times-Roman SelectFont 41.330 MX (On an R1000,) 0.663 WS 3.162 MX (this prints a listing of the current session's environment variables. These are) 0.662 WS 168 409.520 moveto (used by Xlib in much the same way as UNIX environment variables are used.) show 72 427.520 moveto 10 /Times-Bold SelectFont 18 MX (setenv) show 10 /Times-Roman SelectFont 51.340 MX (On an R1000, this is used to set an) 1.447 WS 3.948 MX (environment variable. The names of variables on an) 1.448 WS 168 439.520 moveto (R1000 are not case-sensitive. A variable can be set, or created) 1.796 WS 4.295 MX (and assigned, any string) 1.795 WS 168 451.520 moveto (value.) show 72 469.520 moveto 10 /Times-Bold SelectFont 18 MX (unsetenv) show 10 /Times-Roman SelectFont 40.220 MX (On an R1000, this is used to unset, or destroy, an environment variable.) show 72 487.520 moveto 10 /Times-Bold SelectFont 18 MX (xev) show 10 /Times-Roman SelectFont 63.560 MX (This simply puts up two nested windows and then dumps to) 0.334 WS 2.835 MX (the log a complete transcript of) 0.335 WS 168 499.520 moveto (any and all X events that are received. This) 0.028 WS 2.527 MX (can be very educational for new X programmers.) 0.027 WS 168 511.520 moveto (This tests various pieces from the Xlib's key, button, and event interfaces.) show 72 537.520 moveto 12 /Times-Bold SelectFont (2.2. Directory: X_Data) show 72 561.280 moveto 10 /Times-Roman SelectFont (This directory contains the installed copies of machine-specific files used by Xlib at application runtime:) show 72 585.280 moveto 10 /Times-Bold SelectFont 18 MX (Application_Defaults) show 72 597.280 moveto 10 /Times-Roman SelectFont 96 MX (Contains all application-specific data files.) show 72 615.280 moveto 10 /Times-Bold SelectFont 18 MX (X_Error_Db) show 10 /Times-Roman SelectFont 23.010 MX (Contains all of the protocol error messages.) show 72 633.280 moveto 10 /Times-Bold SelectFont 18 MX (X_Key_Sym_Db) show 10 /Times-Roman SelectFont 6.890 MX (\050Optional\051 Contains) 2.078 WS 4.579 MX (any site-specific key-symbol definitions. These augment the default) 2.079 WS 168 645.280 moveto 10 /Times-Bold SelectFont (X_Key_Code_To_Key_Sym) show 10 /Times-Roman SelectFont ( definitions. Each line is of the form) 1.872 WS 10 /Times-Italic SelectFont ( name : hexcode,) 1.872 WS 10 /Times-Roman SelectFont (\320for) show 168 657.280 moveto (example, NewKey : 3FA2. Comment lines have an exclamation mark \050!\051) 2.829 WS 5.330 MX (as the first) 2.830 WS 168 669.280 moveto (nonblank character.) show 72 693.280 moveto (Future releases of the Rational X Library will place other files in this) 0.974 WS 3.473 MX (directory\320for example, application default) 0.973 WS 72 705.280 moveto (resource files.) show 72 756 moveto (4) show 207.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 5 5 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 383.300 MX (Library Organization) show 72 74 moveto 12 /Times-Bold SelectFont (2.3. Subsystem: X_Demos) show 72 97.760 moveto 10 /Times-Bold SelectFont (X_Demos) show 10 /Times-Roman SelectFont ( is a collection of simple demonstration programs. These programs are written against Xlib and they make) 0.140 WS 72 109.760 moveto (no use) 0.080 WS 2.579 MX (of any toolkit. Although the demo programs are entertaining in their own right, their main purpose is to act as) 0.079 WS 72 121.760 moveto (an early set of \252does it work?\272 tests for new ports of Xlib.) show 72 145.760 moveto (Most of the demos are based on the MIT demo of the same) 0.885 WS 3.386 MX (name and they perform in much the same way. Each) 0.886 WS 72 157.760 moveto (program has a UNIX man page that explains how it works. Most of the demo programs can be halted) 0.173 WS 2.672 MX (by clicking on) 0.172 WS 72 169.760 moveto (their window with the middle mouse button \050mouse button 2\051. The current list of demos, sorted according) 0.786 WS 3.287 MX (to their) 0.787 WS 72 181.760 moveto (recommended porting order, is:) show 72 205.760 moveto 10 /Times-Bold SelectFont 18 MX (ico) show 10 /Times-Roman SelectFont 65.780 MX (This is) 3.470 WS 5.969 MX (the bouncing-ball demo. \050It actually draws bouncing icosahedrons and other) 3.469 WS 168 217.760 moveto (sharp-sided geometric shapes.\051 This is the simplest of the demos and makes a good first) 1.515 WS 168 229.760 moveto (target for a new port. It tests line drawing and screen clearing.) show 72 247.760 moveto 10 /Times-Bold SelectFont 18 MX (muncher) show 10 /Times-Roman SelectFont 39.670 MX (This is a fascinating visual display that really doesn't do very much at) 2.488 WS 4.987 MX (all\320a perfect) 2.487 WS 168 259.760 moveto (\252gee-whiz\272 demonstration. It tests point drawing.) show 72 277.760 moveto 10 /Times-Bold SelectFont 18 MX (plaid) show 10 /Times-Roman SelectFont 56.320 MX (This draws plaid designs in) 1.595 WS 4.096 MX (a window. It tests rectangle drawing and a server's queuing) 1.596 WS 168 289.760 moveto (capabilities.) show 72 307.760 moveto 10 /Times-Bold SelectFont 18 MX (puzzle) show 10 /Times-Roman SelectFont 50.780 MX (This is an implementation of that little) 1.217 WS 3.716 MX (toy puzzle where you slide numbered tiles around) 1.216 WS 168 319.760 moveto (until they are in the proper order. It can randomize and) 2.004 WS 4.505 MX (solve the puzzle itself. It tests) 2.005 WS 168 331.760 moveto (rectangles, filling, fonts, and text drawing.) show 72 349.760 moveto 10 /Times-Bold SelectFont 18 MX (dragon) show 10 /Times-Roman SelectFont 47.440 MX (This is one form of the ancient game of Mah-Jongg. This) 0.655 WS 3.154 MX (program is the most complicated) 0.654 WS 168 361.760 moveto (and is usually the last program to start working when Xlib is ported to a new target.) show 72 385.760 moveto (Each of these client programs is stored in a subdirectory of the same name.) show 72 411.520 moveto 12 /Times-Bold SelectFont (2.4. Subsystem: X_Library) show 72 435.280 moveto 10 /Times-Bold SelectFont (X_Library) show 10 /Times-Roman SelectFont ( is the actual Xlib implementation. The) show 10 /Times-Bold SelectFont ( X_Library) show 10 /Times-Roman SelectFont ( subdirectories are:) show 72 459.280 moveto 10 /Times-Bold SelectFont 18 MX (Documentation) show 10 /Times-Roman SelectFont 12.450 MX (PostScript) show 0 -2.500 rmoveto 7 /Times-Roman SelectFont /registered SYM 5.320 MX 10 /Times-Roman SelectFont 0 2.500 rmoveto ( copies of all documentation.) show 72 477.280 moveto 10 /Times-Bold SelectFont 18 MX (Foreign) show 10 /Times-Roman SelectFont 44.670 MX (\252Foreign\272 language files for non-R1000 targets.) show 72 495.280 moveto 10 /Times-Bold SelectFont 18 MX (Imd_Procs) show 10 /Times-Roman SelectFont 31.340 MX (Internal machine-dependent procedural interfaces.) show 72 513.280 moveto 10 /Times-Bold SelectFont 18 MX (Imd_Types) show 10 /Times-Roman SelectFont 29.660 MX (Internal machine-dependent type interfaces.) show 72 531.280 moveto 10 /Times-Bold SelectFont 18 MX (Imi_Procs) show 10 /Times-Roman SelectFont 34.120 MX (Internal machine-independent procedural interfaces.) show 72 549.280 moveto 10 /Times-Bold SelectFont 18 MX (Imi_Types) show 10 /Times-Roman SelectFont 32.440 MX (Internal machine-independent type interfaces.) show 72 567.280 moveto 10 /Times-Bold SelectFont 18 MX (Misc) show 10 /Times-Roman SelectFont 57.450 MX (Various trivial pieces such as the Hello_World program.) show 72 585.280 moveto 10 /Times-Bold SelectFont 18 MX (Pmd_Procs) show 10 /Times-Roman SelectFont 29.120 MX (Public machine-dependent procedural interfaces.) show 72 603.280 moveto 10 /Times-Bold SelectFont 18 MX (Pmd_Types) show 10 /Times-Roman SelectFont 27.440 MX (Public machine-dependent type interfaces.) show 72 621.280 moveto 10 /Times-Bold SelectFont 18 MX (Pmi_Procs) show 10 /Times-Roman SelectFont 31.900 MX (Public machine-independent procedural interfaces.) show 72 639.280 moveto 10 /Times-Bold SelectFont 18 MX (Pmi_Types) show 10 /Times-Roman SelectFont 30.220 MX (Public machine-independent type interfaces.) show 72 663.280 moveto 10 /Times-Italic SelectFont (Internal) show 10 /Times-Roman SelectFont ( interfaces are those portions of Xlib that are not for use by) 2.267 WS 4.768 MX (most applications. They are part of the) 2.268 WS 72 675.280 moveto (fundamental implementation and are expected to be of interest) 1.227 WS 3.726 MX (only to extension writers. They are also the most) 1.226 WS 72 687.280 moveto (target-specific portion) 0.082 WS 2.583 MX (of Xlib. However, even within the internal portion of Xlib, most interfaces and most types are) 0.083 WS 72 699.280 moveto (target-independent except for the fact that the types contain, as a subcomponent, some target-dependent data.) 2.265 WS 72 711.280 moveto (Internal interfaces have the potential for changing from target to target.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 207.195 MX (5) show EndPage %%Page: 6 6 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto 10 /Times-Italic SelectFont (Public) show 10 /Times-Roman SelectFont ( interfaces are) 1.455 WS 3.956 MX (those portions of Xlib that are for general application programming. They will be used by) 1.456 WS 72 84 moveto (many, or even most, X Window Systems applications. Public interfaces will not change from target to target.) show 72 108 moveto 10 /Times-Italic SelectFont (Machine-dependent) show 10 /Times-Roman SelectFont ( interfaces are those that have implementations) 1.392 WS 3.891 MX (that may change from target to target. Public) 1.391 WS 72 120 moveto (interfaces are stable. Internal interfaces may change.) show 72 144 moveto 10 /Times-Italic SelectFont (Machine-independent) show 10 /Times-Roman SelectFont ( interfaces are those that have no explicit dependencies on the target system.) show 72 169.760 moveto 12 /Times-Bold SelectFont (2.5. Subsystem: X_Testing) show 72 193.520 moveto 10 /Times-Bold SelectFont (X_Testing) show 10 /Times-Roman SelectFont ( contains the collected tests for Xlib. It will eventually be a complete) 1.773 WS 4.274 MX (test suite for Xlib. Initially it) 1.774 WS 72 205.520 moveto (consists mainly of \252smoke\272 tests \050call an interface; put out the resultant fire\051.) show 72 229.520 moveto (The tests are grouped into areas. Each area corresponds to a) 1.671 WS 4.170 MX (series of related Xlib interfaces. For instance, the) 1.670 WS 72 241.520 moveto 10 /Times-Bold SelectFont (Resource_Manager) show 10 /Times-Roman SelectFont ( subdirectory contains a series of general tests for the resource manager, or RM, portion of Xlib.) show 72 265.520 moveto (Within each subdirectory are a series) 0.280 WS 2.781 MX (of individual tests. In) 0.281 WS 10 /Times-Bold SelectFont ( Resource_Manager) 0.281 WS 10 /Times-Roman SelectFont ( are the various) 0.281 WS 10 /Times-Bold SelectFont ( Rm_010) 0.281 WS 10 /Times-Roman SelectFont (,) show 10 /Times-Bold SelectFont ( Rm_020) 0.281 WS 10 /Times-Roman SelectFont (,) show 72 277.520 moveto (... tests. Each test targets a particular series of functions within the RM.) show 72 301.520 moveto (For each test there is a series of files and Ada units. For example, for the) show 10 /Times-Bold SelectFont ( Rm_010) show 10 /Times-Roman SelectFont ( test there are:) show 72 325.520 moveto 10 /Times-Bold SelectFont 18 MX (Rm_010) show 10 /Times-Roman SelectFont 42.450 MX (This contains the code that makes up the) show 10 /Times-Bold SelectFont ( Rm_010) show 10 /Times-Roman SelectFont ( test.) show 72 343.520 moveto 10 /Times-Bold SelectFont 18 MX (Rm_010_Run) show 10 /Times-Roman SelectFont 19.110 MX (This is an instantiation of the) 0.875 WS 10 /Times-Bold SelectFont ( Run_One_Test) 0.875 WS 10 /Times-Roman SelectFont ( generic. This is usually) 0.875 WS 3.374 MX (used to run a single) 0.874 WS 168 355.520 moveto (test,) show 10 /Times-Bold SelectFont ( Rm_010) 0.546 WS 10 /Times-Roman SelectFont ( in this case. The generic creates the log) 0.546 WS 3.047 MX (file, compares the new log to the old) 0.547 WS 168 367.520 moveto (log, deletes the new log if they are the same, and \252administers\272 the test.) show 72 385.520 moveto 10 /Times-Bold SelectFont 18 MX (Rm_010_Log) show 10 /Times-Roman SelectFont 20.780 MX (This is a log file containing the captured output from a successful run of the test. It is used) 0.049 WS 2.548 MX (to) show 168 397.520 moveto (determine the pass/fail condition of a test run.) show 72 421.520 moveto (For each collection of tests\320for example, the RM tests\320there are these files:) show 72 445.520 moveto 10 /Times-Bold SelectFont 18 MX (Aaa_All_Rm) show 10 /Times-Roman SelectFont 22.450 MX (This Ada procedure sequentially runs all of the RM tests located in the subdirectory.) show 72 463.520 moveto 10 /Times-Bold SelectFont 18 MX (Aaa_Dir_Rm) show 10 /Times-Roman SelectFont 20.790 MX (This text file contains a list of) 0.836 WS 3.337 MX (all RM tests. Each test is listed with some indication of the) 0.837 WS 168 475.520 moveto (purpose of the test.) show 72 499.520 moveto (The exact naming conventions used for the various files within each subdirectory are detailed in Chapter 6.) show 72 525.280 moveto 12 /Times-Bold SelectFont (2.6. Subsystem: X_Tools) show 72 549.040 moveto 10 /Times-Bold SelectFont (X_Tools) show 10 /Times-Roman SelectFont ( is a collection of tools that can be useful when) 1.416 WS 3.915 MX (porting Xlib to a new target. Each tool is individually) 1.415 WS 72 561.040 moveto (documented in some detail by a separate appendix at the end of this manual.) show 72 585.040 moveto (The subdirectories within the) show 10 /Times-Bold SelectFont ( X_Tools) show 10 /Times-Roman SelectFont ( subsystem are:) show 72 609.040 moveto 10 /Times-Bold SelectFont 18 MX (Ada_Parametizer) show 72 621.040 moveto 10 /Times-Roman SelectFont 96 MX (This is the Ada parameterization) 0.405 WS 2.906 MX (tool. It searches an Ada unit for structured comments such) 0.406 WS 168 633.040 moveto (as ) 1.283 WS 10 /Courier SelectFont (--/ if) 1.283 WS 7.282 MX (R1000 then.) 1.282 WS 10 /Times-Roman SelectFont ( It is used to \252parameterize\272 Ada code. It comments and/or) 1.282 WS 168 645.040 moveto (uncomments code according to parameter) 2.046 WS 4.547 MX (settings provided by the user. It is especially) 2.047 WS 168 657.040 moveto (useful for maintaining one set of code that is to be used on a wide variety of targets.) show 72 675.040 moveto 10 /Times-Bold SelectFont 18 MX (C_To_Ada) show 10 /Times-Roman SelectFont 31.330 MX (This directory contains two files. The) 0.484 WS 10 /Times-Bold SelectFont ( X11_Names) 0.484 WS 10 /Times-Roman SelectFont ( file contains) 0.484 WS 2.983 MX (a table listing the names of) 0.483 WS 168 687.040 moveto (all Xlib objects. The names are given for C and for Ada.) 1.282 WS 3.783 MX (The name of the pertinent Ada) 1.283 WS 168 699.040 moveto (package is given as well as an indication of) 2.023 WS 4.522 MX (the Ada type for the object. The) 2.022 WS 10 /Times-Bold SelectFont ( Master-) 2.022 WS 168 711.040 moveto (_Translation_File) show 10 /Times-Roman SelectFont ( is a simpler two-column form of a similar table. Column) 0.004 WS 2.505 MX (1 contains the C) 0.005 WS 72 756 moveto (6) show 207.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 7 7 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 383.300 MX (Library Organization) show 168 72 moveto (name for some) 0.967 WS 3.466 MX (object. Column 2 contains an Ada name of the form) 0.966 WS 10 /Times-Italic SelectFont ( <package>.<object>) 0.966 WS 168 84 moveto 10 /Times-Roman SelectFont (for that same object.) show 72 102 moveto 10 /Times-Bold SelectFont 18 MX (Ship_To) show 10 /Times-Roman SelectFont 41.870 MX (This directory contains tools used when shipping Xlib sources to some new) 1.866 WS 4.367 MX (target. The) 1.867 WS 168 114 moveto (expected mode of operation is: \0501\051) 2.342 WS 4.841 MX (ship sources to target, \0502\051 find a problem, \0503\051 edit) 2.341 WS 168 126 moveto (source\050s\051 on the R1000, \0504\051) 0.163 WS 2.664 MX (ship changed sources to target, \0505\051 find next problem, and so on.) 0.164 WS 168 138 moveto (The) show 10 /Times-Bold SelectFont ( Ship_To) show 10 /Times-Roman SelectFont ( tools provide a \252ship latest changes to target\272 facility.) show 72 156 moveto 10 /Times-Bold SelectFont 18 MX (Vstring) show 10 /Times-Roman SelectFont 45.780 MX (This directory contains an implementation of a variable-length) 1.952 WS 4.451 MX (string type. It is used to) 1.951 WS 168 168 moveto (implement the other tools.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 207.195 MX (7) show EndPage %%Page: 8 8 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 756 moveto (8) show 207.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 9 9 BeginPage 792 false PositionPage 72 76 moveto 14 /Times-Bold SelectFont (3. Compiler Dependencies) show 72 99.760 moveto 10 /Times-Roman SelectFont (Xlib's compiler dependencies fall into these basic categories:) show 72 123.760 moveto 18 MX (Numeric types) show 19.400 MX (Are the required numeric types possible?) show 72 141.760 moveto 18 MX (Representations) show 14.120 MX (Can representations be specified?) show 72 159.760 moveto 18 MX (Conversions) show 28 MX (What must we do to implement conversions?) show 72 177.760 moveto 18 MX (Interfaces) show 38.580 MX (How do we talk to the operating system?) show 72 203.760 moveto 12 /Times-Bold SelectFont (3.1. Numeric Types) show 72 227.520 moveto 10 /Times-Roman SelectFont (The basic underlying X protocol uses these numeric types:) show 72 251.520 moveto (\267 ) show 18 MX (Signed and unsigned 32-bit numbers) show 72 269.520 moveto (\267 ) show 18 MX (Signed and unsigned 16-bit numbers) show 72 287.520 moveto (\267 ) show 18 MX (Signed and unsigned 8-bit numbers) show 72 311.520 moveto (Most of these are available with commercial Ada compilers.) show 72 335.520 moveto (The unsigned 32-bit numbers are the) 1.722 WS 4.223 MX (main problem. Most Ada compilers are incapable of supporting unsigned) 1.723 WS 72 347.520 moveto (32-bit numbers. The reason is quite simple. The Ada LRM in Section 3.5.4) 0.787 WS 3.286 MX (states that all predefined integer types) 0.786 WS 72 359.520 moveto (must be \252symmetric about zero, excepting an extra negative value which) 1.094 WS 3.595 MX (may exist in some implementations.\272 It) 1.095 WS 72 371.520 moveto (also states that any user-defined integer type is implemented simply as a new) 0.727 WS 3.226 MX (subtype of a predefined integer type) 0.726 WS 72 383.520 moveto (picked by the implementation.) show 72 407.520 moveto (This requirement means that an Ada compiler cannot support a 32-bit) 0.359 WS 2.860 MX (unsigned integer value unless it also supports) 0.360 WS 72 419.520 moveto (a signed integer value whose size is at least 33 bits. There are virtually no Ada compilers in the) 0.543 WS 3.042 MX (world that support) 0.542 WS 72 431.520 moveto (integers larger than 32 bits.) show 72 455.520 moveto (As a result of this,) 0.305 WS 2.806 MX (Xlib has been designed without using unsigned 32-bit data types. Fortunately, the uses for 32-bit) 0.306 WS 72 467.520 moveto (unsigned data in the protocol are such that using signed) 0.410 WS 2.909 MX (32-bit integers in their place is only a minor inconvenience) 0.409 WS 72 479.520 moveto (to the programmer.) show 8 /Times-Roman SelectFont 0 -3 rmoveto (2) show 0 3 rmoveto 72 503.520 moveto 10 /Times-Roman SelectFont (All of Xlib's numeric types are explicitly defined. The predefined Ada type) 0.773 WS 10 /Times-Bold SelectFont ( Integer) 0.773 WS 10 /Times-Roman SelectFont ( is not used because the LRM) 0.774 WS 72 515.520 moveto (explicitly gives the Ada implementation permission to give) show 10 /Times-Bold SelectFont ( Integers) show 10 /Times-Roman SelectFont ( arbitrary size and range.) show 72 539.520 moveto (Every Ada compiler vendor) 1.422 WS 3.921 MX (is required to supply a rewritten Appendix F that is tailored to the implementation.) 1.421 WS 72 551.520 moveto (Examine that appendix carefully. The target Ada compiler must) 0.340 WS 2.841 MX (be able to support the following numeric types or a) 0.341 WS 72 563.520 moveto (port of Xlib using this compiler is simply not possible:) show 108 598.520 moveto 9 /Courier SelectFont (type Thirty_Two_Bits_Signed is range -\0502 ** 31\051 .. 2 ** 31 - 1;) show 108 609.520 moveto (type Sixteen_Bits_Signed is range -\0502 ** 15\051 .. 2 ** 15 - 1;) show 108 620.520 moveto (type Sixteen_Bits_Unsigned is range 0 .. 2 ** 16 - 1;) show 108 631.520 moveto (type Eight_Bits_Signed is range -\0502 ** 7\051 .. 2 ** 7 - 1;) show 108 642.520 moveto (type Eight_Bits_Unsigned is range 0 .. 2 ** 8 - 1;) show 72 692 moveto 10 /Times-Roman SelectFont (____________________________________________) show 72 710 moveto 8 /Times-Roman SelectFont 0 -3 rmoveto (2) show 0 3 rmoveto ( One action item before the Ada 9X committee is to allow compilers to support unsymmetric integers. This would allow unsigned) show 72 720 moveto ( 32-bit numbers to exist without requiring >32-bit signed integers to exist.) show 72 756 moveto 10 /Times-Roman SelectFont (RATIONAL) show 161.095 MX (April 1991) show 207.195 MX (9) show EndPage %%Page: 10 10 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto (Some compilers restrict the range of the predefined 32-bit) 0.427 WS 2.926 MX (integer types so that they have symmetrical ranges about) 0.426 WS 72 84 moveto (zero. The X protocol requires a) 1.372 WS 3.873 MX (true asymmetric 32-bit 2's complement numeric representation. A compiler that) 1.373 WS 72 96 moveto (does not support this cannot be used for Xlib. All of these numeric types are) 1.483 WS 3.982 MX (declared in the) 1.482 WS 10 /Times-Bold SelectFont ( Xlbmt_Numeric-) 1.482 WS 72 108 moveto (_Types) show 10 /Times-Roman SelectFont ( module. If that module can be compiled and elaborated, the target compiler passes the first test. The next) 0.865 WS 72 120 moveto (problems are in the area of data representation.) show 72 145.760 moveto 12 /Times-Bold SelectFont (3.2. Data Representation) show 72 169.520 moveto 10 /Times-Roman SelectFont (Both Xlib's interface and its internal implementation are designed to) 1.684 WS 4.183 MX (be portable and efficient. Xlib tries to be) 1.683 WS 72 181.520 moveto (portable by explicitly defining all of its types, including numeric types,) 2.099 WS 4.600 MX (and by hiding, wherever possible, all) 2.100 WS 72 193.520 moveto (machine dependencies. It tries to be efficient by providing length and representation clauses for) 0.002 WS 2.501 MX (its types. Length and) 0.001 WS 72 205.520 moveto (representation clauses allow the internal implementation to be efficient by removing the need for representation) 1.530 WS 72 217.520 moveto (conversion when reading or writing X protocol messages.) show 72 241.520 moveto (All of Xlib's data-representation dependencies stem) 0.928 WS 3.427 MX (from the same basic consideration: Xlib's basic purpose is to) 0.927 WS 72 253.520 moveto (provide a convenient) 0.003 WS 2.504 MX (interface between the application and the X protocol data stream. How can we represent data in) 0.004 WS 72 265.520 moveto (a way that is convenient for the application's use while making network input/output as efficient as possible?) show 72 289.520 moveto (In some sense, Xlib) 0.622 WS 3.121 MX (is merely a fancy input/output buffering and conversion facility. An application calls Xlib and) 0.621 WS 72 301.520 moveto (passes some information. Xlib takes that information and places it in a buffer.) 0.087 WS 2.588 MX (At some point Xlib calls the operating) 0.088 WS 72 313.520 moveto (system and sends the buffer's contents to an) 0.498 WS 2.997 MX (X server. In the opposite direction, Xlib will call the operating system) 0.497 WS 72 325.520 moveto (and receive some new data in) 0.464 WS 2.965 MX (a buffer. At some later point the application will call Xlib to convert and retrieve the) 0.465 WS 72 337.520 moveto (buffered data.) show 72 361.520 moveto (This means that Xlib really) 0.949 WS 3.448 MX (has very little \252computation\272 to perform. It mainly shuffles data around. The primary) 0.948 WS 72 373.520 moveto (way to make a \252data shuffler\272 efficient is to ensure that it shuffles as little data as few times as possible.) show 72 397.520 moveto (The data that Xlib shuffles) 0.133 WS 2.634 MX (has two basic forms. There is the application's view of the data. These are the usual sorts) 0.134 WS 72 409.520 moveto (of records and arrays. There is also the X protocol's view of the data. This is a) 1.138 WS 3.637 MX (simple stream of 8-bit bytes. \050A) 1.137 WS 72 421.520 moveto (stream of bytes can also be thought of as an array of bytes.\051) show 72 445.520 moveto (Thus, the way to make Xlib efficient is to make) 1.770 WS 4.271 MX (the conversions between these two data forms as efficient as) 1.771 WS 72 457.520 moveto (possible. If, at the physical level, the) 1.060 WS 3.559 MX (two representations were identical, then Xlib's data shuffling would consist) 1.059 WS 72 469.520 moveto (merely of a simple byte-copying operation. This is the ideal case and this is what Xlib attempts to achieve.) show 72 493.520 moveto (The application calls Xlib) 0.906 WS 3.407 MX (with data. Xlib copies the data directly into a byte buffer. Xlib then calls the operating) 0.907 WS 72 505.520 moveto (system with the byte buffer if it is) 0.174 WS 2.673 MX (full or if the application has requested an immediate transfer.) 0.173 WS 2.500 MX ( The data is created,) 0.173 WS 72 517.520 moveto (copied once by Xlib, and copied once again by the operating) 0.849 WS 3.350 MX (system \050or by the network device, depending on the) 0.850 WS 72 529.520 moveto (implementation\051. Given that Xlib packs several application calls into one) 0.294 WS 2.793 MX (buffer, to minimize the number of times it) 0.293 WS 72 541.520 moveto (makes \252expensive\272 calls on the operating system, this is the most efficient operational model that is possible.) show 72 565.520 moveto (To achieve this model, we must guarantee that the application's data) 2.427 WS 4.928 MX (representations match the X protocol's) 2.428 WS 72 577.520 moveto (representations at the physical level. If we cannot guarantee this, Xlib not only) 1.053 WS 3.552 MX (must copy the data but also must) 1.052 WS 72 589.520 moveto (spend time converting the physical form of the data.) show 72 613.520 moveto (Two things are done in the attempt to achieve this model: \0501\051 Xlib gives all types a length clause and/or a record) 0.900 WS 72 625.520 moveto (representation clause; \0502\051 all data copy/conversion operations are handled by generic instantiations.) show 72 649.520 moveto (The length and representation clauses provide the required physical) 0.495 WS 2.994 MX (equivalence. The generic instantiations provide) 0.494 WS 72 661.520 moveto (a strong modular interface. If the length and representation clauses are not available \050or if a compiler) 0.573 WS 3.074 MX (has bugs and) 0.574 WS 72 673.520 moveto (they don't work properly\051, it is a simple, but tedious, task to replace each of the generic) 1.857 WS 4.356 MX (instantiations with a) 1.856 WS 72 685.520 moveto (handwritten conversion routine that is tailored for each conversion task.) show 72 756 moveto (10) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 11 11 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 371.630 MX (Compiler Dependencies) show 72 72 moveto (All input/output conversions are done by instantiations) 1.921 WS 4.422 MX (of the generics provided by the) 1.922 WS 10 /Times-Bold SelectFont ( Xlbmp_Generic_Con-) 1.922 WS 72 84 moveto (verters) show 10 /Times-Roman SelectFont ( module. See Appendix A for a list of the modules affected if this module should need to be replaced.) show 72 108 moveto (An example of) 0.605 WS 3.104 MX (this kind of conversion routine is the following procedure, which converts an) 0.604 WS 10 /Times-Bold SelectFont ( S_Long) 0.604 WS 10 /Times-Roman SelectFont ( \050signed long) 0.604 WS 72 120 moveto (integer\051 into a 4-byte array suitable for transmission to an X server:) show 108 144 moveto 9 /Courier SelectFont (procedure Cvt \050Value : S_Long;) show 108 155 moveto ( Stream : out Byte_Array\051 is) show 108 166 moveto ( -- Assuming we have SHIFT and AND operations on numeric values.) show 108 177 moveto ( -- Xlib *does* provide these operations.) show 108 188 moveto (begin) show 108 199 moveto ( Stream \0501\051 := Byte \050Value and 16#FF#\051;) show 108 210 moveto ( Stream \0502\051 := Byte \050Shift \050Value, -8\051 and 16#FF#\051;) show 108 221 moveto ( Stream \0503\051 := Byte \050Shift \050Value, -16\051 and 16#FF#\051;) show 108 232 moveto ( Stream \0504\051 := Byte \050Shift \050Value, -24\051 and 16#FF#\051;) show 108 243 moveto (end Cvt;) show 72 267 moveto 10 /Times-Roman SelectFont (Xlib's length and representation clauses are scattered) 1.323 WS 3.824 MX (throughout the various) 1.324 WS 10 /Times-Bold SelectFont ( Xlbt_@) 1.324 WS 10 /Times-Roman SelectFont ( packages. They are placed) 1.324 WS 72 279 moveto (wherever the types they reference are declared. \050This is an Ada language requirement.\051 The length clauses) 0.496 WS 2.995 MX (are vital) 0.495 WS 72 291 moveto (for achieving the proper physical) 0.942 WS 3.443 MX (layout and the representation clauses may or may not be vital depending on the) 0.943 WS 72 303 moveto (compiler being used.) show 72 327 moveto (Some compilers do not implement representation clauses. As a result, Xlib has a parameter that allows all) 2.830 WS 72 339 moveto (representation clauses to be disabled. However,) 0.408 WS 2.909 MX (a compiler that does not implement representation clauses may still) 0.409 WS 72 351 moveto (be usable with a minimum of pain. Some compilers will always) 0.781 WS 3.280 MX (lay out a record using the same field order as the) 0.780 WS 72 363 moveto (corresponding Ada type) 0.051 WS 2.552 MX (declaration. The Rational R1000 native compiler does this. This mode of operation will also) 0.052 WS 72 375 moveto (give Xlib records the correct layout, provided that length clauses) 0.443 WS 10 /Times-Italic SelectFont ( are) 0.443 WS 10 /Times-Roman SelectFont ( implemented. If a compiler operates this) 0.443 WS 2.942 MX (way,) show 72 387 moveto (explicit conversion routines may not be necessary. If your compiler's Appendix) 1.389 WS 3.890 MX (F does not directly address this) 1.390 WS 72 399 moveto (issue, some experimentation may provide the answers.) show 72 423 moveto (Similarly, some compilers do not implement) 1.666 WS 4.165 MX (length clauses. Xlib has another parameter that disables all length) 1.665 WS 72 435 moveto (clauses. In this case, it is certain that the porting effort will include writing explicit conversion) 1.094 WS 3.595 MX (routines. Without) 1.095 WS 72 447 moveto (length clauses, it is extremely unlikely) 0.146 WS 2.645 MX (that a compiler would pick just the right representation for all Xlib types. For) 0.145 WS 72 459 moveto (instance, Xlib has several enumeration types that have only a few literals but that must) 2.932 WS 5.433 MX (use 16- or 32-bit) 2.933 WS 72 471 moveto (representations.) show 72 495 moveto (There is one final subject in the realm of data representation.) 0.725 WS 3.224 MX (All of Xlib's arrays are \252packed.\272 Bits occupy 1 bit,) 0.724 WS 72 507 moveto (bytes occupy 8 bits, half words occupy 16 bits, and so) 0.068 WS 2.569 MX (on. If any of these assumptions is violated, the simple-minded) 0.069 WS 72 519 moveto (conversions applied to/from array types will malfunction. In that) 0.110 WS 2.609 MX (case, it will be necessary to create and install hand-) 0.109 WS 72 531 moveto (written conversion routines for those types and for any composite types) 1.259 WS 3.760 MX (that may reference them. Xlib also uses) 1.260 WS 72 543 moveto (pragma Pack if it is available, but that does not always produce the required array layout.) show 72 568.760 moveto 12 /Times-Bold SelectFont (3.3. Conversions) show 72 592.520 moveto 10 /Times-Roman SelectFont (The main purpose of Xlib is to be the sole means) 0.041 WS 2.540 MX (of communication between the X application and an X server. Xlib) 0.040 WS 72 604.520 moveto (accepts data from the application or the server, converts it in) 0.181 WS 2.682 MX (some trivial or nontrivial manner, and then passes it on) 0.182 WS 72 616.520 moveto (to the other party.) show 72 640.520 moveto (The purpose of the conversion is twofold. First, Ada) 0.249 WS 2.748 MX (is a strongly typed language. The types used by the application) 0.248 WS 72 652.520 moveto (will differ from the types) 1.061 WS 3.562 MX (used by server communications. The application will be working with the various Xlib) 1.062 WS 72 664.520 moveto (data types, and the operating-system) 3.255 WS 5.754 MX (interfaces used for communication typically will be working with an) 3.254 WS 72 676.520 moveto (array-of-byte data type. Second, the physical representations for the two sets of data types may) 0.527 WS 3.028 MX (be different. In this) 0.528 WS 72 688.520 moveto (case, Xlib must perform actual work during the conversion process.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (11) show EndPage %%Page: 12 12 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto (On the one hand, if we only care about satisfying Ada, then it is sufficient) 0.073 WS 2.572 MX (for Xlib to use any trick that makes things) 0.072 WS 72 84 moveto (work\320) show 10 /Times-Bold SelectFont (Unchecked_Conversion) show 10 /Times-Roman SelectFont ( perhaps. Such a conversion would not) 2.917 WS 5.418 MX (necessarily involve any real work at) 2.918 WS 72 96 moveto (runtime. However, to satisfy a change of physical representation, we are) 0.201 WS 2.700 MX (forced to resort to actual coded procedures.) 0.200 WS 72 108 moveto (See the previous section on data representation for a discussion of the representation problem.) show 72 132 moveto (If we assume) 0.901 WS 3.402 MX (that we can coerce the Ada compiler into representing the Xlib data types in a manner that we find) 0.902 WS 72 144 moveto (convenient, then the conversion problem becomes one of simply copying) 0.394 WS 2.893 MX (data bytes from one place to another. The) 0.393 WS 72 156 moveto (data is received from one party and then copied into the appropriate location for the use by the other party.) show 72 180 moveto (Ada has a facility that addresses this) 0.793 WS 3.294 MX (problem. It is) 0.794 WS 10 /Times-Bold SelectFont ( Unchecked_Conversion) 0.794 WS 10 /Times-Roman SelectFont (. Unfortunately, various problems can) 0.794 WS 72 192 moveto (crop up with this:) show 72 216 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Unchecked_Conversion) show 10 /Times-Roman SelectFont ( may not exist. It is an) 2.883 WS 5.382 MX (implementation-dependent Ada facility, and an imple-) 2.882 WS 96 228 moveto (mentation is) 1.152 WS 3.653 MX (perfectly free to completely disregard it. This means that porting Xlib to such a compiler will) 1.153 WS 96 240 moveto (involve implementing some form of unchecked conversion between data types. Fortunately, this is easy.) show 72 258 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Unchecked_Conversion) show 10 /Times-Roman SelectFont ( may have arbitrary restrictions placed) 0.418 WS 2.917 MX (on it. A common restriction is that it may not) 0.417 WS 96 270 moveto (be used on any data item whose base type is unconstrained. Another) 0.448 WS 2.949 MX (is that conversion to or from array types) 0.449 WS 96 282 moveto (is not allowed. These restrictions can make it necessary for a port to implement its own facility.) show 72 300 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Unchecked_Conversion) show 10 /Times-Roman SelectFont ( may not be very) 0.293 WS 2.792 MX (efficient. There may be undesirable runtime overhead involved. An) 0.292 WS 96 312 moveto (implementation could be performing dynamic checks at runtime that check for conversions of) 1.382 WS 3.883 MX (task values,) 1.383 WS 96 324 moveto (conversions of pointers, conversions of types larger than some maximum size, and so on.) show 72 342 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Unchecked_Conversion) show 10 /Times-Roman SelectFont ( may not be) 0.828 WS 3.327 MX (as efficient as necessary for proper performance.) 0.827 WS 10 /Times-Bold SelectFont ( Unchecked_Conver-) 0.827 WS 96 354 moveto (sion) show 10 /Times-Roman SelectFont ( is an Ada function. This means that it) 0.373 WS 2.874 MX (will return its results on the stack \050or in the heap or anywhere else) 0.374 WS 96 366 moveto (that an implementation may want to use\051.) 0.763 WS 3.262 MX (Since many of our conversions will be returning an array-of- byte) 0.762 WS 96 378 moveto (value, we can expect these conversions to involve considerable overhead in some implementations.) show 72 402 moveto (Xlib is prepared to utilize) 1.296 WS 10 /Times-Bold SelectFont ( Unchecked_Conversion) 1.296 WS 10 /Times-Roman SelectFont ( for all of its data conversions. However, use of) 1.297 WS 10 /Times-Bold SelectFont ( Unchecked-) 1.297 WS 72 414 moveto (_Conversion) show 10 /Times-Roman SelectFont ( depends on \0501\051 suitable physical representation for data, \0502\051 existence) 0.189 WS 2.688 MX (of the function, \0503\051 performance) 0.188 WS 72 426 moveto (of the function, and \0504\051 restrictions placed on the function by the implementation.) show 72 450 moveto (If) show 10 /Times-Bold SelectFont ( Unchecked_Conversion) 1.056 WS 10 /Times-Roman SelectFont ( should prove unsuitable for) 1.056 WS 3.557 MX (some or all conversions, it may be replaced piecemeal or) 1.057 WS 72 462 moveto (completely, at the option of the programmer. Xlib is also prepared to utilize an assembly-language routine that) 1.615 WS 72 474 moveto (simply copies bytes from one memory address to another.) show 72 498 moveto (Xlib's conversion facilities are all in the form of generics declared by Xlib itself. This allows us to hide) 2.091 WS 4.592 MX (the) show 72 510 moveto (mechanism actually used for some target while providing a highly stable and portable interface.) show 72 534 moveto (When targeted for the R1000 native compiler, Xlib uses) 0.775 WS 10 /Times-Bold SelectFont ( Unchecked_Conversion) 0.775 WS 10 /Times-Roman SelectFont (. When targeted for the TeleSoft) 0.775 WS 72 546 moveto (TeleGen2 compiler \050UNIX 68K version\051,) 4.617 WS 7.118 MX (Xlib uses a machine-coded byte-copy routine. Both of these) 4.618 WS 72 558 moveto (implementations are provided, as sample solutions, as part of the normal Xlib sources.) show 72 583.760 moveto 12 /Times-Bold SelectFont (3.4. Interfaces) show 72 607.520 moveto 10 /Times-Roman SelectFont (Xlib's primary purpose is to be a) 0.434 WS 2.933 MX (communication channel between an X application and an X server. Typically this) 0.433 WS 72 619.520 moveto (involves calls on the operating system, which implies that Xlib will be able to perform these calls. This) 1.402 WS 3.903 MX (in turn) 1.403 WS 72 631.520 moveto (implies either pragma Interface or an operating-system support library provided by the target Ada environment.) show 72 655.520 moveto (If the target Ada environment supplies a) 1.495 WS 3.994 MX (network input/output interface, Xlib can be coded directly against that) 1.494 WS 72 667.520 moveto (interface. However, this will) 0.046 WS 2.547 MX (be rare. Far more likely is the case where Xlib must interface to some external non-Ada) 0.047 WS 72 679.520 moveto (library. In this case pragma Interface must be one of the implementation-dependent Ada features that has been) 1.670 WS 72 691.520 moveto (implemented by the target compiler.) show 72 756 moveto (12) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 13 13 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 371.630 MX (Compiler Dependencies) show 72 72 moveto (In addition to the network input/output, Xlib has two other facilities that will often require running against) 1.257 WS 3.758 MX (code) show 72 84 moveto (written in some non-Ada language.) show 72 108 moveto (Xlib supports an implementation of procedure variables. Ada does not directly support this.) 0.897 WS 8 /Times-Roman SelectFont 0 -3 rmoveto (3) show 0 3 rmoveto 10 /Times-Roman SelectFont ( ) show 3.397 MX (There are) 0.897 WS 3.396 MX (two basic) 0.896 WS 72 120 moveto (ways to implement this facility on the target. First, if) 0.766 WS 3.267 MX (the compiler implements machine-code insertions, it may be) 0.767 WS 72 132 moveto (implementable using that implementation-dependent Ada facility. Second, it can be written) 0.611 WS 3.110 MX (in C or assembly code,) 0.610 WS 72 144 moveto (provided that the compiler can pragma Interface, or otherwise interface, to the code.) show 72 168 moveto (Xlib also) 0.342 WS 2.843 MX (supports logical operations for all of its numeric types. This can also be implemented using machine-code) 0.343 WS 72 180 moveto (insertions, C, or assembler.) show 72 692 moveto (____________________________________________) show 72 710 moveto 8 /Times-Roman SelectFont 0 -3 rmoveto (3) show 0 3 rmoveto ( One of the Ada 9X action items is the inclusion of procedure variables in Ada. If this is done in Ada 9X, this Xlib facility may) show 72 720 moveto ( eventually vanish.) show 72 756 moveto 10 /Times-Roman SelectFont (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (13) show EndPage %%Page: 14 14 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 756 moveto (14) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 15 15 BeginPage 792 false PositionPage 72 76 moveto 14 /Times-Bold SelectFont (4. Machine/OS Dependencies) show 72 99.760 moveto 10 /Times-Roman SelectFont (Xlib has very few machine or operating-system dependencies. The two categories will be covered separately.) show 72 125.520 moveto 12 /Times-Bold SelectFont (4.1. Machine Dependencies) show 72 149.280 moveto 10 /Times-Roman SelectFont (There are two classes of machine dependencies. First, there are those capabilities that must be) 0.689 WS 3.188 MX (available or porting) 0.688 WS 72 161.280 moveto (Xlib is not possible. Second, there are those capabilities) 2.123 WS 4.624 MX (that should be available or porting Xlib will require) 2.124 WS 72 173.280 moveto (significant additional effort.) show 72 197.280 moveto (The vital machine dependencies are the following. The target machine must be able to:) show 72 221.280 moveto (\267 ) show 18 MX (Perform 8-bit input/output. Network connections to the X server are based on an 8-bit byte-stream abstrac-) 1.124 WS 96 233.280 moveto (tion. If Ethernet is available, this is certainly possible.) show 72 251.280 moveto (\267 ) show 18 MX (Call a procedure using a pointer for an address.) 1.615 WS 4.116 MX (Procedure variables must be possible. If a C compiler is) 1.616 WS 96 263.280 moveto (available, this is certainly possible. C has this same requirement.) show 72 281.280 moveto (\267 ) show 18 MX (Copy data from one machine location to another without regard for the \252type\272 of the data.) 5.642 WS 96 293.280 moveto 10 /Times-Bold SelectFont (Unchecked_Conversion) show 10 /Times-Roman SelectFont ( must be possible using the hardware; only typed/tagged machine architectures would) 0.040 WS 96 305.280 moveto (be a problem here. Again, if a C compiler is available, this is not a problem.) show 72 329.280 moveto (The desirable, but not vital, machine dependencies are the following. The target machine should be able to:) show 72 353.280 moveto (\267 ) show 18 MX (Operate on packed bit arrays, using) 2.056 WS 4.555 MX (shift and mask operations if necessary. If packed bit arrays are not) 2.055 WS 96 365.280 moveto (possible, a considerable amount of handwritten) 0.160 WS 2.661 MX (type-conversion code will be required. See Section 3.2 on data) 0.161 WS 96 377.280 moveto (representation.) show 72 395.280 moveto (\267 ) show 18 MX (Store 32-, 16-, and 8-bit 2's complement numeric values. This also affects type conversions.) show 72 413.280 moveto (\267 ) show 18 MX (Perform 32-, 16-, and 8-bit logical and arithmetic operations. These are optional to) 0.795 WS 3.294 MX (the extent that wider but) 0.794 WS 96 425.280 moveto (equivalent operations can be used in their place.) show 72 451.040 moveto 12 /Times-Bold SelectFont (4.2. Operating-System Dependencies) show 72 474.800 moveto 10 /Times-Roman SelectFont (All of Xlib's operating-system dependencies) 1.130 WS 3.631 MX (revolve around input/output. There are two types. Simple file input/) 1.131 WS 72 486.800 moveto (output \050such) 0.508 WS 3.007 MX (as for bitmaps\051 is performed using Ada's) 0.507 WS 10 /Times-Bold SelectFont ( Text_Io) 0.507 WS 10 /Times-Roman SelectFont ( package. Communication with the X server is done) 0.507 WS 72 498.800 moveto (through the operating system or) 0.455 WS 2.956 MX (some library that implements the appropriate communication facility. For instance,) 0.456 WS 72 510.800 moveto (the) show 10 /Times-Bold SelectFont ( Transport) show 10 /Times-Roman SelectFont ( library is used on the R1000, whereas Berkeley-style sockets are used under SunOS.) show 72 534.800 moveto (The basic requirements for communication with the X server are the following. We must be able to:) show 72 558.800 moveto (\267 ) show 18 MX (Open a stream connection with the X server) show 72 576.800 moveto (\267 ) show 18 MX (Close a stream connection) show 72 594.800 moveto (\267 ) show 18 MX (Read from a stream connection) show 72 612.800 moveto (\267 ) show 18 MX (Write to a stream connection) show 72 636.800 moveto (The exact implementation of the stream connection is not important. The library and the server must be able to send) 0.220 WS 72 648.800 moveto (and receive a stream of values that are at least 8-bits wide. If a communications medium were to send these 8-bit) 0.863 WS 72 660.800 moveto (values as a sequence of 32-bit words, with one value per word, that medium would be inefficient) 1.344 WS 3.843 MX (but otherwise) 1.343 WS 72 672.800 moveto (acceptable.) show 72 696.800 moveto (The stream connection is an abstraction, provided by Xlib,) 1.337 WS 3.838 MX (that should be reimplemented in whatever manner is) 1.338 WS 72 708.800 moveto (convenient. The abstraction has these pieces:) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (15) show EndPage %%Page: 16 16 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto 10 /Times-Bold SelectFont 18 MX (Xlbmt_Network_Types) show 72 84 moveto 10 /Times-Roman SelectFont 96 MX (Declares \050or renames\051 most of the types that are required for the manipulation of stream data) 0.084 WS 168 96 moveto (and connections.) show 72 114 moveto 10 /Times-Bold SelectFont 18 MX (Xlbmt_Transport_Defs) show 72 126 moveto 10 /Times-Roman SelectFont 96 MX (Declares \050or renames\051 all of the rest of the necessary types.) show 72 144 moveto 10 /Times-Bold SelectFont 18 MX (Xlbmp_Internal) show 72 156 moveto 10 /Times-Roman SelectFont 96 MX (Implements the opening and closing of stream connections.) show 72 174 moveto 10 /Times-Bold SelectFont 18 MX (Xlbmp_Network_Interface) show 72 186 moveto 10 /Times-Roman SelectFont 96 MX (Implements the reading and writing of stream connections.) show 72 210 moveto (These are the only input/output modules that) 2.614 WS 10 /Times-Italic SelectFont ( must) 2.614 WS 10 /Times-Roman SelectFont ( be modified during an Xlib port. If desired,) 2.614 WS 5.115 MX (perhaps for) 2.615 WS 72 222 moveto (performance reasons, it is possible to modify) 0.967 WS 3.466 MX (the clients of these interfaces. All of the clients are in the machine-) 0.966 WS 72 234 moveto (dependent portion of the library. The application) 1.095 WS 3.596 MX (and extension interfaces for the library would not change. Only) 1.096 WS 72 246 moveto (applications that explicitly attempted to \252touch\272 the) 0.245 WS 2.744 MX (stream connection would be affected. This is \252bad\272 behavior on) 0.244 WS 72 258 moveto (the part of an extension, and grossly bad behavior on the) 0.292 WS 2.793 MX (part of an application, so the ramifications that result from) 0.293 WS 72 270 moveto (widening the circle of change are very small. However, we recommend that the first cut) 1.468 WS 3.967 MX (at porting Xlib should) 1.467 WS 72 282 moveto (change only these packages. The stream abstraction used by the library is quite simple but) 1.327 WS 3.828 MX (it is also sufficiently) 1.328 WS 72 294 moveto (efficient to suit most needs.) show 72 756 moveto (16) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 17 17 BeginPage 792 false PositionPage 72 76 moveto 14 /Times-Bold SelectFont (5. Library Parameterization) show 72 99.760 moveto 10 /Times-Roman SelectFont (Xlib is intended to be very portable.) 0.385 WS 2.884 MX (Unfortunately, Ada is not as portable a language as it might be. It suffers from) 0.384 WS 72 111.760 moveto (many of the same deficiencies that affect other languages. Here are some examples of problems.) show 72 135.760 moveto (\267 ) show 18 MX (The) show 10 /Times-Bold SelectFont ( Integer) 0.356 WS 10 /Times-Roman SelectFont ( data type is not portable. The LRM makes the) 0.356 WS 2.857 MX (size and numeric range subject to the whim of the) 0.357 WS 96 147.760 moveto (implementor. A program that uses the) 0.076 WS 10 /Times-Bold SelectFont ( Integer) 0.075 WS 10 /Times-Roman SelectFont (,) show 10 /Times-Bold SelectFont ( Natural) 0.075 WS 10 /Times-Roman SelectFont (, or) 0.075 WS 10 /Times-Bold SelectFont ( Positive) 0.075 WS 10 /Times-Roman SelectFont ( data types is very likely to be nonportable) 0.075 WS 96 159.760 moveto (for that reason.) show 72 177.760 moveto (\267 ) show 18 MX (The) show 10 /Times-Bold SelectFont ( String) 2.231 WS 10 /Times-Roman SelectFont ( data type is not portable. The index type for) 2.231 WS 10 /Times-Bold SelectFont ( String) 2.231 WS 10 /Times-Roman SelectFont ( is) 2.231 WS 10 /Times-Bold SelectFont ( Positive) 2.231 WS 10 /Times-Roman SelectFont (, which) 2.231 WS 4.732 MX (is nonportable. The) 2.232 WS 96 189.760 moveto (maximum length) 1.838 WS 4.337 MX (of a string could be anything, including something so small as to be useless. Also, the) 1.837 WS 96 201.760 moveto (element type of) show 10 /Times-Bold SelectFont ( String) show 10 /Times-Roman SelectFont ( is) show 10 /Times-Bold SelectFont ( Character) show 10 /Times-Roman SelectFont (.) show 10 /Times-Bold SelectFont ( Character) show 10 /Times-Roman SelectFont ( is 7-bit ASCII characters. Most systems use 8-bit characters.) show 72 219.760 moveto (\267 ) show 18 MX (Given a 32-bit processor architecture using 2's complement arithmetic, it may or) 0.042 WS 2.543 MX (may not be possible to utilize) 0.043 WS 96 231.760 moveto (32-bit 2's complement numbers. This is part of the) 1.922 WS 10 /Times-Bold SelectFont ( Integer) 1.922 WS 10 /Times-Roman SelectFont ( problem. \0501\051 The Ada) 1.922 WS 4.421 MX (compiler is under no) 1.921 WS 96 243.760 moveto (restriction to give the programmer access to a machine data type. \0502\051 The) 1.848 WS 4.349 MX (Ada compiler is free to place) 1.849 WS 96 255.760 moveto (subtype range constraints on the) 0.485 WS 10 /Times-Bold SelectFont ( Integer) 0.485 WS 10 /Times-Roman SelectFont ( type so that its range is symmetrical) 0.485 WS 2.984 MX (even though the hardware does) 0.484 WS 96 267.760 moveto (not follow that convention.) show 72 285.760 moveto (\267 ) show 18 MX (The utility Ada's record representation clauses is implementation-dependent. This makes it) 1.934 WS 4.435 MX (impossible to) 1.935 WS 96 297.760 moveto (guarantee record layouts from machine to machine or even from compiler to compiler.) show 72 315.760 moveto (\267 ) show 18 MX (The utility of Ada's length clauses is also implementation-dependent.) 0.864 WS 3.363 MX (This makes it impossible to guarantee) 0.863 WS 96 327.760 moveto (the sizes of types from machine to machine or even from compiler to compiler.) show 72 345.760 moveto (\267 ) show 18 MX (Ada's pragma Pack is implementation-dependent. Array packing is nonportable.) show 72 363.760 moveto (\267 ) show 18 MX (Ada's pragma Inline is implementation-dependent. Performance is nonportable.) show 72 381.760 moveto (\267 ) show 18 MX (Ada has no language-defined or language-mandated type for array of bits.) 0.645 WS 3.146 MX (This can greatly increase program) 0.646 WS 96 393.760 moveto (storage requirements when compact storage of Boolean values is critical.) show 72 417.760 moveto (To overcome these problems, we simply take the same sort of approach that can be taken with most languages:) show 72 441.760 moveto (\267 ) show 18 MX (We define all of our own numeric types and we never use Ada's built-in numeric types unless this is forced by) 0.093 WS 96 453.760 moveto (the language.) show 72 471.760 moveto (\267 ) show 18 MX (We use pragma Inline, pragma) 0.378 WS 2.879 MX (Pack, record representation clauses, and length clauses in an attempt to coerce) 0.379 WS 96 483.760 moveto (a compiler into laying out our data types precisely. However, we also parameterize the code so that the) 0.318 WS 2.817 MX (use of) 0.317 WS 96 495.760 moveto (these constructs is optional.) show 72 513.760 moveto (\267 ) show 18 MX (We also organize the code so that the failure of) 0.328 WS 2.829 MX (any or all of these mechanisms can be repaired. We provide a) 0.329 WS 96 525.760 moveto (structure that will contain the damage \050limit the extra work involved\051 when one or more vital) 0.876 WS 3.375 MX (mechanism is) 0.875 WS 96 537.760 moveto (missing or fails to operate properly.) show 72 561.760 moveto (This chapter is mainly concerned with Xlib's parameterization mechanism. Ada has so many) 0.002 WS 2.503 MX (optional target-depend-) 0.003 WS 72 573.760 moveto (ent parts that writing interesting portable code without some method for \252escape from Ada\272 is very difficult.) show 72 597.760 moveto (Xlib has been parameterized by the use of structured comments. The structured comments are done) 0.743 WS 3.242 MX (in the style of) 0.742 WS 72 609.760 moveto (Ada) show 10 /Times-Italic SelectFont ( if) 0.886 WS 10 /Times-Roman SelectFont ( statements. If some condition is true,) 0.886 WS 3.387 MX (we include a block of code; if the condition is false, we exclude that) 0.887 WS 72 621.760 moveto (block of code. Below is a sample code fragment. In this example are three) 1.084 WS 3.583 MX (Ada language variations that must be) 1.083 WS 72 633.760 moveto (addressed.) show 72 657.760 moveto (We are attempting to create a Boolean bit vector where the physical placement of the bits is vital. Thus, we must) 0.876 WS 72 669.760 moveto (declare our index enumeration type in one of two ways. In) 0.100 WS 2.599 MX (one way, the) 0.099 WS 10 /Times-Bold SelectFont ( Do_Red) 0.099 WS 10 /Times-Roman SelectFont ( literal will have a representation of) 0.099 WS 72 681.760 moveto (0; in the other way,) 2.054 WS 10 /Times-Bold SelectFont ( Do_Red) 2.054 WS 10 /Times-Roman SelectFont ( will have a representation of) 2.054 WS 4.555 MX (7. The desired representation depends on the Ada) 2.055 WS 72 693.760 moveto (compiler's choice for bit) 1.392 WS 3.891 MX (number 0 within the array. Unfortunately, there are two possible choices, and the Ada) 1.391 WS 72 705.760 moveto (LRM mandates neither choice. Xlib must be prepared to swing in either direction and the) 4.538 WS 10 /Courier SelectFont 7.039 MX (--/ if) 4.539 WS 72 717.760 moveto (Bit0_Sign_Bit then) show 10 /Times-Roman SelectFont ( parameterization provides this flexibility.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (17) show EndPage %%Page: 18 18 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto (In addition, the length clause ) 0.888 WS 10 /Courier SelectFont (for X_Color_Flags'Size use 8;) 0.888 WS 10 /Times-Roman SelectFont ( is) 0.888 WS 3.387 MX (one of Ada's implementation-depend-) 0.887 WS 72 84 moveto (ent features. We must be prepared to do without it. The same goes) 0.737 WS 3.238 MX (for our first fallback position, ) 0.738 WS 10 /Courier SelectFont (pragma Pack) 0.738 WS 72 96 moveto (\050X_Color_Flags\051) show 10 /Times-Roman SelectFont (, which is also implementation-dependent. If both of) 0.832 WS 3.331 MX (these mechanisms fail, it will probably) 0.831 WS 72 108 moveto (be up to the porting team to compensate by hand within the client code.) show 108 132 moveto 9 /Courier SelectFont (--/ if Bit0_Sign_Bit then) show 108 154 moveto ( type X_Color_Flags_Index is) show 108 165 moveto ( \050Xcfi0, Xcfi1, Xcfi2, Xcfi3, Xcfi4, -- Unused) show 108 176 moveto ( Do_Blue, -- Use Blue) show 108 187 moveto ( Do_Green, -- Use Green) show 108 198 moveto ( Do_Red\051; -- Use Red -- Low-order bit) show 108 220 moveto (--/ else -- not Bit0_Sign_Bit then) show 108 231 moveto (--//) show 108 242 moveto (--// type X_Color_Flags_Index is) show 108 253 moveto (--// \050Do_Red, -- Use Red -- Low-order bit) show 108 264 moveto (--// Do_Green, -- Use Green) show 108 275 moveto (--// Do_Blue, -- Use Blue) show 108 286 moveto (--// Xcfi4, Xcfi3, Xcfi2, Xcfi1, Xcfi0\051; -- Unused) show 108 297 moveto (--//) show 108 308 moveto (--/ end if;) show 108 330 moveto ( type X_Color_Flags is array \050X_Color_Flags_Index\051 of Boolean;) show 108 352 moveto (--/ if Length_Clauses then) show 108 363 moveto ( for X_Color_Flags'Size use 8;) show 108 374 moveto (--/ elsif Pack then) show 108 385 moveto (--// pragma Pack \050X_Color_Flags\051;) show 108 396 moveto (--/ end if;) show 72 420 moveto 10 /Times-Roman SelectFont (Details about the operation of the parameterization program can be found in Appendix B.) show 72 445.760 moveto 12 /Times-Bold SelectFont (5.1. Xlib's Parameters) show 72 469.520 moveto 10 /Times-Roman SelectFont (Xlib is presently) 0.626 WS 3.127 MX (parameterized to meet various conditions and additional parameters will be added as needed. The) 0.627 WS 72 481.520 moveto (parameters are defined in the Ada parameterization program in the) 0.610 WS 10 /Times-Bold SelectFont ( Symbol_Table.Define_Predefineds) 0.610 WS 10 /Times-Roman SelectFont ( procedure.) 0.610 WS 72 493.520 moveto (\050This is the) 0.184 WS 10 /Times-Bold SelectFont ( DefPredef.prb) 0.184 WS 10 /Times-Roman SelectFont ( file on UNIX.\051 The parameters listed here appear in the same order as they appear in the) 0.184 WS 72 505.520 moveto 10 /Times-Bold SelectFont (Define_Predefineds) show 10 /Times-Roman SelectFont ( procedure. The current set of conditions are:) show 72 529.520 moveto 18 MX (Debug) show 51.340 MX (Xlib has various pieces of sanity-checking code that can be very useful when) 0.863 WS 3.362 MX (debugging a) 0.862 WS 168 541.520 moveto (problem with the library. It is especially useful during the port.) show 72 565.520 moveto 18 MX (Cdf_Hpux) show 35.780 MX (True when the target compiler is Rational's M68020/UNIX Cross-Development Facility.) show 72 583.520 moveto 18 MX (R1000) show 51.330 MX (True when the target machine/OS is the Rational R1000.) show 72 601.520 moveto 18 MX (TeleGen2) show 38.570 MX (True when the target compiler is TeleSoft's TeleGen2 compiler.) show 72 619.520 moveto 18 MX (Unix) show 58 MX (True when the target operating system is some form of UNIX.) show 72 637.520 moveto 18 MX (SysV) show 56.330 MX (True when the target operating system is System V.) show 72 655.520 moveto 18 MX (R1000_Xlib_Only) show 3.550 MX (True on Rational R1000s if the Xlib) 0.005 WS 2.506 MX (is being used without the Xt Intrinsics layer of software.) 0.006 WS 168 667.520 moveto (The Xt Intrinsics require some extra interfaces that do not need to be present if the Xt) 0.433 WS 2.932 MX (layer) show 168 679.520 moveto (is not being used.) show 72 756 moveto (18) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 19 19 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 367.750 MX (Library Parameterization) show 72 72 moveto 18 MX (Multitask_Locking) show 72 84 moveto 96 MX (True if the) 0.283 WS 2.784 MX (library should automatically interlock in a multitasking environment. If Xlib will) 0.284 WS 168 96 moveto (never be used by a) 1.488 WS 3.987 MX (multitasking Ada program, this can be set to False. If it is True, the) 1.487 WS 168 108 moveto (library uses one task per X server connection to provide protection for critical regions.) show 72 126 moveto 18 MX (Enable_Deallocation) show 72 138 moveto 96 MX (True if pragma Enable_Deallocation) 1.932 WS 4.433 MX (is required for all access types before) 1.933 WS 10 /Times-Bold SelectFont ( Unchecked-) 1.933 WS 168 150 moveto (_Deallocation) show 10 /Times-Roman SelectFont ( will function. This is True only for the R1000 target.) show 72 168 moveto 18 MX (Inline) show 54.670 MX (True if pragma Inline actually works with this compiler.) show 72 186 moveto 18 MX (Length_Clauses) show 13.560 MX (True if this compiler implements length clauses \050Ada LRM, Section 13.2\051.) show 72 204 moveto 18 MX (Pack) show 58.560 MX (True if pragma Pack is implemented by the compiler.) 1.230 WS 2.500 MX ( Pragma Pack is used as a fallback) 1.230 WS 168 216 moveto (position if length clauses do not work for certain types, such as arrays of Booleans.) show 72 234 moveto 18 MX (Record_Rep_Clauses) show 72 246 moveto 96 MX (True if this compiler implements record representation clauses \050Ada LRM, Section 13.4\051.) show 72 264 moveto 18 MX (Bit0_Sign_Bit) show 20.200 MX (True if \050as on the R1000\051) 2.182 WS 4.683 MX (bit 0 of ) 2.183 WS 10 /Courier SelectFont (type Ary is \050array range 0..31\051 of) 2.183 WS 168 276 moveto (Boolean;) show 10 /Times-Roman SelectFont ( is the high-order \050sign\051 bit of the) 0.632 WS 3.131 MX (correspondingly sized numeric type.) 0.631 WS 2.500 MX ( False if) 0.631 WS 168 288 moveto (\050as on many machines\051 bit 0 of an array of) 0.726 WS 3.227 MX (Booleans is the low-order \050even/odd\051 bit of the) 0.727 WS 168 300 moveto (correspondingly sized numeric type.) show 168 318 moveto (This flag must be correct or none of the bit flags sent/received in) 0.789 WS 3.288 MX (the X protocol messages) 0.788 WS 168 330 moveto (will be correct.) 1.297 WS 3.798 MX (This is a pervasive problem. It is unfortunately easy to write nonportable) 1.298 WS 168 342 moveto (code if care is not taken.) 0.250 WS 2.749 MX (The Bit0_Sign_Bit parameter exists so that code can be parameter-) 0.249 WS 168 354 moveto (ized to work with any machine.) show 72 372 moveto 18 MX (Byte0_Sign_Byte) show 6.880 MX (True if \050as on the R1000\051) 2.138 WS 4.639 MX (byte 0 of ) 2.139 WS 10 /Courier SelectFont (type Ary is \050array range 0..3\051 of) 2.139 WS 168 384 moveto (byte;) show 10 /Times-Roman SelectFont ( is the) 0.565 WS 3.064 MX (high-order \050most significant\051 byte of the correspondingly sized numeric type.) 0.564 WS 168 396 moveto (False if \050as on some machines\051 byte 0 of an array of bytes is the) 0.171 WS 2.672 MX (low-order \050least significant\051) 0.172 WS 168 408 moveto (byte of the correspondingly sized numeric type.) show 72 426 moveto 18 MX (Positive_Is_Large) show 72 438 moveto 96 MX (If Positive'Size = 32 or is \252large,\272 some of the code that is) 0.543 WS 3.042 MX (in the library to handle the case) 0.542 WS 168 450 moveto (where Positive'Size = 16 or is \252small\272 may generate compiler warnings. In particular,) 0.142 WS 2.643 MX (we do) 0.143 WS 168 462 moveto (things such as:) show 204 486 moveto 9 /Courier SelectFont (if Size > Positive'Last then) show 204 497 moveto ( ary := new string\0501..Positive'Last\051;) show 204 508 moveto (else) show 204 519 moveto ( ary := new string\0501..Size\051;) show 204 530 moveto (end if;) show 168 554 moveto 10 /Times-Roman SelectFont (and so on. This can cause compiler warnings about) 0.245 WS 2.744 MX (\252This will raise exception Storage_Error) 0.244 WS 168 566 moveto (or Constraint_Error.\272 If Positive_Is_Large,) 0.516 WS 3.017 MX (meaning that Positive'Last >= S_Long'Last, we) 0.517 WS 168 578 moveto (don't need) 0.628 WS 3.127 MX (to include this code in the library and we certainly don't need to sit through the) 0.627 WS 168 590 moveto (presentation of needless warning messages.) 1.436 WS 3.937 MX (Set this parameter to False if Positive'Size <) 1.437 WS 168 602 moveto (S_Long'Size.) show 72 620 moveto 18 MX (Record_Rep_Storage_Unit_8) show 72 632 moveto 96 MX (This controls the bit offsets used) 1.526 WS 4.025 MX (within record representation clauses. It is relevant only) 1.525 WS 168 644 moveto (when Record_Rep_Clauses => True. Record_Rep_Storage_Unit_8 should be) 2.076 WS 4.577 MX (True when) 2.077 WS 168 656 moveto (bytes 0..3 of) 1.119 WS 3.618 MX (a 32-bit word are represented by bit offsets of 0..7, 8..15, 16..23, and 24..31) 1.118 WS 168 668 moveto (within an Ada record representation clause) 0.694 WS 3.195 MX (for the target compiler. The goal is to place the) 0.695 WS 168 680 moveto (bytes, half words, and words of the various protocol messages at the required offsets within) 0.425 WS 168 692 moveto (the messages. Only one of the Record_Rep_Story_Unit_@ parameters will be True.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (19) show EndPage %%Page: 20 20 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto 18 MX (Record_Rep_Storage_Unit_16) show 72 84 moveto 96 MX (This serves much the) 1.802 WS 4.303 MX (same purpose as Record_Rep_Storage_Unit_8 above. It should be) 1.803 WS 168 96 moveto (True when) 0.064 WS 10 /Times-Bold SelectFont ( System.Storage_Unit) 0.064 WS 10 /Times-Roman SelectFont ( is 16 and bytes 0..3 of a 32-bit word are represented by bit) 0.064 WS 168 108 moveto (offsets of 8..15, 0..7, 24..31, and 15..23.) 1.655 WS 4.156 MX (The goal is to place the bytes, half words, and) 1.656 WS 168 120 moveto (words of the various protocol messages at the required offsets within the messages.) show 72 138 moveto 18 MX (Record_Rep_Storage_Unit_32) show 72 150 moveto 96 MX (This serves much) 0.195 WS 2.694 MX (the same purpose as Record_Rep_Storage_Unit_8 and 16 above. It should) 0.194 WS 168 162 moveto (be True when) 0.138 WS 10 /Times-Bold SelectFont ( System.Storage_Unit) 0.138 WS 10 /Times-Roman SelectFont ( is 32) 0.138 WS 2.639 MX (and bytes 0..3 of a 32-bit word are represented by) 0.139 WS 168 174 moveto (bit offsets of 24..31, 16..23,) 0.442 WS 2.941 MX (8..15, and 0..7, and when half words 0..1 are represented by bit) 0.441 WS 168 186 moveto (offsets of 16..31 and) 1.558 WS 4.059 MX (0..15. The goal is to place the bytes, half words, and words of the) 1.559 WS 168 198 moveto (various protocol messages at the required offsets within the messages.) show 72 216 moveto 18 MX (Row_Major_Order) show 72 228 moveto 96 MX (True if \050as on the) 0.182 WS 2.681 MX (R1000\051 arrays are stored in memory in Row_Major order. This means that) 0.181 WS 168 240 moveto (the successive elements of each row of a two-dimensional array are stored in successive) 1.550 WS 168 252 moveto (locations. \050In a \0501..3,1..3\051 array, element) 0.306 WS 2.805 MX (\0501,1\051 is followed by \0501,2\051, \0501,3\051, \0502,1\051, \0502,2\051, and so) 0.305 WS 168 264 moveto (on.\051 False if \050as with some compilers\051 arrays are stored in memory in Column_Major order.) 0.385 WS 168 276 moveto (This means that) 1.458 WS 3.957 MX (successive elements of each row of a two-dimensional array will not be) 1.457 WS 168 288 moveto (adjacent in memory.) show 168 306 moveto (The X protocol assumes Row_Major and this flag provides a way to make) 1.377 WS 3.878 MX (allowances if) 1.378 WS 168 318 moveto (necessary. Note: Only Row_Major_Order => True is fully implemented and) 1.232 WS 3.731 MX (tested; Row-) 1.231 WS 168 330 moveto (_Major_Order => False is implemented but untested.) show 72 348 moveto 18 MX (Raw_Is_Unsigned) show 72 360 moveto 96 MX (True if X_Raw_Data is a numeric type with range 0..255 and False if it is) 0.493 WS 2.994 MX (range \261128..127.) 0.494 WS 168 372 moveto (X_Raw_Data) show 10 /Times-Italic SelectFont ( must) 1.072 WS 10 /Times-Roman SelectFont ( be) 1.072 WS 3.571 MX (an 8-bit numeric type, so it will have to be one or the other. Use a) 1.071 WS 168 384 moveto (type having a 0..255 range if you have a choice. The code will be slightly faster.) show 72 410 moveto 12 /Times-Bold SelectFont (5.2. Xlib's Bug Parameters) show 72 433.760 moveto 10 /Times-Roman SelectFont (Xlib has a penchant for turning up bugs in compilers. These parameters exist so that) 0.395 WS 2.896 MX (bugs can be explicitly avoided) 0.396 WS 72 445.760 moveto (when necessary.) show 72 469.760 moveto 18 MX (R1000_Size_Bug) show 7.440 MX (True for the R1000 native compilers that have the bug where this program fragment gets a) 0.712 WS 168 481.760 moveto (semantic error:) show 204 505.760 moveto 9 /Courier SelectFont (type A is Something;) show 204 516.760 moveto (for A'Size use nnn;) show 204 527.760 moveto (type B is new A;) show 204 538.760 moveto (for B'Size use nnn; <-- Gets an error) show 72 562.760 moveto 10 /Times-Roman SelectFont 18 MX (TeleGen2_Derive_Bug) show 72 574.760 moveto 96 MX (True for the TeleGen2 bug where a user-defined operation is not inherited by a derived type:) show 204 598.760 moveto 9 /Courier SelectFont (package Xxx is) show 204 609.760 moveto ( type Aaa is range nnn..mmm;) show 204 620.760 moveto ( function "and"\050 A,B : Aaa\051 return Aaa;) show 204 631.760 moveto (end Xxx;) show 204 653.760 moveto (with Xxx;) show 204 664.760 moveto (package Yyy is) show 204 675.760 moveto ( type Bbb is new Aaa;) show 204 686.760 moveto (end Yyy;) show 168 710.760 moveto 10 /Times-Roman SelectFont (Function \252and\272 is not inherited by the derived Bbb type and it should be.) show 72 756 moveto (20) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 21 21 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 367.750 MX (Library Parameterization) show 72 72 moveto 18 MX (TeleGen2_Length_Bug) show 72 84 moveto 96 MX (True for the TeleGen2 bug where a length clause compiles but fails to function:) show 204 108 moveto 9 /Courier SelectFont (type Foo is \050a,b,c,d,e,f,g,h\051;) show 204 119 moveto (type Bar is array \050Foo\051 of boolean;) show 204 130 moveto (for Bar'Size use 8;) show 168 154 moveto 10 /Times-Roman SelectFont (The problem is that ) 0.685 WS 10 /Courier SelectFont (Bar'Size) show 10 /Times-Roman SelectFont ( isn't 8.) 0.685 WS 3.186 MX (You have to add a ) 0.686 WS 10 /Courier SelectFont (pragma) show 10 /Times-Roman SelectFont ( ) 0.686 WS 10 /Courier SelectFont (Pack\050Foo\051) show 10 /Times-Roman SelectFont ( to get a) 0.686 WS 168 166 moveto 10 /Courier SelectFont ('Size) show 10 /Times-Roman SelectFont ( of 8.) show 72 184 moveto 18 MX (TeleGen2_Pack_Bug) show 72 196 moveto 96 MX (True for the TeleGen2 bug) 0.945 WS 3.444 MX (where a pragma Pack erroneously gets an error message about) 0.944 WS 168 208 moveto (\252Representation clause for) 1.030 WS 3.531 MX (Foo not allowed after forcing occurrence.\272 The problem is that) 1.031 WS 168 220 moveto (this happens only sometimes and it is erroneous, it doesn't indicate the correct type, and it) 0.784 WS 168 232 moveto (usually points to line 1 of the file:) show 204 256 moveto 9 /Courier SelectFont (type Foo is record ... end;) show 204 267 moveto (for Foo'Size use ...;) show 204 278 moveto (type Bar is array \050...\051 of Foo;) show 204 289 moveto (pragma Pack \050Bar\051; <--- Causes an error message about Foo?) show 72 313 moveto 10 /Times-Roman SelectFont 18 MX (TeleGen2_2d_Bug) show 72 325 moveto 96 MX (True for the TeleGen2 bug where 'First,) 2.117 WS 4.618 MX ('Last, and 'Length on two-dimensional arrays) 2.118 WS 168 337 moveto (return incorrect values:) show 204 361 moveto 9 /Courier SelectFont (type U_Char is new range 0..255;) show 204 372 moveto (for U_Char'Size use 8;) show 204 383 moveto (type Array_2d is array \050U_Char range <>,) show 204 394 moveto ( U_Char range <>\051 of Integer;) show 204 405 moveto (Foo : Array_2d;) show 168 429 moveto 10 /Times-Roman SelectFont (Foo'Last\0502\051, Foo'First\0502\051, and Foo'Length\0502\051 all return incorrect values. Changing the type) 0.622 WS 168 441 moveto (of the) 0.102 WS 2.603 MX (first dimension to any 16-bit \050or 32-bit\051 type fixes the problem but messes up our Xlib) 0.103 WS 168 453 moveto (interface.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (21) show EndPage %%Page: 22 22 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 756 moveto (22) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 23 23 BeginPage 792 false PositionPage 72 76 moveto 14 /Times-Bold SelectFont (6. Testing Xlib) show 72 99.760 moveto 10 /Times-Roman SelectFont (The) show 10 /Times-Bold SelectFont ( X_Testing) 0.394 WS 10 /Times-Roman SelectFont ( subsystem holds a collection of the various tests for Xlib. It will) 0.394 WS 2.893 MX (eventually be a complete test suite) 0.393 WS 72 111.760 moveto (for Xlib. Initially it consists mainly of \252smoke\272 tests \050call an interface; put out the resultant fire\051.) show 72 137.520 moveto 12 /Times-Bold SelectFont (6.1. Testing Groups) show 72 161.280 moveto 10 /Times-Roman SelectFont (The tests are grouped into logical areas and each group of tests exercises a particular series of) 2.426 WS 4.927 MX (related Xlib) 2.427 WS 72 173.280 moveto (interfaces. Each group is placed in a separate) 1.992 WS 4.491 MX (subdirectory. For instance, the) 1.991 WS 10 /Times-Bold SelectFont ( Resource_Manager) 1.991 WS 10 /Times-Roman SelectFont ( subdirectory) 1.991 WS 72 185.280 moveto (contains a series of general tests for the resource manager, or RM, portion of Xlib.) show 72 209.280 moveto (Each individual test is given) 0.973 WS 3.474 MX (a unique name. For example, in) 0.974 WS 10 /Times-Bold SelectFont ( Resource_Manager) 0.974 WS 10 /Times-Roman SelectFont ( there are the various) 0.974 WS 10 /Times-Bold SelectFont ( Rm_010) 0.974 WS 10 /Times-Roman SelectFont (,) show 72 221.280 moveto 10 /Times-Bold SelectFont (Rm_020) show 10 /Times-Roman SelectFont (, ...) 1.010 WS 2.500 MX ( tests. Each test targets a particular function or) 1.010 WS 3.509 MX (series of functions within the RM. In many cases the) 1.009 WS 72 233.280 moveto (numbering scheme merely reflects the) 0.387 WS 2.888 MX (historical sequence of development. However, occasionally the numbers will) 0.388 WS 72 245.280 moveto (reflect a test ordering that moves from the simple to the complex.) show 72 269.280 moveto (For each individual test there are a series of related files and Ada units.) 0.254 WS 2.500 MX ( For example, for the) 0.254 WS 10 /Times-Bold SelectFont ( Rm_010) 0.253 WS 10 /Times-Roman SelectFont ( test there are) 0.253 WS 72 281.280 moveto (these files:) show 72 305.280 moveto 10 /Times-Bold SelectFont 18 MX (Rm_010) show 10 /Times-Roman SelectFont 42.450 MX (This contains the code that makes up the test.) show 72 323.280 moveto 10 /Times-Bold SelectFont 18 MX (Rm_010_Run) show 10 /Times-Roman SelectFont 19.110 MX (This is an instantiation of the) 0.874 WS 10 /Times-Bold SelectFont ( Run_One_Test) 0.875 WS 10 /Times-Roman SelectFont ( generic. This is usually used to run a single) 0.875 WS 168 335.280 moveto (test \050) 0.304 WS 10 /Times-Bold SelectFont (Rm_010) show 10 /Times-Roman SelectFont ( in this case.\051 The generic creates a log file, compares the) 0.304 WS 2.803 MX (current test log with) 0.303 WS 168 347.280 moveto (a saved test log, deletes the new log if it matches the old log, and \252administers\272 the test.) show 72 365.280 moveto 10 /Times-Bold SelectFont 18 MX (Rm_010_Log) show 10 /Times-Roman SelectFont 20.780 MX (This is a log file containing the captured output from a previous successful run of) 0.251 WS 2.752 MX (the test. It) 0.252 WS 168 377.280 moveto (is used to determine the pass/fail condition of a test run.) show 72 401.280 moveto (For each collection of individual tests\320for example, the RM tests\320there are also these files:) show 72 425.280 moveto 10 /Times-Bold SelectFont 18 MX (Aaa_All_Rm) show 10 /Times-Roman SelectFont 22.450 MX (This Ada procedure sequentially runs all of the RM tests located in the subdirectory.) show 72 443.280 moveto 10 /Times-Bold SelectFont 18 MX (Aaa_Dir_Rm) show 10 /Times-Roman SelectFont 20.790 MX (This text file contains a list of all RM tests. Each test is) 0.837 WS 3.336 MX (listed with some indication of the) 0.836 WS 168 455.280 moveto (purpose of the test.) show 72 481.280 moveto 12 /Times-Bold SelectFont (6.2. Naming Conventions) show 72 505.040 moveto 10 /Times-Roman SelectFont (The precise naming conventions used for the various files are:) show 72 529.040 moveto (\267 ) show 18 MX (All names must be no longer than 14 characters. This 14-character) 1.531 WS 4.032 MX (restriction includes the additional four) 1.532 WS 96 541.040 moveto (characters required when adding filename) 1.107 WS 3.606 MX (extensions such as .prs and .prb to Ada 'Specs and 'Bodys. This) 1.106 WS 96 553.040 moveto (allows the tests and their saved log files to be stored by the same name on System V implementations with the) 0.146 WS 96 565.040 moveto (14-character filename-length restrictions.) show 72 583.040 moveto (\267 ) show 18 MX (Each test has a two-part name with an underscore between the) 0.122 WS 2.621 MX (parts. The first part is a short mnemonic, such a) 0.121 WS 96 595.040 moveto (RM for) 1.570 WS 4.071 MX (the resource manager. The second part is a test number. When run as a group, tests are run in a) 1.571 WS 96 607.040 moveto (sequence determined by the test number. An example test) 0.549 WS 3.048 MX (name would be) 0.548 WS 10 /Times-Bold SelectFont ( Rm_010'Spec) 0.548 WS 10 /Times-Roman SelectFont ( and) 0.548 WS 10 /Times-Bold SelectFont ( Rm_010'Body) 0.548 WS 96 619.040 moveto 10 /Times-Roman SelectFont (\050or) show 10 /Times-Bold SelectFont ( Rm_010.prs) 0.008 WS 10 /Times-Roman SelectFont ( and) 0.008 WS 10 /Times-Bold SelectFont ( Rm_010.prb) 0.008 WS 10 /Times-Roman SelectFont ( on UNIX\051. Notice the leading zero on the) 0.008 WS 2.509 MX (test number. It isn't vital, but it) 0.009 WS 10 /Times-Italic SelectFont ( is) 0.009 WS 96 631.040 moveto 10 /Times-Roman SelectFont (nice. This convention causes directory listings to be \252correctly\272 sorted by test number \050for up to 1000 tests\051.) show 72 649.040 moveto (\267 ) show 18 MX (Each test has a saved log file. The log file has the same name as the test with _Log appended\320for example,) 0.593 WS 96 661.040 moveto 10 /Times-Bold SelectFont (Rm_010_Log) show 10 /Times-Roman SelectFont ( \050on both the R1000 and on UNIX\051.) show 72 679.040 moveto (\267 ) show 18 MX (Each test is administered by an instantiation of the) 1.452 WS 10 /Times-Bold SelectFont ( Run_One_Test) 1.453 WS 10 /Times-Roman SelectFont ( generic. The generic takes care of the) 1.453 WS 96 691.040 moveto (details of opening a log file, closing the log) 0.380 WS 2.879 MX (file, trapping and reporting unhandled exceptions, and so on. The) 0.379 WS 96 703.040 moveto (generic instantiation is placed in a file with the same name as the) 2.123 WS 4.624 MX (test but with _Run appended. When) 2.124 WS 96 715.040 moveto (debugging a test, it would be usual) 0.150 WS 2.649 MX (to run the test directly\320for example,) 0.149 WS 10 /Times-Bold SelectFont ( Rm_010) 0.149 WS 10 /Times-Roman SelectFont (. However, when attempting) 0.149 WS 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (23) show EndPage %%Page: 24 24 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 96 72 moveto (to make an \252official\272 run of the test, complete with pass/fail determination, the _Run form of the test) 0.082 WS 2.583 MX (would be) 0.083 WS 96 84 moveto (used\320for example,) show 10 /Times-Bold SelectFont ( Rm_010_Run'Proc_Inst) show 10 /Times-Roman SelectFont ( \050or) show 10 /Times-Bold SelectFont ( Rm_010_Run.prs) show 10 /Times-Roman SelectFont ( on UNIX\051.) show 72 102 moveto (\267 ) show 18 MX (All tests having the same initial mnemonic are listed) 2.649 WS 5.148 MX (in a test file called) 2.648 WS 10 /Times-Bold SelectFont ( Aaa_Dir_<something>) 2.648 WS 10 /Times-Roman SelectFont (\320for) show 96 114 moveto (example,) show 10 /Times-Bold SelectFont ( Aaa_All_Rm) 0.190 WS 10 /Times-Roman SelectFont ( for the RM tests. Each test is listed with some indication of what package or packages) 0.190 WS 96 126 moveto (are being tested along with a short description of the purpose of the test.) show 72 144 moveto (\267 ) show 18 MX (All tests with the same initial mnemonic can) 2.870 WS 5.369 MX (be run by executing the Ada procedure with the name) 2.869 WS 96 156 moveto 10 /Times-Bold SelectFont (Aaa_All_<something>) show 10 /Times-Roman SelectFont (\320for example,) 2.762 WS 10 /Times-Bold SelectFont ( Aaa_All_Rm'Spec) 2.762 WS 10 /Times-Roman SelectFont ( and) 2.762 WS 10 /Times-Bold SelectFont ( Aaa_All_Rm'Body) 2.762 WS 10 /Times-Roman SelectFont ( for the RM) 2.762 WS 5.263 MX (tests \050or) 2.763 WS 96 168 moveto 10 /Times-Bold SelectFont (Aaa_All_Rm.prs) show 10 /Times-Roman SelectFont ( and) 1.289 WS 10 /Times-Bold SelectFont ( Aaa_All_Rm.prb) 1.289 WS 10 /Times-Roman SelectFont ( on UNIX\051.) 1.289 WS 3.788 MX (The various tests are performed sequentially and their) 1.288 WS 96 180 moveto (pass/fail status is recorded in the main log. A failing test is simply reported as such; it does not terminate the) 0.521 WS 96 192 moveto (testing.) show 72 217.760 moveto 12 /Times-Bold SelectFont (6.3. Support Tools) show 72 241.520 moveto 10 /Times-Roman SelectFont (A small number of tools have been built to help automate testing. Additional tools will be built as they are needed.) 0.485 WS 72 253.520 moveto (Some of the tools are actual programs, but most are subroutine libraries that can be used to simplify the creation of) 0.445 WS 72 265.520 moveto (new tests.) show 72 289.520 moveto (The current tools are:) show 72 313.520 moveto 10 /Times-Bold SelectFont 18 MX (Function Capitalize) show 72 325.520 moveto 10 /Times-Roman SelectFont 96 MX (This function capitalizes each \252word\272 in a string.) show 72 343.520 moveto 10 /Times-Bold SelectFont 18 MX (Function Lower_Case) show 72 355.520 moveto 10 /Times-Roman SelectFont 96 MX (This function converts all characters in a string to their lowercase form.) show 72 373.520 moveto 10 /Times-Bold SelectFont 18 MX (Procedure Run_One_Test) show 72 385.520 moveto 10 /Times-Roman SelectFont 96 MX (This generic procedure is used to control an individual test. It pushes the) 0.389 WS 2.888 MX (current log file \050in) 0.388 WS 168 397.520 moveto (case the test is under the control of an) 0.138 WS 10 /Times-Bold SelectFont ( Aaa_All_@) 0.138 WS 10 /Times-Roman SelectFont ( main program\051, runs the test,) 0.138 WS 2.639 MX (catches any) 0.139 WS 168 409.520 moveto (unhandled exceptions, closes the individual test log file, compares the new) 0.741 WS 3.240 MX (log with an old) 0.740 WS 168 421.520 moveto (log, and records the pass/fail status of the test in the main log file.) show 72 439.520 moveto 10 /Times-Bold SelectFont 18 MX (Procedure Swap_Raw_Data) show 72 451.520 moveto 10 /Times-Roman SelectFont 96 MX (If necessary, this procedure swaps bytes in an) 0.972 WS 10 /Times-Bold SelectFont ( X_Raw_Data_Array) 0.972 WS 10 /Times-Roman SelectFont ( in) 0.972 WS 3.473 MX (order to match the) 0.973 WS 168 463.520 moveto (byte ordering of representations on a given machine.) show 72 481.520 moveto 10 /Times-Bold SelectFont 18 MX (Package Test_Io) show 72 493.520 moveto 10 /Times-Roman SelectFont 96 MX (This is the output facility for the test logs. It provides for a hierarchical organization) 0.597 WS 3.096 MX (of log) 0.596 WS 168 505.520 moveto (files and it provides output procedures for common data types. It should be used for all) 1.618 WS 168 517.520 moveto (output produced by a test. \050Other than that produced by whatever portion of Xlib that is) 1.470 WS 168 529.520 moveto (actually under test. Xlib will use its normal input/output channels.\051) show 72 756 moveto (24) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 25 25 BeginPage 792 false PositionPage 72 76 moveto 14 /Times-Bold SelectFont (7. Porting Milestones) show 72 99.760 moveto 10 /Times-BoldItalic SelectFont (Note:) show 10 /Times-Italic SelectFont ( Read the chapters on compiler, machine, and operating-system dependencies before reading this chapter. A) 0.755 WS 72 111.760 moveto (quick scan over the contents) 0.848 WS 3.347 MX (of Chapter 5 on library parameterization and Appendix B on the Ada parametizer is) 0.847 WS 72 123.760 moveto (also recommended.) show 72 147.760 moveto 10 /Times-Roman SelectFont (The purpose of this chapter is to provide a) 0.908 WS 3.409 MX (list of the steps involved in porting Xlib to a new target. The sections) 0.909 WS 72 159.760 moveto (below are presented in an order that) 0.559 WS 3.058 MX (could be used for scheduling the porting process. Each section enumerates the) 0.558 WS 72 171.760 moveto (considerations, problems, and workarounds that apply to that step.) show 72 195.760 moveto (To perform these steps, you will need the following documentation:) show 72 219.760 moveto (\267 ) show 18 MX (LRM Appendix F. This is written) 1.044 WS 3.545 MX (by the vendor that supplied the Ada compiler you want to use. This will) 1.045 WS 96 231.760 moveto (provide you with a list of the) 1.044 WS 3.543 MX (optional Ada features that have been implemented. These include a listing of) 1.043 WS 96 243.760 moveto (available pragmas, representation clauses, and unchecked conversions.) show 72 261.760 moveto (\267 ) show 18 MX (LRM Chapter 13.) 2.228 WS 4.729 MX (This is the part of the Ada LRM that lists all of the important, but implementation-) 2.229 WS 96 273.760 moveto (dependent, portions of the language. Many vendors provide either a rewritten) 1.436 WS 3.935 MX (Chapter 13 or at least some) 1.435 WS 96 285.760 moveto (explicit documentation on exactly what portions of Chapter 13 they have implemented. This is usually where) 0.492 WS 96 297.760 moveto (you will find out about machine-code insertions, pragma Interface, and default data representations.) show 72 315.760 moveto (\267 ) show 18 MX (Documentation on the runtime representation of data types. This may be part of Appendix F or it may) 0.038 WS 2.537 MX (be listed) 0.037 WS 96 327.760 moveto (in the Chapter 13 documentation. However, some) 2.908 WS 5.409 MX (vendors will provide this information in a separate) 2.909 WS 96 339.760 moveto (document. You need this for two reasons:) 0.984 WS 3.483 MX (\0501\051 you need to know the default representations for data in case) 0.983 WS 96 351.760 moveto (length or record representation clauses) 0.681 WS 3.182 MX (are not implemented or in case they fail to function properly; \0502\051 you) 0.682 WS 96 363.760 moveto (need to know what representations are possible.) show 72 381.760 moveto (\267 ) show 18 MX (Documentation on procedure-) 0.333 WS 2.832 MX (and function-calling sequences. You will need to know what registers are used,) 0.332 WS 96 393.760 moveto (the layout of call frames on the program stack, and how functions return values.) show 72 411.760 moveto (\267 ) show 18 MX (Documentation for the operating system. You will need to be able) 0.419 WS 2.920 MX (to open, read, write, and close connections) 0.420 WS 96 423.760 moveto (to the X) 2.923 WS 5.422 MX (server. This may be implemented using TCP/IP, DECnet) 2.922 WS /trademark SYM 9.800 MX (, shared memory, or interprocess) 2.922 WS 96 435.760 moveto (communications. The only restrictions are that) 0.010 WS 2.511 MX (the server\050s\051 must support that medium and Ada programs must) 0.011 WS 96 447.760 moveto (be able to interface to that medium \050or to a library that supports) 0.982 WS 3.481 MX (that medium\051. Depending on the operating) 0.981 WS 96 459.760 moveto (system, there may be other facilities that are required\320for example, UNIX \252environment\272 variables.) show 72 485.520 moveto 12 /Times-Bold SelectFont (7.1. Go/No-Go Decision) show 72 509.280 moveto 10 /Times-Roman SelectFont (The very first thing to do is to determine whether it is possible to port to the) 0.732 WS 3.233 MX (intended target. There are only these) 0.733 WS 72 521.280 moveto (\252hard\272 go/no-go points:) show 72 545.280 moveto (\267 ) show 18 MX (Compiler requirement: Xlib requires five specific numeric types with specific value ranges.) show 72 563.280 moveto (\267 ) show 18 MX (Compiler requirement: Xlib requires 'Address, or an equivalent, for procedures and functions.) show 72 581.280 moveto (\267 ) show 18 MX (Operating-system requirement: Xlib requires nonblocking reads and desires nonblocking writes.) show 72 606.040 moveto 11 /Times-Bold SelectFont (7.1.1. Numeric Types) show 72 629.800 moveto 10 /Times-Roman SelectFont (Xlib defines these numeric types:) show 72 653.800 moveto 10 /Times-Bold SelectFont 18 MX (S_Long) show 10 /Times-Roman SelectFont 45.210 MX (This is a 32-bit 2's complement integer. It must have a range of \261\0502**31\051 .. 2**31 \2611.) show 72 671.800 moveto 10 /Times-Bold SelectFont 18 MX (S_Short) show 10 /Times-Roman SelectFont 43.550 MX (This is a 16-bit 2's complement integer. It must have a range of \261\0502**15\051 .. 2**15 \2611.) show 72 689.800 moveto 10 /Times-Bold SelectFont 18 MX (S_Char) show 10 /Times-Roman SelectFont 45.220 MX (This is an 8-bit 2's complement integer. It must have a range of \261\0502**7\051 .. 2**7 \2611.) show 72 707.800 moveto 10 /Times-Bold SelectFont 18 MX (U_Short) show 10 /Times-Roman SelectFont 41.890 MX (This is a 16-bit unsigned integer. It must have a range of 0 .. 2**16 \2611.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (25) show EndPage %%Page: 26 26 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto 10 /Times-Bold SelectFont 18 MX (U_Char) show 10 /Times-Roman SelectFont 43.560 MX (This is a 8-bit unsigned integer. It must have a range of 0 .. 2**8 \261 1.) show 72 96 moveto (If it is not possible to implement the ranges for any one of these types, the Xlib port is not possible.) show 72 120 moveto (If it is not possible to guarantee that all of these) 0.701 WS 3.200 MX (types have exactly the correct size of 32, 16, or 8 bits, the port is) 0.700 WS 72 132 moveto (possible but there) 0.591 WS 3.092 MX (will be extra work involved. Many of the type-conversion routines used when performing server) 0.592 WS 72 144 moveto (input/output will have to be rewritten. They are all currently generic) 2.396 WS 4.895 MX (instantiations that utilize some form of) 2.395 WS 72 156 moveto (unchecked conversion. These instantiations will have to be replaced by customized code.) show 72 180 moveto (These numeric types are declared in) 0.168 WS 2.669 MX (the) show 10 /Times-Bold SelectFont ( Xlbmt_Numeric_Types) 0.169 WS 10 /Times-Roman SelectFont ( module. If you can successfully compile, link, and) 0.169 WS 72 192 moveto (elaborate that module, Xlib's numeric types are not a roadblock for this port. This step checks whether) 0.264 WS 2.763 MX (the compiler) 0.263 WS 72 204 moveto (will accept the type declarations; it does) 0.171 WS 2.672 MX (not check whether the compiler has correctly compiled code that uses those) 0.172 WS 72 216 moveto (types. The compilation will be checked in a later step.) show 72 240.760 moveto 11 /Times-Bold SelectFont (7.1.2. Procedure 'Address) show 72 264.520 moveto 10 /Times-Roman SelectFont (Does the compiler implement the implementation-dependent 'Address) 1.438 WS 3.937 MX (attribute for procedures and functions?) 1.437 WS 2.500 MX ( If) 1.437 WS 72 276.520 moveto (not, Xlib is not possible, unless you can come up with an alternative method for obtaining the address of an Ada) 0.958 WS 72 288.520 moveto (procedure or function.) show 72 312.520 moveto (Most compilers implement some form of the 'Address attribute for procedures) 0.057 WS 2.556 MX (and functions. Check your compiler's) 0.056 WS 72 324.520 moveto (Appendix F; 'Address should be one of the supported attributes.) 0.320 WS 2.821 MX (If it is not, the compiler should support some other) 0.321 WS 72 336.520 moveto (way to obtain an Ada routine's physical address. This way needs to be determined. It will be utilized in a later step.) show 72 361.280 moveto 11 /Times-Bold SelectFont (7.1.3. X Server Input/Output) show 72 385.040 moveto 10 /Times-Roman SelectFont (It must be possible to communicate with the X) 0.133 WS 2.632 MX (server. This can be done through some existing Ada library, if such a) 0.132 WS 72 397.040 moveto (library exists or can be created, or it can be done by interfacing directly to the operating system. The means of) 1.377 WS 72 409.040 moveto (communication should be determined at this time. Actual implementation will occupy later steps.) show 72 433.040 moveto (The Appendix F and Chapter 13 documentation provided by the Ada compiler vendor) 1.754 WS 4.253 MX (will probably provide a) 1.753 WS 72 445.040 moveto (documented means of interfacing with the) 0.872 WS 3.373 MX (operating system. There may be vendor-supplied libraries or there may) 0.873 WS 72 457.040 moveto (merely be a means whereby you can implement your own library.) show 72 481.040 moveto (The minimal requirements are:) show 72 505.040 moveto (\267 ) show 18 MX (You must be able to open a connection to) 1.105 WS 3.604 MX (a named server. This implies taking an) 1.104 WS 10 /Times-Bold SelectFont ( X_String) 1.104 WS 10 /Times-Roman SelectFont ( containing the) 1.104 WS 96 517.040 moveto (name of a network host and making a connection to the X server running on that host.) show 72 535.040 moveto (\267 ) show 18 MX (You must be able to close an open connection.) show 72 553.040 moveto (\267 ) show 18 MX (You must be able to read 8-bit data values from a) 0.133 WS 2.634 MX (connection. It is not important if the individual values arrive) 0.134 WS 96 565.040 moveto (enclosed in data locations larger than 8 bits or if the) 0.676 WS 3.175 MX (8-bit values are broken into smaller pieces that must be) 0.675 WS 96 577.040 moveto (reassembled. The important feature is being able to individually retrieve the 8-bit data values.) show 72 595.040 moveto (\267 ) show 18 MX (You will need to implement two interfaces for reading. One is) 1.905 WS 10 /Times-Bold SelectFont ( Receive_Must) 1.905 WS 10 /Times-Roman SelectFont ( and the other is) 1.905 WS 10 /Times-Bold SelectFont ( Receive-) 1.905 WS 96 607.040 moveto (_Maybe) show 10 /Times-Roman SelectFont (. The) 1.169 WS 10 /Times-Bold SelectFont ( Receive_Must) 1.169 WS 10 /Times-Roman SelectFont ( interface is called with) 1.169 WS 3.668 MX (a buffer of some size and it does not return until that) 1.168 WS 96 619.040 moveto (buffer has been completely filled with) 0.422 WS 2.923 MX (data read from the connection. The) 0.423 WS 10 /Times-Bold SelectFont ( Receive_Maybe) 0.423 WS 10 /Times-Roman SelectFont ( interface is called) 0.423 WS 96 631.040 moveto (with a buffer of some size and it returns \0501\051 immediately with no data if none is available, or \0502\051 immediately) 0.384 WS 96 643.040 moveto (with however much data was instantly available; the buffer may be partially) 0.272 WS 2.773 MX (or completely filled. You may be) 0.273 WS 96 655.040 moveto (familiar with these notions under the names of) show 10 /Times-Italic SelectFont ( blocking) show 10 /Times-Roman SelectFont ( and) show 10 /Times-Italic SelectFont ( nonblocking) show 10 /Times-Roman SelectFont ( I/O.) show 72 673.040 moveto (\267 ) show 18 MX (You must) 0.518 WS 3.017 MX (be able to write 8-bit data values to a connection. The single interface is called) 0.517 WS 10 /Times-Bold SelectFont ( Transmit_Maybe) 0.517 WS 10 /Times-Roman SelectFont (.) show 96 685.040 moveto (This implements nonblocking output. It is called with a buffer of data. As much of that data is transmitted as is) 0.035 WS 96 697.040 moveto (possible. However, if continued) 2.620 WS 5.119 MX (transmission would block the continued execution of the program, the) 2.619 WS 96 709.040 moveto (transmission is cut off and the routine returns with an indication of how much data was actually sent.) show 72 756 moveto (26) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 27 27 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 392.160 MX (Porting Milestones) show 72 72 moveto (If input/output of this nature is not possible on the target operating system, the Xlib port is not possible. The most) 0.678 WS 72 84 moveto (common problem is in implementing the nonblocking input and output.) show 72 108 moveto (If a read operation blocks, Xlib simply cannot function. It is very important that Xlib be capable of asking the) 1.550 WS 72 120 moveto (question \252Has the server sent anything recently?\272 It) 1.052 WS 3.553 MX (must be able to do this without blocking and waiting for the) 1.053 WS 72 132 moveto (server to send a message. Without this feature, an X application's execution will appear erratic) 0.295 WS 2.794 MX (and it may even halt) 0.294 WS 72 144 moveto (permanently as it deadlocks; the application is waiting for input, the) 0.847 WS 3.348 MX (server is waiting for the user, and the user is) 0.848 WS 72 156 moveto (waiting for information from the application.) show 72 180 moveto (If nonblocking writes are not possible, Xlib can still function. However, in cases) 2.795 WS 5.294 MX (of severe loading on the) 2.794 WS 72 192 moveto (communications medium, the performance of X applications may suffer and appear \252jumpy.\272) show 72 216 moveto (The pieces of the Xlib's server input/output implementation are:) show 72 240 moveto 10 /Times-Bold SelectFont 18 MX (Xlbit_Network_Types) show 72 252 moveto 10 /Times-Roman SelectFont 96 MX (This module declares all of the types that are needed by the public Xlib interface.) show 72 270 moveto 10 /Times-Bold SelectFont 18 MX (Xlbit_Transport_Defs) show 72 282 moveto 10 /Times-Roman SelectFont 96 MX (This module declares any additional types) 0.118 WS 2.619 MX (that may be required. For example, if a host name) 0.119 WS 168 294 moveto (string must be translated by) 2.994 WS 5.493 MX (some operating-system facility into an instance of some) 2.993 WS 168 306 moveto (operating-system data structure, that data structure would be declared here.) show 72 324 moveto 10 /Times-Bold SelectFont 18 MX (Xlbmt_Internal) show 10 /Times-Roman SelectFont 10.780 MX (This module implements the open and close operations.) show 72 342 moveto 10 /Times-Bold SelectFont 18 MX (Xlbmt_Network_Interface) show 72 354 moveto 10 /Times-Roman SelectFont 96 MX (This module implements the reading and writing interfaces.) show 72 378 moveto (These modules are the minimum circle of) 0.013 WS 2.514 MX (change for the input/output portion of an Xlib port. They must exist within) 0.014 WS 72 390 moveto (a port of Xlib. However, the primary) 0.017 WS 2.516 MX (clients of these modules are all in the machine-dependent portion of the library.) 0.016 WS 72 402 moveto (Few extensions to) 1.146 WS 3.647 MX (the library, and no applications using the library, will call these procedural interfaces directly.) 1.147 WS 72 414 moveto (They) show 10 /Times-Italic SelectFont ( are) 2.056 WS 10 /Times-Roman SelectFont ( allowed, even expected, to) 2.056 WS 4.555 MX (reference the) 2.055 WS 10 /Times-Bold SelectFont ( X_Raw_Data) 2.055 WS 10 /Times-Roman SelectFont ( types declared in the) 2.055 WS 10 /Times-Bold SelectFont ( Xlbit_Network_Types) 2.055 WS 72 426 moveto 10 /Times-Roman SelectFont (module, but all extension and application communications will usually be handled by higher-level interfaces.) show 72 450 moveto (It may be that a particular port) 0.033 WS 2.534 MX (requires a larger circle of change, perhaps to meet strict performance requirements. In) 0.034 WS 72 462 moveto (this case the clients of the) 1.860 WS 10 /Times-Bold SelectFont ( Xlbmt_Network_Interface) 1.860 WS 10 /Times-Roman SelectFont ( module can be changed so that they utilize some other) 1.859 WS 72 474 moveto (interface. It may even be desirable to reimplement those clients. Take great care to maintain the semantics and side) 0.450 WS 72 486 moveto (effects of those higher-level interfaces. Extensions and applications will be calling them directly.) show 72 510 moveto (In cases) 0.068 WS 2.567 MX (such as this, try to utilize the parameterization mechanisms provided by the library. Never delete code\320just) 0.067 WS 72 522 moveto (parameterize it out for your target. Never simply add code; surround it with a parameter aimed at your target. It will) 0.238 WS 72 534 moveto (make future parallel maintenance of the various targets much easier.) show 72 559.760 moveto 12 /Times-Bold SelectFont (7.2. Logical Operations on Numerics) show 72 583.520 moveto 10 /Times-Roman SelectFont (Xlib represents some of) 0.492 WS 2.991 MX (the X protocol types as numeric values. In particular, the) 0.491 WS 10 /Times-Bold SelectFont ( X_Pixel) 0.491 WS 10 /Times-Roman SelectFont ( and the) 0.491 WS 10 /Times-Bold SelectFont ( X_Plane_Mask) 0.491 WS 72 595.520 moveto 10 /Times-Roman SelectFont (types are represented as numerics.) 0.461 WS 2.962 MX (In concept, these types are Boolean arrays with numeric indices for the different) 0.462 WS 72 607.520 moveto (elements. It might be expected that these types would be declared as Ada array types. However, two problems occur.) show 72 631.520 moveto (First, Ada Boolean) 0.142 WS 2.641 MX (arrays may or may not be packed. This can lead to very inefficient conversions between protocol) 0.141 WS 72 643.520 moveto (messages and instances of these types. And, since these types occur) 0.501 WS 3.002 MX (\252often\272 in the protocol, it is considered to be a) 0.502 WS 72 655.520 moveto (minor optimization to make their conversions \252easy\272 even in the worst situations.) show 72 679.520 moveto (Second, packed) 0.762 WS 3.261 MX (Ada Boolean arrays may index their bits \252up\272 or \252down.\272 The basic question is: \252Which bit is bit) 0.761 WS 72 691.520 moveto (number 0?\272 The Ada LRM leaves this to the implementation) 0.488 WS 2.989 MX (to decide. On one machine bit 0 might be the sign bit) 0.489 WS 72 703.520 moveto (\050high-order bit\051, and on another machine it might be the even/odd bit \050low-order) 0.785 WS 3.284 MX (bit\051. This makes writing portable) 0.784 WS 72 715.520 moveto (code exceedingly difficult.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (27) show EndPage %%Page: 28 28 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto (Some of the operations) 0.588 WS 3.089 MX (that are very common for) 0.589 WS 10 /Times-Bold SelectFont ( X_Pixel) 0.589 WS 10 /Times-Roman SelectFont ( and) 0.589 WS 10 /Times-Bold SelectFont ( X_Plane_Mask) 0.589 WS 10 /Times-Roman SelectFont ( values are: shift, logical or, logical) 0.589 WS 72 84 moveto (and, and logical not. The various logical operations are) 0.499 WS 2.998 MX (defined for Boolean arrays in Ada but the shift operation is) 0.498 WS 72 96 moveto (not. A shift operation in Ada might look like this:) show 108 120 moveto 9 /Courier SelectFont (Ary\0504 .. Top_Bit\051 := Ary\0500 .. Top_Bit - 4\051) show 108 131 moveto (Ary\0500 .. 3\051 := \0500 .. 3 => False\051;) show 72 155 moveto 10 /Times-Roman SelectFont (Two things: \0501\051 this is not likely to be compiled into anything resembling a shift operation, and it is very likely) 0.124 WS 2.625 MX (to be) 0.125 WS 72 167 moveto (inefficient; \0502\051 this is simply not readable.) show 72 191 moveto (These basic considerations of packing,) 0.992 WS 3.491 MX (bit ordering, and common usage lead to choosing a simple numeric repre-) 0.991 WS 72 203 moveto (sentation for these types. This choice implies that the various logical and shifting operations) 1.258 WS 3.759 MX (are available to the) 1.259 WS 72 215 moveto (application programmer. The module) 0.129 WS 10 /Times-Bold SelectFont ( Xlbmt_Numeric_Types) 0.129 WS 10 /Times-Roman SelectFont ( provides these) 0.129 WS 2.628 MX (operations. The purpose of this step is) 0.128 WS 72 227 moveto (to implement those operations.) show 72 251 moveto (There are three basic ways to implement these operations:) show 72 275 moveto (\267 ) show 18 MX (Use) show 10 /Times-Bold SelectFont ( Unchecked_Conversion) 0.727 WS 10 /Times-Roman SelectFont ( to) 0.727 WS 3.228 MX (convert to/from a packed Boolean array type and perform the operations on) 0.728 WS 96 287 moveto (that value. \050Inefficient\051) show 72 305 moveto (\267 ) show 18 MX (Use Ada machine-code insertions. If the compiler implements these, this is exceedingly trivial to do. \050Best) 1.196 WS 96 317 moveto (solution overall\320used with the R1000 target\051) show 72 335 moveto (\267 ) show 18 MX (Use a foreign language. Assembler is a reasonable choice. Each routine will be about one) 0.191 WS 2.692 MX (instruction in length) 0.192 WS 96 347 moveto (plus whatever instructions are necessary) 2.623 WS 5.122 MX (for routine entry and exit. \050Reasonable choice\320used with the) 2.622 WS 96 359 moveto (TeleGen2 target\051) show 72 383 moveto (Modify the body of the) 1.517 WS 10 /Times-Bold SelectFont ( Xlbmt_Numeric_Types) 1.518 WS 10 /Times-Roman SelectFont ( package and implement the various logical operations. Several) 1.518 WS 72 395 moveto (sample implementation strategies are already present in the body. The easiest) 0.112 WS 2.611 MX (path is to pick one that is close to your) 0.111 WS 72 407 moveto (chosen strategy and to use the existing code as a model.) show 72 432.760 moveto 12 /Times-Bold SelectFont (7.3. First Executable) show 72 456.520 moveto 10 /Times-Roman SelectFont (The first executable program is one that checks the logical) 0.476 WS 2.977 MX (operations provided for Xlib's numeric types. These are) 0.477 WS 72 468.520 moveto (the) show 10 /Times-Bold SelectFont ( and) 0.225 WS 10 /Times-Roman SelectFont (,) show 10 /Times-Bold SelectFont ( or) 0.225 WS 10 /Times-Roman SelectFont (,) show 10 /Times-Bold SelectFont ( xor) 0.225 WS 10 /Times-Roman SelectFont (,) show 10 /Times-Bold SelectFont ( not) 0.225 WS 10 /Times-Roman SelectFont (, and) 0.225 WS 10 /Times-Bold SelectFont ( Shift) 0.225 WS 10 /Times-Roman SelectFont ( operators exported by the) 0.225 WS 10 /Times-Bold SelectFont ( Xlbmt_Numeric_Types) 0.225 WS 10 /Times-Roman SelectFont ( module and implemented by the) 0.225 WS 72 480.520 moveto (previous step.) show 72 504.520 moveto (A suitable test program is provided in the) 0.183 WS 10 /Times-Bold SelectFont ( X_Testing) 0.183 WS 10 /Times-Roman SelectFont ( subsystem. ) 0.183 WS 2.500 MX (The test is) 0.183 WS 2.684 MX (in the) 0.184 WS 10 /Times-Bold SelectFont ( Porting_Tests) 0.184 WS 10 /Times-Roman SelectFont ( subdirectory. It is) 0.184 WS 72 516.520 moveto (called) show 10 /Times-Bold SelectFont ( Exe_001) show 10 /Times-Roman SelectFont ( \050or) show 10 /Times-Bold SelectFont ( Exe_001.prs/.prb) show 10 /Times-Roman SelectFont ( on UNIX\051. Read Chapter 6 for a discussion of Xlib's testing facilities.) show 72 540.520 moveto (Compile and execute the) show 10 /Times-Bold SelectFont ( Exe_001) show 10 /Times-Roman SelectFont ( program. If it executes successfully, the first significant porting task is complete.) show 72 566.280 moveto 12 /Times-Bold SelectFont (7.4. Ada Parametizer) show 72 590.040 moveto 10 /Times-Roman SelectFont (Read Chapter 5 on library parameterization and Appendix B on the Ada parametizer if you have not) 0.759 WS 3.258 MX (already done) 0.758 WS 72 602.040 moveto (so. They document) 0.605 WS 3.106 MX (all of Xlib's parameters and how to run the parametizer. That documentation, coupled with the) 0.606 WS 72 614.040 moveto (knowledge obtained during the last step, enables you to parameterize the library) 0.002 WS 2.501 MX (for your target. You will need to run) 0.001 WS 72 626.040 moveto (the parameterization program over all of the source files for Xlib using your desired parameter) 1.081 WS 3.582 MX (settings after you) 1.082 WS 72 638.040 moveto (have read the next section.) show 72 662.040 moveto (Return to this step and reparameterize the library any time you find that some parameter) 0.033 WS 2.532 MX (setting was inappropriate. If) 0.032 WS 72 674.040 moveto (you are using the UNIX Makefiles provided) 2.337 WS 4.838 MX (by Rational, simply do a \252make reparam\272 command to run the) 2.338 WS 72 686.040 moveto (parametizer over all source files.) show 72 756 moveto (28) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 29 29 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 392.160 MX (Porting Milestones) show 72 74 moveto 12 /Times-Bold SelectFont (7.5. Data Representation) show 72 97.760 moveto 10 /Times-Roman SelectFont (Xlib accepts data) 1.363 WS 3.862 MX (from an application, repackages it, and sends it to the server. It also accepts packets from the) 1.362 WS 72 109.760 moveto (server, repackages them, and gives them to the) 1.880 WS 4.381 MX (application. This is Xlib's primary purpose: to be an interface) 1.881 WS 72 121.760 moveto (between the application and the underlying X protocol data stream.) show 72 145.760 moveto (The repackaging of data is potentially the most time-consuming portion of Xlib's) 0.178 WS 2.677 MX (job. Xlib attempts to minimize the) 0.177 WS 72 157.760 moveto (overhead involved by being clever with data) 0.505 WS 3.006 MX (representations. If a particular compiler implements all of Chapter 13,) 0.506 WS 72 169.760 moveto (we have the best of all possible) 1.157 WS 3.656 MX (worlds and we can expect the maximum efficiency. We also have the minimum) 1.156 WS 72 181.760 moveto (amount of porting effort.) 0.236 WS 2.737 MX (If a compiler implements none of Chapter 13, we have the worst case for performance and) 0.237 WS 72 193.760 moveto (we also have the most work to do.) show 72 217.760 moveto (The X protocol) 1.756 WS 8 /Times-Roman SelectFont 0 -3 rmoveto (4) show 0 3 rmoveto 10 /Times-Roman SelectFont ( defines several required) 1.756 WS 4.255 MX (numeric types, dozens of enumerated types, dozens of discrete types,) 1.755 WS 72 229.760 moveto (various array types, and more than 200 unique composite types.) show 72 253.760 moveto (Each of these types is defined so as to) 0.340 WS 2.841 MX (be easily representable on today's prototypical 32-bit machine. Everything is) 0.341 WS 72 265.760 moveto (sized to) 1.390 WS 3.889 MX (occupy a multiple of 8, 16, or 32 bits. This makes it easy to create high-level language data types that) 1.389 WS 72 277.760 moveto (exactly mimic the) 0.433 WS 2.934 MX (layout of the protocol's data packets. This, in turn, allows the \252repackaging\272 of data between the) 0.434 WS 72 289.760 moveto (application and the server to be implemented by a simple copy operation.) show 72 313.760 moveto (Doing this in Ada is) 0.248 WS 2.747 MX (easy provided the compiler implements certain of the Chapter 13 representation clauses. In this) 0.247 WS 72 325.760 moveto (section we talk about:) show 72 349.760 moveto (\267 ) show 18 MX (What layouts are desired.) show 72 367.760 moveto (\267 ) show 18 MX (What Ada mechanisms are used to achieve these layouts.) show 72 385.760 moveto (\267 ) show 18 MX (What options exist when these mechanisms fail.) show 72 403.760 moveto (\267 ) show 18 MX (What workarounds are possible and what work is required.) show 72 427.760 moveto (This step is done when you have discovered the proper settings for the parameters described below.) show 72 452.520 moveto 11 /Times-Bold SelectFont (7.5.1. Length Clauses) show 72 476.280 moveto 10 /Times-Roman SelectFont (Ada's length clauses \050LRM, Section 13.2\051 look like this:) show 108 500.280 moveto 9 /Courier SelectFont (for <type name>'Size use <numeric value>;) show 72 524.280 moveto 10 /Times-Roman SelectFont (They tell the compiler that the indicated type is to be stored using at) 0.382 WS 2.883 MX (most the indicated number of bits. This allows) 0.383 WS 72 536.280 moveto (us, for example, to store a 4-bit enumeration value using an) 1.281 WS 3.780 MX (8-bit storage location. With some compilers, it also) 1.280 WS 72 548.280 moveto (allows us to guarantee that they will) show 10 /Times-Italic SelectFont ( always) show 10 /Times-Roman SelectFont ( be stored using 8 full bits\320no more and no less.) show 72 572.280 moveto (All of the protocol-based types) 1.423 WS 3.924 MX (exported by Xlib have length clauses. ) 1.424 WS 2.500 MX (With some compilers, such as Rational's) 1.424 WS 72 584.280 moveto (R1000 native compiler, this is all that is required. These compilers) 1.961 WS 4.460 MX (implement length clauses as an exact size) 1.960 WS 72 596.280 moveto (requirement instead of merely a maximum size. The default operation of the compiler is such that all record layouts) 0.310 WS 72 608.280 moveto (and all array packing happens to be exactly what we need.) show 72 632.280 moveto (Read the Appendix F and the Chapter 13 documentation provided by the Ada compiler vendor. This will indicate the) show 72 644.280 moveto (implementation status of length) 0.538 WS 3.039 MX (clauses and will list any important restrictions they may have. If length clauses are) 0.539 WS 72 656.280 moveto (not implemented, or if they have any restrictions that effectively eliminate) 0.511 WS 3.010 MX (their use, many of the types declared by) 0.510 WS 72 668.280 moveto (Xlib will have the \252wrong\272 size. This ultimately means that the conversion) 0.442 WS 2.943 MX (between Ada data types and X-protocol) 0.443 WS 72 680.280 moveto (communications packets cannot be implemented by a simple copy. The best) 1.795 WS 4.294 MX (possible implementation is one in) 1.794 WS 72 702 moveto (____________________________________________) show 72 720 moveto 8 /Times-Roman SelectFont 0 -3 rmoveto (4) show 0 3 rmoveto ( ) show 8 /Times-Italic SelectFont (X Window System Protocol) show 8 /Times-Roman SelectFont (, MIT X Consortium Standard, X Version 11, Release 4, by Robert W. Scheifler, 1988.) show 72 756 moveto 10 /Times-Roman SelectFont (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (29) show EndPage %%Page: 30 30 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto (which a 4-bit enumeration type can be given an exact size of 8,) 1.183 WS 3.684 MX (16, or 32 bits. If this is not possible, the length) 1.184 WS 72 84 moveto (clauses are not usable unless record representation clauses are also implemented.) 0.331 WS 2.830 MX (In that case, the length clauses are) 0.330 WS 72 96 moveto (less than perfect but still usable.) show 72 120 moveto (The ideal implementation of length clauses is one where the length clause is treated as a specification of an exact) 0.850 WS 72 132 moveto (size. This, for example, allows us to force a 4-bit enumeration value to be stored as an 8-bit value by default.) 1.654 WS 72 144 moveto (However, an implementation of length clauses where the length clause is merely treated as a) 0.587 WS 3.088 MX (maximum size is still) 0.588 WS 72 156 moveto (potentially usable. All X protocol record types have representation clauses to augment the length clauses and) 0.606 WS 3.105 MX (all X) 0.605 WS 72 168 moveto (protocol array types are made up of types that are exactly 8, 16,) 0.455 WS 2.956 MX (or 32 bits in size. Most compilers will have usable) 0.456 WS 72 180 moveto (length clauses.) show 72 204 moveto (If length clauses are not implemented, have bugs, or have constraints that prevent their effective use, it) 1.514 WS 4.013 MX (will be) 1.513 WS 72 216 moveto (necessary to implement the various conversions by hand. Xlib has two sets of) 0.337 WS 2.838 MX (generic functions that are used for all) 0.338 WS 72 228 moveto (conversions \050other than for Ada) show 10 /Times-Bold SelectFont ( Strings) show 10 /Times-Roman SelectFont (, which are special\051. They are located in these two modules:) show 72 252 moveto 10 /Times-Bold SelectFont 18 MX (Xlbmp_Generic_Converters) show 72 264 moveto 10 /Times-Roman SelectFont 96 MX (Instantiations of these generics) 1.098 WS 3.597 MX (are used for all \050non-) 1.097 WS 10 /Times-Bold SelectFont (X_String) show 10 /Times-Roman SelectFont (\051 protocol data conversions.) 1.097 WS 168 276 moveto (They convert to/from the) 0.513 WS 10 /Times-Bold SelectFont ( X_Raw_Data_Array) 0.513 WS 10 /Times-Roman SelectFont ( type.) 0.513 WS 10 /Times-Bold SelectFont ( X_Raw_Data_Array) 0.513 WS 10 /Times-Roman SelectFont ( is the data type) 0.513 WS 168 288 moveto (used for all X server communications.) show 72 306 moveto 10 /Times-Bold SelectFont 18 MX (Xlbp_U_Char_Generics) show 72 318 moveto 10 /Times-Roman SelectFont 96 MX (Instantiations of these generics are used for all \050non-) 2.031 WS 10 /Times-Bold SelectFont (X_String) show 10 /Times-Roman SelectFont (\051 conversions to/from) 2.031 WS 4.530 MX (the) show 168 330 moveto 10 /Times-Bold SelectFont (U_Char_Array) show 10 /Times-Roman SelectFont (.) show 10 /Times-Bold SelectFont ( U_Char_Array) 0.523 WS 10 /Times-Roman SelectFont ( is the data type used) 0.523 WS 3.024 MX (to hold image data and to hold non-) 0.524 WS 168 342 moveto (string resource data.) show 72 366 moveto (If length clauses are unusable, all client) 1.174 WS 3.673 MX (instantiations of the generics provided by these modules will need to be) 1.173 WS 72 378 moveto (replaced by actual procedure bodies.) show 72 402 moveto (The) show 10 /Times-Bold SelectFont ( Length_Clauses) 1.426 WS 10 /Times-Roman SelectFont ( parameter controls the length) 1.426 WS 3.927 MX (clauses provided by Xlib. This parameter causes them to be) 1.427 WS 72 414 moveto (included when set to True and excluded when) 0.174 WS 2.673 MX (set to False. It should be specified as True if length clauses exist even) 0.173 WS 72 426 moveto (in only a partially useful form.) show 72 450.760 moveto 11 /Times-Bold SelectFont (7.5.2. Record Representation Clauses) show 72 474.520 moveto 10 /Times-Roman SelectFont (Ada's record representation clauses \050LRM, Section 13.4\051 look like this:) show 108 498.520 moveto 9 /Courier SelectFont ( for <record type name> use) show 108 509.520 moveto ( record) show 108 520.520 moveto ( <field name> at <storage offset> range <1st bit> .. <Nth bit>;) show 108 531.520 moveto ( ...) show 108 542.520 moveto ( end record;) show 72 566.520 moveto 10 /Times-Roman SelectFont (The record representation clauses) 0.046 WS 2.547 MX (give the compiler an exact layout for an Ada record type. This allows us to specify) 0.047 WS 72 578.520 moveto (exactly which data bits will be used for what data field. This gives us a) 1.314 WS 3.813 MX (guarantee that the data will be laid out) 1.313 WS 72 590.520 moveto (exactly in the form we require.) show 72 614.520 moveto (All of the) 0.801 WS 3.302 MX (protocol-based record types exported by Xlib have record representation clauses. A target compiler that) 0.802 WS 72 626.520 moveto (implements these is probably an excellent target for an Xlib port.) show 72 650.520 moveto (Read the Appendix F and the Chapter 13 documentation provided by the Ada compiler vendor. This will indicate the) show 72 662.520 moveto (implementation status of) 0.463 WS 2.964 MX (record representation clauses. It will also give you the unit size for storage offsets and the) 0.464 WS 72 674.520 moveto (bit ordering that is crucial to the proper layout of the records.) show 72 698.520 moveto (If record representation clauses are not implemented, or if they do not function correctly, it may still be) 0.498 WS 2.997 MX (possible to) 0.497 WS 72 710.520 moveto (use copy operations for data conversion. It may simply be the case, as with the Rational native R1000 compiler,) 0.161 WS 2.662 MX (that) show 72 756 moveto (30) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 31 31 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 392.160 MX (Porting Milestones) show 72 72 moveto (the compiler \252just happens\272 to lay out records in the desired fashion. If) 0.587 WS 3.086 MX (the documentation does not explicitly state) 0.586 WS 72 84 moveto (this, it will be necessary to experiment.) show 72 108 moveto (If the clauses are not available, and if the compiler is) 0.931 WS 3.432 MX (not helpful, it will be necessary to reimplement the various) 0.932 WS 72 120 moveto (conversion facilities as outlined in the previous section.) show 72 144 moveto (The) show 10 /Times-Bold SelectFont ( Record_Rep_Clauses) 1.023 WS 10 /Times-Roman SelectFont ( parameter controls the record representation) 1.023 WS 3.522 MX (clauses provided by Xlib. This parameter) 1.022 WS 72 156 moveto (causes them to be included when set to True and excluded when set to False.) show 72 180 moveto (The) show 10 /Times-Bold SelectFont ( Record_Rep_Storage_Unit_8) 2.932 WS 10 /Times-Roman SelectFont ( parameter, along) 2.932 WS 5.433 MX (with other similarly named parameters \050see Chapter 5\051,) 2.933 WS 72 192 moveto (controls how the record representation clauses are) 1.375 WS 3.874 MX (laid out. The correlation between bit numbers and bytes, half) 1.374 WS 72 204 moveto (words, and words varies from target to target. Only one of the Record_Rep_Storage_Unit_@ parameters should be) 0.536 WS 72 216 moveto (set to True at one time.) show 72 240.760 moveto 11 /Times-Bold SelectFont (7.5.3. Pragma Pack) show 72 264.520 moveto 10 /Times-Roman SelectFont (The X protocol defines several array types. All array elements are 8, 16, 32, or N*32) 0.306 WS 2.805 MX (bits in length. Xlib expects all) 0.305 WS 72 276.520 moveto (such arrays to be \252packed.\272 An array of 8-bit quantities should have exactly N*8 data bits. \050It may) 0.002 WS 2.503 MX (physically occupy) 0.003 WS 72 288.520 moveto (more space and it may have a dope-vector component. However, the) 2.016 WS 4.515 MX (data must occupy N*8 contiguous bits.\051) 2.015 WS 72 300.520 moveto (Similarly there should be no gaps between 16-bit, 32-bit, or N*32-bit components in an array.) show 72 324.520 moveto (If this is the default behavior for the target Ada compiler,) 0.903 WS 3.404 MX (everything will work properly. If this is not the default) 0.904 WS 72 336.520 moveto (behavior, but if the desired behavior can be induced by the use of Ada's pragma Pack, Xlib has the) 0.197 WS 10 /Times-Bold SelectFont ( Pack) 0.197 WS 10 /Times-Roman SelectFont ( parameter.) 0.197 WS 72 348.520 moveto (Setting this to True will cause all arrays to be pragma Pack'ed.) show 72 372.520 moveto (If arrays cannot be packed by default or by the use) 0.336 WS 2.837 MX (of pragma Pack, the conversion routines targeted for the various) 0.337 WS 72 384.520 moveto (array types will need to be reimplemented. The) 0.380 WS 2.879 MX (various conversion generics assume that arrays are packed and they) 0.379 WS 72 396.520 moveto (will not function properly for unpacked arrays. Note that the) 0.057 WS 10 /Times-Bold SelectFont ( X_Raw_Data_Array) 0.057 WS 10 /Times-Roman SelectFont ( used for communication with the) 0.058 WS 72 408.520 moveto (X server is one of these array) 0.375 WS 2.874 MX (types. If that array type cannot be packed,) 0.374 WS 10 /Times-Italic SelectFont ( all) 0.374 WS 10 /Times-Roman SelectFont ( conversion routines are affected and all) 0.374 WS 72 420.520 moveto (will require reimplementation.) show 72 445.280 moveto 11 /Times-Bold SelectFont (7.5.4. Arrays of Booleans) show 72 469.040 moveto 10 /Times-Roman SelectFont (The X protocol defines various array of Boolean types. These array) 0.655 WS 3.156 MX (types are all packed with 1 bit per Boolean. If) 0.656 WS 72 481.040 moveto (the target Ada compiler does not implement packed) 0.150 WS 2.649 MX (Boolean arrays, many of the conversion routines used for server) 0.149 WS 72 493.040 moveto (input/output will need to be rewritten. The conversion generics assume that data is laid out in the desired form) 0.541 WS 3.042 MX (and) show 72 505.040 moveto (this would violate that assumption.) show 72 529.040 moveto (Here are the possible cases that have been encountered, or envisioned, so far in the history of Xlib:) show 72 553.040 moveto (\267 ) show 18 MX (Packed Boolean arrays are the default\320no work required. \050Rational R1000\051) show 72 571.040 moveto (\267 ) show 18 MX (Packed Boolean arrays are not possible\320rewrite conversions. \050Conceived\051) show 72 589.040 moveto (\267 ) show 18 MX (Pragma Pack works on Boolean arrays\320set the) show 10 /Times-Bold SelectFont ( Pack) show 10 /Times-Roman SelectFont ( parameter to True.) show 72 607.040 moveto (\267 ) show 18 MX (Package) show 10 /Times-Bold SelectFont ( System) 1.810 WS 10 /Times-Roman SelectFont ( includes a packed Boolean array type. Add a new parameter to Xlib for this target and) 1.810 WS 96 619.040 moveto (augment the declaration of each of the Xlib Boolean arrays with a redefinition using this array) 0.244 WS 2.745 MX (type. It may be) 0.245 WS 96 631.040 moveto (necessary to redefine the various) 1.693 WS 4.192 MX (enumeration index types as well. This may lead to a loss of some type) 1.692 WS 96 643.040 moveto (checking for applications but it will preserve the basic Xlib interface. \050Conceived\051) show 72 667.800 moveto 11 /Times-Bold SelectFont (7.5.5. Two-Dimensional Arrays) show 72 691.560 moveto 10 /Times-Roman SelectFont (The X protocol defines a small number of two-dimensional array types.) 2.119 WS 4.620 MX (It defines them as having row-major) 2.120 WS 72 703.560 moveto (ordering. This means that successive elements in each row are adjacent. The first dimension is) 0.573 WS 3.072 MX (the row; the second) 0.572 WS 72 715.560 moveto (dimension is the column. Element \0501,1\051 is adjacent to \0501,2\051.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (31) show EndPage %%Page: 32 32 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto (Unfortunately, Ada does not specify an array ordering. An implementation is) 0.054 WS 2.555 MX (free to use row-major or column-major) 0.055 WS 72 84 moveto (ordering. Xlib has a parameter called) 0.032 WS 10 /Times-Bold SelectFont ( Row_Major_Order) 0.032 WS 10 /Times-Roman SelectFont ( as an answer to this) 0.032 WS 2.531 MX (problem. Set it to True for a compiler) 0.031 WS 72 96 moveto (that uses row-major order. The Rational R1000 native compiler uses row-major ordering.) show 72 120 moveto (Note:) show 10 /Times-Bold SelectFont ( Row_Major_Order => False) 1.285 WS 10 /Times-Roman SelectFont ( has been implemented and compiled but, as of this writing, has never been) 1.285 WS 72 132 moveto (tested. The amount of code is about two dozen lines.) show 72 157.760 moveto 12 /Times-Bold SelectFont (7.6. Second Executable) show 72 181.520 moveto 10 /Times-Roman SelectFont (The second executable program is one that checks either \0501\051 that all data layouts are correct, or) 2.357 WS 4.856 MX (\0502\051 that all) 2.356 WS 72 193.520 moveto (handwritten data conversions are correct. Run) 1.058 WS 3.559 MX (the Ada parametizer over the library and the X_Testing subsystem) 1.059 WS 72 205.520 moveto (using the parameter values selected during the last few steps, if this has not been done already.) show 72 229.520 moveto (Xlib provides a routine to test \0501\051. If proper layout of the datatypes was not possible for this target, it is) 0.821 WS 3.320 MX (up to the) 0.820 WS 72 241.520 moveto (porting team to provide an executable that tests \0502\051.) show 72 265.520 moveto (The test for) 0.873 WS 3.374 MX (\0501\051 is embodied by the routine) 0.874 WS 10 /Times-Bold SelectFont ( Check_Machine_Assumptions) 0.874 WS 10 /Times-Roman SelectFont ( located in module) 0.874 WS 10 /Times-Bold SelectFont ( Xlbmp_Debugger) 0.874 WS 10 /Times-Roman SelectFont (.) show 72 277.520 moveto (The purpose of this routine is to check all of our assumptions about physical layout. There are checks for:) show 72 301.520 moveto (\267 ) show 18 MX (Proper sizing for all discrete types.) show 72 319.520 moveto (\267 ) show 18 MX (Proper sizing for all record types.) show 72 337.520 moveto (\267 ) show 18 MX (Proper sizing/packing for all array types that are likely candidates for unpacked implementations.) show 72 355.520 moveto (\267 ) show 18 MX (Proper) show 10 /Times-Bold SelectFont ( Bit0_Sign_Bit) show 10 /Times-Roman SelectFont ( parameter setting.) show 72 373.520 moveto (\267 ) show 18 MX (Proper) show 10 /Times-Bold SelectFont ( Byte0_Sign_Byte) show 10 /Times-Roman SelectFont ( parameter setting.) show 72 391.520 moveto (\267 ) show 18 MX (Proper) show 10 /Times-Bold SelectFont ( Row_Major_Order) show 10 /Times-Roman SelectFont ( parameter setting.) show 72 415.520 moveto (These are all of our major layout concerns. \050The code currently just assumes that,) 0.558 WS 3.057 MX (if the size of the basic types and) 0.557 WS 72 427.520 moveto (the size of the records are correct, the layout of the fields within the records must be correct.\051) show 72 451.520 moveto (The objective for this step in the porting process is to) 0.597 WS 3.098 MX (compile, load, elaborate, and execute this test. An Ada main) 0.598 WS 72 463.520 moveto (procedure of this form is sufficient for Xlib's default test:) show 108 487.520 moveto 9 /Courier SelectFont (with Text_Io; -- To verify completion.) show 108 498.520 moveto (with Xlbmp_Debugger; -- Refer to module.) show 108 509.520 moveto (use Xlbmp_Debugger;) show 108 531.520 moveto (procedure Debug_Main is) show 108 542.520 moveto (begin) show 108 564.520 moveto ( Register_Debugging_Imagers; -- Guarantee module linking.) show 108 575.520 moveto ( Text_Io.Put_Line \050"Debug_Main is done."\051;) show 108 597.520 moveto (end Debug_Main;) show 72 621.520 moveto 10 /Times-Roman SelectFont (The call on) 1.970 WS 10 /Times-Bold SelectFont ( Register_Debugging_Imagers) 1.970 WS 10 /Times-Roman SelectFont ( is necessary because some Ada linkers eliminate packages that are) 1.969 WS 72 633.520 moveto 10 /Times-Italic SelectFont (with) show 10 /Times-Roman SelectFont (ed but never actually used.) show 72 657.520 moveto (A suitable test program is provided in the) 0.322 WS 10 /Times-Bold SelectFont ( X_Testing) 0.322 WS 10 /Times-Roman SelectFont ( subsystem. The test is in the) 0.322 WS 10 /Times-Bold SelectFont ( Porting_Tests) 0.323 WS 10 /Times-Roman SelectFont ( subdirectory. It is) 0.323 WS 72 669.520 moveto (called) show 10 /Times-Bold SelectFont ( Exe_002) show 10 /Times-Roman SelectFont ( \050or) show 10 /Times-Bold SelectFont ( Exe_002.prs/.prb) show 10 /Times-Roman SelectFont ( on UNIX\051.) show 72 693.520 moveto (Once this program has successfully executed, the port will have successfully declared and tested the Xlib data) 0.133 WS 2.632 MX (types.) show 72 705.520 moveto (This is a major milestone in the porting process. In the first Xlib port, reaching and finishing this step consumed all) 0.346 WS 72 717.520 moveto (of the first man-month \050the port took two man-months\051. Achieving this means \0501\051 you now know quite) 0.657 WS 3.156 MX (a bit about) 0.656 WS 72 756 moveto (32) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 33 33 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 392.160 MX (Porting Milestones) show 72 72 moveto (the compiler; \0502\051 you've discovered how to compile Ada modules in proper dependency order;) 0.688 WS 3.189 MX (\0503\051 you've laid out) 0.689 WS 72 84 moveto (all of the Xlib types in a known fashion; \0504\051 you've discovered how to do) 1.755 WS 4.254 MX (machine-code insertions or how to) 1.754 WS 72 96 moveto (interface with a foreign language; and \0505\051 you have laid an excellent foundation for the remainder of the port.) show 72 121.760 moveto 12 /Times-Bold SelectFont (7.7. Data Conversion) show 72 145.520 moveto 10 /Times-Roman SelectFont (There are two classes of data conversions within Xlib: the conversion to/from the) 0.854 WS 10 /Times-Bold SelectFont ( X_Raw_Data_Array) 0.854 WS 10 /Times-Roman SelectFont ( data type) 0.854 WS 72 157.520 moveto (used to communicate with the X server and the conversion to/from the) 2.137 WS 10 /Times-Bold SelectFont ( U_Char_Array) 2.137 WS 10 /Times-Roman SelectFont ( data type) 2.137 WS 4.636 MX (used when) 2.136 WS 72 169.520 moveto (working with image data or with generic resource data.) show 72 193.520 moveto 10 /Times-Bold SelectFont (X_Raw_Data_Array) show 10 /Times-Roman SelectFont ( conversions are handled by) 0.805 WS 10 /Times-Bold SelectFont ( Xlbmp_Generic_Converters) 0.805 WS 10 /Times-Roman SelectFont (.) show 10 /Times-Bold SelectFont ( ) 0.805 WS 2.500 MX (U_Char_Array) show 10 /Times-Roman SelectFont ( conversions are) 0.805 WS 72 205.520 moveto (handled by) 0.556 WS 10 /Times-Bold SelectFont ( Xlbp_U_Char_Generics) 0.556 WS 10 /Times-Roman SelectFont (. The two modules are usually mirror images of) 0.556 WS 3.055 MX (each other with only the type) 0.555 WS 72 217.520 moveto (names changed.) 1.098 WS 3.599 MX (They are implemented separately in Xlib to allow for the case where the two array types do not) 1.099 WS 72 229.520 moveto (share a similar storage structure.) show 72 253.520 moveto (If you have been able to lay out all of Xlib's data types in the desired fashion,) 0.417 WS 2.916 MX (the next step is to modify the bodies) 0.416 WS 72 265.520 moveto (of these two packages. ) 0.068 WS 2.500 MX (However, if you have not been) 0.068 WS 2.569 MX (able to convince the compiler to lay them out in the preferred) 0.069 WS 72 277.520 moveto (fashion, the next step is to locate all of the clients of these two modules and reimplement them.) show 72 301.520 moveto (The test programs) 0.295 WS 2.794 MX (in the) 0.294 WS 10 /Times-Bold SelectFont ( Converters) 0.294 WS 10 /Times-Roman SelectFont ( subdirectory of the) 0.294 WS 10 /Times-Bold SelectFont ( X_Testing) 0.294 WS 10 /Times-Roman SelectFont ( subsystem should be used to test the successful) 0.294 WS 72 313.520 moveto (completion of this step. They will exercise each of the conversion routines in various ways.) show 72 338.280 moveto 11 /Times-Bold SelectFont (7.7.1. Using Optimum Layout) show 72 362.040 moveto 10 /Times-Roman SelectFont (If Xlib's data) 1.857 WS 4.358 MX (types are laid out in the desired manner, the bodies of the various conversion generics must be) 1.858 WS 72 374.040 moveto (adjusted for the target. There are three scenarios:) show 72 398.040 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Unchecked_Conversion) show 10 /Times-Roman SelectFont ( can be used for all cases. If the compiler provides this generic function, and) 0.289 WS 2.788 MX (if it can) 0.288 WS 96 410.040 moveto (be used for) 1.875 WS 4.376 MX (any arbitrary type conversion between two data objects of the same size, then the \252generic\272) 1.876 WS 96 422.040 moveto (generic code will suffice. Within each module there is a so-called) 0.127 WS 2.626 MX (\252generic\272 implementation of each procedure) 0.126 WS 96 434.040 moveto (body. That implementation makes use of) 0.443 WS 10 /Times-Bold SelectFont ( Unchecked_Conversion) 0.443 WS 10 /Times-Roman SelectFont (. In this case there is no work to) 0.443 WS 2.944 MX (do. Xlib's) 0.444 WS 96 446.040 moveto (parameterization mechanism will automatically select these \252generic\272 bodies for you.) show 72 464.040 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Unchecked_Conversion) show 10 /Times-Roman SelectFont ( cannot be used for all cases but the Ada compiler vendor provides a conversion) 1.640 WS 96 476.040 moveto (library that can) 1.005 WS 3.506 MX (be used in its place. In this case you simply add a new arm to the parameterized) 1.006 WS 10 /Times-Italic SelectFont ( if) 1.006 WS 10 /Times-Roman SelectFont ('s in the) 1.006 WS 96 488.040 moveto (package bodies. Each new arm implements the) 0.245 WS 2.744 MX (necessary conversion by utilizing the library. See the ) 0.244 WS 10 /Courier SelectFont (--/ if) 0.244 WS 96 500.040 moveto (R1000 then) show 10 /Times-Roman SelectFont ( cases for an example of such an implementation.) show 72 518.040 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Unchecked_Conversion) show 10 /Times-Roman SelectFont ( cannot be used for all cases or it is) 0.206 WS 2.707 MX (inefficient. If the compiler allows you to perform) 0.207 WS 96 530.040 moveto (machine-code insertions or) 0.535 WS 3.034 MX (if it allows you to interface to a foreign-language module, you can write a simple) 0.534 WS 96 542.040 moveto (memory-to-memory copy procedure and Xlib will use that. See the ) 0.829 WS 10 /Courier SelectFont (--/ elsif TeleGen2 then) 0.830 WS 10 /Times-Roman SelectFont ( cases) 0.830 WS 96 554.040 moveto (for an example of such an implementation.) show 72 578.040 moveto (This step is complete once you have suitably modified, compiled, and tested both packages.) show 72 602.800 moveto 11 /Times-Bold SelectFont (7.7.2. Using Nonoptimum Layout) show 72 626.560 moveto 10 /Times-Roman SelectFont (If Xlib's data types cannot be laid out in the desired) 0.752 WS 3.251 MX (manner, the two conversion packages cannot be used for this) 0.751 WS 72 638.560 moveto (target. In this case you) 0.627 WS 3.128 MX (should place a large ) 0.628 WS 10 /Courier SelectFont (--/ if not <this target> then) 0.628 WS 10 /Times-Roman SelectFont ( around the entire interface) 0.628 WS 72 650.560 moveto (and implementation of) 1.052 WS 3.551 MX (these two packages. This keeps the overall structure of your Xlib the same as every other) 1.051 WS 72 662.560 moveto (Xlib in the world.) show 72 686.560 moveto (The next step is to locate all of the clients of these interfaces and reimplement those clients. The only exports from) 0.473 WS 72 698.560 moveto (these packages are a series of generic procedures. Thus, all of the clients are) 0.642 WS 3.141 MX (generic procedure instantiations. You) 0.641 WS 72 710.560 moveto (will have to provide a body to replace each of the old generic instantiations. You should put ) 1.371 WS 10 /Courier SelectFont (--/ if) 1.371 WS 7.372 MX (<this) show 72 756 moveto 10 /Times-Roman SelectFont (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (33) show EndPage %%Page: 34 34 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto 10 /Courier SelectFont (target> then) 0.243 WS 10 /Times-Roman SelectFont ( at each generic instantiation. Your) 0.243 WS 2.742 MX (new procedure goes into the) 0.242 WS 10 /Times-Italic SelectFont ( then) 0.242 WS 10 /Times-Roman SelectFont ( arm and the old instantiation) 0.242 WS 72 84 moveto (goes into the) show 10 /Times-Italic SelectFont ( else) show 10 /Times-Roman SelectFont ( arm. Again, this keeps the overall structure of your Xlib the same as every other Xlib in the world.) show 72 108 moveto (The clients for the two packages are:) show 72 132 moveto (\267 ) show 18 MX (For) show 10 /Times-Bold SelectFont ( Xlbmp_Generic_Converters) show 10 /Times-Roman SelectFont (:) show 96 150 moveto 10 /Times-Bold SelectFont /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Base_Converters) show 96 168 moveto /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Error_Converters) show 96 186 moveto /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Event_Converters) show 96 204 moveto /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Graphic_Converters) show 96 222 moveto /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Reply_Converters) show 96 240 moveto /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Request_Converters) show 96 258 moveto /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbmp_Debugger.Check_Machine_Assumptions) show 96 276 moveto /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbmp_Generic_Converters) show 96 294 moveto /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbp_Display) show 72 312 moveto 10 /Times-Roman SelectFont (\267 ) show 18 MX (For) show 10 /Times-Bold SelectFont ( Xlbp_U_Char_Generics) show 10 /Times-Roman SelectFont (:) show 96 330 moveto 10 /Times-Bold SelectFont /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbp_U_Char_Converters) show 72 354 moveto 10 /Times-Roman SelectFont (This step is complete once you have) 1.681 WS 4.182 MX (suitably modified and compiled all clients and have modified and run all) 1.682 WS 72 366 moveto (conversion tests.) show 72 391.760 moveto 12 /Times-Bold SelectFont (7.8. Operating-System Customization) show 72 415.520 moveto 10 /Times-Roman SelectFont (There are several modules in Xlib that can be customized to suit the target operating environment. They are:) show 72 439.520 moveto 10 /Times-Bold SelectFont 18 MX (Xlbmt_Parameters) show 72 451.520 moveto 10 /Times-Roman SelectFont 96 MX (Contains operating system specific) 0.384 WS 2.883 MX (parameters. Eg. specifies appropriate input/output buffer) 0.383 WS 168 463.520 moveto (sizes.) show 72 481.520 moveto 10 /Times-Bold SelectFont 18 MX (Xlbmp_Debugger) show 72 493.520 moveto 10 /Times-Roman SelectFont 96 MX (Used as a means of including target debugger routines. For example, in the) 2.743 WS 5.244 MX (Rational) show 168 505.520 moveto (Environment it is possible for a program to provide the) 0.798 WS 3.297 MX (debugger with \252imaging\272 routines.) 0.797 WS 168 517.520 moveto (These routines are given to the debugger for the purpose of displaying specific) 0.882 WS 3.383 MX (data types.) 0.883 WS 168 529.520 moveto (When the debugger) 0.155 WS 2.654 MX (is preparing to display the value of a variable of some type, it would use) 0.154 WS 168 541.520 moveto (such a routine in preference to) 0.600 WS 3.101 MX (it's default imaging routine. In this way, a user, application,) 0.601 WS 168 553.520 moveto (or library can customize the presentation of debugging information.) show 72 571.520 moveto 10 /Times-Bold SelectFont 18 MX (Xlbmp_Environment) show 72 583.520 moveto 10 /Times-Roman SelectFont 96 MX (This package captures) 1.100 WS 3.599 MX (certain types of knowledge that are specific to individual operating) 1.099 WS 168 595.520 moveto (systems. Eg. what) 1.142 WS 3.643 MX (characters, if any, are placed between a directory name and a filename) 1.143 WS 168 607.520 moveto (when the two are concatenated to form a fully qualified filename?) show 72 625.520 moveto 10 /Times-Bold SelectFont 18 MX (Xlbmp_Error_Log) show 72 637.520 moveto 10 /Times-Roman SelectFont 96 MX (This package is used for all of Xlib's error) 0.100 WS 2.599 MX (reporting. It uses) 0.099 WS 10 /Times-Bold SelectFont ( Text_Io) 0.099 WS 10 /Times-Roman SelectFont ( by default but it can be) 0.099 WS 168 649.520 moveto (customized to fit into any operating system's conventions.) show 72 673.520 moveto (See the individual package bodies for an explanation of each system) 1.743 WS 4.244 MX (dependent parameter, routine or function.) 1.744 WS 72 685.520 moveto (Completion of this step can take anywhere from a few minutes) 0.711 WS 3.210 MX (to several days, depending upon the complexity of) 0.710 WS 72 697.520 moveto (the target system and your desire to extensively customize the library.) show 72 756 moveto (34) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 35 35 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 392.160 MX (Porting Milestones) show 72 72 moveto (Only) show 10 /Times-Bold SelectFont ( Xlbmt_Parameters must) show 10 /Times-Roman SelectFont ( be modified for a new target. Examine and modify these packages as appropriate.) show 72 97.760 moveto 12 /Times-Bold SelectFont (7.9. X Server Input/Output) show 72 121.520 moveto 10 /Times-Roman SelectFont (The next step is to actually write the code that will be used to communicate with the server. This was discussed) 1.139 WS 72 133.520 moveto (previously in section 7.1.3. There are sample implementations of these facilities for the) 1.424 WS 3.923 MX (Rational R1000 and for) 1.423 WS 72 145.520 moveto (SunOS using the TeleGen2 compiler. \050Other implementations will be added as they come up.\051) show 72 169.520 moveto (Public data types are declared in) 0.244 WS 10 /Times-Bold SelectFont ( Xlbmt_Network_Types) 0.245 WS 10 /Times-Roman SelectFont (. These are types that are required for performing network) 0.245 WS 72 181.520 moveto (input/output once a connection has been established.) show 72 205.520 moveto (Non-public data types are declared in) 0.281 WS 10 /Times-Bold SelectFont ( Xlbmt_Transport_Defs) 0.281 WS 10 /Times-Roman SelectFont (. These are types that) 0.281 WS 2.780 MX (may be required while opening) 0.280 WS 72 217.520 moveto (a connection \050or closing it or otherwise \252controlling\272 it\051 but which are not required for input and output.) show 72 241.520 moveto (Opening and closing connections is handled by routines in) show 10 /Times-Bold SelectFont ( Xlbmp_Internal) show 10 /Times-Roman SelectFont (.) show 72 265.520 moveto (Reading and writing is performed by routines in) show 10 /Times-Bold SelectFont ( Xlbmp_Network_Interface) show 10 /Times-Roman SelectFont (.) show 72 291.280 moveto 12 /Times-Bold SelectFont (7.10. Procedure Variables) show 72 315.040 moveto 10 /Times-Roman SelectFont (Xlib's extensibility features) 0.475 WS 2.976 MX (are largely a result of the flexibility allowed by procedure variables. Ada does not pro-) 0.476 WS 72 327.040 moveto (vide procedure variables as part of the language) show 8 /Times-Roman SelectFont 0 -3 rmoveto (5) show 0 3 rmoveto 10 /Times-Roman SelectFont (, so Xlib provides its own implementation of procedure variables.) show 72 351.040 moveto (The implementation of procedure variables is extremely machine- and compiler-dependent. Porting) 0.791 WS 3.290 MX (the procedure-) 0.790 WS 72 363.040 moveto (variable facility to your target will require a complete) 0.883 WS 3.384 MX (understanding of the calling conventions used by the target) 0.884 WS 72 375.040 moveto (compiler. It is entirely possible that two) 2.015 WS 4.514 MX (different Ada compilers for the same machine would use completely) 2.014 WS 72 387.040 moveto (different calling sequences. You will need detailed documentation from your Ada compiler vendor.) show 72 411.040 moveto (Beginning with version 6_0_0 of the X library, an extensive series) 0.694 WS 3.195 MX (of tests, specifically targeting the testing of the) 0.695 WS 72 423.040 moveto (procedure-variable facilities, can be found in the) 2.918 WS 10 /Times-Bold SelectFont ( X_Testing) 2.918 WS 10 /Times-Roman SelectFont ( subsystem. The tests are in) 2.918 WS 5.417 MX (the) show 10 /Times-Bold SelectFont ( Porting_Tests) 2.917 WS 72 435.040 moveto 10 /Times-Roman SelectFont (subdirectory. These) 0.730 WS 3.231 MX (are the) 0.731 WS 10 /Times-Bold SelectFont ( Exe_100) 0.731 WS 10 /Times-Roman SelectFont (,) show 10 /Times-Bold SelectFont ( Exe_200) 0.731 WS 10 /Times-Roman SelectFont (,) show 10 /Times-Bold SelectFont ( Exe_300) 0.731 WS 10 /Times-Roman SelectFont ( test series \050named) 0.731 WS 10 /Times-Bold SelectFont ( Exe_100.prs/.prb) 0.731 WS 10 /Times-Roman SelectFont (,) show 10 /Times-Bold SelectFont ( Exe_200.prs/.prb) 0.731 WS 10 /Times-Roman SelectFont (,) show 72 447.040 moveto (and) show 10 /Times-Bold SelectFont ( Exe_300.prs/.prb) 0.323 WS 10 /Times-Roman SelectFont ( on) 0.323 WS 2.822 MX (UNIX\051. There are more than 75 individual tests in this series. Once all of these tests have) 0.322 WS 72 459.040 moveto (been run successfully, you can be) 0.984 WS 3.485 MX (confident that your implementation of procedure variables has been adequately) 0.985 WS 72 471.040 moveto (tested.) show 72 495.040 moveto 10 /Times-BoldItalic SelectFont (Note:) show 10 /Times-Italic SelectFont ( The) show 10 /Times-BoldItalic SelectFont ( Debug) show 10 /Times-Italic SelectFont ( parameter must be specified as True for these tests to proceed successfully.) show 72 519.800 moveto 11 /Times-Bold SelectFont (7.10.1. Required Information) show 72 543.560 moveto 10 /Times-Roman SelectFont (These are the basic items of information that you need to know:) show 72 567.560 moveto (\267 ) show 18 MX (What does Ada's) 1.089 WS 3.588 MX ('Address attribute give you when used on a procedure? The LRM, Section 13.7.2, states:) 1.088 WS 96 579.560 moveto (\252this value refers to the machine code associated with the corresponding) 3.309 WS 5.810 MX (body or statement.\272 If the) 3.310 WS 96 591.560 moveto (implementors of a compiler were somewhat casual with this attribute, it may or) 0.827 WS 3.326 MX (may not give you what you) 0.826 WS 96 603.560 moveto (need. For example, a VAX) 1.050 WS /trademark SYM 9.800 MX ( precedes every) 1.050 WS 3.551 MX (procedure with a 16-bit register mask. Here's the question: Is) 1.051 WS 96 615.560 moveto (that mask part of \252the machine code associated) 1.010 WS 3.509 MX (with the corresponding body\272? Yes and no are both correct) 1.009 WS 96 627.560 moveto (answers. The real question is what answer does your compiler give? Most compilers) 0.435 WS 2.936 MX (will give you \252what you) 0.436 WS 96 639.560 moveto (need\272 when 'Address is used on a procedure, but you need to be) 1.283 WS 3.782 MX (aware of the other possibility. The basic) 1.282 WS 96 651.560 moveto (requirement is that) 0.921 WS 3.422 MX (there must be a way to obtain the calling address of a procedure. On a VAX, that is the) 0.922 WS 96 663.560 moveto (address of the mask, not the address of the machine code.) show 72 702 moveto (____________________________________________) show 72 720 moveto 8 /Times-Roman SelectFont 0 -3 rmoveto (5) show 0 3 rmoveto ( One of the action items for Ada 9X is the introduction of procedure variables into the language.) show 72 756 moveto 10 /Times-Roman SelectFont (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (35) show EndPage %%Page: 36 36 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto (\267 ) show 18 MX (Where do the arguments go? Some compilers place) 0.780 WS 3.279 MX (arguments on the stack, some use registers, others use a) 0.779 WS 96 84 moveto (combination, and still others allocate heap storage.) 0.705 WS 3.206 MX (What does your compiler do? For) 0.706 WS 10 /Times-Italic SelectFont ( in) 0.706 WS 10 /Times-Roman SelectFont ( parameters? For) 0.706 WS 10 /Times-Italic SelectFont ( out) 0.706 WS 96 96 moveto 10 /Times-Roman SelectFont (parameters? For) 0.356 WS 10 /Times-Italic SelectFont ( in out) 0.356 WS 10 /Times-Roman SelectFont ( parameters? For parameters with unconstrained subtypes? To be able to call a) 0.356 WS 2.855 MX (piece of) 0.355 WS 96 108 moveto (code, you need to be able to position the arguments where they will be expected.) show 72 126 moveto (\267 ) show 18 MX (What context is required? Some implementations have the concept of a) 0.134 WS 2.635 MX (\252base register.\272 This base register may) 0.135 WS 96 138 moveto (point to a global data area or it may point to the \252lexical level 0\272 data for the nearest statically enclosing) 1.398 WS 96 150 moveto (package or it may point to something else. The basic need) 0.328 WS 2.829 MX (is to understand what setup is \050or may be\051 required) 0.329 WS 96 162 moveto (for the calling of a function or procedure. It may be necessary to save, reinitialize, utilize, and then restore the) 0.260 WS 96 174 moveto (contents of one or more hardware registers when calling some arbitrary procedure.) show 72 192 moveto (\267 ) show 18 MX (Where do function results go? Are results returned in registers, on the stack, in the heap, or) 0.521 WS 3.022 MX (somewhere else?) 0.522 WS 96 204 moveto (Does the placement of the results depend) 1.524 WS 4.023 MX (on the type? Does the placement depend on whether or not the) 1.523 WS 96 216 moveto (subtype is constrained?) show 72 234 moveto (\267 ) show 18 MX (What setup is required by the machine? Do you have to set hardware controls or registers? What) 1.586 WS 4.087 MX (are the) 1.587 WS 96 246 moveto (mechanical details of the calling convention\050s\051?) show 72 270 moveto (All of these questions require answers. For most machines and compilers,) 0.156 WS 2.655 MX (the answers are: \252Does not apply.\272 But be) 0.155 WS 72 282 moveto (aware of the questions.) show 72 306.760 moveto 11 /Times-Bold SelectFont (7.10.2. Use of Procedure Variables) show 72 330.520 moveto 10 /Times-Roman SelectFont (There are many different types of procedure variables in Xlib. Each type corresponds to a different procedure) 1.880 WS 72 342.520 moveto (signature. For example, a procedure variable that was capable of pointing to procedures taking a) 1.652 WS 4.151 MX (single integer) 1.651 WS 72 354.520 moveto (argument would have a different type than one that pointed to procedures taking two integer values.) show 72 378.520 moveto (Xlib limits itself to implementing a small number of signature template generics. For instance, it has one template) 0.750 WS 72 390.520 moveto (for procedures with one) 0.670 WS 10 /Times-Italic SelectFont ( in) 0.670 WS 10 /Times-Roman SelectFont ( parameter, one for two) 0.670 WS 10 /Times-Italic SelectFont ( in) 0.670 WS 10 /Times-Roman SelectFont ( parameters, another for one) 0.670 WS 10 /Times-Italic SelectFont ( in) 0.670 WS 10 /Times-Roman SelectFont ( and one) 0.670 WS 10 /Times-Italic SelectFont ( out) 0.670 WS 10 /Times-Roman SelectFont ( parameter, and so) 0.670 WS 72 402.520 moveto (on. These templates are implemented as generic packages. You instantiate the desired generic package with the) 1.522 WS 72 414.520 moveto (appropriate formal) 1.328 WS 3.827 MX (argument types and you create a new type of procedure variable. This approach allows us to) 1.327 WS 72 426.520 moveto (reimplement each calling signature independently, if that should be required. To date, this has not been required.) show 72 450.520 moveto (To obtain procedure-variable values that point to particular procedures,) 0.676 WS 3.177 MX (you simply instantiate the generic function) 0.677 WS 72 462.520 moveto (that is provided by the appropriately) 0.336 WS 2.835 MX (instantiated procedure-variable package. This function is called) 0.335 WS 10 /Times-Bold SelectFont ( Value) 0.335 WS 10 /Times-Roman SelectFont (. It takes) 0.335 WS 72 474.520 moveto (a single formal argument, the procedure that you want to point to with the new value.) show 72 498.520 moveto (Once you have obtained a procedure-variable value,) 0.096 WS 2.597 MX (you can invoke that procedure by use of the) 0.097 WS 10 /Times-Bold SelectFont ( Call) 0.097 WS 10 /Times-Roman SelectFont ( procedure that) 0.097 WS 72 510.520 moveto (was also provided by the instantiated package. The) 1.114 WS 10 /Times-Bold SelectFont ( Call) 1.114 WS 10 /Times-Roman SelectFont ( procedure takes all of the same parameters as) 1.114 WS 3.613 MX (the target) 1.113 WS 72 522.520 moveto (procedure along with) 0.777 WS 3.278 MX (an additional parameter. That additional parameter is the procedure-variable value. The) 0.778 WS 10 /Times-Bold SelectFont ( Call) 0.778 WS 72 534.520 moveto 10 /Times-Roman SelectFont (procedure uses the contents of the procedure-variable value to determine the context and the address) 0.919 WS 3.418 MX (of the target) 0.918 WS 72 546.520 moveto (procedure. It uses these to transfer control to that procedure. Depending on the implementation, the) 0.558 WS 3.059 MX (procedure may) 0.559 WS 72 558.520 moveto (return directly to the original caller or it may return to) 1.140 WS 3.639 MX (the) show 10 /Times-Bold SelectFont ( Call) 1.139 WS 10 /Times-Roman SelectFont ( procedure, which then will return to the original) 1.139 WS 72 570.520 moveto (caller.) show 72 594.520 moveto (Procedure-variable values occupy heap memory \050at the option of) 0.732 WS 3.233 MX (the implementation\051, so a) 0.733 WS 10 /Times-Bold SelectFont ( Free) 0.733 WS 10 /Times-Roman SelectFont ( procedure is pro-) 0.733 WS 72 606.520 moveto (vided that should be used to deallocate them when they are no longer necessary.) show 72 630.520 moveto 10 /Times-BoldItalic SelectFont (Note:) show 10 /Times-Italic SelectFont ( It is not absolutely necessary to implement the various generics from) 2.185 WS 10 /Times-BoldItalic SelectFont ( Xlbt_Proc_Var) 2.185 WS 10 /Times-Italic SelectFont (. This is the most) 2.185 WS 72 642.520 moveto (desirable situation, but it is not absolutely required. If it is impossible, or at least) 1.832 WS 4.333 MX (very difficult, to implement) 1.833 WS 72 654.520 moveto (procedure variables as generics, then it is permissible to replace and) 2.081 WS 4.580 MX (implement just the instantiations of the) 2.080 WS 72 666.520 moveto (generics. This means that the package) 0.352 WS 10 /Times-BoldItalic SelectFont ( Xlbt_Proc_Var) 0.352 WS 10 /Times-Italic SelectFont ( will not be available in your version of) 0.352 WS 2.853 MX (Xlib. This package is) 0.353 WS 72 678.520 moveto (not a part of the \252guaranteed portable\272) 2.529 WS 5.028 MX (interface, so applications that expect to use it are, in some sense,) 2.528 WS 72 690.520 moveto (nonportable.) show 72 756 moveto 10 /Times-Roman SelectFont (36) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 37 37 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 392.160 MX (Porting Milestones) show 72 72 moveto (To proceed in this manner, you will need to implement a package, possibly) 1.543 WS 4.044 MX (in machine code, that provides the) 1.544 WS 72 84 moveto (specific interface provided by each of the generic package) 1.909 WS 4.408 MX (instantiations found in) 1.908 WS 10 /Times-Bold SelectFont ( Xlbp_Proc_Var) 1.908 WS 10 /Times-Roman SelectFont (. The larger) 1.908 WS 72 96 moveto (portion of each) 1.981 WS 4.482 MX (package is machine-independent. You can simply copy that portion of each package from the) 1.982 WS 72 108 moveto (generic bodies in) show 10 /Times-Bold SelectFont ( Xlbt_Proc_Var) show 10 /Times-Roman SelectFont (.) show 72 132 moveto (The machine-dependent portion will be written using assembly-language or machine-language insertions.) 0.001 WS 2.500 MX (To do this,) show 72 144 moveto (you must know what) 1.852 WS 4.353 MX (machine code needs to be used. There is a very simple way to do this. Write a generic) 1.853 WS 72 156 moveto (procedure that takes the same) 0.343 WS 2.842 MX (arguments as the) 0.342 WS 10 /Times-Bold SelectFont ( Call) 0.342 WS 10 /Times-Roman SelectFont ( procedure from some generic in) 0.342 WS 10 /Times-Bold SelectFont ( Xlbt_Proc_Var) 0.342 WS 10 /Times-Roman SelectFont (. It will take a) 0.342 WS 72 168 moveto (formal procedure argument, which is the procedure) 2.387 WS 4.888 MX (to call. The body of the generic simply calls the formal) 2.388 WS 72 180 moveto (procedure. Instantiate this generic and compile) 0.854 WS 3.353 MX (it. Have the compiler produce an assembly-language listing of this) 0.853 WS 72 192 moveto (instantiation. That listing provides you with exactly the machine code that you need to generate for your package.) show 72 216 moveto (It is recommended that you instantiate the generic two ways: \0501\051 instantiate it) 0.078 WS 2.579 MX (using a normal procedure and examine) 0.079 WS 72 228 moveto (the code; \0502\051 instantiate it using a nested procedure \050a procedure within another procedure\051) 0.772 WS 3.271 MX (and examine the code.) 0.771 WS 72 240 moveto (Use the more general of the two results to ensure that your code works in all situations.) show 72 264.760 moveto 11 /Times-Bold SelectFont (7.10.3. Sample Implementation) show 72 288.520 moveto 10 /Times-Roman SelectFont (As a sample implementation of) 0.298 WS 2.799 MX (the procedure-variable package, we will examine the TeleGen2 port. The target was) 0.299 WS 72 300.520 moveto (the MC680x0 architecture running SunOS \050UNIX\051.) show 72 324.280 moveto 10 /Times-Bold SelectFont (7.10.3.1. Details of the Calling Sequence) show 72 348.040 moveto 10 /Times-Roman SelectFont (The pertinent details of the calling sequence for this machine and compiler are:) show 72 372.040 moveto (\267 ) show 18 MX (Register A4 may or may not contain a base pointer. The safe thing to do is to always supply) 0.683 WS 3.182 MX (a proper value.) 0.682 WS 96 384.040 moveto (The proper value is easily) 0.551 WS 3.052 MX (obtained when the pertinent) 0.552 WS 10 /Times-Bold SelectFont ( Value) 0.552 WS 10 /Times-Roman SelectFont ( function is called to generate a new procedure-) 0.552 WS 96 396.040 moveto (variable value. The) 1.286 WS 10 /Times-Bold SelectFont ( Value) 1.286 WS 10 /Times-Roman SelectFont ( function is a generic that was instantiated in the context of the) 1.286 WS 3.785 MX (procedure. And,) 1.285 WS 96 408.040 moveto (when) show 10 /Times-Bold SelectFont ( Value) 1.281 WS 10 /Times-Roman SelectFont ( is called, it will itself have the) 1.281 WS 3.782 MX (same A4 value as would be required by the procedure.) 1.282 WS 10 /Times-Bold SelectFont ( Value) 1.282 WS 96 420.040 moveto 10 /Times-Roman SelectFont (simply saves the A4 value) 1.818 WS 4.317 MX (as part of the procedure-variable value. The other part is the 'Address of the) 1.817 WS 96 432.040 moveto (procedure.) show 72 450.040 moveto (\267 ) show 18 MX (Register A6 is always used as a \252link\272 register \050as defined by the MC680x0 architecture\051.) show 72 468.040 moveto (\267 ) show 18 MX (Arguments to procedures and functions are placed onto the) 2.136 WS 4.637 MX (stack in strict left-to-right order. Arguments) 2.137 WS 96 480.040 moveto (always occupy a full word) 0.938 WS 3.437 MX (unless two successive arguments will each fit into a half word; these are packed) 0.937 WS 96 492.040 moveto (two to a word. Argument lists are always N*4 bytes in length. If the first argument is a half-word argument, it) 0.217 WS 96 504.040 moveto (is placed into the second half word of the argument list and the argument pointer will point there rather than to) 0.092 WS 96 516.040 moveto (the first half word of the argument list.) show 72 534.040 moveto 10 /Times-Italic SelectFont (\267 ) show 18 MX (Out) show 10 /Times-Roman SelectFont ( and) show 10 /Times-Italic SelectFont ( in out) show 10 /Times-Roman SelectFont ( parameters are passed as copy-in-copy-out, if small, and by-reference otherwise.) show 72 552.040 moveto (\267 ) show 18 MX (Function return values are returned in registers D0 \050and D1 if large enough\051 unless they have) 0.094 WS 2.595 MX (an unconstrained) 0.095 WS 96 564.040 moveto (subtype. In that case they are returned on the stack if less than some size and returned on the heap otherwise.) 0.455 WS 96 576.040 moveto (The caller takes responsibility for deallocating heap results.) show 72 594.040 moveto (\267 ) show 18 MX (Procedures and functions are called simply by jumping to their 'Address;) 0.179 WS 2.680 MX (no additional offset or dereferencing) 0.180 WS 96 606.040 moveto (is required.) show 72 629.800 moveto 10 /Times-Bold SelectFont (7.10.3.2. Sample Package Body) show 72 653.560 moveto 10 /Times-Roman SelectFont (Here is a sample of one generic body. This is the body of the generic package that is used) 0.382 WS 2.881 MX (to create new procedure-) 0.381 WS 72 665.560 moveto (variable types that accept three) 0.719 WS 10 /Times-Italic SelectFont ( in) 0.719 WS 10 /Times-Roman SelectFont ( parameters and two) 0.719 WS 10 /Times-Italic SelectFont ( out) 0.719 WS 10 /Times-Roman SelectFont ( parameters.) 0.719 WS 3.220 MX (It shows where and how we get the context) 0.720 WS 72 677.560 moveto (and the calling address for a) 1.566 WS 4.065 MX (procedure. It also shows how we implement strong type checking so that we will) 1.565 WS 72 689.560 moveto (\050probably\051 not jump into \252hyperspace\272 if we are passed an invalid or dangling pointer) 0.558 WS 3.059 MX (to an old procedure-variable) 0.559 WS 72 701.560 moveto (value. It also shows how the Ada portion of a procedure-variable call will function.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (37) show EndPage %%Page: 38 38 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 108 83 moveto 9 /Courier SelectFont (package body Proc_In_In_In_Out_Out is) show 108 105 moveto ( -- Obtain a unique signature value just for us.) show 108 116 moveto ( Signature : constant X_Procedure_Signature :=) show 108 127 moveto ( X_Unique_Procedure_Signature;) show 108 149 moveto ( -- External assembly routine that implements a call.) show 108 160 moveto ( procedure Invoke_Subprog \050Subprog : System.Address;) show 108 171 moveto ( A4 : System.Address;) show 108 182 moveto ( Arg1 : System.Address\051;) show 108 193 moveto ( pragma Interface \050Assembly, Invoke_Subprog\051;) show 108 204 moveto ( pragma Linkname \050Invoke_Subprog, "_Xlbmt_InOut_Invoke_Procedure"\051;) show 108 226 moveto ( -- External assembly routine that read A4 register.) show 108 237 moveto ( function Get_A4 return System.Address;) show 108 248 moveto ( pragma Interface \050Assembly, Get_A4\051;) show 108 259 moveto ( pragma Linkname \050Get_A4, "_Xlbmt_Get_A4"\051;) show 108 281 moveto ( -- Our CALL interface.) show 108 292 moveto ( procedure Call \050Pvv : Pv;) show 108 303 moveto ( Data1 : in Parm1;) show 108 314 moveto ( Data2 : in Parm2;) show 108 325 moveto ( Data3 : in Parm3;) show 108 336 moveto ( Data4 : out Parm4;) show 108 347 moveto ( Data5 : out Parm5\051 is) show 108 369 moveto ( begin) show 108 380 moveto ( if Pvv = None or else -- argument NULL) show 108 391 moveto ( Pvv.Key /= Magic_Value or else -- argument bad) show 108 402 moveto ( Pvv.Data.Key /= Magic_Value or else -- argument bad) show 108 413 moveto ( Pvv.Data.Sig /= Signature then -- argument wrong type) show 108 424 moveto ( raise X_Bad_Procedure_Variable;) show 108 435 moveto ( end if;) show 108 446 moveto ( Invoke_Subprog \050Pvv.Data.Subprog, -- call this procedure) show 108 457 moveto ( Pvv.Data.A4, -- use this context) show 108 468 moveto ( Data1'Address\051; -- 1st argument this address) show 108 479 moveto ( end Call;) show 108 501 moveto ( -- Our VALUE interface; body of a generic.) show 108 512 moveto ( function Value return Pv is) show 108 523 moveto ( Pvr : X_Procedure_Variable;) show 108 534 moveto ( begin) show 108 545 moveto ( Pvr := New_Procedure_Data \050Signature, -- type signature) show 108 556 moveto ( Called'Address,-- procedure address) show 108 567 moveto ( Get_A4 \051; -- procedure context) show 108 578 moveto ( return Pv \050Pvr\051;) show 108 589 moveto ( exception) show 108 600 moveto ( when others =>) show 108 611 moveto ( Heap_Free_X_Procedure_Data \050Pvr.Data\051;) show 108 622 moveto ( Heap_Free_X_Procedure_Variable \050Pvr\051;) show 108 633 moveto ( raise;) show 108 644 moveto ( end Value;) show 72 756 moveto 10 /Times-Roman SelectFont (38) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 39 39 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 392.160 MX (Porting Milestones) show 108 83 moveto 9 /Courier SelectFont ( -- Our FREE interface.) show 108 94 moveto ( procedure Free \050Pvv : in out Pv\051 is) show 108 105 moveto ( begin) show 108 116 moveto ( if Pvv = None or else -- argument NULL) show 108 127 moveto ( Pvv.Key /= Magic_Value or else -- argument bad) show 108 138 moveto ( Pvv.Data.Key /= Magic_Value or else -- argument bad) show 108 149 moveto ( Pvv.Data.Sig /= Signature then -- argument wrong type) show 108 160 moveto ( raise X_Bad_Procedure_Variable;) show 108 171 moveto ( end if;) show 108 182 moveto ( Free_X_Procedure_Variable \050X_Procedure_Variable \050Pvv\051\051;) show 108 193 moveto ( end Free;) show 108 215 moveto ( -- Convert to "generic" procedure-variable type.) show 108 226 moveto ( function To_Pv \050Pvv : X_Procedure_Variable\051 return Pv is) show 108 237 moveto ( begin) show 108 248 moveto ( if Pvv = None_X_Procedure_Variable then) show 108 259 moveto ( return none;) show 108 270 moveto ( elsif Pvv.Key /= Magic_Value or else) show 108 281 moveto ( Pvv.Data.Key /= Magic_Value or else) show 108 292 moveto ( Pvv.Data.Sig /= Signature then) show 108 303 moveto ( raise X_Bad_Procedure_Variable;) show 108 314 moveto ( end if;) show 108 325 moveto ( return Pv \050Pvv\051;) show 108 336 moveto ( end To_Pv;) show 108 358 moveto ( -- Convert from "generic" procedure-variable type.) show 108 369 moveto ( function From_Pv \050Pvv : Pv\051 return X_Procedure_Variable is) show 108 380 moveto ( begin) show 108 391 moveto ( if Pvv = None then) show 108 402 moveto ( return None_X_Procedure_Variable;) show 108 413 moveto ( elsif Pvv.Key /= Magic_Value or else) show 108 424 moveto ( Pvv.Data.Key /= Magic_Value or else) show 108 435 moveto ( Pvv.Data.Sig /= Signature then) show 108 446 moveto ( raise X_Bad_Procedure_Variable;) show 108 457 moveto ( end if;) show 108 468 moveto ( return X_Procedure_Variable \050Pvv\051;) show 108 479 moveto ( end From_Pv;) show 108 501 moveto (end Proc_In_In_In_Out_Out;) show 72 525 moveto 10 /Times-Bold SelectFont (7.10.3.3. Sample Context Support) show 72 548.760 moveto 10 /Times-Roman SelectFont (The) show 10 /Times-Bold SelectFont ( Get_A4) 1.816 WS 10 /Times-Roman SelectFont ( routine referenced in the preceding section is implemented in assembler. Here is the body) 1.816 WS 4.315 MX (of the) 1.815 WS 72 560.760 moveto (routine. This particular routine could have been done with machine-code insertions.) show 108 584.760 moveto 9 /Courier SelectFont (|---For use with TeleGen2 on 68K UNIX) show 108 595.760 moveto (|) show 108 606.760 moveto (| Called to obtain a copy of some context's A4 register. That is the register) show 108 617.760 moveto (| that is the static display for the local Lex-Level-0 data.) show 108 639.760 moveto ( .data) show 108 650.760 moveto ( .text) show 108 661.760 moveto ( .proc) show 72 756 moveto 10 /Times-Roman SelectFont (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (39) show EndPage %%Page: 40 40 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 108 83 moveto 9 /Courier SelectFont (|---Usage:) show 108 94 moveto (| A := Xlbmt_Get_A4;) show 108 116 moveto ( .globl _Xlbmt_Get_A4) show 108 127 moveto (_Xlbmt_Get_A4:) show 108 149 moveto ( movel a4,d0 | Place A4 in the return register) show 108 160 moveto ( rts | Return) show 108 182 moveto ( .data) show 72 206 moveto 10 /Times-Bold SelectFont (7.10.3.4. Sample Call Support) show 72 229.760 moveto 10 /Times-Roman SelectFont (The) show 10 /Times-Bold SelectFont ( Invoke_Subprog) 0.451 WS 10 /Times-Roman SelectFont ( routine) 0.451 WS 2.952 MX (referenced in the preceding section is implemented in assembler. Here is the body of) 0.452 WS 72 241.760 moveto (the routine. This particular routine could not be readily) 2.715 WS 5.214 MX (implemented using machine-code insertions because) 2.714 WS 72 253.760 moveto ('Address did not work with statement labels for this target compiler. This makes writing loops very difficult.) show 108 277.760 moveto 9 /Courier SelectFont (|---For use with TeleGen2 on 68K Unix) show 108 288.760 moveto (|) show 108 299.760 moveto (| Used to invoke a procedure variable \050procedure, not function\051 that has any) show 108 310.760 moveto (| kind of IN, OUT, or IN OUT parameters. This is the most general form and) show 108 321.760 moveto (| it will work properly with any procedure.) show 108 343.760 moveto ( .data) show 108 354.760 moveto ( .text) show 108 365.760 moveto ( .proc) show 108 398.760 moveto (|---Usage:) show 108 409.760 moveto (| Xlbmt_InOut_Invoke_Procedure\050 Subprogram'Address,) show 108 420.760 moveto (| Subprogram_A4,) show 108 431.760 moveto (| First_Argument'Address \051) show 108 442.760 moveto (|) show 108 453.760 moveto (| Note: Must have at least one argument!) show 108 475.760 moveto ( .globl _Xlbmt_InOut_Invoke_Procedure) show 108 486.760 moveto (_Xlbmt_InOut_Invoke_Procedure:) show 108 508.760 moveto (|---Standard Ada prologue) show 108 530.760 moveto ( link a6,#-4) show 108 541.760 moveto ( moveml #0x00C8,sp@-) show 108 552.760 moveto ( movl sp,a6@\050-4\051) show 108 574.760 moveto (|---Sometimes the argument list is not on a 32-bit boundary. Adjust our) show 108 585.760 moveto (| argument address to be on a 32-bit boundary.) show 108 607.760 moveto ( addl #2,a6@\0508\051 | Add 2 to the address) show 108 618.760 moveto ( andl #-4,a6@\0508\051 | Modulo-4; 32-bit boundary) show 108 640.760 moveto (|---Get address of the first argument in a0; then get address of first) show 108 651.760 moveto (| location past the last argument in a1.) show 108 673.760 moveto ( movl a6@\0508\051,a0 | Get address of first argument) show 108 684.760 moveto ( movl a6@,a1 | Get caller's A6 register) show 108 695.760 moveto ( addql #8,a1 | Get addr of last word in Nth argument) show 72 756 moveto 10 /Times-Roman SelectFont (40) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 41 41 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 392.160 MX (Porting Milestones) show 108 83 moveto 9 /Courier SelectFont (|---Sometimes the end of the list is not on a 32-bit boundary. Adjust our) show 108 94 moveto (| starting address to have the same offset; we know we are passing words.) show 108 116 moveto ( movl a1,d0 | Get our ending address) show 108 127 moveto ( andl #3,d0 | Keep the bottom 2 bits) show 108 138 moveto ( addl d0,a0 | Add that offset to the starting addr) show 108 160 moveto (|---Push our arguments onto the stack again so that we can call the subprogram) show 108 171 moveto (| and it can access them. Loop until A0==A1.) show 108 193 moveto (L16:) show 108 204 moveto ( movl a0@-,sp@-) show 108 215 moveto ( cmpl a0,a1) show 108 226 moveto ( jlt L16) show 108 248 moveto (|---Set A4 for our subroutine and then call it. A routine with all IN) show 108 259 moveto (| parameters will pop them all off itself. Check the SP when it gets back.) show 108 281 moveto ( movl a6@\05012\051,a4) show 108 292 moveto ( movl a6@\05016\051,a0) show 108 303 moveto ( jsr a0@) show 108 314 moveto ( cmpl a6@\050-4\051,sp | Check stack; Ada pops all IN parameters) show 108 325 moveto ( jeq L20) show 108 358 moveto (|---Get address of the first argument in A0; then get address of first) show 108 369 moveto (| location past the last argument in A1.) show 108 391 moveto ( movl a6@\0508\051,a0 | Get address of first argument) show 108 402 moveto ( movl a6@,a1 | Get caller's A6 register) show 108 413 moveto ( addql #8,a1 | Get addr of last word in Nth argument) show 108 435 moveto (|---Sometimes the end of the list is not on a 32-bit boundary. Adjust our) show 108 446 moveto (| starting address to have the same offset; we know we are passing words.) show 108 468 moveto ( movl a1,d0 | Get our ending address) show 108 479 moveto ( andl #3,d0 | Keep the bottom 2 bits) show 108 490 moveto ( addl d0,a0 | Add that offset to the starting addr) show 108 512 moveto (|---Pop its arguments into our arguments again so that we can return the) show 108 523 moveto (| results. Loop until A0==A1.) show 108 545 moveto (L18:) show 108 556 moveto ( movl sp@+,a1@+) show 108 567 moveto ( cmpl a0,a1) show 108 578 moveto ( jlt L18) show 108 600 moveto (|---Standard Ada epilogue.) show 108 622 moveto (L20:) show 108 633 moveto ( moveml sp@+,#0x1300) show 108 644 moveto ( unlk a6) show 108 655 moveto ( rts) show 72 681 moveto 12 /Times-Bold SelectFont (7.11. Third Executable) show 72 704.760 moveto 10 /Times-Roman SelectFont (The purpose of this test) 1.493 WS 3.994 MX (is to prove that Xlib, as a whole, will properly elaborate. This test will) 1.494 WS 10 /Times-Italic SelectFont ( with) 1.494 WS 10 /Times-Roman SelectFont ( the entire) 1.494 WS 72 716.760 moveto (library. Any elaboration problems that crop up will need to) 1.554 WS 4.053 MX (be fixed with an appropriate application of pragma) 1.553 WS 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (41) show EndPage %%Page: 42 42 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto (Elaborate. This also tests to make sure that all of the various pieces) 0.788 WS 3.289 MX (of the library, including any foreign-language) 0.789 WS 72 84 moveto (components, will actually link together into an executable program.) show 72 108 moveto (This is just an elaboration test. Almost nothing \252interesting\272 happens.) show 72 132 moveto (Once this program has successfully executed, the) 0.315 WS 2.814 MX (port will have successfully compiled, linked, and elaborated all of) 0.314 WS 72 144 moveto (the Xlib packages. This is a major milestone in the porting) 0.221 WS 2.722 MX (process. In the first Xlib port, reaching and finishing this) 0.222 WS 72 156 moveto (step consumed all of the first 1.5 man-months \050the port took 2 man-months\051. Achieving this) 0.175 WS 2.674 MX (means that you are now) 0.174 WS 72 168 moveto (ready to begin operational testing.) show 72 192 moveto (The test program is located in the main) 0.610 WS 10 /Times-Bold SelectFont ( X_Library) 0.610 WS 10 /Times-Roman SelectFont ( subsystem; the test is in the) 0.610 WS 10 /Times-Bold SelectFont ( Misc) 0.610 WS 10 /Times-Roman SelectFont ( subdirectory and it is called,) 0.610 WS 72 204 moveto 10 /Times-Bold SelectFont (Fake_Main) show 10 /Times-Roman SelectFont ( \050or) 2.371 WS 10 /Times-Bold SelectFont ( Fake_Main.prs/.prb) 2.371 WS 10 /Times-Roman SelectFont ( on UNIX\051. After it elaborates, the test prints) 2.371 WS 4.870 MX (a \252Done\272 message to the) 2.370 WS 72 216 moveto 10 /Times-Bold SelectFont (Standard_Output) show 10 /Times-Roman SelectFont (.) show 72 241.760 moveto 12 /Times-Bold SelectFont (7.12. Fourth Executable) show 72 265.520 moveto 10 /Times-Roman SelectFont (The purpose of this test is to prove that Xlib's network input/output facilities are basically sound. This is the) 0.861 WS 3.362 MX (first) show 72 277.520 moveto (test that requires an X server.) show 72 301.520 moveto (This test will make the first rudimentary use of the network input/output facilities. The network input/output testing) 0.345 WS 72 313.520 moveto (is actually quite complete.) show 72 337.520 moveto (This test also makes the first real use of the procedure-variable implementation. The procedure-variable testing is) 0.984 WS 72 349.520 moveto (superficial. This test will stumble if there is a major flaw in the implementation, but it may not detect minor flaws.) show 8 /Times-Roman SelectFont 0 -3 rmoveto (6) show 0 3 rmoveto 72 373.520 moveto 10 /Times-Roman SelectFont (Once this program has) 1.292 WS 3.791 MX (successfully executed, the port will have successfully used most of the paths involved in) 1.291 WS 72 385.520 moveto (network input/output, one path in procedure variables, and) 0.180 WS 2.681 MX (many of the the basic type-conversion facilities. This is a) 0.181 WS 72 397.520 moveto (major milestone in the porting process. In the first Xlib port, reaching and finishing this) 0.935 WS 3.434 MX (step consumed all of the) 0.934 WS 72 409.520 moveto (first 1.75 man-months \050the port took 2 man-months\051. Achieving this means that you are now ready to) 0.416 WS 2.917 MX (begin serious) 0.417 WS 72 421.520 moveto (testing of the individual Xlib facilities.) show 72 445.520 moveto (The test program is located) 1.345 WS 3.844 MX (in the main) 1.344 WS 10 /Times-Bold SelectFont ( X_Library) 1.344 WS 10 /Times-Roman SelectFont ( subsystem. The test is in the) 1.344 WS 10 /Times-Bold SelectFont ( Misc) 1.344 WS 10 /Times-Roman SelectFont ( subdirectory. It is called) 1.344 WS 72 457.520 moveto 10 /Times-Bold SelectFont (Hello_World) show 10 /Times-Roman SelectFont ( \050or) 0.606 WS 10 /Times-Bold SelectFont ( HelloWorld.prs/.prb) 0.606 WS 10 /Times-Roman SelectFont ( on UNIX\051. After it elaborates, it opens a window on the host machine and) 0.607 WS 72 469.520 moveto (draws a somewhat lopsided five-pointed star. Click the middle mouse button on the window to cause the) 0.154 WS 2.653 MX (program to) 0.153 WS 72 481.520 moveto (exit. The host name is the sole argument.) show 72 505.520 moveto (In the Environment, the main) 5.910 WS 8.411 MX (program for this test is called) 5.911 WS 10 /Times-Bold SelectFont ( Hello_World_Unix) 5.911 WS 10 /Times-Roman SelectFont ( \050the filename is) 5.911 WS 72 517.520 moveto 10 /Times-Bold SelectFont (HelloUnix.prs/.prb) show 10 /Times-Roman SelectFont ( on UNIX\051.) 0.794 WS 2.500 MX ( It accepts a ) 0.794 WS 10 /Courier SelectFont (-display) show 10 /Times-Roman SelectFont ( command-line argument and then calls) 0.794 WS 3.293 MX (the) show 10 /Times-Bold SelectFont ( Hello_World) 0.793 WS 72 529.520 moveto 10 /Times-Roman SelectFont (procedure. It will use the DISPLAY environment variable if ) show 10 /Courier SelectFont (-display) show 10 /Times-Roman SelectFont ( is not given.) show 72 555.280 moveto 12 /Times-Bold SelectFont (7.13. Testing) show 72 579.040 moveto 10 /Times-Roman SelectFont (At this point there are two ways to) 0.162 WS 2.663 MX (proceed. The recommended path is to parameterize, compile, and test the various) 0.163 WS 72 591.040 moveto (programs from the) 1.316 WS 10 /Times-Bold SelectFont ( X_Clients) 1.316 WS 10 /Times-Roman SelectFont ( and) 1.316 WS 10 /Times-Bold SelectFont ( X_Demos) 1.316 WS 10 /Times-Roman SelectFont ( subsystems. These are the) 1.315 WS 10 /Times-Bold SelectFont ( ico) 1.315 WS 10 /Times-Roman SelectFont (,) show 10 /Times-Bold SelectFont ( muncher) 1.315 WS 10 /Times-Roman SelectFont (,) show 10 /Times-Bold SelectFont ( puzzle) 1.315 WS 10 /Times-Roman SelectFont (,) show 10 /Times-Bold SelectFont ( xev) 1.315 WS 10 /Times-Roman SelectFont (, and) 1.315 WS 10 /Times-Bold SelectFont ( dragon) 1.315 WS 72 603.040 moveto 10 /Times-Roman SelectFont (programs. Parameterize, compile, and test them) 0.632 WS 3.133 MX (in approximately that order. Each one exercises a different portion) 0.633 WS 72 615.040 moveto (of the library. Once they are working, the library can be) 0.309 WS 2.808 MX (released to sympathetic users for an alpha test. The various) 0.308 WS 72 627.040 moveto 10 /Times-Bold SelectFont (@_Unix.prs/.prb) show 10 /Times-Roman SelectFont ( modules may require a small amount of work to make) 1.489 WS 3.990 MX (them run on the new target. They are) 1.490 WS 72 639.040 moveto (written for TeleSoft) 0.345 WS 2.844 MX (TeleGen2 and UNIX. The only system-dependent portion of the program is the method used to) 0.344 WS 72 651.040 moveto (obtain command-line arguments.) show 72 692 moveto (____________________________________________) show 72 710 moveto 8 /Times-Roman SelectFont 0 -3 rmoveto (6) show 0 3 rmoveto ( The first port successfully passed this test on the first attempt. However, later tests stumbled when some undocumented behavior was) show 72 720 moveto ( discovered that affected calls to functions returning values with unconstrained subtypes but did not affect calls to procedures.) show 72 756 moveto 10 /Times-Roman SelectFont (42) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 43 43 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 392.160 MX (Porting Milestones) show 72 72 moveto (Completing all of the) 2.176 WS 10 /Times-Bold SelectFont ( X_Clients) 2.176 WS 10 /Times-Roman SelectFont ( and) 2.176 WS 10 /Times-Bold SelectFont ( X_Demos) 2.176 WS 10 /Times-Roman SelectFont ( is a major milestone. Once they are all running, you) 2.176 WS 4.677 MX (can be) 2.177 WS 72 84 moveto (confident that any remaining problems will be minor.) show 72 108 moveto (Work would then proceed in the) 0.653 WS 10 /Times-Bold SelectFont ( X_Testing) 0.653 WS 10 /Times-Roman SelectFont ( subsystem. That subsystem contains all of the collected tests for) 0.653 WS 3.152 MX (Xlib.) show 72 120 moveto (At this point, passing these tests may be quite easy or it may be quite difficult. It) 0.592 WS 3.093 MX (mainly depends on how much of) 0.593 WS 72 132 moveto (Xlib was destabilized by the porting effort so far and how) 1.417 WS 3.916 MX (well the porting work was done. Some of the utility) 1.416 WS 72 144 moveto (programs used by these tests may themselves need to be ported to the target machine. This is the main reason for) 0.834 WS 72 156 moveto (doing) show 10 /Times-Bold SelectFont ( X_Clients) 0.943 WS 10 /Times-Roman SelectFont ( and) 0.943 WS 10 /Times-Bold SelectFont ( X_Demos) 0.943 WS 10 /Times-Roman SelectFont ( first and) 0.943 WS 10 /Times-Bold SelectFont ( X_Testing) 0.943 WS 10 /Times-Roman SelectFont ( second. Look for porting) 0.943 WS 3.442 MX (instructions in any testing modules) 0.942 WS 72 168 moveto (that fail to compile.) show 72 192 moveto (Once all of the) show 10 /Times-Bold SelectFont ( X_Testing) show 10 /Times-Roman SelectFont ( tests have been passed, the port of Xlib is complete. This is the final milestone.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (43) show EndPage %%Page: 44 44 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 756 moveto (44) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 45 45 BeginPage 792 false PositionPage 270.020 76 moveto 14 /Times-Bold SelectFont (Appendix A) show 280.331 92 moveto (Modules) show 72 115.760 moveto 10 /Times-Roman SelectFont (The modules described here are those that may need to be hand-modified during a port. All of these) 0.952 WS 3.453 MX (modules are) 0.953 WS 72 127.760 moveto (from the \252private\272) 1.425 WS 3.924 MX (portion of Xlib interface. These are modules that few applications would have any reason to) 1.424 WS 72 139.760 moveto (reference. However, it) 1.068 WS 3.569 MX (can be expected that most library extensions would need to reference some or all of these) 1.069 WS 72 151.760 moveto (packages. Changes to the implementations of these packages during a port are expected and routine.) 0.329 WS 2.828 MX (Changes to the) 0.328 WS 72 163.760 moveto (specifications of the packages should be considered in detail, because they may introduce incompatibilities visible to) 0.056 WS 72 175.760 moveto (client programs.) show 72 199.760 moveto (The bodies, and occasionally the specifications, of the) 0.410 WS 10 /Times-Italic SelectFont ( machine-dependent) 0.410 WS 10 /Times-Roman SelectFont ( modules below are very likely to require) 0.410 WS 72 211.760 moveto (modification. The) 0.910 WS 10 /Times-Italic SelectFont ( machine-independent) 0.911 WS 10 /Times-Roman SelectFont ( modules are less likely to require modification. The machine-independent) 0.911 WS 72 223.760 moveto (modules are usually implemented by instantiating) 0.204 WS 2.703 MX (generics exported by the machine-dependent modules. It is in that) 0.203 WS 72 235.760 moveto (sense that they are machine-independent. As) 1.022 WS 3.523 MX (long as the machine-dependent generics can be reimplemented for a) 1.023 WS 72 247.760 moveto (new target, the generic instantiations will function properly and those modules will not require any additional work.) 0.295 WS 72 259.760 moveto (However, if some target forces you to abandon the) 0.450 WS 2.951 MX (generic approach, each of the generic instantiations will need to) 0.451 WS 72 271.760 moveto (be replaced by a hand-coded routine.) show 72 297.520 moveto 12 /Times-Bold SelectFont (A.1. Machine-Independent Types) show 72 321.280 moveto 10 /Times-Roman SelectFont (Subdirectory) show 10 /Times-Bold SelectFont ( Imi_Types) show 10 /Times-Roman SelectFont (:) show 72 345.280 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbit_Library3:) show 10 /Times-Roman SelectFont ( All Xlib library state resides this module. The purpose of these modules) 1.589 WS 4.088 MX (is to gather all) 1.588 WS 96 357.280 moveto (library state in one place. This makes efficient shared libraries a) 0.379 WS 2.880 MX (possibility. It also makes it possible to easily) 0.380 WS 96 369.280 moveto (modify the library for multithread access if that should ever be) 0.521 WS 3.020 MX (necessary. Any new state added to the library) 0.520 WS 96 381.280 moveto (should be placed here.) show 72 407.040 moveto 12 /Times-Bold SelectFont (A.2. Machine-Independent Procedures) show 72 430.800 moveto 10 /Times-Roman SelectFont (Subdirectory) show 10 /Times-Bold SelectFont ( Imi_Procs) show 10 /Times-Roman SelectFont (:) show 72 454.800 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_Base_Converters:) show 10 /Times-Roman SelectFont ( Provides numerous instantiations of the generic conversion facilities. These pro-) 1.489 WS 96 466.800 moveto (vide conversions to/from the X protocol format for all of the most \252basic\272 Xlib types.) show 72 484.800 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_Default_Proc_Vars:) show 10 /Times-Roman SelectFont ( Provides all of the default procedure-variable values used by the library.) show 72 502.800 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_Error_Converters:) show 10 /Times-Roman SelectFont ( Provides numerous instantiations of the generic conversion facilities. These pro-) 0.990 WS 96 514.800 moveto (vide conversions to/from the X protocol format for X error packets.) show 72 532.800 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_Event_Converters:) show 10 /Times-Roman SelectFont ( Provides numerous instantiations of the generic conversion facilities. These pro-) 0.989 WS 96 544.800 moveto (vide conversions to/from the X protocol format for X event packets.) show 72 562.800 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_Graphic_Converters:) show 10 /Times-Roman SelectFont ( Provides numerous instantiations of) 2.055 WS 4.554 MX (the generic conversion facilities. These) 2.054 WS 96 574.800 moveto (provide conversions to/from the X protocol format for X graphic requests.) show 72 592.800 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_Get_Reply:) show 10 /Times-Roman SelectFont ( Provides numerous instantiations of) 2.133 WS 4.634 MX (the generic input facilities. These provide output) 2.134 WS 96 604.800 moveto (facilities for receiving X reply information.) show 72 622.800 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_Image_Internal:) show 10 /Times-Roman SelectFont ( Purely internal to Xlib. This implements various) 1.192 WS 10 /Times-Bold SelectFont ( X_Image) 1.192 WS 10 /Times-Roman SelectFont ( operations that may be) 1.191 WS 96 634.800 moveto (machine-dependent someday.) show 72 652.800 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_Internal:) show 10 /Times-Roman SelectFont ( Provides various internal facilities. This interface is purely private to) 0.759 WS 3.260 MX (Xlib. Any application) 0.760 WS 96 664.800 moveto (or library extension that uses these interfaces is in error.) show 72 682.800 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_Put_Request:) show 10 /Times-Roman SelectFont ( Provides numerous instantiations of the generic output facilities. These provide) 0.871 WS 3.370 MX (output) show 96 694.800 moveto (facilities for sending X requests.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (45) show EndPage %%Page: 46 46 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_Reply_Converters:) show 10 /Times-Roman SelectFont ( Provides numerous instantiations of the generic conversion facilities. These pro-) 0.989 WS 96 84 moveto (vide conversions to/from the X protocol format for X reply packets.) show 72 102 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_Request_Converters:) show 10 /Times-Roman SelectFont ( Provides numerous instantiations of the generic conversion facilities. These pro-) 0.045 WS 96 114 moveto (vide conversions to/from the X protocol format for X request packets.) show 72 132 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_String_Map_Generic:) show 10 /Times-Roman SelectFont ( Implements a simple string-to-object mapping.) 0.694 WS 3.195 MX (It is completely machine-inde-) 0.695 WS 96 144 moveto (pendent but is not part of the standardized public interface to Xlib.) show 72 162 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbip_Wire_Converters:) show 10 /Times-Roman SelectFont ( Provides conversion functions for the error, event, and reply protocol packets.) show 72 187.760 moveto 12 /Times-Bold SelectFont (A.3. Machine-Dependent Types) show 72 211.520 moveto 10 /Times-Roman SelectFont (Subdirectory) show 10 /Times-Bold SelectFont ( Imd_Types) show 10 /Times-Roman SelectFont (:) show 72 235.520 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmt_Error_Log:) show 10 /Times-Roman SelectFont ( Defines the message types available in) show 10 /Times-Bold SelectFont ( Xlbmp_Error_Log) show 10 /Times-Roman SelectFont (.) show 72 253.520 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmt_Network_Types:) show 10 /Times-Roman SelectFont ( Declares \050or renames\051 all of the types that are necessary for obtaining) 1.643 WS 4.142 MX (and con-) 1.642 WS 96 265.520 moveto (trolling a network \050or stream\051 connection. It is one) 1.785 WS 4.286 MX (of the three modules that define the X server stream) 1.786 WS 96 277.520 moveto (abstraction used by Xlib.) show 72 295.520 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmt_Numeric_Types:) show 10 /Times-Roman SelectFont ( Implements the basic numeric types utilized by) 0.952 WS 3.451 MX (Xlib. If this module compiles and) 0.951 WS 96 307.520 moveto (elaborates, this Ada compiler passes the first go/no-go criteria.) show 72 325.520 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmt_Parameters:) show 10 /Times-Roman SelectFont ( Contains operating-system-specific) 3.786 WS 6.287 MX (parameters\320for example, specifies appropriate) 3.787 WS 96 337.520 moveto (input/output buffer sizes.) show 72 355.520 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmt_Transport_Defs:) show 10 /Times-Roman SelectFont ( Declares \050or renames\051 all of the) 1.167 WS 3.666 MX (nonpublic types that are necessary for control of) 1.166 WS 96 367.520 moveto (network communications.) show 72 391.520 moveto (Subdirectory) show 10 /Times-Bold SelectFont ( Pmd_Types) show 10 /Times-Roman SelectFont (:) show 72 415.520 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbt_Proc_Var:) show 10 /Times-Roman SelectFont ( Declares \050or renames\051 all of the types that are necessary) 1.609 WS 4.110 MX (for procedure variables. It also) 1.610 WS 96 427.520 moveto (implements the Ada portion of the procedure-variable mechanism. The package) 1.298 WS 3.797 MX (body will require reimple-) 1.297 WS 96 439.520 moveto (mentation for each port.) show 72 457.520 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbt_Univ_Ptr:) show 10 /Times-Roman SelectFont ( Declares \050or renames\051 all of the types that) 3.051 WS 5.552 MX (are necessary for universal pointers. The) 3.052 WS 96 469.520 moveto (implementation provided is fully portable) 0.202 WS 2.701 MX (to any and all Ada compilers. It uses no \252fancy\272 or implementation-) 0.201 WS 96 481.520 moveto (dependent portions of the language. This generality is achieved at the possible cost of efficiency.) 1.018 WS 3.519 MX (An initial) 1.019 WS 96 493.520 moveto (port will not need to change this module. However, a second effort may decide) 0.024 WS 2.523 MX (to reimplement this facility if it) 0.023 WS 96 505.520 moveto (becomes a performance problem.) show 72 531.280 moveto 12 /Times-Bold SelectFont (A.4. Machine-Dependent Procedures) show 72 555.040 moveto 10 /Times-Roman SelectFont (Subdirectory) show 10 /Times-Bold SelectFont ( Imd_Procs) show 10 /Times-Roman SelectFont (:) show 72 579.040 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmp_Debugger:) show 10 /Times-Roman SelectFont ( Used as a means of including) 1.678 WS 4.179 MX (target debugger facilities. For example, in the Rational) 1.679 WS 96 591.040 moveto (Environment, it is possible for a program to provide the debugger with \252imaging\272) 0.254 WS 2.753 MX (routines. These routines are) 0.253 WS 96 603.040 moveto (given to the debugger for the purpose of displaying specific data types.) 1.122 WS 3.623 MX (When the debugger is preparing to) 1.123 WS 96 615.040 moveto (display the value of a variable of some type, it would) 0.718 WS 3.217 MX (use such a routine in preference to its default imaging) 0.717 WS 96 627.040 moveto (routine. In this way, a user, application, or library can customize the presentation of debugging information.) show 72 645.040 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmp_Environment:) show 10 /Times-Roman SelectFont ( Captures certain types of knowledge that are specific) 3.777 WS 6.278 MX (to individual operating) 3.778 WS 96 657.040 moveto (systems\320for example, what characters, if any, are) 0.450 WS 2.949 MX (placed between a directory name and a filename when the) 0.449 WS 96 669.040 moveto (two are concatenated to form a fully qualified filename?) show 72 687.040 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmp_Error_Log:) show 10 /Times-Roman SelectFont ( Used for all of Xlib's error reporting. It) 2.927 WS 5.428 MX (uses) show 10 /Times-Bold SelectFont ( Text_Io) 2.928 WS 10 /Times-Roman SelectFont ( by default, but it can be) 2.928 WS 96 699.040 moveto (customized to use the local operating system's conventions.) show 72 756 moveto (46) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 47 47 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 433 MX (Modules) show 72 72 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmp_Generic_Converters:) show 10 /Times-Roman SelectFont ( Implements the basic) 0.454 WS 2.953 MX (machine-dependent I/O conversion facilities. It provides) 0.453 WS 96 84 moveto (generics that are instantiated for each of the basic data types. If the target Ada compiler does) 1.416 WS 3.917 MX (not provide) 1.417 WS 96 96 moveto (length and/or representation clauses, this) 0.213 WS 2.712 MX (package is useless on the target and each of the users of this package) 0.212 WS 96 108 moveto (must be reworked. That rework consists of a \252simple\272 task. For each of the) 0.288 WS 2.789 MX (literally hundreds of instantiations) 0.289 WS 96 120 moveto (of these generics, provide a customized) 0.198 WS 2.697 MX (conversion routine that converts to/from the original data type from/to) 0.197 WS 96 132 moveto (the) show 10 /Times-Bold SelectFont ( X_Raw_Data) 0.148 WS 10 /Times-Roman SelectFont ( type.) 0.148 WS 2.649 MX (This is the list of modules that have to be replaced or augmented with the replacement) 0.149 WS 96 144 moveto (routines:) show 96 162 moveto 10 /Times-Bold SelectFont /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Base_Converters) show 10 /Times-Roman SelectFont (\320replaced) show 96 180 moveto 10 /Times-Bold SelectFont /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Error_Converters) show 10 /Times-Roman SelectFont (\320replaced) show 96 198 moveto 10 /Times-Bold SelectFont /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Event_Converters) show 10 /Times-Roman SelectFont (\320replaced) show 96 216 moveto 10 /Times-Bold SelectFont /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Graphic_Converters) show 10 /Times-Roman SelectFont (\320replaced) show 96 234 moveto 10 /Times-Bold SelectFont /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Reply_Converters) show 10 /Times-Roman SelectFont (\320replaced) show 96 252 moveto 10 /Times-Bold SelectFont /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Request_Converters) show 10 /Times-Roman SelectFont (\320replaced) show 96 270 moveto 10 /Times-Bold SelectFont /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbip_Wire_Converters) show 10 /Times-Roman SelectFont (\320modified) show 96 288 moveto 10 /Times-Bold SelectFont /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbmp_Debugger.Check_Machine_Assumptions) show 10 /Times-Roman SelectFont (\320modified) show 96 306 moveto 10 /Times-Bold SelectFont /minus SYM 5.700 MX ( ) show 15.800 MX (Xlbp_Display) show 10 /Times-Roman SelectFont (\320modified) show 72 324 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmp_Get:) show 10 /Times-Roman SelectFont ( Provides all of the basic X protocol input generics. All input from the server is) 0.126 WS 2.625 MX (read using one or) 0.125 WS 96 336 moveto (more of these generics.) show 72 354 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmp_Internal:) show 10 /Times-Roman SelectFont ( Takes care of purely internal details having to do with server input/output. This module) 1.340 WS 96 366 moveto (should not be) 0.713 WS 3.212 MX (directly referenced outside Xlib. It is one of the three modules that define the X server stream) 0.712 WS 96 378 moveto (abstraction used by Xlib.) show 72 396 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmp_Network_Interface:) show 10 /Times-Roman SelectFont ( Implements the read/write facilities) 0.293 WS 2.794 MX (used by Xlib when communicating with the) 0.294 WS 96 408 moveto (X server. All server input/output is performed) 0.287 WS 2.786 MX (using this module. It is one of the three modules that define the) 0.286 WS 96 420 moveto (X server stream abstraction used by Xlib.) show 72 438 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbmp_Put:) show 10 /Times-Roman SelectFont ( Provides all of the basic X protocol output generics. All) 0.239 WS 2.740 MX (output to the server is written using one) 0.240 WS 96 450 moveto (or more of these generics.) show 72 474 moveto (Subdirectory) show 10 /Times-Bold SelectFont ( Pmd_Procs) show 10 /Times-Roman SelectFont (:) show 72 498 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbp_Proc_Var:) show 10 /Times-Roman SelectFont ( Instantiates the various procedure-variable generics and thus declares) 1.592 WS 4.091 MX (all of Xlib's basic) 1.591 WS 96 510 moveto (procedure-variable facilities.) show 72 528 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbp_U_Char_Converters:) show 10 /Times-Roman SelectFont ( Declares \050or renames\051 all of the) show 10 /Times-Bold SelectFont ( U_Char_Array) show 10 /Times-Roman SelectFont ( converters.) show 72 546 moveto 10 /Times-Bold SelectFont (\267 ) show 18 MX (Xlbp_U_Char_Generics:) show 10 /Times-Roman SelectFont ( Provides all of the generics used by) show 10 /Times-Bold SelectFont ( Xlbp_U_Char_Converters) show 10 /Times-Roman SelectFont (.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (47) show EndPage %%Page: 48 48 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 756 moveto (48) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 49 49 BeginPage 792 false PositionPage 270.405 76 moveto 14 /Times-Bold SelectFont (Appendix B) show 254.879 92 moveto (Ada Parametizer) show 72 115.760 moveto 10 /Times-Roman SelectFont (The code for Xlib is intended to be portable. This means) 0.333 WS 2.834 MX (that every attempt is made to isolate system, machine, and) 0.334 WS 72 127.760 moveto (compiler dependencies. At the) 0.028 WS 2.527 MX (same time we would like to have a single set of Ada source files. This implies that we) 0.027 WS 72 139.760 moveto (need a tool that provides us with some type of conditional compilation that goes beyond whatever) 5.110 WS 72 151.760 moveto (constant-expression evaluation or dead-code elimination might be provided by) 0.558 WS 3.057 MX (a compiler. We need a way to write) 0.557 WS 72 163.760 moveto (code that will) 0.278 WS 2.779 MX (not be \252seen\272 by compilers that cannot \050or will not\051 accept it. The) 0.279 WS 10 /Times-Bold SelectFont ( Ada_Param) 0.279 WS 10 /Times-Roman SelectFont ( program \050) 0.279 WS 10 /Times-Bold SelectFont (ada-param) show 72 175.760 moveto 10 /Times-Roman SelectFont (on UNIX\051 provides that functionality.) show 72 199.760 moveto 10 /Times-Bold SelectFont (Ada_Param) show 10 /Times-Roman SelectFont ( works by) 0.644 WS 3.143 MX (manipulating Ada comments. For example, if you were preparing to compile the X Library) 0.643 WS 72 211.760 moveto (for compilation on an R1000, then) 0.899 WS 10 /Times-Bold SelectFont ( Ada_Param) 0.899 WS 10 /Times-Roman SelectFont ( would \252comment out\272 any) 0.899 WS 3.400 MX (code that was targeted for some other) 0.900 WS 72 223.760 moveto (computer and would \252uncomment\272 \050if necessary\051 any code that was specific to, or required by, the R1000 system.) show 72 247.760 moveto (Here is a quick example. If this code has been written:) show 108 271.760 moveto 9 /Courier SelectFont ( procedure foo is) show 108 282.760 moveto ( begin) show 108 293.760 moveto (--/ if R1000 then) show 108 304.760 moveto (--// Io.Put_Line \050"We are here."\051;) show 108 315.760 moveto (--/ else) show 108 326.760 moveto (--// Text_Io.Put_Line \050"We are here."\051;) show 108 337.760 moveto (--/ end if;) show 108 348.760 moveto ( end foo;) show 72 372.760 moveto 10 /Times-Roman SelectFont (If this code were given to) show 10 /Times-Bold SelectFont ( Ada_Param) show 10 /Times-Roman SelectFont ( with the parameter R1000 => True, the result would be:) show 108 396.760 moveto 9 /Courier SelectFont ( procedure foo is) show 108 407.760 moveto ( begin) show 108 418.760 moveto (--/ if R1000 then) show 108 429.760 moveto ( Io.Put_Line \050"We are here."\051;) show 108 440.760 moveto (--/ else) show 108 451.760 moveto (--// Text_Io.Put_Line \050"We are here."\051;) show 108 462.760 moveto (--/ end if;) show 108 473.760 moveto ( end foo;) show 72 497.760 moveto 10 /Times-Roman SelectFont (If this code were then fed back into) 0.680 WS 10 /Times-Bold SelectFont ( Ada_Param) 0.680 WS 10 /Times-Roman SelectFont ( with) 0.680 WS 3.179 MX (the parameter R1000 => False, the resulting code would be) 0.679 WS 72 509.760 moveto (changed to:) show 108 533.760 moveto 9 /Courier SelectFont ( procedure foo is) show 108 544.760 moveto ( begin) show 108 555.760 moveto (--/ if R1000 then) show 108 566.760 moveto (--// Io.Put_Line \050"We are here."\051;) show 108 577.760 moveto (--/ else) show 108 588.760 moveto ( Text_Io.Put_Line \050"We are here."\051;) show 108 599.760 moveto (--/ end if;) show 108 610.760 moveto ( end foo;) show 72 634.760 moveto 10 /Times-Bold SelectFont (Ada_Param) show 10 /Times-Roman SelectFont ( looks for lines that begin with ) 0.223 WS 10 /Courier SelectFont (--/) show 10 /Times-Roman SelectFont ( and it expects) 0.223 WS 2.724 MX (them to contain control constructs that tell it what to) 0.224 WS 72 646.760 moveto (do.) show 10 /Times-Bold SelectFont ( Ada_Param) 0.054 WS 10 /Times-Roman SelectFont ( also looks) 0.054 WS 2.553 MX (for lines that begin with ) 0.053 WS 10 /Courier SelectFont (--//) show 10 /Times-Roman SelectFont (. These lines are Ada source-code lines that will be passed) 0.053 WS 72 658.760 moveto (through as-is or will be uncommented \050the ) show 10 /Courier SelectFont (--//) show 10 /Times-Roman SelectFont ( is removed\051.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (49) show EndPage %%Page: 50 50 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 74 moveto 12 /Times-Bold SelectFont (B.1. Control Constructs) show 72 97.760 moveto 10 /Times-Bold SelectFont (Ada_Param) show 10 /Times-Roman SelectFont ( currently understands the following Ada-like control constructs. The control constructs may be nested) 0.450 WS 72 109.760 moveto (to any number of levels. Lines may begin with any number of spaces.) show 72 133.760 moveto (\267 ) show 18 MX (Simple or complex) show 10 /Times-Italic SelectFont ( if) show 10 /Times-Roman SelectFont ( statements:) show 132 157.760 moveto 9 /Courier SelectFont (--/ if <expr> then) show 132 168.760 moveto (--/ elsif <expr> then -- optional) show 132 179.760 moveto (--/ else -- optional) show 132 190.760 moveto (--/ end if;) show 72 216.760 moveto 12 /Times-Bold SelectFont (B.2. Parameterization Types) show 72 240.520 moveto 10 /Times-Bold SelectFont (Ada_Param) show 10 /Times-Roman SelectFont ( currently understands parameters of the following types:) show 72 264.520 moveto (\267 ) show 18 MX (Boolean) show 72 290.280 moveto 12 /Times-Bold SelectFont (B.3. Expressions) show 72 314.040 moveto 10 /Times-Roman SelectFont (Expressions may span multiple lines; each new) 2.107 WS 4.606 MX (line begins with ) 2.106 WS 10 /Courier SelectFont (--/) show 10 /Times-Roman SelectFont (.) show 10 /Times-Bold SelectFont ( ) show 4.606 MX (Ada_Param) show 10 /Times-Roman SelectFont ( currently understands the) 2.106 WS 72 326.040 moveto (following expression operators \050the usual Ada expression evaluation rules apply\051:) show 108 350.040 moveto 9 /Courier SelectFont (\050 \051) show 108 361.040 moveto (=) show 108 372.040 moveto (/=) show 108 383.040 moveto (NOT) show 108 394.040 moveto (AND) show 108 405.040 moveto (OR) show 108 416.040 moveto (XOR) show 108 427.040 moveto (AND THEN) show 108 438.040 moveto (OR ELSE) show 72 464.040 moveto 12 /Times-Bold SelectFont (B.4. Parameters) show 72 487.800 moveto 10 /Times-Bold SelectFont (Ada_Param) show 10 /Times-Roman SelectFont ( will produce an error message whenever it encounters a parameter) 1.184 WS 3.685 MX (name that it does not recognize.) 1.185 WS 72 499.800 moveto (Many parameter names are predefined by the) 0.495 WS 10 /Times-Bold SelectFont ( Parameter_Definition) 0.495 WS 10 /Times-Roman SelectFont ( routine) 0.495 WS 2.994 MX (from the) 0.494 WS 10 /Times-Bold SelectFont ( Symbol_Table) 0.494 WS 10 /Times-Roman SelectFont ( package, but) 0.494 WS 72 511.800 moveto (new parameter names can be defined as needed when the program is run. Parameter values can be set either by the) 0.504 WS 72 523.800 moveto (calling Ada program or by the user command line.) show 72 547.800 moveto (The predefined parameters are documented in Chapter 5.) show 72 573.560 moveto 12 /Times-Bold SelectFont (B.5. Program Invocation) show 72 597.320 moveto 10 /Times-Roman SelectFont (On an R1000,) show 10 /Times-Bold SelectFont ( Ada_Param) show 10 /Times-Roman SelectFont ( can be called with:) show 108 621.320 moveto 9 /Courier SelectFont (Ada_Param \050Input => "Foo_Generic_Spec",) show 108 632.320 moveto ( Output => "Foo_Sun_Spec",) show 108 643.320 moveto ( Parms => "Sun=>True,Unix=>True"\051;) show 72 667.320 moveto 10 /Times-Roman SelectFont (Under UNIX, this same command would look like this:) show 108 691.320 moveto 9 /Courier SelectFont (unix> ada-param -f Foo_Generic_Spec -p "Sun=>True,Unix=>True" > Foo_Sun_Spec) show 72 756 moveto 10 /Times-Roman SelectFont (50) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 51 51 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 401.080 MX (Ada Parametizer) show 72 72 moveto (On the R1000, the) 1.447 WS 10 /Times-Bold SelectFont ( Ada_Param) 1.447 WS 10 /Times-Roman SelectFont ( procedure will simply read an input file \050Ada unit or simple text) 1.447 WS 3.946 MX (file\051 and will) 1.446 WS 72 84 moveto (produce an output text file. As an alternative to this, the) 0.801 WS 10 /Times-Bold SelectFont ( Parameterize_Ada_Unit) 0.801 WS 10 /Times-Roman SelectFont ( procedure) 0.801 WS 3.302 MX (accepts an Ada unit,) 0.802 WS 72 96 moveto (parameterizes it, demotes the old unit to source, and then replaces the contents of the unit.) show 72 120 moveto (On UNIX, the) 1.372 WS 10 /Times-Bold SelectFont ( ada-param) 1.372 WS 10 /Times-Roman SelectFont ( program is used to parameterize Ada units. The command-line switches available on) 1.372 WS 72 132 moveto (UNIX are:) show 72 156 moveto 18 MX (-f <file>) show 44.230 MX (This switch is required. It is used to specify the name of the) 1.348 WS 3.849 MX (input file. The name of the) 1.349 WS 168 168 moveto (output file will be the same as the input file unless the -x switch is given.) show 72 186 moveto 18 MX (-x) show 69.670 MX (Tells) show 10 /Times-Bold SelectFont ( ada-param) 0.148 WS 10 /Times-Roman SelectFont ( to force the filename extension of the output to be all) 0.148 WS 2.647 MX (lowercase regardless) 0.147 WS 168 198 moveto (of the case of the) 1.358 WS 3.859 MX (input. This feature works in conjunction with the) 1.359 WS 10 /Times-Bold SelectFont ( Ship_To) 1.359 WS 10 /Times-Roman SelectFont ( tool on the) 1.359 WS 168 210 moveto (R1000.) show 72 228 moveto 18 MX (-p <parameters>) show 12.020 MX (This supplies any additional \050or merely different\051 parameter values that are needed for this) 0.780 WS 168 240 moveto (parameterization.) show 72 264 moveto (The program will read the input file, reparameterize it and write the output to a temporary file, compare the new file) 0.183 WS 72 276 moveto (with the old file, and) 0.018 WS 2.517 MX (replace the old file if the two differ. This comparison/replacement operation helps greatly when) 0.017 WS 72 288 moveto (using the UNIX) show 10 /Times-Bold SelectFont ( make) show 10 /Times-Roman SelectFont ( program, because it preserves the modification dates for files that have not actually changed.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (51) show EndPage %%Page: 52 52 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 756 moveto (52) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 53 53 BeginPage 792 false PositionPage 270.020 76 moveto 14 /Times-Bold SelectFont (Appendix C) show 223.540 92 moveto (Ship_To_Unix FTP Facility) show 72 115.760 moveto 10 /Times-Roman SelectFont (When porting Xlib to a new) 1.284 WS 3.785 MX (target, it may be convenient to keep the \252master\272 source files for the library on an) 1.285 WS 72 127.760 moveto (R1000 so that they can be edited and formatted with the) 0.571 WS 3.070 MX (facilities provided by the Rational Environment. In a case) 0.570 WS 72 139.760 moveto (like this there is a need for a tool that will discover modified files and ship them to the target machine. The) 0.100 WS 10 /Times-Bold SelectFont ( Ship_To) 0.100 WS 72 151.760 moveto 10 /Times-Roman SelectFont (subdirectory of the) show 10 /Times-Bold SelectFont ( X_Tools) show 10 /Times-Roman SelectFont ( subsystem contains such a tool.) show 72 175.760 moveto (This tool does not exist or run on the target machine. It is strictly an R1000-based tool.) show 72 199.760 moveto (The basic operation of the various Ship_To tools is quite simple. A database is maintained that records) 0.864 WS 3.363 MX (what files) 0.863 WS 72 211.760 moveto (have been shipped along with the names and version numbers of those files. A tool reads the database and then looks) 0.001 WS 72 223.760 moveto (at the various files to determine) 0.106 WS 2.605 MX (whether there have been any changes. It then ships any changed files and overwrites) 0.105 WS 72 235.760 moveto (the old database.) show 72 259.760 moveto (The actual name of the main tool is) 0.124 WS 10 /Times-Bold SelectFont ( Ship_To_Unix) 0.124 WS 10 /Times-Roman SelectFont (. The name reflects the history of the tool. The first target system) 0.124 WS 72 271.760 moveto (was SunOS, a UNIX implementation.) show 72 295.760 moveto (The) show 10 /Times-Bold SelectFont ( Ship_To) 1.077 WS 10 /Times-Roman SelectFont ( subdirectory has several additional procedures. Each procedure is simply a thin skin over) 1.077 WS 3.576 MX (the basic) 1.076 WS 72 307.760 moveto 10 /Times-Bold SelectFont (Ship_To_Unix) show 10 /Times-Roman SelectFont ( procedure. The purpose of the skin is to specify different default parameters) 0.921 WS 3.422 MX (for the basic routine.) 0.922 WS 72 319.760 moveto (The routines currently available are:) show 72 343.760 moveto 10 /Times-Bold SelectFont 18 MX (Ship_To_Unix) show 10 /Times-Roman SelectFont 16.310 MX (This is the basic routine. It has not been customized.) show 72 361.760 moveto 10 /Times-Bold SelectFont 18 MX (Ship_X_Clients) show 10 /Times-Roman SelectFont 11.320 MX (This routine is aimed at) 1.515 WS 4.014 MX (the) show 10 /Times-Bold SelectFont ( X_Clients) 1.514 WS 10 /Times-Roman SelectFont ( subsystem. It ships any changed source files that) 1.514 WS 168 373.760 moveto (reside there.) show 72 391.760 moveto 10 /Times-Bold SelectFont 18 MX (Ship_X_Library) show 10 /Times-Roman SelectFont 7.430 MX (This routine is aimed at the) show 10 /Times-Bold SelectFont ( X_Library) show 10 /Times-Roman SelectFont ( subsystem. Use it to ship changed Xlib sources.) show 72 409.760 moveto 10 /Times-Bold SelectFont 18 MX (Ship_X_Testing) show 10 /Times-Roman SelectFont 9.650 MX (This routine is aimed at the) show 10 /Times-Bold SelectFont ( X_Testing) show 10 /Times-Roman SelectFont ( subsystem. Use it to ship modified tests.) show 72 427.760 moveto 10 /Times-Bold SelectFont 18 MX (Ship_X_Tools) show 10 /Times-Roman SelectFont 17.980 MX (This routine is aimed at the) 1.282 WS 10 /Times-Bold SelectFont ( X_Tools) 1.283 WS 10 /Times-Roman SelectFont ( subsystem. Use it to ship modified UNIX \050or other) 1.283 WS 168 439.760 moveto (foreign operating system\051 tools.) show 72 463.760 moveto (Each of the procedures has an associated database file with the same name as the) 1.068 WS 3.567 MX (procedure but with) 1.067 WS 10 /Times-Bold SelectFont ( _Database) 1.067 WS 72 475.760 moveto 10 /Times-Roman SelectFont (appended:) show 72 499.760 moveto (The) show 10 /Times-Bold SelectFont ( Ship_To_Unix) show 10 /Times-Roman SelectFont ( procedure has this signature:) show 108 523.760 moveto 9 /Courier SelectFont (generic) show 108 534.760 moveto ( R1000_Files : String;) show 108 545.760 moveto ( R1000_Root : String;) show 108 556.760 moveto ( Unix_Root : String;) show 108 567.760 moveto ( Database_Name : String;) show 108 578.760 moveto (procedure Ship_To_Unix \050Password : String;) show 108 589.760 moveto ( Force_Update : Boolean := False;) show 108 600.760 moveto ( Effort_Only : Boolean := False;) show 108 611.760 moveto ( Unix_Machine : String := "<SHIP_TO_MACHINE>;) show 108 622.760 moveto ( Username : String := "<SHIP_TO_USERNAME>"\051;) show 72 646.760 moveto 10 /Times-Roman SelectFont 18 MX (R1000_Files) show 26.880 MX (This is a wildcard that indicates the names of the files that you want to) 0.207 WS 2.708 MX (transfer \050if they need) 0.208 WS 168 658.760 moveto (it\051. Each of these files will be checked against the corresponding database entry. A file is) 1.120 WS 168 670.760 moveto (shipped if the version number of the current version differs from the version number stored) 0.505 WS 168 682.760 moveto (within the database.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (53) show EndPage %%Page: 54 54 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto 18 MX (R1000_Root) show 26.880 MX (This is the base directory of the files. This is just like all) 0.407 WS 2.906 MX (of the various Root parameters for) 0.406 WS 168 84 moveto (the FTP procedures on the R1000. This initial portion of each of the) 1.151 WS 3.652 MX (R1000 paths for the) 1.152 WS 168 96 moveto (R1000_Files will be replaced by the Unix_Root.) show 72 114 moveto 18 MX (Unix_Root) show 33.550 MX (This is the base directory) 1.819 WS 4.318 MX (for the shipped files. This is just like all of the various Root) 1.818 WS 168 126 moveto (parameters for the FTP procedures on the R1000. All of the shipped files will be placed into) 0.215 WS 168 138 moveto (this directory or into a subdirectory of this directory.) show 72 156 moveto 18 MX (Database_Name) show 12.470 MX (This is the name of the database file. It contains a record of) 1.752 WS 4.251 MX (all transfers. If one of the) 1.751 WS 168 168 moveto (R1000_Files is not in the database, it is treated as a \252modified\272 file and it) 0.282 WS 2.783 MX (will be shipped to) 0.283 WS 168 180 moveto (the target with an automatically generated name \050see below\051.) show 72 198 moveto 18 MX (Password) show 39.670 MX (This is the password to use when FTPing to the target machine. It is given first) 0.316 WS 2.815 MX (because that) 0.315 WS 168 210 moveto (is convenient. If) 0.406 WS 2.907 MX (you select one of the Ship_To procedures and use the Promote key, a copy) 0.407 WS 168 222 moveto (of that procedure's specification will appear in a command window. The Environment) 2.410 WS 168 234 moveto (cursor will be at the first parameter. If that) 0.563 WS 3.064 MX (parameter is the password field, then to run one) 0.564 WS 168 246 moveto (of the Ship_To procedures you just select) 0.722 WS 3.221 MX (it, press Promote, type your password, and press) 0.721 WS 168 258 moveto (Promote again. That is why Password is first.) show 72 276 moveto 18 MX (Force_Update) show 21.350 MX (This can be set to True if you want to transfer all files) 1.796 WS 4.297 MX (regardless of the corresponding) 1.797 WS 168 288 moveto (database entry.) show 72 306 moveto 18 MX (Effort_Only) show 29.120 MX (This can be set to True if you want to see what files would be) 0.733 WS 3.232 MX (transferred during an actual) 0.732 WS 168 318 moveto (shipping run.) show 72 336 moveto 18 MX (Unix_Machine) show 18.010 MX (This is the network name of the target machine. The default value indicates) 0.216 WS 2.717 MX (that the value of) 0.217 WS 168 348 moveto (the SHIP_TO_MACHINE environment variable should be used as the machine name.) show 72 366 moveto 18 MX (Username) show 37.460 MX (This is the username to use when) 2.627 WS 5.126 MX (logging into the target machine. The default value) 2.626 WS 168 378 moveto (indicates that) 0.210 WS 2.711 MX (the value of the SHIP_TO_USERNAME environment variable should be used) 0.211 WS 168 390 moveto (as the username.) show 72 414 moveto (The databases contain one entry for each file that has been shipped. The) 0.313 WS 10 /Times-Bold SelectFont ( Ship_To) 0.313 WS 10 /Times-Roman SelectFont ( subdirectory has several) 0.313 WS 2.812 MX (database) show 72 426 moveto (files. A single file could have been used, but it was felt to be more convenient having one file for each) 1.529 WS 4.030 MX (of the) 1.530 WS 72 438 moveto (different subsystems.) show 72 462 moveto (Each file has a database entry consisting of eight lines of text. In order, these lines are:) show 72 486 moveto 18 MX (R1000 filename) show 13.840 MX (This is the full pathname from one of the R1000_Files minus the leading) 0.103 WS 2.602 MX (initial R1000_Root) 0.102 WS 168 498 moveto (portion.) show 72 516 moveto 18 MX (UNIX path) show 33.290 MX (This is the path relative to the Unix_Root where the file will be stored on the target.) show 72 534 moveto 18 MX (UNIX name) show 28.850 MX (This is the name that is used when the file is shipped. It will have this name on the target.) show 72 552 moveto 18 MX (Version) show 46.340 MX (This was the version number of the file when it was last shipped.) show 72 570 moveto 18 MX (Directory flag) show 21.630 MX (This is True if this object is a directory.) show 72 588 moveto 18 MX (Ignore flag) show 33.850 MX (If this is True, this file will never be shipped under any circumstances.) show 72 606 moveto 18 MX (New flag) show 41.070 MX (This flag is True until you set it to False. It is set when a file is transferred for the first) 0.269 WS 2.770 MX (time.) show 168 618 moveto (It can be useful when attempting to locate a new file for the purpose of giving it a non-) 1.380 WS 168 630 moveto (default UNIX filename.) show 72 648 moveto 18 MX (=====) show 49.800 MX (A simple line of = signs that help to detect bad hand-edits in the database.) show 72 672 moveto (When a file is shipped from the R1000 for the first time, a default UNIX) 0.503 WS 3.004 MX (filename is generated for it. Starting with) 0.504 WS 72 684 moveto (the full pathname of the file on the R1000, the initial) 1.136 WS 3.635 MX (portion of the full path is removed if it corresponds to the) 1.135 WS 72 696 moveto (R1000_Root parameter. What is left) 1.822 WS 4.323 MX (is used to generate a default UNIX path and filename \050unless there is an) 1.823 WS 72 708 moveto (existing entry in the database\051. The) 0.426 WS 2.925 MX (default UNIX path is exactly the same as the remaining R1000 path except that) 0.425 WS 72 720 moveto (dots are replaced by slashes and all) 0.953 WS 3.454 MX (names are capitalized. \050The initial letter of each \252word\272 is capitalized and all) 0.954 WS 72 756 moveto (54) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 55 55 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 355.760 MX (Ship_To_Unix FTP Facility) show 72 72 moveto (following letters are set to lowercase.\051 The default UNIX filename is) 2.207 WS 4.706 MX (generated using the same capitalization) 2.206 WS 72 84 moveto (scheme. A UNIX filename extension is added to each Ada unit.) 0.043 WS 2.544 MX (The extension given depends on the class of the Ada) 0.044 WS 72 96 moveto (unit: .PRS, .PRB, and .PRG are used for) 0.490 WS 2.989 MX (procedure specifications, bodies, and generics; .FNS, .FNB, and .FNG are) 0.489 WS 72 108 moveto (used for function specifications, bodies, and) 0.890 WS 3.391 MX (generics; .PKS, .PKB, and .PKG are used for package specifications,) 0.891 WS 72 120 moveto (bodies, and generics. The extensions provided are all uppercase.) show 72 144 moveto (Once all files have been successfully transferred, the old database is) 1.531 WS 4.030 MX (overwritten with a new version containing) 1.530 WS 72 156 moveto (updated information. If any sort of) 0.294 WS 2.795 MX (transfer error occurs, the database entries for those files will not be updated with) 0.295 WS 72 168 moveto (the new version) 0.349 WS 2.848 MX (number. Successive invocations of the shipping procedures will thus repeatedly find the failed files) 0.348 WS 72 180 moveto (and attempt to transfer them again.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (55) show EndPage %%Page: 56 56 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 756 moveto (56) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 57 57 BeginPage 792 false PositionPage 270.020 76 moveto 14 /Times-Bold SelectFont (Appendix D) show 241.838 92 moveto (UNIX Makefile Tools) show 72 115.760 moveto 10 /Times-Roman SelectFont (Rational supplies a small number of tools that can) 0.511 WS 3.012 MX (be helpful when working with a UNIX target. The tools provide) 0.512 WS 72 127.760 moveto (support for the Ada parameterization program, for compilation ordering, and for program linking.) show 72 153.520 moveto 12 /Times-Bold SelectFont (D.1. Makefiles) show 72 177.280 moveto 10 /Times-Roman SelectFont (Each of the main subdirectories within the various subsystems has been supplied with a UNIX) 0.670 WS 10 /Times-Bold SelectFont ( Makefile) 0.670 WS 10 /Times-Roman SelectFont (. This file) 0.670 WS 72 189.280 moveto (can be used to control the various steps involved when building or rebuilding that portion of the library. Also, if the) 0.291 WS 72 201.280 moveto (MIT program called) 0.492 WS 10 /Times-Bold SelectFont ( imake) 0.492 WS 10 /Times-Roman SelectFont ( is available, the files called) 0.492 WS 10 /Times-Bold SelectFont ( Imakefile) 0.492 WS 10 /Times-Roman SelectFont ( will also prove helpful.) 0.492 WS 2.991 MX (The) show 10 /Times-Bold SelectFont ( Imakefiles) 0.491 WS 10 /Times-Roman SelectFont ( are used) 0.491 WS 72 213.280 moveto (in conjunction with the) show 10 /Times-Bold SelectFont ( imake) show 10 /Times-Roman SelectFont ( program to automatically generate the various) show 10 /Times-Bold SelectFont ( Makefiles) show 10 /Times-Roman SelectFont (.) show 72 237.280 moveto (The) show 10 /Times-Bold SelectFont ( Makefiles) show 10 /Times-Roman SelectFont ( all have these targets:) show 72 261.280 moveto 10 /Times-Bold SelectFont 18 MX (param) show 10 /Times-Roman SelectFont 49.670 MX (The) show 10 /Times-Bold SelectFont ( Ship_To) 0.080 WS 10 /Times-Roman SelectFont ( tool on the R1000 always ships Ada units after appending an all uppercase file) 0.080 WS 168 273.280 moveto (extension to the basic unit) 1.140 WS 3.639 MX (name. ) show 3.639 MX (The) show 10 /Times-Bold SelectFont ( param) 1.139 WS 10 /Times-Roman SelectFont ( target looks for files with uppercase exten-) 1.139 WS 168 285.280 moveto (sions and it runs them) 0.021 WS 2.522 MX (through the) 0.022 WS 10 /Times-Bold SelectFont ( ada-param) 0.022 WS 10 /Times-Roman SelectFont ( program. The result of the run is placed into a) 0.022 WS 168 297.280 moveto (file with the) 0.723 WS 3.222 MX (same name and extension but with the extension converted to lowercase. This) 0.722 WS 168 309.280 moveto (allows a developer on the R1000 to) 2.055 WS 4.556 MX (ship files as they change, but the changes are not) 2.056 WS 168 321.280 moveto (incorporated into the target library until the) 0.682 WS 3.181 MX (developer explicitly requests it. It also helps to) 0.681 WS 168 333.280 moveto (preserve the change dates for files that change on the R1000 but, after processing by the) 1.324 WS 168 345.280 moveto 10 /Times-Bold SelectFont (ada-param) show 10 /Times-Roman SelectFont ( program, have not) 0.480 WS 2.979 MX (changed in a meaningful way on the target. The) 0.479 WS 10 /Times-Bold SelectFont ( ada-param) 0.479 WS 168 357.280 moveto 10 /Times-Roman SelectFont (program only replaces old files) 1.547 WS 4.048 MX (with new versions when the new versions are physically) 1.548 WS 168 369.280 moveto (different.) show 72 387.280 moveto 10 /Times-Bold SelectFont 18 MX (reparam) show 10 /Times-Roman SelectFont 40.790 MX (This is used during an Xlib port when some) 0.373 WS 2.872 MX (parameter has been changed and it is necessary) 0.372 WS 168 399.280 moveto (to reprocess all Ada sources in order to place the new) 0.704 WS 3.205 MX (parameter value into effect. All Ada) 0.705 WS 168 411.280 moveto (units will be run through the) 0.100 WS 10 /Times-Bold SelectFont ( ada-param) 0.100 WS 10 /Times-Roman SelectFont ( program, and any files that change will be replaced) 0.100 WS 168 423.280 moveto (by the reparameterized versions.) show 72 441.280 moveto 10 /Times-Bold SelectFont 18 MX (Makefile) show 10 /Times-Roman SelectFont 40.230 MX (This is useful only if the) 0.701 WS 10 /Times-Bold SelectFont ( imake) 0.701 WS 10 /Times-Roman SelectFont ( program is available. It is used) 0.701 WS 3.202 MX (to regenerate the) 0.702 WS 10 /Times-Bold SelectFont ( Makefile) 0.702 WS 168 453.280 moveto 10 /Times-Roman SelectFont (after the source) show 10 /Times-Bold SelectFont ( Imakefile) show 10 /Times-Roman SelectFont ( has been modified.) show 72 471.280 moveto 10 /Times-Bold SelectFont 18 MX (Makefiles) show 10 /Times-Roman SelectFont 36.340 MX (This is the recursive form of the) 0.972 WS 10 /Times-Bold SelectFont ( Makefile) 0.972 WS 10 /Times-Roman SelectFont ( target. It is used to regenerate) 0.972 WS 3.471 MX (all of the nested) 0.971 WS 168 483.280 moveto 10 /Times-Bold SelectFont (Makefiles) show 10 /Times-Roman SelectFont ( in a subdirectory hierarchy.) show 72 501.280 moveto 10 /Times-Bold SelectFont 18 MX (clean) show 10 /Times-Roman SelectFont 55.780 MX (This is the usual UNIX) 2.350 WS 10 /Times-Bold SelectFont ( clean) 2.350 WS 10 /Times-Roman SelectFont ( target. It deletes all generated files from a subdirectory) 2.350 WS 168 513.280 moveto (hierarchy.) show 72 531.280 moveto 10 /Times-Bold SelectFont 18 MX (all) show 10 /Times-Roman SelectFont 67.440 MX (This is the usual UNIX) 1.377 WS 10 /Times-Bold SelectFont ( all) 1.376 WS 10 /Times-Roman SelectFont ( target. It compiles all Ada, C, and assembler units, builds all) 1.376 WS 168 543.280 moveto (libraries, and loads all programs.) show 72 561.280 moveto 10 /Times-Bold SelectFont 18 MX (install) show 10 /Times-Roman SelectFont 51.880 MX (This is the usual UNIX) 1.505 WS 10 /Times-Bold SelectFont ( install) 1.505 WS 10 /Times-Roman SelectFont ( target. It performs an) 1.505 WS 10 /Times-Bold SelectFont ( all) 1.505 WS 10 /Times-Roman SelectFont ( followed by an installation step) 1.506 WS 168 573.280 moveto (where each library and each program is placed into an appropriate system directory.) show 72 591.280 moveto 10 /Times-Bold SelectFont 18 MX (install.man) show 10 /Times-Roman SelectFont 30.490 MX (This target installs UNIX) 2.829 WS 10 /Times-Bold SelectFont ( man) 2.829 WS 10 /Times-Roman SelectFont ( pages, if) 2.829 WS 5.328 MX (they exist, for the programs and/or libraries) 2.828 WS 168 603.280 moveto (contained in the directory.) show 72 627.280 moveto (Individual) show 10 /Times-Bold SelectFont ( Makefiles) 0.696 WS 10 /Times-Roman SelectFont ( also) 0.696 WS 3.197 MX (have as many additional targets as may be appropriate for a given directory. Directories) 0.697 WS 72 639.280 moveto (that produce programs or libraries will have targets of the same name as the program or library.) show 72 665.040 moveto 12 /Times-Bold SelectFont (D.2. Ada Compilation Ordering) show 72 688.800 moveto 10 /Times-Roman SelectFont (The) show 10 /Times-Bold SelectFont ( all) 0.213 WS 10 /Times-Roman SelectFont ( target within each) 0.213 WS 10 /Times-Bold SelectFont ( Makefile) 0.213 WS 10 /Times-Roman SelectFont ( compiles all Ada units and links all Ada programs. Determining the) 0.213 WS 2.712 MX (appropriate) show 72 700.800 moveto (compilation order to use is one of the main tasks involved. This is done by a combination of UNIX) 0.197 WS 10 /Times-Bold SelectFont ( awk) 0.198 WS 10 /Times-Roman SelectFont ( scripts plus) 0.198 WS 72 712.800 moveto (an auxiliary) show 10 /Times-Bold SelectFont ( Makefile) show 10 /Times-Roman SelectFont ( that is generated dynamically. The steps in this process are:) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (57) show EndPage %%Page: 58 58 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto (1.) show 16.500 MX (All of the Ada units involved in a compilation are determined. This is typically a static) 0.126 WS 2.625 MX (property of a particular) 0.125 WS 96 84 moveto (directory. The usual approach is to declare a macro) 0.165 WS 2.666 MX (within the) 0.166 WS 10 /Times-Bold SelectFont ( Makefile) 0.166 WS 10 /Times-Roman SelectFont ( that has the name of) 0.166 WS 10 /Times-Bold SelectFont ( ADASRCS) 0.166 WS 10 /Times-Roman SelectFont (. The) 0.166 WS 96 96 moveto (definition of this macro is the complete) 0.667 WS 3.166 MX (list of source files. For example, this could be the source-file list for) 0.666 WS 96 108 moveto (the) show 10 /Times-Bold SelectFont ( ada-param) show 10 /Times-Roman SelectFont ( program:) show 132 132 moveto 9 /Courier SelectFont (ADASRCS = AdaParam.prs AdaParam.prb Lexemes.pks Lexemes.pkb \134) show 132 143 moveto ( String_Map.pkb String_Map.pkg SymTable.pks SymTable.pkb) show 72 167 moveto 10 /Times-Roman SelectFont (2.) show 16.500 MX (All of the Ada source files for a particular target are scanned.) 0.348 WS 2.849 MX (\050A) show 10 /Times-Bold SelectFont ( Makefile) 0.349 WS 10 /Times-Roman SelectFont ( may contain more than one target,) 0.349 WS 96 179 moveto (and source) 0.308 WS 2.807 MX (files are scanned only when they've changed since the last scan.\051 The scanning is performed using) 0.307 WS 96 191 moveto (the) show 10 /Times-Bold SelectFont ( awk) 0.303 WS 10 /Times-Roman SelectFont ( script located in) 0.303 WS 10 /Times-Bold SelectFont ( tools/config/dep-scan.awk) 0.303 WS 10 /Times-Roman SelectFont (. This script is provided by Rational. It scans an) 0.303 WS 2.804 MX (Ada unit) 0.304 WS 96 203 moveto (and it determines \050a\051 the name of) 0.155 WS 2.654 MX (the unit, \050b\051 the names of all) 0.154 WS 10 /Times-Italic SelectFont ( with) 0.154 WS 10 /Times-Roman SelectFont ('ed Ada units, \050c\051 whether the unit contains) 0.154 WS 96 215 moveto (generic declarations \050if the unit is a specification\051, and \050d\051 the) 1.769 WS 4.270 MX (name of the file containing the unit. This) 1.770 WS 96 227 moveto (information is then written to a file) 1.520 WS 4.019 MX (called) show 10 /Times-Bold SelectFont ( <something>.OBK) 1.519 WS 10 /Times-Roman SelectFont (, where the \252something\272 is the name of the) 1.519 WS 96 239 moveto (target.) show 72 257 moveto (3.) show 16.500 MX (All of the scanned Ada unit information,) 1.137 WS 3.638 MX (for all targets, is gathered into a single file called) 1.138 WS 10 /Times-Bold SelectFont ( Makefile.scan) 1.138 WS 10 /Times-Roman SelectFont (.) show 96 269 moveto (This gathering merges the new information with any existing information and updates it. This merging is) 1.602 WS 96 281 moveto (performed using the) 0.823 WS 10 /Times-Bold SelectFont ( awk) 0.823 WS 10 /Times-Roman SelectFont ( script located in) 0.823 WS 10 /Times-Bold SelectFont ( tools/config/dep-merge.awk) 0.823 WS 10 /Times-Roman SelectFont (. This script is provided by) 0.823 WS 3.324 MX (Rational.) show 96 293 moveto (Its purpose is simply to merge the new) 0.774 WS 3.273 MX (with the old and to update the old. All information is kept as simple) 0.773 WS 96 305 moveto (ASCII text files. The format for these files is documented by header comments within the script files.) show 72 323 moveto (4.) show 16.500 MX (The merged information) 1.191 WS 3.692 MX (is then used to generate an auxiliary file called) 1.192 WS 10 /Times-Bold SelectFont ( Makefile.dep) 1.192 WS 10 /Times-Roman SelectFont (. This is an ordinary) 1.192 WS 96 335 moveto (UNIX) show 10 /Times-Bold SelectFont ( Makefile) 0.986 WS 10 /Times-Roman SelectFont ( that contains all of the intermodule dependencies discovered by) 0.986 WS 3.485 MX (the scanning process. This) 0.985 WS 96 347 moveto (file is created using the) 0.120 WS 10 /Times-Bold SelectFont ( awk) 0.120 WS 10 /Times-Roman SelectFont ( script located in) 0.120 WS 10 /Times-Bold SelectFont ( tools/config/dep-make.awk) 0.120 WS 10 /Times-Roman SelectFont (. This script is provided by Rational.) 0.120 WS 96 359 moveto (It scans the merged information provided by the previous step and generates a) show 10 /Times-Bold SelectFont ( Makefile) show 10 /Times-Roman SelectFont ( based on it.) show 72 377 moveto (5.) show 16.500 MX (The final step is to) 1.052 WS 3.551 MX (recursively invoke the) 1.051 WS 10 /Times-Bold SelectFont ( make) 1.051 WS 10 /Times-Roman SelectFont ( program using the) 1.051 WS 10 /Times-Bold SelectFont ( Makefile.dep) 1.051 WS 10 /Times-Roman SelectFont ( file. That invocation will) 1.051 WS 96 389 moveto (then proceed to compile all of the) 0.500 WS 10 /Times-Bold SelectFont ( ADASRCS) 0.500 WS 10 /Times-Roman SelectFont ( in the proper order. Compilation errors abort the build process) 0.501 WS 96 401 moveto (in the usual manner.) show 72 426.760 moveto 12 /Times-Bold SelectFont (D.3. Using MIT's Imake Program) show 72 450.520 moveto 10 /Times-Roman SelectFont (Rational supplies) 0.487 WS 10 /Times-Bold SelectFont ( Imakefiles) 0.487 WS 10 /Times-Roman SelectFont ( for all) 0.487 WS 2.986 MX (subdirectories. These can be used in conjunction with the MIT) 0.486 WS 10 /Times-Bold SelectFont ( imake) 0.486 WS 10 /Times-Roman SelectFont ( program) 0.486 WS 72 462.520 moveto (to automatically maintain) 0.995 WS 3.496 MX (the various nested) 0.996 WS 10 /Times-Bold SelectFont ( Makefiles) 0.996 WS 10 /Times-Roman SelectFont (. If you do not have the) 0.996 WS 10 /Times-Bold SelectFont ( imake) 0.996 WS 10 /Times-Roman SelectFont ( program, skip this section.) 0.996 WS 72 474.520 moveto 10 /Times-Bold SelectFont (Imake) show 10 /Times-Roman SelectFont ( is available as part of the standard software distribution from MIT.) show 72 498.520 moveto (In the) 0.095 WS 10 /Times-Bold SelectFont ( tools/config) 0.095 WS 10 /Times-Roman SelectFont ( subdirectory you will find a number) 0.095 WS 2.594 MX (of special files that are necessary for) 0.094 WS 10 /Times-Bold SelectFont ( imake) 0.094 WS 10 /Times-Roman SelectFont ('s operation. The) 0.094 WS 72 510.520 moveto (various macro files provided by MIT are all tailored for use with the C language and its supporting programs. Ada is) 0.084 WS 72 522.520 moveto (a different language requiring different facilities, which are provided by these files:) show 72 546.520 moveto 10 /Times-Bold SelectFont 18 MX (Imake.rules-ada) show 10 /Times-Roman SelectFont 8.280 MX (This file contains) 1.697 WS 4.196 MX (the additional rules required to build Ada programs and libraries. The) 1.696 WS 168 558.520 moveto (macros in this file have names) 0.248 WS 2.749 MX (similar to the corresponding C macros. The names have been) 0.249 WS 168 570.520 moveto (changed by adding \252Ada\272 to them.) 4.336 WS 6.835 MX (For instance,) 4.335 WS 10 /Times-Bold SelectFont ( NormalProgramTarget) 4.335 WS 10 /Times-Roman SelectFont ( becomes) 4.335 WS 168 582.520 moveto 10 /Times-Bold SelectFont (AdaNormalProgramTarget) show 10 /Times-Roman SelectFont (.) show 72 600.520 moveto 10 /Times-Bold SelectFont 18 MX (Imake.tmpl-ada) show 10 /Times-Roman SelectFont 9.390 MX (The default) 0.540 WS 10 /Times-Bold SelectFont ( imake) 0.540 WS 10 /Times-Roman SelectFont ( template provided by MIT supports only C. This modified template will) 0.540 WS 168 612.520 moveto (take your site's C-only template and augment it with) 0.265 WS 2.764 MX (the additional declarations required for) 0.264 WS 168 624.520 moveto (Ada. It augments the normal template rather than replacing it.) show 72 642.520 moveto 10 /Times-Bold SelectFont 18 MX (Project.tmpl-ada) show 10 /Times-Roman SelectFont 5.520 MX (Similarly, the default) 2.621 WS 10 /Times-Bold SelectFont ( imake) 2.621 WS 10 /Times-Roman SelectFont ( project) 2.621 WS 5.122 MX (template provided by MIT supports only C. This) 2.622 WS 168 654.520 moveto (modified template augments the normal template and adds the declarations required for Ada.) show 72 672.520 moveto 10 /Times-Bold SelectFont 18 MX (site.def-ada) show 10 /Times-Roman SelectFont 28.840 MX (This augments the local) show 10 /Times-Bold SelectFont ( site.def) show 10 /Times-Roman SelectFont ( file to allow for Ada.) show 72 690.520 moveto 10 /Times-Bold SelectFont 18 MX (sun.cf-ada) show 10 /Times-Roman SelectFont 33.830 MX (This augments the local) show 10 /Times-Bold SelectFont ( sun.cf) show 10 /Times-Roman SelectFont ( file \050if any\051 to allow for Ada.) show 72 756 moveto (58) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 59 59 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont 379.130 MX (UNIX Makefile Tools) show 72 72 moveto (The files provided by Rational are used to augment, rather than replace, the files provided) 0.455 WS 2.954 MX (by MIT. To utilize these) 0.454 WS 72 84 moveto (files it is necessary to use a number of) 0.887 WS 10 /Times-Bold SelectFont ( imake) 0.887 WS 10 /Times-Roman SelectFont ( switches that are not normally given. See one of) 0.887 WS 3.388 MX (the) show 10 /Times-Bold SelectFont ( Makefiles) 0.888 WS 10 /Times-Roman SelectFont ( for) 0.888 WS 72 96 moveto (details. The purpose of) 0.848 WS 3.347 MX (the switches is to cause) 0.847 WS 10 /Times-Bold SelectFont ( imake) 0.847 WS 10 /Times-Roman SelectFont ( to read the Rational files in place of the normal MIT files.) 0.847 WS 72 108 moveto (The Rational files then use the) show 10 /Times-Bold SelectFont ( imake) show 10 /Times-Roman SelectFont ( \252include\272 facilities to process the normal MIT files.) show 72 132 moveto (The) show 10 /Times-Bold SelectFont ( sun.cf-ada) 1.035 WS 10 /Times-Roman SelectFont ( file is used when the target system is a Sun) 1.035 WS 0 -2.500 rmoveto 7 /Times-Roman SelectFont /registered SYM 5.320 MX 10 /Times-Roman SelectFont 0 2.500 rmoveto (. Similar files should) 1.035 WS 3.536 MX (be constructed for other target) 1.036 WS 72 144 moveto (systems. Simply follow the form of the MIT) show 10 /Times-Bold SelectFont ( sun.cf) show 10 /Times-Roman SelectFont ( and Rational) show 10 /Times-Bold SelectFont ( sun.cf-ada) show 10 /Times-Roman SelectFont ( files.) show 72 169.760 moveto 12 /Times-Bold SelectFont (D.4. Compiler Controls) show 72 193.520 moveto 10 /Times-Roman SelectFont (The Rational files are set) 0.075 WS 2.574 MX (up to use the TeleSoft TeleGen2 compiler, but other target compilers should be a relatively) 0.074 WS 72 205.520 moveto (easy substitution. The compilation ordering facilities should work with any compiler, but the actual commands used) 0.258 WS 72 217.520 moveto (to compile individual units will require tailoring.) show 72 241.520 moveto (All of the controls for the) 0.306 WS 2.805 MX (compilation process are set up in the usual UNIX fashion by the use of) 0.305 WS 10 /Times-Bold SelectFont ( Makefile) 0.305 WS 10 /Times-Roman SelectFont ( macros.) 0.305 WS 72 253.520 moveto (These are the macros used to control Ada compilation, linking, and library creation:) show 72 277.520 moveto (\267 ) show 18 MX (ADACOM specifies the name of the compiler. ) 1.264 WS 2.500 MX (ADACOMFLAGS specifies command-line switches) 1.264 WS 3.765 MX (to use) 1.265 WS 96 289.520 moveto (with the compiler.) 0.428 WS 2.927 MX (ADACOMFLAGS1, 2, and 3 are used to control compilation within directories containing) 0.427 WS 96 301.520 moveto (multiple targets. See the) show 10 /Times-Bold SelectFont ( tools/config/Imake.rules-ada) show 10 /Times-Roman SelectFont ( macros file.) show 96 319.520 moveto (The default values are: \252ada\272 and \252-l $\050ADAWORKING\051 -E 10 -C 3 -V) 0.831 WS 3.332 MX (4000.\272 Use $\050ADAWORKING\051 as) 0.832 WS 96 331.520 moveto (the library, report a maximum of 10 errors, list 3 context lines with errors, and use 4,000 virtual pages.) show 72 349.520 moveto (\267 ) show 18 MX (ADALD specifies the name of the Ada) 0.887 WS 3.386 MX (linker. ) show 3.386 MX (ADALDFLAGS specifies the command-line switches to use) 0.886 WS 96 361.520 moveto (with the linker.) show 96 379.520 moveto (The default values are \252adald\272 and \252-v) 0.676 WS 3.177 MX (-X -V 4000.\272 Use verbose mode, report exceptions by name, and use) 0.677 WS 96 391.520 moveto (4,000 virtual pages.) show 72 409.520 moveto (\267 ) show 18 MX (ADACRLIB specifies the name of the program that creates and initializes an empty Ada library.) 4.160 WS 96 421.520 moveto (ADACRLIBFLAGS specifies the command-line switches to use with the librarian.) show 96 439.520 moveto (The default values are: \252acr\272 and \252-m 32000.\272 Create a library with the largest possible maximum capacity.) show 72 457.520 moveto (Ada programs do) 0.497 WS 2.998 MX (not exist in isolation. They make use of libraries of external Ada units. These units are contained) 0.498 WS 72 469.520 moveto (in external Ada libraries. The following macros are used to tell the Ada librarian about local and external libraries:) show 72 487.520 moveto (\267 ) show 18 MX (ADAWORKING specifies the name of the library that will be used) 0.991 WS 3.490 MX (for compilation. This is the library that) 0.990 WS 96 499.520 moveto (will be created and used to hold the results of all compilations. This is just the name, minus any extension, of) 0.382 WS 96 511.520 moveto (the library. The default name) 0.443 WS 2.942 MX (is) show 10 /Times-Bold SelectFont ( liblst.alb) 0.442 WS 10 /Times-Roman SelectFont (, which is TeleGen2's default library name. A \252library\272 is a text file) 0.442 WS 96 523.520 moveto (that contains one line indicating the pathname of a compiled Ada \252working\272 library.) show 72 541.520 moveto (\267 ) show 18 MX (ADAWORKINGSTEM specifies the) 0.783 WS 3.284 MX (basic filename \050minus any extension\051 of the local working library. The) 0.784 WS 96 553.520 moveto (default for this is) show 10 /Times-Bold SelectFont ( ada-lib) show 10 /Times-Roman SelectFont (.) show 72 571.520 moveto (\267 ) show 18 MX (ADAWORKINGLIB contains the names of the files and directories that make) 0.939 WS 3.438 MX (up the local working library.) 0.938 WS 96 583.520 moveto (For TeleGen2 this is a list containing the .sub file and) 0.022 WS 2.523 MX (the .obj directory that makes up a TeleGen2 Ada library.) 0.023 WS 96 595.520 moveto (The Rational tools also create a .obk directory and these are added to the list. The default list is:) show 132 619.520 moveto 9 /Courier SelectFont (ADAWORKINGLIB = $\050ADAWORKINGSTEM\051.sub $\050ADAWORKINGSTEM\051.obj \134) show 132 630.520 moveto ( $\050ADAWORKINGSTEM\051.obk) show 72 654.520 moveto 10 /Times-Roman SelectFont (\267 ) show 18 MX (ADAEXTERNALLIB contains a) 0.914 WS 3.413 MX (list of the external working libraries that will be used to compile the local) 0.913 WS 96 666.520 moveto (source files. This list is used to create the) show 10 /Times-Bold SelectFont ( $\050ADAWORKING\051) show 10 /Times-Roman SelectFont ( file automatically. The default list is:) show 132 690.520 moveto 9 /Courier SelectFont (ADAEXTERNALLIB = $\050TELEGEN2\051/lib/h_unix.obj $\050TELEGEN2\051/lib/h_rt.obj) show 72 756 moveto 10 /Times-Roman SelectFont (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (59) show EndPage %%Page: 60 60 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 756 moveto (60) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 61 61 BeginPage 792 false PositionPage 270.405 76 moveto 14 /Times-Bold SelectFont (Appendix E) show 238.156 92 moveto (Current Set of Targets) show 72 115.760 moveto 10 /Times-Roman SelectFont (\267 ) show 18 MX (TeleGen2) show /trademark SYM 9.800 MX ( 1.4 \050TeleSoft) 0.389 WS 0 -2.500 rmoveto 7 /Times-Roman SelectFont /registered SYM 5.320 MX 10 /Times-Roman SelectFont 0 2.500 rmoveto (, UNIX 68K host compiler\051. ) 0.389 WS 2.500 MX (Sun Microsystems SunOS) 0.389 WS /trademark SYM 9.800 MX ( operating) 0.389 WS 2.890 MX (system. ) 0.390 WS 2.500 MX (Link) show 96 127.760 moveto (with these libraries from) show 10 /Times-Bold SelectFont ( /usr/lib/X11/ada) show 10 /Times-Roman SelectFont (:) show 96 145.760 moveto 10 /Times-Bold SelectFont (xlib2.sub) show 10 /Times-Roman SelectFont 9.370 MX (Ada library containing all nongeneric bodies) show 96 163.760 moveto 10 /Times-Bold SelectFont (xlib1.sub) show 10 /Times-Roman SelectFont 9.370 MX (Ada library containing all specifications) show 96 181.760 moveto 10 /Times-Bold SelectFont (libxlib.a) show 10 /Times-Roman SelectFont 13.260 MX (UNIX library containing machine-coded support routines) show 72 199.760 moveto (\267 ) show 18 MX (Rational M68020/UNIX Cross-Development Facility, Rev6_2_4. Hewlett-Packard HP-UX operating system.) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (61) show EndPage %%Page: 62 62 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 756 moveto (62) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: 63 63 BeginPage 792 false PositionPage 290.061 72 moveto 14 /Times-Roman SelectFont (Index) show 72 108 moveto 9 /Times-Roman SelectFont (ADACOM) show 18 MX (59) show 72 119 moveto (ADACOMFLAGS) show 18 MX (59) show 72 130 moveto (ADACRLIB) show 18 MX (59) show 72 141 moveto (ADACRLIBFLAGS) show 18 MX (59) show 72 152 moveto (ADAEXTERNALLIB) show 18 MX (59) show 72 163 moveto (ADALD) show 18 MX (59) show 72 174 moveto (ADALDFLAGS) show 18 MX (59) show 72 185 moveto (ADASRCS) show 18 MX (58) show 72 196 moveto (ADAWORKING) show 18 MX (59) show 72 207 moveto (ADAWORKINGLIB) show 18 MX (59) show 72 218 moveto (ADAWORKINGSTEM) show 18 MX (59) show 72 242 moveto (Check_Machine_Assumptions) show 18 MX (32) show 72 266 moveto (Imake.rules-ada) show 18 MX (58) show 72 277 moveto (Imake.tmpl-ada) show 18 MX (58) show 72 301 moveto (Project.tmpl-ada) show 18 MX (58) show 72 325 moveto (site.def-ada) show 18 MX (58) show 72 336 moveto (sun.cf-ada) show 18 MX (58) show 72 360 moveto (X_Clients) show 18 MX (3, 4) show 72 371 moveto (X_Data) show 18 MX (3, 4) show 72 382 moveto (X_Demos, subsystem) show 18 MX (5) show 72 393 moveto (X_Library) show 18 MX (3, 5) show 72 404 moveto (X_R1000_Support) show 18 MX (3) show 72 415 moveto (X_Testing) show 18 MX (3, 6) show 72 426 moveto (X_Tools) show 18 MX (3, 6) show 72 437 moveto (Xlbip_Base_Converters) show 18 MX (34, 45, 47) show 72 448 moveto (Xlbip_Default_Proc_Vars) show 18 MX (45) show 72 459 moveto (Xlbip_Error_Converters) show 18 MX (34, 45, 47) show 72 470 moveto (Xlbip_Event_Converters) show 18 MX (34, 45, 47) show 72 481 moveto (Xlbip_Get_Reply) show 18 MX (45) show 72 492 moveto (Xlbip_Graphic_Converters) show 18 MX (34, 45, 47) show 72 503 moveto (Xlbip_Image_Internal) show 18 MX (45) show 72 514 moveto (Xlbip_Internal) show 18 MX (45) show 72 525 moveto (Xlbip_Put_Request) show 18 MX (45) show 72 536 moveto (Xlbip_Reply_Converters) show 18 MX (34, 46, 47) show 72 547 moveto (Xlbip_Request_Converters) show 18 MX (34, 46, 47) show 72 558 moveto (Xlbip_String_Map_Generic) show 18 MX (46) show 72 569 moveto (Xlbip_Wire_Converters) show 18 MX (46, 47) show 72 580 moveto (Xlbit_Library3) show 18 MX (45) show 72 591 moveto (Xlbit_Network_Types) show 18 MX (27) show 72 602 moveto (Xlbit_Transport_Defs) show 18 MX (27) show 72 613 moveto (Xlbmp_Debugger) show 18 MX (32, 34, 46, 47) show 72 624 moveto (Xlbmp_Environment) show 18 MX (34, 46) show 72 635 moveto (Xlbmp_Error_Log) show 18 MX (34, 46) show 72 646 moveto (Xlbmp_Generic_Converters) show 18 MX (11, 30, 33, 34, 47) show 72 657 moveto (Xlbmp_Get) show 18 MX (47) show 72 668 moveto (Xlbmp_Internal) show 18 MX (16, 35, 47) show 72 679 moveto (Xlbmp_Network_Interface) show 18 MX (16, 35, 47) show 72 690 moveto (Xlbmp_Put) show 18 MX (47) show 72 701 moveto (Xlbmt_Error_Log) show 18 MX (46) show 72 712 moveto (Xlbmt_Internal) show 18 MX (27) show 72 756 moveto 10 /Times-Roman SelectFont (RATIONAL) show 161.095 MX (April 1991) show 202.195 MX (63) show EndPage %%Page: 64 64 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 72 72 moveto 9 /Times-Roman SelectFont (Xlbmt_Network_Interface) show 18 MX (27) show 72 83 moveto (Xlbmt_Network_Types) show 18 MX (16, 35, 46) show 72 94 moveto (Xlbmt_Numeric_Types) show 18 MX (10, 26, 28, 46) show 72 105 moveto (Xlbmt_Parameters) show 18 MX (34, 46) show 72 116 moveto (Xlbmt_Transport_Defs) show 18 MX (16, 35, 46) show 72 127 moveto (Xlbp_Display) show 18 MX (34, 47) show 72 138 moveto (Xlbp_Proc_Var) show 18 MX (47) show 72 149 moveto (Xlbp_U_Char_Converters) show 18 MX (34) show 72 160 moveto (Xlbp_U_Char_Generics) show 18 MX (30, 33, 34) show 72 171 moveto (Xlbp_Univ_Ptr) show 18 MX (47) show 72 182 moveto (Xlbt_Proc_Var) show 18 MX (46) show 72 193 moveto (Xlbt_Univ_Ptr) show 18 MX (46) show 72 756 moveto 10 /Times-Roman SelectFont (64) show 202.195 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Page: iii 65 BeginPage 792 false PositionPage 254.284 72 moveto 14 /Times-Roman SelectFont (Table Of Contents) show 72 108 moveto 11 /Times-Roman SelectFont (1. Introduction) show 3.866 MX 9 43 LTAB 390.500 MX (1) show 72 121 moveto (2. Library Organization) show 1.080 MX 9 39 LTAB 354.500 MX (3) show 93.600 133 moveto 10 /Times-Roman SelectFont (2.1. Subsystem: X_Clients) show 329.720 MX (4) show 93.600 145 moveto (2.2. Directory: X_Data) show 344.200 MX (4) show 93.600 157 moveto (2.3. Subsystem: X_Demos) show 329.730 MX (5) show 93.600 169 moveto (2.4. Subsystem: X_Library) show 328.070 MX (5) show 93.600 181 moveto (2.5. Subsystem: X_Testing) show 328.060 MX (6) show 93.600 193 moveto (2.6. Subsystem: X_Tools) show 335.280 MX (6) show 72 206 moveto 11 /Times-Roman SelectFont (3. Compiler Dependencies) show 6.243 MX 9 37 LTAB 336.500 MX (9) show 93.600 218 moveto 10 /Times-Roman SelectFont (3.1. Numeric Types) show 356.970 MX (9) show 93.600 230 moveto (3.2. Data Representation) show 332.530 MX (10) show 93.600 242 moveto (3.3. Conversions) show 363.900 MX (11) show 93.600 254 moveto (3.4. Interfaces) show 374.480 MX (12) show 72 267 moveto 11 /Times-Roman SelectFont (4. Machine/OS Dependencies) show 1.196 MX 9 35 LTAB 322 MX (15) show 93.600 279 moveto 10 /Times-Roman SelectFont (4.1. Machine Dependencies) show 320.320 MX (15) show 93.600 291 moveto (4.2. Operating-System Dependencies) show 282.540 MX (15) show 72 304 moveto 11 /Times-Roman SelectFont (5. Library Parameterization) show 1.975 MX 9 36 LTAB 331 MX (17) show 93.600 316 moveto 10 /Times-Roman SelectFont (5.1. Xlib's Parameters) show 341.970 MX (18) show 93.600 328 moveto (5.2. Xlib's Bug Parameters) show 322.800 MX (20) show 72 341 moveto 11 /Times-Roman SelectFont (6. Testing Xlib) show 2.942 MX 9 42 LTAB 385 MX (23) show 93.600 353 moveto 10 /Times-Roman SelectFont (6.1. Testing Groups) show 351.960 MX (23) show 93.600 365 moveto (6.2. Naming Conventions) show 328.620 MX (23) show 93.600 377 moveto (6.3. Support Tools) show 356.950 MX (24) show 72 390 moveto 11 /Times-Roman SelectFont (7. Porting Milestones) show 1.826 MX 9 39 LTAB 358 MX (25) show 93.600 402 moveto 10 /Times-Roman SelectFont (7.1. Go/No-Go Decision) show 333.080 MX (25) show 115.200 413 moveto 9 /Times-Roman SelectFont (7.1.1. Numeric Types) show 333.063 MX (25) show 115.200 424 moveto (7.1.2. Procedure 'Address) show 317.574 MX (26) show 115.200 435 moveto (7.1.3. X Server Input/Output) show 307.809 MX (26) show 93.600 447 moveto 10 /Times-Roman SelectFont (7.2. Logical Operations on Numerics) show 283.090 MX (27) show 93.600 459 moveto (7.3. First Executable) show 348.630 MX (28) show 93.600 471 moveto (7.4. Ada Parametizer) show 346.980 MX (28) show 93.600 483 moveto (7.5. Data Representation) show 332.530 MX (29) show 115.200 494 moveto 9 /Times-Roman SelectFont (7.5.1. Length Clauses) show 333.054 MX (29) show 115.200 505 moveto (7.5.2. Record Representation Clauses) show 276.318 MX (30) show 115.200 516 moveto (7.5.3. Pragma Pack) show 341.559 MX (31) show 115.200 527 moveto (7.5.4. Arrays of Booleans) show 318.816 MX (31) show 115.200 538 moveto (7.5.5. Two-Dimensional Arrays) show 296.568 MX (31) show 93.600 550 moveto 10 /Times-Roman SelectFont (7.6. Second Executable) show 337.530 MX (32) show 93.600 562 moveto (7.7. Data Conversion) show 346.410 MX (33) show 115.200 573 moveto 9 /Times-Roman SelectFont (7.7.1. Using Optimum Layout) show 302.796 MX (33) show 115.200 584 moveto (7.7.2. Using Nonoptimum Layout) show 289.296 MX (33) show 93.600 596 moveto 10 /Times-Roman SelectFont (7.8. Operating-System Customization) show 280.290 MX (34) show 93.600 608 moveto (7.9. X Server Input/Output) show 323.910 MX (35) show 93.600 620 moveto (7.10. Procedure Variables) show 327.540 MX (35) show 115.200 631 moveto 9 /Times-Roman SelectFont (7.10.1. Required Information) show 306.063 MX (35) show 115.200 642 moveto (7.10.2. Use of Procedure Variables) show 285.084 MX (36) show 115.200 653 moveto (7.10.3. Sample Implementation) show 298.053 MX (37) show 136.800 664 moveto (7.10.3.1. Details of the Calling Sequence) show 241.965 MX (37) show 136.800 675 moveto (7.10.3.2. Sample Package Body) show 274.959 MX (37) show 136.800 686 moveto (7.10.3.3. Sample Context Support) show 267.444 MX (39) show 136.800 697 moveto (7.10.3.4. Sample Call Support) show 280.944 MX (40) show 93.600 709 moveto 10 /Times-Roman SelectFont (7.11. Third Executable) show 339.750 MX (41) show 72 756 moveto (RATIONAL) show 161.095 MX (April 1991) show 203.855 MX (iii) show EndPage %%Page: iv 66 BeginPage 792 false PositionPage 72 36 moveto 10 /Times-Roman SelectFont (Rational X Library: Porting Guidelines) show 93.600 72 moveto (7.12. Fourth Executable) show 335.300 MX (42) show 93.600 84 moveto (7.13. Testing) show 378.900 MX (42) show 72 97 moveto 11 /Times-Roman SelectFont (A Modules) show 2.058 MX 9 44 LTAB 403 MX (45) show 93.600 109 moveto 10 /Times-Roman SelectFont (A.1. Machine-Independent Types) show 296.990 MX (45) show 93.600 121 moveto (A.2. Machine-Independent Procedures) show 277 MX (45) show 93.600 133 moveto (A.3. Machine-Dependent Types) show 303.100 MX (46) show 93.600 145 moveto (A.4. Machine-Dependent Procedures) show 283.110 MX (46) show 72 158 moveto 11 /Times-Roman SelectFont (B Ada Parametizer) show 3.551 MX 9 40 LTAB 367 MX (49) show 93.600 170 moveto 10 /Times-Roman SelectFont (B.1. Control Constructs) show 336.390 MX (50) show 93.600 182 moveto (B.2. Parameterization Types) show 317.530 MX (50) show 93.600 194 moveto (B.3. Expressions) show 363.900 MX (50) show 93.600 206 moveto (B.4. Parameters) show 367.800 MX (50) show 93.600 218 moveto (B.5. Program Invocation) show 332.520 MX (50) show 72 231 moveto 11 /Times-Roman SelectFont (C Ship_To_Unix FTP Facility) show 7.699 MX 9 34 LTAB 313 MX (53) show 72 244 moveto (D UNIX Makefile Tools) show 5.801 MX 9 37 LTAB 340 MX (57) show 93.600 256 moveto 10 /Times-Roman SelectFont (D.1. Makefiles) show 371.690 MX (57) show 93.600 268 moveto (D.2. Ada Compilation Ordering) show 303.910 MX (57) show 93.600 280 moveto (D.3. Using MIT's Imake Program) show 295.310 MX (58) show 93.600 292 moveto (D.4. Compiler Controls) show 336.950 MX (59) show 72 305 moveto 11 /Times-Roman SelectFont (E Current Set of Targets) show 6.714 MX 9 37 LTAB 340 MX (61) show 72 318 moveto (Index) show 1.953 MX 9 47 LTAB 430 MX (63) show 72 756 moveto 10 /Times-Roman SelectFont (iv) show 204.415 MX (April 1991) show 161.095 MX (RATIONAL) show EndPage %%Trailer %%Pages: 66 1 %%DocumentFonts: Times-Roman Times-Bold Times-Italic Times-BoldItalic Courier