home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / sd386v50.zip / sd386src.zip / BYTES.ASM < prev    next >
Assembly Source File  |  1992-02-19  |  5KB  |  175 lines

  1.         page    ,132
  2.         title   Copyright (C) 1988 IBM Corp (Written 11/87 by Jim Christensen)
  3.         subttl  Byte Manipulation Routines
  4.         name    BYTES
  5.  
  6.  
  7.         .386
  8. _TEXT   SEGMENT  DWORD USE32 PUBLIC 'CODE'
  9. _TEXT      ENDS
  10. _DATA   SEGMENT  DWORD USE32 PUBLIC 'DATA'
  11. _DATA      ENDS
  12.         ASSUME   CS: FLAT, DS: FLAT, SS: FLAT, ES: FLAT
  13. PUBLIC  bindex
  14. PUBLIC  windex
  15. PUBLIC  lindex
  16. _TEXT   SEGMENT  DWORD USE32 PUBLIC 'CODE'
  17. ;------------------------------------------------------------------------------;
  18. ; name          bindex -- byte index
  19. ;
  20. ; synopsis      n = bindex( cp, len, c );
  21. ;               int n;                  /* 0 to len-1 (index), or len */
  22. ;               char *cp;               /* char array to search */
  23. ;               int len;                /* # of chars in array (cp) */
  24. ;               int c;                  /* char to search for */
  25. ;
  26. ; description   This function returns the index into the char array cp,
  27. ;               of the first occurance of the char specified by c, or
  28. ;               len if c does not occur in cp.  If the 0x8000 bit of c
  29. ;               is set, then the function returns the index of the first
  30. ;               char that is NOT c.
  31. ;------------------------------------------------------------------------------;
  32.  
  33. cp_parm = 8
  34. len_parm = 12
  35. c_parm = 16
  36.  
  37. bindex  PROC NEAR
  38.         push    ebp
  39.         mov     ebp,esp
  40.         push    edi
  41.         push    ecx
  42.  
  43.         mov     edi, [ebp+cp_parm]
  44.         mov     ecx, [ebp+len_parm]
  45.         mov     eax, [ebp+c_parm]
  46.         jecxz   bi20
  47.  
  48.         or      ax, ax
  49.         js      bi30
  50.  
  51.         repne   scasb
  52.         jne     bi20
  53. bi00:
  54.         xchg    eax, ecx
  55.         sub     eax, [ebp+len_parm]       ;ax = (-1 to -len)
  56.         not     eax                      ;ax = (1 to len) - 1
  57. bi10:
  58.         pop     ecx
  59.         pop     edi
  60.         leave
  61.         ret
  62. bi20:
  63.         mov     eax, [ebp+len_parm]     ;return value for not found
  64.         pop     ecx
  65.         pop     edi
  66.         leave
  67.         ret
  68. bi30:
  69.         repe    scasb
  70.         je      bi20
  71.         jmp     bi00
  72.  
  73. bindex  endp
  74.  
  75. ;------------------------------------------------------------------------------;
  76. ; name          windex -- word index
  77. ;
  78. ; synopsis      n = windex( ip, ilen, i );
  79. ;               int n;                  /* 0 to ilen-1 (index), or len */
  80. ;               int *ip;                /* int array to search */
  81. ;               int ilen;               /* # of ints in array (ip) */
  82. ;               int i;                  /* int to search for */
  83. ;
  84. ; description   This function returns the index into the int array ip,
  85. ;               of the first occurance of the int specified by i, or
  86. ;               ilen if i does not occur in ip.
  87. ;------------------------------------------------------------------------------;
  88.  
  89. ip_parm = 8
  90. ilen_parm = 12
  91. i_parm = 16
  92.  
  93. windex  PROC NEAR
  94.         push    ebp
  95.         mov     ebp,esp
  96.         push    edi
  97.         push    ecx
  98.  
  99.         mov     edi, [ebp+ip_parm]
  100.         mov     ecx, [ebp+ilen_parm]
  101.         mov     eax, [ebp+i_parm]
  102.         jecxz   wi20
  103.  
  104.         repne   scasw
  105.         jne     wi20
  106.         xchg    eax, ecx
  107.         sub     eax, [ebp+ilen_parm]      ;eax = (-1 to -ilen)
  108.         not     eax                                 ;eax = (1 to ilen) - 1
  109. wi10:
  110.         pop     ecx
  111.         pop     edi
  112.         leave
  113.         ret
  114. wi20:
  115.         mov     eax, [ebp+ilen_parm]      ;return value for not found
  116.         pop     ecx
  117.         pop     edi
  118.         leave
  119.         ret
  120.  
  121. windex  endp
  122.  
  123.  
  124. ;------------------------------------------------------------------------------;
  125. ; name          lindex -- long index
  126. ;
  127. ; synopsis      n = lindex( lptr, len, item );
  128. ;               int n;                  /* 0 to len-1 (index), or len */
  129. ;               long *lptr;             /* long array to search */
  130. ;               int len;                /* # of longs in array (lptr) */
  131. ;               long item;              /* long to search for */
  132. ;
  133. ; description   This function returns the index into the long array lptr,
  134. ;               of the first occurance of the long specified by item, or
  135. ;               len if item does not occur in lptr.
  136. ;------------------------------------------------------------------------------;
  137.  
  138. lptr_parm = 8
  139. len_parm = 12
  140. item_parm = 16
  141.  
  142. lindex  PROC NEAR
  143.         push    ebp
  144.         mov     ebp,esp
  145.         push    edi
  146.         push    ecx
  147.  
  148.         mov     edi, [ebp+lptr_parm]
  149.         mov     ecx, [ebp+len_parm]
  150.         mov     eax, [ebp+item_parm]
  151.         jecxz   li20
  152.  
  153.         repne   scasd
  154.         jne     li20
  155.         xchg    eax, ecx
  156.         sub     eax, [ebp+len_parm]      ;eax = (-1 to -ilen)
  157.         not     eax                                ;eax = (1 to ilen) - 1
  158. li10:
  159.         pop     ecx
  160.         pop     edi
  161.         leave
  162.         ret
  163. li20:
  164.         mov     eax, [ebp+len_parm]      ;return value for not found
  165.         pop     ecx
  166.         pop     edi
  167.         leave
  168.         ret
  169.  
  170. lindex  endp
  171.  
  172.  
  173. _TEXT   ends
  174.         end
  175.