home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / dev / m2 / CycloneModules.lha / modules / txt / AmigaLib.mod < prev    next >
Text File  |  1996-08-22  |  3KB  |  158 lines

  1. IMPLEMENTATION MODULE AmigaLib;
  2.  
  3. (* (C) Copyright 1996 Marcel Timmermans. All rights reserved. *)
  4.  
  5. FROM SYSTEM IMPORT ASSEMBLE,ADDRESS;
  6.  
  7. IMPORT Reg,ud:UtilityD,id:IntuitionD;
  8.  
  9.  
  10. PROCEDURE FastRand(seed{Reg.D0}:LONGINT):LONGINT;
  11. (*$ EntryExitCode- *)
  12. BEGIN
  13.  ASSEMBLE(
  14.     ADD.L    D0,D0
  15.     BHI.S    Cont
  16.     EORI.L    #$1D872B41,D0
  17. Cont:
  18.     RTS
  19.  END);
  20. END FastRand;
  21.  
  22. PROCEDURE RangeRand(maxValue{Reg.D5}:LONGINT):CARDINAL;
  23. BEGIN
  24.  ASSEMBLE(
  25.     MOVEM.L D4-D5,-(A7)
  26.     MOVE.W    D5,D4
  27.     SUBQ.W    #1,D4
  28.     MOVE.L    RangeSeed(A4),D0
  29. L1:
  30.     ADD.L    D0,D0
  31.     BHI.S    L2
  32.     EORI.L    #$1D872B41,D0
  33. L2:
  34.     LSR.W    #1,D4
  35.     BNE.S    L1
  36.     MOVE.L    D0,RangeSeed(A4)
  37.     TST.W    D5
  38.     BNE.S    L3
  39.     SWAP    D0
  40.     BRA.S    L4
  41. L3:
  42.     MULU    D5,D0
  43. L4:
  44.     CLR.W    D0
  45.     SWAP    D0
  46.     MOVEM.L (A7)+,D4-D5
  47.     RTS
  48.  
  49.  END);
  50. END RangeRand;
  51.  
  52. (*$ EntryExitCode- *)
  53. PROCEDURE CallHookA(hook{Reg.A0}:ud.HookPtr;object{Reg.A2}:ADDRESS;
  54.                     message{Reg.A1}:ADDRESS):ADDRESS;
  55. BEGIN
  56.  ASSEMBLE(
  57.    MOVE.L ud.Hook.entry(A0),-(A7)
  58.    RTS
  59.  END);
  60. END CallHookA;
  61.  
  62. PROCEDURE DoMethodA(obj{Reg.A2}:ADDRESS; msg{Reg.A1}:ADDRESS):ADDRESS;
  63. (*$ EntryExitCode- *)
  64. BEGIN
  65.  ASSEMBLE(
  66.         MOVE.L  A2,-(A7)
  67.         MOVE.L  A2,D0
  68.         BEQ.S   L1
  69.         MOVEA.L -4(A2),A0
  70.         PEA     L2(PC)
  71.         MOVE.L  8(A0),-(A7)
  72.         RTS
  73. L1:
  74.         MOVEQ   #0,D0
  75. L2:
  76.         MOVEA.L (A7)+,A2
  77.         RTS
  78.  END);
  79. END DoMethodA;
  80.  
  81. PROCEDURE DoSuperMethodA(cl{Reg.A0}:id.IClassPtr;obj{Reg.A2}:ADDRESS;
  82.                          msg{Reg.A1}:ADDRESS):ADDRESS;
  83. (*$ EntryExitCode- *)
  84. BEGIN
  85.  ASSEMBLE(
  86.     MOVE.L    A2,-(A7)
  87.     MOVE.L    A2,D0
  88.     BEQ.S    L1
  89.     MOVE.L    A0,D0
  90.     BEQ.S    L1
  91.     MOVE.L    24(A0),A0
  92.         PEA     L2(PC)
  93.         MOVE.L  8(A0),-(A7)
  94.         RTS
  95. L1:
  96.         MOVEQ   #0,D0
  97. L2:
  98.     MOVEA.L (A7)+,A2
  99.     RTS
  100.  END);
  101. END DoSuperMethodA;
  102.  
  103. PROCEDURE CoerceMethodA(cl{Reg.A0}:id.IClassPtr;obj{Reg.A2}:ADDRESS;
  104.                          msg{Reg.A1}:id.Msg):ADDRESS;
  105. (*$ EntryExitCode- *)
  106. BEGIN
  107.  ASSEMBLE(
  108.     MOVE.L    A2,-(A7)
  109.     MOVE.L    A2,D0
  110.     BEQ.S    L1
  111.     MOVE.L    A0,D0
  112.     BEQ.S    L1
  113.     MOVEA.L 24(A0),A0
  114.         PEA     L2(PC)
  115.         MOVE.L  8(A0),-(A7)
  116.         RTS
  117. L1:
  118.         MOVEQ   #0,D0
  119. L2:
  120.     MOVEA.L (A7)+,A2
  121.     RTS
  122.  END);
  123. END CoerceMethodA;
  124.  
  125. PROCEDURE SetSuperAttrsA(cl{Reg.A0}:id.IClassPtr;obj{Reg.A2}:ADDRESS;
  126.                         tags{Reg.A1}:ud.Tag):ADDRESS;
  127. (*$ EntryExitCode- *)
  128. BEGIN
  129.  ASSEMBLE(
  130.         MOVE.L    A2,-(A7)
  131.         MOVE.L    A2,D0
  132.         BEQ.S    L1
  133.         MOVE.L    A0,D0
  134.         BEQ.S   L1
  135.         MOVEA.L 24(A0),A0
  136.         MOVE.L    #$00000000,-(A7)
  137.         MOVE.L    A1,-(A7)
  138.         MOVE.L    #$00000103,-(A7)
  139.         MOVEA.L A7,A1
  140.         PEA    L3(PC)
  141.         MOVE.L    8(A0),-(A7)
  142.         RTS
  143. L3:
  144.         LEA    12(A7),A7
  145.         MOVEA.L (A7)+,A2
  146.         RTS
  147.  
  148. L1:
  149.         MOVEQ   #0,D0
  150. L2:
  151.     MOVEA.L (A7)+,A2
  152.     RTS
  153.  END);
  154. END SetSuperAttrsA;
  155.  
  156.  
  157. END AmigaLib.
  158.