On 18.04.2013 23:49, Stanley Daniel de Liver wrote:
>>> I'd like a question like:
>>> The sky color: Blue
>>> I want the use can delete the word blue with Backspace or Canc in
>>> real-temp, or confirm the word Blue. The answer will be stored in a
>>> variable
> Well I'm doing it - in asm. (waits for HK to bite!)
I'm not sure what you really want to do, but I suppose
neither batch nor assembler is the right choice. But
here is a small utility (getkey.exe) which maybe
is useful in a batch version. It reads a character
from keyboard (stdin) and writes 3 bytes to stdout:
the first byte is the read character if it is a-z,
A-Z, 0-9 or BACKSPACE, in all other cases a $ is written.
Byte 2-3 are the hex values of the read character.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
certutil -f -decode %~f0 getkey.exe>nul
set color=blue
set length=4
set <nul /p =Which color: %color%
:loop
if "%color%"=="blue" color 9f
if "%color%"=="red" color c0
if "%color%"=="green" color a0
if "%color%"=="yellow" color e0
if "%color%"=="black" color 0f
if "%color%"=="white" color f0
for /f %%i in ('getkey.exe') do set inp=%%i
if %inp:~0,1% == $ goto :skip
if not %inp:~1,2% == 08 goto nobs
if %length% equ 0 goto :loop
set /a length=length-1
call set color=%%color:~0,%length%%%
set /p =%inp:~0,1%<nul
set <nul /p ="_"
set <nul /p =%inp:~0,1%
goto :loop
:nobs
set color=%color%%inp:~0,1%
set /a length=length+1
set <nul /p =%inp:~0,1%
:skip
if not %inp% == $0d goto :loop
echo.
echo.
del getkey.exe
goto :eof
-----BEGIN CERTIFICATE-----
TVpgAQEAAAAEAAAA//8AAGABAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAoAAAAA4fug4AtAnNIbgBTM0hTmljZSB0byBtZWV0IHNvbWVi
b2R5IHdobyBpcyBzdGlsbCB1c2luZyBET1MsDQpidXQgdGhpcyBwcm9ncmFtIHJl
cXVpcmVzIFdpbjMyLg0KJFBFAABMAQEAUHmlNgAAAAAAAAAA4AAPAQsBBQwAAgAA
AAAAAAAAAADIEAAAABAAAAAgAAAAAEAAABAAAAACAAAEAAAAAAAAAAQAAAAAAAAA
ACAAAAACAAAAAAAAAwAAAAAAEAAAEAAAAAAQAAAQAAAAAAAAEAAAAAAAAAAAAAAA
HBAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAcAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALnRleHQAAAD4AQAAABAAAAACAAAAAgAA
AAAAAAAAAAAAAAAAIAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuEAAAfBAAAIwQAACYEAAA
pBAAALYQAAAAAAAAUhAAAAAAAAAAAAAARBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAEtFUk5FTDMyLmRsbAAAbhAAAHwQAACMEAAAmBAAAKQQAAC2EAAAAAAAAAAA
RXhpdFByb2Nlc3MAAABHZXRTdGRIYW5kbGUAAAAAUmVhZEZpbGUAAAAAV3JpdGVG
aWxlAAAAR2V0Q29uc29sZU1vZGUAAAAAU2V0Q29uc29sZU1vZGUAAOirAAAAPf//
//91ArAaiMK5AgAAAMHgCMDCBIjQJA8EMDw5dgIEJ+LswcAQPAh0GjwwchQ8OXYS
PEFyDDxadgo8YXIEPHp2ArAk6BkAAADBwAjoEQAAAMHACOgJAAAA6wBQ/xUAEEAA
YDHAAwV0EUAAdQ1q9f8VBBBAAKN0EUAAagCNVCQQUmoBg8IQUlD/FQwQQAAJwHUI
agD/FQAQQACDfCQMAXXxYZDDAAAAAAAAMcBgAwXsEUAAdTdq9v8VBBBAAKPsEUAA
aPARQABQ/xUQEEAAgCXwEUAA+f818BFAAP817BFAAP8VFBBAAKHsEUAAagCNVCQQ
UmoBg8IQUlD/FQgQQAAJwHUIagD/FQAQQACDfCQMAXQIx0QkHP////9hkMMAAAAA
AAAAAAAAAAAAAAAAAAAAAA==
-----END CERTIFICATE-----
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
The source:
winmain::
bsr.l getc
cmp.l #-1,r0
bne.b _10
move.b #$1a,r0 ; EOF -> ^Z
_10: move.b r0,r1
move.l #2,r2
_30: lsl.l #8,r0
rol.b #4,r1
move.b r1,r0
and.b #$0f,r0
add.b #'0',r0
cmp.b #'9',r0
bls.b _20
add.b #'a'-'0'-10,r0
_20: dbf.l r2,_30
rol.l #16,r0
cmp.b #$08,r0 ; Backspace
beq.b _50
cmp.b #'0',r0
blo.b _40
cmp.b #'9',r0
bls.b _50
cmp.b #'A',r0
blo.b _40
cmp.b #'Z',r0
bls.b _50
cmp.b #'a',r0
blo.b _40
cmp.b #'z',r0
bls.b _50
_40: move.b #'$',r0
_50: bsr.l putc
rol.l #8,r0
bsr.l putc
rol.l #8,r0
bsr.l putc
br.b exit