home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
teachapl.zip
/
teach45.zip
/
TEACH45.ATF
Wrap
Text File
|
1996-07-11
|
58KB
|
707 lines
XNÉIO 0 1 °
XNÉCT 0 1.000000000000011E²13 °
XCÉFC 1 6 .,*0_² °
XNÉRL 0 1233429312 °
XCÉPR 0 °
XCÉLX 1 5 TEACH °
*(1991 6 29 16 0 0 248) °
FCLOSE207 ÉFX 'CLOSE207' 'C207╜''CLOSE'' ''''' 'ÉWA╜C207' °
X 'ÉWA╜ÉSVR ''C207''' 'ÉWA╜ÉEX ''C207''' °
*(1992 2 29 8 32 29 448) °
FDISPLAY ÉFX 'D╜S DISPLAY A;ÉIO;R;C;HL;HC;HT;HB;VL;VB;V;W;N;B' °
'Σ DISPLAY A GENERAL ARRAY IN PICTORIAL FORM' °
'Σ NORMAL CALL IS MONADIC. DYADIC CALL USED ONLY IN' °
'Σ RECURSION TO SPECIFY DISPLAY RANK, SHAPE, AND DEPTH.' 'ÉIO╜0' °
'»(0=ÉNC ''S'')/''S╜µA''' 'R╜╞µ,S Σ PSEUDO RANK.' °
'C╜''┐┌└┘'' Σ UR, UL, LL, AND LR CORNERS.' °
'HL╜''─'' Σ HORIZONTAL LINE.' °
'HC╜HL,''Θ╕'',HL,''~+ε'' Σ HORIZONTAL BORDERS.' °
'HT╜HC[(0<R)⌡1+0<╞²1╞,S]' 'ΣW╜,0╧■╞0µΓ(1⌐µA)╞A' °
'HB╜HC[3+3╛(''2⌡~A╧«A'' ÉEA ''1+╞ε0⌡(1⌐⌡/µA)╞,A'')+3⌡1<µµS]' °
'VL╜''│'' Σ VERTICAL LINE.' °
'VB╜VL,''Φ╟'' Σ VERTICAL BORDER.' °
'V╜VB[(1<R)⌡1+0<²1╞²1╟,S]' °
'»(0εµA)/''A╜(1⌐µA)µΓ╞A'' Σ SHOW PROTOTYPE OF EMPTIES.' °
'╕(1<╧A)/GEN' '╕(2<µµA)/D3' °
'D╜«A Σ SIMPLE ARRAYS.' 'W╜1╞µD╜(²2╞1 1,µD)µD' °
'N╜²1+1╟µD' '╕(0=µµA)/SS' °
'D╜(C[1],V,((W-1)µVL),C[2]),((HT,NµHL),[0]D,[0]HB,NµHL),C[0],(WµVL),C[ °
3]' '╕0' 'SS:HB╜((0 '' '')=╞0µΓA)/'' -''' °
'D╜'' '',('' '',[0]D,[0]HB,Nµ'' ''),'' ''' '╕0' °
'GEN:D╜«DISPLAY■A Σ ENCLOSED ...' 'N╜Dδ.⌠'' ''' °
'D╜(Nδ~1ΦN)≡D' 'D╜(δ≡~'' ''╤D)/D' 'D╜((1,µS)µS)DISPLAY D' °
'╕(2≥µ,S)╟D3E,0' 'D3:D╜0 ²1╟0 1╟«ΓA Σ MULT-DIMENSIONAL ...' °
'W╜1╞µD' 'N╜²1+1╟µD' °
'D╜(C[1],V,((W-1)µVL),C[2]),((HT,NµHL),[0]D,[0]HB,NµHL),C[0],(WµVL),C[ °
3]' 'D3E:N╜²2+µ,S' °
X 'V╜C[Nµ1],[0]VB[1+0<²2╟,S],[0](((²3+╞µD),N)µVL),[0]C[Nµ2]' 'D╜V,D' °
*(1992 2 29 8 32 30 452) °
FGO ÉFX 'GO;b;e;t' 'Σ Expression driver' 'L0:b╜e╜''''' 'æ╜'' ''' °
't╜æ' '╕(^/'' ''=t)/L0' '╕((^/'')OFF ''=5╞6╟t)doif ''exit'')/0' °
'╕(('':''εt)doif ''b╜evaldd (+/^\'''' ''''=t)╟t'')/L0' °
'''e╜ÉEM'' ÉEA t' '╕(0=µ,e)/L0' '╕b/L0' °
'''This is not a valid APL2 expression''' 'æ╜''*''' °
X '╕(''?''⌠╞1╟æ)/L0' 'e' '╕L0' °
*(1993 11 8 18 0 0 200) °
FOPEN207 ÉFX 'OPEN207;C;I;J;M;MAXY;ÉIO' °
'Σ Shares with AP207, sets up window, and initializates' 'ÉIO╜1' °
'╕(2=ÉSVO ''C207'')/0' 'ÉWA╜ÉEX ''C207''' °
'ÉES(2⌠207 SVOFFER ''C207'')/''*** Unable to share with AP207''' °
'C207╜''QUERY'' ''''' °
'ÉES(0⌠╞╞MAXY)/''*** Error received from AP207 on QUERY: '',,«╞╞MAXY╜C °
207' °
'MAXY╜(3πMAXY)[1;2 3]⌡0.8 ΣPhysical screen size for max display' °
'L1:C207╜(Γ''OPEN''),(1+µDELAY)╙0,Γ0 ''AP207'',MAXY,0 0' °
'╕(0=╞╞I╜C207)/L2' °
'''*** OPEN207 can''''t open the display, return code: '' I' '╕' °
'L2:M╜ε²1╞I' 'C207╜''QUERY'' ''''' '╕(0⌠╞╞I╜C207)/ER1' °
'Σ Set up pf as path to font files for APL2/PC' °
'J╜''IBM Video''╧πI[2]' 'pf╜(PATHFONT⌠'' '')/PATHFONT' °
'pf╜pf,((''\''⌠²1╞pf)^0⌠µpf)/''\''' °
'»(~J)/''pf[(pf=''''\'''')/∞µpf]╜''''/''''''' 'I╜πI[3]' °
'I╜,(I[;1]=M)≡I' °
'Σ Define unity aspect ratio window with max x,y of at least 1000,734' °
'J╜╛0.5+(I[2 3]-1)⌡I[9 10]÷(╛/(I[2 3]-1)⌡I[9 10]÷1000 734)' °
'C207╜''WINDOW''(0 0,(I[2 3]-1),0 0,J)' '╕(0⌠╞╞I╜C207)/ER1' °
'C207╜''FONT'' ''''' 'DFS╜(2πC207)[2] Σ SAVE DEFAULT FONT SIZE' °
'ΣCheck that vector font files can be found' °
'C207╜''FONTDEF''(''F''(pf,''ROMSIM.AVF''))''FONT''(''F'' 10)' °
'╕(0⌠╞╞I╜C207)/ER2' °
'C207╜''FONTDEF''(''F''(pf,''THKSQUF.AVF''))''FONT''(''F'' 10)' °
'╕(0⌠╞╞I╜C207)/ER2' '╕0' 'ER1:CLOSE207' °
'''*** Error received from AP207 during OPEN207''' '╕' 'ER2:CLOSE207' °
'''This workspace uses the vector font files supplied with AP207. The °
se''' °
'''files cannot be found. Be sure that the files, which have an exten °
sion''' °
'''of .AVF, are installed. The normal APL2/6000 install process place °
s''' °
'''these fonts in the directory $APL2/fonts/vector but if an alternate °
''' °
'''directory is used, the environment variable $APL207FL must be set t °
o''' '''the proper directory prior to starting the APL2 session.''' °
X '╕' °
XCPATHFONT 1 0 °
*(1995 4 23 14 14 6 304) °
FSVOFFER ÉFX 'DC╜PID SVOFFER SV' 'SV╜(²2╞1 1,µSV)µSV╜πSV' °
'╕(2=ÉNC ''PID'')/DYADIC' 'DC╜ÉSVO SV ╪ ╕0' °
'DYADIC:╕(1^.⌠DC╜PID ÉSVO SV)/END' 'ÉSVE╜15' °
'CHECK:╕(1^.⌠DC╜ÉSVO SV)/END' '╕(0⌠ÉSVE)/CHECK' °
X 'END:SV╜1 0 1 0 ÉSVC SV' °
*(1996 6 22 20 57 21 568) °
FTEACH ÉFX 'TEACH' 'Σ Copyright Z V Jizba 1991; all rights reserved' °
'copyright' 'initialize' 'warning' 'TEACH1 Σ Defining a "pel"' °
'TEACH2 Σ Staicase effect of a nearly horizontal straight line' °
'TEACH3 Σ Graphical driver parameters' °
'TEACH4 Σ Multiple shared variables allowed' °
'TEACH5 Σ The 35 keywords' 'TEACH6 Σ Displaying a graph' °
'TEACH7 Σ Drawing a line' 'TEACH8 Σ Drawing from an array' °
X 'TEACH9 Σ The command MOVE' °
*(1996 6 17 13 25 14 364) °
FTEACH1 ÉFX 'TEACH1;T;D207' 'Σ Introduction to AP 207' °
'''THE UNIVERSAL GRAPHICS AUXILLIARY PROCESSOR'',r' °
'''Auxilliary processor 207 is the graphic processor. It''''s one shar °
ed''' °
'''variable accepts key words followed by arguments to produce the''' °
'''desired effects.'',r' °
'''Before we describe in detail these key words, it is useful to''' °
'''introduce some terminology. Graphic display screens are of two kind °
s.''' °
'''In "vector" based screens such as those of work stations, straight' °
'' °
'''line segments are drawn as straight lines between two points. In th °
e''' °
'''displays more typically used with personal computers the screen is' °
'' °
'''divided into an array of rectangular dots that fill out the screen. °
''' '''In AP 207 these dots are called "pels".'',r' °
'''The number of "pels" per row and per column depends on a parameter' °
'' °
'''called "graphic mode". Each graphic mode supports a specific pel''' °
'''size. When a line is drawn between two points, the pels connecting' °
'' °
'''two points are made visible. However, because each pel occupies''' °
'''a specific location on the screen, "straight" lines may show a''' °
X '''series of steps.'',r' 'end' °
*(1996 6 22 21 10 32 428) °
FTEACH2 ÉFX 'TEACH2;D207;T' °
'''In the drawing to be illustrated, a "straight line" will be drawn b °
etween''' °
'''two points (50 250) and (600 255). Instead of a true straight line, °
we''' °
'''will see a staircase effect. This is because the screen must be tho °
ught of''' °
'''as an array consisting of these small rectangles we have called pel °
s.'',r' °
'''(WHEN YOU PRESS ENTER, WAIT UNTIL THE GRAPH APPEARS, THEN CLICK ON °
THE''' '''SESSION MANAGER SCREEN)''' 'do' °
'T╜TEST ''DRAW''(2 3µ0 50 250 1 400 255)''VIEW'' ''''' 'do' °
'''These pels are the primitive graphic elements to be manipulated by' °
'' '''APL2. A pel has several important properties:'',r' °
''' SIZE''' ''' SHAPE''' ''' COLOR''' °
''' INTENSITY'',r' °
'''To illustrate the range of choices, we will use AP 207 and issue a' °
X'' '''command to describe the available screen choices.''' 'end' °
*(1996 6 17 13 53 28 532) °
FTEACH3 ÉFX 'TEACH3;PARMS;D207;T' 'Σ The graphic driver and parameters' °
'''THE GRAPHICAL DRIVER PARAMETERS'',r' 'T╜207 SVOFFER ''D207''' °
'show ''D207╜''''QUERY'''' '''''''' ╪ PARMS╜test''' °
'''We have assigned to shared variable D207 the keyword "QUERY".''' °
'''This keyword represents a request to provide the current graphic''' °
'''driver, and the graphic modes that this driver supports.'',r' °
'show ''DISPLAY PARMS''' °
'''The variable PARMS is a nested vector with three components. The''' °
'''first component is a scalar integer containing the return code''' °
'''of the ''''QUERY'''' operation. It should be a zero (0). The second °
''' °
'''element of PARMS gives the name of the graphic driver (the default' °
'' '''name is "OS/2 Presentation Manager")). The third element is a''' °
'''numeric array (shape =1 10) listing the parameters of the driver.'' °
X' 'do' 'TEACH3A' 'end' °
*(1996 6 22 21 16 22 412) °
FTEACH3A ÉFX 'TEACH3A;H1;H2;H3' 'Σ PARMS continued' °
'H1╜π(Γ''COL''),«■∞10' 'H2╜π(Γ''VALUE''),«■,3πPARMS' °
'H3╜''CONTENTS'' ''MODE (in OS/2 always=1)'' ''Width of the screen in °
"pels"''' 'H3╜H3,Γ''Height of the screen in "pels".''' °
'H3╜H3,Γ''Number of different colors displayable''' °
'H3╜H3,Γ''Number of different line styles available (FULL, DASHED ...) °
''' 'H3╜H3,Γ''Number of different line widths available *)''' °
'H3╜H3,Γ''Number of different fill patterns available''' °
'H3╜H3,Γ''Number of different markers available''' °
'H3╜H3,Γ''The width (x) of a "pel" in arbitrary units''' °
'H3╜πH3,Γ''The height (y) of a "pel" in arbitrary units''' °
'H1,'' '',H2,'' '',H3' °
''' The ratio x÷y is called the "Aspect ratio"'',r' °
'''*) Line widths come only as FULL line style'',r' °
'''On loading the workspace, the array in 3πPARMS is retrieved by func °
tion''' '''"globals" and stored as the global variable "modes".'',r' °
X 'show ''modes╧3πPARMS''' °
*(1996 6 17 13 39 5 384) °
FTEACH4 ÉFX 'TEACH4;D207A;D207B;D207C' 'Σ The keywords' °
'''We have just used the keyword "QUERY". It illustrates the typical'' °
' '''process of AP 207. A two (or more) element nested vector is''' °
'''assigned to the shared variable (D207). The first component of this °
''' °
'''nested vector is a keyword (such as QUERY). The remaining component °
s''' °
'''provide additional parameters of the operation. After an assignment °
,''' °
'''it is permissible to interrogate the shared variable for a return'' °
' °
'''code. (NOTE: in this and subsequent lessons the contents of the''' °
'''returned values will be obtained using function "test".)'',r' °
''' Typically, the returned value is also a vector with the first elem °
ent''' '''an integer scalar giving the return code.'',r' °
'''A single command is usually not sufficient to complete a graphic''' °
'''display. Typically one must issue several such commands. This can b °
e''' °
'''done using a defined function, or merely catenating two or more''' °
'''commands together. (As we proceed with new keyword commands, we wil °
l''' '''see examples of this.)'',r' 'do' °
'''There is one more feature of AP207 that needs mentioning at this''' °
'''point. More than one shared variable can be activated at one time'' °
,r' 'show ''207 SVOFFER ''''D207A'''' ''''D207B'''' ''''D207C''''''' °
'show ''ÉSVO■ ''''D207A'''' ''''D207B'''' ''''D207C''''''' °
'''These variables may be used if there are two or more windows, or if °
X''' '''you use two or more moving patterns.''' 'end' °
*(1996 6 22 21 21 24 440) °
FTEACH5 ÉFX 'TEACH5;LIST;D207;T' 'Σ The keywords' '''THE KEYWORDS'',r' °
'''There are 35 keywords available with AP 207'',r' °
'LIST╜''ARC'' ''BEGAREA'' ''BITMAP'' ''BOX'' ''CLEAR'' ''CLOSE'' ''COL °
MAP'' ''COLOR''' °
'LIST╜LIST,''CURSOR'' ''DRAW'' ''ENDAREA'' ''ESCAPE'' ''FONT'' ''FONTD °
EF'' ''IMAGE''' °
'LIST╜LIST,''LINETYPE'' ''LOAD'' ''MARKER'' ''MIX'' ''MOVE'' ''OPEN'' °
''PALETTE''' °
'LIST╜LIST,''PATTERN'' ''POINT'' ''PRINT'' ''QUERY'' ''QWRITE'' ''SCIS °
SOR''' °
'LIST╜LIST,''SECTOR'' ''SETPEL'' ''USE'' ''WAIT'' ''VIEW'' ''WINDOW'' °
''WRITE''' 'tab LIST' °
'r,''Three of these keywords also have synonyms'',r' °
''' CLEAR ERASE'',r,'' COLOR COLOUR'',r,'' SECTOR WEDGE'',r °
' °
'''We will study them in a sequence that will gradually allow us to''' °
'''generate ever more complex graphic displays.''' 'do' °
'T╜207 SVOFFER ''D207''' '''KEYWORDS OPEN AND CLOSE'',r' °
'''We begin with OPEN and CLOSE. OPEN defines the graphic mode. It''' °
'''clears the screen, and assigns the driver characteristics. The''' °
'''word OPEN must be followed by a 1 followed optionally by a "title"' °
'' °
'''string and by 4 integers specifying the width, height, x and y''' °
'''position of the window. The first element of the argument (1)''' °
'''represents the "video mode". In APL2OS2 this mode is always 1, but' °
'' °
'''it is permissible to also use the value of 0. A zero should be used °
if''' °
'''the APL2 code is to be ported between different APL2 implementation °
s.'',r' °
'show ''DISPLAY ''''OPEN'''' (1 ''''TEST WINDOW 1'''' 300 200 200 50)' °
'' °
'''Note the format of the command. It is a nested vector of length 2. °
The''' °
'''first element is the keyword "OPEN". The arguments are enclosed as °
a''' '''second element of the vector.'',r' °
'''As the following command is evaluated, the graphical window will''' °
'''flash briefly on your screen.''' 'do' °
'show ''D207╜(Γ''''OPEN''''),Γ1 ''''TEST WINDOW 1'''' 300 200 200 50 ╪ °
DISPLAY test''' °
'''The width and height (300 200) are measured in pels starting at the °
''' °
'''bottom left corner of the screen. The coordinates are of the lower' °
'' °
'''left corner of the window. The size of the screen (200 50) is also' °
'' °
'''in pel units. To see this window, press CTL-ESC and select TEST''' °
'''WINDOW 1.''' 'do' °
'''The command CLOSE with a null argument will close the current windo °
w.''' °
'''It has the same effect as double clicking on the window icon.'',r' °
X 'show ''D207╜''''CLOSE'''' '''''''' ╪ DISPLAY test''' 'end' °
*(1996 7 11 13 7 2 224) °
FTEACH6 ÉFX 'TEACH6;T' 'Σ Describe function TEST' °
'''Before we continue describing the Graphics processor commands,''' °
'''it will be useful to describe the utility function TEST. This''' °
'''function has been designed to simplify the process of illustrating' °
'' '''various AP207 commands.'',r' '(,1)showfn ''TEST''' 'do' °
'''Line [2] activates the shared variable D207. Line [3] sets up the h °
eader''' °
'''of the window. The size is set to 760 pels horizontal and 560 verti °
cal.''' °
'''This will fill out the screen, but still show the header and a port °
ion''' °
'''of the Session Monitor. If a left argument is given, it must comply °
with''' °
'''the format mandated by the command OPEN. Lines [4] and [5] open the °
''' °
'''graphic window. Normally this will produce a flash on the screen. L °
ines''' °
'''[6-8] evaluate the commands given in the right argument. The respon °
se''' °
'''to the command(s) is returned by the function. If the first element °
of''' °
'''U is a zero, TEST will exit. Else line [10] will display the Return °
''' '''Code and the session will be aborted.'',r' °
'''To view the graphic screen on completion of function TEST, press Ct °
rl-Esc,''' °
'''select the graphic screen line, and double click on it. Here is an °
example''' '''using the command BOX to draw a rectangle.'',r' °
'''DO NOT FORGET TO DISPLAY THE WINDOW BEFORE PRESSING ENTER TWICE!'', °
r' 'show ''T╜TEST ''''ARC'''' (150 150 100 100 0 360)''' °
'''Since multiple command sequences are allowed, the right argument to °
''' '''TEST may include an even sequence of valid AP207 commands.'',r' °
'show ''T╜TEST ''''BOX'''' (150 300 50 100) ''''BOX'''' (200 200 0 0)' °
'' °
'''Note that on such multiple command sequences, AP 207 returns a''' °
'''nested vector of depth 3. (This and the commands ARC and BOX will b °
e''' '''discussed in more detail in subsequent lessons.)''' '' °
X 'show ''DISPLAY T''' 'end' °
*(1996 6 20 14 28 10 376) °
FTEACH7 ÉFX 'TEACH7;T' 'Σ The commands DRAW and MOVE' °
'''We are ready now to discuss the primitive graphic commands'',r' °
'''THE COMMANDS DRAW and MOVE'',r' °
'''We begin with the command "DRAW". This command allows the positioni °
ng''' °
'''of the pel on the screen, and connecting two or more consecutive pe °
ls''' '''with straight lines.'',r' °
'''When the OPEN command is given, the default pel position is 0 0. Th °
is''' °
'''represents the location at the lower left hand corner of the screen °
.''' °
'''The command "DRAW" must be followed by an enclosed integer vector, °
or''' °
'''an enclosed integer array with two or three columns. Let us begin b °
y''' '''an example where we use a simple vector of length 2'',r' °
'''When you press Return, a graphic command will be given. Please wait °
''' °
'''a few seconds to give this command a chance to be evaluated. NOTE A °
LSO''' °
'''THAT THE SCREEN WILL FLASH THE GRAPH AND THEN RETURN TO APL2. At th °
at''' °
'''point BEFORE PRESSING ENTER you can press Ctrl-Esc to view the grap °
h.''' 'do' 'show ''T╜TEST ''''DRAW'''' (400 300)''' °
'''We requested a line to be drawn from the current location (0,0) to' °
'' °
'''position (400 300). Since there are 800 pels in a row of the screen °
,''' °
'''and 600 pels in a column of the screen, the line goes about 1/2 of °
the''' °
'''way up, and about 1/2 of the way to the right. The return code is i °
n''' '''variable T'',r' 'show ''DISPLAY T''' °
'r,''The first element of T is the scalar 0 (return code), and the sec °
ond''' '''element is the null vector (no information).''' 'do' °
'''Let us suppose now that we desire to draw two consecutive lines.''' °
'''There are several ways to do it. We begin with the least efficient' °
'' °
'''way, but one that illustrates several aspects of this command'',r' °
'''REMINDER: Press Ctrl-Esc after the flash (before pressing Enter)'', °
r' 'show ''T╜TEST ''''DRAW'''' (400 300) ''''DRAW''''(800 0)''' °
'''The second line begins at point (400 300) and connects with point'' °
' '''(800 0) which is in the lower right of the screen.'',r' °
'''We look at the contents of T''' 'show ''DISPLAY T''' °
'''This time T contains three components. The first component gives''' °
'''the return code for the combined operation (in this case the two''' °
'''DRAW commands). The remaining components give the individual''' °
'''results from each of the multiple commands.''' 'do' °
'''One could ask whether it is possible to combine the two vectors,''' °
'''say (400 300 800 0) into a single operation. The answer is yes and' °
'' °
'''no. Before we can deal with combined vectors we must introduce''' °
'''yet another quantity, a boolean value to signify (move|draw).''' °
'''To illustrate how this works, let us suppose we desire to draw''' °
'''the vector from (400 300) to (800 0) but without showing the line'' °
' '''from (0 0) to (400 300). This is done in the following way'',r' °
'show ''T╜TEST ''''DRAW'''' (0 400 300) ''''DRAW'''' (1 800 0)''' °
'''The boolean value is used to determine whether the transfer of the' °
'' °
'''"current position" is merely a move, or whether it is also a draw.' °
'' '''(This is why the User Guide refers to this value as "md".)''' °
X 'end' °
*(1996 6 21 14 1 10 272) °
FTEACH8 ÉFX 'TEACH8;A;T' 'Σ Array arguments to DRAW' °
'''Because there are two different ways to interpret vectors (i.e. as' °
'' °
'''doublets or triplets), it is not practical to catenate them as''' °
'''the right argument to the command DRAW. However, it IS permissible' °
'' °
'''to combine two or more vectors as an array. The next two examples'' °
' '''illustrate this process'',r' °
'show ''A╜2 2µ400 300 800 0 ╪ DISPLAY A''' °
'show ''T╜TEST ''''DRAW'''' A''' °
'''What we get is the line from (400 300) to (800 0). The line from''' °
'''(0 0) to (400 300) has been made by default just a move. If we''' °
'''wanted to draw both lines, we would have to specify both values''' °
'''of "md"'',r' 'show ''A╜2 3µ1 400 300 1 800 0 ╪ DISPLAY A''' °
'show ''T╜TEST ''''DRAW'''' A''' °
'''The rule for drawing lines from arrays is the following:'',r' °
''' 1. Array with two columns''' °
''' "The first row represents a move. All subsequent''' °
''' rows will be drawn."'',r' °
''' 2. Array with three columns''' °
''' "Rows starting with a zero represent moves. Rows''' °
''' starting with ones represent ''''draws''''."'',r' 'do' °
'''Let us see how this works.'',r' °
'show ''A╜6 2µ50 50 320 100 160 150 480 100 320 50 600 100 ╪ DISPLAY A °
''' 'show ''T╜TEST ''''DRAW'''' A''' °
'''If we add a boolean column to this array, say 0 1 0 1 0 1, we will' °
'' '''see a sequence of disjoint line segments'',r' °
X 'show ''T╜TEST ''''DRAW'''' (0 1 0 1 0 1,[2]A)''' 'end' °
*(1996 7 11 13 31 56 536) °
FTEACH9 ÉFX 'TEACH9;A;T;X;D207' 'Σ The command MOVE' °
'''THE COMMAND MOVE'',r' °
'''Suppose we have completed a drawing, but for some reason have faile °
d to''' °
'''save current position. The command MOVE is one way of finding out.' °
',r' °
'''The keyword ''''MOVE'''' may be followed by either a null vector, o °
r''' °
'''by a two element numeric vector. The first version provides a way t °
o''' °
'''retrieve the current position, and the second version is equivalent °
''' '''to ''''DRAW'''' (0 x y).'',r' °
'''Attempts to use function TEST fail for some reason. It appears that °
''' °
'''AP 207 does not like it when the command MOVE is part of a multiple °
''' °
'''call sequence. Here is an example. The command MOVE should return'' °
' '''the value 100 100. Instead, the returned value is 0.'',r' °
'show ''T╜TEST ''''MOVE'''' (100 100) ''''DRAW'''' (200 200) ╪ DISPLAY °
T''' °
'''When a MOVE command is inserted between two DRAW commands, it does' °
'' °
'''not work either. In the next example we will attempt to do the''' °
'X╜3 3µ1 100 100 0 200 200 1 400 100' '''equivalent of'',r' °
''' ''''DRAW'''' X''' '''where X would be defined as'',r' °
'show ''DISPLAY X''' °
'show ''T╜TEST ''''DRAW'''' (100 100) ''''MOVE'''' (200 200) ''''DRAW' °
''' (400 100) ╪ DISPLAY T''' °
'''The return cods is zero but the MOVE return value is a null vector. °
'',r' °
'''To see how command MOVE behaves, we will invoke shared variable D20 °
7''' '''directly'',r' 'show ''T╜207 SVOFFER ''''D207''''''' °
'show ''D207╜''''OPEN'''' (1 ''''TEST MOVE'''' 760 560 0 0)''' °
'show ''D207╜''''MOVE'''' (100 100) ╪ DISPLAY D207''' °
'''If the manual is correct, one should get either (0 0) or (100 100)' °
'' 'do' °
'show ''D207╜''''DRAW'''' (100 100) ''''MOVE'''' '''''''' ╪ DISPLAY D2 °
07''' '''We get the right answers, but the return code is 1.''' 'do' °
'''This is the end of this lesson. In the next lesson we will learn ho °
w''' °
'''to change the range of the screen addressing, and how to insure''' °
'''that the horizontal and vertical dimensions retain identical scalin °
Xg.''' °
*(1996 6 22 20 41 6 444) °
FTEST ÉFX 'U╜V TEST W;T;M;D207' °
'Σ Test a sequence of graphic commands (W)' 'T╜207 SVOFFER ''D207''' °
'╕(2=ÉNC ''V'')/L1 ╪ V╜1(M╜''TEST '',«εW)760 560 0 0' °
'L1:V╜''OPEN'' V' 'D207╜V ╪ ╕(0=╞D207)/L0 ╪ U╜''Open failed'' ╪ ╕0' °
'L0:D207╜W' 'do' 'U╜D207' '╕(0=╞╞U)/0' °
X 'M,'' has been aborted. The return code is '',╞╞U ╪ ╕' °
XCa 0 % °
*(1992 2 29 8 32 29 448) °
Faddquote ÉFX 'u╜addquote w' °
'Σ Put quotes around a string, and double existing quotes' °
X 'u╜ÉAV[40],((1+w=ÉAV[40])/w),ÉAV[40]' °
*(1992 2 29 8 32 29 448) °
XFaq ÉFX 'u╜aq w' 'Σ Enclose quoted string' 'u╜Γaddquote w' °
*(1992 2 29 8 32 30 452) °
Fav ÉFX 'av;a;n;i;ÉIO' 'Σ Display characters in the Atomic vector' °
'ÉIO╜0' 'a╜22 78µ'' ''' 'n╜3 0«φ12 22µ1+∞256' °
'a[;,(6⌡∞12)°.+2 3 4]╜n' 'a[;6+6⌡∞12]╜φ12 22µÉAV' °
X 'a[7 8 10 13;6]╜'' ''' 'a[14+∞8;68 69 70 72]╜'' ''' 'a' °
*(1992 2 29 8 32 32 460) °
Fback ÉFX 'back;T' 'Σ Reset screen to 25⌡80 size' 'OPEN 124' 'C124╜0 3' °
X 'CLOSE 124 206' °
*(1992 8 10 10 30 51 484) °
Fclosetwo ÉFX 'closetwo W;T;C' 'Σ Retract AP W' '╕(0=ÉSVO ''C2'')/0' °
'╕(0=ÉNC ''C2'')/L0' '╕(0=µ,W)/L0' 'C2╜4 5,W' °
'T╜(δ/0⌠C╜C2)doif ''''''AP2 retraction failed ('''',(«C),'''')''''''' °
'L0:C2╜²1,1+µεsv' 'T╜ÉSVR■''C2'' ''D2'' ''E2''' °
X 'T╜ÉEX■''C2'' ''D2'' ''E2''' °
*(1996 6 27 13 48 32 568) °
Fcopyright ÉFX 'copyright' 'Σ Copyright statement' °
'(10µ'' ''),''Copyright, Z. V. Jizba, 1995,1996'',r' °
'''To see disclaimers, enter ÉCR ''''copyright''''''' 'do' '╕0' °
'''This and subsequent workspaces labelled TEACHxx are made available' °
'' °
'''at no cost to anyone who desires to learn how to use effectively''' °
'''the IBM/OS2 version of APL2.'',r' °
'''This software is provided "AS IS" with no WARRANTY of any kind, eit °
her''' °
'''express or implied. Any risk in its use resides with you, the user °
Xof''' '''these tutorials.''' '''(PRESS ENTER to continue)''' °
XCd 0 " °
*(1992 2 29 8 32 33 464) °
Fdate ÉFX 'u╜date w' 'Σ Format date and time of day' 'u╜«6╞w' °
X 'u╜('' ''⌠u)Γu' 'u╜εu,■''-- .. ''' °
XCdig 1 10 1234567890 °
*(1992 2 29 8 32 28 444) °
Fdo ÉFX 'do;t;e;b' 'Σ Expression driver' 'e╜''''' 'æ╜'' ''' 't╜æ' °
'╕(^/'' ''=t)/0' °
'╕(('':''εt)doif ''b╜evaldd (+/^\'''' ''''=t)╟t'')/2' °
'''e╜ÉEM'' ÉEA t' '╕(0=µ,e)/2' °
'''This is not a valid APL2 expression''' 'æ╜''*''' '╕(''?''⌠╞1╟æ)/2' °
X 'e' '╕2' °
*(1992 2 29 8 32 28 444) °
Fdoif ÉFX 'U╢╜V╢ doif W╢;t╢' 'Σ Rule' '╕(^/~U╢╜V╢)/0' °
X '''U╢╜V╢ doif■ W╢'' ÉEA ''»V╢/W╢''' °
XNdos 0 ²26 °
XCe 1 0 °
*(1996 3 31 14 34 39 548) °
Fend ÉFX 'end' '''²²''' 'e╜''''' 'æ╜'' ''' 't╜æ' '╕(^/'' ''=t)/0' °
'╕(('':''εt)doif ''b╜evaldd (+/^\'''' ''''=t)╟t'')/3' °
'''e╜ÉEM'' ÉEA t' '╕(0=µ,e)/0' °
'''This is not a valid APL2 expression''' 'æ╜''*''' '╕(''?''⌠╞1╟æ)/0' °
X 'e' °
*(1992 2 29 8 32 30 452) °
XFendd ÉFX 'endd' 'Σ End of document' '20µ''²''' 'do' °
*(1996 1 17 16 32 13 380) °
Ferase ÉFX 'erase;t;DISPLAY;GO;SVOFFER;OPEN207;CLOSE207;PATHFONT;TEST' °
't╜ÉNL 3' 't╜(~t^.εlc,'' '')≡t' 't╜ÉEX(~t[;∞5]^.=''TEACH'')≡t' °
X 't╜ÉNL 2' 't╜ÉEX(~t^.εlc,'' '')≡t' 't╜ÉNL 4' 't╜ÉEX(~t^.εlc,'' '')≡t' °
*(1992 2 29 8 32 32 460) °
Fevaldd ÉFX 'u╜evaldd w;c;n' °
'Σ Evaluate a direct definition expression' 'u╜0' 'n╜(w∞''Σ'')-1' °
'c╜(((n╞w)⌠'':'')Γn╞w),Γ''ΣDD '',(n+1)╟w' '╕(label╞c)/0' °
'╕((2=µc)doif ''u╜showdd 1╙c'')/0' °
'╕((3=ÉNC╞c)doif ''u╜⌡µÉ╜(╞c),'''' is already defined.'''''')/0' °
'╕((3=µc)doif ''u╜simdd c'')/0' 'c╜(Γ''α∙ aw'')replace■c' °
'u╜ε''u╜'',((''a''εεc[2 3 4])/''a ''),(╞c),'' w;t;b''' °
'u╜u(5πc)(''b╜(t╜'',(3πc),'')/'',addquote ''u╜'',4πc)' °
X 'u╜u,''╕(t doif b)/0''(''u╜'',2πc)' 'u╜╧ÉFX u' °
*(1992 2 29 8 32 32 460) °
Fexit ÉFX 'exit w' 'Σ Exit if there are too many suspended functions' °
X '╕((10>µÉLC)doif ''w'')/0' '''Please re-enter '',w' '╕' °
XCf 1 2 { °
XCg 1 2 } °
*(1995 12 18 15 37 48 580) °
Fget ÉFX 'u╜v get w;t;ÉPR' 'Σ Prompt for response from keyboard' °
't╜(0=ÉNC ''V'')doif ''V╜1'' ╪ ÉPR╜''''' 'w╜w,(~²1╞v)/'': ''' °
'L0:æ╜w' 't╜æ' '╕((''╕''=(µw)╟t)doif ''╕'')/0' '╕(^/'' ''=w)/L1' °
'╕((~w╧(µw)╞t)doif ''''''PLEASE DO NOT BACKSPACE'''''')/L0' °
't╜(µw)╟t' 'L1:u╜(²1+(,'' ''⌠t)∞1)╟t' '╕(1╞v)/0' 't╜(u⌠'' '')Γu' °
X 'u╜(µt),(Γu),t' °
*(1996 1 12 16 8 28 324) °
Fglobals ÉFX 'globals;T;D207' 'Σ Initialize useful global variables' °
'r╜2╙ÉTC' 'q╜40╙ÉAV' 's╜Φp╜'' '',d╜35╙ÉAV' °
'sv╜(100 211 80 206)(210 124)' 'uc╜''ABCDEFGHIJKLMNOPQRSTUVWXYZ''' °
'lc╜''abcdefghijklmnopqrstuvwxyz''' 'dig╜''1234567890''' °
'g╜Φ'' '',h╜126╙ÉAV' 'f╜ÉAV[33 124]' 'a╜38╙ÉAV' 'ul╜''²''' °
'T╜207 SVOFFER ''D207''' 'D207╜''QUERY'' ''''' 'modes╜3πD207' °
'Σpath╜''C:\APL2\WORK\''' 'Σ''The current path is '',path' °
'ΣT╜1 get ''Enter new path if incorrect, else press Enter: ''' °
X 'Σ╕((0<µT)doif ''path╜T'')/0' °
XCh 0 } °
*(1992 8 10 10 44 11 380) °
Findex ÉFX 'U╜V index W;A;C;H;I;T' 'Σ List contents of an AP 211 file' °
'T╜~(1<╧W)doif ''H╜2πW'' ''W╜1πW''' 'T╜T doif ''H╜''''FUNCTION''''''' °
'T╜(ΓW)ε''DOCS'' ''UTILITY'' ''HELP'' ''TUTOR''' °
'T╜T doif ''W╜path,W,''''.211''''''' '1 OPEN 211' 'D211╜''USE'' W' °
'''File '',W,'' has record length='',1╟D211' °
'D211╜''LIST'' ''NAMES''' 'U╜D211' °
'╕((0=╧U)doif ''U╜''''Unknown file'''''')/0' 'C╜1╟µU╜U[I╜ÉAV√U;]' °
'╕((0=ÉNC ''V'')doif ''CLOSE 211'')/0' 'U╜(C╞H),[1]ul,[1]U' °
'╕((0=1╞V)doif ''U╜0 0 2 tab U'' ''CLOSE 211'')/0' °
'D211╜''LIST'' ''ATTS''' 'A╜D211' °
'A╜(''SZ'' ''ID'' ''DATE'' ''mo'' ''d'' ''TIME'' ''m'' ''s'' ''ms''),[ °
1]ul,[1]A[I;]' 'V╜(Vε0,(∞9),-∞9)/V' 'U╜U,«A[;(0⌠V)/|V]' °
'╕((0εV)doif ''CLOSE 211'')/0' °
'T╜~(0<╛/V)doif ''U╜U[∞2;],[1](2 0╟U)[√(2 0╟A)[;|V];]''' °
'T╜T doif ''U╜U[∞2;],[1](2 0╟U)[ⁿ(2 0╟A)[;|V];]''' 'T╜ÉDL 1' °
X 'CLOSE 211' °
*(1996 1 13 14 57 2 412) °
Finitialize ÉFX 'initialize;t;C2' °
'Σ Initialize workspace. (To add to "sv" keep 100 FIRST)' 'erase' °
X 'globals' °
*(1992 2 29 8 32 29 448) °
Fkeys ÉFX 'keys' 'Σ Display keyboard' °
''' 1 2 3 4 5 6 7 8 9 0 + ⌡''' °
'''SHFT ╒ ■ ² < ≤ = ≥ > ⌠ δ ^ - ÷''' °
'''ALT ╘ ƒ · ⁿ √ Φ φ Θ ╡ τ σ ! Æ''' '''''' °
''' Q W E R T Y U I O P ╜ ╙ ╧''' °
'''SHFT ? ∙ ε µ ~ ╞ ╟ ∞ Ω * ╕ ╨ ╤''' °
'''ALT q w e r t y u i o p æ ≈ ╥''' °
'''CTRL ┌ ┬ ┐ ╔ ╦ ╗''' '''''' °
''' A S D F G H J K L [ ]''' °
'''SHFT α ⌐ ╛ _ ╖ ╢ ° '''' É ( )''' °
'''ALT a s d f g h j k l » «''' °
'''CTRL ├ ┼ ┤ ─ ═ ╠ ╬ ╣''' '''''' °
''' Z X C V B N M , . /''' °
'''SHFT Γ π ∩ ¼ ¥ ÿ | ; : \''' °
'''ALT z x c v b n m Σ ± ≡''' °
'''CTRL └ ┴ ┘ │ ║ ╚ ╩ ╝''' '''''' °
X '''Toggle switch to ASCII is CTL-BACKSPACE''' '''CTRL+G gives beep''' °
*(1992 2 29 8 32 32 460) °
Flabel ÉFX 'u╜label w' °
'Σ Return 1 if w is not a valid character string label (also excludes °
Xl.c.)' '╕(u╜(1<µµw)δ1<╧w)/0' '╕(u╜~^/wεlc,uc,dig)/0' 'u╜w[1]εlc,dig' °
XClc 1 26 abcdefghijklmnopqrstuvwxyz °
XNmodes 2 1 10 1 800 600 65536 8 256 19 10 2826 2830 °
*(1992 2 29 8 32 33 464) °
Fnon ÉFX 'non;t;rc;et;r' °
'Σ Ignore invalid keyboard entries, but evaluate valid APL2 expression °
s' 'æ╜'' ''' 't╜æ' '╕(0=µ(t⌠'' '')/t)/0' '(rc et r)╜ÉEC t' °
X '╕(0=rc)/2' '╕((1=rc)doif ''r'')/2' '╕2' °
*(1992 2 29 8 32 32 460) °
Fnotb ÉFX 'u╜notb w' 'Σ Remove trailing blanks' °
'╕((1<╧w)doif ''u╜notb■ w'')/0' '╕((1<µµw)doif ''u╜πnotb Γ[2]w'')/0' °
X 'u╜(1-(,'' ''⌠Φw)∞1)╟w' °
*(1992 8 14 10 11 43 392) °
Fopentwo ÉFX 'V opentwo W;T' 'Σ Open Shared variable 2' °
'T╜(2=ÉSVO ''C2'')doif ''closetwo ∞0''' °
'T╜2 ÉSVO■''C2'' ''D2'' ''E2''' 'T╜ÉSVO■''C2'' ''D2'' ''E2''' °
'╕((δ/2⌠T)doif ''''''AP2 sharing failed (ÉSVO)'''''' ''closetwo ∞0'')/ °
0' 'L0:D2╜V' 'C2╜1 3,W,2' 'T╜C2' '╕(0=T)/0' °
X 'T,'' AP2 sharing failed (C2)''' °
XCp 1 2 " °
XCpath 1 13 C:\APL2\WORK\ °
*(1992 2 29 8 32 33 464) °
Fpause ÉFX 'v pause w;t' °
'Σ Pause, then print w v spaces right and return' °
X 't╜(0=ÉNC ''v'')doif ''v╜6''' 'do' '(vµ'' ''),w' 'do' °
XCpf 1 0 °
*(1992 7 16 11 12 35 372) °
Fprint ÉFX 'print W;L;D80' 'Σ Print function W on an Epsom printer' °
'╕((~(ÉNC W)ε3 4)doif ''''''This is not a function or defined operator °
X'''''')/0' 'OPEN 80' 'D80╜5' 'L╜,showfn W' 'D80╜π(L⌠r)ΓL' 'CLOSE 80' °
XCq 0 ' °
XCr 0 °
*(1992 2 29 8 32 32 460) °
Freplace ÉFX 'u╜v replace w;i;r;s' 'Σ Replace elements in v in w' °
'i╜Γ∞µu╜w' 's╜2πv╜(v⌠'' '')Γv' 'i╜⌡r╜i⌡■Γ[1]w°.=╞v' °
X 'u[(εi)/εr]╜s[(εi)/εi⌡■∞µs]' °
*(1992 2 29 8 32 38 484) °
Freset ÉFX 'reset' 'Σ Reset parameters to initial screen' °
'TEST ''G╜4 16 1 255 1 1 0 319 0 199 0 319 0 199 0 0 100 100 0 0 0 1 1 °
X 1 0''' °
*(1992 2 29 8 32 33 464) °
Fround ÉFX 'u╜v round w' 'Σ Half adjust w to vth decimal' °
X 'u╜(╛0.5+w⌡10*v)÷10*v' °
XCs 1 2 " °
*(1992 8 10 10 58 49 588) °
Fshared ÉFX 'U╜shared;T;C2;D2;E2' °
'Σ List all shared variables currently active' °
'T╜2 ÉSVO■''C2'' ''D2'' ''E2''' °
'╕((δ/2⌠T╜ÉSVO■''C2'' ''D2'' ''E2'')doif ''''''AP 2 not active'''''')/ °
X0' 'C2╜0' 'U╜D2[;4]' 'U╜((εsv)εU)/εsv' °
*(1992 2 29 8 32 33 464) °
Fshow ÉFX '╢v show ╢w;╢t;╢b' 'Σ Display and execute ╢w' °
'╢t╜(0=ÉNC ''╢v'')doif ''╢v╜0''' °
'╕((0=╧╢w)doif ''show ╢w,'''' '''''')/0' °
'╕((1<╧╢w)doif ''╢v show■ ╢w'')/0' ''' '',╢w' °
X '╕((╢v^'':''ε╢w)doif ''╢t╜evaldd ╢w'')/L0' '''ÉEM'' ÉEA ╢w' 'L0:do' °
*(1992 2 29 8 32 33 464) °
Fshowdd ÉFX 'u╜showdd w;a;b;c;r' °
'Σ Display a direct definition function' °
'╕((1=╧w)doif ''u╜showdd Γw'')/u╜0' °
'╕((3⌠ÉNC╞w)doif ''(ε╞w),'''' is not a function'''''')/0' °
'c╜Γ[2]ÉCR╞w' 'c╜notb(2╞c),(Γ''aw α∙'')replace■2╟c' °
'╕((~''ΣDD''╧3╞2πc)doif ''''''Not a direct definition function'''''')/ °
0' 'u╜1' 'b╜('' ''⌠╞c)Γ╞c' 'a╜'' ''' 'r╜2╟3πc' °
'╕((3=µc)doif ''a,(╞w),'''':'''',r,(3<µ2πc)/'''' Σ'''',3╟2πc'')/0' °
'a╜a,(╞w),'':'',(2╟5πc),'':''' 'b╜(+\r=''('')-+\r='')''' 'b╜b∞0' °
X 'a╜a,(²3╟(b-1)╞3╟r),'':'',2╟»(b+2)╟r' 'a,(3<µ2πc)/'' Σ'',3╟2πc' °
*(1996 1 21 14 48 34 536) °
Fshowfn ÉFX 'u╜v showfn w;f;n;t;ÉIO' 'Σ Simulate the STSC ÉVR command' °
't╜(0=ÉNC ''v'')doif ''v╜,0''' 'ÉIO╜0' °
'u╜'' '',''╖'',w,''[É]'',(╞v)╞''╖''' 'n╜1╞µf╜ÉCR w' °
'v╜v[0],((1╟v)ε∞n)/1╟v' 'n╜«∞n' 'n╜(n⌠'' '')Γn' °
'f╜(π''['',■n,■Γ''] ''),f' °
't╜(1<µ,v)doif ''f╜f[1╟v;]'' ''u╜''''''''''' 'u╜²1╟u,r,,f,r' °
X 'u╜((-+/^\'' ''=Φu)╟u),('' ''(r,'' ╖'',date 2 ÉAT w))[╞v]' °
*(1992 2 29 8 32 33 464) °
Fsimdd ÉFX 'u╜simdd w;e' 'Σ Simple direct definition mode' 'u╜0' °
'╕((0⌠ÉNC╞w)doif ''''''Already defined'''''')/0' 'e╜''α''ε2πw' °
'w[2]╜Γ''u╜'',''α∙ aw'' replace 2πw' 'w╜w[1 3 2]' °
X 'w[1]╜Γε''u╜'',(e/''a ''),w[1],'' w''' 'u╜╧ÉFX w' °
XAsv╜(100 211 80 206)(210 124) °
XCt 1 7 °
*(1992 6 3 9 59 17 424) °
Ftab ÉFX 'U╜V tab W;T;A;B;C;D;E;F;G;M;ÉPW' 'Σ Tabulate list W' °
'T╜(0=ÉNC ''V'')doif ''V╜0''' 'M╜''Invalid data for tabulation''' °
'V╜4╞V' 'ÉPW╜130╛30⌐G╜V[2]+79⌡V[2]=0' °
'L1:╕((1<╧W)doif ''''''W╜∞0'''' ÉEA ''''W╜πW'''''')/L1' °
'╕(((0=µεW)δ2<µµW)doif ''U╜(~V╧4╞0)/M'')/0' °
'T╜(1≥µµU╜«W)doif ''U╜πW╜(U⌠'''' '''')ΓU''' °
'T╜(0<V[1])doif ''U╜(«(Φ1,╞µW)µ(V[3]µ'''' ''''),∞(╞µW)-V[3]),'''' '''' °
,U''' '╕(G<30)/0' 'T╜(F╜µεV[4])+C╜1╟B╜µA╜(V[3],0)╟U' °
'T╜⌐(1╞B)÷1⌐╛(ÉPW+F)÷T' 'U╜(E╜(V[3],C)╞U),[1](B╜T,1╟B)╞A' °
'''D╜εV[4]'' ÉEA ''D╜ÉAV[εV[4]+33⌡V[4]=0]''' 'L0:A╜(T,0)╟A' °
X '╕(0=1╞µA)/0' 'U╜U,(((T+V[3]),µD)µD),E,[1]B╞A' '╕L0' °
*(1996 6 19 12 31 47 524) °
Ftest ÉFX 'U╜test;T' 'Σ test return code' '╕(0=╞╞U╜D207)/0' °
X '''SESSION ABORTED: The return code is '',╞U ╪ ╕' °
*(1992 9 5 9 10 34 316) °
Ftestap ÉFX 'U╜testap W;B;D;S;T' °
'Σ Test for existence of specific AP"s' 'D╜''D'',■«■W╜,W' °
'T╜W ÉSVO■D' 'U╜0' '╕((^/B╜2=ÉSVO■D)doif ''T╜ÉEX■ D'')/0' °
'T╜''The following Auxilliary Processor'',(S╜1<+/~B)╞''s''' °
'T,(ε(S+1)╙'' is'' '' are''),'' not available'',(~B)/W' 'U╜1' °
X 'T╜ÉEX■D' °
XCuc 1 26 ABCDEFGHIJKLMNOPQRSTUVWXYZ °
XCul 0 ² °
*(1996 6 13 13 16 24 352) °
Fwarna ÉFX 'warna;T' 'Σ clear AP124 and explai' °
X 'T╜ÉSVR■''C124'' ''D124''' 'T╜ÉEX■''C124'' ''D124''' °
*(1996 6 19 12 29 5 348) °
Fwarnb ÉFX 'warnb;T' 'Σ clear AP124 and explain' °
'''WARNING: As you study this lesson, try to respond to all requests.' °
',r' °
'''Of course as in all these tutorials, you are encouraged to experime °
nt''' °
'''at any pause. When an AP 207 command is issued, there may be an int °
erval''' °
'''of a second or two of no action, followed by a flash on the screen. °
''' °
'''After such a flash, press Ctrl-Esc, and select from the Window List °
X''' '''the AP 207 window (usually the last entry on the list).''' 'do' °
*(1996 7 11 13 8 49 416) °
Fwarning ÉFX 'warning;T' 'Σ clear AP207 and explain' 'warna' 'warnb' °
'''As in lesson "TEACH44", the function "test" is used to verify''' °
'''that a command given to AP207 was successful. Unlike the function'' °
' °
'''in TEACH44, this one returns a nested vector. The first element of' °
'' °
'''this vector contains the Return Code. However, since it may be a''' °
'''nested vector line [2] selects the Return Code by applying ╞ twice. °
X'',r' 'showfn ''test''' 'end' °