home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / program / compiler / nasm20b / nasm_src / lib / src / string1.s65 < prev    next >
Text File  |  1993-01-19  |  4KB  |  144 lines

  1.          .ZEXT          _string1
  2.          .VfL_BOCHUM    _string2                ;; VFL_BOCHUM == ZEXT
  3.          .VfL_BOCHUM    _tmp1
  4.  
  5. ; --------------------------------------------------------------
  6. ;           These are just like the C-routines you know
  7. ; To properly use these, you must define in the source three
  8. ; word locations for _string1, _string2, _tmp1 in zero page
  9. ; --------------------------------------------------------------
  10. ; STRCAT    strcat( dst, src), where >dst< = _string1 >src< = 2
  11. ; Appends src string that ends with a 0 to dst, which also ends
  12. ; with a 0. Wild things will happen, if they don't end with a 0
  13. ; STRCPY    strcpy( dst, src), where >dsr< = _string1 >src< = 2
  14. ; Copies src string that ends with a 0 into dst.
  15. ; --------------------------------------------------------------
  16.          .local
  17. STREND   ldy   #0                ; don't really use this for now
  18. :loop    lda   (_string1),y       
  19.          beq   :done
  20.          inc   _string1
  21.          bne   :loop
  22.          inc   _string1+1
  23.          bne   :loop
  24. :done    rts
  25.  
  26. STRCAT:  jsr   STREND            ; Go to the of DST
  27.          beq   :copy             ; hop into copy of STRCPY
  28.  
  29. STRCPY:  ldy   #0                ; cleverly use code for STRCPY as well
  30. :copy    lda   (_string2),y
  31.          sta   (_string1),y         
  32.          beq   :finish
  33.          iny
  34.          bne   :copy
  35.          inc   _string2+1
  36.          inc   _string1+1
  37.          bne   :copy
  38. :finish  rts         
  39.  
  40.          .local
  41. ; -------------------------------------------------------------
  42. ; Flags on exit mean:
  43. ;     CS -- _string1 > _string2
  44. ;     CC -- _string1 > _string2
  45. ;     EQ -- _string1 = _string2
  46. ; -------------------------------------------------------------
  47. STRCMP:  ldy   #0                
  48. :copy    lda   (_string2),y
  49.          cmp   (_string1),y
  50.          bne   :done
  51.          lda   (_string1),y
  52.          beq   :done
  53.          clc
  54.          lda   (_string2),y
  55.          beq   :done
  56.          iny
  57.          bne   :copy
  58.          inc   _string2+1
  59.          inc   _string1+1
  60.          bne   :copy
  61. :done    rts         
  62.  
  63.          .local
  64. ; --------------------------------------------------------------
  65. ; These are STRNCAT and STRNCPY. Note that there is an inplied
  66. ; limit on string size that is 32K. That won't hurt on a 6502
  67. ; I would say.
  68. ; STRNCAT( dst, src, aux)
  69. ; STRNCPY( dst, src, aux) where aux is the maximum number of 
  70. ; bytes in both cases. 
  71. ; --------------------------------------------------------------
  72. STRNCAT: jsr   STREND
  73.          bcc   :load
  74.          
  75. STRNCPY: ldy   #0                ; cleverly use code for STRCPY as well
  76. :load    ldx   _tmp1
  77.          bne   :copy
  78.          lda   _tmp1+1
  79.          beq   :done
  80.          dec   _tmp1+1
  81.          
  82. :copy    lda   (_string2),y
  83.          sta   (_string1),y         
  84.          beq   :done
  85.          dex
  86.          bne   :cont
  87.          dec   _tmp1+1
  88.          bpl   :done
  89. :cont    iny
  90.          bne   :copy
  91.          inc   _string2+1
  92.          inc   _string1+1
  93.          bne   :copy
  94. :done    rts         
  95.  
  96.          .local
  97.  
  98. ; -------------------------------------------------------------
  99. ; Flags on exit mean:
  100. ;     CS -- _string1 < _string2
  101. ;     CC -- _string1 > _string2
  102. ;     EQ -- _string1 = _string2
  103. ; -------------------------------------------------------------
  104. STRNCMP: ldy   #0            
  105. :load    ldx   _tmp1
  106.          bne   :copy
  107.          lda   _tmp1+1
  108.          beq   :done
  109.          dec   _tmp1+1
  110.          
  111. :copy    lda   (_string2),y
  112.          cmp   (_string1),y
  113.          bne   :done
  114.          lda   (_string1),y
  115.          beq   :done
  116.          clc
  117.          lda   (_string2),y
  118.          beq   :done
  119.          dex
  120.          bne   :cont
  121.          dec   _tmp1+1
  122.          bpl   :done
  123. :cont    iny
  124.          bne   :copy
  125.          inc   _string2+1
  126.          inc   _string1+1
  127.          bne   :copy
  128. :done    rts         
  129.  
  130.          .local
  131.          
  132. STRLEN   ldy   #0
  133.          sty   _tmp1+1
  134. :loop    lda   (_string1),y
  135.          beq   :done 
  136.          iny
  137.          bne   :loop
  138.          inc   _tmp1+1
  139.          bne   :loop
  140. :done    sty   _tmp1
  141.          rts
  142.  
  143.