STRINGS.ASM
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:2k
源码类别:

操作系统开发

开发平台:

DOS

  1. PAGE    66,132
  2. ;
  3. ;
  4. ;
  5. ;
  6. ;
  7. ;  net_string - find a network string from a buffer
  8. ;
  9. ;
  10. ;  (c) 1992 Erick Engelke
  11. ;
  12. ;
  13. ;
  14. include masmdefs.hsm
  15. include model.hsm
  16. codedef net_string
  17. datadef
  18. cstart  net_string
  19. ;*************************************************************************
  20. ;  USAGE:  int net_string( byte *buf, int buflen, byte *strbuf, int strbuflen )
  21. ;  ALL POINTERS ASSUMED FAR
  22. ;*************************************************************************
  23. cpublic net_string
  24.         push    DS
  25.         push    ES
  26.         cld
  27.         lds     SI, +@AB + 0  [BP]
  28.         mov     BX, +@AB + 4  [BP]
  29.         les     DI, +@AB + 6  [BP]
  30.         mov     CX, +@AB + 10 [BP]
  31.         cmp     CX, BX          ; find the lesser, ie. max string len
  32.         ja      .0
  33.         mov     CX, BX
  34. .0:     sub     CX, 2           ; must leave room for the ''
  35.         mov     BX, CX          ; need later
  36. .1:     lodsb                   ; check each character to see if
  37.         cmp     AL, 0eh         ; it is the string terminator
  38.         jb      .3              ; a likely suspect is investigated
  39. .2:     stosb
  40.         loop    .1
  41.         jcxz    .4              ; quite done
  42.                                 ; (MS-ASM generates phase error if we use JMP
  43.                                 ; phase-error? Get a life Microsoft, figuring
  44.                                 ; out the distance is pretty darn trivial,
  45.                                 ; even DEBUG can do it!)
  46. .3:     cmp     AL, 0ah         ; <lf>
  47.         je      .4
  48.         cmp     AL, 0dh         ; <cr>
  49.         jne     .2              ; no, so continue
  50.         ; this is still for <cr>, we erase the next character
  51.         jcxz    .5              ; no more characters - line incomplete
  52.         dec     CX
  53.         jmp     .4
  54.         ; here we handle case when we didn't find a string
  55. .5:
  56. .4:     xor     AL, AL
  57.         stosb
  58.         ; now must return length of string to remove
  59.         mov     AX, BX
  60.         sub     AX, CX
  61. .6:     pop     ES
  62.         pop     DS
  63. creturn net_string
  64. cend    net_string
  65.         end