home *** CD-ROM | disk | FTP | other *** search
- XNÉIO 0 1 °
- XNÉCT 0 1E²13 °
- XCÉFC 1 6 .,*0_² °
- XNÉRL 0 16807 °
- XCÉPR 1 1 °
- XCÉLX 1 58 'Sample APs written in APL2 using APSERVER from 1 UTILITY' °
- *(1993 6 16 0 0 0 140) °
- FAPSERVER ÉFX °
- 'APSERVER ≈_EXITFNS;≈_EXIT;≈_INIT;≈_PIDS;≈_PROC;≈_SVLIST;≈_VARS;≈_WAIT °
- ;≈_X' 'Σ' °
- 'Σ General AP server for implementing auxiliary processors using a' °
- 'Σ client-server protocol over a single shared variable interface' °
- 'Σ' °
- 'Σ Syntax: APSERVER ''INIT_FN'' ''WAIT_FN'' ''PROC_FN'' ''EXIT_FN''' °
- 'Σ ''INIT_FN'' <-> name of function called prior to accepting a new °
- offer' °
- 'Σ Syntax: RC╜INIT_FN PID SVNAME (RC: 1 = accept share, 0 = reje °
- ct)' °
- 'Σ ''WAIT_FN'' <-> name of function called instead of default ÉSVE w °
- ait' °
- 'Σ Syntax: WAIT_FN (return from this function to process SVP eve °
- nts)' °
- 'Σ ''PROC_FN'' <-> name of function called to process the client''s °
- request' °
- 'Σ Syntax: RESULT╜(PID SVNAME) PROC_FN REQUEST (the meat of the °
- AP)' °
- 'Σ ''EXIT_FN'' <-> name of function called prior to retracting a sha °
- re' °
- 'Σ Syntax: EXIT_FN PID SVNAME (used to clean up share environmen °
- t)' °
- 'Σ (PID <-> partner''s SVP ID; SVNAME <-> partner''s shared variable n °
- ame)' °
- 'Σ (all exits are optional: APSERVER '''' '''' '''' '''' <-> echo ser °
- ver AP)' 'Σ' °
- 'Σ NOTE: this interface requires that the client REF all return values °
- .' °
- 'Σ If a double SET is done by the partner, it is possible that' °
- 'Σ the second request may get over-written by the APSERVER setti °
- ng' 'Σ of the return value from the first request.' 'Σ' °
- '(≈_INIT ≈_WAIT ≈_PROC ≈_EXIT)╜≈_EXITFNS' °
- '≈_SVLIST╜0µΓ'''' Σ INIT THE LIST OF OUTSTANDING S °
- HARES' '≈_ELOOP: Σ MAIN SVP EVENT LOOP' °
- 'Σ IF USER SUPPLIED A ''WAIT'' EXIT ROUTINE, CALL IT, ELSE CALL ÉSVE' °
- '»(ÉIO+0=µ≈_WAIT)π≈_WAIT ''ÉSVE╜2147483647 ╪ ≈_X╜ÉSVE''' °
- 'Σ WE HAVE AN EVENT; SEE IF ANY VARIABLES HAVE BEEN RETRACTED BY PARTN °
- ERS' °
- '╕(0=µ≈_VARS╜(2⌠ÉSVO■≈_SVLIST)/≈_SVLIST)/≈_SCAN Σ IF NONE, SCAN OFFER °
- S' °
- 'Σ FIRST CALL THE USER ''EXIT'' EXIT ROUTINE, IF SUPPLIED, FOR ANY CLE °
- AN UP' '╕(0=µ≈_EXIT)/≈_RETRACT' °
- '»■(Γ≈_EXIT,'' ''),■((ΓΓ2+∞10)╙■≈_VARS),■(Γ'',Γ,''''''),■(12╟■≈_VARS), °
- ■''''''''' '≈_RETRACT:' °
- '≈_X╜ÉEX■≈_VARS Σ RETRACT AND EXPUNGE FROM OUR SID °
- E' '≈_SVLIST╜≈_SVLIST~≈_VARS Σ AND REMOVE FROM THE LIST' °
- '≈_SCAN:' °
- '≈_PIDS╜0,ÉSVQ '''' Σ SCAN FOR NEW OFFERS (GET PID'' °
- S)' °
- '≈_PLOOP: Σ PROCESSOR LOOP FOR VARIABLE SCA °
- N' '╕(0=µ≈_PIDS╜1╟≈_PIDS)/≈_EPLOOP Σ ANY MORE SHARING PROCESSORS?' °
- '≈_VARS╜'' '',[ÉIO]ÉSVQ╞≈_PIDS Σ GET THE SHARED VARIABLE NAMES' °
- '≈_VLOOP: Σ VARIABLE LOOP FOR OFFERS' °
- '╕(0=╞µ≈_VARS╜1 0╟≈_VARS)/≈_PLOOP Σ ANY MORE VARS FROM THIS PARTNER? °
- ' °
- 'Σ FIRST CALL THE USER ''INIT'' EXIT ROUTINE IF SUPPLIED (MAY REJECT O °
- FFER)' °
- '»(0⌠µ≈_INIT)/''╕(~'',≈_INIT,''(╞≈_PIDS),Γ≈_VARS[ÉIO;]~'''' '''')/≈_VL °
- OOP''' 'Σ GENERATE SURROGATE SHARED VARIABLE NAME AND ADD TO SVLIST' °
- '≈_SVLIST╜(Γ''≈_'',((10µ''0'')«╞≈_PIDS),≈_VARS[ÉIO;]~'' ''),≈_SVLIST' °
- '≈_X╜(╞≈_PIDS)ÉSVO(╞≈_SVLIST),'' '',≈_VARS[ÉIO;] Σ ACCEPT THE OF °
- FER' °
- '≈_X╜0 0 1 0 ÉSVC╞≈_SVLIST Σ SET ACCESS CONTROL TO ENSURE POS °
- T' '╕≈_VLOOP Σ CONTINUE WITH NEXT OFFER' °
- '≈_EPLOOP: Σ ALL NEW OFFERS NOW ACCEPTED' °
- 'Σ NOW CHECK THE STATE OF ALL SHARED VARIABLES; ANY SETS BY PARTNER?' °
- '╕(0=µ≈_VARS╜((Γ0 1 0 1)^.=■ÉSVS■≈_SVLIST)/≈_SVLIST)/≈_ELOOP' °
- 'Σ IF NO USER ''PROCESS'' ROUTINE SUPPLIED, JUST ECHO BACK THE SV VALU °
- E' '≈_PIDS╜»■(0=µ≈_PROC)/≈_VARS,■''╜'',■≈_VARS' '╕(0=µ≈_PROC)/≈_ELOOP' °
- 'Σ OTHERWISE CALL THE ''PROCESS'' ROUTINE, PASSING IT THE SV VALUE' °
- 'Σ AND SPEC THE SHARED VARIABLE WITH THE EXPLICIT RESULT OF THE FN' °
- '≈_X╜(Γ'',Γ,''''''),■(12╟■≈_VARS),■(Γ'''''')''),■Γ≈_PROC,'' ''' °
- '≈_PIDS╜»■≈_VARS,■(Γ''╜(''),■((ΓΓ2+∞10)╙■≈_VARS),■≈_X,■≈_VARS' °
- X '╕≈_ELOOP' °
- XCCHANGE_ACTIVITY 2 0 0 °
- CCOIBM 2 2 64 Licensed Materials - Property of IBM °
- X 5621-430, 5648-065, 5765-012 (c) Copyright IBM Corp. 1994. °
- *(1993 6 18 19 0 0 224) °
- FEXIT555 ÉFX 'EXIT555 SVinfo;N;PID;SVNAME' '(PID SVNAME)╜SVinfo' °
- X 'N╜SVNAME,''207''' '»N,''╜''''CLOSE'''' ''''''''''' 'N╜ÉEX N' °
- *(1993 6 16 0 0 0 140) °
- FID ÉFX 'R╜ID P;A;N;S;ÉIO' °
- 'Σ Convert character processor ID''s to large integers and vice versa. °
- ' °
- 'Σ Typical use is with the SVP processor association table (apl2svp.pr °
- f)' °
- 'Σ in support of cross-domain SVP shares for cooperative processing' °
- 'Σ Rules: 1) 1-6 characters long (vectors only)' °
- 'Σ 2) only UPPERCASE alphabetics plus ''01234 '' allowed' °
- 'Σ 3) converted to large positive integers (minimum value = 2*3 °
- 0)' °
- 'Σ to avoid conflicts with auxiliary processor numbers and' °
- 'Σ other numeric process ID''s that may be in use - numbers °
- less' °
- 'Σ than 1073741824 will be left unchanged in the result' °
- 'ÉIO╜0' °
- 'ÉES(2<╧P)/5 4 Σ DOMAIN ERROR IF TOO NESTED' °
- 'A╜''ABCDEFGHIJKLMNOPQRSTUVWXYZ01234 ''' °
- 'R╜0µP Σ INITIALIZE RESULT' °
- 'S╜µP Σ REMEMBER SHAPE OF ARG FOR LATER' °
- 'P╜,P Σ AND RAVEL' 'LOOP:' '╕(0=µP)/END' °
- 'N╜╞P Σ GET NEXT PID' 'P╜1╟P' °
- '╕(0=╞0µN)/NUM Σ BRANCH IF NUMERIC' °
- 'Σ PID IS A CHARACTER NAME' °
- 'ÉES((1⌠µµN)δ6<µ,N)/5 4 Σ CHAR PID MUST BE A VECTOR ≤ 6' °
- 'ÉES((µA)δ.=N╜A∞6╞N)/5 4 Σ WITHIN VALID CHARACTER DOMAIN?' °
- 'R╜R,2¥0 1,,φ(5µ2)ÿN Σ CONVERT TO A LARGE INTEGER' °
- '╕LOOP' 'NUM:' 'Σ PID IS NUMERIC' °
- 'ÉES(1<µ,N)/5 3 Σ LENGTH ERROR IF NOT 1 ELEMENT' °
- '»((2*30)>N╜''''µN)/''R╜R,N ╪ ╕LOOP''' °
- 'ÉES(N≥2*31)/5 4 Σ DOMAIN ERROR IF TOO LARGE' °
- 'N╜A[2¥φ6 5µ(30µ2)ÿN] Σ COVERT TO CHARACTER NICKNAME' °
- 'R╜R,Γ(-+/^\Φ'' ''=N)╟N Σ DELETE TRAILING BLANKS' °
- X '╕LOOP' 'END:' 'R╜SµR Σ RESHAPE RESULT' °
- *(1993 6 18 20 0 0 228) °
- FINIT555 ÉFX 'R╜INIT555 SVinfo;N;PID;SVNAME' '(PID SVNAME)╜SVinfo' °
- '╕(~R╜2=╞207 SVOFFER N╜SVNAME,''207'')/0' °
- '»N,''╜''''OPEN'''' (0 '''''',(«εID PID),'' '',SVNAME,'''''' '',(«200+ °
- ?4µ300),'')''' '»N,''╜''''COLOR'''' ''''CYAN''''''' '╕(R╜0=╞»N)/0' °
- X 'N╜ÉEX N' °
- *(1993 6 18 20 0 0 228) °
- FPROC555 ÉFX 'R╜SVinfo PROC555 String;N;PID;SVNAME' °
- '(PID SVNAME)╜SVinfo' 'N╜SVNAME,''207''' °
- '»N,''╜''''MOVE'''' (?2µ150)''' °
- '»N,''╜''''WRITE'''' '''''',String,''''''''' °
- X 'R╜ε╞(0=╞»N)╟''OOPS'' ''OK''' °
- *(1993 6 18 16 0 0 212) °
- FRHO ÉFX 'Reply╜SVinfo RHO Request' '(ClientPID SVname)╜SVinfo' °
- X 'Reply╜µRequest' °
- *(1993 8 29 23 0 0 292) °
- FSVOFFER ÉFX '≈_DC╜≈_PID SVOFFER ≈_SV' °
- 'Σ------------------------------------------------------------------Σ' °
- 'Σ' °
- 'Σ Offer shared variable(s) named in SV to processor number PID.' °
- 'Σ Returns final degree of coupling (DC) for each shared variable.' °
- 'Σ Waits up to 15 seconds for shares to be accepted by the processor. °
- ' °
- 'Σ Sets standard access control to inhibit my double refs or specs.' °
- 'Σ Monadic call simply returns the current degree of coupling.' 'Σ' °
- 'Σ------------------------------------------------------------------Σ' °
- 'Σ' 'Σ Examples:' 'Σ' 'Σ Single offer to host auxiliary processor' °
- 'Σ 100 SVOFFER ''CMD''' 'Σ 2' 'Σ' °
- 'Σ Offer multiple variables to one AP' °
- 'Σ 100 SVOFFER ''V1'' ''V2''' 'Σ 2 2' 'Σ' °
- 'Σ Offer multiple variables to multiple APs' °
- 'Σ 100 211 SVOFFER ''V100'' ''V211''' 'Σ 2 2' 'Σ' °
- 'Σ Check degree of coupling for multiple variables' °
- 'Σ SVOFFER ''V100'' ''V211''' 'Σ 2 2' 'Σ' °
- 'Σ Invalid shared variable offer' 'Σ 211 SVOFFER ''BAD+NAME''' °
- 'Σ 0' 'Σ' 'Σ Offer and trap errors' °
- 'Σ ÉES (2δ.⌠AP SVOFFER VARS)/''Share offer unaccepted by AP'',«A °
- P' 'Σ' °
- 'Σ==================================================================Σ' °
- 'Σ' °
- '≈_SV╜(²2╞1 1,µ≈_SV)µ≈_SV╜π≈_SV Σ Convert name argument to matrix °
- ' °
- '╕(2=ÉNC ''≈_PID'')/≈_DYADIC Σ Is it a dyadic function call? °
- ' °
- '≈_DC╜ÉSVO ≈_SV Σ Just return coupling if monadic °
- ' '╕0 Σ and exit' '≈_DYADIC:' °
- '╕(1^.⌠≈_DC╜≈_PID ÉSVO ≈_SV)/≈_END Σ Initial Offer' °
- 'ÉSVE╜15 Σ Wait up to 15 seconds for accep °
- ts' '≈_CHECK:' '╕(1^.⌠≈_DC╜ÉSVO ≈_SV)/≈_END Σ Check couplings' °
- '╕(0⌠ÉSVE)/≈_CHECK Σ Retry if time left' '≈_END:' °
- X '≈_SV╜1 0 1 0 ÉSVC ≈_SV Σ Set access control' °
- *(1993 6 18 16 0 0 212) °
- Fap333 ÉFX 'ap333' 'Σ Sample AP using the APSERVER interface' °
- 'Σ No special ''init'', ''wait'', or ''exit'' callback routines define °
- d' °
- 'Σ for this simple AP - the ''process'' function RHO simply returns' °
- 'Σ the shape of the APL "command" recieved from the client' °
- X 'APSERVER '''' '''' ''RHO'' ''''' °
- *(1993 6 18 16 0 0 212) °
- Fap444 ÉFX 'ap444' 'Σ Echo AP' °
- 'Σ If no ''process'' callback routine supplied, APSERVER will echo req °
- Xuest' 'APSERVER '''' '''' '''' ''''' °
- *(1993 6 18 19 0 0 224) °
- Fap555 ÉFX 'ap555' °
- 'Σ Sample AP using ''init'' and ''exit'' callbacks. This AP uses AP20 °
- 7' °
- 'Σ to create a window where client requests are randomly displayed.' °
- 'Σ Returns ''OK'' if write to window was successful, or ''OOPS'' if no °
- Xt.' 'APSERVER ''INIT555'' '''' ''PROC555'' ''EXIT555''' °
-