home *** CD-ROM | disk | FTP | other *** search
/ The Developer Connection…ice Driver Kit for OS/2 3 / DEV3-D1.ISO / devtools / apl2 / apsample.at_ / apsample.atf
Encoding:
Text File  |  1993-12-13  |  15.3 KB  |  192 lines

  1. XNÉIO 0 1                                                                      °
  2. XNÉCT 0 1E²13                                                                  °
  3. XCÉFC 1 6 .,*0_²                                                               °
  4. XNÉRL 0 16807                                                                  °
  5. XCÉPR 1 1                                                                      °
  6. XCÉLX 1 58 'Sample APs written in APL2 using APSERVER from 1 UTILITY'          °
  7. *(1993 6 16 0 0 0 140)                                                         °
  8.  FAPSERVER ÉFX                                                                 °
  9.   'APSERVER ≈_EXITFNS;≈_EXIT;≈_INIT;≈_PIDS;≈_PROC;≈_SVLIST;≈_VARS;≈_WAIT       °
  10.  ;≈_X' 'Σ'                                                                     °
  11.   'Σ General AP server for implementing auxiliary processors using a'          °
  12.   'Σ client-server protocol over a single shared variable interface'           °
  13.   'Σ'                                                                          °
  14.   'Σ Syntax: APSERVER ''INIT_FN'' ''WAIT_FN'' ''PROC_FN'' ''EXIT_FN'''         °
  15.   'Σ   ''INIT_FN'' <-> name of function called prior to accepting a new        °
  16.  offer'                                                                        °
  17.   'Σ      Syntax: RC╜INIT_FN PID SVNAME  (RC: 1 = accept share, 0 = reje       °
  18.  ct)'                                                                          °
  19.   'Σ   ''WAIT_FN'' <-> name of function called instead of default ÉSVE w       °
  20.  ait'                                                                          °
  21.   'Σ      Syntax: WAIT_FN  (return from this function to process SVP eve       °
  22.  nts)'                                                                         °
  23.   'Σ   ''PROC_FN'' <-> name of function called to process the client''s        °
  24.  request'                                                                      °
  25.   'Σ      Syntax: RESULT╜(PID SVNAME) PROC_FN REQUEST  (the meat of the        °
  26.  AP)'                                                                          °
  27.   'Σ   ''EXIT_FN'' <-> name of function called prior to retracting a sha       °
  28.  re'                                                                           °
  29.   'Σ      Syntax: EXIT_FN PID SVNAME  (used to clean up share environmen       °
  30.  t)'                                                                           °
  31.   'Σ (PID <-> partner''s SVP ID; SVNAME <-> partner''s shared variable n       °
  32.  ame)'                                                                         °
  33.   'Σ (all exits are optional: APSERVER '''' '''' '''' ''''  <-> echo ser       °
  34.  ver AP)' 'Σ'                                                                  °
  35.   'Σ NOTE: this interface requires that the client REF all return values       °
  36.  .'                                                                            °
  37.   'Σ       If a double SET is done by the partner, it is possible that'        °
  38.   'Σ       the second request may get over-written by the APSERVER setti       °
  39.  ng' 'Σ       of the return value from the first request.' 'Σ'                 °
  40.   '(≈_INIT ≈_WAIT ≈_PROC ≈_EXIT)╜≈_EXITFNS'                                    °
  41.   '≈_SVLIST╜0µΓ''''                     Σ INIT THE LIST OF OUTSTANDING S       °
  42.  HARES' '≈_ELOOP:                            Σ MAIN SVP EVENT LOOP'            °
  43.   'Σ IF USER SUPPLIED A ''WAIT'' EXIT ROUTINE, CALL IT, ELSE CALL ÉSVE'        °
  44.   '»(ÉIO+0=µ≈_WAIT)π≈_WAIT ''ÉSVE╜2147483647 ╪ ≈_X╜ÉSVE'''                     °
  45.   'Σ WE HAVE AN EVENT; SEE IF ANY VARIABLES HAVE BEEN RETRACTED BY PARTN       °
  46.  ERS'                                                                          °
  47.   '╕(0=µ≈_VARS╜(2⌠ÉSVO■≈_SVLIST)/≈_SVLIST)/≈_SCAN  Σ IF NONE, SCAN OFFER       °
  48.  S'                                                                            °
  49.   'Σ FIRST CALL THE USER ''EXIT'' EXIT ROUTINE, IF SUPPLIED, FOR ANY CLE       °
  50.  AN UP' '╕(0=µ≈_EXIT)/≈_RETRACT'                                               °
  51.   '»■(Γ≈_EXIT,'' ''),■((ΓΓ2+∞10)╙■≈_VARS),■(Γ'',Γ,''''''),■(12╟■≈_VARS),       °
  52.  ■''''''''' '≈_RETRACT:'                                                       °
  53.   '≈_X╜ÉEX■≈_VARS                     Σ RETRACT AND EXPUNGE FROM OUR SID       °
  54.  E' '≈_SVLIST╜≈_SVLIST~≈_VARS           Σ AND REMOVE FROM THE LIST'            °
  55.   '≈_SCAN:'                                                                    °
  56.   '≈_PIDS╜0,ÉSVQ ''''                   Σ SCAN FOR NEW OFFERS (GET PID''       °
  57.  S)'                                                                           °
  58.   '≈_PLOOP:                            Σ PROCESSOR LOOP FOR VARIABLE SCA       °
  59.  N' '╕(0=µ≈_PIDS╜1╟≈_PIDS)/≈_EPLOOP     Σ ANY MORE SHARING PROCESSORS?'        °
  60.   '≈_VARS╜'' '',[ÉIO]ÉSVQ╞≈_PIDS        Σ GET THE SHARED VARIABLE NAMES'       °
  61.   '≈_VLOOP:                            Σ VARIABLE LOOP FOR OFFERS'             °
  62.   '╕(0=╞µ≈_VARS╜1 0╟≈_VARS)/≈_PLOOP   Σ ANY MORE VARS FROM THIS PARTNER?       °
  63.  '                                                                             °
  64.   'Σ FIRST CALL THE USER ''INIT'' EXIT ROUTINE IF SUPPLIED (MAY REJECT O       °
  65.  FFER)'                                                                        °
  66.   '»(0⌠µ≈_INIT)/''╕(~'',≈_INIT,''(╞≈_PIDS),Γ≈_VARS[ÉIO;]~'''' '''')/≈_VL       °
  67.  OOP''' 'Σ GENERATE SURROGATE SHARED VARIABLE NAME AND ADD TO SVLIST'          °
  68.   '≈_SVLIST╜(Γ''≈_'',((10µ''0'')«╞≈_PIDS),≈_VARS[ÉIO;]~'' ''),≈_SVLIST'        °
  69.   '≈_X╜(╞≈_PIDS)ÉSVO(╞≈_SVLIST),'' '',≈_VARS[ÉIO;]       Σ ACCEPT THE OF       °
  70.  FER'                                                                          °
  71.   '≈_X╜0 0 1 0 ÉSVC╞≈_SVLIST          Σ SET ACCESS CONTROL TO ENSURE POS       °
  72.  T' '╕≈_VLOOP                           Σ CONTINUE WITH NEXT OFFER'            °
  73.   '≈_EPLOOP:                           Σ ALL NEW OFFERS NOW ACCEPTED'          °
  74.   'Σ NOW CHECK THE STATE OF ALL SHARED VARIABLES; ANY SETS BY PARTNER?'        °
  75.   '╕(0=µ≈_VARS╜((Γ0 1 0 1)^.=■ÉSVS■≈_SVLIST)/≈_SVLIST)/≈_ELOOP'                °
  76.   'Σ IF NO USER ''PROCESS'' ROUTINE SUPPLIED, JUST ECHO BACK THE SV VALU       °
  77.  E' '≈_PIDS╜»■(0=µ≈_PROC)/≈_VARS,■''╜'',■≈_VARS' '╕(0=µ≈_PROC)/≈_ELOOP'        °
  78.   'Σ OTHERWISE CALL THE ''PROCESS'' ROUTINE, PASSING IT THE SV VALUE'          °
  79.   'Σ AND SPEC THE SHARED VARIABLE WITH THE EXPLICIT RESULT OF THE FN'          °
  80.   '≈_X╜(Γ'',Γ,''''''),■(12╟■≈_VARS),■(Γ'''''')''),■Γ≈_PROC,'' '''              °
  81.   '≈_PIDS╜»■≈_VARS,■(Γ''╜(''),■((ΓΓ2+∞10)╙■≈_VARS),■≈_X,■≈_VARS'               °
  82. X '╕≈_ELOOP'                                                                   °
  83. XCCHANGE_ACTIVITY 2 0 0                                                        °
  84.  CCOIBM 2 2 64 Licensed Materials - Property of IBM                            °
  85. X       5621-430, 5648-065, 5765-012 (c) Copyright IBM Corp. 1994.             °
  86. *(1993 6 18 19 0 0 224)                                                        °
  87.  FEXIT555 ÉFX 'EXIT555 SVinfo;N;PID;SVNAME' '(PID SVNAME)╜SVinfo'              °
  88. X 'N╜SVNAME,''207''' '»N,''╜''''CLOSE'''' ''''''''''' 'N╜ÉEX N'                °
  89. *(1993 6 16 0 0 0 140)                                                         °
  90.  FID ÉFX 'R╜ID P;A;N;S;ÉIO'                                                    °
  91.   'Σ Convert character processor ID''s to large integers and vice versa.       °
  92.  '                                                                             °
  93.   'Σ Typical use is with the SVP processor association table (apl2svp.pr       °
  94.  f)'                                                                           °
  95.   'Σ in support of cross-domain SVP shares for cooperative processing'         °
  96.   'Σ Rules: 1) 1-6 characters long (vectors only)'                             °
  97.   'Σ        2) only UPPERCASE alphabetics plus ''01234 '' allowed'             °
  98.   'Σ        3) converted to large positive integers (minimum value = 2*3       °
  99.  0)'                                                                           °
  100.   'Σ           to avoid conflicts with auxiliary processor numbers and'        °
  101.   'Σ           other numeric process ID''s that may be in use - numbers        °
  102.  less'                                                                         °
  103.   'Σ           than 1073741824 will be left unchanged in the result'           °
  104.   'ÉIO╜0'                                                                      °
  105.   'ÉES(2<╧P)/5 4                     Σ DOMAIN ERROR IF TOO NESTED'             °
  106.   'A╜''ABCDEFGHIJKLMNOPQRSTUVWXYZ01234 '''                                     °
  107.   'R╜0µP                             Σ INITIALIZE RESULT'                      °
  108.   'S╜µP                              Σ REMEMBER SHAPE OF ARG FOR LATER'        °
  109.   'P╜,P                              Σ AND RAVEL' 'LOOP:' '╕(0=µP)/END'        °
  110.   'N╜╞P                              Σ GET NEXT PID' 'P╜1╟P'                   °
  111.   '╕(0=╞0µN)/NUM                     Σ BRANCH IF NUMERIC'                      °
  112.   'Σ PID IS A CHARACTER NAME'                                                  °
  113.   'ÉES((1⌠µµN)δ6<µ,N)/5 4            Σ CHAR PID MUST BE A VECTOR ≤ 6'          °
  114.   'ÉES((µA)δ.=N╜A∞6╞N)/5 4           Σ WITHIN VALID CHARACTER DOMAIN?'         °
  115.   'R╜R,2¥0 1,,φ(5µ2)ÿN               Σ CONVERT TO A LARGE INTEGER'             °
  116.   '╕LOOP' 'NUM:' 'Σ PID IS NUMERIC'                                            °
  117.   'ÉES(1<µ,N)/5 3                    Σ LENGTH ERROR IF NOT 1 ELEMENT'          °
  118.   '»((2*30)>N╜''''µN)/''R╜R,N ╪ ╕LOOP'''                                       °
  119.   'ÉES(N≥2*31)/5 4                   Σ DOMAIN ERROR IF TOO LARGE'              °
  120.   'N╜A[2¥φ6 5µ(30µ2)ÿN]              Σ COVERT TO CHARACTER NICKNAME'           °
  121.   'R╜R,Γ(-+/^\Φ'' ''=N)╟N              Σ DELETE TRAILING BLANKS'               °
  122. X '╕LOOP' 'END:' 'R╜SµR                             Σ RESHAPE RESULT'          °
  123. *(1993 6 18 20 0 0 228)                                                        °
  124.  FINIT555 ÉFX 'R╜INIT555 SVinfo;N;PID;SVNAME' '(PID SVNAME)╜SVinfo'            °
  125.   '╕(~R╜2=╞207 SVOFFER N╜SVNAME,''207'')/0'                                    °
  126.   '»N,''╜''''OPEN'''' (0 '''''',(«εID PID),'' '',SVNAME,'''''' '',(«200+       °
  127.  ?4µ300),'')''' '»N,''╜''''COLOR'''' ''''CYAN''''''' '╕(R╜0=╞»N)/0'            °
  128. X 'N╜ÉEX N'                                                                    °
  129. *(1993 6 18 20 0 0 228)                                                        °
  130.  FPROC555 ÉFX 'R╜SVinfo PROC555 String;N;PID;SVNAME'                           °
  131.   '(PID SVNAME)╜SVinfo' 'N╜SVNAME,''207'''                                     °
  132.   '»N,''╜''''MOVE'''' (?2µ150)'''                                              °
  133.   '»N,''╜''''WRITE'''' '''''',String,'''''''''                                 °
  134. X 'R╜ε╞(0=╞»N)╟''OOPS'' ''OK'''                                                °
  135. *(1993 6 18 16 0 0 212)                                                        °
  136.  FRHO ÉFX 'Reply╜SVinfo RHO Request' '(ClientPID SVname)╜SVinfo'               °
  137. X 'Reply╜µRequest'                                                             °
  138. *(1993 8 29 23 0 0 292)                                                        °
  139.  FSVOFFER ÉFX '≈_DC╜≈_PID SVOFFER ≈_SV'                                        °
  140.   'Σ------------------------------------------------------------------Σ'       °
  141.   'Σ'                                                                          °
  142.   'Σ  Offer shared variable(s) named in SV to processor number PID.'           °
  143.   'Σ  Returns final degree of coupling (DC) for each shared variable.'         °
  144.   'Σ  Waits up to 15 seconds for shares to be accepted by the processor.       °
  145.  '                                                                             °
  146.   'Σ  Sets standard access control to inhibit my double refs or specs.'        °
  147.   'Σ  Monadic call simply returns the current degree of coupling.' 'Σ'         °
  148.   'Σ------------------------------------------------------------------Σ'       °
  149.   'Σ' 'Σ Examples:' 'Σ' 'Σ Single offer to host auxiliary processor'           °
  150.   'Σ       100 SVOFFER ''CMD''' 'Σ 2' 'Σ'                                      °
  151.   'Σ Offer multiple variables to one AP'                                       °
  152.   'Σ       100 SVOFFER ''V1'' ''V2''' 'Σ 2 2' 'Σ'                              °
  153.   'Σ Offer multiple variables to multiple APs'                                 °
  154.   'Σ       100 211 SVOFFER ''V100'' ''V211''' 'Σ 2 2' 'Σ'                      °
  155.   'Σ Check degree of coupling for multiple variables'                          °
  156.   'Σ       SVOFFER ''V100'' ''V211''' 'Σ 2 2' 'Σ'                              °
  157.   'Σ Invalid shared variable offer' 'Σ       211 SVOFFER ''BAD+NAME'''         °
  158.   'Σ 0' 'Σ' 'Σ Offer and trap errors'                                          °
  159.   'Σ       ÉES (2δ.⌠AP SVOFFER VARS)/''Share offer unaccepted by AP'',«A       °
  160.  P' 'Σ'                                                                        °
  161.   'Σ==================================================================Σ'       °
  162.   'Σ'                                                                          °
  163.   '≈_SV╜(²2╞1 1,µ≈_SV)µ≈_SV╜π≈_SV      Σ Convert name argument to matrix       °
  164.  '                                                                             °
  165.   '╕(2=ÉNC ''≈_PID'')/≈_DYADIC           Σ Is it a dyadic function call?       °
  166.  '                                                                             °
  167.   '≈_DC╜ÉSVO ≈_SV                      Σ Just return coupling if monadic       °
  168.  ' '╕0                                  Σ and exit' '≈_DYADIC:'                °
  169.   '╕(1^.⌠≈_DC╜≈_PID ÉSVO ≈_SV)/≈_END   Σ Initial Offer'                        °
  170.   'ÉSVE╜15                             Σ Wait up to 15 seconds for accep       °
  171.  ts' '≈_CHECK:' '╕(1^.⌠≈_DC╜ÉSVO ≈_SV)/≈_END         Σ Check couplings'        °
  172.   '╕(0⌠ÉSVE)/≈_CHECK                   Σ Retry if time left' '≈_END:'          °
  173. X '≈_SV╜1 0 1 0 ÉSVC ≈_SV              Σ Set access control'                   °
  174. *(1993 6 18 16 0 0 212)                                                        °
  175.  Fap333 ÉFX 'ap333' 'Σ Sample AP using the APSERVER interface'                 °
  176.   'Σ No special ''init'', ''wait'', or ''exit'' callback routines define       °
  177.  d'                                                                            °
  178.   'Σ for this simple AP - the ''process'' function RHO simply returns'         °
  179.   'Σ the shape of the APL "command" recieved from the client'                  °
  180. X 'APSERVER '''' '''' ''RHO'' '''''                                            °
  181. *(1993 6 18 16 0 0 212)                                                        °
  182.  Fap444 ÉFX 'ap444' 'Σ Echo AP'                                                °
  183.   'Σ If no ''process'' callback routine supplied, APSERVER will echo req       °
  184. Xuest' 'APSERVER '''' '''' '''' '''''                                          °
  185. *(1993 6 18 19 0 0 224)                                                        °
  186.  Fap555 ÉFX 'ap555'                                                            °
  187.   'Σ Sample AP using ''init'' and ''exit'' callbacks.  This AP uses AP20       °
  188.  7'                                                                            °
  189.   'Σ to create a window where client requests are randomly displayed.'         °
  190.   'Σ Returns ''OK'' if write to window was successful, or ''OOPS'' if no       °
  191. Xt.' 'APSERVER ''INIT555'' '''' ''PROC555'' ''EXIT555'''                       °
  192.