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

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;:        XCENTSTR.ASM -  Versione: 24-9-1991, a cura di Salvo Rosta.       ::
;:                                                                          ::
;: Function  XCenterStr(String,Field) ;Centra Stringa in campo Field        ::
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
CODE      SEGMENT BYTE PUBLIC
          ASSUME  CS:CODE
          PUBLIC  XCenterStr

Function  EQU     DWORD PTR [BP+12]
String    EQU     DWORD PTR [BP+8]
Field     EQU     BYTE  PTR [BP+6]

ProcUno   PROC    FAR

XCenterStr:
          PUSH    BP
          MOV     BP,SP
          PUSH    DS

          LDS     SI,String           ;Lettura Puntatore Stringa DS:SI
          LES     DI,Function         ;Lettura Puntatore Funzione Stringa ES:DI
          CLD                         ;Direzione di scansione normale
          LODSB                       ;Lettura in AL Lunghezza Stringa
          STOSB                       ;Modifica Lunghezza Stringa Funzione
          XOR     CX,CX               ;Azzera Contatore
          MOV     CL,AL               ;CL Lunghezza Stringa
          JCXZ    StopXS              ;Smetti se lunghezza=0
          MOV     BL,Field
          CMP     CL,BL
          JB      Work1
          JMP     Copy                ;  Ricopia se Lunghezza >= Field
Work1:    XOR     AH,AH
          XOR     BH,BH
          SUB     BL,CL               ;Calcolo Spazi aggiuntivi (F-L)/2
          SHR     BL,1
          ADD     AX,BX
          CMP     AH,0
          JE      Work
          JMP     Copy                ;  Ricopia se Lunghezza Complessiva > 255

Work:     DEC     DI
          STOSB                       ; Nuova Lunghezza Stringa
          PUSH    CX
          SUB     AX,CX               ; Spazi Aggiuntivi
          MOV     CX,AX
          MOV     AL,' '
          REPZ    STOSB               ;
          POP     CX
Copy:     REPZ    MOVSB               ;

StopXS:   POP     DS                  ;Ripristino Registri
          POP     BP
          RET     6
ProcUno   ENDP

CODE      ENDS
          END