Advertisement
Guest User

pointers.inc

a guest
Jun 13th, 2012
978
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 1.83 KB | None | 0 0
  1. // pointers.inc by Slice
  2.  
  3. #if !defined MAX_POINTER_INDEX
  4.     #define MAX_POINTER_INDEX  1024
  5. #endif
  6.  
  7. stock
  8.     g_aaiPointers[1][MAX_POINTER_INDEX]
  9. ;
  10.  
  11. stock PointerByAddress(...) {
  12.     new args = numargs();
  13.    
  14.     if (args == 1) {
  15.         #emit CONST.alt   g_aaiPointers
  16.         #emit LCTRL       5
  17.         #emit ADD.C       12
  18.         #emit LOAD.I
  19.         #emit LOAD.I
  20.         #emit SUB
  21.         #emit STOR.I
  22.     } else {
  23.         new address;
  24.        
  25.         #emit LCTRL       5
  26.         #emit ADD.C       12
  27.         #emit LOAD.I
  28.         #emit LOAD.I
  29.         #emit STOR.S.pri  address
  30.        
  31.         for (new arg = 1; arg < args; arg++) {
  32.             if (arg == 1) {
  33.                 #emit LCTRL       5
  34.                 #emit ADD.C       16
  35.                 #emit LOAD.I
  36.                 #emit LOAD.I
  37.                 #emit SHL.C.pri   2
  38.                 #emit MOVE.alt
  39.                
  40.                 #emit LOAD.S.pri  address
  41.                 #emit ADD
  42.                 #emit PUSH.pri
  43.                 #emit LOAD.I
  44.                 #emit POP.alt
  45.                 #emit ADD
  46.                 #emit STOR.S.pri  address
  47.             } else {
  48.                 #emit LCTRL       5
  49.                 #emit ADD.C       12
  50.                 #emit LOAD.S.alt  arg
  51.                 #emit SHL.C.alt   2
  52.                 #emit ADD
  53.                 #emit LOAD.I
  54.                 #emit LOAD.I
  55.                 #emit SHL.C.pri   2
  56.                 #emit LOAD.S.alt  address
  57.                 #emit ADD
  58.                 #emit STOR.S.pri  address
  59.             }
  60.         }
  61.        
  62.         #emit CONST.alt   g_aaiPointers
  63.         #emit LOAD.S.pri  address
  64.         #emit SUB
  65.         #emit STOR.I
  66.     }
  67. }
  68.  
  69. stock PointerByArgument(iArg) {
  70.     #emit LOAD.S.pri  iArg
  71.     #emit SHL.C.pri   2
  72.     #emit LOAD.S.alt  0
  73.     #emit ADD
  74.     #emit ADD.C       12
  75.     #emit LOAD.I
  76.     #emit CONST.alt   g_aaiPointers
  77.     #emit SUB
  78.     #emit STOR.I
  79. }
  80.  
  81. stock GetVariableAddress(...) {
  82.     #emit LOAD.S.pri  12
  83.     #emit RETN
  84.    
  85.     return 0;
  86. }
  87.  
  88. stock GetArgumentAddress(iArg) {
  89.     #emit LOAD.S.pri  iArg
  90.     #emit SHL.C.pri   2
  91.     #emit LOAD.S.alt  0
  92.     #emit ADD
  93.     #emit ADD.C       12
  94.     #emit LOAD.I
  95.     #emit RETN
  96.    
  97.     return 0;
  98. }
  99.  
  100. #define  @ptr[%1] (PointerByAddress (%1), g_aaiPointers[0][0])
  101. #define  @arg[%1] (PointerByArgument(%1), g_aaiPointers[0][0])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement