LCMapStringというWinAPIを使用すれば簡単に半角文字<->全角文字変換ができます。
#module
#uselib "kernel32.dll"
#cfunc LCMapString "LCMapStringA" int, int, sptr, int, var, int
#cfunc GetUserDefaultLCID "GetUserDefaultLCID"
#const LCMAP_LOWERCASE 0x00000100 ; lower case letters
#const LCMAP_UPPERCASE 0x00000200 ; upper case letters
#const LCMAP_SORTKEY 0x00000400 ; WC sort key (normalize)
#const LCMAP_BYTEREV 0x00000800 ; byte reversal
#const LCMAP_HIRAGANA 0x00100000 ; map katakana to hiragana
#const LCMAP_KATAKANA 0x00200000 ; map hiragana to katakana
#const LCMAP_HALFWIDTH 0x00400000 ; map double byte to single byte
#const LCMAP_FULLWIDTH 0x00800000 ; map single byte to double byte
#const LCMAP_LINGUISTIC_CASING 0x01000000 ; use linguistic rules for casing
#const LCMAP_SIMPLIFIED_CHINESE 0x02000000 ; map traditional chinese to simplified chinese
#const LCMAP_TRADITIONAL_CHINESE 0x04000000 ; map simplified chinese to traditional chinese
; 全角英数字を半角英数字に変換
#defcfunc Half str s1, var v1, int p1
return LCMapString(GetUserDefaultLCID(), LCMAP_HALFWIDTH, s1, -1, v1, p1)
; 半角英数字を全角英数字に変換
#defcfunc Full str s1, var v1, int p1
return LCMapString(GetUserDefaultLCID(), LCMAP_FULLWIDTH, s1, -1, v1, p1)
#global
tmp = "あssDD00"
mes "元の文字列: " + tmp
; バッファを確保
len = Half(tmp, buf, 0)
sdim buf, len
; 変換
ret = Half(tmp, buf, len)
mes "半角に変換: " + buf
; バッファを確保
len = Full(buf, buf2, 0)
sdim buf2, len
; 変換
ret = Full(buf, buf2, len)
mes "全角に変換: " + buf2
stop