;:::::::::::::::::::::::::::::::::::::::::
;:      Sito:  www.byteman.it  OpenWeb  ::
;:  Raccolta:  Particelle PAS+ASM       ::
;:    Autore:  Salvo Rosta aka byteman  ::
;:    Titolo:  XNOSPA.ASM               ::
;: Revisione:  07-04-1994               ::
;:::::::::::::::::::::::::::::::::::::::::

COMMENT # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;:        XNOSPA.ASM   -  Versione: 20-01-1994, a cura di Salvo Rosta.      ::
;:                                                                          ::
;: Function  XNoSpace(String);          Elimina i caratteri spazio          ::
;: char *XNoSpace(char far * St);       Elimina i caratteri spazio          ::
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#
            INCLUDE MODEL.IAS
ifdef       comp__c
.DATA
;:::::::::: DATI INTERNI NON INIZIALIZZATI :::::::::::::::::::::::::::::::::::
CXNoSpace   DB 256 DUP('X')
endif


.CODE
;:::::::::: CODICE TIPO FAR ::::::::::::::::::::::::::::::::::::::::::::::::::
            PUBLIC  XNoSpace

String      EQU     DWORD PTR [BP+6]
Function    EQU     DWORD PTR [BP+10]       ;Solo per Pascal

XNoSpace    PROC    FAR
            PUSH    BP
            MOV     BP,SP
ifdef       comp__c
            MOV     DX,DS
            MOV     DI,Offset DS:CXNoSpace
endif
            PUSH    DS
            LDS     SI,String               ;Legge Puntatore Argomento DS:SI

ifdef       comp__pascal
            LES     DI,Function             ;Legge Puntatore Funzione ES:DI
            MOV     BX,DI                   ;Salva Offset in BX
            CLD                             ;Direzione di scansione normale
            LODSB                           ;Lettura in AL Lunghezza Stringa
            STOSB
            XOR     CX,CX                   ;Azzera Contatore
            MOV     CL,AL                   ;CL Lunghezza Stringa
            JCXZ    StopXS                  ;Smetti se lunghezza=0
            MOV     AH,' '                  ;Carattere da ricercare in AH
            XOR     DL,DL                   ;Azzera Cont. DL (Car. Non-Spazio)
XNoSpa0:    LODSB                           ;Pone in AL il Puntato da SI (INC SI)
            CMP     AL,AH                   ;Confronto con Spazio
            JZ      XNoSpa1                 ;Ricicla se uguale,
            STOSB                           ;Carica AL nella Funzione ES:DI
            INC     DL                      ;Aggiorna il Contatore DL
XNoSpa1:    LOOP    XNoSpa0                 ;Ricicla.
            MOV     ES:[BX],DL              ;Modifica Lunghezza Funzione Stringa
else
            PUSH    ES
            PUSH    DI                      ;Salva DI
            MOV     ES,DX
            MOV     AH,' '
@ReadCh:    LODSB
            CMP     AL,AH
            JE      @ReadCh
            STOSB
            CMP     AL,0
            JNE     @ReadCh
            POP     AX                      ;Restituisce ES:DI in DX:AX
            POP     ES
endif

StopXS:     POP     DS                      ;Ripristino Registri
            POP     BP

Ifdef       comp__c
            RET
Else
            RET     4
Endif
XNoSpace    ENDP

            END