home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Pascal / HISOFTPASCAL2,0-3.DMS / in.adf / Units / Commodities.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-05-20  |  7.8 KB  |  493 lines

  1. unit Commodities;
  2.  
  3. INTERFACE
  4. uses Exec, Input, Keymap;
  5.  
  6.  
  7. type
  8.     PFL = pointer;
  9.     pInputXpression = ^tInputXpression;
  10.     tInputXpression = record
  11.         ix_Version: byte;
  12.         ix_Class: byte;
  13.         ix_Code: word;
  14.         ix_CodeMask: word;
  15.         ix_Qualifier: word;
  16.         ix_QualMask: word;
  17.         ix_QualSame: word;
  18.         end;
  19.  
  20.     IX = tInputXpression;
  21.     CxObj = LongInt;
  22.     CxMsg = LongInt;
  23.     pNewBroker = ^tNewBroker;
  24.     tNewBroker = record
  25.         nb_Version: shortint;
  26.         nb_Name: pshortint;
  27.         nb_Title: pshortint;
  28.         nb_Descr: pshortint;
  29.         nb_Unique: integer;
  30.         nb_Flags: integer;
  31.         nb_Pri: shortint;
  32.         nb_Port: pMsgPort;
  33.         nb_ReservedChannel: integer;
  34.         end;
  35.  
  36.     pCxObj = ^CxObj;
  37.     pCxMsg = ^CxMsg;
  38.     pIX = ^IX;
  39.  
  40.  
  41. var
  42.     CxBase: pLibrary;
  43.  
  44.  
  45. const
  46.     CBD_NAMELEN = $18;
  47.     CBERR_VERSION = 3;
  48.     CX_DEBUG = 7;
  49.     CBERR_OK = 0;
  50.     COERR_NULLATTACH = 2;
  51.     CX_TYPEFILTER = 2;
  52.     CXCMD_DISAPPEAR = $15;
  53.     COERR_BADFILTER = 4;
  54.     CX_CUSTOM = 8;
  55.     IXSYM_ALTMASK = $30;
  56.     IXSYM_ALT = 4;
  57.     CXCMD_UNIQUE = $19;
  58.     CMDE_OK = 0;
  59.     CX_TRANSLATE = 5;
  60.     CXM_COMMAND = $40;
  61.     COERR_ISNULL = 1;
  62.     CBERR_SYSERR = 1;
  63.     CX_SEND = 3;
  64.     CMDE_NOMEM = $FFFFFFFD;
  65.     CMDE_NOPORT = $FFFFFFFE;
  66.     CXCMD_DISABLE = $F;
  67.     CXCMD_KILL = $17;
  68.     CX_INVALID = 0;
  69.     CX_ZERO = 9;
  70.     CXCMD_LIST_CHG = $1B;
  71.     IXSYM_SHIFTMASK = 3;
  72.     CXCMD_ENABLE = $11;
  73.     CMDE_NOBROKER = $FFFFFFFF;
  74.     CXM_IEVENT = $20;
  75.     IXSYM_SHIFT = 1;
  76.     CBD_DESCRLEN = $28;
  77.     NB_VERSION = 5;
  78.     NBU_DUPLICATE = 0;
  79.     COERR_BADTYPE = 8;
  80.     CBERR_DUP = 2;
  81.     NBU_UNIQUE = 1;
  82.     NBU_NOTIFY = 2;
  83.     CX_SIGNAL = 4;
  84.     IXSYM_CAPSMASK = 7;
  85.     CXM_UNIQUE = $10;
  86.     IXSYM_CAPS = 2;
  87.     IX_NORMALQUALS = $7FFF;
  88.     CXCMD_APPEAR = $13;
  89.     CBD_TITLELEN = $28;
  90.     CX_BROKER = 6;
  91.     CX_FILTER = 1;
  92.     IX_VERSION = 2;
  93.     COF_SHOW_HIDE = 4;
  94.  
  95.  
  96. function CreateCxObj
  97.         (type_: long;
  98.         arg1: longint;
  99.         arg2: longint): pCxObj;
  100.  
  101. function CxBroker
  102.         (nb: pNewBroker;
  103.         error: plongint): pCxObj;
  104.  
  105. function ActivateCxObj
  106.         (co: pCxObj;
  107.         true_: longint): longint;
  108.  
  109. procedure DeleteCxObj (co: pCxObj);
  110. procedure DeleteCxObjAll (co: pCxObj);
  111. function CxObjType (co: pCxObj): long;
  112. function CxObjError (co: pCxObj): longint;
  113. procedure ClearCxObjError (co: pCxObj);
  114. procedure SetCxObjPri
  115.         (co: pCxObj;
  116.         pri: longint);
  117.  
  118. procedure AttachCxObj
  119.         (headObj: pCxObj;
  120.         co: pCxObj);
  121.  
  122. procedure EnqueueCxObj
  123.         (headObj: pCxObj;
  124.         co: pCxObj);
  125.  
  126. procedure InsertCxObj
  127.         (headObj: pCxObj;
  128.         co: pCxObj;
  129.         pred: pCxObj);
  130.  
  131. procedure RemoveCxObj (co: pCxObj);
  132. procedure SetTranslate
  133.         (translator: pCxObj;
  134.         events: pInputEvent);
  135.  
  136. procedure SetFilter
  137.         (filter: pCxObj;
  138.         text_: STRPTR);
  139.  
  140. procedure SetFilterIX
  141.         (filter: pCxObj;
  142.         ix: pIX);
  143.  
  144. function ParseIX
  145.         (description: STRPTR;
  146.         ix: pIX): longint;
  147.  
  148. function CxMsgType (cxm: pCxMsg): long;
  149. function CxMsgData (cxm: pCxMsg): pointer;
  150. function CxMsgID (cxm: pCxMsg): longint;
  151. procedure DivertCxMsg
  152.         (cxm: pCxMsg;
  153.         headobj: pCxObj;
  154.         ret: pCxObj);
  155.  
  156. procedure RouteCxMsg
  157.         (cxm: pCxMsg;
  158.         co: pCxObj);
  159.  
  160. procedure DisposeCxMsg (cxm: pCxMsg);
  161. function InvertKeyMap
  162.         (ansicode: long;
  163.         event: pInputEvent;
  164.         km: pKeyMap): boolean;
  165.  
  166. procedure AddIEvents (events: pInputEvent);
  167.  
  168.  
  169. (* Amiga.lib Commodities support *)
  170. procedure FreeIEvents (events: pInputEvent);
  171. function CxCustom
  172.         (action: pointer;
  173.         id: longint): pCxObj;
  174.  
  175. function CxDebug (id: long): pCxObj;
  176. function CxFilter (d: STRPTR): pCxObj;
  177. function CxSender
  178.         (port: pMsgPort;
  179.         id: longint): pCxObj;
  180.  
  181. function CxSignal
  182.         (task: pTask;
  183.         sig: byte): pCxObj;
  184.  
  185. function CxTranslate (ie: pInputEvent): pCxObj;
  186.  
  187.  
  188. IMPLEMENTATION
  189. procedure FreeIEvents (events: pInputEvent);
  190. begin
  191.     while events <> NIL do
  192.     begin
  193.         FreeMem (events, sizeof (tInputEvent));
  194.         events := events^.ie_NextEvent
  195.     end
  196. end;
  197.  
  198. function CxCustom;
  199. begin
  200.     CxCustom := CreateCxObj(CX_CUSTOM, longint(action), id)
  201. end;
  202.  
  203. function CxDebug;
  204. begin
  205.     CxDebug := CreateCxObj(CX_DEBUG, id, 0)
  206. end;
  207.  
  208. function CxFilter;
  209. begin
  210.     CxFilter := CreateCxObj(CX_FILTER, longint(d), 0)
  211. end;
  212.  
  213. function CxSender;
  214. begin
  215.     CxSender := CreateCxObj(CX_SEND, longint(port), id)
  216. end;
  217.  
  218. function CxSignal;
  219. begin
  220.     CxSignal:= CreateCxObj(CX_SIGNAL, longint(task), sig)
  221. end;
  222.  
  223. function CxTranslate;
  224. begin
  225.     CxTranslate := CreateCxObj(CX_TRANSLATE, longint(ie), 0)
  226. end;
  227.  
  228. function CreateCxObj; xassembler;
  229. asm
  230.     move.l    a6,-(sp)
  231.     lea        8(sp),a6
  232.     move.l    (a6)+,a1
  233.     move.l    (a6)+,a0
  234.     move.l    (a6)+,d0
  235.     move.l    CxBase,a6
  236.     jsr        -$1E(a6)
  237.     move.l    d0,$14(sp)
  238.     move.l    (sp)+,a6
  239. end;
  240.  
  241. function CxBroker; xassembler;
  242. asm
  243.     move.l    a6,-(sp)
  244.     movem.l    8(sp),d0/a0
  245.     move.l    CxBase,a6
  246.     jsr        -$24(a6)
  247.     move.l    d0,$10(sp)
  248.     move.l    (sp)+,a6
  249. end;
  250.  
  251. function ActivateCxObj; xassembler;
  252. asm
  253.     move.l    a6,-(sp)
  254.     movem.l    8(sp),d0/a0
  255.     move.l    CxBase,a6
  256.     jsr        -$2A(a6)
  257.     move.l    d0,$10(sp)
  258.     move.l    (sp)+,a6
  259. end;
  260.  
  261. procedure DeleteCxObj; xassembler;
  262. asm
  263.     move.l    a6,-(sp)
  264.     move.l    8(sp),a0
  265.     move.l    CxBase,a6
  266.     jsr        -$30(a6)
  267.     move.l    (sp)+,a6
  268. end;
  269.  
  270. procedure DeleteCxObjAll; xassembler;
  271. asm
  272.     move.l    a6,-(sp)
  273.     move.l    8(sp),a0
  274.     move.l    CxBase,a6
  275.     jsr        -$36(a6)
  276.     move.l    (sp)+,a6
  277. end;
  278.  
  279. function CxObjType; xassembler;
  280. asm
  281.     move.l    a6,-(sp)
  282.     move.l    8(sp),a0
  283.     move.l    CxBase,a6
  284.     jsr        -$3C(a6)
  285.     move.l    d0,$C(sp)
  286.     move.l    (sp)+,a6
  287. end;
  288.  
  289. function CxObjError; xassembler;
  290. asm
  291.     move.l    a6,-(sp)
  292.     move.l    8(sp),a0
  293.     move.l    CxBase,a6
  294.     jsr        -$42(a6)
  295.     move.l    d0,$C(sp)
  296.     move.l    (sp)+,a6
  297. end;
  298.  
  299. procedure ClearCxObjError; xassembler;
  300. asm
  301.     move.l    a6,-(sp)
  302.     move.l    8(sp),a0
  303.     move.l    CxBase,a6
  304.     jsr        -$48(a6)
  305.     move.l    (sp)+,a6
  306. end;
  307.  
  308. procedure SetCxObjPri; xassembler;
  309. asm
  310.     move.l    a6,-(sp)
  311.     movem.l    8(sp),d0/a0
  312.     move.l    CxBase,a6
  313.     jsr        -$4E(a6)
  314.     move.l    (sp)+,a6
  315. end;
  316.  
  317. procedure AttachCxObj; xassembler;
  318. asm
  319.     move.l    a6,-(sp)
  320.     lea        8(sp),a6
  321.     move.l    (a6)+,a1
  322.     move.l    (a6)+,a0
  323.     move.l    CxBase,a6
  324.     jsr        -$54(a6)
  325.     move.l    (sp)+,a6
  326. end;
  327.  
  328. procedure EnqueueCxObj; xassembler;
  329. asm
  330.     move.l    a6,-(sp)
  331.     lea        8(sp),a6
  332.     move.l    (a6)+,a1
  333.     move.l    (a6)+,a0
  334.     move.l    CxBase,a6
  335.     jsr        -$5A(a6)
  336.     move.l    (sp)+,a6
  337. end;
  338.  
  339. procedure InsertCxObj; xassembler;
  340. asm
  341.     movem.l    a2/a6,-(sp)
  342.     lea        $C(sp),a6
  343.     move.l    (a6)+,a2
  344.     move.l    (a6)+,a1
  345.     move.l    (a6)+,a0
  346.     move.l    CxBase,a6
  347.     jsr        -$60(a6)
  348.     movem.l    (sp)+,a2/a6
  349. end;
  350.  
  351. procedure RemoveCxObj; xassembler;
  352. asm
  353.     move.l    a6,-(sp)
  354.     move.l    8(sp),a0
  355.     move.l    CxBase,a6
  356.     jsr        -$66(a6)
  357.     move.l    (sp)+,a6
  358. end;
  359.  
  360. procedure SetTranslate; xassembler;
  361. asm
  362.     move.l    a6,-(sp)
  363.     lea        8(sp),a6
  364.     move.l    (a6)+,a1
  365.     move.l    (a6)+,a0
  366.     move.l    CxBase,a6
  367.     jsr        -$72(a6)
  368.     move.l    (sp)+,a6
  369. end;
  370.  
  371. procedure SetFilter; xassembler;
  372. asm
  373.     move.l    a6,-(sp)
  374.     lea        8(sp),a6
  375.     move.l    (a6)+,a1
  376.     move.l    (a6)+,a0
  377.     move.l    CxBase,a6
  378.     jsr        -$78(a6)
  379.     move.l    (sp)+,a6
  380. end;
  381.  
  382. procedure SetFilterIX; xassembler;
  383. asm
  384.     move.l    a6,-(sp)
  385.     lea        8(sp),a6
  386.     move.l    (a6)+,a1
  387.     move.l    (a6)+,a0
  388.     move.l    CxBase,a6
  389.     jsr        -$7E(a6)
  390.     move.l    (sp)+,a6
  391. end;
  392.  
  393. function ParseIX; xassembler;
  394. asm
  395.     move.l    a6,-(sp)
  396.     lea        8(sp),a6
  397.     move.l    (a6)+,a1
  398.     move.l    (a6)+,a0
  399.     move.l    CxBase,a6
  400.     jsr        -$84(a6)
  401.     move.l    d0,$10(sp)
  402.     move.l    (sp)+,a6
  403. end;
  404.  
  405. function CxMsgType; xassembler;
  406. asm
  407.     move.l    a6,-(sp)
  408.     move.l    8(sp),a0
  409.     move.l    CxBase,a6
  410.     jsr        -$8A(a6)
  411.     move.l    d0,$C(sp)
  412.     move.l    (sp)+,a6
  413. end;
  414.  
  415. function CxMsgData; xassembler;
  416. asm
  417.     move.l    a6,-(sp)
  418.     move.l    8(sp),a0
  419.     move.l    CxBase,a6
  420.     jsr        -$90(a6)
  421.     move.l    d0,$C(sp)
  422.     move.l    (sp)+,a6
  423. end;
  424.  
  425. function CxMsgID; xassembler;
  426. asm
  427.     move.l    a6,-(sp)
  428.     move.l    8(sp),a0
  429.     move.l    CxBase,a6
  430.     jsr        -$96(a6)
  431.     move.l    d0,$C(sp)
  432.     move.l    (sp)+,a6
  433. end;
  434.  
  435. procedure DivertCxMsg; xassembler;
  436. asm
  437.     movem.l    a2/a6,-(sp)
  438.     lea        $C(sp),a6
  439.     move.l    (a6)+,a2
  440.     move.l    (a6)+,a1
  441.     move.l    (a6)+,a0
  442.     move.l    CxBase,a6
  443.     jsr        -$9C(a6)
  444.     movem.l    (sp)+,a2/a6
  445. end;
  446.  
  447. procedure RouteCxMsg; xassembler;
  448. asm
  449.     move.l    a6,-(sp)
  450.     lea        8(sp),a6
  451.     move.l    (a6)+,a1
  452.     move.l    (a6)+,a0
  453.     move.l    CxBase,a6
  454.     jsr        -$A2(a6)
  455.     move.l    (sp)+,a6
  456. end;
  457.  
  458. procedure DisposeCxMsg; xassembler;
  459. asm
  460.     move.l    a6,-(sp)
  461.     move.l    8(sp),a0
  462.     move.l    CxBase,a6
  463.     jsr        -$A8(a6)
  464.     move.l    (sp)+,a6
  465. end;
  466.  
  467. function InvertKeyMap; xassembler;
  468. asm
  469.     move.l    a6,-(sp)
  470.     lea        8(sp),a6
  471.     move.l    (a6)+,a1
  472.     move.l    (a6)+,a0
  473.     move.l    (a6)+,d0
  474.     move.l    CxBase,a6
  475.     jsr        -$AE(a6)
  476.     tst.l    d0
  477.     sne        d0
  478.     neg.b    d0
  479.     move.b    d0,$14(sp)
  480.     move.l    (sp)+,a6
  481. end;
  482.  
  483. procedure AddIEvents; xassembler;
  484. asm
  485.     move.l    a6,-(sp)
  486.     move.l    8(sp),a0
  487.     move.l    CxBase,a6
  488.     jsr        -$B4(a6)
  489.     move.l    (sp)+,a6
  490. end;
  491.  
  492. end.
  493.