Asc: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
No edit summary
 
No edit summary
Line 74: Line 74:
     Asc.Do:
     Asc.Do:
         IntFmt $2 %c $0
         IntFmt $2 %c $0
         StrCmp $1 $2 Asc.Exit
        System::Call 'kernel32::lstrcmpA(t, t) i(r1,r2) .r3'
         StrCmp $3 "0" Asc.Exit
         IntOp $0 $0 + 1
         IntOp $0 $0 + 1
     StrCmp $0 256 0 Asc.Do
     StrCmp $0 256 0 Asc.Do
     StrCpy $0 "-1"
     StrCpy $0 "-1"


     Asc.Exit:
     Asc.Exit:

Revision as of 20:39, 16 July 2005

Author: nechai (talk, contrib)


Description

Returns an Integer representing the character code corresponding to the first letter in a string.

Syntax

${Asc} "String"

"String"   ; string argument

Stack 1    ; Ascii code

Usage

 ${Asc} "a"
 Pop $0 ; returns 65
 ${Asc} "bb"
 Pop $0 ; returns 66

The Function

Function Asc
; Returns an Integer representing the character code corresponding to the first letter in a string.
; 
; Syntax:
; ${Asc} "String"
; 
; "String"   ; string argument
; 
; Stack 1    ; Ascii code
; 
; e.g.
; ${Asc} "a"
; Pop $0 ; returns 65
; ${Asc} "bb"
; Pop $0 ; returns 66
;
    !define Asc `!insertmacro AscCall`
 
    !macro AscCall _STRING
        ; save global registers
        Push $0
        Push $1
        Push $2
        Push $3
        Push $4
        Push $5
        Push $6
        Push $7
        Push $8
        Push $9
        ; store parameter
        Push `${_STRING}`
        Call Asc
        ; restore global register
        Pop $9
        Pop $8
        Pop $7
        Pop $6
        Pop $5
        Pop $4
        Pop $3
        Pop $2
        Pop $1
        Exch $0
    !macroend
 
    ; get parameter
    Pop $1 ; CHAR
    StrCpy $1 $1 1
 
    IntOp $0 0 + 0
    Asc.Do:
        IntFmt $2 %c $0
        System::Call 'kernel32::lstrcmpA(t, t) i(r1,r2) .r3'
        StrCmp $3 "0" Asc.Exit
        IntOp $0 $0 + 1
    StrCmp $0 256 0 Asc.Do
    StrCpy $0 "-1"
 
 
    Asc.Exit:
 
FunctionEnd