home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
teachapl.zip
/
APL2OS2T.ZIP
/
TEACH42.ATF
< prev
next >
Wrap
Text File
|
1996-05-30
|
62KB
|
759 lines
XNÉIO 0 1 °
XNÉCT 0 1.000000000000011E²13 °
XCÉFC 1 6 .,*0_² °
XNÉRL 0 16807 °
XCÉPR 0 °
XCÉLX 1 5 TEACH °
*(1991 11 11 8 25 10 304) °
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' °
*(1991 11 11 8 25 12 312) °
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' °
*(1995 8 4 12 36 1 304) °
FOS2 ÉFX 'V OS2 W;OS;T' 'Σ Simulation of OS2 prompt' °
'╕(0⌠ÉNC ''V'')/L1 ╪ V╜''D:>''' °
'L1:╕(2=100 SVOFFER ''OS'')/L2 ╪ ''Offer failed'' ╪ ╕0' °
'L2:╕(1≥µ(W⌠'' '')/W)/L0 ╪ OS╜W ╪ ╕0' 'L0:æ╜V' '╕(^/'' ''=T╜3╟æ)/0' °
X 'OS╜T' '╕L0' °
*(1992 12 22 11 34 8 396) °
FPROFILE ÉFX 'PROFILE;X;WS;ÉIO' 'ÉIO╜0' 'WS╜101 ÉSVO ''X''' °
'»(2⌠ÉSVO ''X'')/''╕0,µÉ╜''''AP101 is not active''''''' °
'X╜''F1 )VARS'',ÉTC[1]' 'X╜''F2 )FNS'',ÉTC[1]' 'X╜''F3 )SI'',ÉTC[1]' °
'X╜''F4 ÉWA'',ÉTC[1]' 'X╜''F5 ╕ÉLC'',ÉTC[1]' 'X╜''F6 ╕ÉLC+1'',ÉTC[1]' °
'X╜''F7 [É0-20]'',ÉTC[1]' 'X╜''F8 [É21-40]'',ÉTC[1]' °
'X╜''F9 )LOAD ''' 'X╜''F10 )SAVE'',ÉTC[1]' 'X╜''F11 )LIB 1'',ÉTC[1]' °
'X╜''F12 )LIB 2'',ÉTC[1]' 'X╜''F17 [É41-60]'',ÉTC[1]' °
'X╜''F18 [É61-80]'',ÉTC[1]' 'X╜''F19 )IN ''' 'X╜''F20 )OUT ''' °
'X╜''F21 )LIB .APL'',ÉTC[1]' 'X╜''F22 )LIB .ATF'',ÉTC[1]' °
'X╜''F27 [É81-100]'',ÉTC[1]' 'X╜''F28 [É101-120]'',ÉTC[1]' °
'X╜''F30 )SAVE ''' °
'X╜''L4 C:\'' Σ Definition of the root directory as a library' °
'Σ X╜''L5 C:\APL2\WORK\''' 'Σ X╜''L6 C:\APL2\IBM\''' °
'Σ X╜''ST )CLEAR'',ÉTC[1]' °
'Σ ╕(1╞²2╞,(8µ2)ÿÉAV∞1 ÉPK 0 1040)/0 Σ Test for Math Co-processor' °
X 'Σ EMUL8087I Σ Initialise Math Co-processor Emulator' °
*(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 4 10 14 1 43 352) °
FTEACH ÉFX 'TEACH' 'Σ Introduction to shared variables' 'copyright' °
'''Welcome to lesson #42 of the APL2OS2 tutorial. If you have no previ °
ous''' °
'''experience with APL2OS2, you might begin with lesson #41 (TEACH41). °
If''' °
'''you are new to APL, you should begin with the workspace TEACH1. If °
you''' °
'''already know APL and if you use APL2/PC, the workspaces named TEACH °
23''' °
'''trough TEACH40 have tutorials on Auxilliary Processors supported by °
''' °
'''that version of APL2. This lesson deals with the subject of Auxilli °
ary''' '''Processors that are available on APL2OS2.'',r' °
'''(NOTE: this and subsequent lessons will NOT work with APL2/PC!!!)'' °
' 'do' 'initialize' 'TEACH1 Σ Introduction' °
'TEACH2 Σ What are Auxilliary Processors Sharing System Functions' °
'TEACH3 Σ Connecting to an AP; ÉSVO -- IBM function SVOFFER' °
'TEACH4 Σ ÉSVC ÉSVR ÉSVQ ÉSVS' 'TEACH5 Σ AP 100' °
'TEACH6 Σ Sample function using AP 100 to invoke DOS' °
'TEACH7 Σ ÉAP 101' °
'Σ TEACH7 is followed by function TEACHB containing:' °
X 'Σ TEACH8 Σ Sample function to illustrate usage of AP 101' °
*(1996 4 7 13 57 7 416) °
FTEACH1 ÉFX 'TEACH1' 'Σ What are shared variables?' °
'''SHARED VARIABLES'',r' °
'''To be useful in practical applications, APL2 must be able to interf °
ace''' °
'''with its environment. The language does not support any primitive'' °
' °
'''functions for this purpose. There are, however System Functions tha °
t''' °
'''provide the necessary links. Since these are not part of the langua °
ge,''' °
'''there is no standard that is accepted by all vendors of APL.''' °
'do' °
'''IBM versions of APL support an approach called "Shared Variables".' °
'' °
'''The purpose of this lesson and subsequent ones is to describe this °
way''' '''of communicating with the non-APL environment.'',r' °
'''In the simplest case, one merely desires to connect in some way to' °
'' °
'''existing non-APL files or systems (such as OS/2). In the most compl °
ex''' °
'''situations, one might want to communicate with another computer in °
a''' °
'''network, not knowing whether that computer (or for that matter anyo °
ne''' °
'''using that computer) is available. The concept of Shared Variables' °
'' °
'''was designed in the most general way, so that it can handle the mos °
t''' °
'''complex situations that are possible with current state of the art. °
'',r' °
'''A shared variable is just like an APL2 variable. Data can be assign °
ed''' °
'''to it. When it is invoked, data are displayed. However the variable °
''' °
'''is like a gate into another dimension. Data coming in or out has be °
Xen''' '''transmitted to a non-APL environment.''' 'end' °
*(1996 4 7 13 58 40 552) °
FTEACH2 ÉFX 'TEACH2' 'Σ Shared variable offer' °
'''AUXILLIARY PROCESSORS'',r' °
'''Connecting two different software systems could be compared to the' °
'' °
'''process of exchanging ambassadors between two different cultures. E °
ach''' °
'''culture has its own ways of dealing with all kinds of communication °
s.''' °
'''The embassador to be effective, must learn all the proper ways of'' °
' '''dealing with the representatives of the host government.'',r' °
'''In the same manner, when two distinct software systems are mated, o °
ne''' °
'''must be able to transform its own information into a form that will °
''' °
'''be understandable by the other. The mechanics of this transformatio °
n''' °
'''is frequently referred to as PROTOCOL. The solution that IBM produc °
ed''' °
'''to handle this problem involves specialized software called AUXILLI °
ARY''' °
'''PROCESSORS (abbreviated AP''''s). To go from APL2 to any one of the °
many''' °
'''non-APL systems there are specialized AP''''s that are identified b °
y''' °
'''numbers. For example, AP100 is the name of the Auxilliary Processor °
''' °
'''number 100. As we will see shortly this one connects with OS/2.''' °
'do' °
'''Before we study specific AP''''s, we must describe the APL2 System' °
'' °
'''functions that support the communication between APL2 and the outsi °
de''' '''environment. There are six System functions:'',r' °
''' Shared Variable offer (ÉSVO)''' °
''' Shared Variable Control (ÉSVC)''' °
''' Shared Variable Event (ÉSVE)''' °
''' Shared Variable Retract (ÉSVR).''' °
''' Shared Variable Query (ÉSVQ)''' °
X ''' Shared Variable State (ÉSVS)''' 'end' °
*(1995 7 28 14 6 31 404) °
FTEACH3 ÉFX 'TEACH3;UNO;DOS;TRES;svoffer;T' °
'Σ Shared variable offer ÉSVO' °
'''SHARED VARIABLE OFFER (SET) ÉSVO'',r' '''The invocation is:'',r' °
''' [APno] ÉSVO (variable(s) name(s) in quotes)'',r' °
'''(where the square brackets [] indicate an optional argument)''' °
'do' °
'''This System Function can be thought of as an ambivalent primitive. °
The''' °
'''left argument describes the AP(s) to be shared. The right argument °
is a''' °
'''list of variables that are to be used as "ambassadors" to the non-A °
PL''' °
'''system. When a shared variable offer is made, the process is much a °
s''' °
'''if making a phone call. In the first stage, the call must go throug °
h''' °
'''to the specified party. When this happens, ÉSVO returns a 1, meanin °
g''' °
'''that a tentative line connection has been made. In IBM terminology, °
''' '''a COUPLING of degree 1 has been achieved.''' 'do' °
'''To make the connection complete, APL2 must wait until the call is'' °
' °
'''answered (someone picks up the phone at the other end). When that'' °
' °
'''happens, the degree of coupling becomes 2, and communication may''' °
'''begin. In the OS2 environment, the wait for this second coupling''' °
'''may be sufficiently long so that other processing may have taken''' °
'''place. In practice this means that there must be a way to prevent'' °
' °
'''APL2 processing while the wait for complete coupling is still in''' °
'''process. To illustrate how the process of connecting to an AP,''' °
'''consider function "svoffer", which is a simplification of the IBM'' °
' '''utility function SVOFFER supplied in workspace 1 UTILITY''' °
'T╜''DC╜PID svoffer SV'' ''Σ Open AP PID USING SV'' ''╕(1⌠DC╜PID ÉSVO °
SV)/0''' °
'T╜ÉFX T,''ÉSVE╜15'' ''CHECK:╕(1⌠DC╜ÉSVO SV)/0'' ''╕(0⌠ÉSVE)/CHECK''' °
'showfn ''svoffer''' 'do' °
'''In this sample function we assume that PID is a single integer,''' °
'''say 100 and SV is a label, say ''''D100''''. Line [2] therefore off °
ers''' °
'''to share variable named SV╜''''D100'''' to Auxilliary Processor PID °
╜100,''' °
'''and captures the result in DC. Normally the value returned in DC is °
1.''' °
'''For any other value the function will exit. Assuming now that DC=1, °
''' °
'''line [3] assigns a value of 15 seconds to the event clock ÉSVE.''' °
''' | This clock can be compared to ÉDL in the sense tha °
t|''' °
''' | it runs backwards from 15 down to 0 (while ÉDL╜15 °
|''' °
''' | would run forward from 0 up to 15+). °
|''' 'do' 'showfn ''svoffer''' °
'''During the 15 second interval, APL2 loops lines [4]and[5]. As long' °
'' °
'''as the monadic value of ÉSVO remains a 1, line [5] tests whether th °
e''' °
'''clock has run out. After either 15 seconds, or after the degree of' °
X'' '''coupling becomes 2, the function exits.''' 'do' 'TEACH3A' °
*(1996 4 7 14 0 39 320) °
FTEACH3A ÉFX 'TEACH3A' 'Σ Shared variable event ÉSVE' °
'''The sample function "svoffer" is not adequate for general use. The' °
'' '''function SVOFFER in workspace 1 UTILITY provides for multiple''' °
'''arguments. It also deals with a communication protocol called Share °
d''' °
'''Variable Event. Here is a listing of that function with all comment °
s''' '''removed:''' 'showfn ''SVOFFER''' 'do' °
'''The right argument contains the name of one or more shared variable °
s.''' °
'''The left argument may be a numeric vector of one or more Auxilliary °
''' °
'''Processors. The function returns the final degree of coupling for'' °
' '''each shared variable''' 'do' °
'''Line [1] converts the right argument into a rank 2 array. If there °
is''' °
'''no left argument, line [3] returns the degree of coupling of the ri °
ght''' °
'''arguments and exits. If the left argument is present, it must be a' °
'' °
'''scalar integer or a vector of the same length as the number of rows °
in''' °
'''the right argument. Line [4] establishes the initial coupling (1). °
If''' °
'''as expected, the coupling is 1, evaluation proceeds to line [5]. (E °
lse''' °
'''the branch to line[8] continues the process on the assumption that °
the''' '''coupling is already equal to 2.)''' 'do' °
'''Lines [5-7] are the same as already discussed under function "svoff °
Xer".''' 'end' °
*(1996 4 13 13 34 6 344) °
FTEACH4 ÉFX 'TEACH4;T;TEST;D100' °
'Σ Shared variable control, and retract' °
'''SHARED VARIABLE CONTROL (ÉSVC)'',r' °
'''Line [8] of function SVOFFER invokes the APL2 System Function Share °
d''' '''Variable Control:''' '0 8 showfn ''SVOFFER''' °
'''(Note that result of the expression on line [8] is assigned to SV,' °
'' °
'''which is local to function SVOFFER; in other words it is ignored!)' °
',r' °
'''The vector 1 0 1 0 is applied as the left argument to ÉSVC. The fou °
r''' °
'''boolean values determine who (APL2 or the other party) can (set or' °
'' °
'''use) the shared variable. A one means use (or set) is allowed only' °
'' '''once by each party, and a zero means there is no constraint.''' °
'do' °
'''When two parties communicate over a single line, one party talks,'' °
' °
'''and the other party listens. When the first party is finished talki °
ng,''' °
'''it should issue an "end of talk" message (like "over and out"). The °
''' °
'''Shared Variable Control acts as the messenger of access to the''' °
'''communication channel. Keep in mind that the channel may be used by °
''' °
'''other parties, so that it cannot be locked up in a "synchronous" mo °
de''' °
'''of operation. A one in the access vector in effect prevents a party °
''' °
'''from issuing or receiving of data. To see how this works, we will'' °
' '''step through the process of sharing variable A100 with AP 100''' °
'TEACH4A' 'do' °
'''There are three additional System Functions/Variables that deal wit °
h''' '''shared variables.''' 'do' °
'''SHARED VARIABLE RETRACT (ÉSVR)'',r' °
''' ÉSVR ''''Shared Variable(s)'''''',r' °
'''This System Function can be thought of as a monadic primitive.''' °
'''The right argument is the name of the shared variable to be retract °
ed.''' °
'''The function returns the degree of coupling before the call. (Natur °
ally''' '''after the call the degree of coupling is 0.)'',r' °
'T╜100 SVOFFER ''D100''' °
'show ''ÉSVR ''''D100'''''' ''ÉNC ''''D100'''''' ''ÉSVC ''''D100'''''' °
' °
'''If a shared variable is invoked inside a defined function, and if t °
he''' °
'''variable name is localized, then ÉSVR need not be invoked on exit f °
rom''' '''the function.''' 'do' °
'T╜''TEST;DOS'' ''Σ Localized shared variable'' ''100 SVOFFER ''''DOS' °
'''''' 'T╜ÉFX T,Γ''''''Degree of coupling of DOS in TEST is 2''''''' °
'showfn ''TEST''' °
'show ''TEST'' ''ÉSVO ''''DOS'''' Σ On exit from TEST, DOS has couplin °
g=0''' 'do' '''SHARED VARIABLE QUERY (ÉSVQ)'',r' °
'''The information on this System Function in the Language Reference'' °
' °
'''hard copy manual is completely wrong and should be disregarded.''' °
'''Consult instead the on line documentation. (Select the icon''' °
'''labelled "Language Reference".)'',r' °
'''What this function does is to query any and all external sources''' °
'''for incoming requests to share variables. Clearly, this function is °
''' °
'''useful to those who have APL2OS2 Advanced version. However, even if °
''' °
'''you have the introductory version, you may be able to test how this °
''' '''function works. (You can find out how by entering: TEACHSVQ''' °
'do' '''SHARED VARIABLE STATE'',r' °
'''Consult the on-line documentation in the Language Reference manual' °
'' °
'''on this System Function. This function is associated with the use'' °
' °
'''of Shared Variable Control. Its utility is as of now unclear to me. °
X''' 'end' °
*(1995 7 29 14 23 45 532) °
FTEACH4A ÉFX 'TEACH4A;D100;T;SVO' °
'Σ Example of usage of Shared Variable Control' °
'''We begin by invoking ÉSVC monadically on the as yet undefined''' °
'''variable "D100":'',r' °
'show ''ÉNC ''''D100'''''' ''ÉSVC ''''D100''''''' °
'''The zeros in the access control vector indicate that there is no''' °
'''constraint on the as yet undefined variable "D100". We next issue'' °
' '''the ÉSVO command, and test for ÉSVC AGAIN'',r' °
'show ''100 ÉSVO ''''D100'''''' ''ÉNC ''''D100'''''' ''ÉSVC ''''D100'' °
''''' °
'''The ÉSVO command returns a degree of coupling of 1, the variable "D °
100"''' °
'''is now defined, and the access vector has a constraint on AP100 to °
use''' '''this variable more than once.''' 'do' °
'''We next proceed to increase the degree of coupling to 2. To do that °
,''' '''we use (local) function SVO:''' °
'T╜ÉFX ''U╜SVO W'' ''ÉSVE╜15'' ''╕(1⌠U╜ÉSVO W)/0'' ''╕(0⌠É╜ÉSVE)/2''' °
'showfn ''SVO''' °
'''(Should there be a delay, line [3] will display the current value o °
f''' '''the Shared Variable Event.)''' 'do' °
'show ''SVO ''''D100'''''' ''ÉSVC ''''D100''''''' °
'''The degree of coupling is now 2, but there has been no added constr °
aint''' '''on the control vector.''' 'do' °
'''Line [8] of function SVOFFER sets additional constraint on APL2. AP °
L2''' °
'''can NOT set or use D100 without an intervening acces by AP100.'',r' °
'show ''1 0 1 0 ÉSVC ''''D100''''''' °
X '''Of course the constraint on use by AP100 remains.''' °
*(1996 4 9 13 21 22 340) °
FTEACH5 ÉFX 'TEACH5' 'Σ Auxilliary processor 100' °
'''AUXILLIARY PROCESSOR 100 (OS/2)'',r' °
'''This Auxilliary Processor is similar to the AP 100 for APL2 DOS,''' °
'''except it communicates with OS/2. Unlike APL2 DOS, none of the OS/2 °
''' °
'''Auxilliary Processors need to be named in the APL2 invocation.'',r' °
'''There is, however, a significant difference in the way it behaves.' °
'' 'do' '''Here is a sample usage of this function:'',r' °
'show ''100 SVOFFER ''''D100'''''' ''D100╜''''DIR C:''''''' °
'''The first expression activated the shared variable D100. The second °
''' °
'''one requested to see the directory of the C: disk. Yet nothing is'' °
' °
'''visible on the screen. The reason for this is that non-APL (or to s °
ay''' °
'''external) output is directed NOT to the Session Manager, but to the °
''' °
'''"APL2 Introductory (or Advanced)" window. To see the listing of the °
''' '''specified directory, do the following:'',r' °
''' 1. Press Ctrl AND Esc simultaneously. A window named "Window List" °
''' ''' will appear''' °
''' 2. Select the APL2/2 Introductory/Advanced line''' °
''' (an APL2/2 window will appear displaying the desired output.)'' °
' °
''' 3. To return to APL2, click on any portion of the still visible''' °
''' Session Manager window. (The APL2/2 window will disappear.)''' °
'do' '''There is another way to get the Window List:'',r' °
''' 1. Click on the Title Bar Icon (Red icon in upper left corner)''' °
''' 2. Click on the last line "Window List"''' 'do' °
'''AP 100 will accept any valid DOS or OS/2 command.'',r' °
'''(If you log on to APL2 with the invocation "-sm off", you will not' °
'' °
'''get the Session Manager and AP100 commands will appear on your''' °
'''screen; however, you will not have APL2 fonts. For more on this''' °
X '''see the tutorial dealing with AP 120.)''' 'end' °
*(1996 4 7 14 6 54 404) °
FTEACH6 ÉFX 'TEACH6' 'Σ Sample function OS2' °
'''Here is a listing of function OS2. Its right argument is a characte °
r''' °
'''string containing an OS/2 or DOS expression or a null string. An''' °
'''optional left argument gives the desired OS2 prompt (default: D:>). °
''' °
'''If the right argument contains non-blank characters, it will be''' °
'''evaluated by Shared Variable "OS" of AP 100. A null string will''' °
'''produce the OS/2 prompt and apply whatever is entered as an OS/2''' °
'''command. (You still have to click on the APL2/2 line on the Window' °
'' '''list to see the result).''' 'showfn ''OS2''' 'do' °
'''It should be noted that not all OS2/DOS expressions will behave as' °
'' °
'''if you were in OS2. For example "CD ..." will display the new promp °
t,''' °
'''but will not implement it. If you expect to invoke AP 100 often, yo °
u''' '''may wish to take a look at workspace OS2 in library 2.'',r' °
'''We will study this workspace later, because it uses AP''''s that ha °
ve''' °
'''not been discussed yet. The functions (specifically one called PIPE °
)''' °
'''transfers the requested information to and from a file, so that the °
''' °
'''OS2/DOS command results appear on your Session Monitor screen.''' °
X 'end' °
*(1996 4 13 13 35 35 464) °
FTEACH7 ÉFX 'TEACH7;S;T;X;ST;SAMPLE' °
'Σ Alternate input (Stack) Processor' °
'''ALTERNATE INPUT (STACK) PROCESSOR (AP 101)'',r' °
'''In many applications one needs to be able to simulate entries from' °
'' °
'''the keyboard, without actually using the keyboard. For example,''' °
'''if an application is for NON-APL users, it is too much to expect''' °
'''them to know how to log off from APL. A Stack Processor can readily °
''' '''provide the necessary character string ")OFF".'',r' °
'''The AP 101 under APL2OS2 behaves quite differently from the AP 101' °
'' °
'''of APL2 DOS. There are no special characters in the argument to the °
''' °
'''shared variable. A character string is treated in full as the''' °
'''expression to be evaluated. Special commands to AP 101 are given''' °
'''by numeric arguments to the shared variable.''' 'do' °
'show ''101 SVOFFER ''''ST''''''' °
'''Shared variable "ST" is now active. One or more strings can now''' °
'''be entered into the stack. However, pressing "Enter" will cause''' °
'''the string to be evaluated.'',r' 'show ''ST╜''''∞5''''''' °
'''The utility of AP 101 can be illustrated by function SAMPLE:''' °
'S╜''SAMPLE;T'' ''Σ Sample function to illustrate behavior of AP 101'' °
' 'S╜S,''ST╜''''''''''''First'''''''''''''' ''ST╜''''1 2 3''''''' °
'S╜S,''ST╜''''''''''''OUT'''''''''''''' ''''''3 strings have been ente °
red on stack ST''''''' 'X╜ÉFX S,''T╜æ'' ''T╜É''' 'showfn ''SAMPLE''' °
'do' 'show ''SAMPLE''' °
'''Lines [2],[3] and [4] fill the stack with three expressions''' °
'''(NOTE: The strings in quotes MUST be valid APL2 expressions''' °
'''or APL2 Systems Commands/Functions/Variables.)''' °
'''As the stack is filled no action takes place (as indicated by''' °
'''the explanation on line [5]). Then, each time a (æ or É) is''' °
'''entered, the contents of the stack is cleared by one entry.''' °
'''Naturally a Quote symbol(É) will require an expression that will''' °
'''result in a numeric array. The last entry (OUT) was caused by''' °
'''the exit from function SAMPLE''' 'do' °
'''The default for clearing the stack is FIFO "First In First Out".''' °
'''Since one more entry is left on the stack, it is displayed on''' °
'''exit from function SAMPLE.''' 'do' °
'''To illustrate how a System Command can be issued under the control' °
'' '''of AP 101, we have to make a detour. Normally, entering'',r' °
''' ST╜'''')LIB 1'''''',r' °
'''would do just what is desired. In this lesson, however, every entry °
''' °
'''is evaluated as if it were a valid APL2 expression. So, if we tried °
''' °
'''to enter ")LIB 1", we would get an error message. There is a way to °
''' '''get around this using the following three steps:'',r' °
''' 1. Exit from this lesson: ST╜''''╕''''''' °
''' 2. Issue the system command: '''')LIB 1''''''' °
''' 3. Re-enter the lesson: function TEACHB''' 'do' 'ST╜''╕''' °
X 'ST╜'')LIB 1''' 'ST╜''TEACHB''' '''²²''' °
*(1996 4 13 13 37 1 336) °
FTEACH8 ÉFX 'TEACH8;ST;X;T;S' °
'Σ Alternate input (Stack) Processor Commands' 'do' °
'''Function TEACHB is disconnected from the latent variable of this''' °
'''workspace (TEACH). To see that, list functions TEACH and TEACHB''' °
'''using the ÉCR command.''' 'do' °
'''ALTERNATE INPUT PROCESSOR COMMANDS'',r' 'T╜101 SVOFFER ''ST''' °
'S╜''SAMPLE;T'' ''Σ Sample function to illustrate behavior of AP 101'' °
' 'S╜S,''ST╜''''''''''''First'''''''''''''' ''ST╜''''1 2 3''''''' °
'S╜S,''ST╜''''''''''''OUT'''''''''''''' ''''''3 strings have been ente °
red on stack ST''''''' '''AP 101 Commands'',r' °
'''There are several AP 101 commands that can be given while a stack'' °
' °
'''is active. In the following examples, the function SAMPLE will be'' °
' '''modified to illustrate how these commands work.'',r' °
''' 1. By assigning a zero to the shared variable, the stack is purged °
'',r' °
''' In the following example the entries on the stack will NOT be'' °
' ''' evaluated!''' 'do' 'X╜ÉFX S,Γ''ST╜0''' 'showfn ''SAMPLE''' °
'show ''SAMPLE''' °
''' 2. You can purge portions of the stack. The command is: ST╜0,N''' °
''' If N is positive, the first N entries will be dropped, and if °
N''' °
''' is negative, the last N entries will be dropped. First we drop °
''' ''' the first two entries''' 'do' 'X╜ÉFX S,Γ''ST╜0 2''' °
'showfn ''SAMPLE''' 'show ''SAMPLE''' °
''' Next we drop the last two entries''' 'do' °
'X╜ÉFX S,Γ''ST╜0 ²2''' 'showfn ''SAMPLE''' 'show ''SAMPLE''' °
''' 3. You can also change the sequence from FIFO to LIFO''' °
''' a. 10 1 sets the stack to FIFO (this is the default)''' 'do' °
'X╜ÉFX S,Γ''ST╜10 1''' 'showfn ''SAMPLE''' 'show ''SAMPLE''' °
''' b. 10 ²1 sets the stack to LIFO''' 'do' °
'X╜ÉFX S,Γ''ST╜10 ²1''' 'showfn ''SAMPLE''' 'show ''SAMPLE''' °
X '''²²''' °
*(1996 4 10 14 8 52 416) °
FTEACHB ÉFX 'TEACHB' 'Σ Continuation of TEACH' 'TEACH8' °
'''In the APL2/DOS version, the AP 101 could be used to re-define the °
F-keys.''' °
'''This is apparently no longer possible in the APL2OS2 version. Howev °
er,''' °
'''changing F-keys is can be readily accomplished using the "Options" °
pull''' '''down menu.'',r' °
'''It is not clear, however, how one would proceed to define F-keys in °
X''' '''combination with the Shift, Ctrl or Alt key.''' 'end' °
*(1996 4 13 13 33 19 392) °
FTEACHSVQ ÉFX 'TEACHSVQ;D100;T;SVO' 'Σ Shared Variable Query' °
'''Regardless of your version of APL2OS2, you can simulate the presenc °
e''' °
'''of an external APL user by invoking APL2 twice. However, in order t °
o''' °
'''make this work, you must make a change in the "Window" panel of the °
''' °
'''APL2OS2 Settings folder, by placimng a mark on the "Create Another' °
'' '''Window" line.''' 'do' °
'''Having done that, you can now create a second APL2 session by click °
ing''' °
'''on the red APL2/2 icon a second time. You can verify the existence °
of''' °
'''two APL2 sessions by clicking on the DESKTOP Window lists. There sh °
ould''' °
'''be two Session Managers; one named 1001 and a second one named 1002 °
.''' °
'''Set up your windows so that you can readily switch between the two' °
'' °
'''sessions (overlap the Session Manager windows). Then on the 1001''' °
'''session enter: 1002 ÉSVO ''''TALK''''''' °
'''This should return a 1 indicating that an offer has been made to 10 °
02.''' °
'''Now enter the 1002 session, and try the commands: "ÉSVQ ∞0" and''' °
'''"ÉSVQ 1001". Since session 1002 has not yet accepted the offer, the °
''' °
'''response to these two expressions in effect tells that an outside'' °
' '''offer has been made by session 1001. Now, of you enter:'',r' °
''' 1001 ÉSVO ''''TALK'''''',r' °
'''the connection will be completed, and the return should be a 2. At' °
'' °
'''this point an invocation of "ÉSVQ ∞0" should return a null result.' °
X'' 'do' °
XCa 0 % °
*(1991 11 11 8 25 11 308) °
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]' °
*(1991 11 11 8 25 11 308) °
XFaq ÉFX 'u╜aq w' 'Σ Enclose quoted string' 'u╜Γaddquote w' °
*(1991 11 11 8 25 11 308) °
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' °
*(1996 4 7 14 15 40 384) °
Fcopyright ÉFX 'copyright' 'Σ Copyright statement' °
'(10µ'' ''),''Copyright, Z. V. Jizba, 1995'',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 " °
*(1991 11 11 8 25 13 316) °
Fdate ÉFX 'u╜date w' 'Σ Format date and time of day' 'u╜«6╞w' °
X 'u╜('' ''⌠u)Γu' 'u╜εu,■''-- .. ''' °
XCdig 1 10 1234567890 °
*(1991 11 11 8 25 10 304) °
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 8 16 11 5 26 312) °
Fdoif ÉFX 'U╢╜V╢ doif W╢;t╢;e╢;c╢;r╢' 'Σ Rule' '╕(^/~U╢╜V╢)/0' °
X 'W╢╜V╢/W╢' '╕(1<╧W╢)/L1' '»W╢' '╕0' 'L1:t╢╜»■W╢' °
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' °
*(1991 11 11 8 25 11 308) °
XFendd ÉFX 'endd' 'Σ End of document' '20µ''²''' 'do' °
*(1995 8 4 12 26 2 268) °
Ferase ÉFX 'erase;t;DISPLAY;OS2;GO;PROFILE;SVOFFER' 't╜ÉNL 3' °
't╜(~t^.εlc,'' '')≡t' 't╜ÉEX(~t[;∞5]^.=''TEACH'')≡t' 't╜ÉNL 2' °
X 't╜ÉEX(~t^.εlc,'' '')≡t' 't╜ÉNL 4' 't╜ÉEX(~t^.εlc,'' '')≡t' °
*(1991 11 11 8 25 12 312) °
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' °
*(1991 11 11 8 25 11 308) °
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 { °
*(1992 8 16 11 27 52 504) °
Ffkeys ÉFX 'fkeys W;B;T' 'Σ Display currenttly defined fkeys' °
'B╜~^/W=ÉAV[1]' °
'╕((^/B)doif ''''''Currently no F keys are defined'''''')/0' °
'''The following Fkeys are currently defined (r stands for ÉAF 0)'',r' °
X 'T╜(r,'' r'')replace W' '0 tab B≡(π«■∞30),'' '',T' °
XCg 1 2 } °
*(1991 11 11 8 25 12 312) °
Fget ÉFX 'u╜v get w;t' 'Σ Prompt for response from keyboard' °
't╜(0=ÉNC ''V'')doif ''V╜1''' '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' °
*(1991 11 11 8 25 11 308) °
Fglobals ÉFX 'globals' 'Σ Initialize useful global variables' 'r╜2╙ÉTC' °
'q╜40╙ÉAV' 's╜Φp╜'' '',d╜35╙ÉAV' 'uc╜''ABCDEFGHIJKLMNOPQRSTUVWXYZ''' °
'lc╜''abcdefghijklmnopqrstuvwxyz''' 'dig╜''1234567890''' °
X 'g╜'' '',h╜126╙ÉAV' 'f╜ÉAV[33 124]' 'a╜38╙ÉAV' °
XCh 0 } °
*(1996 4 9 13 38 53 532) °
Fhelp ÉFX 'help' °
'''If you feel that a single linear reading of these lessons is not th °
e''' °
'''best way to learn about APL2OS2, you may try to do the following.'' °
,r' '''1. At any pause enter: ÉCR ''''TEACH''''''' °
''' (a listing of the components of the tutorial workspace will appe °
ar)''' °
'''2. Jot down the names that appear in UPPER CASE --mostly TEACHxx--' °
'' °
'''3. Each of these is a component of the lesson that can be invoked'' °
' °
''' at the pause simply by entering its name. This will repeat that' °
'' °
''' portion of the tutorial. The completion of each portion is marke °
Xd''' ''' by a line containing ²².''' 'end' °
*(1991 11 11 8 25 12 312) °
Finitialize ÉFX 'initialize;t' 'Σ Initialize workspace' 'erase' °
X 'globals' °
*(1991 11 11 8 25 11 308) °
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''' °
*(1991 11 11 8 25 12 312) °
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 °
*(1991 11 11 8 25 12 312) °
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' °
*(1991 11 11 8 25 12 312) °
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' °
XCp 1 2 " °
*(1991 11 11 8 25 12 312) °
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' °
XCq 0 ' °
XCr 0 °
*(1992 8 16 10 55 24 500) °
Freplace ÉFX 'u╜v replace w;i;r;s;t' 'Σ Replace elements in v in w' °
'╕((1<µµw)doif ''u╜π(Γv) replace■ Γ[µµw]w'')/0' 'i╜Γ∞µu╜w' °
't╜(1=╧v)doif ''v╜(v⌠'''' '''')Γv''' 's╜,2πv' 'i╜⌡r╜i⌡(1πv)╤■Γw' °
'╕((2≥╧v)doif ''u[(εi)/εr]╜s[(εi)/εi⌡■∞µs]'' ''u╜εu'')/0' °
X '''u╜w'' ÉEA ''u╜(╞r)╢rep╞╞v''' °
*(1991 11 11 8 25 12 312) °
Fround ÉFX 'u╜v round w' 'Σ Half adjust w to vth decimal' °
X 'u╜(╛0.5+w⌡10*v)÷10*v' °
XCs 1 2 " °
*(1991 11 11 8 25 12 312) °
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' °
*(1991 11 11 8 25 13 316) °
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' °
*(1991 11 11 8 25 13 316) °
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╜r,'' '',''╖'',w,''[É]'',(╞v)╞''╖''' 'n╜1╞µf╜ÉCR w' '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],r' °
*(1991 11 11 8 25 13 316) °
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' °
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' °
*(1992 12 19 18 32 12 420) °
Ftestap ÉFX 'U╜V 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' °
'╕(2=ÉNC ''V'')/L0' °
'T╜''The following Auxilliary Processor'',(S╜1<+/~B)╞''s''' °
'T,(ε(S+1)╙'' is'' '' are''),'' not available'',(~B)/W' 'L0:U╜1' °
X 'T╜ÉEX■D' °
XCuc 1 26 ABCDEFGHIJKLMNOPQRSTUVWXYZ °