home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / MAGAZINE / MISC / QBNWS301.ZIP / FARSTRNG.ZIP / ZEROTRM7.ASM < prev    next >
Encoding:
Assembly Source File  |  1992-01-25  |  2.3 KB  |  70 lines

  1. ;ZeroTrm7.ASM
  2. ;Copyright (c) 1992 Jay Munro
  3. ;BC 7.x  version
  4. ;Syntax
  5. ;  Trimmed$ = ZeroTrim$(XString$)
  6. ;  Where XString contains leading CHR$(0)'s, Spaces (32), or Ascii Zeros
  7. ;  Chr$(48).
  8.  
  9. ;Assemble With Masm 5.1 or later
  10.  
  11. .Model Medium, Basic
  12.  
  13.   Extrn StringLength:Proc               ;BC 7 internal string routines
  14.   Extrn StringAddress:Proc
  15.   Extrn StringAssign:Proc
  16.   
  17. .Data
  18.  
  19.    Descriptor   DD  ?           ;Descriptor starts here
  20.    ZeroString   DW  0           ;Bogus data to point at
  21.    
  22. .Code
  23.  
  24. ZeroTrim Proc Uses SI, XString:Word
  25.        Push DS
  26.        Mov  SI,XString          ;get address of XString descriptor
  27.        Push SI                  ;push descriptor for length
  28.        Call StringLength        ;length is returned in AX
  29.        Mov  CX,AX               ;move length into CX
  30.        Jcxz ErrExit             ;if zero length then exit now
  31.        Push SI                  ;call string address
  32.        Call StringAddress       ;get address
  33.        Mov  DS,DX               ;point DS:SI at incoming string
  34.        Mov  SI,AX
  35.  
  36. TrimLoop:
  37.        Mov  AL,Byte Ptr [SI]    ;get character from XString
  38.        Or   AL,AL               ;is it a CHR$(0)?
  39.        Jz   @F                  ;yes, go back for more
  40.        Cmp  AL,32               ;is it a space character?
  41.        Jz   @F                  ;yes, go back for more
  42.        Cmp  AL,'0'              ;is it a a 0 character?
  43.        Jnz  Done                ;nope, then we're done
  44. @@:
  45.        Inc  SI                  ;Point BX at next character
  46.        Loop TrimLoop            ;go back for more
  47.        Jcxz ErrExit             ;oops zero length string
  48.        
  49. Done: 
  50.        Pop  DS                  ;retrieve DS
  51.        Push DX                  ;DX contains segment of string
  52.        Push SI                  ;SI contains current offset into string
  53.        Push CX                  ;CX contains length of string
  54.        Push DS                  ;point to descriptor
  55.        Mov  SI, OffSet Descriptor  ;get address of Descriptor into SI
  56.        Push SI
  57.        Xor  AX,AX
  58.        Push AX
  59.        Call StringAssign        ;return value is address of descriptor
  60. Exit:
  61.        Ret
  62.  
  63. ErrExit: 
  64.        Lea  SI, ZeroString      ;point at bogus data
  65.        Mov  DX,SS               ;assign DX to DGroup (SS=DGroup)
  66.        Jmp  Short Done          ;and assign the string
  67.  
  68. ZeroTrim EndP
  69. End
  70.