home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Pascal / MAXONPASCAL3.DMS / in.adf / DEMOS-OS2.0 / CxBroker.p < prev    next >
Encoding:
Text File  |  1994-08-25  |  3.4 KB  |  109 lines

  1. program CXTest;
  2. uses exec;
  3. {$incl "commodities.lib"}
  4.  
  5. (* Wir bauen uns ein Commodity
  6.  
  7.    man nehme: die "commodities.library"
  8.               und EXCHANGE
  9. *)
  10.  
  11. var nb : NewBroker;               (* damit legen wir alle neuen Broker an *)
  12.     brok,F_diskin,S_diskin,
  13.     F_diskrem,S_diskrem:p_CxObj;  (* unsere CX-Objekte *)
  14.     my_MSG:p_Message;             (* für die Messages von der commoditiers.library *)
  15.     MPort:p_MsgPort;              (* und noch ein Port dafür *)
  16.     c1,c2:string[20];             (* 2 Strings für die Ereignisse *)
  17.     err:long;                     (* um Rückmeldungen irgendwohin zu tun *)
  18.  
  19. procedure HandleMsgs;
  20. (* HandleMsgs macht nichts anderes, als auf eine Message der commoditiers.library
  21.    zu warten. Die wird dann ausgewertet und entsprechend gehandelt. *)
  22.  
  23. var id,typ:long;
  24.     ende:boolean;
  25.  
  26. begin
  27.  repeat
  28.   ende:=false;
  29.   my_MSG:=Wait_Port(MPort);
  30.   my_MSG:=Get_Msg(MPort);
  31.   id:=CxMsgID(ptr(my_MSG));
  32.   typ:=CxMsgType(ptr(my_MSG));
  33.   Reply_MSG(my_MSG);
  34.   case typ of
  35.   CXM_IEVENT: begin
  36.                (* das ist ein Ereignis, das wir eingestellt haben *)
  37.                case id of
  38.                1: writeln("1: ",c1)
  39.                2: writeln("2: ",c2);
  40.                else
  41.                end;
  42.               end
  43.   CXM_COMMAND: begin
  44.                 (* dashier kommt von EXCHANGE *)
  45.                 case id of
  46.                 CXCMD_DISABLE: writeln("Disabled!")
  47.                 CXCMD_ENABLE: writeln("Enabled!")
  48.                 CXCMD_KILL: begin
  49.                              writeln("KILL!");
  50.                              ende:=true;
  51.                             end
  52.                 CXCMD_UNIQUE: writeln("UNIQUE!")
  53.                 CXCMD_APPEAR: writeln("Appear!")
  54.                 CXCMD_DISAPPEAR: writeln("Disappear!");
  55.                 else
  56.                 end;
  57.                end
  58.   else
  59.   end;
  60.  until ende;
  61. end;
  62. begin
  63.  OpenLib(CxBase,"commodities.library",37);
  64.  c1:="rawkey b";     (* die Ereignisse für uns: die Taste "b" oder *)
  65.  c2:="diskinserted"; (* das Einlegen einer Diskette - reine Testzwecke... *)
  66.  MPort:=CreateMsgPort; (* ein MessagePort für die Messages halt *)
  67.  if MPort<>NIL then
  68.  begin
  69.   nb:=NewBroker(NB_Version,"CX-Test-Broker","CX-Test","Ein Test!",NBU_Unique or NBU_Notify,COF_SHOW_HIDE,0,MPort,0);
  70.    (* so, das ist unser Programm - diese Daten sind u.a. bei EXCHANGE zu sehen *)
  71.   brok:=CxBroker(^nb,nil);
  72.   if brok<>NIL then
  73.   begin
  74.    F_diskin:=CreateCxObj(CX_Filter,long(^c1),0);
  75.     (* ein Filter, der die rawkey b herausfiltert *)
  76.    if F_diskin<>NIL then
  77.    begin
  78.     AttachCxObj(brok,F_diskin);
  79.     S_diskin:=CreateCxObj(CX_Send,long(MPort),1);
  80.      (* und ein Sender, der uns dann das auch mitteilt
  81.         als letztes wird hier der ID 1 angegeben, damit wir die Ereignisse
  82.         unterscheiden können *)
  83.     if S_diskin<>NIL then
  84.     begin
  85.      AttachCxObj(F_diskin,S_diskin);
  86.      F_diskrem:=CreateCxObj(CX_Filter,long(^c2),0);
  87.       (* der 2. Filter *)
  88.      if F_diskrem<>NIL then
  89.      begin
  90.       AttachCxObj(brok,F_diskrem);
  91.       S_diskrem:=CreateCxObj(CX_Send,long(MPort),2);
  92.        (* und sein Sender *)
  93.       if S_diskrem<>NIL then
  94.       begin
  95.        AttachCxObj(F_diskrem,S_diskrem);
  96.        err:=long(ActivateCxObj(brok,1));
  97.         (* so, das ganze jetzt ankurbeln und es (sollte) laufen... *)
  98.        HandleMsgs;
  99.       end;
  100.      end;
  101.     end;
  102.    end;
  103.    DeleteCxObjAll(brok); (* das entfernt einfach alle CxObjekte *)
  104.   end;
  105.   DeleteMsgPort(MPort);
  106.  end
  107. end.
  108.  
  109.