home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
thnk11.zip
/
THNKTEST.ASM
next >
Wrap
Assembly Source File
|
1995-03-24
|
7KB
|
337 lines
TITLE THNKTEST.C
.386
.387
INCLUDELIB os2386.lib
INCLUDELIB dde4sbsi.lib
CODE32 SEGMENT DWORD USE32 PUBLIC 'CODE'
CODE32 ENDS
DATA32 SEGMENT DWORD USE32 PUBLIC 'DATA'
DATA32 ENDS
CONST32 SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST32 ENDS
BSS32 SEGMENT DWORD USE32 PUBLIC 'BSS'
BSS32 ENDS
DGROUP GROUP CONST32, BSS32, DATA32
ASSUME CS:FLAT, DS:FLAT, SS:FLAT, ES:FLAT
EXTRN DosQFileMode:PROC
EXTRN DosSetFileMode:PROC
EXTRN _printfieee:PROC
EXTRN VioSetCurPos:PROC
EXTRN VioScrollUp:PROC
EXTRN KbdGetStatus:PROC
EXTRN VioWrtTTY:PROC
EXTRN strlen:PROC
EXTRN _sprintfieee:PROC
EXTRN toupper:PROC
EXTRN KbdCharIn:PROC
EXTRN _exeentry:PROC
DATA32 SEGMENT
@2fstr DB "This is a dummy string",0H,0H
@31string DB "This is a test of the Vi"
DB "oWrtTTY function",0dH,0aH,0H,0H
@STAT1 DB "THNKTEST.C",0H
ALIGN 04H
@STAT2 DB "THNKTEST.C",0H
ALIGN 04H
@STAT3 DB "The file set mode status"
DB " was %li ",0aH,0dH,0H
@STAT4 DB "The file set mode status"
DB " was %li ",0aH,0dH,0H
@STAT5 DB "Echo is on",0aH,0dH,0H
ALIGN 04H
@STAT6 DB "Echo is off",0aH,0dH,0H
ALIGN 04H
@STAT7 DB "%c",0aH,0H
@STAT8 DB "%i",0aH,0H
@STAT9 DB "The length of string one"
DB " is %i",0dH,0aH,0H
ALIGN 04H
@STATa DB "The uppercase response t"
DB "o Y is: %c",0aH,0dH,0H
ALIGN 04H
@STATb DB "The uppercase response t"
DB "o y is: %c",0aH,0dH,0H
DD _exeentry
DATA32 ENDS
BSS32 SEGMENT
ALIGN 04H
COMM dummy:BYTE:010001H
BSS32 ENDS
CONST32 SEGMENT
CONST32 ENDS
CODE32 SEGMENT
;***** 16 void main()
ALIGN 04H
PUBLIC main
main PROC
PUSH EBP
MOV EBP,ESP
SUB ESP,0c0H
;***** 25 bCell[0] = 0x20;
MOV BYTE PTR [EBP-0aH],020H; bCell
;***** 26 bCell[1] = 0x22;
MOV BYTE PTR [EBP-09H],022H; bCell
;***** 27 DosQFileMode("THNKTEST.C" ,&usAttribute, 0) ;
PUSH 0H
LEA EAX,[EBP-010H]; usAttribute
PUSH EAX
PUSH OFFSET FLAT:@STAT1
MOV AL,03H
CALL DosQFileMode
;***** 28 i = DosSetFileMode("THNKTEST.C",usAttribute, 0) ;
PUSH 0H
PUSH DWORD PTR [EBP-010H]; usAttribute
PUSH OFFSET FLAT:@STAT2
MOV AL,03H
CALL DosSetFileMode
MOV [EBP-08H],EAX; i
;***** 29 printf("The file set mode status was %li \n\r",i) ;
PUSH DWORD PTR [EBP-08H]; i
MOV EAX,OFFSET FLAT:@STAT3
SUB ESP,04H
CALL _printfieee
;***** 30 Kbdinfo.cb = sizeof (Kbdinfo) ;
MOV WORD PTR [EBP-01cH],0aH; Kbdinfo
;***** 31 VioSetCurPos(5,5,0);
PUSH 0H
PUSH 05H
PUSH 05H
MOV AL,03H
CALL VioSetCurPos
;***** 32 VioScrollUp(0,0,0xffff,0xffff,0xffff,bCell,0);
PUSH 0H
LEA EAX,[EBP-0aH]; bCell
PUSH EAX
PUSH 0ffffH
PUSH 0ffffH
PUSH 0ffffH
PUSH 0H
PUSH 0H
MOV AL,07H
CALL VioScrollUp
;***** 33 printf("The file set mode status was %li \n\r",i) ;
PUSH DWORD PTR [EBP-08H]; i
MOV EAX,OFFSET FLAT:@STAT4
SUB ESP,04H
CALL _printfieee
;***** 34 KbdGetStatus(&Kbdinfo,0);
PUSH 0H
LEA EAX,[EBP-01cH]; Kbdinfo
PUSH EAX
MOV AL,02H
CALL KbdGetStatus
ADD ESP,058H
;***** 35 if (Kbdinfo.fsMask & KEYBOARD_ECHO_ON)
XOR EAX,EAX
MOV AX,[EBP-01aH]; Kbdinfo
TEST AL,02H
JE BLBL1
;***** 36 VioWrtTTY("Echo is on\n\r", 12, 0) ;
PUSH 0H
PUSH 0cH
PUSH OFFSET FLAT:@STAT5
MOV AL,03H
CALL VioWrtTTY
ADD ESP,0cH
JMP BLBL2
ALIGN 04H
BLBL1:
;***** 37 else
;***** 38 VioWrtTTY("Echo is off\n\r", 13, 0) ;
PUSH 0H
PUSH 0dH
PUSH OFFSET FLAT:@STAT6
MOV AL,03H
CALL VioWrtTTY
ADD ESP,0cH
BLBL2:
;***** 39 a = getch() ;
CALL getch
MOV [EBP-01H],AL; a
;***** 40 for (i = 0 ;i < 5; i++)
MOV DWORD PTR [EBP-08H],0H; i
ALIGN 04H
BLBL3:
CMP DWORD PTR [EBP-08H],05H; i
JGE BLBL4
;***** 41 printf("%c\n",a) ;
XOR EAX,EAX
MOV AL,[EBP-01H]; a
PUSH EAX
MOV EAX,OFFSET FLAT:@STAT7
SUB ESP,04H
CALL _printfieee
ADD ESP,08H
MOV EAX,[EBP-08H]; i
INC EAX
MOV [EBP-08H],EAX; i
JMP BLBL3
ALIGN 04H
BLBL4:
;***** 42 i = strlen(string);
MOV EAX,OFFSET FLAT:@31string
CALL strlen
MOV [EBP-08H],EAX; i
;***** 43 VioWrtTTY(string, i, 0) ;
PUSH 0H
MOV EAX,[EBP-08H]; i
PUSH EAX
PUSH OFFSET FLAT:@31string
MOV AL,03H
CALL VioWrtTTY
;***** 44 printf("%i\n",strlen(string));
MOV EAX,OFFSET FLAT:@31string
SUB ESP,04H
CALL strlen
ADD ESP,04H
PUSH EAX
MOV EAX,OFFSET FLAT:@STAT8
SUB ESP,04H
CALL _printfieee
;***** 45 sprintf(varstring,"The length of string one is %i\r\n",strlen(string));
MOV EAX,OFFSET FLAT:@31string
SUB ESP,04H
CALL strlen
ADD ESP,04H
PUSH EAX
MOV EDX,OFFSET FLAT:@STAT9
LEA EAX,[EBP-06cH]; varstring
SUB ESP,08H
CALL _sprintfieee
;***** 46 VioWrtTTY(varstring,strlen(varstring),0);
PUSH 0H
LEA EAX,[EBP-06cH]; varstring
SUB ESP,04H
CALL strlen
ADD ESP,04H
PUSH EAX
LEA EAX,[EBP-06cH]; varstring
PUSH EAX
MOV AL,03H
CALL VioWrtTTY
;***** 47 a = 'Y' ;
MOV BYTE PTR [EBP-01H],059H; a
;***** 48 a = toupper(a) ;
XOR EAX,EAX
MOV AL,[EBP-01H]; a
CALL toupper
TEST EAX,0400000H
MOV [EBP-01H],AL; a
;***** 49 sprintf(varstring1,"The uppercase response to Y is: %c\n\r",a) ;
XOR EAX,EAX
MOV AL,[EBP-01H]; a
PUSH EAX
MOV EDX,OFFSET FLAT:@STATa
LEA EAX,[EBP-0bcH]; varstring1
SUB ESP,08H
CALL _sprintfieee
;***** 50 VioWrtTTY(varstring1,strlen(varstring1),0) ;
PUSH 0H
LEA EAX,[EBP-0bcH]; varstring1
SUB ESP,04H
CALL strlen
ADD ESP,04H
PUSH EAX
LEA EAX,[EBP-0bcH]; varstring1
PUSH EAX
MOV AL,03H
CALL VioWrtTTY
;***** 51 a = 'y' ;
MOV BYTE PTR [EBP-01H],079H; a
;***** 52 a = toupper(a) ;
XOR EAX,EAX
MOV AL,[EBP-01H]; a
CALL toupper
TEST EAX,0400000H
MOV [EBP-01H],AL; a
;***** 53 sprintf(varstring,"The uppercase response to y is: %c\n\r",a) ;
XOR EAX,EAX
MOV AL,[EBP-01H]; a
PUSH EAX
MOV EDX,OFFSET FLAT:@STATb
LEA EAX,[EBP-06cH]; varstring
SUB ESP,08H
CALL _sprintfieee
;***** 54 VioWrtTTY(varstring,strlen(varstring),0) ;
PUSH 0H
LEA EAX,[EBP-06cH]; varstring
SUB ESP,04H
CALL strlen
ADD ESP,04H
PUSH EAX
LEA EAX,[EBP-06cH]; varstring
PUSH EAX
MOV AL,03H
CALL VioWrtTTY
ADD ESP,05cH
;***** 55 }
BLBL5:
ADD ESP,04H
LEAVE
RET
main ENDP
;***** 57 char getch(void)
ALIGN 04H
PUBLIC getch
getch PROC
PUSH EBP
MOV EBP,ESP
SUB ESP,0cH
;***** 60 KbdCharIn( &Kbci,IO_WAIT,0);
PUSH 0H
PUSH 0H
LEA EAX,[EBP-0cH]; Kbci
PUSH EAX
MOV AL,03H
CALL KbdCharIn
ADD ESP,0cH
;***** 61 return Kbci.chChar;
MOV AL,[EBP-0cH]; Kbci
JMP BLBL6
ALIGN 04H
;***** 62 }
;***** 62
BLBL6:
LEAVE
RET
getch ENDP
CODE32 ENDS
END